Как найти количество строк упорядоченных по возрастанию

Я пишу код для практики и возникла ошибка. В общей картине, я понимаю, что мне нужно проверять каждый ряд матрицы на упорядоченность по возрастанию, а после прибавлять счётчику строк единицу. Но, дело в том, что я пыталась написать подобное и оно не считает как нужно. К примеру я ввожу 3 строки, которые явно упорядочены по возрастанию и одну по убыванию, но оно просто выбивает цифру 1, 2 или 0. Не могли бы вы помочь мне с этой частью кода?

#include <vcl.h> 
#include <iostream.h> 
#include <conio.h> 
#include <math.h> 
#include <stdio.h> 
#include <Windows.h>

int main(int argc, char* argv[]) 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251); 
 
    int i,j,n,m,k,result=0; 
    int r[10][10]; 

    cout<<"Ряды n"; 
    cin>>n; 
    cout<<"Столбцы: n"; 
    cin>>m; 
    cout<<"Матрицаn"; 

    for(i=0;i<n;i++)
    { 
        for(j=0;j<m;j++) 
            cin>>r[i][j];
    } 

    for(i=0;i<n;i++) 
    {
        if (i==n-1) 
            result++;
    } 
    cout<<"n Строки: "<<result; 

    getch(); 
    return 0;
}

Janat

0 / 0 / 0

Регистрация: 20.03.2012

Сообщений: 17

1

Найти количество строк матрицы, элементы которых упорядочены по возрастанию.

25.03.2012, 10:21. Показов 5238. Ответов 14

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

помогите докончить Matrix42. Дана матрица размера M × N. Найти количество ее строк, элементы которых упорядочены по возрастанию.

C++
1
2
3
4
5
6
7
8
9
 #include<iostream.h>
 #include<math.h>
 #define m 5
 #define n 5
 int main()
 {int a[m][n],i,j; 
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 cin>>a[i][j];

помогите кто знает!



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

25.03.2012, 10:21

14

Байт

Диссидент

Эксперт C

27488 / 17175 / 3784

Регистрация: 24.12.2010

Сообщений: 38,685

25.03.2012, 11:04

2

C
1
2
3
4
5
for(i=s=0; i<m; i++) {
 for(j=1; j<n; j++) if (a[i][j]<a[i][j-1])  break;
 if (j==n) s++;
}
cout<<s;



2



Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

25.03.2012, 11:27

3

Байт, все правильно только сдесь выходишь за пределы массива

Цитата
Сообщение от Байт
Посмотреть сообщение

if (j==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
#include "iostream"
#include "ctime"
using namespace std;
 
int main()
{
    srand(time(0));
    int  s = 0;
    int m, n;
    int a[100][100] = {0};
    cin >> m >> n;
 
    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cin >> a[i][j]; //cout << (a[i][j] = rand() % 10) << "t");
        }
        //cout << endl;
    }
    
     for(int i = 0; i < m; i++) 
     {
        for(int j = 1; j < n; j++)
        {
            if (a[i][j] < a[i][j-1])
            {
                break;
            }
            else if (j == n - 1)
            {
                s++;
            }
        }
    }
    cout << "nNumber of lines ordered in ascending - " << s;      
    system("pause >> null");
    return 0;
}



0



1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

25.03.2012, 11:33

4

Результат

Миниатюры

Найти количество строк матрицы, элементы которых упорядочены по возрастанию.
 



0



Диссидент

Эксперт C

27488 / 17175 / 3784

Регистрация: 24.12.2010

Сообщений: 38,685

25.03.2012, 11:34

5

Цитата
Сообщение от Infinity3000
Посмотреть сообщение

Байт, все правильно только сдесь выходишь за пределы массива
Сообщение от Байт
if (j==n)

Чего это вдруг? Никуда я не выхожу. Условие j==n означает, что цикл прокрутился до конца и закончился именно потому, что условие j < n не выполняется, а не по Бреку.
У тебя тоже правильно, но я долго смотрел, прежде чем это понял. Мой способ более «классический», что ли.



1



Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

25.03.2012, 11:48

6

Цитата
Сообщение от Байт
Посмотреть сообщение

Чего это вдруг? Никуда я не выхожу. Условие j==n означает, что цикл прокрутился до конца и закончился именно потому, что условие j < n не выполняется, а не по Бреку.
У тебя тоже правильно, но я долго смотрел, прежде чем это понял. Мой способ более «классический», что ли.

Допустим массив 5х5, получается что n = 5;

соответсвенно номера столбцов j = 0 — первый столбец
j = 1 — второй
j = 2 — третий
j = 3 — четвертый
j = 4 — пятый

то есть j не будет равен (в данном случае) 5, то есть n

поэтому условие

C++
1
if (j==n) s++;

ни когда не будет выполняться,

это тоже саммое что

C++
1
if (j == 5) s++;

Тоже саммое будет происходить и при других размерах массива!



0



sandye51

программист С++

841 / 600 / 147

Регистрация: 19.12.2010

Сообщений: 2,014

25.03.2012, 11:51

7

Infinity3000,

C
1
2
for(j=1; j<n; j++) if (a[i][j]<a[i][j-1])  break;
 if (j==n) s++;

цикл должен когда-либо закончиться и это очевидно
а когда он закончится? когда j < n станет false
а это будет когда j >= n, а поскольку j увеличивается равномерно на 1, то цикл кончится когда j == n



1



Infinity3000

25.03.2012, 11:53

Не по теме:

ок! не будем оффтопить, просто попробуйте приведенный выше мой код скомпилировать с мойм условие, а потом условием уважаемого Байт



0



программист С++

841 / 600 / 147

Регистрация: 19.12.2010

Сообщений: 2,014

25.03.2012, 11:54

9

код товарища Байт

Infinity3000, вы не понимаете что ваше условие стоит внутри цикла и там всегда j < n?
а у товарища Байт после и это меняет дело

Миниатюры

Найти количество строк матрицы, элементы которых упорядочены по возрастанию.
 



1



Байт

Диссидент

Эксперт C

27488 / 17175 / 3784

Регистрация: 24.12.2010

Сообщений: 38,685

25.03.2012, 11:56

10

Infinity3000, рассмотрим ситуацию

C
1
2
3
int aa[5] = { 1,3,5,8,12 };
for(j=1; j<5; j++) if (aa[j] < aa[j-1]) break;
printf("j=%dn", j);

Не по теме:

Из двух спорящих один — дурак, другой — подлец. Придется нам разыграть эти роли:)



0



1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

25.03.2012, 12:04

11

sandye51, посмотрите, условие один в один с вашим! (если я не где на запоролся)

Миниатюры

Найти количество строк матрицы, элементы которых упорядочены по возрастанию.
 

Найти количество строк матрицы, элементы которых упорядочены по возрастанию.
 



0



программист С++

841 / 600 / 147

Регистрация: 19.12.2010

Сообщений: 2,014

25.03.2012, 12:05

12

Infinity3000, еще раз повторяю — ваше условие внутри цикла, у Байт — вне
в этом вся соль!



1



Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

25.03.2012, 12:10

13

Цитата
Сообщение от sandye51
Посмотреть сообщение

Infinity3000, еще раз повторяю — ваше условие внутри цикла, у Байт — вне
в этом вся соль!

ну это ж не оптимальный вариант
какой смысл

C++
1
i, j;

оюбявлять как «глобальные» для цикла? если можно сделать что бы они существовали только внутри цикла? тогда код Байт’а не подойдет!

ну а вообще да сорри погарячился, код уважаемого Байт был изначально рабочий



1



программист С++

841 / 600 / 147

Регистрация: 19.12.2010

Сообщений: 2,014

25.03.2012, 12:12

14

Цитата
Сообщение от Infinity3000
Посмотреть сообщение

оюбявлять как «глобальные» для цикла? если можно сделать что бы они существовали только внутри цикла? тогда код Байт’а не подойдет!

ну это уже другой вопрос и тут претензии не к Байт, а к автору темы
так как у него изначально счетчики объявлены как глобальные для main



1



Infinity3000

1066 / 583 / 87

Регистрация: 03.12.2009

Сообщений: 1,255

25.03.2012, 12:15

15

Думаю целесообразно выложить два варианта!

Версия Байт (точнее только циклы)

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
#include "iostream"
#include "ctime"
using namespace std;
 
int main()
{
    srand(time(0));
    int  s = 0, i, j;
    int m, n;
    int a[100][100] = {0};
    cin >> m >> n;
 
    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cin >> a[i][j]; //cout << (a[i][j] = rand() % 10) << "t");
        }
        //cout << endl;
    }
    
     for(i = s = 0; i < m; i++) 
     {
        for(j = 1; j < n; j++)
        
            if (a[i][j] < a[i][j-1])
                break;
            if (j == n)
                s++;
    }
    cout << "nNumber of lines ordered in ascending - " << s;   
    system("pause >> null");
    return 0;
}

