ardred
1

Поменять местами два ряда матрицы с наибольшей и наименьшей сумой элементов

26.01.2009, 01:36. Показов 1561. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Начал учиться програмировать на С. Столкнулся с некоторыми проблемами при выполнении некоторых задач.
Не прошу делать за меня никакую работу, прошу просто посмотреть и помочь советом начинающему.
Задача банальна. Надо ввести с клавиатуры прямоугольную матрицу и поменять местами два ряда с наибольшей и наименьшей сумой элементов.
Пробовал сделать так:

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
73
74
#include <stdio.h>
 
#define colonku 4
#define stroku 3
 
int main(void)
{
    int n, n1;
    float max, min, sum1=0, sum2=0, sum3=0, sum4=0;
    float matr [colonku] [stroku];
 
    printf("Vvedite matricy %d na %d elementov:\n", colonku, stroku);
 
    // ввод массива
 
    for (n = 0; n < colonku; n++)
        {
            for (n1=0; n1 < stroku; n1++)
                scanf("%f", &matr [n] [n1]);
            printf("\n");
        };
 
    //подсчет сумы елементов в рядах
 
    for (n = 0; n < colonku; n++)
        {
            for (n1=0; n1 < stroku; n1++)
                 {
                     if (n=0)
                         sum1=sum1+matr [n] [n1];
                     if (n=1)
                         sum2=sum2+matr [n] [n1];
                     if (n=2)
                         sum3=sum3+matr [n] [n1];
                     if (n=3)
                         sum4=sum4+matr [n] [n1];
                 }
        };
 
    //определение самой маленькой и самой большой сумы.
    max=sum1;
    if (sum2 > max)
        max=sum2;
    if (sum3 > max)
        max=sum3;
    if (sum4 > max)
        max=sum4;
 
    max=sum1 ? min=sum2 : min=sum1;
    if (sum1 < min)
        min=sum1;
    if (sum2 < min)
        min=sum2;
    if (sum3 < min)
        min=sum3;
    if (sum4 < min)
        min=sum4;
 
// а тут решил проверить, все ли правильно сделал. И вывести для этого результаты.
 
    for (n = 0; n < colonku; n++)
        {
            for (n1=0; n1 < stroku; n1++)
                 printf("%f   ,",matr [n] [n1]);
            printf("\n");
        }
   printf("\n %4.2f, %4.2f, %4.2f, %4.2f",sum1,sum2,sum3,sum4);
   printf("\n %4.2f, %4.2f",max,min);
 
   getchar();
   getchar();
 
   return 0;
}
Откомпилировал. И столкнулся с проблемой: программа не считает суму первого ряда. постоянно ноль отображается.
Помогите пожалуйста. В чем заключаеться ошибка? как ее исправить, и как избежать в дальнейшем?
Извините, если вещь елементарная. Занялся недавно, опыта мало. Может что-то в книгах пропустил.
Есть еще одна проблема:
Задача: Для введенного предложения надо посчитать процент использования гласных букв.
Начал с организации счетчика "букаФ"=) Решил проверить, правильно ли считает. Но тут снова попа:
букву "а" некоректно считает. Если вообще не вводишь отображает 16. одна, две буквы в предлодении - вообще мусор типа 12,13, 22 и т.д. Закономерности никакой нету. только стабильное 16 при отсутствии буквы.

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
#include <stdio.h>
 
#define max 150
 
int main(void)
{
    int n, c1=0, c2=0, c3=0, c4=0, c5=0, c6=0;
    char sent[max];
 
    printf("Vvedite predlojenie:\n");
    gets(sent);
 
    for(n=0;n!=max;n++)
        {
         if (sent[n]=='a')
             c1=c1+1;
         if (sent[n]=='e')
             c2=c2+1;
         if (sent[n]=='y')
             c3=c3+1;
         if (sent[n]=='u')
                                  c4=c4+1;
         if (sent[n]=='i')
             c5=c5+1;
         if (sent[n]=='o')
             c6=c6+1;
        };
 
    printf("%d,%d,%d,%d,%d,%d",c1,c2,c3,c4,c5,c6);
 
    getchar();
    getchar();
    return 0;
}
Что самое странное, остальные считает нормально. Думал что первое определение некоректное, переставлял, результат тот же.
Среда разработки - Code Blocks.
Буду очень благодарен за помощь.
Спасибо наперед.
з.ы. не забывайте, что все мы были маленькими и неопытными) + извиняюсь за "очепятки". Живу в Украине, с русской граматикой проблемы могут быть.

