Для чего используется оператор вывода. Основные операторы

Цель лабор а торной работы: научиться правильно описывать переменные, используя следующие стандартные типы данных:целочисленные. вещественные и логический; изучить операторы ввода-вывода данных, выработать практические навыки работы с системой PascalABC, научиться создавать, вводить в компьютер, выполнять и исправлять простейшие программы на языке Pascal в режиме диалога, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, реализующих линейные алгоритмы.

Оператором называют специальную совокупность служебных слов, идентификаторов и специальных знаков, выполняющих определенные действия. Операторы отделяются друг от друга точкой с запятой «;».Примеры орераторов.

Оператор присваивания: (:=). Оператор присваивания служит для присваивания значений переменным, например: x:=1; a:=5. 02; b:= 32*a+Sin(x); S:= "Иван Иванович".

Составной оператор: Begin <операторы> End;

Составной оператор служит для записи в свое тело других операторов, последовательность которых рассматривается в данном случае как один оператор. Этим оператором начинается и заканчивается раздел выполнения основной программы, подпрограммы, функции. После последнего оператора END основной программы ставится точка.

    1. Операторы ввода/вывода данных

Для выполнения операций ввода-вывода служат четыре оператора:

Read,ReadLn,Write,WriteLn. Оператор чтения (Read) обеспечивает ввод числовых данных, символов, строк и т.д. для последующей их обработки программой.

Формат: Read(X1, Х2, .. , Хn), где X1, Х2, .. , Хn–переменные допустимых типов данных.

Значения X1, Х2, .. , Хnнабираются минимум через один пробел на клавиатуре пользователем и высвечиваются на экране. Значения переменных должны вводиться в строгом соответствии с синтаксисом языка. Если в программе имеется несколько операторовRead, данные для них вводятся потоком, т. е. после считывания значений переменных для одного оператораReadданные для следующего оператораRead–набираются на той же строке, что и для предыдущего до окончания строки, затем происходит переход на следующую строку. Оператор чтенияReadLnаналогичен операторуRead, единственное отличие заключается в том, что после считывания последнего в списке значения для одного оператора ReadLn данные для следующего оператора ReadLn будут считываться с начала новой строки.

Оператор записи (Write) производит вывод данных.

Формат: Write(X1, Х2, .. , Хn), где X1, Х2, .. , Хn- выражения типаinteger,byte,real,char,Booleanи т.д.

Пример: Write(125); (выражение представлено значением)Write(А+В–С); {выводится результат выражения).

Оператор Writeдает возможность выводить значения переменных следующими способами.

    Вывод десятичного представления величины Iначиная с позиции расположения курсора (I):

    Вывод десятичного представления величины I в крайние правые позиции поля шириной р (I:р):

Где ַ– пробел.

3. Вывод десятичного представления величины Iв крайние правые позиции поля шириной р и дробной части числа ширинойq(I:р:q):

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

При недостатке количества позиций для вывода число или текст выводятся полностью, а формат игнорируется, кроме формата вывода дробной части числа. Если формат вывода не задавать, то значения целых и строковых переменных выводятся полностью, а вещественных – с количеством цифр, соответствующих типу переменной, например,

a:=5.12345678912345678912345; Writeln("а=", a); выведет на экран надпись.

Структура программы

Структура программы на языке Turbo Pascal 7.0 содержит разделы:

Рассмотрим структуру программы на конкретном примере.

Создадим новый файл в окне редактора, программу «Hello, World!», которая содержит приветствие для пользователя:

Пример 1

program Hello_World;

var Name: string;

Write (‘Введите ваше имя: ‘);

WriteLn (‘Привет, ‘, Name, ‘!’);

В первой строчке программы содержится название - «Hello_World», служебный оператор program указывает на название программы, что не является обязательной конструкцией. Затем подключаем дополнительные модули, об этом говорит служебное слово uses. В приведенном листинге программы подключен модуль CRT, который выполняет функцию работы с экраном в текстовом режиме.

Затем в листинге используется служебный оператор begin, который указывает на начало тела программы.

