Найти сумму элементов в тех столбцах матрицы, которые не содержат отрицательных элементов - C (СИ) (74305)
Формулировка задачи:
Задача:
Дана целочисленная квадратная матрица. Определить:
1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов;
2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.
Код работает как надо.
Теперь этот код с указателями, вот тут у меня проблемы. Читаю книжку и на примеры смотрю, мне кажется что, что-то понимаю, а на практике сложно.
В if поставил указатели, не правильно сравнивает. Укажите на ошибки. Спасибо
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <locale>
#define n 3
int main()
{
int i,j,a[n][n],l,min;
setlocale(LC_ALL,"russian_russia.1251");
srand(time(NULL));
printf("Матрица\n\n");
//****************************
for (i=0;i<n;i++)
{ //****************************Вывод массива
for (j=0;j<n;j++)
{
a[i][j]=rand()%10-2;
if (a[i][j]<0) printf("%d ",a[i][j]);
else
printf(" %d ",a[i][j]);
}
printf("\n");
}
//************************************
//****************************
printf("\nCчитает столбцы с положительными элементами\n");
for(int j=0;j<n;j++)
{ //****************************Сумма столбцов
int p=0;
int jsum=0;
for(i=0;i<n;i++)
if (a[i][j]>-1) p++;
if(p==n)
{
for(int k=0;k<n;k++)
jsum+=a[k][j];
}
printf("\nSumma stolbca # %d = %d",j+1,jsum);
}
//************************************
min=1000;
//************************************
for(l=0;l<2*n-1;l++)
{ //****************************Минимальный элемент побочных диагоналей
if (l<n)
{
for(i=0;i<l;i++)
for(j=0;j<l;j++)
{
if (min>a[i][j]) min=a[i][j];
}
}
else
{
for(i=l-n+1;i<n;i++)
for(j=l-n+1;j<n;j++)
{
if (min>a[i][j]) min=a[i][j];
}
}
}
printf("\n\nМинимальный элемент параллельных диагоналей, побочной диагонали = %d",min);
return 0;
}#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <locale>
#define n 3
//#define m 3
int main()
{
int l,min,i,j,a[n][n];
int *pa;
pa=&a[0][0];/* указателю pa присваиваем адрес нулевого элемента матрицы pa[n][n] */
setlocale(LC_ALL,"russian_russia.1251");
srand(time(NULL));
printf("\n");
for (i=0;i<n;i++)
{ //****************************Вывод массива
for (j=0;j<n;j++)
{
*pa/*a[i][j]*/=rand()%10-2;
if (*pa/*a[i][j]*/<0) printf("%d ",*pa/*a[i][j]*/);
else
printf(" %d ",*pa/*a[i][j]*/);
pa++;
}
printf("\n");
}
printf("\nВыводит сумму элементов положительных столбцов\n");
pa-=n*n;/* указателю pa присваиваем первоначальный адрес */
pa=&a[0][0];
for(j=0;j<n;j++)
{ //****************************Сумма столбцов
int p=0;
int jsum=0;
for(i=0;i<n;i++)
if (*pa/*a[i][j]*/>-1) p++; pa++;
if(p==n)
{
for(int k=0;k<n;k++)
jsum+=a[k][j];
}
printf("\nСумма элементов # %d столбца = %d",j+1,jsum);
pa++;
}
pa-=n*n;/* указателю pa присваиваем первоначальный адрес */
min=100;
for(l=0;l<2*n-1;l++)
{ //****************************Минимальный элемент побочных диагоналей
if (l<n)
{
for(i=0;i<l;i++)
for(j=0;j<l;j++)
{
if (min>*pa/*a[i][j]*/) min=*pa/*a[i][j]*/; pa++;
}
}
else
{
for(i=l-n+1;i<n;i++)
for(j=l-n+1;j<n;j++)
{
if (min>*pa/*a[i][j]*/) min=*pa/*a[i][j]*/; pa++;
}
}
}
printf("\n\nМинимальный элемент из параллельных диагоналей, побочной диагонали = %d",min);
return 0;
}Решение задачи: «Найти сумму элементов в тех столбцах матрицы, которые не содержат отрицательных элементов»
textual
Листинг программы
#include <locale.h>