Программирование линейных алгоритмов

Рассмотрим пример программы линейного алгоритма.

Пример 1. Длина отрезка задана в дюймах (1 дюйм = 2,54 см). Перевести значение длины в метрическую систему, т. е. выразить ее в сантиметрах.

program Example_dlina;

var d,m: real;{объявление переменных}

begin

write('Длина в дюймах:');     {вывод пояснения}

readln(d); {ввод исходных данных}

m:=d*2.54; {вычисление}

writeln ('Длина в сантиметрах ',m);    {вывод результата}

end.

Пример 2. Треугольник задан величинами своих сторон. Найти его площадь.

 

program Example1_S;

var    a,b,c,р,s : real;

begin

write( 'А=' ) ;

readln (a);

write ( 'В=');

readln(b);

write('C=');

readln (c);

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c)

writeln('S=',s:6:2);

end.

 

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

Владелец автомобиля приобрел новый карбюратор, который экономит 50% топлива, новую систему зажигания, которая экономит 30% топлива, и новые поршневые кольца, которые экономят 20% топлива. Верно ли, что его автомобиль теперь сможет обходиться совсем без топлива? Найти фактическую экономию топлива.

Ответ на первый вопрос возникает естественно: нет, в любом случае какое-то количество бензина машина будет расходовать. Но какое? Простое суммирование или нахождение среднего значения исходных данных даст нам неверный результат. Практически тот же подход используется и при решении большинства задач «на время», на перевод величин в разных системах мер, на экономию операций при выполнении некоторых действий.

Здесь хорошими помощниками являются функции остатка от деления и целого деления, а также математические ухищрения.

Пример 3. Решить задачу обмена значениями двух переменных, не используя дополнительных переменных и предполагая, что значениями целых переменных могут быть произвольные целые числа.

Обозначим начальные значения переменных а и b через а0 и b0. Тогда математически очевидно следующее:

а=а+b {а=а0+b0,   b=b0}

b=а-b  {а=а0+b0,   b0}

а=а-b  {а=b0,        b0}

(Блок-схему алгоритма составить самостоятельно)

Реализовав эти вычисления на языке программирования, получим решение нашей задачи:

program Example_obmen;

var a,b:integer;

begin

write('Введите A: ');

readln (a);

write('Введите В : ');

readln(b);

a:=a+b;

b:=a-b;

a:=a-b;

writeln('A = ',a);

writeln('B = ',b);

readln;

end.

Пример 4. Часовая стрелка образует угол <j с лучом, проходящим через центр циферблата и через точку, соответствующую 12 часам. По значению угла определить время, показываемое часами.

Циферблат разбит на 12 равных частей (часов). Циферблат, как окружность, имеет 360 градусов. Значит, один полный час равен 30 градусам.

То есть количество полных часов определяется выражением j div 30. За один полный час, т. е. за 30 градусов хода часовой стрелки, минутная совершает полный оборот, т. е. 360 градусов. Значит, 1 минута равна 2 градусам и количество минут в текущем часе будет равно:

(j mod 30)*2.

Точность определения времени по углу часовой стрелки равна ±1 минута.

(Блок-схему алгоритма составить самостоятельно)

program Example_ugol;

var fi,chas,min: integer;

begin

write ('Введите угол ' ) ;

readln (fi) ;

chas:=fi div 30;

min:=(fi mod 30)*2;

write('Текущее время ',chas,' час',min,' мин');

end.

 

В МЕНЮ

 

Используются технологии uCoz