Версия infinity3000

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
#include "iostream"
#include "ctime"
using namespace std;
 
int main()
{
        srand(time(0));
        int  s = 0;
        int m, n;
        int a[100][100] = {0};
        cin >> m >> n;
 
        for(int i = 0; i < m; i++)
        {
                for(int j = 0; j < n; j++)
                {
                        cin >> a[i][j]; //cout << (a[i][j] = rand() % 10) << "t");
                }
                //cout << endl;
        }
        
     for(int i = 0; i < m; i++) 
         {
                for(int j = 1; j < n; j++)
                {
                        if (a[i][j] < a[i][j-1])
                        {
                                break;
                        }
                        else if (j == n - 1)
                        {
                                s++;
                        }
                }
        }
        cout << "nNumber of lines ordered in ascending - " << s;      
        system("pause >> null");
        return 0;
}



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

25.03.2012, 12:15

15

Matrix42. Дана матрица размера M × N. Найти количество ее строк, элементы которых упорядочены по возрастанию.

Решение Pascal

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

program Matrix42;

var

a:array [1..10,1..10] of integer;

Num, M, N, i, j:Integer;

begin

Write(‘N: ‘);

Readln(N);

Write(‘M: ‘);

Readln(M);

for  i:=1 to M do

begin

writeln(i,‘: ‘);

for j:=1 to N do

begin

Write(j,‘ : ‘);

Read(a[i,j]);

end;

end;

Num:=0;

for  i:=1 to M do

begin

J:=2;

While ((a[i,j1]<a[i,j]) and (j<=N)) do inc(j);

if J=N+1 then inc(Num);

end;

writeln(Num);

end.

Оцените решение

Загрузка…

Вопрос по DCOMPermissions.psm1


19th April, 17:09


199


0

Некорректный скрипт для закрытия блока


14th April, 18:33


179


0

Doesn’t show model window


14th March, 22:20


175


0

прокидывать exception в блоках try-catch JAVA


11th March, 21:11


187


0

Пишу BAS-скрипты на запросах для несложных сайтов и Android-приложений.


9th February, 17:04


444


0

Помогите пожалуйста решить задачи


24th November, 23:53


1019


0

Не понимаю почему не открывается детальное описание продукта


11th November, 11:51


413


0

Пишу скрипты для BAS только на запросах


8th November, 10:38


476


0

Как поднять свой VPN на Android?


4th November, 17:09


485


1

Нужно решить задачу по программированию на массивы


27th October, 18:01


634


0

Метода Крамера С++


23rd October, 11:55


516


0

помогите решить задачу на C++


22nd October, 17:31


532


0

Помогите решить задачу на python с codeforces


22nd October, 11:11


654


0

Generate Additional Engagement Image Masking Service


5th July, 07:34


743


0

Join Us Today Ghost Mannequin Effect Service


5th July, 07:10


930


0

Python с нуля


18th June, 13:58


821


0

Its Urban Malaysia Phone Number List Exceeds 


21st April, 08:09


949


1

橱柜并烤 手机号码 了一个纸杯蛋糕之后


6th April, 13:05


581


0

Все вопросы

По разделам

 

Дана матрица размера M ×N. Найти количество ее строк, элементы
которых упорядочены по возрастанию.

const nmax=20;
var a:array[1..nmax,1..nmax] of integer;
    m,n,i,j,k:byte;
    f:boolean;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите построчно элементы матрицы:');
for i:=1 to m do
for j:=1 to n do
 begin
  write('a[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;
writeln('Исходная матрица:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
writeln;
k:=0;
for i:=1 to m do
 begin
  f:=true;
  j:=2;
  while(j<=n)and f do
  if a[i,j]<=a[i,j-1] then f:=false{строгое возрастание, 1 2 2 3 не пойдет}
  else j:=j+1;
  if f then inc(k);
 end;
write('Количество строк, упорядоченных по возрастанию=',k);
readln
end.

Понравилась статья? Поделить с друзьями:
  • Как найти соответствующее разница
  • Как найти порно название порно фильма
  • Как найти совершенный платеж
  • Как найти темный лабиринт
  • Как найти нок наименьшее общее кратное число