Циклы содержание Циклы 1



Скачать 298.51 Kb.
Дата30.04.2016
Размер298.51 Kb.
ТипРешение

Циклы

содержание


Циклы 1

содержание 1

Реализация циклов в блок-схемах 1

Вопросы по блок-схеме циклического алгоритма 2



Цикл с предусловием WHILE...DO 2

Пример 1. Вывести на экран в порядке возрастания все нечетные числа, меньшие заданного числа n. 3

Вычисление сумм, произведений и количеств 3

Пример 2. Вычислить произведение четных чисел, меньших заданного числа m. 3

Поиск первого объекта, удовлетворяющего заданным условиям. 4

Пример 3. Читать с клавиатуры числа. Вывести на экран слово «делится!» и выйти из программы, когда будет введено число, делящееся на 7 без остатка. 4

Пример 4. Вычислять значение выражения 12+32+52+... до тех пор, пока эта сумма не превысит 1000. Ответ вывести на экран. 5

Задачи по теме «цикл while» 6



Цикл со счетчиком. 6

Пример 5. Прочитать с клавиатуры число n и вывести на экран факториалы чисел от 1 до n включительно. 7

Задачи по теме «цикл for» 8

Цикл с постусловием repeat...until 9

Пример 6. Дана непустая последовательность целых чисел, оканчивающаяся числом 0. Найти сумму чисел. 9

Решение с while 10

Пример 6.1. Вывести на экран наибольший четный делитель двух четных чисел 10

Задачи по теме «цикл repeat..until” 11

Использование дополнительных переменных 11

Пример 7. Читать с клавиатуры числа, пока не будет введено подряд два одинаковых числа. Вывести на экран сумму введенных чисел. 11

Задачи по теме “использование дополнительных переменных” 12

Работа с цифрами числа. 12

Пример 8. Найти количество цифр в заданном числе. Например, для числа 1232 количество цифр 4. 13

Пример 9. Найти произведение цифр заданного числа. 13

Задачи по работе с цифрами числа 13



Задачи повышенной сложности. 14


Реализация циклов в блок-схемах


Цикл – это алгоритмическая конструкция, предназначенная для многократного повторения действий.

На блок-схеме представлен пример программы с циклом. Конструкция цикла помещена в прямоугольник голубого цвета. Посмотрим на нее повнимательней и разберемся, как в этом случае будет работать программа. Выполнится действие 1, затем действие2, затем будет проверено условие 1. Если оно истинно, то выполнятся действия 3 и 4. Затем программа вернется к действию 2. Очевидно, что далее все команды, помещенные внутри прямоугольника, повторятся снова, снова и снова. Это будет продолжаться до тех пор, пока при проверке условия 1 не окажется, что оно ложно. В этом случае программа выйдет из цикла, выполнит действие 5 и закончит свою работу. Таким образом, на блок-схеме цикл реализуется при помощи стрелки, идущей обратно, к уже пройденным действиям.

Действия, которые выполняются на каждом шаге цикла, образуют тело цикла. Условие, одна из ветвей которого реализует выход из цикла, называется условием продолжения цикла. На фрагменте блок-схемы, изображенном на рисунке, тело цикла образуют действия 2, 3, 4. Условие 1 – условие продолжения цикла. Если исполнитель подошел к блоку “условие”, и оно истинно, то действия цикла повторяются еще раз, а если ложно – исполнитель выходит из цикла по ветке 0 и переходит к выполнению действия 5, следующего после цикла. Каждый проход исполнителя по циклу называется шагом цикла.

При разработке циклических алгоритмов необходимо обратить внимание на 3 момента:



  1. присвоить начальные значения всем переменным, которые предполагается использовать

  2. продумать, что должен делать алгоритм на каждом шаге цикла

  3. до каких пор будут выполняться шаги цикла – это условие представляется блоком условия, одна из веток в конечном итоге опять возвращается к этому блоку условия, а другая выходит из цикла

Вопросы по блок-схеме циклического алгоритма


  1. Какое условие продолжения цикла на представленной блок-схеме?

  2. Какие действия повторяются на каждом шаге цикла?

  3. Что выведет программа, если будет введено n=4?

  4. Какую задачу решает представленный алгоритм?