упс. извините пожалуйста, сеть глюкануло, нечайно дубль создал. Модераторы, удалите пожалуйста эту темку.
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2009, 01:36
Ответы с готовыми решениями:

Вычислить сумму элементов каждого столбца матрицы и поменять местами столбцы с наибольшей и наименьшей суммой
Пожалуйста помогите решить, кому не трудно.. Дана целочисленная матрица A(N,M), где N=5 и M=5....

Поменять местами строку матрицы с наименьшей суммой элементов со строкой с наибольшей суммой элементов
Помогите плиз решить несколько задас на преобразование матриц на С++ 1.В действительной матрице...

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

Поменять местами строку с наименьшей суммой элементов и столбец с наибольшей
В заданном целочисленном массиве Ann поменять местами строку с наименьшей суммой элементов и...

17
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.01.2009, 11:31 2
1.
Код
    if (n=0)
2.
Код
    for(n = 0; sent[n] != '\0'; n++)
0
ardred
26.01.2009, 14:20 3
эээ... то есть?оО

Понял один прокол. Ступил жуть как. Везде где проверял на равность - ставил тупо =. Паскаль чертов) Заменил на ==.

Остальные проблемы остаются открытыми))))

Прошу помочь
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
26.01.2009, 14:25 4
По первому заданию...
суммы во-первых лучше не в разных переменных хранить - а в массиве, размерность которого равна количеству строк матрицы... проще и полезнее, на будущее...
Потом если я не ошибаюсь, то в данной реализации ты считаешь суммы не в строках, а в столбцах =)...
Потом для счетчиков в циклах лучше брать не (n, n1), а (x, y)... еще со школьных лет так привычнее людям ориентироваться в координатах...

Для начала разберись с этим ... если будет время - еще подскажу, только пиши что получилось
0
ardred
26.01.2009, 14:50 5
да, да, да... Ляп на ляпе.

Подправил. получилось вот что:

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>
 
#define stroku 4
#define colonku 3
 
int main(void)
{
int n, n1;
float max, min, sum1=0, sum2=0, sum3=0, sum4=0;
float matr [stroku] [colonku];
 
printf("Vvedit6 matrucjy %d na %d elementiv:\n", stroku, colonku);
 
// vvid massuvy
for (n = 0; n < stroku; n++)
{
for (n1=0; n1 < colonku; n1++)
scanf("%f", &matr [n] [n1]);
printf("\n");
};
 
// pidrahunok symu elementiv v rjadah
for (n = 0; n < stroku; n++)
{
for (n1=0; n1 < colonku; n1++)
{
if (n==0)
sum1=sum1+matr [n] [n1];
if (n==1)
sum2=sum2+matr [n] [n1];
if (n==2)
sum3=sum3+matr [n] [n1];
if (n==3)
sum4=sum4+matr [n] [n1];
}
};
 
//vuzna4ennya najbil6woi ta najmenwoi symu
max=sum1;
if (sum2 > max)
max=sum2;
if (sum3 > max)
max=sum3;
if (sum4 > max)
max=sum4;
 
max=sum1 ? min=sum2 : min=sum1;
if (sum1 < min)
min=sum1;
if (sum2 < min)
min=sum2;
if (sum3 < min)
min=sum3;
if (sum4 < min)
min=sum4;
 
 
for (n = 0; n < stroku; n++)
{
for (n1=0; n1 < colonku; n1++)
printf("%4.2f, ",matr [n] [n1]);
printf("\n");
}
printf("\n %4.2f, %4.2f, %4.2f, %4.2f",sum1,sum2,sum3,sum4);
printf("\n %4.2f, %4.2f",max,min);
 
 
getchar();
getchar();
 
return 0;
}
считает правильно теперь.

Подскажи пожалуйста как организовать обмен строк? Через указатели?

И не знаешь, как решить проблему с буквой а во втором примере?

*большое спасибо за помощь*
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
26.01.2009, 15:12 6
блин... столько написал и мне сказало что пока вы писали сообщение то вас по таймауту выкинуло... вам надо зайти снова... и я не сохранил текст =/
Жди... )

Добавлено через 2 минуты 17 секунд
В общем короче говоря тебе перед всеми твоими `if` надо добавить одну строчку внутри цикла
C++
1
if (sent[n]==NULL) break;
0
ardred
26.01.2009, 15:19 7
Помогло.

какова механика? проверяет елемент массива на неопределенность?) То есть когда идут пустые ячейки - завершает цыкл?

