Лекции.ИНФО


Программы разветвляющейся структуры



 

Для программирования разветвлений в программах на языке Turbo Pascal используются два оператора:

1) Условный оператор обеспечивает разветвление на две ветви:

IF <условие> THEN <оператор1>

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

Вторая ветвь (т.е. ELSE <оператор2>) может отсутствовать.

Например:

IF x>y THEN z:=x ELSE z:=y;

IF a<b THEN a:=0;

Если требуется после слов THEN или ELSE использовать несколько операторов, то их необходимо объединить в один составной оператор с помощью операторных скобок BEGIN и END:

IF x>y THEN BEGIN a:=x; b:=y END

ELSE BEGIN a:=y; b:=x END

При использовании сложных логических выражений, включающих операции AND, OR, NOT, операции отношения необходимо заключать в скобки, например:

IF (a>b) AND ((x>y) OR (x>z)) THEN ...

Порядок выполнения операций в выражении определяется их приоритетами. Среди логических операций сначала выполняется операция NOT (наивысший приоритет), затем AND, последней – OR (низший приоритет). Для изменения этого порядка нужно использовать скобки.

2) Оператор варианта (оператор множественного выбора) обеспечивает разветвление на произвольное число ветвей:

CASE <выражение> OF

<список значений 1> : <оператор 1>;

<список значений 2> : <оператор 2>;

...

<список значений N> : <оператор N>;

ELSE <оператор>

END

Здесь также ветвь ELSE может отсутствовать.

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

Например:

CASE ErrorCode OF

1: writeln(’Файл не найден’);

2..4,6: writeln(’Ошибка открытия файла: ’, ErrorCode);

5: writeln(’Недопустимое имя файла’);

END

Практические задания

1. Изучить и запустить программу, определяющую, попало ли введенное пользователем число х в интервал [a, b].

Program Interval;

Var a,b,x: real;

Begin

a:=–5; b:=5;

Write(’x=’); Readln(x);

If (x>=a) and (x<=b) then

writeln(’x принадлежит [a,b]’)

else writeln(’x не принадлежит [a,b]’);

Readln

End.

2. Составить программу, определяющую, попала ли точка с координатами (x, y) внутрь заштрихованной области.

 

3. С клавиатуры вводятся три целых числа a, b, c. Изучить и запустить программу, которая выводит их на экран в порядке возрастания (использовать наименьшее количество условных операторов).

Program ThreeNumbers;

Var a,b,c,x: integer;

Begin

Write(’a=’); Readln(a);

Write(’b=’); Readln(b);

Write(’c=’); Readln(c);

{Упорядочим сначала два числа a, b – должно быть а < b}

If a>b then begin x:=a; a:=b; b:=x end;

{a и b упорядочены, теперь может быть c < a, c > b или a < c < b}

If c<a then Writeln(c,’ ’,a,’ ’,b)

else If c>b then Writeln(a,’ ’,b,’ ’,c)

else Writeln(a,’ ’,c,’ ’,b);

Readln

End.

 

4. Изучить и запустить программу, которая вычисляет сумму, разность, произведение или частное двух чисел в зависимости от знака операции +, –, *, / (т.е. простейший калькулятор). Добавить в программу операцию возведения x в степень y.

 

Program Calc;

Var x,y,r:real;

c:char;

Begin

write('Операнд 1: '); readln(x);

write('Операция : '); readln(c);

write('Операнд 2: '); readln(y);

Case c of

'+': r:=x+y;

'-': r:=x-y;

'*': r:=x*y;

'/': If y<>0 then r:=x/y

Else

begin writeln('Деление на 0');exit end;

Else

begin writeln('Неверная операция');exit end;

end;

writeln(x:6:3,' ',c,' ',y:6:3,' = ', r:9:6);

Readln

End.

Задания для самостоятельной работы

1. Составить программу, определяющую, попала ли точка с координатами (x, y) внутрь заштрихованной области.

а) б)

в) г)

