Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Vadimnv
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 22
1

Найти минимальный элемент матрицы, и поменять его местами с первым элементом

26.05.2017, 13:46. Просмотров 590. Ответов 9

вот задание: Найти минимальный элемент матрицы С (размер m*n), и поменять его местами с первым элементом.


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
#include<stdio.h>
#include<conio.h>
#define m 3
#define n 4
#include <stdlib.h>
int main()
{
    int C[m][n];
    int i,j,min,k,t,q;                                          
    
    for(i=0; i<m; i++)
    {
        for(j=0;j<n;j++)
        {
            printf("C[%d][%d]=",i,j);
            scanf("%d",&C[i][j]);
        }
        printf("\n");
    }
    //нахождение минимального
    min=C[0][0];                                    
    for(i=1; i<m; i++)                          
    {
        for(j=1;j<n;j++)
        {
            if(C[i][j]<min)
            {
                min=C[i][j];
                t=i;        //запоминаем индексы
                q=j;
            }
        }
 
    }
    //перестановка
    k=C[0][0];
    C[0][0]=C[t][q];
    C[t][q]=k;
   for(i=0; i<m; i++)
    {
        for(j=0;j<n;j++)
        {
            printf( "%2d ", C[ i ][ j ] );
 
         }
      printf( "\n" );
    }
    system ("pause");
    return 0;
}
вот и прога, но препод орет, потому что должно считыватся через файл и это должен быть динамический массив!
очень прошу помочь!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2017, 13:46
Ответы с готовыми решениями:

Поменять местами максимальный элемент матрицы с его первым элементом а минимальный с последним
ДВУМЕРНЫЙ МАССИВ: Поменять местами максимальный элемент матрицы F(k,p)в его первым элементом, а...

Найти минимальный из элементов ниже главной и выше побочной диагонали и поменять его местами с первым элементом матрицы
Найти минимальный из элементов в области ,ниже главной и выше побочной диагонали и поменять его...

Найти минимальный элемента массива и поменять его местами с первым элементом
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() {...

Найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом
Дана матрица M*N. Нужно найти максимальный и минимальный элемент в каждой строке массива и поменять...

Найти максимальный элемент стека и поменять его местами с первым элементом
Информационное поле элемента стека числовое. Найти максимальный элемент стека и поменять его...

9
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
26.05.2017, 14:25 2
Цитата Сообщение от Vadimnv Посмотреть сообщение
очень прошу помочь
Разобраться с преподом, чтобы не орал?

У вас С или С++? Ничего плюсового не увидел.
0
Vadimnv
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 22
26.05.2017, 14:28  [ТС] 3
Цитата Сообщение от MrGluck Посмотреть сообщение
Разобраться с преподом, чтобы не орал?

У вас С или С++? Ничего плюсового не увидел.
да C++, нет не с преподом, как сделать динамический массив?
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
26.05.2017, 14:36 4
Цитата Сообщение от Vadimnv Посмотреть сообщение
как сделать динамический массив?
Можно через вектор, можно через new[]. Но вам наверное нужна функция malloc?
Размер массива как узнать заранее если из файла считывать? Можно первыми двумя цифрами задать. А если никакой информации нет - то только через вектор (std::vector)
0
26.05.2017, 14:36
Vadimnv
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 22
26.05.2017, 14:38  [ТС] 5
Цитата Сообщение от MrGluck Посмотреть сообщение
Можно через вектор, можно через new[]. Но вам наверное нужна функция malloc?
Размер массива как узнать заранее если из файла считывать? Можно первыми двумя цифрами задать. А если никакой информации нет - то только через вектор (std::vector)
по сути он должен считываться с файла, поэтому и нужен динамический массив, я вот сижу и не вдупляю
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
26.05.2017, 14:57 6
Vadimnv, всё-таки если массив двумерный, то не выйдет так просто определить её размеры. Например 12 чисел в файле могут соответствовать матрице 1*12, 2*6, 3*4, ...
Это если отбросить извращения со считыванием в строку и определением количества элементов в строке.
В вашем случае наверное будет достаточно размеры указать в файле первыми двумя параметрами. Сейчас накидаю на обычных динамических массивах. Но для считывания и выделения памяти буду использовать средства С++.

Добавлено через 11 минут
Начал добавлять считывание из файла и вообщем переписал полностью код..
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
#include <cstdlib>
#include <fstream>
#include <iostream>
 
int main()
{
    // поток на считывание из файла
    std::ifstream ifs("input.txt");
    // не удалось открыть поток (нет прав или файл отсутствует)
    if (!ifs)
        return 1;
 
    // считываем размеры матрицы
    int m, n;
    ifs >> m >> n;
    // выделяем память, заполняем матрицу и выводим на экран
    // выделяем память под массив указателей (строк)
    int **C = new int*[m];
    for (int i = 0; i < m; i++)
    {
        // для каждой строки выделяем память под массив элементов
        C[i] = new int[n];
        for (int j = 0; j < n; j++)
        {
            // считываем значение
            ifs >> C[i][j];
            // выводим его на экран
            std::cout << C[i][j] << " ";
        }
        // перевод строки
        std::cout << std::endl;
    }
 
    // нахождение минимального
    // запоминаем адрес первого элемента
    int *pMin = &C[0][0];
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            // если очередной элемент массива меньше того, на который указывает pMin
            if (C[i][j] < *pMin)
                // pMin запоминает адрес текущего элемента
                pMin = &C[i][j];
 
    // перестановка
    int tmp = *pMin;
    // меняем элемент по адресу pMin
    *pMin = C[0][0];
    C[0][0] = tmp;
 
    // выводим результат на экран и освобождаем память
    // память освобождается в обратном порядке, то есть сначала каждая строка, а потом массив этих строк
    std::cout << "\nAfter swap:\n";
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
            std::cout << C[i][j] << " ";
        std::cout << std::endl;
        delete[] C[i];
    }
    delete[] C;
    system ("pause");
}
0
Vadimnv
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 22
26.05.2017, 18:12  [ТС] 7
Цитата Сообщение от MrGluck Посмотреть сообщение
Vadimnv, всё-таки если массив двумерный, то не выйдет так просто определить её размеры. Например 12 чисел в файле могут соответствовать матрице 1*12, 2*6, 3*4, ...
Это если отбросить извращения со считыванием в строку и определением количества элементов в строке.
В вашем случае наверное будет достаточно размеры указать в файле первыми двумя параметрами. Сейчас накидаю на обычных динамических массивах. Но для считывания и выделения памяти буду использовать средства С++.

