Массивы, Указатели

  • Автор темы krotman
  • Дата начала
K

krotman

#1
Дана целочисленная квадратная матрица.
Написать программу, выполняющую следующие действия в виде функций с динамическим распределением памяти.
1) Для заданной матрицы размером 8 на 8 найти такие k, что k-ая строка матрицы совпадает с k-м столбцом.
2) Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

C++:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#define SIZE 3
int** input()
{
int **a;
int i,j;
a=(int**)malloc(SIZE*sizeof(int*));
for(i=0; i<SIZE; ++i)
{
a[i]=(int*)malloc(SIZE*sizeof(int));
}
printf("vvedite element matrici\n");
for(i=0; i<SIZE; ++i)
{
for(j=0; j<SIZE; ++j)
{
printf("a[%d][%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
return a;
}
void comp(int i)
{int j;
int **a;
for (j=0;j<SIZE;j++)
{if (a[i][j]!=a[j][i])return;
printf("sovpadeni'a v %d stroke i stolbce\n",i+1);
}}
void sum(int i)
{  int **a;
int j, result=0, fex=0;
for (j=0;j<SIZE;j++)
{result+=a[i][j];
if (a[i][j]<0) fex=1;
}
if (fex==1) printf("otricatel'ni element est' v stroke %d summa elementov= %d\n",i+1,result);
}
void out(int **a)
{
int i,j;
printf("matrica\n");
for(i=0; i<SIZE; ++i)
{
for(j=0; j<SIZE; ++j)
printf("%8d",a[i][j]);
printf("\n");
}
}
int main()
{
clrscr();
int **a= input();
out(a);
int i;
for(i=0; i<SIZE; ++i)
{
comp(i);
sum(i);
free(a[i]);
}
free(a);
getch();
return 0;
}
вот мой текст программы, но работает с ошибкой(как я подозреваю функции sum, comp работают не с массивом который вводим с клавы, а скакимто левым массивом)
Может кто исправить или хотябы влоб указать ощибки, ну или то и то сделать)
 
W

workouter

#2
Дана целочисленная квадратная матрица.
Написать программу, выполняющую следующие действия в виде функций с динамическим распределением памяти.
1) Для заданной матрицы размером 8 на 8 найти такие k, что k-ая строка матрицы совпадает с k-м столбцом.
2) Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

C++:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#define SIZE 3
int** input()
{
int **a;
int i,j;
a=(int**)malloc(SIZE*sizeof(int*));
for(i=0; i<SIZE; ++i)
{
a[i]=(int*)malloc(SIZE*sizeof(int));
}
printf("vvedite element matrici\n");
for(i=0; i<SIZE; ++i)
{
for(j=0; j<SIZE; ++j)
{
printf("a[%d][%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
return a;
}
void comp(int i)
{int j;
int **a;
for (j=0;j<SIZE;j++)
{if (a[i][j]!=a[j][i])return;
printf("sovpadeni'a v %d stroke i stolbce\n",i+1);
}}
void sum(int i)
{  int **a;
int j, result=0, fex=0;
for (j=0;j<SIZE;j++)
{result+=a[i][j];
if (a[i][j]<0) fex=1;
}
if (fex==1) printf("otricatel'ni element est' v stroke %d summa elementov= %d\n",i+1,result);
}
void out(int **a)
{
int i,j;
printf("matrica\n");
for(i=0; i<SIZE; ++i)
{
for(j=0; j<SIZE; ++j)
printf("%8d",a[i][j]);
printf("\n");
}
}
int main()
{
clrscr();
int **a= input();
out(a);
int i;
for(i=0; i<SIZE; ++i)
{
comp(i);
sum(i);
free(a[i]);
}
free(a);
getch();
return 0;
}
вот мой текст программы, но работает с ошибкой(как я подозреваю функции sum, comp работают не с массивом который вводим с клавы, а скакимто левым массивом)
Может кто исправить или хотябы влоб указать ощибки, ну или то и то сделать)
Корректно работают только две функции input() и out(). Функции sum() и comp() не работают по одной простой причине - для них не виден исходный массив. Если в функцию out передается адрес массива, то в функции sum() и comp() адрес массива не передаётся, а как работать с массивом, который не доступен. Вам необходимо разобраться с тем как работают функции. А именно, с областью действия функции в С++.