Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к Практическим.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
9.48 Mб
Скачать

Обеспеченность занятия и средства обеспечения такая же как в практической работе №5.

Краткие теоретические и учебно-методические материалы по теме практической работы

Оператор while предназначен для реализации циклов с предусловием.

Форма записи:

while <условие> do <оператор>;

В качестве оператора может быть любой простой или составной оператор Begin ... End. В этом случае цикл с предусловием будет иметь вид:

While <условие> Do

Begin

<операторы>

End;

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

Оператор repeat реализует цикл с постусловием. Данный цикл всегда будет выполнен хотя бы один раз.

Форма записи:

repeat

<оператор1>;

<оператор2>;

until <условие>;

Последовательность операторов может состоять из одного или нескольких любых операторов.

В цикле while подразумевается такой алгоритм: пока условие истинно, выполнять операторы тела цикла.

В цикле repeat действует другой алгоритм: выполнять тело цикла, пока не станет истинным условие, т.е. пока условие ложно, выполняется цикл.

Вопросы для закрепления теоретического материала к практическому занятию:

  1. Что называют циклом?

  2. Какова функция предусловного оператора цикла?

  3. В программах какого типа используется предусловный оператор цикла?

  4. Каким образом можно создать бесконечную программу?

  5. Какова функция оператора цикла с постусловием?

  6. В программах какого типа используется оператор цикла с постусловием?

  7. Почему перед словом UNTIL вставка точки с запятой не обязательна?

  8. В чем отличие оператора while от оператора repeat?

  9. Напишите пример оператора цикла, который не выполняется ни разу.

  10. Какой тип имеет выражение, стоящее за служебным словом UNTIL?

Задания и инструкция по выполнению практической работы

  1. Решите задачу: Определить и вывести на экран цифры целого числа n.

Найдем цифры числа 4538. Для этого надо найти остаток от деления 4538 на 10 с помощью операции нахождения остатка от деления целых чисел (mod):

4538 mod 10 = 8, получим последнюю цифру числа (она же является первой справа).

4

5

3

8

Делим на 10

div

mod

Выдаем сообщение: «1 - я цифра справа равна 8».

После этого выполним целочисленное деление заданного числа 4538 на 10, получим

453 (остаток отбрасывается): 4538 div 10 = 453.

4

5

3

8

Делим на 10

div

mod

Далее процесс повторяем 2 - й раз:

453 mod 10 = 3

4

5

3

Делим на 10

div

mod

2 - я цифра справа равна 3,

453 div 10 = 45,

4

5

3

Делим на 10

div

mod

3 - й раз:

45 mod 10 = 5,

3 - я цифра справа равна 5,

45 div 10 = 4.

4 - й раз:

4 mod 10 = 4,

4 - я цифра справа равна 4,

4 div 10 = 0.

Наберите код программы в PascalABC и протестируйте на разных числах.

  1. Решить задачу: Дано натуральное число n. Подсчитать количество цифр данного числа.

Количество цифр в числе n неизвестно, поэтому необходимо использовать оператор While. Использование For потребует или введения дополнительных переменных, или искусственного выхода из цикла, а мы договорились, что это плохо — каждый фрагмент нашей логики должен иметь одну точку входа и одну точку выхода. Подсчет количества цифр начнем с последней цифры числа. Увеличим счетчик цифр на единицу (k). Число (m) уменьшим в 10 раз, убирая тем самым из него последнюю цифру (подсчитанную). Далее с получившимся числом проделаем ту же последовательность действий и т. д., пока число не станет равным нулю. Для этого и всех остальных задач, требуется выполнять ручную «трассировку». Пусть введено число 65387, присвоим это значение переменной с именем m, значение счетчика числа цифр (k) равно 0. Выполним действия, описан­ные выше, их результат приведен в таблице. Итак, окончатель­ное значение переменной k равно 5, в числе и цифр.

k

M

0

65387

1

6538

2

653

3

65

4

6

5

0

После это­го работаем с программой P7_1 по традиционной схеме: набор, компиляция, сохранение, запуск и проверка работы на конк­ретных примерах.

  1. Модифицируя программу P7_1, решить следующие задачи:

  • найти сумму цифр числа;

  • найти первую цифру числа, например, для числа 7265 это цифра 7;

  • поменять порядок цифр числа на обратный. Например, было 12345, стало 54321;

  • найти количество четных цифр числа;

  • найти самую большую цифру числа;

  • n найти сумму цифр числа, больших 5;

  • ответить на вопрос, сколько раз данная цифра встречается в числе?

  1. Составить программу перестановки первой и последней цифр введенного натурального числа.

Пусть пользователем введено число 4538. После перестановки первой и последней цифр число станет таким: 8534.

Определить последнюю цифру числа нетрудно. Это можно сделать уже известным нам способом: 4538 mod 10.

