Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
1

Дана матрица размера M x N. Найти суммы элементов всех ее четных строк и нечетных столбцов

23.10.2014, 20:32. Просмотров 2129. Ответов 18
Метки нет (Все метки)

Ребята, помогите пожалуйста. Не могу понять, почему не работает. Точнее она работает, но не до конца. 2х2 считает верно, 3х3 тоже верно считает, 4х4 - частично верно. почему дальше не правильно?

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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
    int m, n, a[m][n];
    int i, j;
    int Sum_Stol=0, Sum_Str=0;
    
    printf ("\n M = ");
    scanf ("%d", &i);
    printf (" N = ");
    scanf ("%d", &j);
    printf ("\n");
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    {
        printf (" a[%d][%d] =", m+1, n+1);
        scanf ("%d", &a[m][n]);
    }
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if((m+1)%2==0)
    Sum_Str= Sum_Str + a[m][n];
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if ((n+1)%2!=0)
    Sum_Stol= Sum_Stol + a[m][n];
    
    printf ("\n Strok - %d", Sum_Str);
    printf ("\n Stolbzov - %d\n", Sum_Stol);
    
    system ("PAUSE");
    return 0;   
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2014, 20:32
Ответы с готовыми решениями:

Дана матрица размера 4x7. Найти минимальное значение среди сумм элементов всех ее столбцов
Дана матрица размера 4x7. Найти минимальное значение среди сумм элементов всех ее столбцов

дана матрица размером N строк и M столбцов. напишите программу подчитывающую количество четных и нечетных чисе
дана матрица размером N строк и M столбцов. напишите программу подчитывающую количество четных и...

Дана действительная матрица размера m*n. Найти сумму наибольших значений элементов ее строк.
Написать программу по заданию:Дана действительная матрица размера m*n. Найти сумму наибольших...

Дана матрица размера M × N. Найти максимальный среди минимальных элементов ее строк
Здравствуйте! Помогите, пожалуйста, с решением. Дана матрица размера M × N. Найти максимальный...

Найти суммы элементов всех четных строк матрицы
Дана матрица размера 5 x 9. Найти суммы элементов всех ее четных строк

18
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 20:44 2
devochka_lena, не совсем понятно как вообще это у вас работает

C
1
int m, n, a[m][n];
в этом случае должна выделится память под массив m*n
а они у вас не заданы
выделяйте память под массив динамически если изначально не известна m и n
погуглите про динамический двумерный массив
0
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 20:55  [ТС] 3
а что там не правильно?
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 20:58 4
devochka_lena, вам повторить мое предыдущее сообщение?

вы хотите чтобы программа выделила память под m*n элементов
но сколько их не говорите

представьте что вам сказали
нужно принести кофе на всю компанию
однако сколько человек в этой компании мы тебе скажем потом
что вы будете делать ?
вот так и компьютер
вы говорите выделить память но сколько не говорите

либо задавайте m и n до этого
int a[m][n];
то бишь
int m=4, n=4, a[m][n];

либо как я написал выше гуглите про динамические двумерные массивы и осмысливаете
0
23.10.2014, 20:58
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:02  [ТС] 5
да, спасибо, теперь поняла.)

Мне нужно вызвать malloc получается? я вот сейчас пытаюсь именно это сделать
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:07 6
devochka_lena,

C
1
2
3
4
int **A = (int **)malloc(N*sizeof(int *));
for(int i = 0; i < N; i++) {
    A[i] = (int *)malloc(M*sizeof(int));
}
вот что вы можете вставить после того как узнали значение m и n
точнее
C
1
int **A
в определении переменных
а
C
1
2
3
4
**A = (int **)malloc(N*sizeof(int *));
for(int i = 0; i < N; i++) {
    A[i] = (int *)malloc(M*sizeof(int));
}
уже после того как узнали
и работаете с ним как с обычным массивом
1
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:29  [ТС] 7
у меня не выходит никак , с тем , что вы написали(
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:30 8
devochka_lena, а что вы сделали покажите
0
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:34  [ТС] 9
я , собственно, не много чего изменила.
дело в том, что malloc я еще не использовала ни разу, поэтому не знаю, как им пользоваться. Почитала, поняла, что это. но как...это только практика нужна
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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
    int i, j, m, n;
    int Sum_Stol=0, Sum_Str=0;
    int *(a)[m][n];
    
    printf("Vvedite razmer massiva: ");
    printf ("\n M = ");
    scanf ("%d", &i);
    printf (" N = ");
    scanf ("%d", &j);
    printf ("\n");
    
    *a[m][n]= (int *)malloc(i*j*sizeof(int *));
        
    printf("Vvod massiva...\n");    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    {
        printf (" a[%d][%d] =", m+1, n+1);
        scanf ("%d", &a[m][n]);
    }
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if((m+1)%2==0)
    Sum_Str= Sum_Str + a[m][n];
    printf ("\n Strok - %d", Sum_Str);
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if ((n+1)%2!=0)
    Sum_Stol= Sum_Stol + a[m][n];
    
    printf ("\n Stolbzov - %d\n", Sum_Stol);
    system ("PAUSE");
    return 0;   
}
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:36 10
devochka_lena, позвольте позвольте
вы позволяете себе клевету говоря что не работает то что написал я

то что добавили вы не имеет ничего общего с тем что написал я

попробуйте почитать моее сообщение
я там довольно ясно описал что и куда надо добавлять
0
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:40  [ТС] 11
я вставляла в код то, что вы написали. и ничего. (
потом я уже сделала какого-то гибрида)
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:40 12
devochka_lena, так я вас прошу показать код с моим кодом а не вашим гибридом
0
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:43  [ТС] 13
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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
    int i, j, m, n;
    int Sum_Stol=0, Sum_Str=0;
    
    printf("Vvedite razmer massiva: ");
    printf ("\n M = ");
    scanf ("%d", &i);
    printf (" N = ");
    scanf ("%d", &j);
    printf ("\n");
    int **A = (int **)malloc(N*sizeof(int *));
    for(int i = 0; i < N; i++) 
    {
    A[i] = (int *)malloc(M*sizeof(int));
     }
    
    printf("Vvod massiva...\n");    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    {
        printf (" a[%d][%d] =", m+1, n+1);
        scanf ("%d", &a[m][n]);
    }
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if((m+1)%2==0)
    Sum_Str= Sum_Str + a[m][n];
    printf ("\n Strok - %d", Sum_Str);
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if ((n+1)%2!=0)
    Sum_Stol= Sum_Stol + a[m][n];
    
    printf ("\n Stolbzov - %d\n", Sum_Stol);
    system ("PAUSE");
    return 0;   
}
Добавлено через 1 минуту
потом я сделала так
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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
    int i, j, m, n;
    int Sum_Stol=0, Sum_Str=0;
    
    printf("Vvedite razmer massiva: ");
    printf ("\n M = ");
    scanf ("%d", &i);
    printf (" N = ");
    scanf ("%d", &j);
    printf ("\n");
    int **a = (int **)malloc(i*sizeof(int *));
    for(int i = 0; i < n; i++) 
    {
    a[i] = (int *)malloc(j*sizeof(int));
     }
    
    printf("Vvod massiva...\n");    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    {
        printf (" a[%d][%d] =", m+1, n+1);
        scanf ("%d", &a[m][n]);
    }
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if((m+1)%2==0)
    Sum_Str= Sum_Str + a[m][n];
    printf ("\n Strok - %d", Sum_Str);
    
    for (m=0; m<i; m++)
    for (n=0; n<j; n++)
    if ((n+1)%2!=0)
    Sum_Stol= Sum_Stol + a[m][n];
    
    printf ("\n Stolbzov - %d\n", Sum_Stol);
    system ("PAUSE");
    return 0;   
}
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:43 14
devochka_lena, хммммм интересный факт
для компилятора программы A и a это разные буквы

посмотрите код и поймете о чем я
0
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:46  [ТС] 15
и все равно безрезультатно

Добавлено через 2 минуты
я только не понимаю вообщееее вот этого
C
1
2
3
4
  for(int i = 0; i < n; i++) 
    {
    a[i] = (int *)malloc(j*sizeof(int));
     }
зачем там a итая?
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:50 16
devochka_lena, а почему вы считываете i а память выделяете под m

Добавлено через 3 минуты
devochka_lena,
потому что сначала вы выделяете массив указателей
и каждому указателю присваиваете память

давайте опять примеры

представьте что у вас есть ключ
ключ это int **a
он от ящика где хранятся еще ключи
получаем массив a[i]
а уже ключи в этом ящике открывают ящики с какими то вещами
и вот вы хотите достать из третьего ящика 5 вещь
то бишь получить доступ к ячейке памяти a[3][5] где у вас хранится число
вы берете 3 ключ открываете ящик берете 5 вещь
1
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 21:50  [ТС] 17
да я делаю, как вы написали )
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
23.10.2014, 21:55 18
Лучший ответ Сообщение было отмечено devochka_lena как решение

Решение

devochka_lena, позвольте
я вам написал одно
вы сделали другое

вот ваш код
разбирайтесь че да как
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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
    int i, j, m, n;
    int Sum_Stol=0, Sum_Str=0;
    
    printf("Vvedite razmer massiva: ");
    printf ("\n M = ");
    scanf ("%d", &m);
    printf (" N = ");
    scanf ("%d", &n);
    printf ("\n");
    int **a = (int **)malloc(m*sizeof(int *));
    for(int i = 0; i < m; i++) 
    {
    a[i] = (int *)malloc(n*sizeof(int));
     }
    
    printf("Vvod massiva...\n");    
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf(" a[%d][%d] =", i + 1, j + 1);
            scanf("%d", &a[i][j]);
        }
    }
    
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if ((i + 1) % 2 == 0)
                Sum_Str = Sum_Str + a[i][j];
            
        }
    }
    printf("\n Strok - %d", Sum_Str);
    for (i = 0;i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if ((j + 1) % 2 != 0)
                Sum_Stol = Sum_Stol + a[i][j];
        }
    }
    
    printf ("\n Stolbzov - %d\n", Sum_Stol);
    return 0;   
}
1
devochka_lena
1 / 1 / 1
Регистрация: 19.09.2014
Сообщений: 36
23.10.2014, 22:07  [ТС] 19
спасибо большое. да конечно я разберусь. куда я денусь. мне еще рассказывать алгоритм, так что...придется))) еще раз спасибо!
0
23.10.2014, 22:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2014, 22:07

Дана матрица MxN, найти сумму четных столбцов
Подскажите, что не так, пожалуйста. #include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; ...

Найти сумму наименьших элементов нечетных строк и наибольших элементов четных строк матрицы
Дана матрица размером 6 x 6. Найти сумму наименьших элементов ее нечетных строк и наибольших...

Дана целочисленная матрица размера n × m. Найти количество ее строк, все элементы которых различны
Решите задачи данной группы, оформив решение в виде процедур генерации, вывода и обработки...


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

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

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