А в чем проблема была? (чтобы не повторять эту же ошибку))
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
26.01.2009, 15:22 8
цикл должен выполняться ровно столько раз, сколько у тебя символов в предложении...
когда символы заканчиваются, а цикл продолжает читать - то начинается хаос... поэтому необходимо проверять символ на неопределенность и выходить из цикла сразу как только она встречается...
0
ardred
26.01.2009, 15:25 9
ясненько.

А насчет этого:
"считает правильно теперь.

Подскажи пожалуйста как организовать обмен строк? Через указатели?

И не знаешь, как решить проблему с буквой а во втором примере?"

*и не влом тратить на недалеких отроков свое время?))
Ты кто, да откуда? Звать как?
Вячеслав. Украина г.Львов*
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
26.01.2009, 15:31 10
Дима, Днепр )
Не влом, просто у самого задача сейчас намного сложнее... таким образом отвлекаюсь...
А как отвлечешься немного, то потом совсем иначе воспринимаются свои проблемы, иногда быстрее соображаешь...
0
ardred
26.01.2009, 15:36 11
ясненько.

А насчет этого:
"считает правильно теперь.

Подскажи пожалуйста как организовать обмен строк? Через указатели?

И не знаешь, как решить проблему с буквой а во втором примере?"

*и не влом тратить на недалеких отроков свое время?))
Ты кто, да откуда? Звать как?
Вячеслав. Украина г.Львов*
ardred
26.01.2009, 15:40 12
Очень приятно)

Да простят мен модеры за гребанные даблпосты.

При регистрации уже не надо каждый раз код вводить? Ибо и сеть тормозит, и код ввожу неправильно... Мдя)

Спать надо больше...

*на правах оффтопа =)*
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
26.01.2009, 16:17 13
Вопрос думаю исчерпан ? =)

Добавлено через 34 минуты 47 секунд
обмен строк все еще интересует? А то я только заметил что ты и это спрашивал )
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.01.2009, 00:23 14
как организовать обмен строк?
Код
char str1[100], str2[100], tmp[100];

strcpy(tmp, str1);
strcpy(str1, str2);
strcpy(str2, tmp);
Добавлено через 3 минуты 27 секунд
И не знаешь, как решить проблему с буквой а во втором примере?
какую проблему ? я поправил проверку, потому что раньше если строка была 20 символов, цикл продолжался до 150 символа
0
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
27.01.2009, 11:34 15
С буквой А проблем уже и нет =)
Я ему уже указал на ошибку
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.01.2009, 11:49 16
да на первом ответе уже не было, цикл продолжался до конца строки
0
13 / 13 / 1
Регистрация: 26.01.2009
Сообщений: 156
27.01.2009, 12:52 17
Я конечно извиняюсь, но ты не пробовал читать всю ветку обсуждения перед тем как принимать участие в ее обсуждении ?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
28.01.2009, 00:50 18
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

а ты про строки )
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
 
#include <stdio.h>
 
/* меняет строки матрицы местами */
main()
{
    int mtx[3][3] = {
        { 1, 2, 3 },
        { 4, 5, 6 },
        { 7, 8, 9 }
    };
    int i, j, tmp;
    
    for (i = 0; i < 3; i++)
        printf("%d %d %d\n",
            mtx[i][0], mtx[i][1], mtx[i][2]); 
    putchar('\n');
        
    for (j = 0; j < 3; j++)
        tmp = mtx[1][j],
        mtx[1][j] = mtx[2][j],
        mtx[2][j] = tmp;
    
    for (i = 0; i < 3; i++)
        printf("%d %d %d\n",
            mtx[i][0], mtx[i][1], mtx[i][2]); 
    return 0;
}
0
28.01.2009, 00:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2009, 00:50
Помогаю со студенческими работами здесь

В матрице A (mxn) поменять местами строки с наибольшей и наименьшей суммами элементов
В матрице A (mxn) поменять местами строки с наибольшей и наименьшей суммами элементов

В матрице A (mxn) поменять местами строки с наибольшей и наименьшей суммами элементов
В матрице A (mxn) поменять местами строки с наибольшей и наименьшей суммами элементов Помогите...

Составить блок-схему к программе обмена местами строк матрицы с наибольшей и наименьшей суммой элементов
Написать блок схему к этой программе. Заранее огромное спасибо)) В действительной матрице А(5;6)...

Определить столбец матрицы с наименьшей сумой элементов
Как определить столбец матрицы с наименьшей сумой элементов? Паскаль


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru