Rambler's Top100

Скачать программы    Все программы автора

ЛАБОРАТОРНАЯ РАБОТА 2.

ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ

 Цель работы: закрепить практические навыки работы с системой TURBO Pascal, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, содержащих операторы цикла While, Repeat и For.

 

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

 

Операторы цикла служат для того, чтобы выполнять входящие в их состав операторы (так называемые  операторы тела цикла ) несколько раз (в частном случае - один раз или ни разу). В языке Pascal имеется три вида операторов цикла: While, Repeat и For.

 

1. Оператор цикла While

Его синтаксис: While A do ST;
где:

1) A - булевское выражение;
2) ST - оператор (возможно составной).

Значение выражения 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
ST
until A;

где:

1) ST - оператор (возможно составной);
2) А - булевское выражение.

"Работает" оператор так: выполняются операторы ST, вычисляется значение выражения А; если его значение - FALSE, то вновь выполняются операторы ST, если значение выражения А - TRUE, то цикл заканчивается. Если же значение выражения А есть TRUE с самого начала, то операторы ST выполняются лишь один раз.

Если выражение А никогда не принимает значение TRUE, то группа операторов ST выполняется бесконечное число раз, то происходит " зацикливание ".

Следует отметить, что нижняя граница операторов циклической части четко обозначена словом until, поэтому нет необходимости заключать операторы циклической части в операторные скобки begin и end.

 

3.Оператор цикла For

 Оператор цикла For  служит для организации  цикла с параметром  и используется в тех случаях, когда заранее известно, сколько раз должна повторяться циклическая часть программы. Синтаксис оператора For по  возрастающим значениям параметра  i:

For $i:=N_1$to $N_2$do ST;
где: 1) i - переменная ( параметр ) цикла;
2) $N_1$- начальное значение параметра цикла, а $N_2$- конечное;
3) ST - оператор (возможно составной).

Переменные i,$N_1$, $N_2$должны быть одного и того же скалярного типа, но не типа Real, и значение $N_2$должно быть больше, чем значение $N_1$Переменная i принимает последовательные значения данного типа от $N_1$до $N_2$В частном случае, когда $N_1$и $N_2$- целые числа, а i - переменная типа Integer или Byte, то шаг всегда равен  единице .

Например, если
For i:=1 to 20 do A:=A+1,
то для i=1,2,3,...,20 будет выполняться оператор А:=А+1.

Если же $N_1$и $N_2$символьного типа и имеют значения, например, 'A' и 'Z' соответственно, то переменная i принимает последовательные значения в порядке букв алфавита: 'А','В','С',...,'Z'.

Отметим, что имеется возможность организовать цикл по убывающим значениям параметра i. Для этого используется зарезервированное слово  downto .

Синтаксис оператора For по  убывающим значениям параметра  i:

For i:=$N_2$ downto $N_1$do ST;
где: 1) i - переменная ( параметр ) цикла;
2) $N_2$- начальное значение параметра цикла, а $N_1$- конечное;
3) ST - оператор (возможно составной).

В этом случае параметр i принимает последовательные убывающие значения данного типа от $N_2$до $N_1$Например, если

For i:=20 downto 1 do A:=A+1,
то для i=20,19,18,...,1 будет выполняться оператор А:=А+1.

 

 

ПРИМЕРЫ

Пример 1.

Вычислить сумму $S=1+\frac{1}{2}+\frac{1}{3}+\ldots +\frac{1}{50}.$

а) С использованием цикла 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 - положительные вещественные числа и $A\gt B$. Найти такое  натуральное  m, что  $m\cdot B \gt A$.

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.  Вычисление целой части корня квадратного из положительного числа. Идея алгоритма заключается в том, что сумма  К первых нечетных чисел равна,  например, $1+3=2^2$, $1+3+5=3^2$и т.д.

 

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.Вычислить множество значений функции $y=x^2+b$для х, изменяющихся от - 10 до 10 с шагом 2, при b=5.

2.Вычислить k первых членов арифметической прогрессии, заданных рекуррентной формулой $a_{n+1}=a_n+2$, где $a_n$- n-й член арифметической прогрессии.

3.Вычислить произведение m членов арифметической прогрессии, если известны значения первого члена $a_1$и разность арифметической прогрессии h.