В последующих пяти строках заключен смысл всей программы, выполняющей последовательность действий :

  1. Происходит очищение экрана от прежней информации (ClrScr;).
  2. Затем выводится просьба пользователя о вводе имени (Write (‘Введите ваше имя: ‘);).
  3. Ожидается введение информации пользователем в переменную Name (ReadLn (Name);).
  4. Выводится на монитор приветствие (WriteLn (‘Привет, ‘, Name,’ !’);).
  5. Программа ожидает действий от пользователя по нажатию клавишы Enter, чтобы завершить программу (ReadLn;).

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

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

Комментарий можно оформить следующим образом:

  • в виде произвольного текста, ограниченного с обоих сторон фигурными скобками - {}, (иногда комментарий может содержать несколько строк);
  • в виде произвольного текста, идущего следом за двойным знаком «//» (в этом случае комментарий может содержать только одну строку).

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

  1. Прежде чем приступить к написанию программы, четко определитесь с тем, что является исходными данными и какой результат нужно получить в ходе выполнения программы.
  2. Тип переменных необходимо выбирать, учитывая диапазон и требуемую точность представления данных.
  3. Давать имена переменным рекомендуется такие, чтобы они отражали их назначение.
  4. При использовании в программе ввода с клавиатуры вставляйте в код программы строку, содержащую приглашение, а выводимые результаты сопровождайте пояснением.
  5. До запуска программы рекомендуется подготовить тестовые примеры, которые будут содержать первоначальные данные и предполагаемые результаты. Проверить реакцию программы можно путем ввода некорректных исходных данных.
  6. При записи выражений необходимо обращать внимание на приоритет операций.

Операторы языка

Определение 1

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

Операторы работают в режиме автоматического последовательного выполнения в программе и отделяются друг от друга символом «;».

Операторы бывают:

  • простыми, т.е. не содержащими в себе других операторов;
  • составными, т.е. включающими в свой состав дополнительные операторы.

Оператор присваивания (:=)

С помощью него присваивается переменной новое значение. Формат:

Значение, которое присваивается, или выражение должны быть совместимы с типом переменной.

Пример 2

  • $X:=Pi; $
  • $Y:=Sqr(Z*Z+T*T)$;
  • $Bool:=(I>1)or(I

Операторы ввода данных

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

Read(x,y,z,...);

Readln(x,y,z,...);

где: x,y,z,... - имена переменных.

Приведенные операторы позволяют пользователю вводить значения с клавиатуры и присваивают их переменным x,y,z,....

Оператор Readln (x,y,z,...) отличается от Read(x,y,z,...) тем, что после ввода последней переменной курсор переводится в начало новой строки.

Замечание 1

Можно использовать оператор ввода без параметров: Readln, который ставится перед последним оператором end., чтобы остановить программу и показать пользователю её результат.

Операторы вывода данных

Для вывода данных на экран можно использовать следующие операторы:

  • Write (x,y,z,...);
  • Writeln (x,y,z,...);
  • Writeln.

Где: x,y,z,... - имена переменных, вводимых с клавиатуры.

С помощью оператора Write(x,y,z,...) выводятся на экран значения переменных x,y,z,... в одну строчку.

С помощью оператора Writeln (x,y,z,...) помимо вывода на экран значений x,y,z,... переводится курсор в начало новой строки после вывода последнего значения.

С помощью оператор Writeln осуществляется пропуск строки, содержащей курсор, к началу новой строки.

В операторах вывода можно указывать на ширину поля, которое отводится для записи значения в явном виде:

  • Write (y:m:n,x:k:l,...);
  • Writeln (y:m:n:,x:k:l,...).

m и k – это количество позиций, которые отводятся для записи целой части значения переменных y и x;

n и l – это количество позиций, которые отводятся для записи дробной части чисел y и x.

Например:

Пример 3

Write("Сумма = ",Sum); {вывод на экран текста «Сумма = », затем значения суммы, которое хранится в переменной Sum} Writeln("Введите ",I,"-й элемент: ").

Структура программы

Структура программы на языке Turbo Pascal 7.0 содержит разделы:

Рассмотрим структуру программы на конкретном примере.

Создадим новый файл в окне редактора, программу «Hello, World!», которая содержит приветствие для пользователя:

Пример 1

program Hello_World;

var Name: string;

Write (‘Введите ваше имя: ‘);

WriteLn (‘Привет, ‘, Name, ‘!’);

В первой строчке программы содержится название - «Hello_World», служебный оператор program указывает на название программы, что не является обязательной конструкцией. Затем подключаем дополнительные модули, об этом говорит служебное слово uses. В приведенном листинге программы подключен модуль CRT, который выполняет функцию работы с экраном в текстовом режиме.

Затем в листинге используется служебный оператор begin, который указывает на начало тела программы.

В последующих пяти строках заключен смысл всей программы, выполняющей последовательность действий :

  1. Происходит очищение экрана от прежней информации (ClrScr;).
  2. Затем выводится просьба пользователя о вводе имени (Write (‘Введите ваше имя: ‘);).
  3. Ожидается введение информации пользователем в переменную Name (ReadLn (Name);).
  4. Выводится на монитор приветствие (WriteLn (‘Привет, ‘, Name,’ !’);).
  5. Программа ожидает действий от пользователя по нажатию клавишы Enter, чтобы завершить программу (ReadLn;).

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

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

Комментарий можно оформить следующим образом:

  • в виде произвольного текста, ограниченного с обоих сторон фигурными скобками - {}, (иногда комментарий может содержать несколько строк);
  • в виде произвольного текста, идущего следом за двойным знаком «//» (в этом случае комментарий может содержать только одну строку).

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

  1. Прежде чем приступить к написанию программы, четко определитесь с тем, что является исходными данными и какой результат нужно получить в ходе выполнения программы.
  2. Тип переменных необходимо выбирать, учитывая диапазон и требуемую точность представления данных.
  3. Давать имена переменным рекомендуется такие, чтобы они отражали их назначение.
  4. При использовании в программе ввода с клавиатуры вставляйте в код программы строку, содержащую приглашение, а выводимые результаты сопровождайте пояснением.
  5. До запуска программы рекомендуется подготовить тестовые примеры, которые будут содержать первоначальные данные и предполагаемые результаты. Проверить реакцию программы можно путем ввода некорректных исходных данных.
  6. При записи выражений необходимо обращать внимание на приоритет операций.

Операторы языка

Определение 1

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

Операторы работают в режиме автоматического последовательного выполнения в программе и отделяются друг от друга символом «;».

Операторы бывают:

  • простыми, т.е. не содержащими в себе других операторов;
  • составными, т.е. включающими в свой состав дополнительные операторы.

Оператор присваивания (:=)

С помощью него присваивается переменной новое значение. Формат:

Значение, которое присваивается, или выражение должны быть совместимы с типом переменной.

Пример 2

  • $X:=Pi; $
  • $Y:=Sqr(Z*Z+T*T)$;
  • $Bool:=(I>1)or(I

Операторы ввода данных

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

Read(x,y,z,...);

Readln(x,y,z,...);

где: x,y,z,... - имена переменных.

Приведенные операторы позволяют пользователю вводить значения с клавиатуры и присваивают их переменным x,y,z,....

Оператор Readln (x,y,z,...) отличается от Read(x,y,z,...) тем, что после ввода последней переменной курсор переводится в начало новой строки.

Замечание 1

Можно использовать оператор ввода без параметров: Readln, который ставится перед последним оператором end., чтобы остановить программу и показать пользователю её результат.

Операторы вывода данных

Для вывода данных на экран можно использовать следующие операторы:

  • Write (x,y,z,...);
  • Writeln (x,y,z,...);
  • Writeln.

Где: x,y,z,... - имена переменных, вводимых с клавиатуры.

С помощью оператора Write(x,y,z,...) выводятся на экран значения переменных x,y,z,... в одну строчку.

С помощью оператора Writeln (x,y,z,...) помимо вывода на экран значений x,y,z,... переводится курсор в начало новой строки после вывода последнего значения.

С помощью оператор Writeln осуществляется пропуск строки, содержащей курсор, к началу новой строки.

В операторах вывода можно указывать на ширину поля, которое отводится для записи значения в явном виде:

  • Write (y:m:n,x:k:l,...);
  • Writeln (y:m:n:,x:k:l,...).

m и k – это количество позиций, которые отводятся для записи целой части значения переменных y и x;

n и l – это количество позиций, которые отводятся для записи дробной части чисел y и x.

Например:

Пример 3

Write("Сумма = ",Sum); {вывод на экран текста «Сумма = », затем значения суммы, которое хранится в переменной Sum} Writeln("Введите ",I,"-й элемент: ").

Для ввода данных в языке Турбо Паскаль предусмотрены стандартные операторы (процедуры) – READ и READLN , которые предназначены для чтения данных, как с клавиатуры, так и из файла. В данном разделе рассматривается ввод данных только с клавиатуры. Добавление к оператору READ символов LN обеспечивает автоматический переход курсора после ввода данных на новую строку.

Формат оператора:

READ (a1,a2,a3,...,an);

Здесь a1,a2,a3,...,an – переменные, которым последовательно присваиваются значения. Если в тексте программы встречается оператор READ , компьютер приостанавливает работу и ожидает ввода значений переменных с клавиатуры. Когда все значения переменных, перечисленных в операторе ввода, введены, процесс выполнения программы продолжается.

READLN;

который выполняет переход на новую строку при вводе данных.

При вводе данных с помощью оператора READ нужно иметь в виду следующие основные правила:

  • логические данные в Турбо Паскале вводить не разрешается;
  • при вводе числовых данных, числа разделяются пробелом или символом окончания ввода (клавиша ENTER). Ввод всегда заканчивается нажатием клавиши ввода – ENTER;
  • пробелы перед числом и между числами игнорируются, поэтому их можно ставить в любом количестве;
  • если переменная описана как Integer , ее значение вводится как целое число, т.е. не допускается использование точки после числа;
  • если переменная описана как вещественная (Real), а ее значение является целым числом, то можно вводить число как целое (т.е. без точки) и как вещественное число – с точкой. Преобразование целого числа к вещественному числу будет выполнено автоматически;
  • ввод символьных данных имеет особенности. Поскольку пробел является символом, как и любой другой символ языка Турбо Паскаль, то символьные данные необходимо вводить сплошной строкой;
  • одной символьной переменной можно присвоить значение только одного символа;
  • нажатие клавиши ENTER воспринимается как символ, поэтому для правильного ввода символьных данных рекомендуется перед каждым оператором ввода символьных данных ставить оператор перехода на новую строку READLN , чтобы их ввод осуществлялся с новой строки.

ЗАДАЧА. Ввод данных.

Program a4; Var a,b,c:integer; {Переменные целого типа} x,y,z:real; {Переменные вещественного типа} s1,s2,s3:char; {Переменные символьного типа} Begin Write(‘Введите а,b,с:’); Readln(a,b,c); {Ввод целых: при вводе недопустима точка, но допустимо любое количество пробелов. Нажатие Enter после ввода значения переменной с, закачивает работу оператора READLN.} Write(‘Введитеx,y,z:’); Readln(x,y,z); {Ввод вещественных чисел} Writeln(‘Введите s1,s2,s3:’); Readln(s1,s2,s3);{Ввод значений символьных переменных. Ввод должен производится сплошной строкой.} End.

Введем в программу следующие исходные данные:

x=44.4, y=47.5, z=76

s1=’A’,s2=’B’,s3=’C’

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

Введите a, b, c:23 {между числами}

Введите x, y, z:44.447.576 {допускается любое количество пробелов}

Введите s1,s2,s3:A B C

Вывод данных

Для вывода данных из памяти компьютера на экран монитора предназначен оператор Write .

Формат оператора:

Write(a1,a2,a3,...,an);

Здесь a1,a2,a3,...,an могут быть либо переменными, либо строкой символов, заключенной в апострофы. Все элементы перечисляются через запятую. Добавление к оператору WRITE символов LN обеспечивает автоматический переход курсора после вывода данных на новую строку.

Допускается использование оператора ввода без параметров

WRITELN;

который выполняет переход на новую строку, поэтому последующий оператор вывода с параметрами будет выводить данные с новой строки. Оператор вывода без параметров часто используется для формирования пустых строк.

Параметрами оператора WRITE могут быть данные целого, вещественного, логического, символьного, а также типа string .

Расположение данных на экране монитора может быть задано параметрами оператора WRITE , тогда вывод называется выводом с форматами данных. Если в операторе WRITE форматы не используются, вывод называется бесформатным выводом или стандартной формой вывода.

Бесформатный вывод . Форма представления выводимых данных зависит от типа данных:

  • значения логического типа выводятся в виде логических значений TRUE и FALSE ;
  • значения символьных переменных выводятся в виде соответствующих символов;
  • символьная константа выводится в том виде, как она записана, но без апострофов;
  • значения величин целого типа выводятся как целые числа;
  • значения величин вещественного типа выводятся в формате с плавающей точкой.

При бесформатном выводе отводимое количество позиций равно размеру данных. При выводе символа отводится одна позиция, при выводе целого числа – число позиций равно числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при последовательном выводе данных, например чисел, чтобы значения разных переменных не сливались друг с другом.

ПРИМЕР. Рассмотрим фрагмент программы :

var m,n:integer; begin n:=1234; m:=7890; write(n,m); end.

Оператором write(n,m); на экран монитора выводятся целые числа: n=1234 и m=7890 . Поскольку используется вывод без форматов данных, результат будет иметь вид:

Два числа слились. Для того чтобы числа не сливались необходимо использовать разделяющие пробелы или разнесение информации по разным строкам.

write(n,’ ’,m);{между числами поставлен пробел}

Результат:

1234 7890

или

Результат:

1234

Форматный вывод . Для вывода вещественных чисел необходимо указать в операторе WRITE формат представления числа, который имеет вид:

WRITE(<переменная>:m:n);

где: m – целое число, указывающее общее количество позиций отводимое под значение переменной, включая позицию под знак числа, точку и количество цифр дробной части; n – целое число, определяющее количество цифр дробной части.

Выводимая информация выравнивается по левому краю. При этом подавляется печать ведущих нулей, т.е. если для вывода числа было выделено четыре позиции, то на экран монитора будет выведено, например, 6 , а не 0006 .

Пример. Выведем значение переменной A , равное 401.3 оператором write(A:8:2) . На экран монитора будет выведено:

401,30
8 позиций

Символом обозначен пробел.

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

  1. Если число имеет меньшую длину, чем m , то оно будет дополнено слева пробелами.
  2. Если число имеет большую длину, чем m , то параметр m игнорируется и число будет выведено полностью.
  3. Если дробная часть больше, чем параметр n , то число округляется. Округление не изменяет самого значения переменной, меняется только представление числа на мониторе.
  4. Если параметр n не указан, то ни дробная часть числа, ни десятичная точка не выводятся. Вывод осуществляется в формате с плавающей запятой.

В качестве примера рассмотрим печать вещественного числа в различных форматах.

program write; var x:real; begin x:=-12345.12345; writeln("Печать вещественного числа":50); writeln("Печать в фиксированном формате"); writeln(x:3:0); writeln(x:3:1); writeln(x:12:5); writeln(x:20:5); writeln; writeln("Печать в плавающем формате"); writeln(x); writeln(x:3); writeln(x:5); writeln(x:15); writeln(x:16); end.

Результат работы программы:

Печать вещественного числа

Печать в фиксированном формате

Печать в плавающем формате

1.2345123450E+04

1.234512345E+04

Для вывода целых чисел необходимо указать в операторе WRITE формат представления числа, который имеет вид:

WRITE(<переменная>:k);

где:

k – целое число, указывающее общее количество позиций, отводимое под значение переменной.

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

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

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

Сначала операторы ввода (форматы операторов):

Read(<Список ввода>);

Readln(<Список ввода>);

В таком формате эти команды позволяют вводить данные в переменные во время выполнения программы с клавиатуры. Элементами списка ввода могут быть имена переменных, которые должны быть заполнены значениями, введенными с клавиатуры.

Выполнение операторов ввода происходит так: ход программы приостанавливается, на экран выводится курсор, компьютер ожидает от пользователя набора данных для переменных, имена которых указаны в списке ввода. Пользователь с клавиатуры вводит необходимые значения в том порядке, в котором они требуются списком ввода, нажимает Enter. После этого набранные данные попадают в соответствующие им переменные и выполнение программы продолжается.

Примечание: данные при вводе разделяются пробелами.

Разница между работой процедур Read и Readln (от Read line) состоит в следующем: после выполнения Read значение следующего данного считывается с этой же строчки, а после выполнения Readln - с новой строки.

Для вывода информации в Паскале также есть две команды:

Write(<Список вывода>);

Writeln(<Список вывода>);

Такой формат использования Write и Writeln позволяет выводить на экран монитора данные из списка вывода. Элементами списка вывода могут являться имена переменных, выражения, константы. Прежде чем вывести на экран компьютер значения выражений сначала вычислит. Элементы списка, также как и в операторах ввода, разделяются запятыми.

Различие между двумя операторами вывода таково: после выполнения оператора Writeln (от Write line) происходит переход на новую строчку, а после выполнения инструкции Write, переход на новую строчку не происходит и печать по последующим командам вывода Write или Writeln будет происходить на той же строчке. При вызове оператора Writeln без параметров просто происходит переход на новую строчку.

Приведем пример использования операторов ввода и вывода:

Program Inteface;

Write("Введите радиус круга "); {Печать на экране просьбы о вводе}

Readln(R); {Ввод значения в переменную R с клавиатуры}

S:=4*ARCTAN(1)*SQR(R); {Вычисление площади круга (pR2)}

Writeln("Площадь круга радиусом ",R," равна ",S)

Эта программа запрашивает у пользователя значение радиуса круга, обеспечивает возможность ввести его значение, рассчитывает и выводит на экран величину площади круга с таким радиусом. Таким образом, появляется возможность, не внося изменений в текст программы, вводить различные значения радиуса и получать, соответствующие им значения площади круга. Для этого достаточно несколько раз запустить программу. Также эта программа демонстрирует следующее правило: выдача результатов должна быть прокомментирована так, чтобы был ясен смысл напечатанных чисел. Действительно, ведь можно было бы ограничиться Writeln(S), но значение выведенного программой числа в этом случае было бы ясно только тому, кто эту программу написал.

ОПЕРАТОРЫ ВВОДА И ВЫВОДА

Рассмотрим организацию ввода и вывода данных с терминального уст> ройства. Терминальное устройство - это устройство, с которым работает пользователь, обычно это экран (дисплей) и клавиатура. Для ввода и вывода данных используются стандартные процедуры ввода и вывода Read и Write, оперирующие стандартными последовательными файлами INPUT и OUTPUT.

Эти файлы разбиваются на строки переменной длины, отделяемые друг от друга признаком конца строки. Конец строки задается нажатием кла виши ENTER.

Для ввода исходных данных используются операторы процедур ввода:

Read(A1,A2,...AK);

ReadLn(A1,A2,...AK);

Первый из них реализует чтение К значений исходных данных и прис ваивание этих значений переменным А1, А2, ..., АК. Второй оператор реализует чтение К значений исходных данных, пропуск остальных значе ний до начала следующей строки, присваивание считанных значений пере менным А1, А2, ..., АК. Третий оператор реализует пропуск строки ис ходных данных.

При вводе исходных данных происходит преобразование из внешней формы представления во внутреннюю, определяемую типом переменных. Пе ременные, образующие список ввода, могут принадлежать либо к целому либо к действительному, либо к символьному типам. Чтение исходных данных логического типа в языке ПАСКАЛЬ недопустимо.

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

var rV, rS: Real;

iW, iJ: Integer;

................

Read(rV, rS, iW, iJ);

Значения исходных данных могут отделяться друг от друга пробелами и нажатием клавиш табуляции и Enter.

Для вывода результатов работы программы на экран используются операторы:

Write(A1,A2,...AK);

WriteLn(A1,A2,...AK);

Первый из этих операторов реализует вывод значений переменных А1, А2,...,АК в строку экрана. Второй оператор реализует вывод значений переменных А1, А2, ..., АК и переход к началу следующей строки. Третий оператор реализует пропуск строки и переход к началу следующей строки.

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

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

Форма представления значений в поле вывода соответствует типу пе ременных и выражений: величины целого типа выводятся как целые деся тичные числа, действительного типа - как действительные десятичные числа с десятичным порядком, символьного типа и строки - в виде сим волов, логического типа - в виде логических констант TRUE и FALSE.

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

. . . . . . . . . . . .

var rA, rB: Real; iP,iQ:Integer;

bR, bS: Boolean; chT, chV, chU, chW: Char;

. . . . . . . . . . . .

WriteLn(rA, rB:10:2);

WriteLn(iP, iQ:8);

WriteLn(bR, bS:8);

WriteLn(chT, chV, chU, chW);

Метки. Оператор безусловного перехода .

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

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

Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием.

6: Writeln(14/2);

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

Goto <метка>;

Оператор, к которому происходит переход должен быть помечен данной меткой.

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

ЭЛЕМЕНТЫ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ

Структуризованная программа (или подпрограмма) - это программа, составленная из фиксированного множества базовых конструкций. Расс- мотрим основные определения и способы образования этих конструкций в схемах алгоритмов.

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

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

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

Конструкция, имеющая линии управления, ведущие к предидущим опера циям или развилкам, называется циклом.

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

Операция может быть реализована любым оператором языка ПАСКАЛЬ (простым или составным), либо группой операторов, за исключением опе ратора перехода GOTO.

В языке ПАСКАЛЬ количество базовых конструкций увеличено до шести, это:

Следование;

Ветвление;

Цикл с предусловием;

Цикл с постусловием;

Цикл с параметром;

Условный оператор

Одной из основных алгоритмических структур является ветвление (альтернатива).

Если условие выполняется, то будет выполнена инструкция "1", если нет, то - инструкция "2". Несмотря на то, что в схеме присутствуют два действия, выполнено будет только одно, так как условие либо ложно, либо истинно. Третьего не дано. Такая схема позволяет решать задачи, в которых в зависимости от сложившихся обстоятельств требуется совершить то или иное действие. Нет никакого сомнения, что число задач такого рода огромно. Более того, очень сложно придумать реально значимое задание, алгоритм выполнения которого содержал бы в себе простое прямое следование команд. Даже примитивный пример, взятый из курса математики, как вы увидите, не может быть решен без использования ветвления. Итак, необходимо вычислить значение выражения y=1/x. Вам известно, что данная функция не всегда имеет значение, то есть не для всех значений аргумента существует значение результата. Наша задача так составить алгоритм, чтобы исполнитель ни в коем случае не встал в тупик, даже при получении нуля в качестве аргумента. Сформулировать это на естественном языке не трудно:

1. Получить значение x.

2. Если x=0, то сообщить, что выражение значения не имеет, иначе - вычислить y как 1/x.

Таким образом используется приведенная выше алгоритмическая структура. Она может быть выражена простыми словами:

Если <усл.> {Если выполняется условие}

то <действие 1> {то выполнить действие № 1 }

иначе <действие 2> {иначе - выполнить действие № 2 }

Как это записать на Паскале? Да точно так же, только по-английски.

Формат условного оператора на языке Паскаль:

If <условие>

Then <оператор 1>

Else <оператор 2>;

Обратите внимание на то, что в Then- и Else- части стоит только один оператор. Но что делать, чтобы решить задачу, в которой по выполнению или невыполнению условия нужно совершить не одно, а несколько действий? Здесь приходит на помощь уже известный вам составной оператор. В операторные скобки можно заключить любое количество операторов.

Вариант условного оператора в этом случае:

If <условие>

Then Begin <группа операторов 1> end

Else Begin < группа операторов 2> end;

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

Теперь поговорим об условиях. В программах на языке Паскаль условия представляют собой выражения, значением которых является величина логического (Boolean) типа. Это может быть как просто переменная указанного типа, так и сложная последовательность высказываний, связанных логическими операциями.

В простых условиях могут применяться знаки операций сравнения: >(больше), <(меньше), =(равно), <>(не равно), >=(больше или равно), <=(меньше или равно).

Примеры простых условий: A=5 {Значение переменной А равно 5}

(C+D3)>=(D1*(45-2)) {Значение выражения в левой части больше либо равно значению выражения из правой части}

S<>"ABC" {Значение переменной S не равно строковой константе "ABC"}

Приведем пример решения еще одной задачи: "Из двух чисел выбрать наибольшее".

На первый взгляд решение очевидно, но оно не столь тривиально, как кажется.

Program Example;

Var A,B,C: Real; {A,B - для хранения аргументов, C - результат}

Writeln("Введите два числа");

Readln(A,B); {Вводим аргументы с клавиатуры}

If A>B Then C:=A Else C:=B; {Если A>B, то результат - A, иначе результат - B}

Writeln(C); {Выводим результат на экран}

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

При записи алгоритма на языке программирования следует учесть, что в ветви "нет" не одно действие, а три, поэтому следует применить составной оператор. Арифметические выражения не забывайте записывать в соответствии с правилами языка Паскаль. В остальном, эта программа не сложнее предыдущей.

Var A, B, C, D, X1, X2: Real;

Writeln ("Введите коэффициенты квадратного уравнения");

If D<0 Then Writeln ("Корней нет! ")

X1:=(-B+SQRT(D))/2/A;

X2:=(-B-SQRT(D))/2/A;

Интересно, что в качестве оператора, который выполняется по выполнению или невыполнению условия, может выступать условный же оператор. В этом случае говорят о вложенности условных операторов. Я настоятельно рекомендую при решении такого рода задач составлять блок-схему алгоритма в тетради. Только потом, при составлении программы, вам остается лишь аккуратно прописывать сначала всю Then- часть, а затем переходить к Else- части. Обычно при записи условных операторов на языке Паскаль (особенно при множественных ветвлениях) команды записывают уступом вправо и вниз. Это повышает наглядность, и, поверьте, снижает потери времени на отладку.

Для иллюстрации решим еще одну задачу: "решить уравнение вида A*x^2 + B*x + C = 0". Прошу не путать с квадратным уравнением, для которого нам было известно, что коэффициент А не равен нулю. Здесь же коэффициенты могут быть любыми числами. Исходя из элементарных математических рассуждений, получаем следующий алгоритм:

Var A, B, C, D, X, X1, X2: Real;

Writeln ("Введите коэффициенты уравнения (A, B, C) ");

If C=0 Then Writeln("X - любое число")

Else Writeln("Корней нет! ")

Else Begin X:=-C/B; Writeln("X=",X:8:3) End

If D<0 Then Writeln ("Корней нет! ")

X1:=(-B+SQRT(D))/2/A;

X2:=(-B-SQRT(D))/2/A;

Writeln ("X1=", X1:8:3, " X2=",X2:8:3)

Цикл. Виды Циклов.

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

Как вы понимаете, повторять одни и те же действия можно и при помощи оператора безусловного перехода. Если записать эти действия в программе одно за другим, а в конце поставить оператор перехода к началу этого блока. Однако таким образом можно получить только программу, которая работает вечно (зацикливается). Этого можно избежать, используя совместно с оператором перехода условный оператор, поставив выполнение перехода в зависимость от выполнения некого условия. Таким образом, мы получим структуру условного перехода и возможность организации конечного цикла. Вообще говоря, так мы можем решить практически любую задачу, требующую реализации циклического алгоритма. Конечно же, при помощи одного только топора можно построить дом. Поставим перед собой вопросы: "А будет ли этот дом красив? Сколько времени и сил можно сэкономить, используя всевозможные специальные инструменты?". Для чего? - Для удобства, краткости, простоты чтения программы и, не побоюсь этого слова, красоты. Итак, существует три вида цикла, имеющих собственные операторы на языке Паскаль для их записи. Эти виды имеют собственные условные названия: "Пока", "До", "С параметром". Друг от друга они несколько отличаются и используются каждый для своего класса задач

Цикл "ПОКА"

Группа операторов, называемая "телом цикла", судя по этой схеме, будет выполняться пока истинно условие цикла. Выход из цикла произойдет, когда условие перестанет выполняться.

Если условие ложно изначально, то тело цикла не будет выполнено ни разу. Если условие изначально истинно и в теле цикла нет действий, влияющих на истинность этого условия, то тело цикла будет выполняться бесконечное количество раз. Такая ситуация называется "зацикливанием". Прервать зациклившуюся программу может либо оператор (нажав Ctrl+C), либо аварийный останов самой программы, в случае переполнения переменной, деления на ноль и т.п., поэтому использовать структуру цикла следует с осторожностью, хорошо понимая, что многократное выполнение должно когда-нибудь заканчиваться.

На языке Pascal структура цикла "Пока" записывается следующим образом:

While <условие> Do <оператор>;

Правда, лаконично? По-русски можно прочитать так: "Пока истинно условие, выполнять оператор". Здесь, так же как в формате условного оператора, подразумевается выполнение только одного оператора. Если необходимо выполнить несколько действий, то может быть использован составной оператор. Тогда формат оператора принимает такой вид:

While <условие> Do

<оператор #1>;

<оператор #2>;

<оператор #3>;

Цикл "ДО"

Этот вид цикла отличается от предыдущего в основном тем, что проверка условия повторения тела цикла находится не перед ним, а после. Поэтому цикл "До" называют циклом "с постусловием", а "Пока" - "с предусловием".

Обратите также внимание на то, что новая итерация (повторное выполнение тела цикла) происходит не тогда, когда условие справедливо, а как раз тогда, когда оно ложно. Поэтому цикл и получил свое название (выполнять тело цикла до выполнения соответствующего условия).