Цикл с предусловием WHILE...DO


Цикл с предусловием – одна из простейших конструкций цикла. По формату она похожа на сокращенную форму оператора ветвления, только вместо if следует писать слово while, а вместо then – слово do:

WHILE условие DO оператор;

Здесь “условие” после слова while является условием продолжения цикла. В качестве условия можно записать любое логическое выражение. Оператор, записанный после слова do, образует тело цикла и выполняется многократно, пока при проверке «условие» продолжения цикла будет истинным. Блок-схема цикла while показана на рисунке. Конструкция цикла на блок-схеме помещена в зеленый прямоугольник. Заметим, что блок условия продолжения цикла находится до тела цикла, поэтому цикл while называется цикл с предусловием. Еще одно название цикла while следует из русского перевода – цикл «пока».

Как следует из блок-схемы, если компьютер встретит цикл while, он проверяет условие, и если оно истинно, выполняет оператор, затем опять возвращается к условию. Эти действия повторяются многократно до тех пор, пока при проверке условие не окажется ложным. В этом случае компьютер переходит к выполнению оператора 2, который идет после конструкции цикла на блок-схеме.

Если на каждом шаге цикла необходимо выполнить несколько операторов, то их нужно объединить в один составной оператор, в результате получится конструкция вида:



WHILE условие DO

BEGIN


оператор1;

оператор2;

...

END;

Пример 1. Вывести на экран в порядке возрастания все нечетные числа, меньшие заданного числа n.


Решение.

Выводимые числа будем хранить в переменной i. Сначала i:=1, так как 1 – самое маленькое нечетное число. На каждом шаге цикла нужно выводить значение i на экран и прибавлять к ней 2 – переход к следующему нечетному числу. эти операторы составляют тело цикла. Поскольку их 2, нужно поставить begin и end. Цикл нужно выполнять, пока i

var i,n:integer;

begin

readln(n);

i:=1;

while ido

begin

writeln(i);

i:=i+2;

end;

end.

Вычисление сумм, произведений и количеств

Пример 2. Вычислить произведение четных чисел, меньших заданного числа m.


Решение.

Итак, нужно вычислить произведение 2*4*6*8*.... Видно, что необходимо много раз выполнять умножение, поэтому необходим цикл. Произведение будем накапливать в переменной s. Сначала s=1, далее ее нужно умножить на 2, затем на 4, далее на 6 и т.д. Число, на которое умножаем, будем хранить в переменной x. Сначала x=2.

Чему равны начальные значения переменных, теперь ясно.

Далее разберемся, что будем делать на каждом шаге цикла. Нужно умножить s на очередное число, то есть s:=s*x. Смысл этого оператора – взять старое значение s, умножить на x, а результат снова записать в переменную s. Кроме того, на каждом шаге цикла необходимо увеличить значение x на 2, так как нас интересуют только четные числа(x:=x+2). На каждом шаге цикла нужно выполнить два оператора, значит необходимо создать составной оператор – begin..end.

Осталось разобраться, до каких пор нужно выполнять умножения, то есть, определить условие продолжения цикла. Оно было указано в условии задачи: x

var x,s,m:integer;

begin

readln(m);



i:=2;

s:=1;


while ido


begin

s:=s*i;


i:=i+2;

end;

writeln(s);

end.
Общий принцип решения таких задач:

завести переменную, в которой будет накапливаться произведение, сумма или количество.

на каждом шаге цикла ее нужно изменять в соответствии с задачей, как показано в примере.

До цикла этой переменной нужно присвоить 1, если вычисляем произведение, и 0, если вычисляем сумму или количество.


Поиск первого объекта, удовлетворяющего заданным условиям.


Рассмотрим две задачи.

Пример 3. Читать с клавиатуры числа. Вывести на экран слово «делится!» и выйти из программы, когда будет введено число, делящееся на 7 без остатка.


Решение.

Числа нужно читать до тех пор, пока очередное число не разделится на 7. Если число не делится на 7, то нужно читать следующее. Это и есть условие продолжения цикла. На каждом шаге цикла нужно только прочитать число. Слово «делится!» нужно печатать уже после цикла.



var x:integer;

begin

readln(x);

while x mod 7<>0 do readln(x);

writeln(‘делится!’);

end.

Пример 4. Вычислять значение выражения 12+32+52+... до тех пор, пока эта сумма не превысит 1000. Ответ вывести на экран.


Решение. Сумму накапливаем в переменной s. Условие продолжения цикла s<=1000. Числа 1, 3, 5...будем хранить в переменной i.

var i,s:integer;

begin

s:=0;

i:=1;

while s<=1000 do

begin

s:=s+i*i;

i:=i+2;

end;

writeln(s);

end.
Основные ошибки при разработке программ с циклами, что необходимо проверить в первую очередь, если программа не работает или работает неверно:

Убедитесь, что после слова do нет точки с запятой. Если она есть, то тело цикла – пустой оператор, при его выполнении ничего не происходит. Следовательно, условие цикла никогда не изменится, и цикл будет выполняться вечно. Операторы, которые вы программировали как тело цикла, из-за этой ошибки оказались уже после конструкции вашего вечного цикла, поэтому до них программа никогда не дойдет.

Убедитесь, что в теле цикла вы не забыли изменить какую-нибудь переменную, присутствующую в условии продолжения цикла. Если нет, то цикл будет продолжаться вечно.

Тело вашего цикла должно состоять из нескольких операторов? Убедитесь, что вы не забыли поставить begin и end, причем там, где они должны находиться. Если нет, то телом цикла будет только первый из операторов, он будет выполняться многократно, а остальные выполнятся только один раз уже после завершения цикла (если, конечно, он не будет выполняться вечно).

Проверьте еще раз операторы тела цикла

Правильно ли вы присвоили им начальные значения

Нет ли ошибки в условии продолжения цикла.

Ситуация, когда цикл выполняется вечно, называется зацикливание.


Задачи по теме «цикл while»


  1. Вывести на экран в порядке возрастания все нечетные числа, меньшие 20.

  2. Вывести на экран произведение всех четных чисел, меньших 16.

  3. Прочитать с клавиатуры число. Вывести на экран произведение всех нечетных чисел, меньших этого числа.

  4. Прочитать с клавиатуры число. Вывести на экран его наименьший делитель, не считая 1.

  5. Прочитать с клавиатуры число. Вывести на экран его наибольший делитель, не считая самого числа.

  6. Прочитать с клавиатуры число. Вывести на экран его наибольший четный делитель, не считая самого числа.

  7. Прочитать с клавиатуры два числа. Вывести на экран их наибольший общий делитель.

  8. Прочитать с клавиатуры два числа. Вывести на экран их наименьшее общее кратное.

Задачи по вариантам.

  1. Прочитать с клавиатуры три числа. Вывести на экран их наибольший общий делитель.

  2. Прочитать с клавиатуры число. Вывести на экран произведение всех положительных чисел, делящихся на 3 и меньших этого числа.

  3. Прочитать с клавиатуры два числа. Вывести на экран их наибольший общий нечетный делитель.

  4. Прочитать с клавиатуры число. Вывести на экран сумму всех положительных чисел, делящихся на 3 и меньших этого числа.

  5. Прочитать с клавиатуры два числа. Вывести на экран их наибольший общий четный делитель.

  6. Прочитать с клавиатуры число. Вывести на экран произведение всех четных чисел, меньших этого числа.

  7. Прочитать с клавиатуры число n. Вывести на экран максимальное число, не превосходящее n и делящееся на 27. Например, если n=84, то ответ 81

  8. Прочитать с клавиатуры число. Вывести на экран сумму всех четных чисел, меньших этого числа.

  9. Прочитать с клавиатуры число. Вывести на экран сумму всех нечетных чисел, меньших этого числа.

  10. Прочитать с клавиатуры число n. Вывести на экран минимальное число, превосходящее n и делящееся на 27. Например, если n=84, то ответ 108

Цикл со счетчиком.


Цикл со счетчиком оформляется следующим образом

FOR пер:=нач TO кон DO оператор;

Здесь вместо слова «пер» может стоять имя любой переменной типа integer, boolean (и некоторых других типов). Эта переменная называется счетчик цикла. «Нач» и «кон»– любые выражения, типы которых совпадают с типом переменной пер. Конструкция FOR пер:=нач TO кон DO называется заголовок цикла. Оператор, следующий после ключевого слова do образует тело цикла. Когда компьютер встречает заголовок цикла for, он выполняет следующие действия:

вычисляет значения выражений «нач» и «кон»

присваивает счетчику «пер» значение выражения «нач»

если «пер» меньше или равно «кон», то выполняет пункты 4-6.

выполняет оператор

прибавляет к счетчику «пер» единицу

возвращается к пункту 3.

Цикл for можно заменить следующей конструкцией цикла while

пер:=нач;

пер_кон:=кон;

while пер<=пер_кон do

begin

оператор;



пер:=пер+1;

end;


Отсюда видно, что конструкция for значительно проще за счет того, что начальное значение счетчику присваивается в заголовке цикла, а его изменение на каждом шаге цикла производится автоматически. Недостаток цикла for – меньшая гибкость. Счетчик на каждом шаге цикла изменяется на единицу, его тип может быть только порядковый (далее мы узнаем, какие типы относятся к этому классу). При решении ряда задач цикл for значительно упрощает программу. Обычно он используется, если заранее известно число повторений тела цикла.

Существует еще один вариант цикла for:



FOR пер:=нач DOWNTO кон DO оператор;

Формальное отличие – слово DOWNTO вместо слова TO. Этот цикл выполняется пока нач>=кон. На каждом шаге цикла значение переменной нач уменьшается на 1.

На каждом шаге цикла for выполняется один оператор. Если нужно выполнить несколько – образуйте из них составной оператор, например рассмотрим задачу.

Пример 5. Прочитать с клавиатуры число n и вывести на экран факториалы чисел от 1 до n включительно.


Решение.

Факториал числа – это произведение всех чисел от 1 до этого числа, т.е. k!=1*2*3*...*k. Много умножений, значит необходим цикл. Количество повторений для вычисления n! фиксировано, кроме того, нужно умножать числа, отличающиеся на 1. Значит удобно использовать цикл for. Факториал числа будем хранить в переменной f. Перед циклом f=1. На первом шаге цикла умножим f на 1. Это 1! Ответ сразу нужно вывести на экран, так как по условию нужно вывести все факториалы. Далее нужно умножить на 2,получим 2!, далее на 3 и т.д. В цикле for счетчик как раз на каждом шаге увеличивается на единицу, поэтому для хранения чисел, на которые умножаем, не нужно специальной переменной – используем счетчик. Назовем счетчик i. Начальное значение счетчика указывается в заголовке цикла for: i:=1, конечное значение n. На каждом шаге цикла умножаем f на i (f:=f*i) и выводим его на экран.

var i,n,p:integer;

begin


readln(n);

f:=1;


for i:=1 to n do

begin

f:=f*i;

writeln(i,’!=’,f);

end;

end.


Задачи по теме «цикл for»


  1. Прочитать число n и вывести на экран n!

  2. Прочитать с клавиатуры число n и вывести на экран n раз слово «привет»

  3. Прочитать с клавиатуры значения переменных n и m и вывести на экран квадраты целых чисел от n до m.

  4. Прочитать с клавиатуры значение n и вывести на экран все четные числа, не большие 2*n.

  5. Вывести на экран первые 20 натуральных чисел в порядке убывания, то есть 20 19 18… 2 1

Задания по вариантам.

  1. Прочитать с клавиатуры число n и вывести на экран квадраты чисел от 1 до n в порядке возрастания.

  2. Прочитать с клавиатуры число n и вывести на экран сумму квадратов чисел от 1 до n

  3. Прочитать с клавиатуры число n и вывести на экран квадраты чисел от 1 до n в порядке убывания.

  4. . Прочитать с клавиатуры числа n и m и вывести на экран числа от n до m в порядке возрастания.

  5. . Прочитать с клавиатуры числа n и m и вывести на экран произведение чисел от n до m.

  6. Прочитать с клавиатуры число n. Вычислить произедение чисел от 1 до n и сумму чисел от 1 до n. Вывести на экран разность между найденной суммой и произведением.

  7. Прочитать с клавиатуры число n. Далее прочитать с клавиатуры n чисел и вывести на экран их сумму.

  8. Прочитать с клавиатуры число n. Далее прочитать с клавиатуры n чисел и вывести на экран их произведение.

  9. Прочитать с клавиатуры число n. Далее прочитать с клавиатуры n чисел и вывести на экран сумму их последних цифр.

  10. Прочитать с клавиатуры число n. Далее прочитать с клавиатуры n чисел и вывести на экран произведение их последних цифр.