2. Составить программу, которая преобразует введенное с клавиатуры целое число от 0 до 15 в шестнадцатеричную систему и выводит результат на экран.

3. Используя оператор варианта, составить программу вычисления площадей геометрических фигур – круга, квадрата, прямоугольника, прямоугольного треугольника, произвольного треугольника.

4. Составить программу, определяющую, можно ли построить треугольник со сторонами a, b, c, а также его форму – равносторонний, равнобедренный или разносторонний; прямоугольный, остроугольный или тупоугольный.

5. Составить программу вычисления действительных корней квадратного уравнения ax2 + bx + c = 0.

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

Лабораторная работа №3

Программы циклической структуры

В Турбо Паскале имеется три оператора цикла:

1) Оператор цикла с параметром For … do. Оператор безусловного цикла имеет следующую структуру:

For i:=N1 to N2 do < тело цикла >;

где i– параметр цикла, который должен быть дискретного типа (целого, символьного и т.д.); N1 – начальное значение параметра цикла; N2 – конечное значение параметра цикла.

Безусловный цикл выполняется заданное число раз. Чтобы прервать выполнение досрочно, необходимо увеличить iдо конечного значения (i:=N2), либо использовать процедуру Break, которая прерывает выполнение циклов. Процедура Continue начинает новую итерацию цикла, даже если предыдущая не была завершена.

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

For i:=N2 downto N1 do < тело цикла >;

2) Оператор цикла с постусловием Repeat … Until. В этом операторе проверка условия выхода из цикла осуществляется после каждого выполнения тела цикла, поэтому тело цикла обязательно выполнится хотя бы один раз:

Repeat

< тело цикла >

Until < условие >;

Цикл выполняется до тех пор, пока условие не станет истинным. Например, при задании длины массива проверка может осуществляться следующим образом:

Repeat

Write(’Введите длину массива N (N<10): ’);

ReadLn(N)

Until (N>0) AND (N<10);

Цикл выполняется до тех пор, пока пользователь не введет положительное число, меньшее 10.

Здесь в теле цикла можно использовать несколько операторов, не заключая их в операторные скобки begin … end.

3) Оператор цикла с предусловием While … do. В этом цикле проверка условия проводится до начала выполнения тела цикла:

While < условие > do < тело цикла >;

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

N:=0;

While (N<=0) OR (N>=10) do

Begin

Write(’Введите длину массива N: ’);

ReadLn(N)

END;

Обратите внимание, что до первого входа в цикл переменной N уже должно быть присвоено какое-либо значение!

Процедуры Break и Continue могут использоваться в условных циклах так же, как и в цикле For.

Практические задания

1.Изучить и запустить программу, вычисляющую сумму , n = 10. Определить максимальное значение n, при котором факториал (переменная f типа longint) вычисляется верно.

var f: longint;

i: integer;

s: real;

Begin

s:=0; f:=1;

for i:=1 to 10 do begin

f:=f*i;

s:=s+1/f

end;

writeln(’s=’,s:9:6); readln

End.

2.Составить программы, вычисляющие значения выражений:

а) б) в) г) ;
д) е) ж) ; з)
и) к) .

3.Составить программу, вычисляющую значение выражения f = n×10!+(n–1)×9!+...+(n–10)×0!, где n – любое целое число.

var n,u,f: longint;

i, j: integer;

Begin

writeln(’Введите число n’);

readln(n);

f:=0;

for i:=10 downto 0 do{ цикл вычисления суммы}

Begin

u:=1;

for j:=2 to i do u:=u*j;{цикл вычисления факториала}

f:=f+(n+i-10)*u;{добавление в сумму}

end;

writeln(’f=’, f:12);

End.

4. Вычислить с помощью рекуррентной формулы сумму ряда с заданной точностью e (использовать оператор цикла с постусловием):

.

Решение. Каждый член данного ряда требует вычисления только двух функций – степенной и факториала. Поэтому в рекуррентную формулу целесообразно включить весь член ряда

.