4.Сформировать последовательность, элементы которой вычисляются по формуле $a_n=\frac{n}{n+1}$, n=1,2,...,20.

5.Вычислить значение n! для n=7. Ответ:  5040.

6.Вычислить $A^3$, многократно применяя итерационную формулу:\begin{displaymath}
x_{i+1}=x_i+\frac{1}{3}\cdot \left(
\frac{A}{x_i^2}-x_i\right)\end{displaymath} Начальное приближение выбрать самостоятельно. Прекратить вычисления, если разность двух последовательных итераций станет меньше, чем произведение последнего приближения на $10^{-7}$

7.Определить, существует ли такая четверка последовательных натуральных чисел, сумма квадратов которых равна сумме квадратов трех следующих натуральных чисел.

8.Написать программу вычисления значения выражения при заданном х:\begin{displaymath}
\sin x +\sin \sin x +\ldots +\underbrace{\sin \sin
\ldots \sin x}_{n}\end{displaymath}

9.Вычислить наибольший общий делитель натуральных чисел A и B.

10. Вычислить $P=(1-\frac{1}{2^2})(1-\frac{1}{3^2})\ldots(1-\frac{1}{n^2}), n\gt 2$

 

11. Вычислить $Y=\cos(1+\cos(2+\ldots +\cos(39+cos40)\ldots ))$

 

12. Имеется целое число k>0. Вычислить x - k-й член последовательности {$x_n$}, где $x_0=1$,$x_n=n\cdot x_{n-1}+\frac{1}{n}$ при n=1,2,3,...

13. Подсчитать k - количество цифр в десятичной записи целого неотрицательного числа N.

14. Логической переменной T присвоить значение TRUE или FALSE в зависимости от того, является натуральное число k степенью 3 или нет.

15. Вычислить по схеме Горнера:$Y=x^{10}+2x^9+3x^8+\ldots +10x+11.$

16. Вычислить: $Y=(2n-1)!!=1\cdot 3\cdot 5\cdots (2n-1), n\gt.$

 

17. Вычислить: $\sqrt{3+\sqrt{6+\cdots +\sqrt{96+\sqrt{99}}}}$

 

18. Вычислить $Y=1!+2!+3!+\ldots 0+n! (n\gt 1).$

 

19. Числа Фибоначчи $f_n$определяется формулами $f_0=f_1=1;f_n=f_{n-1}+f_{n-2}$при n=2,3,... Определить десятое число Фибоначчи;

 

20. Числа Фибоначчи $f_n$определяется формулами $f_0=f_1=1;f_n=f_{n-1}+f_{n-2}$при n=2,3,... Найти $f$- первое число Фибоначчи, большее m (m>1).

 

21. Вычислить $Y=\sin 1 +\sin {1.1} +\sin {1.2} + \ldots +\sin 2.$

22. Вычислить S - сумму квадратов всех целых чисел, попадающих в интервал $(\ln x, \exp x)$, x>1.

23. Логической переменной P присвоить значение TRUE, если целое N (N>1) - простое число, и значение FALSE в противном случае.

24. Вычислить $\prod_{i,j=1}^{20}{\frac{1}{i+j^2}}$

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: $y=e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+\cdots +\frac{x^n}{n!}+\ldots
$Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше 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. Вычислить $a\cdot (а+1)\cdots (a+n-1).$

46. Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? Написать программу решения этой задачи.

47. Найти первую степень числа 3, превышающую данное целое число a.

48. Найти наибольшую степень числа 2, делящую данное целое число a.

49. Проверить, содержит ли квадрат данного натурального числа n цифру 3 в своей записи.

50. Привести дробь вида a/b (b 7- 00) к несократимому виду.

51. Найти среднее арифметическое последовательности целых чисел произвольной длины.

52. Найти наименьшее положительное число x, удовлетворяющее условию$1+x\gt 1$.

Вверх

Белорусский рейтинг MyMinsk.com Сайты беларуси Регистр "ЗУБР" Каталог на TIGA.BY, а также  новости, работа, объявления, фото и многое другое Rambler's Top100 Белорусский каталог программ Faststart - рейтинг сайтов, каталог интернет ресурсов, счетчик посещаемос­ти Яндекс.Метрика
Hosted by uCoz