Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
1

Найти наименьшие элементы матрицы

25.07.2012, 21:00. Просмотров 1778. Ответов 12
Метки нет (Все метки)

Всем привет! Ребят помогите пожалуйста с заданием Найти наименьшие элементы в каждой строке матрицы и номер максимального с них. Саму матрицу я задал, а дальше не знаю, перепробовал кучу вариантов, ничто не подходит. Может как-то по методу пузырька? Заранее огромное спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
#include <conio.h>
void main()
{
    int i, j,;
    int matr[4][3], mas[4];
    cout<<"Input matr\n";
 
    for(i=0;i<4;i++)
    for(j=0;j<3;j++) cin>>matr[4][3];
     
 
        
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2012, 21:00
Ответы с готовыми решениями:

Две матрицы размером 5 * 5. Найти детерминант их суммы, а также наименьшие и наибольшие элементы
Так сложилось что в понедельник нужно сдать эту лабораторную работу иначе меня исключат из...

Найти наименьшие элементы каждой строки квадратной матрицы и поместить их на главную диагональ
где ошибка ? нужно найти малейшие элементы каждой строки квадратной матрицы и поместить их на...

Выбрать в строках матрицы самые левые наименьшие элементы и поставить их в первый столбец
Дана матрица N×M, состоящая из натуральных чисел. Выбрать в строках самые левые наименьшие...

Найти наименьшие элементы в каждой матрице и напечатать их номера
Даны одномерные массивы A, B, C. Записать их в виде матриц AA , BB , CC , найти наименьшие элементы...

12
Мастер кустарных методов
230 / 225 / 17
Регистрация: 09.11.2010
Сообщений: 680
25.07.2012, 21:14 2
Lokoss, создаёшь ещё один массив, размер которого равен количеству строк матрицы. Записываешь туда найденные минимальные значения (нужно тупо пройтись по строке и сравнивать с минимальным на данный момент. На первом этапе в качестве минимального взять первый элемент).Потом проходишься по созданному одномерному массиву и сравниваешь элементы в поисках максимального. Никакая сортировка не нужна здесь.
1
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
25.07.2012, 21:29 3
То есть нужно вывести максимальное и минимальное число ? И индекс его ? или без индекса ?
1
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
25.07.2012, 22:07 4
Lokoss,

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
#include <iostream>
#include <algorithm>
#include <random>
#include <vector>
 
#include <boost/multi_array.hpp>
 
const int M = 5;
const int N = 5;   
 
int main() {
   typedef boost::multi_array <int, 2> matrix_t;
   typedef boost::multi_array_types::index_range range;
   typedef matrix_t::array_view <1>::type matrix_view;
   typedef boost::multi_array_ref <int, 1> array_ref;
   
   std::mt19937 rng;
   std::uniform_int_distribution <int> int_dist(-50, 50);
   
   matrix_t matrix(boost::extents[M][N]);
   array_ref matrix_ref(
      matrix.data(),
      boost::extents[matrix.num_elements()]
   );
 
   std::generate(
      matrix_ref.begin(),
      matrix_ref.end(),
      [&int_dist, &rng]() -> int {
            return int_dist(rng);
      }
   );
   
   std::vector <int> min_vector;
   for (std::size_t index = 0; index < N; index++) {
      matrix_view row_view = matrix[boost::indices[index][range()]];
      min_vector.push_back(
         *std::min_element(
            row_view.begin(),
            row_view.end()
          )
      );  
   }
     
   for (std::size_t i = 0; i != matrix.size(); ++i) {
      std::copy(
         matrix[i].begin(),
         matrix[i].end(),
         std::ostream_iterator <int>(std::cout, "\t")
      );
      std::cout << '\n';
   }
   
   std::cout << "Minimum elements in rows: "; 
   std::copy(
      min_vector.begin(),
      min_vector.end(),
      std::ostream_iterator <int>(std::cout, " ")
   );
   
   std::cout << "Maximum element in minimum: "; 
   std::cout <<
      std::distance(
         min_vector.begin(),
         std::max_element(
            min_vector.begin(),
            min_vector.end()
         )
      );
 
   return 0;
}
http://liveworkspace.org/code/... ee65fb95a7
1
Эксперт С++
4251 / 2225 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 22:15 5
Простенький алгоритмик (выводит мин.элемент каждой строки и в конце индекс максимального из этих минимальных):
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
#include<stdio.h>
#include<stdlib.h>
#define M 3
#define N 5
 
void Init(int *a, int *end)
{
   if (a < end)
   {
       *a = rand() % 100;
       Init(a + 1, end);
   }
}
 
void Print(int *a, int i, int *end)
{
   if (a < end)
   {
       printf("%d%c", *a, i%N ? ' ' : '\n');
       Print(a + 1, i + 1, end);
   }
}
 
int Min(int *beg, int *a)
{
   int buf;
   return (beg < a) ? ((buf = Min(beg, a - 1)) < *a ? buf : *a) : *beg;
}
 
int main()
{
   int i, a[M][N], max, imax = 0, min;
   srand(time(NULL));
   Init(*a, *a + M*N);
   Print(*a, 1, *a + M*N);
   printf("%d\n", max = Min(*a, *a + N - 1));
   for (i = 1; i < M; i++)
   {
      min = Min(*a + i*N, *a + (i + 1)*N - 1);
      if (min > max)
      {
          imax = i;
          max = min;
      }
      printf("%d\n", min);
   }
   printf("i = %d\n", imax);
   return 0;
}
Хотел совсем без for, но доп.память нужна
0
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
26.07.2012, 13:36  [ТС] 6
Спасибо большое ребят, очень помогли!
0
Эксперт С++
4251 / 2225 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2012, 14:16 7
Цитата Сообщение от Lokoss Посмотреть сообщение
Спасибо большое ребят, очень помогли!

Не по теме:

очень помогли сдать халявную лабу или правда помогли понять? Что-то во второе не верится совсем...

1
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
26.07.2012, 14:19  [ТС] 8
Нет, не лабу, я учу на самом деле, хочу поступать
0
Thinker
26.07.2012, 14:24
  #9

Не по теме:

С этого и надо было начинать, а то моя программа "самое то для новичков":jokingly:

0
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
26.07.2012, 14:27  [ТС] 10
Так вот сейчас сижу и пытаюсь догнать
Насколько понимаю, вы делали через функции, вот здесь ошибки выдавало, сначала не могло найти переменную time, я ее объявил теперь проблема здесь:
C++
1
2
int i, a[M][N], max, imax = 0, min, time;
   srand( time(NULL));
пишет:C:\Documents and Settings\Daniil\Рабочий стол\С++\Masuv\testMas.cpp(33) : error C2064: term does not evaluate to a function
0
Мастер кустарных методов
230 / 225 / 17
Регистрация: 09.11.2010
Сообщений: 680
26.07.2012, 14:43 11
Lokoss, Вы не вручную будете матрицу заполнять? Уберите заполнение случайными числами.
1
511 / 463 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
26.07.2012, 14:58 12
Цитата Сообщение от Lokoss Посмотреть сообщение
сначала не могло найти переменную time, я ее объявил
Её не надо объявлять, надо подключить
C++
1
#include <time.h>
Добавлено через 13 минут
Без дополнительного массива:
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
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
 
int main()
{      
    srand(static_cast<unsigned int>(time(0)));
 
    const int rows = 5, cols = 5;
 
    int matrix[rows][cols];    
    
    std::cout << "matrix:\n";
    for(int i = 0; i < rows; ++i)
    {
        for(int j = 0; j < cols; ++j)
        {
            matrix[i][j] = rand() % 100;
            std::cout << std::setw(3) << matrix[i][j] << " ";
        }
        std::cout << "\n";
    }
    
    int min, max, i_max = 0;
    std::cout << "\nmins:\n";
    for(int i = 0; i < rows; ++i)
    {
        min = matrix[i][0];
        
        for(int j = 0; j < cols; ++j)
            if(matrix[i][j] < min)
                min = matrix[i][j];
        
        std::cout << "row " << i << ": " << min << "\n";
        
        if(i == 0 || min > max)
        {
            max = min;
            i_max = i;
        }
    }
    
    std::cout << "\nmax = " << max << " (row " << i_max << ")";
    
    return 0;
}
2
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
26.07.2012, 15:47  [ТС] 13
Уху! Спасибо, до меня дошло! Просто нужно было разобраться в цикле!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2012, 15:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти элементы массива наименьшие среди чётных чисел и наибольшие среди нечетных
Дан массив из N целых чисел типа int где N&lt;=16. Найти значения и порядковые номера...

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

Определить наименьшие элементы строк в заданной матрицк
Дана действительная матрица пазмера mxn. Определить числа b1,...,bm, равные соответственно:...

Вывести наименьшие значения матрицы и их индексы
Как вывести в двухмерном массиве наименьшее значение и его индекс , и если таких значений несколько...


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

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

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