Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ardred
Сообщений: n/a
#1

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

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

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

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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2009, 01:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять местами два ряда матрицы с наибольшей и наименьшей сумой элементов (C++):

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

Переставить местами строки с наименьшей и наибольшей суммами элементов - C++
Задача. Переставить местами строки с наименьшей и наибольшей суммами элементов. Нужен код. На мове С++

Поменять местами столбец матрицы с наибольшей суммой элементов и заданный столбец (результат не выводится) - C++
Задана матрица произвольной размерности. Поменять местами столбец матрицы, имеющий наибольшую сумму элементов,и столбец, номер которого ...

Найти строки матрицы с наибольшей и наименьшей суммой элементов - C++
Доброго времени суток! Если кто-то может, !!!ПОМОГИТЕ!!! с решением задачи (желательно подробно-детально, чтобы я мог разобраться, как в...

Найти строку матрицы с наибольшей и наименьшей суммой элементов - C++
Напишите пожалуйста решение задачи Вот условие:Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов....

Найти строку прямоугольной матрицы с наибольшей и наименьшей суммой элементов. - C++
1)Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести найденные строки и сумму их элементов.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.01.2009, 11:31 #2
1.
Код
    if (n=0)
2.
Код
    for(n = 0; sent[n] != '\0'; n++)
0
ardred
Сообщений: n/a
26.01.2009, 14:20 #3
эээ... то есть?оО

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

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

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

Для начала разберись с этим ... если будет время - еще подскажу, только пиши что получилось
0
ardred
Сообщений: n/a
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;
}
считает правильно теперь.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено через 34 минуты 47 секунд
обмен строк все еще интересует? А то я только заметил что ты и это спрашивал )
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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
xToTa
13 / 13 / 0
Регистрация: 26.01.2009
Сообщений: 162
27.01.2009, 11:34 #15
С буквой А проблем уже и нет =)
Я ему уже указал на ошибку
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2009, 11:34
Привет! Вот еще темы с ответами:

Поменять местами два любых элемента побочной диагонали квадратной матрицы - C++
Составить программу, которая меняет местами два любых элемента побочной диагонали квадратного массивами.

Динамические массивы С++ - найти строку с наибольшей и наименьшей суммой элементов - C++
Сформировать прямоугольную матрицу, вводя ее размеры (число строк и число столбцов) с клавиатуры. Найти строку с наибольшей и наименьшей...

Даны два числа m и n и матрица размера axb. Поменять местами строки матрицы с номерами m и n - C++
Помогите, пожалуйста:boredom:на турбо С++

Поменять местами первый элемент заданной матрицы с наименьшим из отрицательных элементов этой же матрицы - C++
уважаемые форумчане,помогите разобраться с задачкой:создать двумерный массив 3x3,найти min из отрицательных элементов,поменять min c...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.01.2009, 11:34
Ответ Создать тему
Опции темы

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