8 класс
Урок 7. Практическая работа: «Решение задач с использованием оператора While».
Цель: проверка уровня усвоения материала предыдущих уроков, уровня сформированности требуемых умений и навыков, развитие логического и алгоритмического мышления.
Тип урока: проверка и оценка знаний учащихся.
Учащиеся должны знать: оператор цикла с предусловием.
Учащиеся должны уметь: составлять алгоритмы и программы.
ПО: Pascal ABC.
Методический материал:
Для активизации логического мышления предложить учащимся решить логическую задачу: Расставить математические знаки (скобочки и знаки) для истинности выражения: 999999 = 100. Ответ: (999-99)/9=100, (99-9)/9+(99-9)=100.
Повторение:
Назовите оператор цикла с параметром?
Назовите оператор цикла с предусловием?
Чтобы решить все нижеприведенные задачи, вам надо знать материал трех уроков: [link] возвращает правду, если нечетно
while anva <> 1 do // пока неравно 1, выполняем цикл подсчета факториала
begin
anva := anva - 2;
factorial := factorial * anva;
end
else while anva <> 2 do // пока неравно 2, выполняем цикл
begin
anva := anva - 2;
factorial := factorial * anva;
end;
writeln('Двойной факториал числа: ',factorial);
end.
While7°. Дано целое число N (> 0). Найти наименьшее целое положительное число K, квадрат которого превосходит N: K2 > N. Функцию извлечения квадратного корня не использовать.
Program while_7;
var
n,k: integer;
begin
write('Введите число: ');
readln(n);
k := 1;
while sqr(k) <= n do
inc(k); // увеличиваем k на один, пока квадрат к, не превзойдет n.
writeln(k);
end.
While8. Дано целое число N (> 0). Найти наибольшее целое число K, квадрат которого не превосходит N: K2 ≤ N. Функцию извлечения квадратного корня не использовать.
Program while_8;
var
n, k: integer;
begin
write('Введите число: ');
readln(n);
while sqr(k) <= n do
inc(k); //используем цикл для нахождения наименьшего целого положительного числа K, квадрат которого превосходит N
dec(k); //из найденного наименьшего числа вычитаем 1. полученное число наибольшое число, которое не превосходит квадрат числа.
writeln(k);
end.
While9. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3K > N.
Аналагично while 7.
Program while_9;
var
n, k: integer;
begin
write('Введите число: ');
readln(n);
k := 1;
while 3 * k <= n do
inc(k);
writeln(k);
end.
While10. Дано целое число N (> 1). Найти наибольшее целое число K, при котором выполняется неравенство 3K < N.
Program while_10;
var
n, k: integer;
begin
write('Введите число: ');
readln(n);
k := 1;
while 3 * k < n do
inc(k); //действуем по схеме, описанной ранее в задаче while_8
dec(k);
writeln(k);
end.
While11°. Дано целое число N (> 1). Вывести наименьшее из целых чисел K, для которых сумма 1 + 2 + … + K будет больше или равна N, и саму эту сумму.
Действуем аналогично предыдущим задачам.
Program while_11;
var
n, k, summ: integer;
begin
write('Введите число: ');
readln(n);
k := 1;
summ := 1;
while summ < n do
begin
inc(k); // увеличиваем к
summ := summ + k; // прибавляем его к сумме
end;
writeln('Число: ', k);
writeln('Сумма: ', summ);
end.
While12°. Дано целое число N (> 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 2 + … + K будет меньше или равна N, и саму эту сумму.
Program while_12;
var
n, k, summ: integer;
begin
write('Введите число: ');
readln(n);
k := 1;
summ := 1;
while summ <= n do // после окончания цикла значение summ > n.
begin
inc(k);
summ := summ + k;
end;
summ := summ - k; // Возвращаем предыдущие значение
dec(k); // Возвращаем предыдущие значения
writeln('Число: ', k);
writeln('Сумма: ', summ);
end.
While13. Дано число A (> 1). Вывести наименьшее из целых чисел K, для которых сумма 1 + 1/2 + … + 1/K будет больше A, и саму эту сумму.
Такая же как while11.
Program while_13;
var
summ: real;
A, k: integer;
begin
write('Введите число: ');
readln(A);
k := 1;
summ := 1;
while summ <= A do
begin
inc(k);
summ := summ + 1 / k;
end;
writeln('Число: ', (1 / k):2:10);
writeln('Сумма: ', summ:2:10);
end.
While14. Дано число A (> 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 1/2 + … + 1/K будет меньше A, и саму эту сумму.
Такая же как while12.
program while_14;
var
summ: real;
A, k, min_k: integer;
begin
write('Введите число: ');
readln(A);
k := 1;
summ := 1;
while summ <= A do
begin
min_k := k;
inc(k);
summ := summ + 1 / k;
end;
summ := summ - 1 / k;
writeln('Число: ', (1 / min_k):2:10);
writeln('Сумма: ', summ:2:10);
end.
Домашнее задание: Повторение пройденного материала. Параграф 3 полностью.