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

Найти в каждой строке матрицы максимальный и минимальный элементы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.76
Romksuper
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 31
12.01.2010, 21:16     Найти в каждой строке матрицы максимальный и минимальный элементы #1
Всем Привет_))) Ребят, у меня проблема. Задание: Дана матрица B[NxM] Найти в каждой строке максимальный и минимальный элементы и поменять их местами с первым и последним соответственно.
Как на блок-схемах выглядит понимаю, а вот с кодировкой на С нет. подскажите, кто что может_))).Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2010, 21:16     Найти в каждой строке матрицы максимальный и минимальный элементы
Посмотрите здесь:

C++ В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке
В каждой строке матрицы найти минимальный элемент C++
C++ В произвольной матрице A [ N ][ M ] поменять местами в каждой строке минимальный и максимальный элементы
Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их местами с первым и последним элементом C++
C++ Программа для нахождения в каждой строке матрицы G(n, m) максимальный и минимальный элементы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.01.2010, 11:45     Найти в каждой строке матрицы максимальный и минимальный элементы #2
Вот решение, надеюсь я вам помог.

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <iostream.h>
 
 
 
 
void main(){
const int Height = 4;
const int Weight = 5;
 
int matrix[Height][Weight] = { 
    { 9,18,1,3,5     }, 
    { 9,19,1,3,5     }, 
    { 2,20,1,3,5     },
    { 1,25,1,3,5     }
 };
 
int max=matrix[0][0];               //максимальный
int min=matrix[0][0];               //минимальный
 
int posMax(0); //позиция максимального
int posMin(0); //позиция минимального
 
//Вычисляем максисмальный и меняем его с последним
 
//Расматриваем по строкам
for(int i = 0;i<Height;i++){
    //расматриваем массив: строку        
    for(int j = 0;j<Weight;j++){
   
    //Проверяем на  максимальный------
    if(matrix[i][j]>max){
    max=matrix[i][j];  // это максимальный
    posMax = j;        // записываем позицию максимального
    }
 
    //Производим перстановку------
    //Если просмотр строки закончен
    if(j==Weight-1){
    matrix[i][posMax]=matrix[i][j];   //записывае значение из конца в максимальный  
    matrix[i][j]=max;   //записываем в конец  строки максимальный
 
    }
   
    }
    //Устанваливаем что первый элемент следующей строки максимальный
    int nextstr=i+1;
    int nextstb=0;
    max=matrix[nextstr][nextstb];
    posMax=0;
 
}
 
    //Показ на экран
    for(int p = 0;p<Height;p++){
    //расматриваем массив: строку        
    for(int g = 0;g<Weight;g++)cout<<matrix[p][g]<<' ';
    cout<<'\n';
}
 
 
//Далее вычисляем минимальный
 
//Расматриваем по строкам
for(i = 0;i<Height;i++){
    //расматриваем массив: строку        
    for(int j = 0;j<Weight;j++){
   
    //Проверяем на  максимальный------
    if(matrix[i][j]<min){
    min=matrix[i][j];  // это максимальный
    posMin = j;        // записываем позицию максимального
    }
 
    //Производим перстановку------
    //Если просмотр строки закончен
    if(j==Weight-1){
    matrix[i][posMin]=matrix[i][0];   //записывае значение из начала строки в минимальный   
    matrix[i][0]=min;   //записываем в начало строки минимальный
    }
   
    }
    //Устанваливаем что первый элемент следующей строки минимальный
    int nextstr=i+1;
    int nextstb=0;
    min=matrix[nextstr][nextstb];
    posMin=0;
 
}
cout<<'\n';
 
    //Показ на экран
    for(p = 0;p<Height;p++){
    //расматриваем массив: строку        
    for(int g = 0;g<Weight;g++)cout<<matrix[p][g]<<' ';
    cout<<'\n';
}
 
cout<<'\n';
 
 
 
 
return;
}
Добавлено через 12 часов 29 минут
Исправлена баг: нашёл в своей проге выход за буфер по строке.
Вот усовершенствованная версия все в двух циклах:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <stdio.h>
#include <iostream.h>
 
 
 
 
void main(){
const int Height = 4;
const int Weight = 5;
 
int matrix[Height][Weight] = { 
    { 9,18,1,3,5     }, 
    { 9,19,1,3,5     }, 
    { 2,20,1,3,5     },
    { 1,25,1,3,5     }
 };
 
int max=matrix[0][0];               //максимальный
int min=matrix[0][0];               //минимальный
 
int posMax(0); //позиция максимального
int posMin(0); //позиция минимального
 
//Вычисляем максисмальный и меняем его с последним
 
//Расматриваем по строкам
for(int i = 0;i<Height;i++){
    //расматриваем массив: строку        
    for(int j = 0;j<Weight;j++){
   
    //Проверяем на  максимальный------
    if(matrix[i][j]>max){
    max=matrix[i][j];  // это максимальный
    posMax = j;        // записываем позицию максимального
    }
 
    //Проверяем на  минимальный------
    if(matrix[i][j]<min){
    min=matrix[i][j];  // это минимальный
    posMin = j;        // записываем позицию минимального
    }
 
    //Производим перстановку------
    //Если просмотр строки закончен
    if(j==Weight-1){
    matrix[i][posMax]=matrix[i][j];   //записывае значение из конца в максимальный  
    matrix[i][j]=max;   //записываем в конец  строки максимальный
 
    matrix[i][posMin]=matrix[i][0];   //записываем значение из начала строки в минимальный  
    matrix[i][0]=min;   //записываем в начало строки минимальный
 
    }
   
 
 
 
    }
 
 
    //Устанваливаем что первый элемент следующей строки максимальный  и минимальный
    int nextstr=i+1;
    int nextstb=0;
    if(nextstr==Height)break;  //исключение, что бы не обратится за буфер
 
    max = matrix[nextstr][nextstb];
    posMax=0;
    min = matrix[nextstr][nextstb];
    posMin=0;
}
 
 
cout<<'\n';
 
    //Показ на экран
    for(int p = 0;p<Height;p++){
    //расматриваем массив: строку        
    for(int g = 0;g<Weight;g++)cout<<matrix[p][g]<<' ';
    cout<<'\n';
}
 
cout<<'\n';
 
 
 
 
return;
}
Romksuper
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 31
13.01.2010, 15:37  [ТС]     Найти в каждой строке матрицы максимальный и минимальный элементы #3
2 вопросика:
1) А если необходимо, чтобы юзер сам вводил М N и все елементы, то как быть??
2) как сделать проверку на числа, если пользователь вводит буквы??
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.01.2010, 15:50     Найти в каждой строке матрицы максимальный и минимальный элементы #4
Какой у тебя компилятор: это мне важно знать:
так как способы выделения динамической памяти в C и C++ имеют свои особенности
Romksuper
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 31
13.01.2010, 15:59  [ТС]     Найти в каждой строке матрицы максимальный и минимальный элементы #5
Borland С v.3.1, мы тока на нем и программируем.......я ток первый курс, язык учим недавно, операторов тоже мало знаем....
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.01.2010, 16:35     Найти в каждой строке матрицы максимальный и минимальный элементы #6
Мой компилятор: Visual С++ не работает нормально с динамическими матрицами созданными в стиле C.
могу привеcти код на C++.
Romksuper
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 31
13.01.2010, 16:38  [ТС]     Найти в каждой строке матрицы максимальный и минимальный элементы #7
...да еще и завтра сдавать

