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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
ekost
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 31
#1

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

05.10.2012, 10:09. Просмотров 2360. Ответов 4
Метки нет (Все метки)

Подскажите чайнику: Сейчас учусь на заочке на первом курсе, изучаю С++.
задача такая:
1. В целочисленном двумерном массиве найти количество строк с нулевыми элементами (решено самостоятельно с легкостью.
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
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
//Лабораторная работа 5 - работа с многомерными массивами
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
 
void main() {
  const int nrow=3, ncol=5;
    int a [nrow] [ncol], //Матрица 
    b [ncol], // Дополнительный массив
    i, j,// индексы столбцов и строк матрицы
    sum, // Счетчик нулевых элементов
    temp; // Счетчик повторяющихся элементов
            
    clrscr();
        
    // Заполнение матрицы элементами
    cout <<"Введите элементы массива:"<<endl;
    for (i=0; i<nrow; i++)
        for (j=0; j<ncol; j++)
            cin>>a[i] [j];
            
    cout<<"Для продолжения работы нажмите любую клавишу \n";
    getch();
 
    clrscr();
        
    // Распечатка матрицы
    cout<<"       Введенная матрица"<<endl;
    for (i=0; i<nrow; i++)
       { 
        for (j=0; j<ncol; j++)
        cout<<setw (5)<<a [i] [j];
            cout<<endl;
    }
    
    // Подсчет строк с нулевым элементом
    sum=0;
    for (i=0; i<nrow; i++) 
        for (j=0; j<ncol; j++)
                {
        if (a[i][j]==0) {sum++; break;}
        }
    
    //Вывод результатов подсчета строк с нулями
    if (sum!=0) cout<<"Количество строк с нулевыми элементами = "<<sum<<endl;
        else cout<<"Строк с нулевыми элементами нет.\n\n";
     
    
    // Подсчет серии одинаковых элементов  - То, что не смог решить 
  temp=0;
   for (i=0; i<(nrow-1); i++)
   {
        for (j=0; j<ncol; j++)
        { 
         if (a[i][j]==a[i+1][j])
            temp++;
              b[j]=temp; // Что то не так сделал, либо скобки не так расставил, либо пропустил какой то элемент
        }
      temp=0;
   } 
       
     
     //контрольная распечатка
     for (j=0; j<ncol; j++)
    cout<<b[j]<<"  "; // заполнения одномерного массива значениями максимальных повторяющихся элементов программа выводит левые цифры. Тестировал заполняя матрицу единицами, на выводе - ряд цифр от 6  до 11
 
// Потом допишу определение индекса элемента массива с максимальным значением
  
    getch();
    
}
Код я предоставил, с подробными комментариями.

Что не получается - программа вместо того, чтобы вывести на контрльную распечатку одномерный массив с максимальными значениями повторяющихся элементов ( с целью выявления индекса максимального элемента) выводит левые цифры.
В частности, при тестировании - заполнял массив единицами, программа выводит ряд чисел от 6 до 11.
Подскажите, что я не так сделал?
Подозреваю, что не ввел какой то еще оператор + неправильно расставил фигурные скобки.

Надеюсь на помощь.

Добавлено через 13 часов 11 минут
Что, никто ничего не подскажет? Я второй день бьюсь, программу прарктически всю написал, но дальше - мозгов не хватает...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2012, 10:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нахождение номера столбца с максимальной серией одинаковых элементов в двумерном массиве (C++):

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

Функция для нахождение минимального значения каждого столбца в двумерном массиве - C++
Как создать функцию, код, который в строчках 41 - 55 Спасибо заранее!!! #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; ...

Найти строку с максимальной суммой элементов в двумерном массиве - C++
Найти строку с максимальной суммой элементов в двумерном массиве. Как это реализовать? Желательно код с коментарием, или просто...

Найти в двумерном массиве строку с наибольшим количеством одинаковых элементов - C++
Помогите понять как работать с двумерными массивами. Условие задания: Найти строку с наибольшим количеством одинаковых элементов. Вот что я...

Поиск самой длиной серии одинаковых элементов в двумерном массиве - C++
Помогите, нужно найти самую длинную серию одинаковых элементов в двумерном массиве.

В двумерном N*K массиве целых чисел поменять строку с максимальной суммой элементов со строкой с минимальной суммой элементов. - C++
Массив заполнять случайными числами, кроме случаев, когда это нецелесообразно (прогрессия, лабиринт). -В двумерном N*K массиве целых...

4
David Sylva
1290 / 952 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.10.2012, 10:27 #2
Вот тебе сразу подсказка void main() - писать неправильно, не по стандарту.
1
ekost
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 31
05.10.2012, 11:20  [ТС] #3
Цитата Сообщение от David Sylva Посмотреть сообщение
Вот тебе сразу подсказка void main() - писать неправильно, не по стандарту.
Спасибо за подсказку, я просто писал так, как в методичке указано было.
А как правильно? int main()
{
----
return 0:
}
так? Это второй вариант, который нам давали.

И что можно сказать по поводу моего непосредственного вопроса? Я не прошу всю программу написать, я прошу указать мою ошибку...
0
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
05.10.2012, 11:30 #4
Цитата Сообщение от ekost Посмотреть сообщение
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
39
40
41
42
43
44
#include <iostream>
#include <algorithm>
#include <map>
 
using namespace std;
 
bool pred(const pair<int, int>& lh, const pair<int, int>& rh)
{
   return lh.second < rh.second;
}
 
int main()
{
   const size_t szArr = 5;
   int arr[szArr][szArr] = {
      {0, 3, 6, 0, 5},
      {1, 1, 7, 0, 2},
      {1, 2, 8, 0, 4},
      {2, 4, 9, 1, 5},
      {3, 5, 1, 3, 1},
   };
   
   map<int, int> counter;
   int maxDuplicates = 0;
   int columnIndex = -1;
   
   for(size_t i = 0; i < szArr; ++i)
   {
      counter.clear();
      for(size_t j = 0; j < szArr; ++j)
      {
         ++counter[arr[j][i]];
      }
      map<int, int>::iterator it = max_element(counter.begin(), counter.end(), pred);
      if (maxDuplicates < it->second)
      {
         maxDuplicates = it->second;
         columnIndex = i;
      }      
   }
   
   cout << "Column with index = " << columnIndex << " has " << maxDuplicates << " duplicates! ";
   return 0;
}
http://liveworkspace.org/code/7b73afc263741ed8e9e8cb07713f756f

Цитата Сообщение от ekost Посмотреть сообщение
А как правильно?
C++
1
2
3
4
int main()
{ 
return 0:
}
да этот вариант удовлетворяет требованиям стандарта
0
ekost
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 31
05.10.2012, 18:16  [ТС] #5
Всем спасибо за участие, я нашел ошибку в своем коде самостоятельно.
Для неофитов - последовавтелей - орбъясняю: в том коде перебора массива, где определяются максимальные серии последовательных элементов были перепутаны местами переменные.
Было:
C++
1
2
for (i=0; i<nrow; i++)
for (j=0; j<ncol; j++)
А нужно поменять местами эти два цикла, то есть - первым считывать столбец.

После этого все заработало.
Ну а написать цикл считающий индекс максимального элемента массива b[j] - не проблема!
0
05.10.2012, 18:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2012, 18:16
Привет! Вот еще темы с ответами:

В двумерном массиве найти среднее арифметическое первого столбца и количество элементов - C++
В двумерном массиве найти среднее арифметическое первого столбца и количество элементов в каждом из следующих столбцов, превышающих среднее...

Перед каждой серией одинаковых элементов массива вставить нули - C++
помогите пожалуйста отладить программу. задание &quot;Дан целочисленный массив размера 20(10 элементов выводятся, остальные как резерв для...

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

В двумерном массиве определить для каждого столбца сумму минимального и максимального элементов - C++
Дан двумерный массив из 5 строк и 6 столбцов. Определить для каждого столбца массива сумму минимального и максимального элементов. Найти...


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

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

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