Пользователь вводит вещественное число x (модуль меньше 1) и точность вычислений eps (от 0 до 1). Вычислить сумму с заданной точностью.
В этой задаче уже не удастся использовать цикл for, т.к. мы не знаем, на каком именно шаге будет достигнута заданная точность. Поэтому здесь воспользуемся циклом repeat. Будем считать, что точность достигнута, если очередной элемент будет меньше по модулю, чем заданная точность eps.
Пример:
var
x: real; {число, которое вводит пользователь}
xx: real; {в этой переменной будем хранить x в нужной степени}
eps: real; {точность, которую вводит пользователь}
Sum: integer; {сюда будем считать сумму}
i: integer; {счетчик}
begin
writeln(‘Введите число x (<1):’);
readln(x);
writeln(‘Введите точность вычислений (<1):’);
readln(eps);
Sum:=0; {задаем стартовое значение – инициализируем}
xx:=1; {задаем стартовое значение – инициализируем}
repeat
xx:=xx*x; {т.к. степень у x отличается от предыдущего шага
всего на 1, то можно сделать и так}
Sum:=Sum+xx/(i+1); {добавляем новый элемент к сумме}
until abs(xx/(i+1))<eps; {повторяем цикл, пока не получим точность}
writeln(‘Sum=’, Sum); {печатаем на экране результат}
end.
Обратите внимание на переменную xx: чтобы на каждом шаге заново не возводить x в степень, мы просто запоминаем это значение с предыдущего шага и домножаем его еще раз на x (т.е., x5 = x4 * x).
Пользователь вводит 100 чисел. Найти максимальный элемент последовательности.
Первое, что может прийти в голову, – описать 100 переменных. Это неправильно.
Нам не нужно запоминать все 100 чисел. Достаточно помнить только наибольшее среди них. Последовательность действий будет примерно такой: считываем новое число, проверяем его на максимум и далее переходим к следующему числу. Следовательно, достаточно завести две переменные: в одной из них будем хранить текущее значение, в другой – максимальное. Для реализации воспользуемся циклом for.
Пример:
var
x: integer; {текущее число, которое вводит пользователь}
Max: integer; {максимальное число в последовательности}
i: integer; {счетчик для цикла}
begin
for i:=1 to 100 do
begin
writeln(‘Введите очередное число:’);
readln(x); {считываем очередное число последовательности}
if (i=1) or (x>Max) then Max:=x;
{если это первое число, или если оно больше, чем текущий
максимум, то это – максимальное число}
end;
writeln(‘Максимальное число – ’, Max); {печатаем результат}
end.
Как видно из кода, все 100 чисел хранятся поочередно в одной переменной x. Текущее число будет максимальным, если оно больше, чем текущий максимум или если оно вообще первое (единственное) в последовательности.
Основное отличие данной программы от приведенных ранее – здесь ввод данных организуется внутри цикла.