Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Упражнения. Составить программу вычисления следующих величин:



Составить программу вычисления следующих величин:

а) длины окружности, площади круга и объема шара одного и того же заданного радиуса;

б) среднего арифметического и среднего геометрического чисел x, y, z;

в) расстояния от точки с координатами (x, y) до точки c координатами (0,0);

г) расстояния между двумя точками, заданными своими координатами на плоскости.

д) числа, полученного выписыванием в обратном порядке цифр заданного четырехзначного числа.

г) площади кольца по заданным внешнему и внутреннему радиусам.

Рассмотрим задачи, для решения которых необходимы алгоритмы разветвляющейся структуры.

Задача 6.3. Составить программу для решения следующей задачи. Заданы координаты двух точек. Определить, какая из них дальше от начала координат. Схема алгоритма задачи 6.3. представлена на рис. 6.3.

Рис. 6.3. Схема алгоритма задачи 6.3.

Решение задачи 6.3. на языке Turbo Pascal:

Program Rast;

Var x1, y1, x2, y2, R1, R2: Real;

BEGIN

WriteLn('Введите координаты первой точки:');

Write('x1 = '); ReadLn(x1); Write('y1 = '); ReadLn(y1);

WriteLn('Введите координаты второй точки:');

Write('x2 = '); ReadLn(x2); Write('y2 = '); ReadLn(y2);

R1:= sqrt(x1*x1 + y1*y1);

R2:= sqrt(x2*x2 + y2*y2);

WriteLn; Write('Ответ: ');

If R1 > R2

then WriteLn(‘Точка 1 дальше ‘)

else WriteLn(‘Точка 2 дальше ‘);

ReadLn

END.

Пояснения к программе:

1) Величины R1 и R2 – расстояние до начала координат первой и второй точки соответственно (вычисляется по теореме Пифагора).

2) Оператор if сравнивает величины R1 и R2, если величина R1 больше величины R2, выводится сообщение 'Это точка 1.', иначе выводится сообщение 'Это точка 2.'

Решение задачи 6.3. на языке QBasic:

PRINT “Введите координаты первой точки: “

INPUT “x1 = “, x1

INPUT “y1 = “, y1

PRINT 'Введите координаты второй точки:'

INPUT “x2 = “, x2

INPUT “y2 = “, y2

R1:= sqrt(x1*x1 + y1*y1)

R2:= sqrt(x2*x2 + y2*y2)

PRINT: PRINT “Ответ: “

IF R1 > R2 THEN PRINT “Точка 1 дальше “ ELSE PRINT “Точка 2 дальше “

END

Задача 6.4. Составить программу для решения следующей задачи. Величине X присвоить максимальное число из трех неравных между собой чисел A, B, C.

Рассмотрим решение задачи, приведенное в учебном пособии: Хохлов Д.Г. Введение в программирование: Учебное пособие. - Казань: Изд-во Казанского техн. ун-та, 2002.

В современной технологии программирования структурное программирование сочетают с разработкой сверху вниз.

Любая система состоит из частей, каждую из которых тоже можно разложить на составные части и т.д. Таким же образом можно представить любой алгоритм или программу, разбивая их на более мелкие алгоритмы, блоки, до команд. Алгоритм можно разрабатывать сверху вниз: от целого к деталям, или снизу вверх: от частей к целому.

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

Разработка снизу вверх сложнее, т. к. трудно заранее грамотно разработать мелкие части, из которых будет состоять алгоритм.

Каждый из методов разработки, сверху вниз или снизу вверх, имеют свои достоинства и недостатки, но подход сверху вниз более целенаправленный.

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

На первом этапе весь алгоритм MAX3 представим в виде одного блока с операцией X = max (A, B, C). Возможны разные варианты детализации этого блока. Рассмотрим два решения А и В: назовем алгоритмы MAX3А и MAX3В

Решение А. Поэтапная детализация алгоритма MAX3А представлена на рис. 6.4.

Исходная задача нахождения наибольшего из трех чисел на втором этапе сведена к двум более простым задачам: найти максимальное из двух чисел. Можно присвоить вспомогательной переменной D большее из чисел A и B, а затем найти максимум из C и D. Тогда алгоритм MAX3A примет последовательную структуру (Этап 2 на рис. 6.4.).

Наибольшим из двух чисел может быть либо первое, либо второе число. Поэтому данную операцию можно представить в виде ветвления. Алгоритм MAX3A приобрел структуру из двух последовательных ветвлений (Этап 3 на рис. 6.4.).

Можно избавиться от вспомогательной переменной D, заменив ее величиной X. Алгоритм MAX3A, полученный на 4 этапе, состоит только из операций присваивания и сравнений, т.е. не требует дальнейшей детализации.

Решение B. Поэтапная детализация алгоритма MAX3B представлена на рис. 6.5.

Если, например, A > B, наибольшее из трех чисел необходимо выбирать из A и C. В противном случае, если A < B, наибольшее число необходимо выбрать из B и C. На втором этапе алгоритм MAX3B получаем в виде структуры ветвления. Исходная задача сведена к более простым задачам нахождения максимального из двух чисел.

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

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

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

Каждый из алгоритмов MAX3A и MAX3B имеет достоинства и недостатки: MAX3B быстрее, но требует больше памяти; MAX3A, наоборот, эффективней по памяти, но менее эффективен по времени. Трудно ответить на вопрос, какой из двух алгоритмов лучше! Наилучший алгоритм даже для простой задачи не существует!

Решение задачи 6.4. на языке Pascal (решение А):

Program MAX3A;

Var a, b, c, x: Real;

BEGIN

WriteLn('Введите три различных числа:');

ReadLn(a, b, c);

if a > b then x:=a else x:=b;

if c > x then x:=c;

WriteLn ('Наибольшее число: ', x);

END.

Решение задачи 6.3. на языке QBasic (решение А):

INPUT “Введите три различных числа: “,a, b, c

IF a > b THEN x:=a ELSE x:=b;

IF c > x THEN x:=c;

PRINT “Наибольшее число: “, x

END

Решение задачи 6.4. на языке Pascal (решение B):

Program MAX3B;

Var a, b, c, x: Real;

BEGIN

WriteLn('Введите три различных числа:');

ReadLn(a, b, c);

if a > b then

if a >c then x:=a else x:=c;

else

if b >c then x:=b else x:=c;

WriteLn ('Наибольшее число: ', x);

END.



Рис. 6.4. Этапы разработки алгоритма MAX3A (решение А)

Этап 1. Исходный алгоритм;

Этап 2. Определение структуры алгоритма;

Этап 3. Определение структуры блоков;

Этап 4. Устранение вспомогательной переменной



Рис. 6.5. Этапы разработки алгоритма MAX3B (решение B)

Этап 1. Исходный алгоритм;

Этап 2. Определение структуры алгоритма;

Этап 3. Определение структуры ветвей

Задача 6.5. Найти корни квадратного уравнения a x2 + b x + c = 0. Учесть особые случаи: «Корень уравнения – любое число», «Корни уравнения отсутствуют». Составить программу для решения задачи.

Разработаем систему тестов, которые представлены в табл. 6.2.

Табл. 6.2. Система тестов алгоритма решения квадратного уравнения

Номер теста Проверяемый случай Коэффициенты Результаты
a b c
  d >0     -2 x1 = 1, x2 = - 2
  d=0       Корни равны: x1 = - 1, x2 = - 1
  d < 0       Действительных корней нет
  a=0, b=0, c=0       Все коэффициенты равны нулю. х — любое число.
  a=0, b=0, c<>0       Неправильное уравнение
  a=0, b<>0       Линейное уравнение. Один корень: x = - 0,5
  a <> 0, b <> 0, с = 0       x1 = 0, x2 = - 0,5

Схема алгоритма задачи 6.5. представлена на рис. 6.6.

Решение задачи 6.5. на языке Turbo Pascal:

Program KV_urav;

Var a, b, c: Real; {a, b, c - коэффициенты уравнения}

D: Real; {дискриминант уравнения}

x1, x2: Real; {x1, x2 - корни уравнения}

BEGIN

Write('Введите коэффициенты a, b, c: ');

ReadLn(a, b, c);

If (a=0) and (b=0) and (c=0)

then begin

Write('Все коэффициенты равны нулю.');

WriteLn('x - любое число ')

end

else

If (a=0) and (b<>0)

then WriteLn('Линейное уравнение. Oдин корень: x =', (-c/b):5:2)

else

If (a=0) and (b=0) and (c<>0)

then

WriteLn('Неправильное уравнение.')

else begin

D:= b*b - 4*a*c;

If D > 0

then begin

x1:=(-b + Sqrt(D)) / (2*a);

x2:=(-b - Sqrt(D)) / (2*a);

WriteLn('x1=', x1:6:2, '; x2=', x2:6:2)

end

else

If D = 0

then begin

x1:= -b/(2*a);

WriteLn('Корни равны: x1=', x1:6:2, ' x2=', x1:6:2)

end

else WriteLn('Действительных корней нет.');

end;

ReadLn

END.

Решение задачи 6.5. на языке QBasic:

PRINT ". Введите коэффициенты a, b, c: ";

INPUT a, b, c

IF (a = 0) AND (b = 0) AND (c = 0) THEN

PRINT "Все коэффициенты равны нулю. x - любое число"

ELSE

IF (a = 0) AND (b <> 0) THEN

PRINT "Линейное уравнение, корень один: x = "; -c / b

ELSE

IF (a = 0) AND (b = 0) AND (c <> 0) THEN

PRINT "Неправильное уравнение."

ELSE

Discr = b * b - 4 * a * c

IF Discr > 0 THEN

x1 = (-b + SQR(Discr)) / (2 * a)

x2 = (-b - SQR(Discr)) / (2 * a)

PRINT "x1 = "; x1; "; x2 = "; x2

ELSE

IF Discr = 0 THEN

x1 = - b / (2 * a)

PRINT "Корни равны: x1 = "; x1; "; x2 = "; x1

ELSE

PRINT "Действительных корней нет."

END IF

END IF

END IF

END IF

END IF

END



Рис.6.6. Схема алгоритма задачи 6.5.





Дата публикования: 2015-01-14; Прочитано: 463 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.017 с)...