Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой - 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) Переходим к следующей итерации цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д