Чтобы найти и отделить первую цифру числа, надо использовать прием, который применялся в предыдущих программах для вывода цифр числа и для подсчета суммы цифр, т. е. отделять по одной цифре справа. Но, если в предыдущих программах такой процесс продолжался до тех пор пока n <> 0 (n не равнялось нулю), а когда n становилось равным нулю, то цикл заканчивался т. е. все цифры, включая первую, отделялись, то теперь надо этот процесс остановить на одну цифру раньше и тогда последним значением переменной n будет первая цифра числа. В нашем примере она равна 4.

Итак, первая и последняя цифры найдены. Как переставить их в числе.

Для веденного нами числа это можно сделать так. Вычесть из него первую цифру, умноженную на 1000 и вычесть последнюю цифру:

4538 -4 * 1000 - 8 = 530.

К полученному результату прибавить последнюю цифру - 8, умноженную на 1000 и прибавить первую цифру: 530 +8 * 1000 + 4 = 8534.

Две последние операции можно записать в одной строке:

4538 -4 * 1000 - 8 +8 * 1000 + 4 = 8534.

Возникает одна трудность. Как определить разряд, в котором находится первая цифра числа (первая слева) и на сколько надо умножить ее при вычитании? Тысячи ли это, десятки тысяч или другой разряд?

Для того, чтобы это выяснять заведем переменную, первоначальное значение которой 1, а затем, каждый раз при отделении цифры она умножается на 10.

Посмотрим весь процесс на примере того же числа 4538.

Первоначальные значения: n = 4538, i = 1.

Цикл продолжается пока n ≥ 10, 4538 ≥ 10 - истина, значит операторы цикла выполняются первый раз: i := i *10 = 1*10 = 10; - переменная i получает первое значение,

n := 4538 div 10 = 453.

Проверка условия: 453 ≥ 10 - условие выполняется, значит цикл выполняется второй раз: i := i *10 = 10*10 = 100; n := 453 div 10 = 45.

Проверка условия: 45 ≥ 10 - истина, значит цикл выполняется третий раз: i := i*10 = 100*10 = 1000, n := 45 div = 4.

Проверка условия: 4 ≥ 10 - ложь, значит операторы цикла не выполняются. Цикл заканчивается.

Конечные значения переменных: n = 4 - первая цифра числа, i = 1000.

Теперь остается выполнить сам процесс перестановки цифр и выдать результат на экран. После это­го работаем с программой P7_2 по традиционной схеме: набор, компиляция, сохранение, запуск и проверка работы на конк­ретных примерах.

  1. Составить программу вывода всех натуральных чисел, меньших n, квадрат суммы цифр которых равен заданному числу m.

Напишите код программы по следующему алгоритму:

  • Переменные:

n, m, k, a, p, s. Тип целый.

n - для границы значений натуральных чисел, m - для числа, с которым сравнивается

квадрат суммы цифр (точный квадрат), k - для натуральных чисел от 1 до n, a - для запоминания натурального числа, перед тем, как будет определяться сумма его цифр, p -для цифр числа, s - для суммы цифр.

  • Раздел операторов.

1 шаг. Ввод значений n и m.

2 шаг. Установить первоначальное значение для k равное 1 (эта переменная «перебирает» все натуральные числа от 1 до n).

3 шаг. Цикл, пока k <= n:

3.1 шаг. Установить первоначальные значения для суммы s (s:=0);

3.2 шаг. Запомнить число в переменную a (a := k);

3.3 шаг. Цикл для подсчета суммы цифр, пока a <> 0:

3.3.1 шаг. Выделять по одной цифре числа, известным способом.

3.3.2 шаг. Прибавлять по одной цифре к сумме.

3.3.3 шаг. Уменьшать число на последнюю цифру и на порядок.

3.4 шаг. Проверка выполнения условия. Если квадрат суммы цифр равен заданному числу, тогда вывести это натуральное число на экран.

3.5 шаг. Перейти к проверке следующего числа k:=k+1.

  1. Приписать по 1 в начало и в конец записи числа n. Например, было n=3456, стало n=134561.

  1. Решите задачу 1 с использованием оператора Repeat.

Алгоритм задачи приведен в пункте 1. Код программы P7_0 приведен с использованием оператора While. Изменить программу следуя инструкции.

Оператор Repeat начинается со служебного слова Repeat. Этот оператор ограничивает тело цикла двумя служебными слова repeat и until, поэтому операторные скобки не нужны.

Замените выделенное на слово Repeat.

Условие выхода из цикла проверяется в конце оператора.

Оператор с постусловием работает пока условие ложно, поэтому условие, которое применялось в операторе While, нужно указать на противоположное.

Замените выделенное на строку until n=0.

  1. С помощью repeat напишите программу, которая требует у вас пароль, например 111, и если пароль правильный, то заполняет все строки экрана сообщением "Молодец!!!". Если после пятой попытки пароль все равно неверен, выйти из программы.

  2. Решите задачу по варианту из электронного задачника PascalABC раздел While. Данную задачу решите в двух вариантах, с использование оператора While и Repeat. Номер варианта, это номер Вашего ПК.