Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой - C (СИ)
Формулировка задачи:
Здравствуйте, очень нужна помощь с написанием программы, для меня тема указателей очень больная, так как я не совсем понимаю ее. Суть задания какова:
В каждой строке прямоугольной матрицы, элементами которой являются целые положительные числа, определить сумму нечетных элементов и найти строку с минимальной их суммой.
Программу надо написать с использованием указателей, у меня пока получилось только вывод случайной матрицы, а вот с подсчетом суммы нечетных чисел как-то не очень, выдает ошибку в строке 41 :
error C2296: %: недопустимо, левый операнд имеет тип "double"
Сам код программы:
Буду признателен за помощь!
#include "stdio.h" #include "math.h" #include "conio.h" #include "windows.h" void input_matr(double **x,int m,int n,char *msg); void output_matr(double **x,int m,int n,char *msg); void wait_press_key(char *msg); int main() { double **d,s; int i,j,md,nd; //Подключение кириллицы в консольном окне SetConsoleOutputCP(1251); SetConsoleCP(1251); //Ввод размеров матрицы printf("\nВведите размеры матрицы md, nd (на количество строк и столбцов ограничений нет)\n"); scanf_s("%d%d",&md,&nd); //Создаем динамическую матрицу d с размерами md*nd*sizeof(double) //на базе указателя на указатель **d. d=(double **)malloc(md*sizeof(double *));//Создается массив указателей, //в котором каждый элемент массива d[i] - это указатель на поле double, //или указатель на одномерный массив double. for(i=0;i<md;i++) //Создаются строки матрицы как одномерные массивы d[i]=(double *)malloc(nd*sizeof(double)); input_matr(d,md,nd,"Ввод элементов матрицы d\n"); output_matr(d,md,nd,"Исходная матрица d\n"); wait_press_key("\nДля продолжения программы нажмите любую клавишу\n"); //В функции input_matr и output_matr матрицы передаются, как массив указателей //(матрица с), и, как указатель на указатель (матрица d). //Далее используется функция, которая обрабатывает строки матрицы как //одномерные массивы. Определяем сумму нечетных чисел каждой строки. for (i = 0; i < nd; i++) { s=0; for (j = 0; j<md; j++) if (d[i][j] % 2) s+=d[i][j]; printf("%d ", s); } wait_press_key("\nДля продолжения программы нажмите любую клавишу\n"); } void input_matr(double **x,int m,int n,char *msg) { int i,j; srand((unsigned int) 100); //запускаем генератор псевдослучайных чисел printf(msg); for(i=0; i<m;i++) for(j=0; j<n;j++) //scanf("%lf",(*(x+i)+j)); //ввод матрицы с клавиатуры x[i][j]=rand()%100; //заполнение случайными числами } //-------------------------------Печать матрицы void output_matr(double **x,int m,int n,char *msg) { int i,j; printf(msg); for(i=0; i<m;i++) for(j=0; j<n;j++) printf("%7.2lf%c",x[i][j],j==n-1?'\n':' '); } //-------------------------------Определение суммы в строке матрицы void wait_press_key(char *msg) { printf(msg); _getch(); }
Ошибку выдает в строке 40, случайно не ту написал.
Решение задачи: «Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой»
textual
Листинг программы
for (i = 0; i < md; i++) { s=0; for (j = 0; j<nd; j++) { if (d[i][j] % 2 ) s+=d[i][j]; printf("%d %d %d\n",d[i][j],d[i][j]%2,s); } printf("%d ", s); }
Объяснение кода листинга программы
Вывод сумм нечетных элементов матрицы d и их порядковые номера: 1) Инициализация переменной s, которая будет хранить сумму нечетных элементов. 2) Перебор всех элементов матрицы d. 3) Проверка на нечетность элемента d[i][j] с помощью оператора % (остаток от деления). 4) Если элемент нечетный, то прибавляем его к переменной s. 5) Выводим на экран значение элемента d[i][j], его нечетность и текущую сумму s. 6) Выводим на экран текущую сумму s. 7) Переходим к следующей итерации цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д