Вычисление элементов матрицы оформить в подпрограмме - C (СИ)
Формулировка задачи:
Написал простенькую прогу с вычислением всех элементов в матрице. Но нужно чтобы вычисления производились в подпрограмме, а результат возвращался в основную программу. Как это сделать? Подскажите, плз.
Листинг (язык Си):
Срочно нужно.
#include <stdio.h>
main ()
{
double m[100][100],sum;
int n,a,b;
printf("Vvod n\n"); //ввод значений
scanf("%d",&n);
for(a=0;a<n;a++)
{
for (b=0;b<n;b++)
{printf("Vvod A[%d][%d]\n",a+1,b+1);
scanf("%lf",&m[a][b]);}
}
for(b=0;b<n;b++) //демонстрация матрицы
{
for (a=0;a<n;a++)
{printf("%lf\t",m[a][b]);}
printf("\n");
}
for(b=0;b<n;b++) //вычисление суммы всех элементов
{
for (a=0;a<n;a++)
sum+=m[a][b];
}
printf("\nREZ:%lf",sum);
}Решение задачи: «Вычисление элементов матрицы оформить в подпрограмме»
textual
Листинг программы
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
double summa(double **arr, int n)
{
double sum = 0;
for(int i = 0; i < n; ++i) //âû÷èñëåГ*ГЁГҐ ñóììû ГўГ±ГҐГµ ýëåìåГ*òîâ
{
for (int j = 0; j < n; ++j)
sum += arr[i][j];
}
return sum;
}
main ()
{
int n;
printf("Vvod n\n"); //ââîä Г§Г*Г*Г·ГҐГ*ГЁГ©
scanf("%d",&n);
double **arr = (double **)malloc(n*sizeof(double*));
if(arr)
{
for(int i = 0; i < n; ++i)
{
arr[i] = (double*)malloc(n*sizeof(int));
if(!arr[i])
{
for(int i = 0; i < n; ++i)
free(arr[i]);
return 0;
}
for (int j = 0; j < n; ++j)
{
printf("Vvod A[%d][%d]\n",i+1,j+1);
scanf("%lf",&arr[i][j]);
}
}
}
for(int i = 0; i < n; ++i) //äåìîГ*Г±ГІГ°Г*Г¶ГЁГї Г¬Г*òðèöû
{
for (int j = 0; j < n; ++j)
printf("%lf\t",arr[i][j]);
printf("\n");
}
/*for(b=0;b<n;b++) //âû÷èñëåГ*ГЁГҐ ñóììû ГўГ±ГҐГµ ýëåìåГ*òîâ
{
for (a=0;a<n;a++)
sum+=m[a][b];
}*/
double sum = summa(arr, n);
printf("\nREZ:%lf",sum);
getch();
}
Объяснение кода листинга программы
- В функции
mainпрограмма запрашивает у пользователя ввод размера матрицы с помощью функцииprintfи функцииscanf. - Затем программа выделяет память под матрицу с помощью функции
malloc. - Если память успешно выделена, программа запрашивает у пользователя ввод всех элементов матрицы с помощью функции
printfи функцииscanf. - После ввода всех элементов программа выводит матрицу на экран с помощью функции
printf. - Затем программа вычисляет сумму всех элементов матрицы с помощью функции
summaи выводит результат на экран с помощью функцииprintf. - В функции
summaпрограмма инициализирует переменнуюsumзначением 0. - Затем программа перебирает все элементы матрицы с помощью двух вложенных циклов
for. - Внутри циклов происходит суммирование элементов матрицы с помощью оператора
+=. - После завершения циклов функция возвращает значение переменной
sum. - В функции
mainпрограмма вычисляет сумму всех элементов матрицы с помощью функцииsummaи выводит результат на экран с помощью функцииprintf. - Затем программа выводит на экран строку
REZ:и ожидает ввода пользователем команды завершения программы с помощью функцииgetch.