Тема 2.3 Операторы языка: ввода-вывода, условные операторы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема 2.3 Операторы языка: ввода-вывода, условные операторы.



 

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

Основными устройствами ввода-вывода у персонального ком­пьютера являются клавиатура и дисплей (экран монитора). Имен­но через эти устройства главным образом осуществляется диалог между человеком и ПК.

Процедура ввода с клавиатуры имеет следующий формат:

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

где <список ввода> — это последовательность имен перемен­ных, разделенных запятыми. Слово read переводится как читать. (Точнее говоря, Read — это оператор обращения к стандартной процедуре ввода.)

Например,

Read(a,b,c,d)

При выполнении этого оператора происходит прерывание ра­боты компьютера, после чего пользователь должен набрать на клавиатуре значения переменных а, Ь, с, d, отделяя их друг от друга пробелами. При этом вводимые значения высвечиваются на экране. В конце нажимают клавишу Enter. Значения должны вво­диться в строгом соответствии с синтаксисом Паскаля.

Пример:

Var T: Real;

J: Integer;

К: Char; Begin

Read(T,J,К);

Набираем на клавиатуре:

253.98   100  G (Enter)

Если в программе имеется несколько операторов Read, то дан­ные для них вводятся потоком, т.е. после считывания значений переменных для одного оператора Read данные для следующего оператора читаются из той же строки на экране, что и для преды­дущего до окончания строки, затем происходит переход на следу­ющую строку.

Пример:

Var А,В: Integer;

C,D: Real; Begin

Read(А,В);

Read(С,D); Набираем на клавиатуре:

18758 34 (Enter) 2.62E-02 1.54E+01(Enter)

Другой вариант оператора ввода с клавиатуры имеет вид:

ReadLn(<список ввода>)

Здесь слово ReadLn означает read line — читать строку. Этот оператор отличается от Read только тем, что после считывания последнего в списке значения для одного оператора ReadLn дан­ные для следующего оператора будут считываться с начала но­вой строки. Если в предыдущем примере заменить операторы Read на ReadLn:

ReadLn(А,В); ReadLn(С,D);

то ввод значений будет происходить из двух строк:

18758 34 (Enter) 2.62E-02 1.54E+01 (Enter)

Оператор вывода на экран (обращение к стандартной процеду­ре вывода) имеет следующий формат:

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

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

Пример:

Write(234); {выводится целая константа} Write(A+B—2); {выводится результат вычисления

выражения} Write(X,Summa,Argl,Arg2); {выводятся значения

переменных}

При выводе на экран нескольких чисел в строку они не отде­ляются друг от друга пробелами. Программист сам должен позабо­титься о таком разделении. Пусть, например, /= 1; /= 2; К= 3. Тогда, написав в программе

Write (I, ' ',J, ' ',К);

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

WriteLn(<список вывода>)

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

Форматы вывода. В списке вывода могут присутствовать указа­тели форматов вывода (форматы). Формат определяет представле­ние выводимого значения на экране. Он отделяется от соответствующего ему элемента двоеточием. Если указатель формата от­сутствует, то машина выводит значение по определенному правилу, предусмотренному по умолчанию.

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

I, P, Q — целочисленные выражения;

R — выражение вещественного типа;

В — выражение булевского типа; СИ — символьная величина; S — строковое выражение;

#    — цифра;

*    — знак «+» или «—»;
_ — пробел.

Форматы процедуры Write

/ — выводится десятичное представление величины /, начиная с позиции расположения курсора:

Значение /               Оператор               Результат

134                           Write(I)               134

287                           Write(1,1,1)        287287287

1:Р — выводится десятичное представление величины /в край­ние правые позиции поля шириной Р:

Значение /               Оператор                    Результат

134                           Write(I:6)               134

312                           Write ((I + I):7)           624

R — в поле шириной 18 символов выводится десятичное пред­ставление величины R в формате с плавающей точкой. Если R > 0,0, используется формат _#.##########Е*##. Если R < 0,0, то фор­мат имеет вид _-#.##########Е*##:

Значение R               Оператор         Результат

715.432                   Write(R)         _7.1543200000Е+02

-1.919Е+01              Write(R)          _-1.9190000000Е+01

R: Р — в крайние правые позиции поля шириной Р символов выводится десятичное представление значения R в нормализо­ванном формате с плавающей точкой. Минимальная длина поля вывода для положительных чисел составляет 7 символов, для от­рицательных — 8 символов. После точки выводится по крайней мере одна цифра:

Значение R               Оператор            Результат

511.04                      Write(R:15)    5.110400000Е+02

46.78                        Write(-R:12)      -4.67800Е+01

R: P: Q — в крайние правые позиции поля шириной Р симво­лов выводится десятичное представление значения R в формате с фиксированной точкой, причем после десятичной точки вы­водится Q цифр (0 < Q< 24), представляющих дробную часть числа. Если Q— 0, то ни дробная часть, ни десятичная точка не выво­дятся. Если Q > 24, то при выводе используется формат с плава­ющей точкой:

Значение R                Оператор                Результат

511.04                                     Write(R:8:4)               511.0400

-46.78                                     Write(R:7:2)               _-46.78

Ch: P — в крайнюю правую позицию поля шириной Р выво­дится значение СИ:

Значение СИ               Оператор                 Результат

'X'                              Write(Ch:3)          __ X

'!'                                Write(Ch:2,Ch:4) _!___!

S — начиная с позиции курсора выводится значение S:

Значение S                Оператор                 Результат

'Day N'                   Write(S)             Day N

'RRDD'                     Write(S,S)         RRDDRRDD

S. P — значение S выводится в крайние правые позиции поля шириной Р символов:

Значение S                Оператор                 Результат

'Day N'                                    Write(S:10)                    .__ Day N

'RRDD'                                    Write(S:5,S:5)          _RRDD_RRDD

В — выводится результат выражения В: true или false, начиная с текущей позиции курсора:

Значение В                Оператор                 Результат

True                            Write (В)              True

False                           Write(В,Not B)    FalseTrue

B: P — в крайние правые позиции поля шириной Рсимволов выводится результат булевского выражения:

Значение В                 Оператор                  Результат

True                             Write(В:6)               —True

False                            Write (В: б,Not В: 7) _False____ True

 

Тема 2.4 Составной оператор. Операторы цикла. Операторы управления.

Алгоритмическая структура ветвления программируется в Пас­кале с помощью условного оператора. Раньше мы его описывали в таком виде:

If <условие> Then <оператор 1> Else <оператор 2>;

Кроме того, возможно использование неполной формы услов­ного оператора:

If <условие> Then <оператор>;

Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы (рис. 13).

То, что мы раньше называли условием, есть логическое выраже­ ние, которое вычисляется в первую очередь. Если его значение рав­но true, то будет выполняться <оператор 1> (после Then), если

Рис. 13

false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).

Пример 1. По длинам трех сторон треугольника а, Ь, с вычис­лить его площадь.

Для решения задачи используется формула Герона

у]р(р-а)(р-Ь)(р-с),

где р = (а + b + с) /2 — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сто­рон треугольника: длина каждой стороны должна быть меньше длин двух других сторон.

Имея возможность в одном условном операторе записывать достаточно сложные логические выражения, мы можем сразу «от­фильтровать» все варианты неверных исходных данных.

Program Geron;

Var A,B,C,P,S: Real;

Begin

WriteLn('Введите длины сторон треугольника:'); Write('a='); ReadLn(A) Write Cb='); ReadLn (В) Write('c='); ReadLn(C) If (A>0) And (B>0) And (C>0) And (A+B>C) And (B+OA) And (A+OB) Then Begin

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)* (P-C)); WriteLn('Площадь=',S) End Else WriteLn('Неверные исходные данные') End.

Теперь рассмотрим синтаксическую диаграмму оператора цикл- пока, или цикл с предусловием (рис. 14).

Сначала вычисляется <Логическое выражение > Пока его значение равно t r u e, выполняется <Оператор> — тело цикла. Здесь <Оператор> может быть как простым, так и составным.

Пример 2. В следующем фрагменте программы на Паскале вычисляется сумма конечного числа членов гармонического ряда

Суммирование прекращается, когда очередное слагаемое становится меньше е или целая переменная /достигает значения Maxint.

S:=0;

I: = l;

While (l/I>=Eps) And (KMaxInt) Do

Begin

S:=S+1/I;

I:=I+1

End;

Синтаксическая диаграмма оператора цикл-до, или цикл с постусловием, представлена на рис. 15.

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

S:=0;

1:=1;

Repeat

S:=S+1/I; I:=I+1

Until (1/KEps) Or (I>=MaxInt);


Тема 2.4 Составной оператор. Операторы цикла. Операторы управления.

    Алгоритмическая структура ветвления программируется в Паскале с помощью условного оператора. Раньше мы его описывали в таком виде:

If  <условие> Then  <оператор 1> Else  <оператор 2>;

 

Кроме того, возможно использование неполной формы условного оператора: 

If  <условие> Then  <оператор>;

 

    Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы (рис. 16).

     То, что мы раньше называли условием, есть логическое выражение, которое вычисляется в первую очередь. Если его значение равно true, то будет выполняться <оператор 1> (после Then), если

 

false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).

     Пример 1. По длинам трех сторон треугольника а, b, с вычислить его площадь. 

 Для решения задачи используется формула Герона

 

где р = (а + b + с) /2 — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сторон треугольника: длина каждой стороны должна быть меньше длин двух других сторон. 

   Имея возможность в одном условном операторе записывать достаточно сложные логические выражения, мы можем сразу «отфильтровать» все варианты неверных исходных данных. 

Program Geron; 

Var A,B,C,P,S: Real;

Begin

WriteLn('Введите длины сторон треугольника:');

Write ('a='); ReadLn(A)

Write('b='); ReadLn(В)

Write('c='); ReadLn(С)

If (A>0) And (B>0) And (C>0) And (A+B>C) And (B+OA) And (A+OB)

  Then Begin

            P:=(A+B+C)/2;

            S:=Sqrt(P*(P-A)*(P-B)* (P-C));

           WriteLn('Площадь=',S)

End

Else WriteLn('Неверные исходные данные')

End.

Теперь рассмотрим синтаксическую диаграмму оператора циклока, или цикл с предусловием (рис. 17). 

 

 

Сначала вычисляется <Логическое выражение Пока его значение равно true, выполняется <Оператор> — тело цикла. Здесь <Оператор> может быть как простым, так и составным. 

  Пример 2. В следующем фрагменте программы на Паскале вычисляется сумма конечного числа членов гармонического ряда

Суммирование прекращается, когда очередное слагаемое становится меньше или целая переменная i достигает значения Maxint. 

S:=0;

 I:=l; 

While (l/I>=Eps) And (KMaxInt) Do 

Begin

 S:=S+1/I; 

  I:=I+1 

End;

 Синтаксическая диаграмма оператора цикл-до, или цикл с постусловием, представлена на рис. 18.

 

 

Исполнение цикла повторяется до того момента, когда <Логическое выражение> станет равным true. 

Предыдущая задача с использованием цикла с постусловием решается так:

S:=0; 

1:=1; 

Repeat

       S:=S+1/I; I:=I+1

Until (1/I<Eps) Or (I>=MaxInt);


Цикл по параметру

       Рассмотрим следующую простую задачу: требуется вычислить сумму целых чисел от М до N путем прямого суммирования. Здесь M и N — целые числа. Задачу можно сформулировать так

   Алгоритм и программа решения этой задачи с использованием структуры цикл-пока представлены на рис. 19.

  А теперь введем новый тип циклической структуры, который будет называться цикл по параметру, или цикл-для. Блок-схема и программа на Паскале для решения рассматриваемой задачи с использованием этой структуры приведены на рис. 20. 

  Здесь целая переменная I последовательно принимает значения в диапазоне от М до N. При каждом значении I выполняется тело цикла. После последнего выполнения цикла при I= N происходит выход из цикла на продолжение алгоритма. Цикл выполняется хотя бы один раз, если M<N, и не выполняется ни разу при М > N.

 

 

 

 

   В программе используется оператор цикла For, синтаксическая диаграмма которого представлена на рис. 21.

 

 

 
    Выполнение оператора For в первом варианте (То) происходит по следующей схеме:

        1. Вычисляются значения <Выражения 1> и <Выражения 2>.

Это делается только один раз при входе в цикл. 

        2. Параметру цикла присваивается значение <Выражения 1>.

        3. Значение параметра цикла сравнивается со значением вы­ ражения 2>. Если параметр цикла меньше или равен этому значе­ нию, то выполняется тело цикла, в противном случае выполне­ ние цикла заканчивается.

        4. Значение параметра цикла изменяется на следующее значение в его типе (для целых чисел — увеличивается на единицу); происходит возврат к пункту 3. Оператор цикла For объединяет в себе действия, которые при использовании цикла while выполняют различные операторы: присваивание параметру начального значения, сравнение с ко­ начнем значением, изменение на следующее. 

   Как известно, результат суммирования целых чисел не зависит от порядка суммирования. Например, в рассматриваемой задаче числа можно складывать и в обратном порядке, т.е. от./V до М (N S М). Для этого можно использовать второй вариант оператора цикла For:

 

    Слово DownTo буквально можно перевести как «вниз до». В таком случае параметр цикла изменяется по убыванию, т.е. при каждом повторении цикла параметр изменяет свое значение на предыдущее (равносильно i:=pred(i)). Тогда ясно, что цикл не выполняется ни разу, если N < М. 

  Работая с оператором For, учитывайте следующие правила: 

• параметр цикла не может иметь тип Real; 

• в теле цикла нельзя изменять переменную «параметр цикла»;

 • при выходе из цикла значение переменной-параметра является неопределенным.

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

Здесь переменная с имеет тип Char. А теперь подумайте сами, как вывести кодировку латинского алфавита в обратном порядке (от z до 'а'). 

 



Поделиться:


Последнее изменение этой страницы: 2021-04-05; просмотров: 98; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.51.117 (0.079 с.)