Цикл с постусловием repeat...until


Конструкция цикла с постусловием такова

REPEAT

оператор1;

оператор2;

...


UNTIL условие;

Соответствующая блок-схема показана на рисунке. Принципиальные отличия от цикла while видны из особенностей конструкции и блок-схемы (конструкция цикла на блок-схеме помещена в зеленый прямоугольник):

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

«Условие» на самом деле является условием прекращения цикла. Если при проверке условия оно оказалось истинным, то выполнение цикла прекращается, а компьютер переходит к следующему после цикла оператору. На блок-схеме это оператор 3.



Строки “REPEAT” и «UNTIL условие;» образуют операторные скобки, поэтому между тело этого цикла может состоять из любого числа операторов, begin...end не требуется.

В остальном особенности применения этого цикла и подводные камни совпадают с оными для цикла while.

Циклы repeat...until и while вполне взаимозаменяемы, хотя существуют ситуации, когда удобнее применить ту или иную конструкцию, учитывая их отличия.

Пример 6. Дана непустая последовательность целых чисел, оканчивающаяся числом 0. Найти сумму чисел.


Решение.

Поскольку чисел будет несколько, необходимо многократно повторять чтение числа с клавиатуры и его прибавление к сумме. Значит, необходим цикл. В переменной x будем хранить очередное число, в переменной s – сумму. Удобней использовать цикл repeat..until, так как нужно сначала прочитать число (то есть выполнить тело цикла) и только потом проверять, не равно ли оно 0. Для сравнения в рамке приведено решение задачи с циклом while. Из сравнения видно, что программа с while сложнее.


Решение с while


var x,s:integer;

begin


s:=0;

readln(x);

while x<>0 do

begin


s:=s+x;

readln(x);

end;

writeln(s);



end.

var x,s:integer;

begin

s:=0;


repeat

readln(x);

s:=s+x;

until x=0

writeln(s);

end.

Пример 6.1. Вывести на экран наибольший четный делитель двух четных чисел


Решение. Подобные задачи мы решали при изучении цикла while. Иногда их удобнее решать с использованием цикла repeat…until. В данном случае числа будем хранить в переменных n и m, а кандидаты в делители в переменной i. Сначала присвоим i=n. Далее будем уменьшать значение i на каждом шаге цикла repeat…until до тех пор, пока не выполнятся сразу три условия – n делится на i, m делится на i, i делится на 2. Эти условия и образуют условие прекращения цикла (n mod i=0) and (m mod i=0) and (i mod 2=0).

Программа



var n,m,i:integer;

begin

readln(n,m);

i:=n+1;

repeat

i:=i-1;

until (n mod i=0) and (m mod i=0) and (i mod 2=0);

writeln(i);

end.

Замечания. Перед циклом имеет смысл записать в переменную i значение n+1, так как перед проверкой условия она успеет уменьшиться на 1. Программу можно упростить, если на каждом шаге цикла вычитать из i число 2. При этом не будет необходимости проверять третье условие после слова until.

Задачи по теме «цикл repeat..until”


  1. Читать с клавиатуры числа до тех пор, пока не будет введено число 0. Вывести на экран количество введенных чисел.

  2. Читать с клавиатуры числа до тех пор, пока не будет введено число 1. Вывести на экран их произведение.

  3. Читать с клавиатуры числа до тех пор, пока не будет введено число 0. Вывести на экран разность между суммой чисел и последним введенным числом.

  4. Найти наибольший общий делитель трех чисел.

  5. Найти наименьшее общее кратное двух чисел.



Использование дополнительных переменных


Часто в цикле удобно использовать несколько дополнительных переменных. Информация, которая в них содержится, позволяет сделать алгоритм проще.

Пример 7. Читать с клавиатуры числа, пока не будет введено подряд два одинаковых числа. Вывести на экран сумму введенных чисел.


Решение.

Новизна задачи – использование информации с предыдущего шага цикла. Необходимо хранить число, введенное на предыдущем шаге цикла. Опишем для этого переменную x0. В переменную x1 будем записывать число, прочитанное на текущем шаге. Проблема: непонятно, чему сначала равна x0. Например, если до цикла присвоим x0 значение 0, то на первом шаге цикла могут ввести x1=0, тогда произойдет выход из цикла, чего не должно быть. Поэтому придется один раз значение x1 прочитать и обработать до цикла. Далее, на каждом шаге цикла запоминаем «старое» x1 в переменной x0, читаем новое x1 и прибавляем его к сумме. Условие прекращения цикла – x0=x1.

var x0,x1,s:integer;

begin


readln(x1);

s:=x1;


repeat

x0:=x1; {x1 становится «старым», поэтому сохраняем его в x0}

readln(x1);

s:=s+x1;


until x0=x1;

writeln(s);



end.

Задачи по теме “использование дополнительных переменных”


  1. Читать с клавиатуры числа, пока не будет введено подряд два нуля. Вывести количество введенных чисел.

  2. Читать с клавиатуры числа, пока не будет введено подряд три одинаковых числа. Вывести количество введенных чисел.

  3. Читать с клавиатуры числа до тех пор, пока не будут введены подряд три разных числа. Вывести на экран сумму всех введенных чисел, кроме трех последних.

  4. Последовательность Фибоначчи образуется так: первый и второй член последовательности равны 1, каждый следующий равен сумме двух предыдущих (1,1,2,3.5.8...). Найти первое число последовательности, большее n (n>1 и вводится с клавиатуры).

  5. В предыдущей задаче найти сумму всех чисел последовательности, которые не превышают 1000.

  6. (*) Читать с клавиатуры числа, пока не будет введено число 0. Вывести на экран сумму четных чисел среди введенных. Запрещается использовать оператор if.

  7. Вычислять сумму 12-32+52-72+92... до тех пор, пока она не превысит заданное число n. Оператор if не использовать. Подсказка. Необходимо то прибавлять, то вычитать из суммы очередной квадрат. Как это сделать без ветвления. Удобно ввести дополнительную переменную, например zn. Сначала она равна 1. На каждом шаге цикла умножать ее на –1. Тогда знак переменной zn будет чередоваться, что и требуется. Теперь если сумма содержится в переменной s, а числа – в переменной x, то увеличение суммы производится оператором s:=s+zn*x*x;

Задачи по вариантам.

  1. Читать с клавиатуры числа до тех пор, пока не будут введены подряд два отрицательных числа. Вывести на экран сумму всех введенных чисел.

  2. Читать с клавиатуры числа до тех пор, пока не будут введены подряд числа 3 и 5. Вывести на экран произведение всех введенных чисел.

  3. Читать с клавиатуры числа до тех пор, пока не будут введены подряд числа 3, 5 и 7. Вывести на экран сумму всех введенных чисел.

  4. Читать с клавиатуры числа до тех пор, пока не будет введено число 0. Вывести на экран сумму введенных чисел и сумму их квадратов.

  5. Читать с клавиатуры числа до тех пор, пока не будет введено число 0. Вывести на экран разность между суммой введенных чисел и суммой их квадратов.

  6. Читать с клавиатуры числа до тех пор, пока не будут введены подряд числа 3 и 5. Вывести на экран сумму всех введенных чисел.

  7. Читать с клавиатуры числа до тех пор, пока не будут введены подряд два отрицательных числа. Вывести на экран произведение введенных чисел.

  8. Читать с клавиатуры числа до тех пор, пока не будут введены подряд два отрицательных числа. Вывести на экран количество введенных чисел.

  9. Читать с клавиатуры числа до тех пор, пока не будут введены подряд числа 3 и 5. Вывести на экран количество введенных чисел.

  10. Читать с клавиатуры числа до тех пор, пока не будут введены подряд числа 3, 5 и 7. Вывести на экран количество всех введенных чисел.

  11. Читать с клавиатуры числа до тех пор, пока не будут введены подряд числа 3, 5 и 7. Вывести на экран произведение всех введенных чисел.



Работа с цифрами числа.


Если количество цифр в числе заранее неизвестно, то при работе с ними необходимо использовать цикл.

Пример 8. Найти количество цифр в заданном числе. Например, для числа 1232 количество цифр 4.


Решение. Будем хранить число в переменной n, количество цифр – в переменной num. Нужно повторять следующие действия: откусывать цифру от числа и прибавлять к переменной num единицу. До цикла цифр в числе нет, поэтому перед циклом присвоим num:=0. Цикл выполняем до тех пор, пока в числе есть цифры, то есть, пока оно не равно 0. Число повторений заранее неизвестно, поэтому необходимо использовать цикл while или цикл repeat...until.

Пример 9. Найти произведение цифр заданного числа.


Решение.

Число будем хранить в переменной n, произведение цифр – в переменной p.



Теперь на каждом шаге цикла нужно умножать p на последнюю цифру числа n, а затем ее откусывать. До цикла p:=1. Цикл выполняем до тех пор, пока в числе есть цифры, то есть, пока оно не равно 0. Число повторений заранее неизвестно, поэтому необходимо использовать цикл while или цикл repeat...until.

Задачи по работе с цифрами числа


  1. В каком случае программы из первого примера будут выдавать неверный ответ? Как их исправить?

  2. Найти сумму цифр числа.

  3. Вывести цифры числа в троичной системе счисления

  4. Вывести разность между суммой цифр заданного числа и их произведением.

  5. Переставить цифры в заданном числе в обратном порядке. Например, из числа 2346 должно получиться число 6432.

  6. Найти разность между первой и последней цифрами числа.

Задачи по вариантам

  1. Прочитать с клавиатуры число. Вывести на экран сумму его первой и последней цифр.

  2. Прочитать с клавиатуры число. Вывести на экран произведение всех его цифр, кроме первой.

  3. Прочитать с клавиатуры число. Вывести на экран произведение первой и второй его цифр.

  4. Прочитать с клавиатуры число. Вывести на экран разность между произведением его цифр и последней цифрой.

  5. Прочитать с клавиатуры число. Вывести на экран произведение всех его цифр, кроме последней.

  6. Прочитать с клавиатуры число. Вывести на экран сумму первой и второй его цифр.

  7. Прочитать с клавиатуры число. Вывести на экран разность между произведением его цифр и первой цифрой.

  8. Прочитать с клавиатуры число. Вывести на экран сумму всех его цифр, кроме первой.

  9. Прочитать с клавиатуры число. Вывести на экран разность между суммой его цифр и последней цифрой.

  10. Прочитать с клавиатуры число. Вывести на экран сумму всех его цифр, кроме последней.

  11. Прочитать с клавиатуры число. Вывести на экран разность между суммой его цифр и первой цифрой.

  12. Прочитать с клавиатуры число. Вывести на экран разность между первой и второй его цифрами.

Задачи повышенной сложности.


  1. В заданном числе поменять местами цифры с четными и нечетными номерами. Например, из числа 3457 получится 4375.

  2. Найти значение выражения 1*12+2*22+1*32+2*42+1*52+... и так до n2. If не использовать.

  3. Вывести цифры заданного числа в шестиричной системе счисления (можно в обратном порядке).

  4. Известный вам алгоритм поиска наибольшего общего делителя (НОД) двух чисел не будет работать, если числа порядка 1000000000 (тип longint). Существет более эффективный алгоритм Евклида. Его идея – НОД не изменится, если любое из чисел заменить на остаток от деления большего на меньшее. Разумеется, заменять нужно большее из чисел. Это действие нужно повторять до тех пор, пока остаток не станет равным нулю. Тогда меньшее из чисел будет равно НОД. Запрограммировать этот алгоритм.


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©zodorov.ru 2017
обратиться к администрации

    Главная страница