Сегодня не будет новых операторов,
сегодня мы будем учиться составлять алгоритмы,
используя те знания, которые уже имеем.
Урок 5
5.1. Обмен значениями.
Начнем с разбора 6-го задания предыдущего
урока. Первая мысль, приходящая в голову, это
написать программу, похожую на эту:
A := B;
B := A;
Но эта программа работать не будет (в
обеих переменных будет значение B).
Теперь поищем правильное решение. Обозначим
начальное значение A за A1, B за B1. Тогда
необходимо, чтобы по окончании работы программы A
равнялось B1, а B - A1.
0) A=A1; B=B1;
1) Занесем в переменную A результат суммирования A
и B (A := A + B):
A = A1 + B1; B = B1;
2) Занесем в переменную B разность A и B (B := A - B):
т.к. A = A1 + B1; то B=(А1+В1)-В
= A1;
3) Занесем в переменную A разность A и B (A := A - B):
A = B1; B = A1;
Код программы:
Program prim_4;
Var a,b:integer;
Begin
Write('введите два числа ');
Readln(A,B);
A:=A+B;
B:=A-B;
A:=A-B;
Writeln('A=',A);
Writeln('B=',B);
Readln;
End.
5.2.Эффективные
алгоритмы.
Вы уже знаете, что в Паскале отсутствует
возможность возведения в степень, не считая
квадрата. Поэтому для получения а^20 нужно а*а*а*а...*а
19 раз. Но если учесть, что результат умножения
можно сохранить в промежуточной переменной,
ответ можно найти за 5 действий.
Program prim_4;
Var a,b:real;
Begin
Write('введите число');
Readln(A);
В:=A*А; {получаем А во 2}
B:=В*В; {получаем А в 4}
В:=A*B; {получаем А в 5}
B:=В*В; {получаем А в 10}
B:=В*В; {получаем А в 20}
Writeln('A в 20 степени=',В:0:2);
{Вместо указания ширины поля для
вывода числа лучше ставить 0, тогда компилятор
отведет столько позиций под целую
часть, сколько получилось в
ответе, а для дробной части я посчитала возможным
оставить 2 позиции}
Readln
End.
В фигурные скобки {...} в программе можно
заключать комментарий, компилятор пропускает
текст, заключенный в такие скобки, а комментарий
позволяет вспомнить о чем программа если вы
позднее возвращаетесь к ее тексту.
Задание для
тренировки.
1.Дано вещественное число А. Не
пользуясь никакими арифметическими операциями,
кроме умножения, получить:
1) А^4 за две операции;
2) А^6 за три операции;
3) А^7 за четыре операции;
4) А^8 за три операции;
5) А^9 за четыре операции;
6) А^13 за пять операции;
7) А^15 за пять операции;
8) А^19 за пять операции;
9) А^21 за шесть операции;
10)А^28 за шесть операции;
5.3.Целочисленная
арифметика. Задачи на целочисленное деление.
В программировании существует целый класс
задач, где действия производятся только с целыми
числами. При решении подобных задач обычно
используются операции над целыми MOD и DIV. Сегодня
мы познакомимся с задачами на целочисленное
деление.
Задача. Дано расстояние в сантиметрах. Найти
число полных метров в нем.
Код программы:
Program prim_4;
Var a,b:integer;
Begin
Write('введите расстояние в сантиметрах');
Readln(a);
b:=a mod 100;
Writeln(b,' метров ');
Readln
End.
Задания для
тренировки.
2.Дана масса в килограммах. Найти число полных
центнеров в ней.
3.Дана масса в килограммах. Найти число полных
тонн в ней.
4.Дано расстояние в метрах. Найти число полных
километров в нем.
5.Дан прямоугольник с размерами 543х130 мм.
Сколько квадратов со стороной 130 мм можно
отрезать от него?
6.*Дано целое число k (1 <= k <= 365). Присвоить
целочисленной величине n значение 1, 2,...,6 или 0 в
зависимости от того, на какой день недели (понедельник,
вторник, ..., суббота или воскресенье) приходится k-й
день года, в котором 1 января - понедельник.
Правильные ответы
для тех, кто выполнил задания предыдущего урока.
Задания.
1)Напишите программу, которая запрашивает два
числа, находит остаток от деления первого на
второе и выводит результат.
Program prim_3;
Var a,b,x:integer;
Begin
Write('введите два числа ');
Readln(a,b);
X:=a mod b;
Writeln('остаток от деления-',x);
Readln
End.
2)Составьте программу нахождения периметра
квадрата, если задана его площадь.
Program prim_4;
Var a,b,x:real;
Begin
Write('введите площадь квадрата ');
Readln(a);
X:=sqrt(a);
B:=x*4;
Writeln('периметр квадрата =',x:0:3);
Readln
End.
4)Найти площадь кольца по заданным внешнему и
внутреннему радиусам.
Program prim_4;
Var r1,r2,s:real;
Begin
Write('введите радиусы кольца ');
Readln(r1,r2);
S:=abs(2*3.14*r1-2*3.14*r2); {разность
площадей берем по модулю, так как не знаем
какое
из колец является внутренним, а какое внешним}
Writeln('площадь кольца =',s:0:2);
Readln
End.
Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru.