Несоответствие типов при обращении к элементам матрицы - C (СИ)
Формулировка задачи:
Программа правильно работала с типом Int, но в лабе нужно дробные числа использовать в матрицах
переделал прогу под float и теперь выдает ошибку invalid types 'float[int]' for array subscript
код:
#include "stdio.h"
#include "stdlib.h"
#include "locale.h"
int main(void)
{
float *A, *B, *C, N,M,N1,M1;
int i, j, k;
setlocale(0, "RUS");
N = 10;
/*int **A = (int**)malloc(N * sizeof(int*));
int **B = (int**)malloc(N * sizeof(int*));
int **C = (int**)malloc(N * sizeof(int*));
for (i = 0; i < N; i++)
{
A[i] = (int*)malloc(N * sizeof(int));
B[i] = (int*)malloc(N * sizeof(int));
C[i] = (int*)malloc(N * sizeof(int));
}*/
printf("Введите разсерность матрицы A(число строк и столбцов через пробел): ");
scanf("%f %f", &N, &M);
printf("Введите количество строк второй матрицы: ");
scanf("%f %f", &N1, &M1);
if (M != N1)
printf("Эти матрицы невозможно перемножить");
else
{
if((A=(float*)malloc(N*M*sizeof(float)))==0)
{
printf("Ошибка распределения памяти.\n");
return 1;
}
if((B=(float*)malloc(M*M1*sizeof(float)))==0)
{
free((void*)A);
printf("Ошибка распределения памяти.\n");
return 1;
}
if((C=(float*)malloc(N*M*sizeof(float)))==0)
{
free((void*)A);
free((void*)B);
printf("Ошибка распределения памяти.\n");
return 1;
}
printf("Заполните матрицу A:\n");
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
{
scanf("%f", &A[i][j]);
}
printf("Заполните матрицу B:\n");
for (i = 0; i < N1; i++)
for (j = 0; j < M1; j++)
{
scanf ("%f", &B[i][j]);
}
for (i = 0; i < N; i++)
for (j = 0; j < M1; j++)
{
C[i][j] = 0;
for (k = 0; k < M; k++)
C[i][j] += A[i][k] * B[k][j];
}
printf("\nВид матрицы А\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
printf("%f ", A[i][j]);
}
printf("\n");
printf("----");
printf("\n");
printf("\nМатрица B\n");
for (i = 0; i < N1; i++)
{
for (j = 0; j < M1; j++)
printf("%f ", B[i][j]);
}
printf("\n");
printf("----");
printf("\n");
printf("\nПри умножении получаем матрицу порядка %fx%f\n",N,M1);
for (i = 0; i < N; i++)
{
for (j = 0; j < M1; j++)
printf("%f ", C[i][j]);
printf("\n");
}
FILE *s;
s = fopen ("output.txt", "wt");
if (s)
{
for (i = 0; i < N; i++)
{
for (j = 0; j < M1; j++)
fprintf(s,"%f ", C[i][j]);
fprintf(s,"\n");
}
}
fclose(s);
printf("\nЗначения матрицы сохранены \n");
return 0;
}
}Решение задачи: «Несоответствие типов при обращении к элементам матрицы»
textual
Листинг программы
float *A, *B, *C, N,M,N1,M1;
Объяснение кода листинга программы
- Объявляются указатели на матрицы A, B, C, N, M, N1, M1.
- Задаются значения переменных N, M, N1, M1.
- Создаются матрицы A, B, C размером N x M.
- Вычисляются значения матрицы C по формуле C = A * B.
- Выводится результат на экран.