Ошибка с выводом значений матр. при использовании malloc - C (СИ)
Формулировка задачи:
Не получается организовать правильный ввод и вывод. Пример ввода: N=2; (1,2,3,4) Результат: (3,4,3,4).
Компилятор никаких проблем не видит.
Долго возился с указателями, возможно где-то накосячил. На остальные ошибки в коде просьба внимание не обращать. Заранее спасибо за помощь!
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- //Константы
- #define M 2
- #define E 0
- void Svod(int N,int *a) //+
- {
- int z;
- int *c;
- for (z=0;z<N;z++)
- {
- c=(a+(N-1)+z);
- scanf("%d",c);
- }
- }
- //Ввод матрицы
- void vvod(int A[][E],int N,int *a) //+
- {
- int i;
- for (i=0;i<M;i++)
- {
- Svod(N,a);
- }
- }
- void vivodS(int N,int *a)
- {
- int j;
- int *c;
- for (j=0;j<N;j++)
- {
- c=a+(N-1)+j;
- printf("%d",*c);
- }
- }
- //Вывод матрицы
- void vivod(int A[][E],int N,int *a)
- {
- int i;
- for (i=0;i<M;i++)
- {
- vivodS(N,a);
- }
- }
- //Сколярное произведение
- int proizv(int A[E],int B[E],int N,int a)
- {
- int i,s;
- s=0;
- for (i=0;i<=N-1;i++)
- s=s+(*(A+i+a))*(*(B+i+a));
- return s;
- }
- //Проверка условия задачи
- int proverka(int A[][E],int N,int a)
- {
- int i,j,flag;
- i=0;
- j=i+1;
- flag=0; //Установка флага
- while ((i<=M-1)&&(proizv(A[i],A[i],N,a)==1)) //A[i]*A[i]
- {
- i++;
- }
- if (i==M) //A[i]*A[j]; i<>j
- {
- i=0;
- while ((i<=M-2)&&(proizv(A[i],A[j],N,a)==0))
- {
- j=i+1;
- while ((j<=M-1)&&(proizv(A[i],A[j],N,a)==0)){j++;}
- i=i+1;
- }
- if (i>M-2)flag=1;
- }
- return (flag);
- }
- int main()
- {
- int N;
- int *a; //Указатель
- printf("Введите число столбцов");
- scanf("%i",&N);
- int A[M][E];
- a = (int*) malloc(M*N*sizeof(int)); //Указатель "а" указывает на начальный элемент выделенной памяти размера установленного массива
- vvod(A,N,a); //передаем 'a' как указатель
- //if (proverka(A,N,a)==1)printf("Условие выполнено");
- // else
- // {
- // printf("Условие не выполнено");
- // }
- vivod(A,N,a);
- free(a);
- return 0;
- }
Решение задачи: «Ошибка с выводом значений матр. при использовании malloc»
textual
Листинг программы
- void input_a(int *a, int rows, int cols)
- {
- for(i=0; i<rows; i++)
- for(j=0; j<cols; j++)
- scanf("%d", (a+i*cols+j));
- }
- void print_a(int *a, int rows, int cols)
- {
- for(i=0; i<rows; i++)
- for(j=0; j<cols; j++)
- printf("%d", *(a+i*cols+j));
- }
- int main()
- {
- int rows, cols;
- int *a;
- printf("Введите число строк и столбцов через пробел");
- scanf("%d %d" ,&rows, &cols);
- a = (int*) malloc(rows * cols * sizeof(int)); //Указатель "а" указывает на начальный элемент выделенной памяти размера установленного массива
- input_a(a, rows, cols); //передаем 'a' как указатель
- print_a(a, rows, cols);
- free(a);
- return 0;
- }
Объяснение кода листинга программы
- Ввод данных в матрицу с помощью функции input_a.
- Вывод данных из матрицы с помощью функции print_a.
- Выделение памяти под матрицу с помощью функции malloc.
- Освобождение памяти с помощью функции free.
- Компиляция кода в язык C.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д