Главная » 2010»Декабрь»10 » Программирование циклических структур на языке Паскаль.
23:48
Программирование циклических структур на языке Паскаль.
Программирование циклических структур на языке Паскаль.
Теоретическая часть. Идея цикла возникла в XIX веке. Цикл позволяет многократно выполнить некоторое множество действий, задаваемых операторами, составляющими его тело. В Паскале имеется несколько видов оператора цикла.
1. Оператор цикла с предусловием. While...Do... Данный оператор имеет вид: WHILE логическое выражение DO оператор (тело цикла); При выполнении оператора WHILE вначале вычисляется значение логического выражения. Если это значение истинно, выполняется 1 оператор, следующий за служебным словом DO, затем управление передается на начало цикла - WHILE, вычисление значения логического выражения проверяется вновь и т. д., до тех пор, пока оно не примет значение «ложь». Если выражение принимает значение «ложь» при первой же проверке, то оператор не выполнится ни разу. В состав логического выражения входят: параметр(ы) цикла (счетчик), стандартные операции, знаки сравнения и логические операции. Например: a > 10, j = 1, (С = 5) or (k >0), a*b = 12.5, i <= 15. Оператор тела цикла может быть любым, в том числе и составным оператором: begin Оператор _l; Оператор _2; ... Оператор _n; end; Пример 1. Частный случай: While True Do Оператор; Здесь оператор будет выполняться бесконечно. Например, на рис.1. представлена программа, которая будет выводить на экран «SOS», пока пользователь не выполнит 1 ЛК по , или: Программа > Завершить для выхода из программы Вопрос 1: что надо изменить в программе, чтобы слово «SOS» выводилось по строке? Рис.1. «Бесконечный» цикл Пример 2. Применение оператора цикла с предусловием: Выводить числа от 1 до 10 (пока < 10), с шагом 3. Var k: integer; { Пояснения к программе } BEGIN k: = 1; {задается начальное значение k – параметра логического выражения } WHILE k < 10 Do { вычисляется значение логического выражения k < 10 } BEGIN { если значение k < 10 - «истиа», выполняется оператор BEGIN… End; } { если «ложь» - управление передается следующему оператору после } { оператора – тела цикла - WriteLn (‘Всего доброго!’) } WriteLn ('Значение счетчика равно ', k); k:= k + 3; {значение переменной логического выражения увеличиваем на шаг = 3} End; {конец оператора – тела цикла, управление передается строке WHILE} Writeln (‘Всего доброго!’) End. Вопрос 2: Какие значения примет переменная k ? Задание 1: Измените программу так, чтобы на экран выводились четные числа до 20 включительно. Задание 2: Измените программу так, чтобы на экран выводились числа от -3 до +3 с шагом 0,5?
2. Оператор цикла с постусловием Repeat...Until... Оператор цикла с постусловием имеет вид REPEAT оператор(ы;) UNTIL логическое выражение ; или: REPEAT statement UNTIL expession; Здесь вначале выполняется оператор-тело цикла, а затем вычисляется значение логического выражения (expression). Процесс повторяется, пока выражение expression принимает значение «ложь». Как только это значение станет истинным, выполнение цикла прекращается.
В цикле repeat-until... операторные скобки begin...end могут быть опущены. Таким образом, в общем случае оператор repeat...until имеет следующий вид: repeat Оператор _l; Оператор_2; Оператор _n; until логическое выражение;
Точка с запятой перед зарезервированным словом UNTIL необязательна. В приведенном ниже частном случае, как и в примере 1, цикл выполняется бесконечно. repeat Оператор; until False;
В операторе While...Do... проверка выполняется в начале цикла, то в цикле Repeat...Until... проверка выполняется в последнюю очередь, и Тело цикла в любом случае выполняется хотя бы один раз. При составлении программы часто перед началом цикла задают начальное значение параметру цикла (или счетчику - переменной, участвующей в логическом выражении), а внутри тела цикла включают оператор, изменяющий параметр цикла на шаг. Шаг может быть и отрицательным.
Пример 3. Цикл с постусловием: Uses CRT; Var С: Real; BEGIN C:= -1 Repeat Write('Значение параметра цикла равно ', C); WriteLn; C := C + 0.2; Until C = 1; END. Вопрос 3: Какие значения примет переменная C? Вопрос 4: почему в Примере 2 параметр цикла имеет тип Integer? 3. Операторы цикла со счетчиком. For...To...Do... и For...Downto...Do... 3.1. FOR j := выражение1 TO выражение 2 DO оператор;
Здесь переменная j, называемая управляющей переменной, или Счетчик, или Параметр цикла. FOR – для, ТО - до DO – выполнить. Тело цикла (оператор) будет выполняться столько раз, пока Счетчик ( j:= ) примет все значения от начального (выражение1), до конечного (выражение 2) с шагом 1. Счетчик (например, j) является произвольным идентификатором (переменной), который объявляется как переменная любого скалярного типа (к скалярным относятся целый, символьный, булев и перечислимые типы). При выполнении оператора For сначала вычисляется значение выражения 1 , затем вычисляется значение выражения 2, далее управляющая переменная цикла последовательно пробегает все значения от выражения 1 до выражения 2 с шагом 1. В том случае, когда значение выражения 1 оказывается больше значения выражения 2, тело цикла не будет выполняться вовсе. Эти значения остаются неизменными в ходе выполнения всего цикла For. Рассматриваемый вариант цикла For эквивалентен следующей последовательности операторов: в предположении, что при каждом выполнении оператора не изменяются значения j и k. Пример 4: Задание 3: Напишите программы для вычисления кубов чисел от 1 до 15 двумя способами.
3.2. Вариант FOR...DOWNTO...DO... цикла for аналогичен циклу for...to...do... за исключением того, что в нем управляющая переменная на каждом шаге выполнения не увеличивается, а уменьшается на единицу: For j := выражение1 Downto выражение 2 Do оператор; Рекомендации при составлении программ циклической структуры: Используйте цикл for в том случае, когда точно знаете, сколько раз должно быть выполнено тело цикла. В противном случае обратитесь к циклам repeat или while. Используйте repeat, если необходимо, чтобы тело цикла выполнялось, по крайней мере один раз. Используйте while, если хотите, чтобы проверка была произведена прежде, чем будет выполняться тело цикла.
Задание 4: Напишите программы для вычисления Корня квадратного чисел от 10 до 4 двумя способами. Отчет по работе: Запишите конспект теоретической части. Письменно ответьте на вопросы 1-4, выполните задания 1-3.
Тема. Программирование алгоритмов циклических структур на языке Паскаль. Практическая работа Пример 1. Цикл с постусловием Задание: Составить алгоритм и программу для табуляции , где а = 2, b = 9, x [1, 9], x = 0,25 (x принимает значения: 1, 1.25, 1.5, … 9, т.е. от 1 до 9 с шагом 0,25).
Программа: Блок-схема: program Cikl_P; Uses CRT; var y,x:real; const a=2; b=3; begin x:=1; repeat y:=5*cos(x/b)+exp(a*x); writeln('x =',x:7:2, ' y=',y:10:3); x:=x+0.25 until x>9 end. Самостоятельно: Задание 1. Составить программу для расчета z = a sin x2 + y/x a = 2.5, y – произвольное значение, x [3, 12], x = 0, 5 Задание 2. Составить программу для расчета t, f – произвольное значение, k [2.6, 3.6], k = 0, 2.
Пример 2. Цикл с параметром Составить блок-схему и программу для вывода на экран фамилии студентов из списка, расчета, сколько месяцев он учится и определение курса, на котором студент учится. Входные данные: f - Ф.И.О., n -год и m - месяц поступления в университет, текущие: g - год и t - месяц. Выходные данные: а – количество месяцев учебы, в – курс. Формулы: a = (g - n)*12 - m + t; b = [a / 12] +1; на языке Pascal: b = (a div 12) +1;
Программа: Блок-схема: program CICL_2; var f : string[15]; a,b, i, n, m, g, t: integer; begin writeln('Введите количество студентов в списке'); readln(N); writeln('Введите Ваши данные: '); for i:= 1 to n do begin writeln('Введите ФИО '); readln(f); writeln('Введите год поступления в ВУЗ: '); readln (n); writeln('Введите месяц поступления в ВУЗ, например, 7 : '); readln (m); writeln('Введите текущий год: '); readln (g); writeln('Введите текущий месяц, например, 12: '); readln (t); a:= (g - n)*12 - m + t; b:= (a div 12) +1; writeln('Уважаемый, ', f, '! Вы являетесь студентом ' , b, ' курса ' ); writeln('Вы занимаетесь ', a, ' месяцев ' ); end; end.
Задание 3: 1. Дописать программу так, чтобы выводилось количество месяцев и лет до окончания вуза. 2. Напишите программу для расчета лет в школе 3. Напишите программы при помощи операторов цикла с пред- и пост-условием.
Пример3: Вычислить факториал числа а = 5 (записывается так: а!).
program CICL_3; var i,f: integer; const a=5; begin f:=1; for i:= 1 to a do f := f * i; writeln(f); end. До начала цикла присваиваем переменной f значение равное единице. Иначе бы при умножении получили в результате ноль.
Выполните Примеры 1-3 на компьютере в среде Pascal ABC., Выполните Задания 1-3 в тетради и на компьютере в среде Pascal ABC. Задания на дом Написать программы для следующих задач: 1. Составить таблицу перевода расстояний в дюймах в сантиметры от 1 до 10 дюймов (1 дюйм =2,54 см). Обозначить: D – расстояние в дюймах, S – в сантиметрах. 2. Составить таблицу значений, х принадлежит промежутку [1;10] с шагом 2 для вычисления х2 , . 3. Найти значение функции у=10/(Z+10), где Z находится в промежутке [А, В] с шагом С. Ключ к заданию: Предусмотреть ввод А, В, С с клавиатуры. 4. Составить алгоритм для вычисления 15 значений S = A + B. Отчет по работе представить преподавателю.