1

Тема: Двовимірні масиви

Написати програму, яка знаходить індекс того рядочка матриці, який містить найбільшу кількість елементів, що повторюються.

2

Re: Двовимірні масиви

Ось початок :

#include <iostream>
#include <time.h>
using namespace std;
void main()
{
    srand(time (NULL));
    const int cols=6,rows=5;
    int arr[rows][cols];
    int i,j;
    for ( i = 0; i < rows; i++)
    {
        for ( j = 0; j <cols ; j++)    {
            arr[i][j]=rand ()%10;
            cout <<arr[i][j]<<"  ";
        }cout <<endl;
    }
    cout <<endl;
}

3

Re: Двовимірні масиви

Хехе, так початок лише заповнює масив випадковими числами, і виводить їх, але ж ніяк і нічого не підраховує.

4

Re: Двовимірні масиви

Прихований текст

Ще одне "мамо, я зробив половину, зроби за мене другу".

Ви хочете стати програмістом? Тоді пишіть програму самостійно, а якщо десь якась незрозуміла поведінка - питайте.
Ви хочете просто отримати оцінку? Тоді ідіть на іншу спеціальність, я не хочу потім ризикувати, що на моїй машині будуть фрагменти вашого коду.

5

Re: Двовимірні масиви

підкажіть , як порівняти кожен елемент рядка матриці?

6

Re: Двовимірні масиви

Давайте розбирати. Ви навіть простими словами недоговорюєте, що вам треба, тому і з програмами не виходить - комп'ютер вимагає максимальної чіткості.
Очевидно, що порівняти можна лише два елементи. "Порівняти кожен елемент" просто так неможливо. Можна порівняти, наприклад, кожен елемент із якимось конкретним числом. Або кожен елемент із кожним іншим елементом. Для цього потрібно перебрати всі елементи (цикл) і всередині цього циклу перебрати всі інші елементи (другий цикл), а потім їх порівняти. Отже, вам потрібні вкладені цикли. І вони, звісно, мають бути у ще одному циклі - по рядках.

7

Re: Двовимірні масиви

порівнює з кожним наступним ...


int max_repeat=0;int count =0;
   for (int i = 0; i < rows; i++){
   
for ( i = 0; i <rows; i++)
    {
        
        for ( j = 0; j <cols ; j++)
        {
        if(arr[i][j]==arr[i][j+1])
            count++;
        

        }if (count>max_repeat)max_repeat=count;
         cout <<"Max repeat= "<<max_repeat<<endl;
        }
        
   }
   
        
 }

8

Re: Двовимірні масиви

mary_piku написав:

порівнює з кожним наступним ...


int max_repeat=0;int count =0;
   for (int i = 0; i < rows; i++){
   
for ( i = 0; i <rows; i++)
    {
        
        for ( j = 0; j <cols ; j++)
        {
        if(arr[i][j]==arr[i][j+1])
            count++;
        

        }if (count>max_repeat)max_repeat=count;
         cout <<"Max repeat= "<<max_repeat<<endl;
        }
        
   }
   
        
 }

це не робить сенсу, а ще форматування є жахливим, бррр.

Спробуйте потренуватись на одномірному масиві, типу такому

[1, 2, 3]

от порівняйте кожен елемент з кожним елементом, типу. спочтаку 1 порівнюємо з 1, потім 1 з 2, потім 1 з 3, потім 2 з 1, 2 з 2, 2 з 3, а потім 3 з 1, 3 з 2, 3 з 3, і виведіть результат. Він має бути таким
true, false, false,
false, true, false,
false, false, true

до речі, тут виходить одинична, симетрична матриця

Подякували: koala1

9

Re: Двовимірні масиви

Одна з проблем навчання програмування в наших школах - повторення старих патернів, які вже стали антипатернами.
У вас є цикл по рядках? Я не буду тут про вказівники і ітератори, але який стосунок літера i має до рядків? Хай змінна зветься row:

for (int row = 0; row < rows; row++){
  //елементи рядка будуть arr[row][..]
...
}

А два внутрішніх цикли мають бути по одному рядку - тобто обидва мають йти по останньому індексу.

10

Re: Двовимірні масиви

koala написав:

Одна з проблем навчання програмування в наших школах - повторення старих патернів, які вже стали антипатернами.
У вас є цикл по рядках? Я не буду тут про вказівники і ітератори, але який стосунок літера i має до рядків? Хай змінна зветься row:

for (int row = 0; row < rows; row++){
  //елементи рядка будуть arr[row][..]
...
}

А два внутрішніх цикли мають бути по одному рядку - тобто обидва мають йти по останньому індексу.

коли я навчався в вузі, то в нас доречі координатами комірки матриці були "i,j".

Подякували: FakiNyan1

11

Re: Двовимірні масиви

то, мабуть, з математики пішло. Бо в нас теж використовували i,j для позначення елементів матриці, наприклад.

12

Re: Двовимірні масиви

Та в принципі нічого страшного в i та j немає, але коли їх багато, починається плутанина. Тому краще те, що можна нормально назвати, називати нормально.

13

Re: Двовимірні масиви

FakiNyan,

#include <iostream>
using namespace std;
void main()
{
    int mass[3]={1,2,3};
    for (int i = 0; i <3 ; i++)
    {
        for (int j = 0; j <3 ; j++)
        
            if (mass[j]==mass[i])
                cout<<"true"<<" ";
            else 
                cout<<"false"<<" ";

            
        
        cout<<endl;

    }
    cout<<endl;
}
Подякували: koala, FakiNyan2

14

Re: Двовимірні масиви

Чудово. А тепер майже те саме - всередину циклу по row, і замість mass - arr[row], а замість cout - count++.
Лишилася пара дрібних проблем: ви порівнюєте всі пари двічі (наприклад, mass[1] із mass[2] спершу при i==1, j==2, потім при i==2,j==1), і ще порівнюєте елемент із самим собою. Підказка: це можна виправити, якщо починати внутрішній цикл не з 0.

Подякували: FakiNyan1

15

Re: Двовимірні масиви

всеодно не доходить ((

int max_repeat=0;int count =0;
   for (int rows= 0; rows< rows; rows++){
   
       for (int i = 1; i <rows ; i++)
    {
        for (int j = 1; j <rows ; j++)
        {
            if (arr[rows]==arr[rows+1])
                
                 count++;

        }

        }
       if (count>max_repeat)max_repeat=count;
         cout <<"Max repeat= "<<max_repeat<<endl;
        }
        
   }

16

Re: Двовимірні масиви

Було:

mary_piku написав:
if (mass[j]==mass[i])

Що я просив:

koala написав:

замість mass - arr[row]

Яким чином ви заміною mass на arr[row] отримали

mary_piku написав:
if (arr[rows]==arr[rows+1])

а не

if (arr[rows][j]==arr[rows][i])

можете пояснити? В чому логіка була?