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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lokoss
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
#1

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

25.07.2012, 21:00. Просмотров 955. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2012, 21:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти наименьшие элементы матрицы (C++):

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

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

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

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

В квадратной матрице определить наименьшие элементы каждого рядка - C++
Помогите решить программу. В квадратной матрице А определить наименьшие элементы каждого рядка и найти их суму. Заранее спасибо.

Наибольший и наименьшие значения в заштихованной части матрицы - C++
Привет всем! Прошу помощи в решении следующей задачи: Сформировать матрицу (любую произвольную). Найти наибольший и наименьший элемент...

12
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
25.07.2012, 21:14 #2
Lokoss, создаёшь ещё один массив, размер которого равен количеству строк матрицы. Записываешь туда найденные минимальные значения (нужно тупо пройтись по строке и сравнивать с минимальным на данный момент. На первом этапе в качестве минимального взять первый элемент).Потом проходишься по созданному одномерному массиву и сравниваешь элементы в поисках максимального. Никакая сортировка не нужна здесь.
1
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
25.07.2012, 21:29 #3
То есть нужно вывести максимальное и минимальное число ? И индекс его ? или без индекса ?
1
nameless
Эксперт С++
334 / 298 / 14
Регистрация: 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/7f65a9...5cd1ee65fb95a7
1
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 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
Lokoss
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
26.07.2012, 13:36  [ТС] #6
Спасибо большое ребят, очень помогли!
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2012, 14:16 #7
Цитата Сообщение от Lokoss Посмотреть сообщение
Спасибо большое ребят, очень помогли!

Не по теме:

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

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

Не по теме:

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

0
Lokoss
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
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
26.07.2012, 14:43 #11
Lokoss, Вы не вручную будете матрицу заполнять? Уберите заполнение случайными числами.
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 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
Lokoss
0 / 0 / 0
Регистрация: 23.07.2012
Сообщений: 15
26.07.2012, 15:47  [ТС] #13
Уху! Спасибо, до меня дошло! Просто нужно было разобраться в цикле!!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2012, 15:47
Привет! Вот еще темы с ответами:

В матрице 3*4 поменять местами наименьшие элементы в первой и третьей строке - C++
Подскажите , что не так ! #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { void...

Вывести на экран координаты элементов матрицы, которые в своей строке наименьшие - C++
Помогите пожалуйста написать программу,которая выводит на экран координаты элементов двумерного массива которые в своей строке...

Поменять местами элементы главной и побочной диагонали матрицы и найти столбцы, элементы которых убывают - C++
С++ Задана матрица A(n,n). Поменять местами элементы главной и побочной диагонали. В преобразованной матрице найти столбцы, элементы...

Найти сумму всех элементов матрицы и заменить ею все диагональные элементы этой матрицы - C++
Найти сумму всех ее элементов и заменить ею все диагональные элементы этой матрицы.


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
26.07.2012, 15:47
Ответ Создать тему
Опции темы

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