Итак, требуется получить формулу

un+1=Rn un .

Определим множитель Rn

.

Таким образом, сумму указанного ряда можно найти по следующей схеме:

S = u0 + u1 + ... + un ,

где

u0 = 1, ,

суммирование заканчивается, когда

|un – 1| > e, |un | < e.

 

var s,u,x,eps: real;{s – сумма, u – член ряда, eps - точность}

n: integer;{x – аргумент функции, n – номер члена ряда}

Begin

writeln(’Введите аргумент x и точность eps’);

readln(x, eps);

u:=1; s:=u; n:=0;{ инициализация переменных}

Repeat

u:=–u*x*x/(2*n+1)/(2*n+2);{рекуррентная формула}

s:=s+u; {суммирование ряда}

n:=n+1;{счетчик}

until abs(u)<eps;

writeln(’Сумма ряда равна ’, s:10:6);

writeln(’Для сравнения cos(x)=’, cos(x):10:6);

Readln

End.

5.Вычислить суммы рядов с точностью e = 0,0001. Использовать, где это целесообразно, рекуррентные формулы. Использовать цикл с предусловием (а, в), с постусловием (б, г):

а) б)

в) г)

 

6. Изучить и запустить программу вычисления значений функции на интервале x1£x£x2 с шагом h и найти ее минимальное значение и среднее арифметическое:

var x,y,a, x1, x2, h, xmin, ymin, SA: real;

n,i: integer;

Begin

writeln(’Введите число a, начало и конец интервала и шаг h’);

readln(a, x1, x2, h);

if (x2>x1) and ((x2–x1)>2*h) then{ если x2 > x1 и}

begin{ на интервале не менее трех точек}

x:=x1;{ инициализация }

n:=round((x2-x1)/h);{кол-во точек равно n+1 }

if(x>a) then y:= sqr(sin(abs(x)))

else y:= cos(x*x);

writeln(’x=’, x:7:3,’ y=’, y:9:4);{вывод x1 и y1}

xmin:=x; ymin:=y; SA:=y;{ присваивание начальных }

{ значений перед циклом }

for i:=1 to n do begin{ выполняется цикл }

x:=x1+i*h;

if(x>a) then y:= sqr(sin(abs(x)))

else y:=cos(x*x);{вычисление функции }

writeln(’x=’, x:7:3,’ y=’, y:9:4); {вывод x и y}

if y<ymin then begin

ymin:= y; xmin:= x;{корректируем уmin, xmin}

end;

SA:=SA+y;{накопление суммы значений функции}

end;{ конец цикла }

writeln(’Минимальное значение y =’,ymin:9:4,’ при x=’, xmin:7:3);

writeln(’Среднее значений функции ’, SA/(n+1):9:4);

End

else writeln (’Неверно заданы x1 и x2’);

Readln

End.

 

Задания для самостоятельной работы

 

1. Составить программу, выводящую на экран все символы кодовой таблицы ASCII.

2. Составить программу, которая вводит с клавиатуры четное целое число Х в интервале от 0 до 100 с проверкой введенного значения и предложением повторить ввод в случае ошибки.

3. Составить программу, находящую сумму всех двузначных чисел: а) которые делятся на 7 и при этом не делятся на 5; б) которые делятся на 3 и не делятся на 4; в) у которых число единиц делится нацело на число десятков.

4. Составить программу, выводящую на экран все простые числа в интервале от 1 до 100 (простым называется число, которое делится нацело только на 1 и на себя).

5. Вычислить суммы рядов с точностью e = 0,0001. Использовать, где это целесообразно, рекуррентные формулы.

а) ; б) ; в) ; г) .

6. Составить программу вычисления значений функций на интервале x1£x£x2 с шагом h и найти минимальное, максимальное и среднее арифметическое этих значений:

1) 2)

Лабораторная работа №4









Последнее изменение этой страницы: 2017-03-17; Просмотров: 9;


lektsia.info 2017 год. Все права принадлежат их авторам! Главная