Форматы процедуры 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 до 'а'). 

 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: