Определить сумму элементов в тех столбцах матрицы, которые не содержат отрицательных элементов - C (СИ) (70323)
Формулировка задачи:
Кто знает как написать такую программу,вот текст задания:
Дана целочисленная квадратная матрица. Определить:
1) сумму элементов в тех столбцах, которые не содержат отрицательных
элементов;
2) минимум среди сумм модулей элементов диагоналей, параллельных
побочной диагонали матрицы.
Язык програамирования СИ..Очень прошу,с первой частью проблем нет,со 2-й путаюсь=(
если у кого есть время...
Решение задачи: «Определить сумму элементов в тех столбцах матрицы, которые не содержат отрицательных элементов»
textual
Листинг программы
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
const int k=3;
void sum (int mas[k][k]);
void max(int mas[k][k]);
int main(){
int arr[k][k];
int i, j;
for ( i = 0; i < k; i++ ){
for ( j = 0; j < k; j++ ){
printf("arr[%d][%d] = ", i+1, j+1);
scanf("%d", &arr[i][j]);
}
}
printf("\n-----------------------\n");
for ( i = 0; i < k; i++ )
for ( j = 0; j < k; j++ )
printf( ( j < (k-1) ) ? "%d\t" : "%d\n", arr[i][j]);
printf("\n Summa elementov v teh strokah,kotorye ne soderjat otricatelnyh elementov:");
sum(arr);
printf("\n \n Maximum sredi summ elementov diagonalej,parallelnyh glavnoj diagonali matricy: ");
max(arr);
fflush(stdin);
char c=getchar();
return 0;
}
void sum(int mas[k][k])
{
int i,j,a,sum,n;
for (i=0;i<k;i++)
{
a=0;
for (j=0;j<k;j++)
if (mas[i][j]<0) a++;
if (a==0)
{
sum=0;
for (n=0;n<k;n++)
sum+=mas[i][n];
printf("\n stroka %d: %d",(i+1),sum);
}
}
}
int sumDiagonal (int matrix[k][k], int currentDiagonal)
{
int sum = 0;
for(int i = 0, j = currentDiagonal; i < k; ++i)
{
sum += abs(matrix[j][i]);
--j;
if(j < 0)
j = k - 1;
}
return sum;
}
void max(int matrix[k][k])
{
int max = sumDiagonal(matrix, 0);
for(int i = 1, cnt; i < k; ++i)
{
cnt = sumDiagonal(matrix, i);
if(cnt > max)
max = cnt;
}
printf("%d\n",max);
}
Объяснение кода листинга программы
Код представлен на языке C и выполняет следующие действия:
- Объявление переменных и функций
const int k=3- определяет размер матрицы (в данном случае 3x3)void sum (int mas[k][k]);- функция для вычисления суммы элементов в строке матрицыvoid max(int mas[k][k]);- функция для поиска максимального значения в строке матрицы
- Ввод данных
int arr[k][k];- объявление матрицы для хранения данныхint i, j;- переменные для индексации матрицыfor ( i = 0; i < k; i++ )- цикл для заполнения матрицы значениямиfor ( j = 0; j < k; j++ )- цикл для заполнения матрицы значениямиprintf(arr[%d][%d] =, i+1, j+1);- печать индекса элемента матрицыscanf(%d, &arr[i][j]);- ввод значения в элемент матрицы
- Вывод данных
printf(\n-----------------------\n);- печать разделителяfor ( i = 0; i < k; i++ )- цикл для вывода элементов матрицыfor ( j = 0; j < k; j++ )- цикл для вывода элементов матрицы( j < (k-1) ) ?%d\t:%d\n` - условие для форматирования вывода (табуляция или перенос строки)printf( ( j < (k-1) ) ?%d\t:%d\n, arr[i][j]);- печать элемента матрицы
- Вычисление суммы элементов в строке матрицы
printf(\n Summa elementov v teh strokah,kotorye ne soderjat otricatelnyh elementov:);- печать заголовкаsum(arr);- вызов функции для вычисления суммы
- Вычисление максимального значения в строке матрицы
printf(\n \n Maximum sredi summ elementov diagonalej,parallelnyh glavnoj diagonali matricy:);- печать заголовкаmax(arr);- вызов функции для вычисления максимального значения
- Вывод результата
fflush(stdin);- очистка буфера вводаchar c=getchar();- получение символа из стандартного вводаreturn 0;- завершение программы