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

Переставить местами строки, содержащие первый и последний максимальные элементы соответственно - C++

Восстановить пароль Регистрация
 
MikeMaster
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 19:35     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #1
Добрый вечер)))
Задание: В матрице размером N*M Переставить местами строки, содержащие первый и последний максимальные элементы соответственно.
ошибка в функции work: ввожу матрицу (9,4,8) (1,1,1)(6,3,7). он выводит: (1,1,1) (9,4,8) (6,3,7). а должно ведь: (6,3,7) (1,1,1) (9,4,8)
не могу понять что делать????? помогите исправить))

вот код:
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
#include "stdafx.h"
#include "math.h"
#include "stdio.h"
#include <clocale>
const int MAX_N=100;    //Максимальные размеры массива
const int MAX_M=100;
  //прототипы
void input(int matrix[][MAX_M],int n,int m);
void work (int matrix [][MAX_N], int n, int m);
void output(int matrix[][MAX_M],int n,int m);
int main()
{setlocale (0 , "rus"); //установка русской локали
    int matrix[MAX_N][MAX_M];   //Матрица  // i - строки, j - столбцы
    int n=0; //Кол-во строк в наших матрицах  - введем мы
    int m=0; //Кол-во стобцов в наших матрицах  - введем мы
    int d=0;
    int i=0;
    //Вводим кол-во строк и столбцов в наших матрицах       
    printf ("Введите кол-во строк\n");       
    scanf ("%d", &n);      
    printf ("Введите кол-во столбцов\n"); 
    scanf("%d", &m);
 
 //Заполняем первую матрицу по строкам      
    printf ("Введите элементы матрицы\n");        
    input (matrix, n, m);
    work (matrix, n, m);
    output (matrix, n,m);
 return 0;          
 }        
 
void output(int matrix[][MAX_M],int n,int m)
{
    for (int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++) 
         printf("%d\t",matrix[i][j]);
        printf ("\n");
    }
}
 
//ввод матрицы
 
 
void input(int matrix[][MAX_M],int n,int m)
{
  for (int i=0; i<n; i++) 
    for (int j=0; j<m; j++)
    {
        scanf ("%d", &matrix[i][j]);
    }
}           
 
void work (int matrix [][MAX_N],  int n, int m)
{  int j=0;
    int f=1; //  первым максимал
   int l=1;  // с вторым максимал
   for (int j=0; j<n; j++) // ищем первый макс элемент в строках
   { if (matrix [0][j]>f)
   { f=j;
     break;
   }
   }
 
for (int j=0; j<n; j++)  //ищем 2 элемент в строках
{ if (matrix[0][j-1]>f)
{ l=j;
  break;
}
  }
 
    if(f==1)
    if  (l==1)  //если не найден какой-то столбец
    {printf("Не найдены соответствующие столбцы.\n");   
    return;         // конец функциии
    }
 
for (int j=0; j<m; j++)  // меняем в строках
{ int t;
  t=matrix[f][j];
  matrix[f][j]=matrix[l][j];
  matrix[l][j]=t;
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2012, 19:35     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно
Посмотрите здесь:

C++ Переставить в 1-м массиве первый отрицательный и последний положительный элемент местами
C++ В массиве переставить местами первый и максимальный элементы, а также последний и минимальный
C++ поменять местами первый и последний элементы массива
C++ Дана матрица размера 5 x 10. Удалить первый (последний, все) столбцы, содержащие только положительные элементы.
Поменять местами строки, содержащие минимальные и максимальные элементы матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2012, 20:26     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #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
void work (int matrix [][MAX_N],  int n, int m)
{
    int f = -1, l = -1;
 
    int max = INT_MIN;
 
    for (int i=0; i<n; i++) {
 
        for (int j=0; j<m; j++) {
 
            if (matrix[i][j] > max) {
 
                max = matrix[i][j];
                f = i;
                l = i;
 
            }
            else if (matrix[i][j] == max) {
 
                 l = i;
 
            }
 
        }
 
 
    }
 
 
    for (int j=0; j<m; j++)  // меняем в строках
    { 
      int t;
      t=matrix[f][j];
      matrix[f][j]=matrix[l][j];
      matrix[l][j]=t;
    }
 
}
MikeMaster
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 20:36  [ТС]     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #3
а что такое INT_MIN;?? она теперь, вообще ничего не меняет.. просто выводит введенную матрицу((((
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2012, 20:51     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #4
ну в вашей матрице и менять то нечего ... INT_MIN - минимальное целое
MikeMaster
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 20:57  [ТС]     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #5
т.е. INT_MIN, это 0.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.07.2012, 20:59     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #6
Скорее всего это –2147483648. int же со знаком. В любом случае это такая величина, которая меньше или равна любому другому значению переменной типа int.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2012, 21:00     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #7
MikeMaster, неааа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2012, 21:20     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно
Еще ссылки по теме:

C++ Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел
Поменять местами первый и последний элементы. Все единичные элементы массива заменить нулями C++
Функция,меняющая местами первый и последний элементы массива C++

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

Или воспользуйтесь поиском по форуму:
MikeMaster
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 21:20  [ТС]     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно #8
он все равно ничего не меняет на других матрицах....

Добавлено через 17 минут
а не все норм, спасибо огромное))))
Yandex
Объявления
28.07.2012, 21:20     Переставить местами строки, содержащие первый и последний максимальные элементы соответственно
Ответ Создать тему
Опции темы

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