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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.70
sweeney
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 55
#1

Определить количество строк, содержащих хотя бы один нулевой элемент - C++

02.11.2009, 18:08. Просмотров 6486. Ответов 7
Метки нет (Все метки)

Здравствуйте, дорогие форумчане.
На предмете программирования задали написать программу по заданию:


Дана целочисленная прямоугольная матрица. Определить:
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
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <time.h>
using namespace std;
 
int main(void){
 
 
 int x[100][100],i,j,stb,str,k,l=0,h,N;
 bool flag;
 
 cout<<"Vvedite kolichestvo strok: "; cin>>str;
 cout<<"\n";
 cout<<"Vvedite kolichestvo stolbcov: "; cin>>stb;
 cout<<"\n";
 
 
 
 for(i=0;i<str;i++)
 {
    flag=false;
    for(j=0;j<stb;j++)
        {
            printf("%3d",x[i][j]=(rand()%10));
            if(0==x[i][j])
                {
                    flag=true;;
                }
        }
 
  printf("\n");
 
    if(flag==true)
        {
            l++;                //кол-во строк с 0
        }
 }
 
 
 cout<<"\n1. Koli4estvo strok s nulevim elementom: "<<l;
 
 k=0;
 
 for(j=0;j<stb;j++)
 {
    l=0;
    h=0;
        for(i=0;i<str;i++)
            {
                if(x[i][j]==x[i+1][j])
                {
                    l++;
                }
                else
                {
                    h=l;
                    l=0;
                }
                if(h>k)
                {
                    k=h;
                    N=j;
                }
            }
 }
 
 if(0!=k)
 {
  cout<<"\n\n2. Nomer stolbca: "<<(N+1);
 }
 else
 {
  cout<<"\n\n2. Net podhodyashih stolbcov";
 }
 
 
 
 
    cin.get();
    cin.get();
 
}


Но у преподавателя, глядя на этот код, сразу встал вопрос, где же счетчик строк, в котором есть нулевые элементы ( по заданию ).
Вот именно та часть кода, вызывающая у меня недоумение, хотя все работает исправно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(i=0;i<str;i++)
 {
    flag=false;
    for(j=0;j<stb;j++)
        {
            printf("%3d",x[i][j]=(rand()%10));
            if(0==x[i][j])
                {
                    flag=true;;
                }
        }
 
  printf("\n");
 
    if(flag==true)
        {
            l++;                //кол-во строк с 0
        }
 }
Естественно, я вижу, что это делается с помощью этих самых flag'оф, но не могли бы вы мне пожалуйста, объяснить это получше. В теоретичесокм плане, буду очень благодарен вам.
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2009, 18:08     Определить количество строк, содержащих хотя бы один нулевой элемент
Посмотрите здесь:
Определить количество строк, содержащих хотя бы один нулевой элемент C++
C++ Определить количество строк, содержащих хотя бы один нулевой элемент
Определить количество строк матрицы, содержащих хотя бы один нулевой элемент C++
Определить количество строк матрицы, содержащих хотя бы один нулевой элемент C++
Определить количество строк матрицы, содержащих хотя бы один нулевой элемент C++
Определить количество строк матрицы, содержащих хотя бы один нулевой элемент. C++
C++ Определить количество строк матрицы, содержащих хотя бы один нулевой элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
02.11.2009, 18:19     Определить количество строк, содержащих хотя бы один нулевой элемент #2
C++
1
int counter;
если строка содержит нулевые элементы
C++
1
counter++
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
02.11.2009, 18:40     Определить количество строк, содержащих хотя бы один нулевой элемент #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(i=0;i<str;i++)
 {
    flag=false;
    for(j=0;j<stb;j++)
        {
            printf("%3d",x[i][j]=(rand()%10));
            if(0==x[i][j])
                {
                    flag=true;;
                }
        }
 
  printf("\n");
 
    if(flag==true)
        {
            l++;                //кол-во строк с 0
        }
 }
