Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Целые числа


Автор: Unionuser 25.6.2011, 23:23
Пожалуйста помогите мне написать прогу.Вот задания:. Даны целые числа С1.....С95  . Имеются ли в последовательности  с1....с95 :
а) два идущих подряд нулевых члена;
б) три идущих подряд нулевых члена?
Заранее спасибо

Автор: triclosan 25.6.2011, 23:51
http://forum.vingrad.ru/forum/topic-332535.html

Автор: bsa 26.6.2011, 18:18
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Сыроежка 26.6.2011, 18:40
Цитата(Unionuser @  25.6.2011,  23:23 Найти цитируемый пост)
Пожалуйста помогите мне написать прогу.Вот задания:. Даны целые числа С1.....С95  . Имеются ли в последовательности  с1....с95 :
а) два идущих подряд нулевых члена;
б) три идущих подряд нулевых члена?
Заранее спасибо 


Пишу "на коленках" без проверки.

Если на языке С

int two_adjacent( int *p, size_t size )
{
for ( int i = 0; i < size - 1; i++ )
{
if ( p[i] == p[i+1] == 0 ) return (1 );
}

return ( 0 );
}

int three_adjacent( int *p, size_t size )
{
for ( int i = 0; i < size - 2; i++ )
{
if ( p[i] == p[i+1] == p[i+2] == 0 ) return (1 );
}

return ( 0 );
}

Добавлено через 5 минут и 40 секунд
Если вас интересует код на С++, то просто в моем примере замените тип возврата из функции из int на bool и место 1 или 0 возвращайте true или false

Автор: Сыроежка 26.6.2011, 19:36
Поспешил - людей насмешил! Сделал типичную ошибку, написав выражения

if ( p[i] == p[i+1] == 0 ) return (1 );

и


if ( p[i] == p[i+1] == p[i+2] == 0 ) return (1 );


Правильно будет

if ( ( p[i] == 0 ) && ( p[i] == p[i+1] ) ) return (1 );

и


if ( ( p[i] == 0 ) && ( p[i] == p[i+1] ) && ( p[i+1] == p[i+2] ) ) return (1 );

Автор: iff 27.6.2011, 21:19
Сыроежка, Вы имеете в виду, что выражение
Код

if ( Var1 == Var2 == Var3 ) DoSomething;

не будет откомпилировано, то тогда всё понятно. (По скольку я не знаю - позволяет ли синтаксис записывать такие условия)

А если вы считаете, что здесь ошибка в логике алгоритма, то тогда, первый вариант будет работать. Это ненулевые могут быть не равны друг другу, а нулевые равны друг другу (все являются нулями).

Автор: Сыроежка 28.6.2011, 18:48
Цитата(iff @  27.6.2011,  21:19 Найти цитируемый пост)
Сыроежка, Вы имеете в виду, что выражение

код C#
1:

if ( Var1 == Var2 == Var3 ) DoSomething;





не будет откомпилировано, то тогда всё понятно. (По скольку я не знаю - позволяет ли синтаксис записывать такие условия)

А если вы считаете, что здесь ошибка в логике алгоритма, то тогда, первый вариант будет работать. Это ненулевые могут быть не равны друг другу, а нулевые равны друг другу (все являются нулями). 


Нет, это выражение будет компилироваться, но оно некорректное! Я просто, когда его писал, спутал с оператором присваивания.

Почему исходное выражение некорректно? Поясню. Его можно переписать в виде

( Var1 == Var2 ) == Var3 

результатом операции 

( Var1 == Var2 ) 

в С будет целочисленный тип со значением либо 1 (если равенство выполняется ) либо 0 (если равенство не выполняется.  В С++ соответсвтенно либо true либо false.
В результате при выполнении второй операции вы сравниваете либо

1 == var3

либо

0 == var3

А это не то, что мы себе представляли!smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)