Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Другие методич. материалы / Практическая работа: Оператор While

Практическая работа: Оператор While

  • Информатика

Поделитесь материалом с коллегами:

8 класс

Урок 7. Практическая работа: «Решение задач с использованием оператора While».


Цель: проверка уровня усвоения материала предыдущих уроков, уровня сформированности требуемых умений и навыков, развитие логического и алгоритмического мышления.

Тип урока: проверка и оценка знаний учащихся.

Учащиеся должны знать: оператор цикла с предусловием.

Учащиеся должны уметь: составлять алгоритмы и программы.


ПО: Pascal ABC.


Методический материал:

Для активизации логического мышления предложить учащимся решить логическую задачу: Расставить математические знаки (скобочки и знаки) для истинности выражения: 999999 = 100. Ответ: (999-99)/9=100, (99-9)/9+(99-9)=100.

Повторение:

  1. Назовите оператор цикла с параметром?

  2. Назовите оператор цикла с предусловием?

Чтобы решить все нижеприведенные задачи, вам надо знать материал трех уроков: div, mod, функциилогические выражения;циклы.


Учащимся дается задание на урок, решение задач.

 While1°. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.

Умножение — это некоторое количество сложений.

Program while_1;


var

A, B: integer;


begin

readln(A,B);

while (A - B) >= 0 do A := A - B; // пока А - В > 0, отнимаем В.

write(A);

end.

While2. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

Добавляем счетчик в предыдущую задачу.

Program while_2;


var

A, B, count: integer;


begin

readln(A, B);

while (A - B) >= 0 do

begin

A := A - B;

count := count + 1; // счетчик

end;

write(count);

end.

While3. Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.

program while_3;


var

N, K, count: integer;


begin

readln(N, K);

while (N - K >= 0) do

begin

N := N - K;

count := count + 1;

end;

writeln('Частное от деления нацело: ', count);

writeln('Остаток: ', N);

end.

While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести True, если не является — вывести False.

Число будет степенью числа,  если деля заданное число нацело на 3, получится N = 1.

Program while_4;

var

N: integer;


begin

readln(N);

while N mod 3 = 0 do N := N div 3; // пока остаток от деления на 3 равен нулю, делим на 3.

writeln(N = 1); // Выведет True или False

end.

While5. Дано целое число N (> 0), являющееся некоторой степенью числа 2:  N = 2K. Найти целое число K — показатель этой степени.

Используем метод из предыдущей задачи.

Program while_5;


var

n, k: integer;


begin

write('Введите целое число: ');

readln(n);

k := 1;

while n div 2 <> 1 do // в этой задачи, мы знаем, что N станет равным 1.

begin

n := n div 2;

inc (k)

end;

writeln('Показатель степени: ',k);

end.

While6. Дано целое число N (> 0). Найти двойной факториал N:  N!! = N·(N–2)·(N–4)·…  (последний сомножитель равен 2, если N — четное, и 1, если N — нечетное). Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и вывести его как вещественное число.

Program while_6;

var

n: integer;

anva, factorial: real;

begin

write('Введите целое число: ');

readln(n);

factorial := n;

anva := n;

if (n <> 1) and (n <> 2) then

if odd(n) then // проверяем четность и нечетность. odd возвращает правду, если нечетно

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.

  1. Program while_13;

  2.  

  3. var

  4. summ: real;

  5. A, k: integer;

  6.  

  7. begin

  8. write('Введите число: ');

  9. readln(A);

  10. k := 1;

  11. summ := 1;

  12. while summ <= A do

  13. begin

  14. inc(k);

  15. summ := summ + 1 / k;

  16. end;

  17. writeln('Число: ', (1 / k):2:10);

  18. writeln('Сумма: ', summ:2:10);

  19. end.

While14. Дано число A (> 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 1/2 + … + 1/K будет меньше A, и саму эту сумму.

Такая же как while12.

  1. program while_14;

  2.  

  3. var

  4. summ: real;

  5. A, k, min_k: integer;

  6.  

  7. begin

  8. write('Введите число: ');

  9. readln(A);

  10. k := 1;

  11. summ := 1;

  12. while summ <= A do

  13. begin

  14. min_k := k;

  15. inc(k);

  16. summ := summ + 1 / k;

  17. end;

  18. summ := summ - 1 / k;

  19. writeln('Число: ', (1 / min_k):2:10);

  20. writeln('Сумма: ', summ:2:10);

  21. end.



Домашнее задание: Повторение пройденного материала. Параграф 3 полностью.



Краткое описание документа:

Данный документ является пробным. Но тем не менее в нем есть план-конспект урока практической работы для 8 класса по теме "Оператор цикла с предусловием".

Документ содержит в себе набор задач разной сложности, которые могут быть рассчитаны на два варианта.
Алгоритм решения задач, с использованием оператора цикла с предусловием представлен для языка программирования Паскаль.

Видеоурок по ссылке:


Автор
Дата добавления 14.10.2016
Раздел Информатика
Подраздел Другие методич. материалы
Просмотров54
Номер материала ДБ-262016
Получить свидетельство о публикации
Похожие материалы

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