Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программы разветвляющейся структуры
Для программирования разветвлений в программах на языке 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; Нарушение авторского права страницы