Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



 

Для программирования разветвлений в программах на языке 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; Просмотров: 553; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.067 с.)
Главная | Случайная страница | Обратная связь