0 / 0 / 1
Регистрация: 01.07.2012
Сообщений: 15
1

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

28.07.2012, 19:35. Показов 1794. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер)))
Задание: В матрице размером 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;
}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2012, 19:35
Ответы с готовыми решениями:

Упорядочить элементы массива по убыванию и переставить местами первый и последний элементы
1)Упорядочить элементы массива по убыванию и переставить местами первый и последний элементы.

Найти первый минимальный и последний максимальный элементы массива. Поменять местами столбцы, содержащие эти элементы
Найти первый минимальный и последний максимальный элементы массива. Поменять местами столбцы,...

В массиве переставить местами первый и максимальный элементы, а также последний и минимальный
В массиве переставить местами первый и максимальный элементы, а также последний и минимальный.

Поменять местами первый и последний столбцы матрицы, содержащие только положительные элементы
Здравствуйте! Пишу код using System; using System.Collections.Generic; using System.Linq; using...

7
594 / 532 / 76
Регистрация: 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;
    }
 
}
1
0 / 0 / 1
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 20:36  [ТС] 3
а что такое INT_MIN;?? она теперь, вообще ничего не меняет.. просто выводит введенную матрицу((((
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2012, 20:51 4
ну в вашей матрице и менять то нечего ... INT_MIN - минимальное целое
1
0 / 0 / 1
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 20:57  [ТС] 5
т.е. INT_MIN, это 0.
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
28.07.2012, 20:59 6
Скорее всего это –2147483648. int же со знаком. В любом случае это такая величина, которая меньше или равна любому другому значению переменной типа int.
1
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2012, 21:00 7
MikeMaster, неааа
1
0 / 0 / 1
Регистрация: 01.07.2012
Сообщений: 15
28.07.2012, 21:20  [ТС] 8
он все равно ничего не меняет на других матрицах....

Добавлено через 17 минут
а не все норм, спасибо огромное))))
0
28.07.2012, 21:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2012, 21:20
Помогаю со студенческими работами здесь

Переставить местами первый и последний строки прямоугольной таблицы (матрицы)
Переставить местами первый и последний строки прямоугольной таблицы (матрицы)

Поменять местами строки матриц, содержащие максимальные элементы
Ввести две матрицы действительных чисел 4х5. Поменять местами строки матриц, содержащие...

Поменять местами строки матрицы, содержащие максимальные элементы
В двух произвольно заданых двумерных массивах поменять местами строки, содержащие максимальные...

В двух массивах поменять местами строки, содержащие максимальные элементы
В двух произвольно заданных двумерных массивах поменять местами строки, со-держащие максимальные...


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

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

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