Добавлено через 40 секунд
да еще и завтра сдавать
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.01.2010, 17:16     Найти в каждой строке матрицы максимальный и минимальный элементы #8
Так что на C++ писать

Добавлено через 11 минут
написал все-таки на C

Добавлено через 22 минуты
Фух сделал в стиле C:
Теперь по поводу определения клавиши:
Что бы не допустить ввода символов в матрицу, на до использовать(вызывать) перед вводом значения
функцию getch(), она возвращает код нажатой клавиши, по этому коду можно определить
пытается ли пользователь ввести цифру или букву.Код клавиши:см в табл ASCII.
Надеюсь определитель клавиши сам сделаешь.

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>         //выделение динамической памяти в стиле C
#include <conio.h>
 
void main(){
 
int Height(0);  //переменная задающая высоту матрицы
int Weight(0);  //переменная задающая ширину матрицы
 
int *matrix = NULL;            //указатель для хранения начала матрицы
 
//Вводим количество строк и стобцов
printf("input colvo st and stb\n");
scanf("%d%d",&Height,&Weight);
 
//Выделяем динамическую память под матрицу, адрес начала матрицы заносится в matrix
matrix = (int *)malloc(Height*Weight*sizeof(int));
//---------------------------------------------------------------------------------
 
 
//Ввод матрицы
for(int e = 0;e<Height;e++){
    //расматриваем массив: строку        
    for(int g = 0;g<Weight;g++){
    scanf("%d",&matrix[e*Weight+g]);
   
    }
}
 
int max=*matrix;               //максимальный
int min=*matrix;               //минимальный
 
int posMax(0);                     //позиция максимального
int posMin(0);                     //позиция минимального
 
 
//Вычисляем максисмальный и минимальный, меняем его с последним и первым
//Расматриваем по строкам
for(int i = 0;i<Height;i++){
    //расматриваем массив: строку        
    for(int j = 0;j<Weight;j++){
   
    //Проверяем на  максимальный------
    if(matrix[i*Weight+j]>max){
    max=matrix[i*Weight+j];  // это максимальный
    posMax = j;        // записываем позицию максимального
    }
 
    //Проверяем на  минимальный------
    if(matrix[i*Weight+j]<min){
    min=matrix[i*Weight+j];  // это минимальный
    posMin = j;        // записываем позицию минимального
    }
 
    //Производим перстановку------
    //Если просмотр строки закончен
    if(j==Weight-1){
    matrix[i*Weight+posMax]=matrix[i*Weight+j];     //записывае значение из конца в максимальный    
    matrix[i*Weight+j]=max;   //записываем в конец  строки максимальный
 
    matrix[i*Weight+posMin]=matrix[i*Weight+j];   //записываем значение из начала строки в минимальный  
    matrix[i*Weight+0]=min;   //записываем в начало строки минимальный
 
    }
   
 
    }
 
    //Устанваливаем что первый элемент следующей строки максимальный  и минимальный
    int nextstr=i+1;
    int nextstb=0;
    if(nextstr==Height)break;  //исключение, что бы не обратится за буфер
 
    max = matrix[nextstr*Weight+nextstb];
    posMax=0;
    min = matrix[nextstr*Weight+nextstb];
    posMin=0;
}
 
 
    //Показ на экран
    for(int p = 0;p<Height;p++){
    //расматриваем массив: строку        
    for(int g = 0;g<Weight;g++){printf("%d",matrix[p*Weight+g]);
    printf(" ");
}
    printf("\n");
    }
 
//ОСвобождаем память из под матрицы
free(matrix);
return;
 
}
Romksuper
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 31
13.01.2010, 20:22  [ТС]     Найти в каждой строке матрицы максимальный и минимальный элементы #9
я понимаю, я может достал, но обясни поподробнее поподробнее, зачем, например для чего вот эта конструкция [e*Weight+g],if matrix[i*Weight+j]...
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.01.2010, 20:41     Найти в каждой строке матрицы максимальный и минимальный элементы #10
Представь себе что такое Матрица:
Матрица это массив строк:




[0][1][2][3] -> координаты элементов строки: столбцы

координаты строки массива-> [0] 1 2 3 4
[1] 5 1 6 9
[2] 1 1 3 2

//----------------------------
Размер данной матрицы:
3 - строки :
4 - элемента в каждой строке
//----------------------------

Размер матрицы измеряется так:
Количество строк, всегда на первом месте.


Что бы обратится к элементу матрицы надо указать
номер строки+номер элемента строки(простого массива).

Способы обращения к элементам матрицы в языках C и C++
В C++ способ красивее и нагляднее: matrix[1][2] - будет значение 6.
Давно на C не программил, поэтому и затупил с компилятором C:

В C способ не так красив и удобен:
matrix[1*количество элементов в строке + координата элемента строки]
И получается так matrix[1*3+2]; - будет значение 6

Про нюансы выделения памяти под матрицы в C и C++ рассказывать не буду.

Добавлено через 50 секунд
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
Представь себе что такое Матрица:
Матрица это массив строк:
                     
 
 
 
                                                           [0][1][2][3]    ->    координаты элементов строки: столбцы
 
координаты строки массива->        [0]      1  2  3  4
                                                  [1]      5  1  6  9
                                                  [2]      1  1  3  2
 
//----------------------------
Размер данной матрицы:
3 - строки :
4 - элемента в каждой строке
//----------------------------
 
Размер матрицы измеряется так:
Количество строк, всегда на первом месте.
 
 
Что бы обратится к элементу матрицы надо указать 
номер строки+номер элемента строки(простого массива).
 
Способы обращения к элементам матрицы в языках C и C++
В C++ способ красивее и нагляднее: matrix[1][2]  - будет значение 6.
Давно на C не программил, поэтому и затупил с компилятором C:
 
В C способ не так красив и удобен: 
matrix[1*количество элементов в строке + координата элемента строки]
И получается так matrix[1*3+2]; - будет значение 6
 
Про нюансы выделения памяти под матрицы в C и C++ рассказывать не буду.
Добавлено через 2 минуты
Не точно сказанул поправка


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
Представь себе что такое Матрица:
Матрица это массив строк:
                     
 
 
 
                                                          [0][1][2][3]    ->    координаты элементов строки: столбцы
 
координаты строки массива->       [0]      1  2  3  4
                                                 [1]      5  1  6  9
                                                 [2]      1  1  3  2
 
//----------------------------
Размер данной матрицы:
3 - строки :
4 - элемента в каждой строке
//----------------------------
 
Размер матрицы измеряется так:
Количество строк, всегда на первом месте.
Количество элементов в строке на втором месте.
 
Что бы обратится к элементу матрицы надо указать 
номер строки+номер элемента строки(простого массива).
 
Способы обращения к элементам матрицы в языках C и C++
 
В C++ способ красивее и нагляднее: matrix[1][2]  - будет значение 6.
Давно на C не программил, поэтому и затупил с компилятором C:
 
В C способ не так красив и удобен: 
matrix[1*количество элементов в строке + координата элемента строки]
И получается так matrix[1*4+2]; - будет значение 6
 
Про нюансы выделения памяти под матрицы в C и C++ рассказывать не буду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2010, 23:38     Найти в каждой строке матрицы максимальный и минимальный элементы
Еще ссылки по теме:

C++ Дана Матрица А(5.4) 1)Найти одномерный массив В из сумм элементов каждой строки матрицы 2)найти максимальный элемент матрицы А в 5-ой строке 3)Заме
Поменять местами в каждой строке матрицы минимальный и максимальный элементы, подскажите ошибки C++

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

Или воспользуйтесь поиском по форуму:
masfisha
1 / 1 / 0
Регистрация: 13.01.2010
Сообщений: 11
13.01.2010, 23:38     Найти в каждой строке матрицы максимальный и минимальный элементы #11
В твоей версии точно полбзователь вводит весь массив (Эт я Romksuper)
Yandex
Объявления
13.01.2010, 23:38     Найти в каждой строке матрицы максимальный и минимальный элементы
Ответ Создать тему
Опции темы

Текущее время: 01:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru