русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Теперь несколько небольших заданий на эту тему.


Дата добавления: 2014-02-04; просмотров: 4110; Нарушение авторских прав


Begin

Самостоятельные задания

Repeat

Begin

Repeat

Begin

Begin

Begin

Begin

End

Begin

Begin

Begin

Begin

Begin

Begin

Begin

Конец цикла

вывести значение счётчика суммы на экран

То есть для нахождения суммы мы должны специально выделить переменную, в которой эта сумма будет храниться. Пусть это будет переменная s. Вначале сумму нужно обнулить, то есть переменной s присвоить 0. Потом, уже в теле цикла, мы должны будем каждый раз увеличивать значение переменной s на значение очередного слагаемого. Этим слагаемым будет переменная цикла, так как именно она будет поочерёдно принимать все интересующие нас значения.

Переведём всё вышесказанное на язык Паскаль:

program The_sum_of_natural_numbers_from_1_to_10;

var s, i : integer;

s := 0; { вначале сумма равна 0 }

For i := 1 to 10 do

s := s + i { суммируем }

end;

writeln (’Сумма чисел от 1 до 10 равна ’, s)

end.

Заметьте, что строчка с выводом результата на экран находится за телом цикла. Скажите, как изменилось бы выполнение программы, если бы оператор writeln находился внутри тела цикла?

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

 

2.3.Нахождение произведения

 

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



program The_product_of_natural_numbers_from_1_to_5;

var p, i : integer;

p := 1; { вначале произведение равно 1 }

For i := 1 to 5 do

p := p * i { находим произведение }

end;

writeln (’Произведение чисел от 1 до 5 равно ’, p)

end.

Эта программа находит произведение первых пяти натуральных чисел. Измените эту программу так, чтобы она находила произведение первых 10 натуральных чисел и объясните причину полученного неправильного результата. Исправьте программу так, чтобы она давала правильный результат. А чему равно произведение чисел от -5 до 5? Почему?

2.4.Нахождение количества

Очень часто приходится решать задачу, в которой необходимо найти количество чисел, которые удовлетворяют некоторым условиям. Например, найти количество нечётных чисел в заданном интервале. Для решения этой задачи необходимо организовать цикл, в котором будут поочерёдно перебираться все значения из заданного интервала. В теле цикла надо будет проверять: удовлетворяет ли параметр цикла указанному условию? Если да, то это найденное значение надо посчитать, то есть увеличить счётчик найденных элементов на единицу (в самом начале этот счётчик должен быть равен нулю); если нет, то перейти к следующему элементу.

Применим всё вышесказанное к решению такой задачи: "Найти количество нечётных чисел из интервала от 30 до 50".

Для этого нам надо будет организовать цикл для переменной i, которая будет перебирать поочерёдно значения от 30 до 50. В теле цикла мы должны будем проверять: является ли i нечётным числом? Помните как это делать? Нужно сравнить остаток от деления i на 2 с нулём – чётные числа делятся на 2, нечётные нет. Для такой проверки надо использовать условный оператор if. Если i – число чётное, то этот остаток не равен нулю. В этом случае нужно увеличить счётчик на единицу, то есть посчитать найденное число. В конце программы выводим результат на экран.

Переведём теперь это всё с русского на язык паскаль:

program Skoko_nechetnyx_chisel_ot_30_do_50;

var k, i : integer;

k := 0; { вначале счётчик равен 0 }

For i := 30 to 50 do

if k mod 2 <> 0 { Если число не делится на 2, то оно нечётное … }

then k := k + 1 { … и его надо посчитать }

end;

writeln('В интервале от 30 до 50 ', k, ' нечётных чисел')

end.

Как вы уже заметили, цикл For используют тогда, когда заранее, перед началом его работы известно, сколько раз он должен выполниться. Однако, порой бывает необходимо организовать такой цикл, о котором заранее не будет известно, сколько раз его надо выполнять. Например, задача о нахождении суммы цифр данного числа N. Если мы не знаем, сколько в этом числе цифр, то не сможем решить эту задачу используя цикл For. Для таких целей используют цикл While – цикл пока.

2.5.Цикл While ... do

Цикл While (пока) особенен тем, что позволяет организовывать циклы, для которых нельзя заранее сказать, сколько раз выполнится его тело. Цикл выполняется до тех пор, пока верно условие в заголовке цикла.

Формат записи:

While<условие> do

<Оператор цикла>

 

Цикл работает так. Сначала проверяется <условие>. Если оно верно, то выполняется <Оператор цикла>. Затем <условие> проверяется ещё раз, если оно опять верно, то снова выполняется <Оператор>. Так продолжается до тех пор, пока<условие> верно. Если <условие> с самого начала было ложно, то <Оператор> не выполнится ни разу.

Заставим компьютер посчитать от 1 до 100, используя этот оператор цикла:

Program Schet_ot_1_do_100;

Var i : integer;

i := 1;

while i <= 100 do { нам нужно перебрать первые 100 чисел }