итак у тебя есть переменная flag которая принимает два значения (true - правда, false - ложь, или 1 и 0, если тебе так удобней).
Прогоняется цикл, в котором каждый элемент массива сравинивается с 0 ( if(0==x[i][j]) ).
Если элемент равен 0, то переменной flag присваивается значение true (правда).
Затем, вне цикла столбцов (т.е. строка проверена, но к следующей переход еще не осуществлен), но в цикле строк (i) переменная flag сравнивается со значением true. Если они совпадут (flag=true), то к переменной (счетчику строк с нулями) прибавиться 1.
Затем цикл переходит к следующей стоке массива (в цикле с i), сбрасывая при этом переменную flag на значение false. И все по новой, до последнего элемента в строке x[n][...]

По окончанию цикла в переменной l (L) у тебя будет лежать кол-во строк с нулями.
sweeney
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 55
02.11.2009, 18:56  [ТС]     Определить количество строк, содержащих хотя бы один нулевой элемент #4
Neonjke
Огромное спасибо, объяснили очень доходчиво.
Но, если я вас правильно понял, именно складывание количества срок с нулевыми элементами происходит в строчках 16-18 выложенного вами кода ( l++; ). Это и есть "счетчик"?

Sekt
Спасибо, но переделывать не нужно. Алгоритм должен быть реализован с помощью арифметических законов
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
02.11.2009, 19:07     Определить количество строк, содержащих хотя бы один нулевой элемент #5
Цитата Сообщение от sweeney Посмотреть сообщение
Neonjke
Огромное спасибо, объяснили очень доходчиво.
Но, если я вас правильно понял, именно складывание количества срок с нулевыми элементами происходит в строчках 16-18 выложенного вами кода ( l++; ). Это и есть "счетчик"?
не совсем так.
В цикле у вас проверилась строка, и если в ней был 0 (хотя бы раз) то у переменной flag значение true.
Затем проверяется flag==true (что по сути значит: "был ли в строке хотя бы раз 0?"). Если был, то к счетчику (в данном случае переменной L - да, это "счетчик") прибавляется 1 (l++; равносильно l=l+1.
Затем переходим к следующей строке, сбрасывем "флаг" и проверяем заново.

Нужно понять, что складывается не кол-во строк, а кол-во раз, когда переменная flag принимала значение true. И именно это проиходит в строках 16-18, верно.

Если я добавлю от себя, то гораздо "элегантнее" было бы реализовать эту задачу с помощью переменной L и конструкции break; , не используя флаг. Но, судя по всему, у вас в задании было указано требование по использованию флага.
sweeney
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 55
02.11.2009, 22:58  [ТС]     Определить количество строк, содержащих хотя бы один нулевой элемент #6
Нееет, просто так вот программу сделали =) Спасибо вам огромное, очень помогли
sweeney
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 55
03.11.2009, 14:14  [ТС]     Определить количество строк, содержащих хотя бы один нулевой элемент #7
Попрошу еще помочь с кодом всей программы. Когда запускаю программу, массив. который выводится - всегда одинаковый, хоть и зависит от размерности. Можете, пожалуйста, помочь сделать, чтобы массив всегда был разный?
заранее спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2009, 15:25     Определить количество строк, содержащих хотя бы один нулевой элемент
Еще ссылки по теме:
Дана целочисленная прямоугольная матрица. Определить количество строк, содержащих хотя бы один нулевой элемент C++
C++ Подсчитать количество строк, содержащих хотя бы один нулевой элемент
В заданной матрице найти количество строк, содержащих хотя бы один нулевой элемент C++
C++ Определить количество столбцов,содержащих хотя бы один нулевой элемент
C++ Определить количество столбцов матрицы, содержащих хотя бы один нулевой элемент

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

Или воспользуйтесь поиском по форуму:
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
03.11.2009, 15:25     Определить количество строк, содержащих хотя бы один нулевой элемент #8
чтобы разным-функцию рандом исп для переменной размерности .
Yandex
Объявления
03.11.2009, 15:25     Определить количество строк, содержащих хотя бы один нулевой элемент
Ответ Создать тему
Опции темы

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