Добавлено через 11 минут
Начал добавлять считывание из файла и вообщем переписал полностью код..
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
#include <cstdlib>
#include <fstream>
#include <iostream>
 
int main()
{
    // поток на считывание из файла
    std::ifstream ifs("input.txt");
    // не удалось открыть поток (нет прав или файл отсутствует)
    if (!ifs)
        return 1;
 
    // считываем размеры матрицы
    int m, n;
    ifs >> m >> n;
    // выделяем память, заполняем матрицу и выводим на экран
    // выделяем память под массив указателей (строк)
    int **C = new int*[m];
    for (int i = 0; i < m; i++)
    {
        // для каждой строки выделяем память под массив элементов
        C[i] = new int[n];
        for (int j = 0; j < n; j++)
        {
            // считываем значение
            ifs >> C[i][j];
            // выводим его на экран
            std::cout << C[i][j] << " ";
        }
        // перевод строки
        std::cout << std::endl;
    }
 
    // нахождение минимального
    // запоминаем адрес первого элемента
    int *pMin = &C[0][0];
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            // если очередной элемент массива меньше того, на который указывает pMin
            if (C[i][j] < *pMin)
                // pMin запоминает адрес текущего элемента
                pMin = &C[i][j];
 
    // перестановка
    int tmp = *pMin;
    // меняем элемент по адресу pMin
    *pMin = C[0][0];
    C[0][0] = tmp;
 
    // выводим результат на экран и освобождаем память
    // память освобождается в обратном порядке, то есть сначала каждая строка, а потом массив этих строк
    std::cout << "\nAfter swap:\n";
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
            std::cout << C[i][j] << " ";
        std::cout << std::endl;
        delete[] C[i];
    }
    delete[] C;
    system ("pause");
}
проблема в том что мы еще не проходили потоковую библиотеку iostream, и препод до этого докапается
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
26.05.2017, 18:28 8
Цитата Сообщение от Vadimnv Посмотреть сообщение
проблема в том что мы еще не проходили потоковую библиотеку iostream, и препод до этого докапается
Тогда вы вообще С++ не изучали, а то что ваш преподаватель называет С++ - обычный С. Я потому и спрашивал вас сначала про язык, а потом про способы выделения памяти. Подобные ограничения нужно сразу указывать.
0
Manowar
Отава Ё.
2008 / 556 / 183
Регистрация: 12.03.2016
Сообщений: 2,112
Завершенные тесты: 1
26.05.2017, 18:32 9
Цитата Сообщение от Vadimnv Посмотреть сообщение
мы еще не проходили потоковую библиотеку iostream
Проявите инициативу, скажите, что изучили самостоятельно.
0
Vadimnv
0 / 0 / 0
Регистрация: 10.02.2017
Сообщений: 22
26.05.2017, 18:57  [ТС] 10
Цитата Сообщение от мановар Посмотреть сообщение
Проявите инициативу, скажите, что изучили самостоятельно.
Учитель говорит что именно на этой библиотеке сделано больше всего прог , которые списывают. Буду изучать, и походу объяснять все, что в этой проге😐
0
26.05.2017, 18:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2017, 18:57

Найти максимальный элемент массива и поменять его местами с первым положительным элементом
Здравствуйте. Есть задание Дан массив чисел а0, а1, …, а15. Найти максимальный элемент этого...

Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их местами с первым и последним элементом
Я решила задачку но что-то не так(ошибки никак не исправлю... помогите исправте ошибки,что не...

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


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

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

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