Ошибка с выводом значений матр. при использовании 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д