Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по ПАСКАЛЬ.doc
Скачиваний:
38
Добавлен:
20.04.2015
Размер:
572.93 Кб
Скачать

2. Условный оператор

Цель работы

Получение навыков в использовании условного оператора.

Пример. Даны целые числа а, b, с. Если abc, то все числа заменить их квадратами, если а>b>с, то каждое число заменить наименьшим из них, в противном случае сменить знак каждого числа.

Решение:

Условие задачи перепишем следующим образом:

а = a2,b=b2, с = с2, если а <=b<= с,

а = с, b= с, если а>b> с,

а = -a,b= -b, с =-с, в остальных случаях.

Program Example_3;

Var

a,b,c: Integer;

Begin

Writeln('Введите числа a, b, c');

Readln(a,b,c);

If (a<=b) And (b<=c) Then begin

a:=sqr(a);

b:=sqr(b);

c:=sqr(c);

End

Else If (a>b) And (b>c) Then Begin

a:=c;

b:=c;

End

Else Begin

a:=-a;

b:=-b;

c:=-c;

End;

Writeln(a:3,b:3,c:3);

Readln;

End.

3. Цикл с параметром

Цель работы

Получение навыков в использовании оператора For.

Пример. Из чисел от 10 до 99 вывести те, сумма цифр которых равна п (0<п< 18).

Решение:

Обозначим: k— это просматриваемое число,p1 — это первая цифра числаk, р2 — это вторая цифра числаk,s— это сумма цифр данного числаk. Числоkбудем выписывать только в том случае, когда сумма р1 и р2 будет равнаn.

Program Example_4;

Var

k, n,pi,p2,s:Integer;

Begin

Write('введите целое число ');

Readln(n); {вводим целое число}

For k:=10 To 99 Do begin

pl:=k Div 10; {выделяем первую цифру}

p2:=k Mod 10; {выделяем вторую цифру}

s:=pl+p2; {находим сумму цифр}

If s=n Then Writeln(k); {если сумма равна n, то выводим К}

End;

Readln;

End.

Упражнения

1. Сколько раз будут выполнены операторы из тела циклов в следующих фрагментах программ:

  1. For k:=-l To 1 Do ...

  2. For k:=10 To 20 Do ...

  3. For k:=20 To 10 Do ...

  4. k:=5; r:=15;

For i:=k+l To r-1 Do ...

  1. k:=5;r:=15;

For i:=0 To k*r Do ...

  1. k:=r;

For i:=k To r Do ...

2. Определите значение переменной sпосле выполнения следующих операторов:

s:=0; n:=10;

For i:=2 To n Do s:=s+100 Div i;

4. Циклы с условиями

Цели работы

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

  2. Получение навыков работы с вложенными циклами.

Пример 1. Цикл с предусловием. Напечатайте таблицу значений функции у =sin(x) на отрезке [0, 1] с шагом 0,1.

Решение. Постановка задачи наталкивает нас на использование цикла с вещественным параметром, но цикл с параметром предполагает использование переменной порядкового типа, а типRealтаковым не является.

Program Example_5;

Var

x: Real;

Begin

x:=0;

While x<=l Do Begin

Writeln (x:5:l,sin(x):7:3);

i:=i+0.1;

End;

Readln;

End.

Пример 2. Цикл с постусловием. Составить программу планирования закупки товара в магазине на сумму, не превышающую заданной величины.

Решение. Обозначим черезхиксоответственно цену и количество товара, черезр— заданную предельную сумму, черезs— общую стоимость покупки. Начальное значение общей стоимости покупки (s) равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную суммур. В этом случае на экран надо вывести сообщение о превышении.

Program Example_6;

Var

x, k, p, s: Integer;

Begin

Writeln('Предельная сумма - ');

Readln(p);

s:=0;

Repeat

Writeln('Введите цену товара и его количество');

Readln(x, к) ;

s:=s+x*k;

Writeln('Стоимость покупки равна ',s);

Until s>p;

Writeln ('Суммарная стоимость покупки превысила предельную сумму');

End.

При описании циклов с постусловием необходимо принимать во внимание следующее:

  • перед первым выполнением цикла условие его окончания (или продолжения) должно быть определено;

  • тело цикла должно содержать хотя бы один оператор, влияющий на условие окончания (продолжения), иначе цикл будет бесконечным;

  • условие окончания цикла должно быть в результате выполнено.

Пример 5. Вложенные циклы. Даны натуральные числа n и k. Составить программу вычисления выражения 1k + 2k + ... + nk.

Решение. Для вычисления указанной суммы целесообразно организовать цикл с параметромi, в котором, во-первых, вычислялось бы очередное значениеу = ik и, во-вторых, осуществлялось бы накопление суммы прибавлением полученного слагаемого к сумме всех предшествующих (s = s + у).

Program Example_7;

Var

n, k, y, i, s, m: Integer;

Begin

Writeln('Введите исходные данные n и k');

Readln(n,к);

s:=0;

For i:=l To n Do Begin

y:=l;

For m:=l To к Do

y:=y*i; {нахождение степени к числа i}

s:=s+y;

End;

Writeln('Ответ: ',s);

End.

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

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

Упражнения

  1. Дана последовательность операторов:

а:=1;

b:=1;

while a+b<8 do begin

a:=a+l;

b:=b+2;

End;

s:=a+b;

Сколько раз будет повторен цикл и какими будут значения переменных а,b, иsпосле завершения этой последовательности операторов?

  1. Какими будут значения переменных aиbпосле выполнения операторов:

а:=1;

b:=1;

While a<=3 Do

a:=a+l;

b:=b+l;

  1. Определите значение переменной sпосле выполнения следующих операторов:

a) s:=0; i:=0; While i<5 Do Inc(i); s:=s+100 Div i;

6) s:=0; i:=l; While i>l Do Begin s:=s+100 Div i; dec(i) End;

  1. Дана последовательность операторов, вычисляющих факториал fчислап:

k:=l; f:=0;

While k<n Do f=f*k

k:=k+l,

которая содержит пять ошибок. Найдите эти ошибки

  1. Определите значение переменной sпосле выполнения следующих операторов:

s:=0; i:=l;

Repeat s:=s+5 Div i; i:=l-l; Until i<=l;