Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2011, 14:37   #21
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну и так помечайте сколько раз в if выполнится то, что если истина (после then) или ложь (после else). Посмотрите в пошаговом дебагинге если не очень понятно как это происходит.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.06.2011, 15:16   #22
ChristinShishi
Новичок
Джуниор
 
Регистрация: 19.06.2011
Сообщений: 11
По умолчанию

спасибо за помощь
ChristinShishi вне форума Ответить с цитированием
Старый 19.06.2011, 18:43   #23
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Хоть тут уже много советов прозвучало.
И ответ Косюра был отличный.

ну и я попробую ещё раз "разжевать" материал.

смотрите, Ваша задача состоит в том, чтобы выполнять построчно записанный код. Вы же можете взять Y (вначале оно равно 10 и проверить, выполняются ли условия...
(ну надо знать правила вычисления логических выражений, операции OR AND NOT и т.п.)
если условие выполнилось - идём по одной веточке, не выполнилось - по другой.

решение "в лоб"
я преобразовал вашу программку в такой вид:
Код:
var i, y,n:integer;
begin
n:=-25;
y:=10;
WriteLn('Перед циклом: y=',y:1,' n = ',n:1);
i:=0;
while y<=150 do begin
inc(i);
Writeln(i:1,'-й проход цикла, в начале цикла y=',y:1,' n = ',n:1 );
Write('   условие if (y<100) and (y>=50)');
if (y<100) and (y>=50) then WriteLn(' выполняется.') else WriteLn('не выполняется.');
Write('   условие (y mod 10=0) ');
if (y mod 10=0)  then WriteLn(' выполняется.') else WriteLn('не выполняется.');
Write('   Поэтому к N  ');
if (y<100) and (y>=50) or (y mod 10=0)
   then begin n:=n+2; writeln(' прибавляем два '); end
   else begin n:=n+1; writeln(' прибавляем один ');end;
WriteLn('   к Y прибавляем два');
y:=y+2;
Writeln(i:1,'  в конце ',i:1,'-го прохода цикла y=',y:1,' n = ',n:1 );
Write(' условие y<=150 ');
if y<=150 then WriteLn(' выполняется. поэтому цикл продолжится')
       else WriteLn('не выполняется - значит цикл закончился (на while y<=150 мы выйдем из цикла)');
end;
WriteLn('После цикла: y=',y:1,' n = ',n:1);
writeln(n)
end.
в результате мы получаем ПОДРОБНЕЙШИЙ отчёт, как работала программа, в каких случаях что выполнялось и т.д.
смотри h662.txt
Это предложеный вариант с прохождением в отладчике.
Этот способ (выполение кода в уме, последовательно) долгий, трудоёмкий, но зато он будет работать всегда, вне зависимости от сложности алгоритма.

Второе решение.
Аналитический подход.
Выделяем условие цикла и смотрим, как изменяется в цикле переменная, которая влияет на то, выполняется ли цикл или уже хватит.
В нашем случае это переменная Y
вначале она равна 10
цикл прекратиться, когда она (переменная) станет больше 150.
в цикле она наращивается на два за каждое выполнение тела цикла (кстати, что важно - переменная увеличивается ровно на два НЕЗАВИСИМО от прочих условий, значений других переменных и т.д.).
поэтому мы можем быстро и чётко сказать, сколько раз выполнится цикл.
(150 - 10)/2 = 70 + 1 (1 раз, т.к. в 70 цикле переменная станет равной 150 и, значит, т.к. условие цикла меньше или равно, тог цикл выполнится ещё раз.

или, если так понятнее, то выйдем мы из цикла, когда Y станет больше 150. больше, это 151
(151-10)/2 - получаем 70.5. Т.к. цикл не может выполнится полраза, значит тело цикла выполнится 71 раз.

Теперь по поводу значения N
Вам нужно посчитать
сколько раз Y в диапазоне от 10 до 150 с шагом 2
кратно 10 или входит в [50, 100[
считаем Y
10
20
30
40
50-98 (тут ровно 25 раз)
100
110
120
130
140
150
итого условие выполняется ровно 35 раз.
значит увеличивать N на 2 мы будем 35 раз.
а сколько раз мы будем увеличивать N на единичку?
Очевидно, что в остальных случаях.
71 (всего циклов) - 35 = 36 раз.
итого получаем формулу
N после цикла равно -25+35*2+36 = 81



звери у Вас преподаватели...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в результате выполнения программы выдает -1.#IND Mors13 Помощь студентам 1 01.06.2011 23:10
Как получить десятичное число в результате деления ArtGrek Visual C++ 1 20.04.2011 01:55
Как узнать что число не Float(без остатка) при результате деления? zotox Помощь студентам 7 19.07.2009 15:49
Написать программу в результате выполнения которой булевская переменная t получает true если выполняется Корделия Общие вопросы C/C++ 1 28.04.2009 13:53
присвоить переменной целого типа значение поля key полученное в результате выполнения SQL запроса Worms БД в Delphi 5 10.01.2008 21:07