![](/user_photo/2706_HbeT2.jpg)
- •Аннотация
- •Содержание
- •Интегрированная среда программирования Turbo Pascal 7.0
- •Основные понятия языка Turbo Pascal 7.0
- •Алфавит языка
- •Структура программы
- •Раздел объявления меток
- •Раздел объявления констант
- •Строковые и символьные константы
- •Простые типы данных
- •Выражения Арифметические выражения
- •Математические функции
- •Условные выражения и операции отношения
- •Логические выражения и операции
- •Процедуры ввода – вывода информации Процедуры ввода информации Read, ReadLn
- •Процедуры записи Write, WriteLn
- •Форматы процедуры вывода Write
- •Простые операторы
- •Оператор присваивания
- •Примеры решения задач
- •Оператор безусловного перехода Goto
- •Структурированные операторы
- •Составной оператор
- •Условный оператор If
- •Примеры решения задач
- •Условный оператор Case
- •Примеры решения задач
- •Оператор цикла For
- •Особенности выполнения оператора For
- •Примеры решения задач
- •Оператор цикла Repeat…Until
- •Особенности выполнения оператора Repeat
- •Примеры решения задач
- •Оператор повтора While
- •Особенности выполнения оператора While
- •Примеры решения задач
- •Вложенные циклы
- •Массивы
- •Одномерные массивы Основные понятия
- •Описание массива
- •Заполнение массива
- •6.1.4 Примеры решения задач
- •1. Алгоритмы поиска и присвоения значений элементам массива
- •2. Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива
- •3. Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса
- •6.2 Двумерные массивы
- •6.2.1 Основные понятия
- •6.2.2 Описание массива
- •6.1.3 Заполнение и вывод элементов двумерного массива
- •6.1.4 Примеры решения задач
- •1. Алгоритмы действий над элементами двумерного массива
- •2 Алгоритмы формирования одномерного массива
- •3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива
- •7. Множества
- •7. 1 Операции над множествами
- •7.2 Примеры решения задач
- •8. Строки
- •8.1 Строковые выражения
- •8.2 Стандартные процедуры и функции для обработки строковых данных
- •Обнаруживает первое появление в строке St2 подстроки St1. Результат равен номеру той позиции, где находится первый символ подстроки St1.
- •8.3 Примеры решения задач
- •1.Задачи на подсчет символов.
- •2. Задачи на замену символов.
- •3. Задачи на удаление символов.
- •4. Задачи на вставку символов.
- •9. Процедуры и функции, определенные пользователем
- •9.1 Процедуры пользователя
- •1 Вариант
- •2 Вариант
- •9.2 Функции пользователя Формат описания функции:
- •9.3 Параметры
- •9.3.1 Параметры – значения
- •9.3.2 Параметры - переменные
- •10 Модуль crt. Процедуры и функции модуля crt
- •11 Модуль Graph
- •11.1 Классификация типов драйверов и видеорежимов
- •11.2 Инициализация графики
- •11.3 Переключение между текстовым и графическим режимами
- •11.4 Система координат
- •Отображение строк
- •11.5 Управление текущим указателем
- •11.6 Отображение точки на экране
- •11.7 Определение параметров пикселов
- •11.8 Отображение отрезков прямых линий
- •11.9 Вычерчивание линий различных стилей
- •11.10 Построение прямоугольников
- •11.10.1 Построение прямоугольника на плоскости
- •11.10.2 Построение закрашенного прямоугольника
- •11.11 Установка стиля заполнения
- •11.13 Построение заполненных областей изображения
- •11.13.1 Построение заполненного сектора эллипса
- •11.13.2 Построение заполненного эллипса
- •11.13.3 Построение заполненных сложных геометрических фигур
- •Список литературы
Примеры решения задач
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.
Примеры для самостоятельного решения:
-
К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.
-
Известна сумма номеров страниц, определить номер страницы.
-
Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.
Вложенные циклы
Для решения задачи достаточно часто требуется использовать две и более циклические конструкции, одна из которых расположена внутри другой (других). Такие конструкции называются вложенными циклами. Какие именно циклы при этом используются, роли не играет, они могут быть организованы посредством любых рассмотренных ранее операторов (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.