
- •Решение задач о нахождении суммы ряда
- •Var s:Real; {значение суммы}
- •Использование формулы общего члена ряда
- •Var a,s:Real; I:Integer;
- •Использование рекуррентного соотношения
- •Var I,n:integer;
- •X,a,s:real;
- •Одновременное использование формулы общего члена и рекуррентного соотношения
- •Var I:integer;
- •X,s,eps,a,d,e:Real;
- •Вложенные циклы
- •Var n,k,y,s,I,j:integer;
- •Var n,k,s:LongInt;
- •Var a,a1:Integer; b:Boolean; answer:Char;
- •Var a,b,c,d:Integer;
Var n,k,y,s,I,j:integer;
Begin
Writeln(‘Введите исходные данные n и k’);
ReadLn(n,k);
S:=0;
For i:=1 To n Do
Begin
y:=1;
For j:=1 To k Do y:=y*i; {вычисление степени k числа i}
S:=S+y
End;
Writeln(‘Ответ ‘,S)
End.
Пример 3.5. Дано натуральное число N. Необходимо выполнить над этим числом следующие действия. Сложить все цифры числа, получив новое число. Сложить цифры вновь полученного числа, получив очередное число для обработки. Продолжать процесс до тех пор, пока не будет получено число, состоящее из одной цифры. Написать программу для нахождения такого однозначного числа. В конце вывести исходное число и однозначное число, полученное в результате преобразований.
Var n,k,s:LongInt;
Begin
Writeln(n);
s:=n;
While s>9 Do
Begin
k:=s; s:=0;
Repeat
s:=s+k Mod 10;
k:=k Div 10
Until k=0
End;
Writeln(‘Из числа ‘,n,’ получилось ’,s)
End.
Пример 3.6. Дан фрагмент программы. Определите значение целочисленной переменной s после его выполнения.
s:=128;
For i:=1 to 4 do
For j:=2 to 3 do
s:=s–(i+j);
Мы имеем два вложенных цикла For. Присутствие операторных скобок begin … end здесь не обязательно, т.к. одни оператор подсоединяется к оператору цикла в любом случае, а вложенный цикл For j:=2 to 3 do s:=s–(i+j) так же рассматривается как один оператор. Для определения значений переменных в ходе выполнения программы составим трассировочную таблицу (см. табл. 8):
Таблица 8.
i |
j |
s |
– |
– |
128 |
1 |
2 |
125 |
1 |
3 |
121 |
2 |
2 |
117 |
2 |
3 |
112 |
3 |
2 |
107 |
3 |
3 |
101 |
4 |
2 |
95 |
4 |
3 |
88 |
Ответ: в результате выполнения данного фрагмента s будет равно 88.
Пример 3.7. Вводится последовательность целых ненулевых чисел. Выяснить, есть ли в ней хотя бы одна пара рядом стоящих отрицательных чисел. Количество чисел, вводимых пользователем, не определено, но не меньше двух. После ввода очередного числа программа должна спрашивать, желает ли пользователь продолжать ввод. Ответ пользователя на такой вопрос должен быть только Y (“Yes”) или N (“No”).
Program neg;
Var a,a1:Integer; b:Boolean; answer:Char;
Begin
Write(‘Введите число ’);
ReadLn(a);
b:=false; {считаем, что таких чисел нет}
Repeat
Write(‘Введите число’);
ReadLn(a1);
b:=(a<0) and (a1<0) or b;
a:=a1; {сохраняем предыдущий элемент последовательности}
repeat
write(’Продолжать ввод? (Y/N) ’);
readLn(answer);
until (answer=’Y’)or(answer=’y’)or(answer=’N’)or(answer=’n’);
until (answer=’N’)or(answer=’n’);
If b
Then Writeln(‘Имеются два рядом стоящих отрицательных числа’)
Else Writeln(‘Рядом стоящих отрицательных чисел нет’)
End.
Для того чтобы исключить неверный ввод пользователя на вопрос о продолжении ввода использован вложенный цикл repeat.
Пример 3.8.
Написать
программу, которая находит и выводит
на печать все четырёхзначные
числ, где a, b, c, d - различные цифры, для
которых выполняется:
–
= a + b + c + d. Использовать 4 вложенных цикла
for
– по одному для каждой цифры числа.
Program abcd;