Урок4. Команды ввода и вывода. Линейные программы Учитель: Смирнова Гузэль Хадиевна Гимназия №122, г. Казань
Урок 4 Наконец-то мы вплотную приступим к программированию. Для усвоения правил написания основных операторов мы будем решать небольшие задачки, которые быстрей было бы сделать в тетрадке, чем писать программу. Но для сложной программы у нас не хватает знаний. Мало программ обходится без ввода данных, и совсем нет таких, которые не выводят полученные результаты. Написать такую программу можно, но кому она понадобится?
4.1.Ввод Для сообщения данных компьютеру служит оператор ввода. Он помещает вводимое значение переменной в отведенную для него ячейку. Оператор ввода: READ (список переменных ) ; Где список переменных – последовательность имен переменных, разделенных запятыми. Например, READ (X,Y,Z); READ (BETA); Оператор READ останавливает работу программы и ждет, пока пользователь наберет на клавиатуре число и нажмет . Введенное число помещается в оперативную память, в отведенную ячейку, имеющую имя указанное в операторе. Если список ввода содержит несколько имен, то для каждого надо ввести свое значение. Вводимые числа разделяют пробелами или нажатием клавиши .
Заканчивается ввод всегда клавишей . После работы этого оператора курсор располагается за последним введенным символом, но не переводится на новую строку. Для перевода курсора на новую строку экрана дисплея после ввода данных, используется оператор READLN (список переменных ); Оператор READLN отличается от READ еще и тем, что, введя необходимое количество данных, пропускает все остальные, набранные до нажатия клавиши .
4.2. Вывод Для вывода результатов работы программы служит оператор WRITE(список вывода); Список вывода может содержать имена переменных, числовые и текстовые константы, выражения. Элементы в списке разделяются запятыми. Если указана переменная, то на экран выводится ее значение, константа выводится без изменения, значения выражений вначале вычисляются, а затем высвечиваются на экране. Вслед за выражением после двоеточия можно указать ширину поля экрана, в котором разместится выводимое значение. Например, оператор WRITE(10:3, 55:6) высветит на экране .10…..55 (точка означает пробел, пустую позицию экрана). Вывод происходит в том месте экрана, где находится курсор.
При выводе вещественных значений можно указать, сколько десятичных цифр следует сохранить в дробной части числа. Количество цифр указывается вслед за шириной поля после двоеточия. Например, если Х=3.14159, а Y=2.71468, то оператор WRITE(X:6:2,Y:8:3) высветит на экране ..3.14….2.715. Чтобы прокомментировать выводимые значения, в список вывода можно помещать строки любых символов, заключенные в апострофы ( одинарные кавычки). Например, WRITE(‘Ответ:’, Х:4,’км/сек.’).
Эти строки появятся на экране без кавычек. Так при Х=3.5 этот оператор выведет: Ответ: 3.5 км/сек. Перевод курсора на новую строку осуществляется оператором пустого вывода WRITELN; Если надо перевести курсор после вывода, то применяется оператор WRITELN(список вывода); После вывода результатов работы программы на экран система так быстро возвращается в редактор текстов программы, что пользователь не успевает увидеть эти результаты. Чтобы задержать изображение, в конце программы следует ставить оператор пустого ввода READLN;
Задача 1 Пусть требуется найти сумму, произведение и разность двух данных чисел. Для каждого из чисел надо придумать имя переменной и указать ее тип. Затем ввести эти числа в отведенные ячейки и, используя возможности оператора вывода напечатать результаты. При решении задач имена присваиваются не только исходным данным, но и результатам, а также получаемым промежуточным значениям. Поскольку в рассматриваемом примере надо получить три результата, введем для них переменные X,Y,Z. В программе этим переменным будут присвоены значения суммы, произведения и разности двух вводимых чисел.
Блок-схема prim_1 начало Вывод Введите 2 числа ввод a, b X:=a+b Y:=a*b Z:=a-b Вывод X, Y, Z конец
Program prim_1; Var a,b,x,y,z:real; Begin Write(‘введите два числа’); Readln(a,b); X:=a+b; Y:=a*b; Z:=a-b; Writeln(‘a+b=’,x); Writeln(‘a*b=’,y); Writeln(‘a-b=’,z); End.
Вызвать программу Вызвать программу
Задача 2 Составим программу вычисляющую s = а / b и p=a*b. program zadacha2_1a; var a,b,s,p:real; Begin writeln('введите число a '); readln(a); writeln('введите число b '); readln(b); s:=a/b; p:=a*b; writeln('а/b =',s:0:2); writeln('а*b =',p:0:2); End.
Вызвать программу
В данном примере ввод и вывод данных для каждой переменной осуществляется отдельно. А можно было записать и так: program zadacha2_1b; var a,b,s:real; Begin writeln('введите числа a и b'); readln(a,b); s:=a/b; p:=a*b; writeln('а/b = ',s,' а*b = ',p); End. Задача 2
Блок-схема prim_1 начало Вывод Введите 2 числа ввод a, b s:=a/b; p:=a*b; Вывод S,p конец
Вызвать программу
В этой задаче использовался вещественный тип числа – real, поэтому ответ был получен в полулогарифмической форме записи числа. Вспоминаем: 2.5670000000Е+02 следует понимать 2.567 * 102 3.4906710000Е-03 следует понимать 3.490671 * 10-3. Если мы хотим при выводе на экран реальных чисел указать определённое число знаков после запятой, то можно воспользоваться форматом вывода writeln(a:n1:n2). Где n1 - количество знакомест выделенных под всё число; n2 - количество знакомест выделенных под дробную часть числа. Например команда writeln(pi) выведет строку: 3.1415926536E+00 Формат вывода
а команда writeln(pi:9:3) выведет строку: 3.142 пропустив перед выводимым числом четыре пробела и выровняв 3.142 (всего 5 знаков) по правому краю девяти знакомест. Составим программу, выводящую на экран число π. program zadacha2_2; Begin writeln(pi:9:3); End. Задача 3
Вызвать программу
Задача 4. Задана сторона куба. Вычислить объем куба и площадь боковой поверхности. Блок – схема. начало Вывод Введите сторону куба ввод a v:=a*a*a s:=6*a*a Вывод V,S конец
Изменяя числа в формате вывода(:9:3, :9:2, :17:3, :17:7, :3:7 и т.д.) просмотрите и проанализируйте полученные результаты. Задача 4. Задана сторона куба. Вычислить объем куба и площадь боковой поверхности. program zadacha2_3; var a,v,s:real; {описание переменных} Begin writeln('Введите сторону куба'); {ввод данных} read(a); v:=a*a*a; (*вычисление объёма*) s:=6*a*a; {вычисление площади поверхности} {вывод результатов} writeln('Объём = ',v:8:3,' Площадь поверхности = ',s:8:3); End.
Вызвать программу
Задания для самостоятельной работы. 1)Напишите программу, которая запрашивает два числа, находит остаток от деления первого на второе и выводит результат. 2)Составьте программу нахождения периметра квадрата, если задана его площадь. 3)Даны два числа. Найти их среднее арифметическое. 4)Найти площадь кольца по заданным внешнему и внутреннему радиусам. 5)Даны катеты прямоугольного треугольника. Найти его периметр. 6)*Поменять местами значения переменных X и Y, не используя дополнительной переменной.
Правильные ответы задания предыдущего урока. Запись выражений на Паскале: (A+B)/C+SQR(C)/(A-B) (X+Y)/3*7/(X-Y) (A-B)/C/((A+B)/D) (3+(1/2))+C/SQR(A+B) A*B/C-D/(A*B) SQR(X)/Y+SQR(Y)/X
Найдите значения переменных, если это возможно. Учтите, что число 7.0 является вещественным, т.к. оно имеет дробную часть, хотя и равную нулю. Операции MOD и DIV можно выполнять только над целыми числами (Урок 2): a) A:=21 DIV 5=4 b) A:= 2 MOD 3=2 B:= 20 MOD 5=0 B:= 36.0 MOD 6 (нельзя делить веществ) C:= 14 DIV 6.0 (нельзя делить веществ) C:= 81 DIV 0 (деление на 0) D:= 14 MOD 0 (деление на 0) D:= 38 DIV 6=6 E:= 5 MOD 13=5 E:= 3 DIV 2=1
Найдите значения переменных, если это возможно: a) A:=SQR(100)=10000 b) A:=sqrt(9)=3.0 B:=sqrt(100)=10.0 B:=SQR(9)=81 C:=SQR(-10)=100 C:=SQRT(-9) (выр. < 0) D:=SQRT(-10)(выр
Найдите значения переменных, если это возможно: a) A:=ROUND(6.9) =7 b) A:=ROUND(15.39)=15 B:=ROUND(6.48)=6 B:=ROUND(15.8)=16 C:=TRUNC(9.5) =9 C:=TRUNC(-39)=-39 D:=FRAC(9.5) =0.5 D:=FRAC(39)=0.0 E:=INT(9.5) =9.0 E:=INT(39)=0.0 F:=TRUNC(-17) = -17 F:=TRUNC(5.6)=5 G:=FRAC(17) =0.0 G:=FRAC(-0.3)=-0.3 H:=INT(-17) =-17.0 H:=INT(1.25)=1.0
Запишите по правилам языка программирования следующие выражения: sqrt(sqr(x1)+sqr(x2)) 1/(1+1/(2+1/(2+3/5))) –b+sqrt(sqr(b)-4*a*c)/(2*a) sqrt(1-sqr(sin(x))) (-b+1/a)/(2/c) (sqrt(x+1)+sqrt(x-1))/(2*sqrt(x)) m*g*cos(sqr(a)) 1/(1+(a+b)/2) (a*b+b*c)/(a*b)