Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
1

Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой

08.03.2016, 14:04. Просмотров 700. Ответов 21
Метки нет (Все метки)

Здравствуйте, очень нужна помощь с написанием программы, для меня тема указателей очень больная, так как я не совсем понимаю ее. Суть задания какова:
В каждой строке прямоугольной матрицы, элементами которой являются целые положительные числа, определить сумму нечетных элементов и найти строку с минимальной их суммой.
Программу надо написать с использованием указателей, у меня пока получилось только вывод случайной матрицы, а вот с подсчетом суммы нечетных чисел как-то не очень, выдает ошибку в строке 41 :
error C2296: %: недопустимо, левый операнд имеет тип "double"
Сам код программы:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#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();
}
Буду признателен за помощь!

Добавлено через 5 минут
Ошибку выдает в строке 40, случайно не ту написал.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2016, 14:04
Ответы с готовыми решениями:

Обнулить строку матрицы с минимальной суммой элементов
В двумерном N*K массиве целых чисел обнулить строку с минимальной суммой элементов

Найти произведение (число) строки с минимальной суммой элементов матрицы А на той столбец матрицы С, сумма элементов кот
Дано матрица A размерности M на N и матрица С размерности N на K. Найти произведение (число) строки...

Определить индекс строки матрицы с минимальной суммой элементов
Дан вещественный массив A. Определить индекс строки с минимальной суммой элементов. Переставить...

Поменять местами строку матрицы с максимальной суммой со строкой с минимальной
Поменять местами строку с максимальной суммой со строкой с минимальной. Добавлено через 56 минут...

Найти строку матрицы с максимальной суммой модулей элементов
Помогите плиз, матрицу ввел а как искать все это не знаю &quot; Среди тех строк целочисленной матрицы...

21
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 14:05 2
Цитата Сообщение от Satros1205 Посмотреть сообщение
являются целые положительные числа
откуда в этом коде слово double?
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 14:14  [ТС] 3
Цитата Сообщение от MansMI Посмотреть сообщение
откуда в этом коде слово double?
Видимо я не совсем правильно понял эту часть задания и поэтому использовал этот тип. Тогда необходимо для массива использовать тип int ?
0
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 14:16 4
unsigned даже
0
08.03.2016, 14:16
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 15:00  [ТС] 5
Хорошо, эту ошибку я понял, но как быть с суммой нечетных элементов каждой строки? у меня по прежнему ошибка.

Добавлено через 41 минуту
C
1
2
3
4
5
6
7
8
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 ", s);
   }
Вот так вот исправил, ошибку не выдает, но вместо суммы пишет нули.
0
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 15:23 6
output_matr чего показывает?
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 15:29  [ТС] 7
Цитата Сообщение от MansMI Посмотреть сообщение
output_matr чего показывает?
в плане показывает? если вы имеете ввиду,что она делает, то она выводит матрицу на экран.
Вот собственно скриншот как сейчас работает программа, раньше на этапе суммирования она выдавала ошибку, после моего исправления просто печатает нули, но уже без ошибки.
0
Миниатюры
Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой  
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 15:41  [ТС] 8
Еще я думал, мне ведь не нужно проверять является ли число данного элемента нечетным, мне нужно,чтобы сам элемент по счету только был таковым(если я правильно понял задание). Поэтому я думал еще вот так сделать
C
1
2
3
4
5
6
7
for (i = 0; i < md; i++)
    {   
        s=0;
        for (j = 0; j<nd; j=j+2) 
           s+=d[i][j];
        printf("%d ", s);
   }
Просто начинать с первого элемента и увеличивать шаг на 2 и суммировать эти элементы. Т.е. по идее он должен сложить 1-й, 3, 5 и т.д. элементы, но в таком случае он мне выдает вот такую абракадабру.
0
Миниатюры
Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой  
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 15:43 9
со стороны трудно шаманить, md nd местами прыгают, наверно стоит проверить какие d[i][j], заходит ли в условие
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 15:55  [ТС] 10
Цитата Сообщение от MansMI Посмотреть сообщение
md nd местами прыгают
Первый раз было не правильно и поэтому я их поменял, строки - md, столбцы - nd
0
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 16:01 11
чего париться то
C
1
2
3
4
5
6
7
8
9
10
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);
   }
и думать
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 16:08  [ТС] 12
В таком случае у меня показывает вот такой ужас программа
0
Миниатюры
Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой  
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 16:19  [ТС] 13
я так понимаю у меня что-то с d[i][j] не так, ибо когда он его напечатал, так какая-то непонятная шляпа.
0
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 16:24 14
ну printf нужно чтоб отличались, а то пес знает кто что вывел, и еще раз output_matr вывести

Добавлено через 1 минуту
.... 8 Марта - день шаманки с бубном
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 16:37  [ТС] 15
Цитата Сообщение от MansMI Посмотреть сообщение
ну printf нужно чтоб отличались, а то пес знает кто что вывел, и еще раз output_matr вывести
Не совсем понимаю зачем снова выводить исходную матрицу?(output_matr выводит именно исходную)
А вот еще у вас два printf, в первом выводится по идее : Элемент, Остаток от деления на 2, Сумма нечетных элементов.
А второй выводит так же Сумму нечетных элементов, зачем выводить два раза одно и то же? Не совсем понятно.
Получилось как-то так, второй раз исходную матрицу не стал выводить.
0
Миниатюры
Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой  
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 16:42 16
если комп устал output_matr выводить идей больше нет
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 16:47  [ТС] 17
Цитата Сообщение от MansMI Посмотреть сообщение
если комп устал output_matr выводить идей больше нет
Вот если вывести еще раз, правда не понимаю зачем.
0
Миниатюры
Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой  
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 16:50 18
давайте весь код, скок гадать можно
0
Satros1205
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
08.03.2016, 16:53  [ТС] 19
Весь код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#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()
{
 
    unsigned int **d;
    int i,j,md,nd,s;
    //Подключение кириллицы в консольном окне
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);      
    //Ввод размеров матрицы
    printf("\nВведите размеры матрицы md, nd (на количество строк и столбцов ограничений нет)\n");
    scanf_s("%d%d",&md,&nd);
    //Создаем динамическую матрицу d с размерами md*nd*sizeof(double)
    //на базе указателя на указатель **d.
    d=(int **)malloc(md*sizeof(int *));//Создается массив указателей, 
    //в котором каждый элемент массива d[i] - это указатель на поле double, 
    //или указатель на одномерный массив double.
    for(i=0;i<md;i++)    //Создаются строки матрицы как одномерные массивы
        d[i]=(int *)malloc(nd*sizeof(int));
    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 < 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);
         }
        
   }
    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();
}
Не изменял только тип данных в функциях, осталось double, в противном случае программа не правильно работает.
0
MansMI
1453 / 1162 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
08.03.2016, 17:00 20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

для общего развития: double в 2 раза толще int
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void input_matr(int **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(int **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("%3d%c",x[i][j],j==n-1?'\n':' ');            
}
переделывать, так кругом
0
08.03.2016, 17:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2016, 17:00

Найти строку матрицы с наибольшей и наименьшей суммой элементов
Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на...

Найти строку матрицы с наибольшей и наименьшей суммой элементов
Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на...

Найти строку матрицы с наибольшей и наименьшей суммой элементов
Дан двумерный массив T . Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru