Учебное пособие Омск Издательство Омгту 2010 удк 004. 4 (075) ббк 32. 973018я73 ч 49 Рецензенты
Скачать 1.07 Mb.
|
y=Ax+by = ax2 Ln(x+1)аждому условному оператору в программе соответствует символ “решение” в схеме алгоритма на рис. 5. Программу можно упростить, используя вложенные условные операторы. Например, если в первом и втором операторах IF добавить их альтернативные части ELSE, тогда в третьем IF условие упростится до вида (x <= 2) и не потребуется последний оператор IF.Нет Рис. 5 Задания к самостоятельному выполнению (программа_2_1) Вычислить значение функции в зависимости от интервала, в который попадает вводимый с клавиатуры аргумент: 1. Для t [0,3], at2lnt при 1 t 2, где a = -0.5,b = 2 z = 1 при t < 1, eatcosbt при t > 2, 2. Для x [0,4], при x 2, где а = 2.3 f = х при 0.3 < x 2, cos(x-a) при x 0.3, 3. Для x [0,7], (a+b)/(ex+cosx) при 0 x 2.3, где a = -2.7,b = -0.27 z = (a+b)/(x+1) при 2.3 x 5, ex+sinx при 7 х 5, 4. Для i [7,12], ai4+bi при I < 10, где a = 2.2,b = 0.3. y = tg(i+0.5) при I = 10, e2i+ при I > 10, 5. Для x[0.9,5], x2-7/x2 при x < 1.3, где a = 1.5 y = ax3+7 при 1.3 x 3, lg(x+7) при x 3, 6. Для t[-1.4], при t < 0.1, где a = 2.1,b = 0.37. z = at+b при 0.1 t 2, при t 2, 7. Для x [0,6], a esinx+2.5 при x < 0.3, где a = 1.5. y = ecosx+a при 0.3 x < 4, (sin x)/(a+ex) при x 4, 8 y = . Для x [1,2], a/x+bx2-c при x 1.2, где a = 1.8,b = -0.5, c = 3.5 (a+bx)/ при x > 1.2, 9. Для t[1,5], t при t > a, где a = 2.5 z = t sin at при t = a, e-at cos at при t < a, 10. Для x[0,4], e-bx sin bx при x < 2.3, где a = 1,b = 3 y = сos bx при 2.3 x 3, e-ax cos bx при x 3, 11. Для t[0.5,3], at2-b при t < a, где a = 1.3, b = 6.5 z = a-b при a t b, a t2/3- при t > b, 12. Для x [0,2], |e-2x sin bx| при x >1, где b = -2.9 y = cos bx при x = 1, e-x cos bx при x < 1, 13. Для x [0.5,2] sin (cos ax) при x >1, где a = -0.8 z = tg ax при x = 1, a2 x при x < 1, 14. Для x [1,2], ln bx - 1/(bx+1) при x < 1.3, где b = 1.3 y = bx + 1 при 1.3 x 1.7, ln bx +1/(bx+1) при x > 1.7, 15. Для x[-1,1], ax2+bx2/3 при x < 0.1, где a = 2.5,b = -0.9 z = a x2 при x = 0.1, b x2/3 при x > 0.1. 16. Ввести координаты точки (x, y). Напечатать, в каком квадранте или на какой оси координат находится эта точка. 17. Ввести радиусы R1, R2 и высоту. Вычислить объем усеченного конуса: , где S – площадь оснований. Если R1 = R2 – объем и площадь цилиндра, если R1 = 0 или R2 = 0 – объем (hπr2) и площадь πr() поверхности конуса. 18. Ввести с клавиатуры цифру. Определить, какой системе счисления она может принадлежать. 19. Ввести число. Определить, делится ли оно нацело на два, три или на пять. 20. Ввести a, b, h. Если h = 0, вычислить площадь прямоугольника; при a = b, найти площадь квадрата; в противном случае подсчитать площадь трапеции. 4.6. Оператор выбора варианта CASE Оператор CASE позволяет в зависимости от значения какой-либо переменной или выражения порядкового типа выполнить те или иные действия. Его структура имеет следующий вид: CASE <ключ_выбора> OF <константа_выбора1>: <оператор1>; <константа_выбора2>: <оператор2>; . . . <константа_выбораN>: <операторN> ELSE <оператор> END; где <ключ_выбора> переменная (или выражение) любого порядкового типа; <константа_выбора> константа того же типа, что и <ключ_выбора>; <оператор> произвольный оператор Pascal ABC. Принцип действия оператора. Сначала вычисляется <ключ_выбора>, затем в списке констант выбора отыскивается нужная константа, равная <ключу_выбора>, и выполняется стоящий за ней оператор. После этого оператор CASE завершает работу. Если в списке не найдена константа, совпадающая с "ключом", выполняется оператор, стоящий после ELSE. Заметим, что стоящая в конце часть ELSE <оператор> является не обязательной. При отсутствии в списке выбора нужной константы оператор выбора просто завершает свою работу. Любому из операторов <списка выбора> может предшествовать несколько <констант выбора>. В этом случае они разделяются запятыми или представляют собой диапазон значений. Пример: CASE <ключ> OF 1: <оператор1>; 2, 3: <оператор2>; 4 .. 6: <оператор3> ELSE <оператор> END; <Константа_выбора> не является меткой оператора, поэтому в разделе меток описывать её нельзя. 4.7. Примеры и задания с оператором CASE Пример 1. Выполнить арифметическую операцию в зависимости от введенного с клавиатуры символа. VAR operation: char; x, y, z: real; BEGIN read(x,y); read (operation); CASE operation OF '+': z:=x+y; '-': z:=x-y; '*': z:=x*y; '/': z:=x/y; ELSE write('нет опеpаций') END; WRITELN( ' z= ' , z ) END. Пример 2. Составить программу для начисления зарплаты согласно следующему правилу: если стаж работы сотрудника менее пяти лет, то зарплата равна 50$, при стаже работы от пяти до 15 лет – 100$, свыше 15 лет зарплата повышается с каждым годом на 10$, причем при стаже, превышающем 30 лет, она составляет 300$. Для программирования решения этой задачи определим математическую формулировку задачи: 50, если ST < 5; ZP = 100, если 5 ≤ ST 15; 100 + (ST -15)*10 при 15 < ST ≤ 30; 300, если ST > 30; где ZP – зарплата, ST – стаж работы. Реализация задачи для примера 2 представлена следующим алгоритмом (рис. 6) и программой: Program zarplata; var ST: byte; {стаж (байтовый) тип)} Рис. 6 ZP: real; {вещественный тип} begin writeln('введите стаж'); read(ST); {ввод стажа} case ST of {выбор из } 1..4: ZP:=50; 5..15: ZP:=100; 16..29: ZP:=100+(ST-15)*10 else ZP:=300 end; writeln(' Зарплата = ' , ZP:10:2,' $'); {вывод результата} end. Задания к самостоятельному выполнению (программа 2_2) 1. Определить остаток от деления на восемь введенного числа х и написать восьмеричную цифру прописью. 2. По цифре (0..9), введенной с клавиатуры, напечатать название этой цифры. 3. С клавиатуры ввести число k (1..30). Определить, какому дню недели оно соответствует, если первое число – понедельник. 4. Ввести число и номер месяца. Напечатать дату с названием месяца прописью. 5. Идет k секунда суток. Вычислить, сколько прошло часов и полных минут к этому моменту, при этом согласовать со значением слова (час, часа, часов, минута, минуты, минут). 6. В зависимости от номера (N) типа фигуры организовать ввод необходимых данных и вычислить при N = 1 – площадь круга, N = 2 – объем шара (4/3πR3), N = 3 – объем цилиндра, N = 4 – площадь поверхности сферы 4πr2. 7. Ввести число N (0 ≤ N ≤ 15). Определить и напечатать шестнадцатеричную цифру, ему соответствующую. 8. Для целого числа R (1…99) напечатать фразу « Мне R лет », при некоторых значениях R слово «лет» заменить словом «год» или «года». 9. В зависимости от заданного номера фигуры ввести необходимые данные и вычислить при к = 1 площадь прямоугольника, при к = 2 площадь параллелограмма, а при к = 3 площадь трапеции по формуле (a+b) h/2. Во втором случае напечатать: является ли фигура параллелограммом или ромбом. 10. Перевести введенное целое число 0 ≤ х ≤ 31 в шестнадцатеричную систему счисления. 5. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ 5.1.Оператор счётного цикла В языке Pascal существует три разновидности операторов цикла: 1) счетный оператор цикла (оператор цикла со счётчиком); 2) оператор цикла с предусловием; 3) оператор цикла с постусловием. Для любого оператора цикла вход в цикл возможен только через его начало, выход осуществляется как вследствие естественного окончания цикла, так и путем выполнения оператора перехода GOTO или процедур выхода, содержащихся внутри цикла. Счетный оператор цикла FOR реализует циклический процесс с известным числом повторений. Этот оператор имеет две формы записи. Первая форма позволяет наращивать <параметр цикла> на единицу и имеет вид FOR <параметр_цикла> := Параметром цикла называется переменная, служащая для управления циклом. Для оператора цикла FOR в качестве <параметра_цикла> используется переменная целого либо любого порядкового типа. Здесь <min_значение> и <max_значение> это константы (или выражения), определяющие соответственно начальное и конечное значения параметра цикла. Их типы должны быть совместимыми с типом параметра цикла. Вторая форма позволяет уменьшать на единицу значение параметра цикла: FOR <параметр цикла> := <max значение> DOWNTO <min значение> DO <оператор>; Пример. Вычислить Y = 1 + 1/2 + 1/3 + ... + 1/N. Для вычисления в программе необходимо многократно произвести сложение по “формуле суммы” Y =Y+1/I при изменении параметра I от одного до N. Реализация 1: Y:=0; FOR I:=1 TO N DO Y=Y+1/I; Реализация 2: Y:=0; FOR I:=N DOWNTO 1 DO Y=Y+1/I; Значение параметра цикла в теле цикла может не использоваться, а лишь выполнять функцию счетчика. Например, пусть необходимо вычислить Y = Xn. Тогда фрагмент тела программы запишется в следующем виде: Y:=1; FOR I :=1 TO N DO Y=Y*X; Два других оператора цикла (с пpедусловием и постусловием) проверяют условия повторения или окончания цикла, но сами не изменяют значения параметра цикла. Они организуют выполнение цикла с неизвестным заранее числом повторений. 5.2. Примеры и задания для оператора цикла со счётчиком Пример 1. Вычислить сумму членов ряда: s = 1 +1/4 +1/9+ 1/16 + ... . Учитывая, что параметр знаменатель числового ряда – изменяется как квадрат натурального числа, определим алгоритм решения задачи в виде циклической структуры (pис. 7) и напишем соответствующую программу: PROGRAM summa; VAR s, r: REAL; i, N: INTEGER; BEGIN s:=0; WRITELN('введите N'); READ(N); FOR I :=1 TO N DO begin r := 1/sqr(i); s := s + r; end; WRITELN( ' Сумма= ' , s:6:2 ); END. Пример 2. Вычислить значения двух функций F1(x) = tg (x) и F2(x) = sin(x) в n точках, равномерно распределенных на интервале a ≤ x ≤ b, где a = -π/4, b = π. Для реализации данной задачи разработана схема алгоритма (pис. 8) и cледующая программа: Program Lab3; Const а = -pi/4; b = pi; Var F1, F2, x, dx: real; {dx – шаг изменения х} i, n: integer; {i – параметр цикла} Begin writeln ('введите число точек N'); read(n); dx: = abs(b-a)/(n-1); x:=a; writeln (' ___________________________'); writeln ('| I | X | F1 | F2 |'); writeln ('|---|------------|------------|------------|'); for I := 1 to n do {опеpатоp цикла} begin F2:= sin(x); F1:= F2/cos(x); {вычисление tg x} writeln('|', i:3,' |', x:8:3,'|', f1:8:4,' |', f2:8:4,' |'); x Рис. 8 := x + dx; end; writeln( ' | ________________________| );. End. Задания к самостоятельному выполнению Задание 1 (программа_3_1) Для заданных с клавиатуры значений переменных x и n вычислить: 1. X = 1 + 1/2 + 1/3 + ... + 1/10. 2. Z = 2 4 6 8 ... 20. 3. Y = -x + 4x - 9x + ... - 81 x. 4. Y = x + x/3 + x/5 + ... + x/17. 5. Y = n! = 1 2 3 ....n. 6. Y = 1 - 3 + 32 - 33 + . . . + 310. 7. Y= x2 / ( 2i-1). 8. Z = ( x+i) / i. 9. Y = x2/i. 10. Y = 1 + x/2 + x2/4 + x3/6 + ... + xi/2i + ... + x9 /18 . 11. Y = 1 + x2/1! + x4/2! + x6/3! + … + x20/10! = 1+x2i/i!. 12. Y = 1 - x + x3/3! - x5/5! + ... + (-1)n x2n-1/(2n-1)! + ... + x11/11!. 13. е = 1 + 1/1! + 1/2! + ... + 1/n! + ... (сравнить результат со значением функции EXP(1), определенной в Паскале). 14. π = 4(1 - 1/3 + 1/5 - 1/7 + … + (-1)n/(2n+1) + …) (результаты сравнить с определенным в языке Паскаль числом Pi). 15. Y = arctg x = x-x3/3 +x5/5- ... +(-1)n x2n+1/(2n+1)+ ... (|х|<1). 16. Z = LN(1+x) = x - x2/2 + x3/3 - ... + (-1)n-1 xn/n + ... (|x|<1). 17. S = x - x3/3! + x5/5! - ... +(-1)n x2n+1/(2n+1)! + ... . 18. Вычислить суммы положительных и отрицательных значений функции z = cos(nx+a) sin(nx-a), где n =1, 2, ... , 5, a и x вещественные числа. 19. Вычислить сумму четных и сумму нечетных чисел натурального ряда в диапазоне от 1 до N. 20. Найти сумму факториала . Задание 2 (программа_3_2) Вычислить значения двух функций в n точках, равномерно распределенных в диапазоне а ≤ x ≤ b. Результаты оформить в виде таблицы.
Оператор цикла с предусловием используется в случае, когда число повторений цикла заранее не известно. При этом цикл управляется условием, записанным в начале цикла, и поэтому действия в цикле при некотором условии могут ни разу не выполниться. Структура этого оператора имеет вид WHILE <условие> DO <оператор>; где <условие> – это любое логическое выражение для параметра цикла, истинность которого проверяется в начале каждой итерации (условие выполнения тела цикла), <оператором> может быть произвольный оператор языка, в том числе и составной. Правило выполнения оператора цикла с предусловием. Если <условие> истинно, то выполняется <оператор>, стоящий за ключевым словом DO, если <условие> ложно, то происходит выход из цикла и выполняется следующий оператор программы. После выполнения <оператора> вновь вычисляется и анализируется <условие>, и вновь, в случае его истинности, выполняется <оператор> в цикле. Эти действия повторяются до тех пор, пока <условие> не станет ложным. Поскольку параметр цикла используется для управления циклом, необходимо изменять этот параметр внутри составного оператора цикла. Пример. Вычислить Y = 1+1/2+1/3+...+1/N. Фpагмент пpогpаммы с применением оператора WHILE может быть составлен в следующем виде: Y:=0; I:=1; WHILE I<= N DO begin Y:=Y+1/I; I:=I+1 end; 5.4. Пример и задания для оператора цикла с предусловием Пример. Для трех значений а = 0.1, 0.2, 0.3 протабулировать функцию y = a.tg(x/4) при изменении аргумента x на интервале [0.5,0.9] с шагом, равным a. Для СА (рис. 9) решения данной задачи программа может быть следующей: Program a5; var a, x, y: real; а≤0,3;х=0 begin writeln('-------------------------'); writeln(' a | x | y |'); writeln('-------------------------'); a: = 0.1; while a<=0.31 do begin writeln(a:5:2); x :=0.5; while x<=0.91 do begin y :=a*sin(x/4) / cos(x/4); writeln(x:12:2,' | ', y:10:2); x :=x+a; end; writeln('-------------------------'); a:=a+0.1 end; end. Задания для самостоятельного выполнения (программа_4_1) Начертите структурную схему алгоритма, напишите и отладьте программу для табуляции следующих функций: 1. S = ae-xsin ax+ при -1 <= x <= 1 с шагом 0.2, a = 0.75, 1 <= y <= 5 с шагом 1.5. 2. Z = + 1,3 sin(x-a) при 2 <= x <= 5 с шагом 0.5, a = 1.9, -1 <= y <= 1 с шагом 0.5. 3. S = e2 t ycos(t-a) при 1<= t <= 2 с шагом 0.2, a = -2.1, 2 <= y <= 3 с шагом 0.3. 4. Z = bx(tx+2.1) при 1 <= x <= 2 с шагом 0.2, b = 3.5, 0 <= t <= 1 с шагом 0.2. Z = , если 0 <= x <= 2, a = 0.5; 0.75, 5. , если 2 < x <= 3.6, шаг dx = a/2. sin ax -, если 0.1 <= x <= 0.4, 6. Y= a cos2(px), если 0.4 < x <= 1.2, a = 1.0; 1.5, 2 - sin ax, если 1.2 < x <= 1.6, шаг dx = a/5. Z = 7. Z = ln(a+x2/) , если 0 <= x <= 2, a = 1.0; 1.3; 1.6, 2 e2x , если 2 < x <= 3.6, шаг dx = a/4. Z = a(ex+2a+e-(x-3a), если 0.1 <= x < 0.5, 8. sin x, если x = 0.5, a = 2; 2.1, a + a cos(x+3a), если 0.5 < x <= 1.5, шаг dx = a/10. 9. Z = = -a ex-3a, если 0 < x <= 3, a = 1; 1.5, -a(1+ln(x-3a)), если 3 < x <= 4, шаг dx = a/2. - (x+3a)2 - 2a, если -1 <= x <= 0, 10. Y = a cos(x+3a) - 3a, если 0 < x < 1, a = 0.7; 1, a ex, если x = 1, dx = (a+0.2)/2. 11. Z = a(x-a)3/2, если 1 <= x <= 2.5, a = 0.5; 1.0, a/2(ex/a+e-x/a), если 2.5 < x <= 4, шаг dx = a/2. , если 0.5 <= x < 1.5, 12. Y = a cos x, если x = 1.5, a = 0.1;0.2;0.3; (a x2 + 1)x, если 1.5 < x <= 3, шаг dx = 2a. 13. Z = Я=Z = (sin2x +a)2 ea sinX , если 0.1 <= x <= 0.5, a = 0.1;0.2;0.3, tg(x/4), если 0.5 < x <= 0.9, шаг dx = a. tg(a2 +sin px), если 0 <= x <= 1, 14.Y = a sin(p- cos px), если 1 < x <= 2, a = 0.5; 0.75; 1; lg x, если 2 < x < 3, шаг dx = a/4. 15. Z = ecos x -a sin2(px), если 0.5 <= x <= 1.5 a = 0.1;0.7;1.3, a x2 - cos px, если 1.5 < x <= 2 шаг dx= a/4. 1/x , если 0.1 <= x <= 0.4 16. Y = ln(x2+ ax) , если 0.4 < x <= 1.2 a = 1.0; 1.5, x2 , если 1.2 < x < 1.6 шаг dx = a/5. 17. Дана непустая последовательность различных натуральных чисел, за которой следует нуль (признак конца последовательности). Определить порядковый номер наименьшего из них и его значение. 18. Найти первый отрицательный член последовательности cos (ctg(n)), где n = 1, 2, 3, ..., x . Напечатать его номер и значение. Распечатать всю последовательность. 19. Вычислить наибольший общий делитель (k) натуральных чисел d и f. Оператор FOR не использовать. 20. Задан ряд неотрицательных вещественных чисел. Определить, сколько из них больше своих «соседей»: предыдущего и последующего чисел. Признаком окончания ряда чисел считать появление отрицательного числа. 5.5. Оператор цикла с постусловием Оператор цикла с постусловием производит проверку условия после выполнения операторов тела цикла. Поэтому тело цикла должно выполниться хотя бы один раз. Стpуктуpа оператора имеет следующий вид: REPEAT <оператор1>; ... <операторN> UNTIL <условие_выхода >; Правило выполнения оператора цикла. Выход из цикла происходит при истинности значения логического выражения <условие_выхода>, иначе операторы тела цикла повторяются. Изменение параметра цикла задается внутри тела цикла, а сам параметр цикла используется в <условии_выхода>. Здесь ключевые слова REPEAT и UNTIL выполняют также роль операторных скобок, поэтому точку с запятой перед словом UNTIL не ставят. Пример фрагмента программной реализации вычисления значения суммы Y = 1 + 1/2 + 1/3 + ... + 1/N с помощью оператора цикла с постусловием: BEGIN Y := 0; I :=1; REPEAT Y:=Y+1/I; I:=I+1 UNTIL I>N; END. 5.6. Процедуры прерываний циклов В циклах FOR, REPEAT и WHILE можно использовать процедуры прерываний BREAK и CONTINUE. Процедура BREAK осуществляет немедленный выход из цикла, не дожидаясь выполнения условия о выходе из него. Процедура CONTINUE позволяет начать новую итерацию цикла, даже если предыдущая еще не закончена. Пример. Найти первое отрицательное число во входном потоке из вещественных чисел (не более 100). Program contine; Var i: Integer; a: Real; Begin For i:=1 to 100 do Begin read (a); If a >= 0 then сontinue; {пpи выполнении условия изменяется паpаметp цикла и цикл повторяется сначала} WriteLn ( ' Первое отрицательное число = ' , a); Break {выход из цикла} end end. 5.7. Примеры и задания для циклов с постусловием Пример 1.Вычислить 15 значений для двух функций: y1(x) = tg(x) и y2(x) = ctg(x) на интервале a ≤ x ≤ b, при a = 0.6*Pi, b = 0.7*Pi. Для вычислений функций разработана СА (рис. 10) и следующая программа: Program func; |