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

Двумерный массив (матрица) - C++

Войти
Регистрация
Восстановить пароль
 
retuse
0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 5
20.12.2013, 18:06     Двумерный массив (матрица) #1
Здравствуйте, ребята. В программе нужно поменять местами максимальный и минимальный элементы в каждом столбце матрицы. Основной код я написал, остался только третий case, с которым я никак не могу разобраться.
Подскажите, пожалуйста, как это можно реализовать (простым способом, без использования библиотек, скриптов, функции "swap" и прочего)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include <clocale>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    srand(time(NULL));
 
    int **a = NULL;
    int height = 0;
    int width = 0;
    int menu = 0;
    int done = 0;
 
    printf("Произвольные матрицы.\n");
    printf("Поменять местами максимальный и минимальный элементы в каждом столбце.\n");
    printf("\nВведите размерность матрицы\n");
    printf("\nШирина: ");
    scanf("%d", &width);
    printf("Высота: ");
    scanf("%d", &height);
    printf("\n");
 
    a = new int*[height];
    for (int i = 0; i < height; i = i + 1)
    {
        a[i] = new int[width];
    }
 
    do
    {
        printf("1. Ввести элементы матрицы с клавиатуры\n");
        printf("2. Заполнить элементы матрицы случайными значениями\n");
        printf("3. Обработать матрицу\n");
        printf("4. Вывести обработанную матрицу на экран\n");
        printf("---------------------\n");
        printf("0. Выход\n\n");
        
        scanf("%d", &menu);
 
        switch(menu)
        {
        case 1:
            printf("\n");
            printf("Введите элементы: \n");
            for (int i = 0; i < height; i = i + 1)
            {
                for (int j = 0; j < width; j = j + 1)
                {
                    printf("Элемент %d строки, %d столбца ", i+1, j+1);
                    scanf("%d", &a[i][j]);
                }
            }
            printf("\nВаша матрица:\n");
            for (int i = 0; i < height; i = i + 1)
            {
                for (int j = 0; j < width; j = j + 1)
                {
                    printf("%d ", a[i][j]);
                }
                printf("\n");
            }
            printf("\n");
 
            break;
        case 2:
            for (int i = 0; i < height; i = i + 1)
            {
                for (int j = 0; j < width; j = j + 1)
                {
                    a[i][j] = rand() % 10;
                }
            }
            
            printf("\nМатрица заполнена случайными элементами:\n");
            for (int i = 0; i < height; i = i + 1)
            {
                for (int j = 0; j < width; j = j + 1)
                {
                    printf("%d ", a[i][j]);
                }
                printf("\n");
            }
            printf("\n");
 
            break;
        case 3:
 
            printf("Матрица успешно обработана.\n");
 
            break;
        case 4:
            printf("Обработанная матрица:\n");
 
            for (int i = 0; i < height; i = i + 1)
            {
                for (int j = 0; j < width; j = j + 1)
                {
                    printf("%d ", a[i][j]);
                }
                printf("\n");
            }
            printf("\n");
 
            break;
        case 0:
            break;
        default:
            break;
        }
    } while (menu != 0);
 
 
 
    for (int i = 0; i < height; i = i + 1)
    {
        delete [] a[i];
    }
 
    delete [] a;
 
    getchar();
 
    return 0;
}
Хотя можно и со "swap", только объясните мне, нубу, как эта функция работает и какая для нее библиотека нужна -_-
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2013, 18:06     Двумерный массив (матрица)
Посмотрите здесь:

Двумерный массив C++
C++ Двумерный массив: целочисленная квадратная матрица
двумерный массив ( матрица ) C++
C++ Двумерный массив(квадратная матрица)
C++ Одномерный и двумерный массив(матрица)
Двумерный массив (матрица) C++
Двумерный массив C++
C++ Двумерный массив-матрица
Матрица (двумерный массив). Преобразовать элементы построчно C++
C++ Класс матрица, описывающий двумерный массив
Двумерный массив (квадратная матрица) - C++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
 Аватар для palva
2413 / 1635 / 204
Регистрация: 08.06.2007
Сообщений: 6,479
Записей в блоге: 4
20.12.2013, 18:17     Двумерный массив (матрица) #2
Цитата Сообщение от retuse Посмотреть сообщение
swap
по английски это поменать местами. То есть вместо нее можно написать три строчки:
C++
1
2
3
temp=a;
a=b;
b=temp;
ПерС
366 / 282 / 84
Регистрация: 05.11.2013
Сообщений: 806
Записей в блоге: 5
Завершенные тесты: 1
20.12.2013, 18:18     Двумерный массив (матрица) #3
C++
1
2
3
4
5
6
7
8
for (int j=0; j< width; j++) {
 int max=a[0][j],imax=0,min=a[0][j],imin=0;
 for (int i=1; i< height; i++) {
  if (a[i][j]<min) { min=a[i][j]; imin=i; }
  if (a[i][j]>max) { max=a[i][j]; imax=i; }
 }
 a[imin][j]=max; a[imax][j]=min;
}
ZeR_0
116 / 108 / 37
Регистрация: 30.01.2013
Сообщений: 297
20.12.2013, 18:38     Двумерный массив (матрица) #4
1) Взяли строку.
2) Нашли min и max
C++
1
2
3
4
5
6
7
8
9
10
int min,max; //будем хранить здесь номера столбцов
for(int i = 0; i < n; i++){
    min = 0; max = 0;
    for(int j = 0; j < m; j++){
        if(array[i][j] < array[i][min])
           min = j;
        if(array[i][j] > array[i][max])
           max = j;
    }
}
3) Поменяли местами
C++
1
2
3
buf = array[i][min];
array[i][min] = array[i][max];
array[i][max] = buf;
4) Перешли к следующей строке

2+3 как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int buf;
int min,max; //будем хранить здесь номера столбцов
for(int i = 0; i < n; i++){
    min = 0; max = 0;
    for(int j = 0; j < m; j++){
        if(array[i][j] < array[i][min])
           min = j;
        if(array[i][j] > array[i][max])
           max = j;
    }
    buf = array[i][min];
    array[i][min] = array[i][max];
    array[i][max] = buf;
}
Добавлено через 17 минут
Цитата Сообщение от retuse Посмотреть сообщение
Хотя можно и со "swap", только объясните мне, нубу, как эта функция работает и какая для нее библиотека нужна -_-
swap()
retuse
0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 5
20.12.2013, 20:33  [ТС]     Двумерный массив (матрица) #5
Ребята, спасибо вам всем за помощь! Теперь разобрался.
Yandex
Объявления
20.12.2013, 20:33     Двумерный массив (матрица)
Ответ Создать тему
Опции темы

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