writeln (i);

i := i + 1; { Если убрать эту строку – программа зациклится }

end;

end.

Обратите внимание на строку

i := i + 1;

Благодаря этой строке программа перебирает все числа от 1 до 100, потому что цикл while, в отличие от for, самостоятельно не изменяет никакие переменные – в этом, кстати, и заключается его универсальность. Если вы не позаботитесь об увеличении переменной i на единицу, то условие всегда будет верно (i всегда равно 1, а значит i всё время меньше, чем 100).

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

 

Program NaborChetnyxChisel;

Var i : integer;

i := 2;

while i <= 20 do

writeln (i);

i := i + 2; { переход к следующему чётному числу }

end;

end.

Здесь использован тот факт, что от одного чётного числа до следующего две единицы. Если бы мы использовали для решения этого задания цикл For, то нам пришлось бы дополнительно проверять каждое число на чётность (так как в цикле For числа перебираются подряд; цикл while не ставит таких ограничений: как нам надо перебирать числа, так мы и делаем).

Полезный совет: Чтобы не допустить логических ошибок при использовании цикла While, проверьте, как будет работать цикл в первыйи в последний раз: обрабатываются ли он те числа, которые надо?

2.6.Цикл Repeat ... Until

Формат записи этого цикла:

<оператор1>;

<оператор2>;

...

<операторN>

Until <условие выхода>;

 

Цикл Repeat (повторять) очень похож на цикл While. Но работает немного по-другому:

Сначала выполняется последовательность операторов после Repeat, затем проверяется <условие выхода> записанное после Until. Если оно ложно, цикл выполняеттся заново. Если же оно истинно, то цикл заканчивает свою работу.

То есть тело цикла Repeatвсегда выполнится хотя бы один раз. Потому можно сказать, что цикл While сначала думает, а потом делает, а Repeat наоборот: сначала делает, а потом думает. Ещё раз обратите внимание, что цикл Repeat повторяется только тогда, когда условие после Until ложно, потому это условие и называется “условием выхода”.

Составим ещё раз программу счёта от 1 до 100, используя теперь цикл Repeat - Until :

 

ProgramSchet_ot_1_do_100;

Var i : integer;

i := 1 ;

writeln (i);

i := i + 1;

until i > 100;

end.

 

Сравните эту программу с аналогичной, которую мы оформляли с циклом While. Сколько вы найдёте различий, прежде чем читать дальше?

Всего должно быть не меньше двух отличий:

1. В цикле Repeat не использованы операторные скобки begin - end (они ему просто не нужны!)

2. По разному записаны условия цикла, в цикле Repeat записано условие выхода: когда оно выполнится, цикл завершит работу.

Выполните каждое задание тремя способами, используя сначала цикл For, потом While, затем Until.

 

1) Вывести на экран 22 звёздочки в ряд.

2) Дано число N. Вывести на экран N звёздочек в ряд.

3) Вывести на экран все нечетные чисел из интервала от 1 до 30.

4) Вывести на экран все нечетные чисел из интервала от 1 до 30 в обратном порядке.

5) Найти сумму первых 10 чётных чисел.

6) Найти количество двузначных чисел, у которых первая цифра больше второй.

7) Найти произведение тех чисел от 1 до 50, которые кратны 17.

2.8.Цикл в цикле

В теле цикла могут быть самые различные операторы. Мы уже познакомились со случаем, когда внутри цикла используется условный оператор. Сейчас мы познакомимся с более сложным и более интересным вариантом, когда внутри одного цикла находится другой цикл.

Начнём знакомство с составления программы, которая выводит на экран числа от 10 до 29. Выпишем сначала все эти числа в ряд:

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Посмотрите внимательно! Замечаете закономерность? Сначала увеличиваються единицы от 0 до 9, при этом значение десятков не меняется. Только когда перебор единиц завершён, десятки увеличились на 1. После этого опять пошли плясать подряд единицы.

Давайте отразим поведение десяток и едениц в составляемой программе. В переменной a – у нас будут десятки, в b – единицы:

 

for a := 1 to 2 do

for b := 0 to 9 do

s := a*10 + b;

writeln (s)

end;

 

Вот они: вложенные циклы! Как только начал выполнение первый цикл “для а”, тут же началось выполнение цикла “для b”. И пока этот внутренний цикл не выполнится (в маленьком прямоугольнике), внешний цикл не продолжит выполнение.

Как вы думаете, сколько всего раз выполниться содержимое маленького прямоугольника? А содержимое большого?

Попробуйте на основе этого примера самостоятельно составить программу, которая выведет на экран числа от 27 до 49, причём чтобы единицы принимали только значения от 7 до 9. То есть на экран должны буть выведены следующие числа:

 

27 28 29

37 38 39

47 48 49

Сколько раз выполниться оператор writeln внутри следующих циклов:

for i := 1 to 5 do

for j := 5 to 10 do



<== предыдущая лекция | следующая лекция ==>
Начало цикла | Then begin


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.042 сек.