Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GLAVA_10_Algoritmy_i_programmy.doc
Скачиваний:
10
Добавлен:
22.09.2019
Размер:
798 Кб
Скачать
☆

6.6. Ввод - вывод

Для решения задачи в программе необходимо ввести исходные данные, определить значения переменных. Ввод аналогичен присваиванию, только значение переменной берется не из оперативной памяти, а с внешнего носителя. Ввод - это пересылка данных в оперативную память из файла на внешнем носителе информации: с клавиатуры, магнитного диска и других устройств ввода.

Программа и данные (переменные и постоянные величины, определенные в программе) во время выполнения находятся в оперативной памяти. Полученные в результате решения задачи данные (значения переменных, выражений, функций) выводятся программой. Вывод - пересылка данных из оперативной памяти в файл на внешнем носителе: на экран, магнитный диск, на принтер (т.е. на бумагу) и другие устройства вывода.

6.6.1.Ввод-вывод данных на языке Pascal

Определим переменные x и y:

Var X, y: integer; {Описание переменных X, y целочисленного типа}

Например, при выполнении оператора ввода языка Pascal

readln (x, y);

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

read ( x ); readln ( y );

Если, например, переменным были присвоены значения: x=10, y =20, то оператор вывода языка Pascal:

writeln (“Результаты:”)

writeln (“x=”, x, “y=”, y, “x + y =”, x+y);

выведет на экран дисплея заданный в кавычках текст, значения переменных и выражения. На экране появится текст:

Результаты:

x=10 y=20 x + y =30

Оператор writeln выводит данные и переводит курсор на новую строку, а оператор write выводит данные и оставляет курсор на той же строке. Оператор readln отличается от оператора read тем, что вводит необходимое количество данных и пропускает все остальные данные до конца строки, следующий оператор ввода ожидает данные с новой строки.

6.6.2. Ввод-вывод данных на языке qBasic

В языке QBasic оператор ввода - INPUT, а оператор вывода - PRINT. В команде INPUT можно использовать текстовую подсказку. Для ввода- вывода тех же величин на языке QBasic необходимо написать следующие операторы:

INPUT “Введите два числа”, x, y

PRINT : PRINT "Результаты: " : PRINT "x= "; x; "y= "; y; "x+y "; x+y

Оператор PRINT без списка для вывода означает переход на новую строку. Если элементы списка разделяются точкой запятой, то они печатаются вплотную, если разделяются запятой, то распределяются по зонам. Если список для вывода завершается запятой или точкой с запятой, то курсор после вывода остается на той же строке, иначе после каждого оператора PRINT курсор переходит на новую строку.

6.7. Алгоритмы линейной и разветвляющейся структуры

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

Задача 6.1. Составить программу для вычисления периметра и площади прямоугольного треугольника по длинам двух его катетов.

Для решения задачи воспользуемся формулами вычисления гипотенузы прямоугольного треугольника по теореме Пифагора и формулами вычисления периметра и площади прямоугольного треугольника, известными из математики. Схема алгоритма задачи 6.1. представлена на рис. 6.2.

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

Program Treugol;

Var

A, B {катеты }

С, {гипотенуза }

Р, {периметр }

S: Real; {площадь }

BEGIN

Write('Введите катеты : '); ReadLn(A, B);

C:= sqrt (A*A + B*B);

P:= A + B + C;

S := A * B /2;

WriteLn('Периметр = ', Р : 5 : 2);

{Здесь 5 - общее количество позиций, занимаемых переменной Р при выводе, а 2 - количество позиций в дробной части значения Р}

WriteLn('Площадь = ', S : 5 : 2);

ReadLn

END.

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

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

1). Программа на языке Pascal начинается со служебного слова Program, за которым следует имя программы - Treugol;

2). После служебного слова Var следует определение переменных, необходимых для хранения исходных данных, результатов и промежуточных величин. В программе объявлены пять вещественных переменных: тип Real.

3). Операторы программы заключены в операторные скобки:

BEGIN …. END.

Последний символ в программе точка.

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

5). Поясним операторы программы:

Write('Введите катеты : '); {Вывод приглашения}

ReadLn(A, B); {Ввод данных}

{Операторы присваивания результатов вычисления выражений:}

C:= sqrt (A*A + B*B);

P:= A + B + C;

S := A * B /2;

{Вывод результатов:}

WriteLn('Периметр = ', Р : 5 : 2); WriteLn('Площадь = ', S : 5 : 2);

{Задержка - ожидание нажатия клавиши, позволяет просмотреть результаты работы программы:}

ReadLn

6). Все операторы завершаются символом ‘;’ (точка с запятой). Исключение: точку с запятой можно не ставить перед оператором End.

7) Для вычисления квадратного корня используется стандартная функция sqrt.

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

CLS ‘ очистка экрана

INPUT “Введите катеты : “, A, B

C = sqr (A*A + B*B)

P = A + B + C

S = A * B /2

PRINT “Периметр = “ ;P

PRINT “Площадь = “; S

END ‘ завершение программы

После символа апостроф ( ‘ ) даны комментарии к программе

Задача 6.2. Составить программу для нахождения суммы цифр заданного целого трехзначного числа.

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

Program Summa_cifr;

Var

N { заданное число }

a, { первая цифра числа }

b, { вторая цифра числа }

c, { третья цифра числа }

S: Integer; {сумма цифр }

BEGIN

Write('Введите целое трехзначное число : '); ReadLn(N);

N:= abs(N);

a:= N div 100;

b:= N div 10 mod 10;

c:= N mod 10;

S := a + b + c;

WriteLn('Задано число=', N );

WriteLn('Сумма цифр = ', S);

ReadLn

END.

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

1) Для вычисления модуля числа (абсолютной величины числа) используется стандартная функция abs.

2) В языке Pascal, в отличие от алгоритмического языка и некоторых других языков, целочисленное деление реализовано как операции, а не как стандартные функции. В программе используются операции целочисленного деления: div – частное целочисленного деления, и mod – остаток целочисленного деления. Например, 17 div 5 равно 3, а 17 mod 5 равно 2 (эти значения можно получить при делении столбиком).

Выполним тестирование программы вручную с помощью трассировочной таблицы.

Тест. Вход: N =-347

Выход:

Задано число = -347

Сумма цифр = 14

Трассировочная таблица:

Номер шага=

1

2

3

4

5

6

N=

-347

347

a=

347 div 100=3

b=

347 div 10 mod 10=

34 mod 10= 4;

c=

347 mod 10=7

S=

14

Ответ S=14.

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

CLS

INPUT "Введите трехзначное число : ", N

N = ABS(N)

a = FIX(N / 100)

b = FIX(N / 10) MOD 10

c = N MOD 10

S = a + b + c

PRINT : PRINT "О т в е т : сумма цифр равна " ; S

END

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

1) Для вычисления модуля числа (абсолютной величины числа) используется стандартная функция ABS.

2) Стандартная функция FIX используется для получения целой части аргумента функции, а операция MOD – остатка целочисленного деления.

Упражнения.

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

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

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

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

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

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

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

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

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

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

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