Скачать программы Все программы автораЛАБОРАТОРНАЯ РАБОТА 2.ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫЦель работы: закрепить практические навыки работы с системой TURBO Pascal, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, содержащих операторы цикла While, Repeat и For.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Операторы цикла служат для того, чтобы выполнять входящие в их состав операторы (так называемые операторы тела цикла ) несколько раз (в частном случае - один раз или ни разу). В языке Pascal имеется три вида операторов цикла: While, Repeat и For.
1. Оператор цикла While Его синтаксис: While A do ST; 1) A - булевское выражение; Значение выражения A вычисляется перед каждым выполнением оператора ST, поэтому цикл While называют еще циклом с предусловием . Если значение A есть TRUE, то оператор ST выполняется и управление передается на вычисление значения выражения A; если значение выражения A есть FALSE, то оператор ST не выполняется и происходит выход из цикла. Замечания: (1) если первоначальное значение выражения A - FALSE, то оператор ST не будет выполнен ни разу; (2) в операторе цикла While точка с запятой никогда не ставится после зарезервированного слова do; (3) чтобы избежать бесконечного повторения ( зацикливания ), необходимо хотя бы одну переменную, входящую в условие, изменять в теле оператора цикла. Более того, эти изменения должны быть такими, чтобы булевское выражение рано или поздно приняло значение FALSE. Если же булевское выражение первоначально истинно и ни при каких обстоятельствах не становится ложным, то выполнение оператора цикла никогда не завершится. Наконец, цикл While используется, как правило, в тех случаях, когда заранее неизвестно количество повторений цикла. В связи с этим следует помнить простое, но очень важное правило - "самая внутренняя" циклическая конструкция должна формулироваться с особой тщательностью с тем, чтобы по возможности минимизировать затраты на вычисления и повысить эффективность программы.
2. Оператор цикла Repeat Цикл Repeat ( цикл с постусловием ), как правило, используется в тех случаях, когда заранее неизвестно количество повторений операторов тела цикла. Синтаксис оператора цикла Repeat:
Repeat где: 1) ST - оператор (возможно составной); "Работает" оператор так: выполняются операторы ST, вычисляется значение выражения А; если его значение - FALSE, то вновь выполняются операторы ST, если значение выражения А - TRUE, то цикл заканчивается. Если же значение выражения А есть TRUE с самого начала, то операторы ST выполняются лишь один раз. Если выражение А никогда не принимает значение TRUE, то группа операторов ST выполняется бесконечное число раз, то происходит " зацикливание ". Следует отметить, что нижняя граница операторов циклической части четко обозначена словом until, поэтому нет необходимости заключать операторы циклической части в операторные скобки begin и end.
3.Оператор цикла For Оператор цикла For служит для организации цикла с параметром и используется в тех случаях, когда заранее известно, сколько раз должна повторяться циклическая часть программы. Синтаксис оператора For по возрастающим значениям параметра i: For to do ST; Переменные i,, должны быть одного и того же скалярного типа, но не типа Real, и значение должно быть больше, чем значение Переменная i принимает последовательные значения данного типа от до В частном случае, когда и - целые числа, а i - переменная типа Integer или Byte, то шаг всегда равен единице . Например, если Если же и символьного типа и имеют значения, например, 'A' и 'Z' соответственно, то переменная i принимает последовательные значения в порядке букв алфавита: 'А','В','С',...,'Z'. Отметим, что имеется возможность организовать цикл по убывающим значениям параметра i. Для этого используется зарезервированное слово downto . Синтаксис оператора For по убывающим значениям параметра i: For i:= downto do ST; В этом случае параметр i принимает последовательные убывающие значения данного типа от до Например, если For i:=20 downto 1 do A:=A+1,
ПРИМЕРЫ Пример 1. Вычислить сумму а) С использованием цикла While б) С использованием цикла For PROGRAM Primer_1a; PROGRAM Primer_1b; var S: Real; var i: Integer; N: Integer; s: Real; BEGIN BEGIN S:=0; N:=1; S:=0; While N<=50 do For i:=1 to 50 do S:=S+1/i; begin S:=S+1/N; N:=N+1 end; WriteLn ('Сумма равна: ',S) WriteLn ('Сумма равна: ',S) END. END.
в) С использованием оператора цикла Repeat PROGRAM Primer_1c; var N: Integer; S: Real; { Результат суммирования } BEGIN S:=0; N:=1; Repeat { Повторить ... } S:=S+1/N; N:=N+1 until N>50; { пока значение N не превзойдет 50 } WriteLn ('Результат суммирования... ',S) END. Пример 2 Программа, моделирующая микрокалькулятор. PROGRAM Primer_2 (Input,Output); var Operator: Char; { Символ арифметической операции } n : Real; Answer : Real; { Результат вычисления } BEGIN Answer:=0; { Вначале обнулим результат... } Operator:='+'; { Присвоить '-', '*' или '/' нельзя } WriteLn ('Вводите арифметическое выражение'); WriteLn ('(каждый символ - с новой строки)...'); Repeat ReadLn (n); Case Operator of '+': Answer:=Answer + n; '-': Answer:=Answer - n; '*': Answer:=Answer * n; '/': Answer:=Answer / n end; ReadLn (Operator) until Operator='='; WriteLn (Answer:5:4) END. Пример 3. Пусть A и B - положительные вещественные числа и . Найти такое натуральное m, что . PROGRAM Primer_3 (Input,Output); var A,B: Real; m : Integer; BEGIN Write ('Введите числа A и B... '); Read (A); Write (' '); ReadLn (B); m:=1; While m*B<=A do m:=m+1; WriteLn ('Результат... ',m:3,'*',B:3:2,' > ',A:6:2) END. Пример 4. Определение для используемого компилятора TURBO Pascal наименьшего положительного числа Eps такого, что 1+Eps>1.
PROGRAM Primer_4; const C1 = 1.0; C2 = 2.0; var Eps,Eps1: Real; BEGIN Eps:=C1; Eps1:=C2; While Eps1>1.0 do begin Eps:=Eps/2; Eps1:=Eps+1 end; Eps:=Eps*2; WriteLn ('Приближенное значение Eps равно: ',Eps) END. Пример 5. Разложение целого числа на простые множители. PROGRAM Primer_5; var x,m: Integer; BEGIN Write ('Введите целое число... '); ReadLn (x); WriteLn ('Разложение числа ',x,' на простые множители'); m:=2; While m<=x do If (x MOD m)=0 then begin Write (' * ',m); x:=x DIV m end else m:=m+1 END. Пример 6. Программа, позволяющая угадать целое число из отрезка [0,99]. PROGRAM Primer_6; var x,z : Integer; ugadal: Boolean; BEGIN WriteLn ('Угадай число'); WriteLn ('от 1 до 100'); z:=Random (100); ugadal:=FALSE; While NOT ugadal do begin Write ('число='); Read (x); If x=z then begin ugadal:=TRUE; WriteLn ('Правильно') end else If x<z then WriteLn ('Мало...') else If x>z then WriteLn ('Много...') end END. Пример 7. Вычисление целой части корня квадратного из положительного числа. Идея алгоритма заключается в том, что сумма К первых нечетных чисел равна, например, , и т.д.
PROGRAM Primer_7; var i,j: Integer; x : Real; { Результат } BEGIN Write ('Введите положительное число, из которого '); Write ('хотите извлечь корень: '); ReadLn (x); i:=-1; j:=0; While j<=x do begin i:=i+2; j:=j+i end; Write ('Результат: ',(i-1) DIV 2) END. Пример 8. Найти все простые числа на заданном отрезке (использовать цикл с параметром) PROGRAM Primer_8 (Input,Output); var M : Integer; { Нижняя граница отрезка } N : Integer; { Верхняя граница отрезка } i,j: Integer; { Параметры циклов } kl : Integer; BEGIN Write ('Введите нижнюю границу отрезка... '); ReadLn (M); Write ('Введите верхнюю границу отрезка... '); ReadLn (N); WriteLn ('Все простые числа из отрезка [',M,',',N,']'); For i:=M to N do begin kl:=0; For j:=2 to Round (Sqrt(i)) do If (i MOD j)=0 then kl:=kl+1; If kl=0 then Write (i,' ') end END. Пример 9. Подсчитайте, сколько палиндромических чисел лежат в промежутке от 100 до 1000 (число M называется палиндромическим, если оно равно своему обращенному). Выведите их на экран дисплея PROGRAM Primer_9 (Input,Output); var d : Integer; { Результат работы программы } x,y,z: Integer; { Параметры циклов } n : Integer; { Палиндром m : Integer; { Вспомогательная переменная } BEGIN d:=0; For x:=1 to 9 do For y:=0 to 9 do For z:=0 to 9 do begin n:=100*x+10*y+z; m:=100*z+10*y+x; If n=m then begin d:=d+1; Write (n,' ') end end; WriteLn; WriteLn ('Результат: ',d) END. ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ
1.Вычислить множество значений функции для х, изменяющихся от - 10 до 10 с шагом 2, при b=5. 2.Вычислить k первых членов арифметической прогрессии, заданных рекуррентной формулой , где - n-й член арифметической прогрессии. 3.Вычислить произведение m членов арифметической прогрессии, если известны значения первого члена и разность арифметической прогрессии h. 4.Сформировать последовательность, элементы которой вычисляются по формуле , n=1,2,...,20. 5.Вычислить значение n! для n=7. Ответ: 5040. 6.Вычислить , многократно применяя итерационную формулу: Начальное приближение выбрать самостоятельно. Прекратить вычисления, если разность двух последовательных итераций станет меньше, чем произведение последнего приближения на 7.Определить, существует ли такая четверка последовательных натуральных чисел, сумма квадратов которых равна сумме квадратов трех следующих натуральных чисел. 8.Написать программу вычисления значения выражения при заданном х: 9.Вычислить наибольший общий делитель натуральных чисел A и B. 10. Вычислить
11. Вычислить
12. Имеется целое число k>0. Вычислить x - k-й член последовательности {}, где , при n=1,2,3,... 13. Подсчитать k - количество цифр в десятичной записи целого неотрицательного числа N. 14. Логической переменной T присвоить значение TRUE или FALSE в зависимости от того, является натуральное число k степенью 3 или нет. 15. Вычислить по схеме Горнера: 16. Вычислить:
17. Вычислить:
18. Вычислить
19. Числа Фибоначчи определяется формулами при n=2,3,... Определить десятое число Фибоначчи;
20. Числа Фибоначчи определяется формулами при n=2,3,... Найти - первое число Фибоначчи, большее m (m>1).
21. Вычислить 22. Вычислить S - сумму квадратов всех целых чисел, попадающих в интервал , x>1. 23. Логической переменной P присвоить значение TRUE, если целое N (N>1) - простое число, и значение FALSE в противном случае. 24. Вычислить 25. Определить, является ли заданное число совершенным , т.е. равным сумме всех своих (положительных) делителей, кроме самого этого числа (например, число 6 совершенно: 6=1+2+3). 26. Дано целое n>2. Напечатать все простые числа из диапазона [2,n]. 27. Найти сумму цифр заданного натурального числа. 28. Определить число, получаемого выписыванием в обратном порядке цифр заданного натурального числа. 29. Определить, является ли заданное натуральное число палиндромом, т.е. таким, десятичная запись которого читается одинаково слева направо и справа налево. 30. Дано натуральное число n<10000. Верно ли, что все четыре цифры числа различны? 31. Дано натуральное k. Напечатать k-ю цифру последовательности 1234567891011121314..., в которой выписаны подряд все натуральные числа. 32. Дано натуральное k. Напечатать k-ю цифру последовательности 149162536..., в которой выписаны подряд квадраты всех натуральных чисел. 33. Дано натуральное k. Напечатать k-ю цифру последовательности 1123581321..., в которой выписаны подряд все числа Фибоначчи. 34. Не используя стандартные функции (за исключением Abs), вычислить с точностью Eps>0: Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше Eps, - все последующие слагаемые можно уже не учитывать. 35. В каких двузначных числах удвоенная сумма цифр равна их произведению? Ответ: 36,44,63. 36. Найти двузначное число, равное утроенному произведению его цифр. Ответ: 15,24. 37. Найти двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа. Ответ: 27. 38. Найти все трехзначные числа, представимые в виде сумм факториалов своих цифр. Ответ: 145. 39. Найти все двузначные числа, сумма квадратов цифр которых делится на 17. Ответ: 14,28,29,35,41,53,67,76,82,92. 40. Найти все трехзначные числа, которые можно представить разностью между квадратом числа, образованного первыми двумя цифрами и квадратом третьей цифры. Ответ: 100,147. 41. Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр. 42. Найти все трехзначные числа, сумма цифр которых равна данному целому числу. 43. Найти все делители числа 1234. 44. Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2,3,4,5,6,7,8,9. 45. Даны целое число а и натуральное число n. Вычислить 46. Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? Написать программу решения этой задачи. 47. Найти первую степень числа 3, превышающую данное целое число a. 48. Найти наибольшую степень числа 2, делящую данное целое число a. 49. Проверить, содержит ли квадрат данного натурального числа n цифру 3 в своей записи. 50. Привести дробь вида a/b (b 7- 00) к несократимому виду. 51. Найти среднее арифметическое последовательности целых чисел произвольной длины. 52. Найти наименьшее положительное число x, удовлетворяющее условию. |