Удк 681. 3 Сидоров М. Е., Трушин О. В. Школа работы на ibm pc. Часть Уфа, 1996. с
Вид материала | Книга |
- Удк 681 053: 681. 32: 007, 134.3kb.
- Удк 340. 6+681. 327+681 015 Д. В. Ландэ, В. Н. Фурашев, 450.24kb.
- Учебное пособие Рекомендовано учебно-методическим советом угаэс уфа-2006, 1339.31kb.
- Учебно-методический комплекс уфа 2009 удк 004 ббк, 598.63kb.
- Удк 681. 51: 303. 732+681 066 вопросы анализа проблем рыбохозяйственных комплексов:, 87.72kb.
- Удк 007. 52: 681 06 возможность вскрытия интуитивных представлений врачей при групповом, 198.06kb.
- Учебное пособие Рекомендовано учебно-методическим советом угаэс уфа-2005 удк 330., 1365.17kb.
- Курс лекций уфа 2006 удк 576. 4 Ббк 28. 073, 2080.69kb.
- Положение I открытого республиканского конкурса творчества «музыка цифр» Уфа, 210.26kb.
- Учебное пособие Уфа 2008 удк 616. 97: 616. 5(07) ббк 55., 7232.11kb.
1. 7. 1. Операторы ввода/вывода данных
Операторы вывода данных на экран Write("сп"); или Writeln("сп");
Здесь "сп" - список переменных.
Например, операторы Write(a, b, c); или Write(a); Write(b); Write(c); или Writeln(a, b, c); - выводят значения переменных "a", "b", "c" начиная с текущей позиции курсора. После вывода данных оператором Write("сп"); курсор остается за последним выведенным символом. Оператор Writeln("сп"); после вывода данных переводит курсор на первую позицию следующей строки. Например, для вывода значений переменных "a", "b", "c" в трех строках экрана следует написать:
Writeln(a); Writeln(b); Writeln(c);
Оператор Writeln; переводит курсор на начало следующей строки экрана.
Оператор Write('Моя первая программа !'); выводит на экран указанный текст.
В операторах вывода допускается производить арифметические действия, например, оператор Writeln(32*a+Sin(x)); соответствует операторам b:=32*a+Sin(x); Writeln(b);
При выводе данных можно задавать формат вывода. Для этого после имени переменной ставится знак двоеточие " : " , например: Writeln(a:5:2); - при выводе значения переменной вещественного типа отводится 5 позиций (включая отрицательный знак и точку), из них 2 позиции отводится для вывода цифр в дробной части. При выводе значения переменной целого типа задается количество позиций для числа (включая отрицательный знак), например: Writeln(i:8);
17
При выводе значений символьных и строковых переменных формат определяет число позиций для вывода значения переменной (текста).
При выводе число или текст выравниваются по правому краю отведенного поля, например: если а:=5. 02;, то оператор Writeln('а=', a:6:2); выведет на экран: а= _ _ 5. 02, если n:= '116'; s:= 'Школа N';, то оператор Writeln(s:7, n:6);
выведет на экран надпись: Школа N _ _ _ 116 .
Для выравнивания числа или текста по левому краю отведенного поля первый знак формата задается отрицательным, например:
оператор Writeln('а=', a:-8:2); выведет на экран надпись: а=5. 02
оператор Writeln(s:7, n:-6); выведет на экран надпись: Школа N116 .
При недостатке количества позиций для вывода число или текст выводятся полностью, а формат игнорируется, кроме формата вывода дробной части числа. Если формат вывода не задавать, то значения целых и строковых переменных выводятся полностью, а вещественных - в экспоненциальной форме с количеством цифр, соответствующих типу переменной, например, оператор Writeln('а=', a); выведет на экран надпись: a=5. 0200000000E+00 (тип Real, расчет без сопроцессора ), либо a=5. 02000000000000E+0000 ( тип Double, расчет с сопроцессором ).
Приведем пример программы, выполняющей различные операции с переменными разного типа.
Program N_1; { работа с переменными разного типа }
var x, y, z : real; x0, y0: byte; { описание типов переменных }
x1, y1, z1: integer; xb, yb, zb: boolean;
c1, c2, c3: char; s1, s2, s3: string;
Begin
x := 5. 8; y:= 3. 4; x1:= 43; y1:= 28; { присвоение значений }
c1:= 'Z'; c2:= 'S'; x0:= 65;
xb:= True; yb:= False;
s1:= 'Иванов _ '; s2:= 'Петров _ ';
Writeln('Математические операции:'); Z:= x+y; { и т. д. }
Write('x:=', x:3:1, ' _ _ y:=', y:3:1);
Writeln(' _ _ Z:= x+y;', ' _ _ z=', z:5:2);
Writeln; z1:= x1 div y1; { и т. д. }
Write('x1:=', x1:3, ' _ _ y1:=', y1:3);
Writeln(' _ _ Z1:= x1 div y1;', ' _ _ z1=', z1:2);
Writeln; { Пустая строка }
readln; { Задержка экрана до нажатия Enter }
Writeln('Логические операции:'); Zb:= xb and yb; { и т. д. }
Write('xb:=', xb, ' _ _ yb:=', yb);
Writeln(' _ _ Zb:= xb and yb;', ' _ _ zb=', zb);
Writeln; { Пустая строка }
readln; { Задержка экрана до нажатия Enter }
Writeln('Операции сравнения:'); Zb:= c1 > c2; { и т. д. }
{ символы сравниваются по номеру ASCII кода }
Write('c1:=', c1, ' _ _ c2:=', c2);
Writeln(' _ _ Zb:= c1 > c2;', ' _ _ zb=', zb); Writeln;
{ строки сравниваются по номеру ASCII кода первых символов }
18
{ если первые символы совпадают, то сравниваются вторые и т. д. }
Zb:= S1>S2; { и т. д. }
Write('s1:=', s1, ' _ _ s2:=', s2);
Writeln(' _ _ Zb:= s1 > s2;', ' _ _ zb=', zb);
Writeln; { Пустая строка }
readln; { Задержка экрана до нажатия Enter }
Writeln('Математические функции:'); Z:= sin(x*Pi/180); { и т. д. }
Write('x:=', x:4:2);
Writeln(' _ _ Z:= sin(x*Pi/180);', ' _ _ z=', z:10:7);
Writeln; { Пустая строка }
readln; { Задержка экрана до нажатия Enter }
Writeln('Математические процедуры:');
Write('x1:=', x1); Inc(x1); { и т. д. }
Writeln(' _ _ Inc(x1);', ' _ _ x1=', x1);
Writeln; { Пустая строка }
readln; { Задержка экрана до нажатия Enter }
Writeln('Функции преобразования типов:'); c3:= Chr(x0); { и т. д. }
Write('x0:=', x0);
Writeln(' _ _ c3:=Chr(x0);', ' _ _ c3=', c3);
readln { Задержка экрана до нажатия Enter }
end.
Все приводимые ниже задания предполагают написание и отладку программ, выполняющих указанные в заданиях действия.
Практическое задание N 1. 2
1) Провести расчеты с использованием различных операций для переменных простого и строкового типов по аналогии с приведенной выше программой.
2) Провести расчеты с использованием стандартных процедур и функций для переменных разного типа по аналогии с приведенной выше программой.
Операторы ввода данных с клавиатуры Read("сп"); или Readln("сп");
Здесь "сп" - список переменных.
Перед вводом данных с клавиатуры желательно вывести на экран поясняющее сообщение. Для этого в программу следует включить оператор вывода, например:
Write('введите значение а='); затем оператор Readln(a); При выполнении программы на экране появится надпись: введите значение а= . Оператор Readln(a); будет ждать ввода данных. Следует набрать на клавиатуре значение переменной "а", например, число и нажать клавишу Enter.
Для ввода значений нескольких переменных, например, a, b, c применяются конструкции вида: Readln(a); Readln(b); Readln(c); или Readln(a, b, c);
При вводе нескольких числовых данных, например, оператором Readln(a, b, c); необходимо после набора каждого значения переменной нажимать клавишу SpaceBar или Enter, а в конце ввода - Enter.
19
При вводе значений символьных переменных нажатие клавиши Enter приводит к присвоению символьной переменной значения кода клавиши Enter (#13), поэтому значения символьных переменных вводятся одна за другой без нажатия Enter или SpaceBar (#32). Например, оператор: Readln(с1, с2, с3, c4); ожидает ввода значений символьных переменных с1, с2, с3, c4, т. е. набора на клавиатуре символов, например: "У", "Р", "А", "!" и нажатия Enter. Тогда оператор Writeln(с1, с2, с3, c4); выведет на экран надпись: УРА!
Оператор Readln; без параметров служит для приостановки выполнения программы и ожидает нажатия клавиши Enter, т. е. применяется с целью приостановки вывода информации на экран для просмотра результатов. При вводе данных предпочтительнее использовать оператор Readln, поскольку оператор Read после срабатывания не считывает управляющий код (#13), который остается в буфере клавиатуры.
Приведем пример программы возведения положительного числа “x” в степень”n”,
т. е. y=xn. Расчет производится по формуле: y=en*ln(x).
Program N_2; {возведение положительного числа в степень}
Const S='введите значение';
Var n, x, y: real;
BEGIN
Writeln('Программу разработал Иванов');
Writeln('Возведение положительного числа x степень n');
Writeln(S, ' аргумента х>0'); Readln(x);
Write(S, ' показателя степени n='); Readln(n);
y:=exp(n*ln(x));
Writeln('результат y=', y:-10:6); writeln('Нажмите Enter');
readln; {задержка экрана до нажатия Enter}
END.
Практическое задание N 1. 3
1. Рассчитать площадь треугольника по формуле Герона:
S = (p*(p-a)*(p-b)*(p-c)), где p=(a+b+c)/2 - полупериметр.
a, b, c - стороны треугольника ( исходные данные ).
2. Рассчитать высоты, медианы и биссектрисы треугольника по формулам:
Ha= 2*S/a - высота, опущенная на сторону "a", аналогично для Hb, Hc;
Ma= (2*b2 + 2*c2 - a2)/2 - медиана, аналогично для Mb, Mc;
Ba= 2* (b*c*p*(p-a) )/(b+c) - биссектриса, аналогично для Bb, Bc;
a, b, c - стороны треугольника ( исходные данные ). S - площадь, p -полупериметр треугольника.
3. Рассчитать радиус окружности, вписанной в треугольник R1= S/p
и описанной вокруг треугольника R2= a*b*c/(4*S), где S - площадь, а p - полупериметр треугольника. a, b, c - стороны треугольника ( исходные данные ).
4. Рассчитать сумму "S" первых N членов арифметической прогрессии A1, A2, . . . , AN по формуле: S= (A1 + AN)*N/2. A1, AN, N - исходные данные
5. Рассчитать сумму "S" первых N членов ряда геометрической прогрессии B1, B2, . . . , BN по формуле: S= (B1 - BN*Q)/(1-Q). BN =B1 *QN. B1, Q - исходные данные.
Примечание: Программы запрашивают ввод исходных данных с клавиатуры и выводят результаты расчета на экран. Программой контроль данных не производится.
20
1. 7. 2. Оператор выбора
Оператор служит для выбора одного из помеченных вариантов действия (операторов), в зависимости от значения "параметра". Оператор имеет вид:
Case "параметр" Of
"список помеченных операторов"
Else "оператор" End;
Здесь "параметр" - выражение или переменная порядкового типа.
Из "списка помеченных операторов" выполняется оператор с меткой, включающей значение "параметра", иначе оператор после слова Else. Конструкция Else "оператор" может отсутствовать.
Напомним, что "оператор" может иметь вид: Begin "операторы" end;
Пример операторов для определения порядка целого числа N от 0 до 999:
case N of
0..9: writeln('однозначное');
10..99: writeln('двузначное');
100..999: writeln('трехзначное')
else writeln('Число "N" не входит в указанный диапазон') end;
Приведем пример программы случайного предсказания одного из десяти вариантов ближайшего будущего с вероятностью 1/20, в остальных случаях - вы "неудачник".
PROGRAM FUTURE;
var N: word;
Begin
writeln('ПРЕДСКАЗАНИЕ БУДУЩЕГО');
Randomize; N:=Random(20)+1; { N - случайное число от 1 до 20 }
writeln; write('Вас ожидает _');
case N of
1: writeln('счастье'); 6: writeln('здоровье');
2: writeln('пятерка'); 7: writeln('деньги');
3: writeln('дорога'); 8: writeln('любовь');
4: writeln('двойка'); 9: writeln('встреча');
5: writeln('болезнь'); 10: writeln('дети')
else writeln('неудача') end;
writeln('Нажми Enter'); readln;
END.
Здесь функция Random(x) генерирует случайное число, с равномерной плотностью распределения на заданном интервале. Для инициализации распределения в начале программы необходимо вызвать процедуру Randomize.
21
Практическое задание N 1. 4
1. Назначить дежурного в классе из списка 10 учеников с вероятностью 1/15, в остальных случаях дежурит учитель.
2. Выбрать место отдыха в отпуске из списка 10 мест, предлагаемых туристическим агентством с вероятностью 1/30 , в остальных случаях вы отдыхаете дома.
3. Вывести на экран сообщение в зависимости от введенного значения оценки ( по десятибалльной системе ), например: 1. . 2: плохо, 3. . 5: удовлетворительно, и т. д. , иначе - неправильный ввод данных.
4. Вывести на экран сообщение в зависимости от введенного значения температуры воздуха ( от -50 до +50 0 С ), например: -50. . -20: очень холодно,
-19. . -10: холодно, и т. д. , иначе - неправильный ввод данных.
1. 7. 3. Условный оператор
Условный оператор включает в себя операторы, которые выполняются или не выполняются в зависимости от записанного в операторе условия. Оператор имеет вид:
IF "условие" Then "оператор1" Else "оператор2";
где "условие" - выражение логического типа;
"оператор1" выполняется, если условие верно ( True ),
"оператор2" выполняется, если условие не верно ( False ).
Например, вычисление квадратного корня из числа "a" проводится при условии a>=0, операторами: IF a >= 0 Then b:= Sqrt(a) Else begin WriteLn ( 'a<0' ); Readln; Halt end;
Оператор Halt прекращает выполнение программы.
Схема выполнения условного оператора имеет вид:
IF В условном операторе может отсутствовать
( True ) блок Else оператор2; т. е. условный оператор
может иметь вид:
( False ) IF "условие" Then "оператор1";
например: IF a<0 Then a:= abs(a);
Else Then
оператор2 оператор1
22
Пример программы: Автобус движется по заданному маршруту с объявлением названий остановок. Зная остановку, на которой надо выходить, вы принимаете определенное решение: Выхожу, либо - Еду дальше, которое выводится на экран.
PROGRAM octanovka;
CONST A1= 'Бульвар Славы'; A2= 'Горсовет'; { A1, A2, A3, A4 - названия }
A3= 'Спортивная'; A4= 'УАИ'; { остановок }
Y= 'Выхожу'; N= 'Еду дальше';
var A, A0 : String; { A0 - текущая остановка }
BEGIN
writeln('Ввести нужную остановку из списка:');
writeln(A1:15, A2:15, A3:15, A4:15);
Writeln; readln(A); Writeln; { A - нужная остановка }
IF (A<>A1) and (A<>A2) and (A<>A3) and (A<>A4)
then begin Writeln('Нет такой остановки'); readln; Halt end;
A0:= A1; { объявление остановки }
IF A = A0 then begin writeln( Y, A:15); readln; Halt end
else writeln( A0:-15, N:12);
A0:= A2; { объявление остановки }
IF A = A0 then begin writeln( Y, A:15); readln; Halt end
else writeln( A0:-15, N:12);
A0:= A3; { объявление остановки }
IF A = A0 then begin writeln( Y, A:15); readln; Halt end
else writeln( A0:-15, N:12);
A0:= A4; { объявление остановки }
writeln( Y, A:15); readln;
END.
Первый условный оператор осуществляет контроль входных данных. Напомним, что в случае нескольких условий, соединенных логическим "И" результирующее условие имеет значение True, если каждое условие верно, иначе - False.
В случае нескольких условий, соединенных логическим "ИЛИ" результирующее условие имеет значение True, если хотя бы одно условие верно, иначе - False.
Поскольку операции сравнения имеют низший приоритет, то при проверке нескольких условий эти условия заключаются в скобки.
Практическое задание N 1. 5
1. Синоптики объявляют погоду на ближайшие дни: 1-солнце,
2-дождь, 3-туман, 4-ветер. Зная нужную вам погоду, вы принимаете определенное решение: жду нужную погоду, либо - беру отгул, которое выводится на экран. Программа запрашивает ввод нужной погоды и выводит на экран ваше решение на каждый день до дня отгула.
2. Старуха послала старика с просьбой: поймать в море нужную ей рыбку. Рыба клюет в определенной последовательности: окунь, камбала, линь, треска. Поймав рыбку, старик принимает решение: ловлю еще, либо - еду домой, которое выводится на экран. Программа запрашивает ввод нужной рыбки и выводит на экран решение старика на каждый улов до нужного.
23
В случае зависимых событий, исключающих одновременное их выполнение, могут применяться вложенные условные операторы. Во вложенных условных операторах служебное слово "else" относится к ближайшей конструкции If "условие" Then "оператор1" за которым оно следует, т. к. "оператор2" выполняется в случае, если "условие" - ложно.
Приведем пример программы определения весовой категории в зависимости от веса спортсмена.
PROGRAM VES; { определение весовой категории спортсмена }
Условная схема программы
CONST A1='легкая категория';
A2='средняя категория'; Then
A3='тяжелая категория'; IF Writeln(A1)
A4='сверхтяжелая категория'; Else
var V : integer; Then
IF Writeln(A2)
BEGIN Else
write('введите вес спортсмена V='); Then
readln(v); IF Writeln(A3)
Else
IF V < 62 then writeln(A1)
else Writeln(A4)
IF V < 75 then writeln(A2) { вложенный условный оператор }
else
IF V < 88 then writeln(A3) { вложенный условный оператор }
else writeln(A4);
0>