Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции+Pascal.doc
Скачиваний:
31
Добавлен:
02.12.2018
Размер:
647.17 Кб
Скачать

Примеры решения задач

1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}

USES Crt;

VAR

A, N, B, K : INTEGER;

BEGIN

ClrScr;

Write(‘ Введите два значения ‘); ReadLn(A,N);

K := 0; B := 1;

While K <> N DO Begin

K := K + 1; B := B * A;

End;

Write(‘ A в степени N = ’,B);

END.

2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.

USES Crt;

VAR

A, B, C, K : INTEGER;

BEGIN

Write(‘ Введите два значения ‘); ReadLn(A,B);

K := 0; C := 0;

While K <> B DO Begin

K := K + 1; C := C + A;

End;

{C = A * K и K = B, следовательно, C = A * B}

Write(‘ A*B= ‘,C);

END.

3. Вычислить значение переменной Y=2K+N при всех значениях переменных N=1,2,3 и K=2,4,6,8. обратите внимание на то, что если перебирать N и K получим 12 значений переменной Y.

Var N,K,Y: Integer;

Begin

For N:=1 To 3 Do Begin

K:=2;

While K<=8 Do Begin

Y:=2*K+N;

WriteLn(‘При N= ’,N:4,’ и K= ’,K:4,’ Y= ’Y:4);

K:=K+2;

End;

End;

End.

4. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.

Для этой задачи представлено два решения.

USES Crt;

VAR

DES, OST, I, DW:INTEGER;

BEGIN

ClrScr;

Write('Введите десятичное число '); ReadLn(DES);

I:=1;

While (DES>=2) DO Begin

OST:=DES mod 2;

DES:=DES div 2;

DW:=DW+OST*I;

I:=I*10;

End;

DW:=DW+DES*I;

Write('Двоичная запись числа ',DW);

END.

Примеры для самостоятельного решения:

  1. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.

  2. Известна сумма номеров страниц, определить номер страницы.

  3. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.

Вложенные циклы

Для решения задачи достаточно часто требуется использовать две и более циклические конструкции, одна из которых расположена внутри другой (других). Такие конструкции называются вложенными циклами. Какие именно циклы при этом используются, роли не играет, они могут быть организованы посредством любых рассмотренных ранее операторов (For, While, Repeat … Until).

Примеры решения задач

1. Даны натуральные числа n и k. Составить программу вычисления выражения

1k + 2k + … + nk

Для вычисления указанной суммы целесообразно использовать оператор For с управляющей переменной I, изменяющейся от 1 до n. В теле цикла вычисляется очередное значение y=Ik и накапливается искомая сумма s=s+y.

Var n, k, y, I, s, 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;

s: = s + y

End;

WriteLn (‘Сумма: ‘ , s)

End.

2. Сложим все цифры какого-либо числа. Получим новое число, равное сумме всех цифр исходного числа. Продолжим этот процесс до тех пор, пока не получим однозначное число (цифру). Оно называется цифровым корнем исходного числа. Например, цифровой корень числа 34697 равен 2(3+4+6+9+7=29; 2+9=11; 1+1=2). Составьте программу нахождения цифрового корня натурального числа.

Var n, k, s: LongInt;

Begin

WriteLn (‘Введите число‘); ReadLn (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. Старинная задача. Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова – 5 рублей, теленок – полтинник (0,5 рубля), при условии, что на 100 рублей надо купить 100 голов скота.

Решение: обозначим через b – количество быков, k – количество коров, t – количество телят. После этого можно записать два уравнения:

10b + 5 k + 0,5t = 100 и b + k + t = 100

Преобразуем их:

20b + 10k + t = 200 и b + k + t = 100

На 100 рублей можно купить:

  • не более 10 быков, т.е. 0 ≤ b ≤ 10,

  • не более 20 коров, т.е. 0 ≤ k ≤ 20,

  • не более 200 телят, т.е. 0 ≤ t ≤ 200.

Таким образом, получаем:

Var b, k, t: Integer;

Begin

For b: = 0 To 10 Do

For k: = 0 To 20 Do

For t: = 0 To 200 Do

If (20*b+10*k+t=200) and (b+k+t=100) Then

WriteLn ( ‘быков ‘ ,b, ‘ коров ‘ ,k, ‘ телят ‘ ,t)

End.

Сколько раз будет проверяться условие в данной программе (сколько раз будет выполняться оператор If)? Переменная b принимает 11 различных значений (от 0 до 10), для каждого значения переменной b переменная k изменяется от 0 до 20, а для каждого значения переменной k переменная t изменяется от 0 до 200.

Таким образом, условие будет проверяться 11 · 21 · 201 = 46431 раз. Но если известно количество быков и коров, то количество телят можно вычислить по формуле

t = 100 – (b + k)

и цикл по переменной t можно исключить.

Program My 9_3;

Var b, k, t: Integer;

Begin

For b: = 0 To 10 Do

For k: = 0 To 20 Do Begin

t: = 100 – (b + k) ;

If (20*b+10*k+t=200) Then WriteLn ( ‘быков ‘ ,b, ‘ коров ‘ ,k, ‘ телят ‘ ,t)

End

End.

В этой программе условие повторяется 11 · 21 = 231 раз. Попробуйте еще уменьшить количество проверок.

4. Написать программу, которая находит все четырехзначные числа abcd (a, b, c, d – цифры числа, причем все они различны), для которых выполняется условие:

ab – cd = a + b + c + d

Другими словами, разность чисел, составленных из старших цифр числа и из младших, должна быть равна сумме цифр числа.

Эту задачу можно решать разными способами. Например, можно перебирать все четырехзначные числа и проверять выполнение условия. Попробуем сократить перебор: из равенства

10 · a + b – (10 · c + d) = a + b + c + d

получаем

9 · (a – c ) = 2 · (c + d)

или (a – c) / (c + d) = 2 / 9,

a = c + 2, d = 9 – c и 0 ≤ c ≤ 7.

Var a, b, c, d: Integer;

Begin

For c: = 0 To 7 Do Begin

a: = c + 2; d: = 9 - c;

For b: = 0 To 9 Do

If (b<>c) and (b<>a) and (b<>d) Then WriteLn (a, b, c, d)

End

End.

5. Дано натуральное число, кратное 3. Найдем сумму кубов цифр данного числа. Получим новое число. Применим к нему такое же преобразование и т.д. Оказывается, что любая последовательность чисел сходится к числу 153.

Program My 9_5;

Var n, m, t, s, q: LongInt;

Begin

WriteLn (‘Введите число, оно умножается на 3, далее для полученного

числа строится последовательность ‘);

ReadLn (n);

m: = 3 * m; Write (m, ‘ ‘ );

Repeat

s : = 0; t : = m;

While m > 0 Do Begin

q: = m mod 10;

s: = s + q * q * q;

m: = m div 10

End;

m: = s;

Write (m, ‘ ‘ )

Until m = t;

ReadLn

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]