Программы, работающие на компьютеры можно разделить на 3 категории: 


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



ЗНАЕТЕ ЛИ ВЫ?

Программы, работающие на компьютеры можно разделить на 3 категории:



1. прикладное программное обеспечение, непосредственно обеспечивающее выполнение необходимых пользователям работ: редактирование текстов, рисование картинок, обработку информационных массивов и т.д.(WORD Excel Изд. и граф редактор)

2. системные программное обеспечение, программы, выполняющие различные вспомогательные функции, например создание копий, используемой информации, проверку работоспособности устройств компьютера и т.д. (программы-оболочки для DOS является NORTON COMMANDER, драйверы позволяют работать с тем или иным внешним устройством), вспомогательные программы (утилиты) - программы-русификаторы, антивирусные программы, архиваторы)

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

Среди системных программ, с которыми приходится иметь дело пользователям компьютеров, занимает операционные системы.

Программное обеспечение или системы программирования – являются инструментами для программистов профессионалов и позволяют разрабатывать программы на различных языках программирования (Basic, Pascal, C++ и системах визуального программирования Visual Basic, Delphi)

Лекция 5

Данные в языке Turbo-Pascal 7.0. Стандартные функции языка Turbo-Pascal. Структура программы на языке Турбо Паскаль. Операторы Turbo-Pascal. Программирование линейных алгоритмов.

 

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

Первая версия языка программирования ПАСКАЛЬ была разработана на кафедре информатики Стенфордского университета швейцарским ученым Никлаусом Виртом в 1968 году и опубликована в 1971 году. Язык был назван в честь великого французского математика Блеза Паскаля. ПАСКАЛЬ Блез (1623-1662) французский философ, писатель, математик и физик. (Блез Паскаль изобрел и сконструировал первое механическое счетное устройство, позволяющее складывать в десятичной системе счисления, в котором числа "набирались" на специальных дисках. Диски были механически связаны, при сложении можно было учесть "перенос единицы" в следующий десятичный разряд).

В то время как Бейсик 5 лет уже существовал, Паскаль на его фоне выглядел скромно – программы казались громоздкими и сложным, но через некоторое время его популярность возросла, язык совершенствовался. Паскаль был создан в учебных целях для наглядной иллюстрации теории алгоритмов. Сейчас различают версии Паскаля (TURBO-PASCAL, Boland Pascal, Borland Pascal FOR Windows) используются по преимуществу, где требуется значительные вычисления, алгоритмические и графические ресурсы.  К нашему времени ПАСКАЛЬ пережил семь версий. ПАСКАЛЬ 7.0 появился в 1992 году. Наряду со всеми преимуществами, которые унаследованы от предыдущей версии (многооконный режим работы, возможность использования мыши, возможность использования процедур ассемблера и др.) появилась возможность исправлять ошибки даже неопытным пользователям, были расширены возможности объектно-ориентированного программирования. PASCAL - язык программирования высокого уровня!!!

 

 

Достоинствами языка Паскаль являются:

1. Простой синтаксис языка. Небольшое число базовых понятий. Программы на Паскале достаточно легко читаемы.

2. Достаточно низкие аппаратные и системные требования, как самого компилятора, так и программ, написанных на Паскале.

3. Универсальность языка. Язык Паскаль применим для решения практически всех задач программирования.

4. Поддержка объектно-ориентированного программирования.

 


Алфавит языка

· – это набор символов, разрешенных к использованию и «понимаемых» компьютером, т.е. набор для составления программы:

· 26 латинских строчных и 26 латинских прописных букв A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z

· Знак подчеркивания _

· 10 арабских цифр 0…9

· Специальные символы: + - * / =., ':;  () [ ] @ ^ # $

· Составные символы:

- оператор присваивания:=

- знаки сравнения (логические операции)     < > <= >=   

- знак подмножества   ..

- составные скобки (..) { } (* *)

Идентификатором называют последовательность букв, цифр и знака подчеркивания «_», начинающуюся с буквы, которая может быть использована в качестве имени, константы, метки, типа, переменной, процедуры, функции, модуля, может содержать произвольное количество символов, но значащими являются 63 символа.

Допустимые идентификаторы: х3, С_1, GGG

Недопустимые идентификаторы: х+3, 1с, х/3, зим

Ключевыми словами называются идентификаторы, зарезервированные в языке, которые нельзя использовать в качестве имен - это FOR, IF, DO, Program, USES, ARRAY,BEGIN, END…

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

 

Символ Название Примеры
= Знак равенства If (x=3) then goto 20;
; Разделитель операторов a:=10; b:=12;
: Разделитель в формате вывода Writeln(x:4:2);
Ограничитель текста ‘МГУПИ’
. Конец программы End.
{} Комментарий {комментарий}
(* *) Комментарий (* a:=b *)
, Разделитель в списке Var a,b,c:byte;
[ ] Номер элемента массива. Длина строки. a[i]:=0.0; Var c:string[25];
() Индикатор аргумента. Ограничитель условия y:=sin(x); If (x>3) then y:=y+1;
_ «Сшиватель» слов Var mgypi_ti:real;

 

Данные – это простейшие объекты программной обработки.

Типы данных определяют:

1. Место, отводимое в памяти для хранения данного;

2. Возможные операции преобразования с этими данными.

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

Простые типы данных: целый, нецелый(вещественны), символьный и логический.

Ø Структура данных это отношение между другими данными. К структурам относятся массивы, записи и файлы.

Ø Простые данные Особенности Турбо-Паскаля:

Все данные должны быть описаны (в начале программы необходимо указывать тип всех фигурирующих в ней величин).

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

 

 

      -Короткие целые (ShortInt)
      -Байтовый (Byte)
    Целые -Целый со знаком (Integer)
      -Целые без знака (Word)
  Числовые   -Длинные целые (LongInt)
         
      -Одинарные (Single)
    Нецелые -Вещественные (Real)
Данные     -Двойной точности (Double)
      -Высокой точности (Extended)
  Текстовые Строковые (String)  
    Cимвольные (Char)  
  Логические   (Boolean)  

 

 

Характеристики основных типов данных

 

Арифметические целые

Типы данных Обозначение Объем Диапазон значений Пример
Короткие целые ShortInt 1 B -128..127 60, -45
Байтовые Byte 1 B 0..255 0, 130
Целые со знаком Integer 2 B -32768..32767 -12,    4569
Целые без знака Word 2 B 0..6535 2346, 0
Длинные целые LongInt 4 B │х│<=2147483647 123457, 8

Строковые

Типы данных Обозначение Объем Диапазон значений Пример
Строковые String String[n] 256 B n+1 B              -              - ‘Pascal’ ‘МГУПИ’
Символьные Char 1 B chr(0)..chr(255) ‘ ’,’N’

Логические

Типы данных Обозначение Объем Диапазон значений Пример
Логические Boolean 1 B False, True True

Арифметические вещественные

Типы данных Обозначение Объем Диапазон значений Точность
Одинарные Single 4 B 1.5е-45..3.4e38 до 8 цифр
Вещественные Real 6 B 2.9e-39..1.7е38  (2,9x10-39... 1,7x1038) до 12 цифр
Двойной точности Double 8 B 5.0e-324..1.7e308 до 16 цифр
Высокой точности Extended 10 B 1.9e-4951..1.1e4932 до 20 цифр

 

1 1 1 1 1 1 1 1

└───── 8 бит ────┘2

8 бит = 1 байт

Если последовательность будет из 8 единиц, то

=

Полученный диапазон [0..255] определяется типом Byte (беззнаковый)

 

  1 . . . 1 1 1

знаковый             15 бит                    2

бит

Если последовательность будет из 16 единиц, то

=

Полученный диапазон [-32768..32767] определяется типом Integer (знаковый).

 

255, 32767, 65537 и т.д. считаются мировыми программными константами. Эти значения следуют из объема памяти, необходимого для хранения величин приведенных типов в памяти ЭВМ, так максимальное значение байтовой переменной равно число, которое будет переведенным в двоичную систему дает нам максимальное число, занимаемых байт. Битовое представление каждого кодируемого символа не выйдет за пределы 8 бит.

 

Стандартные функции языка Турбо-Паскаль

Паскаль обладает большим набором “вшитых” в него математических функций. Функция – это преобразователь входного параметра или параметров в одно выходное значение. Например, функция sin(x) преобразует поданный ей угол в радианах в его синус. Термин “вшитый” означает, что упоминания имени функции и значения аргумента достаточно программе для ее выполнения, подобно тому, как нам хватает записи sin(x) для того, чтобы понять, что речь о синусе аргумента x.

 

Функция Назначение Результат Примеры
Abs(x) |x| (модуль от х) Real,Integer abs (3.2) = 3.2 abs (-7) = 7
Exp(x) («экспонента» от х) Real exp (0) = 1.0 exp (1) = 2.71828
Ln(x) Ln x Real ln (1) = 0.0   ln (exp (2)) = 2.0
Sqr(x) x в квадрате Real,Integer sqr(-3.0) = 9.0 sqr (2) = 4
Sqrt(x) квадратный корень из x Real sqrt (9) = 3.0 sqrt (4) = 2.0
ArcTan(x) arctg x (арктангенс х) Real arctan (0) = 0.0
Sin(x) sin x Real sin (Pi/6) = 0.5 sin (0) = 0.0
Cos(x) cos x Real cos (Pi) = -1.0 cos (Pi/2) = 0.0
Int(x) целая часть x Real int (Pi) = 3.0  int (1.6) = 1.0
Trunc(x) целая часть x Integer trunc (Pi) = 3  trunс (-2.9) = -2
Frac(x) дробная часть x Real frac (1.6) = 0.6   frac (0) = 0.0
Round(x) oкругление x Integer round (Pi) = 3  round (-2.5) = -3
Odd(x) нечетность х Boolean odd(0)=false  odd(-5)=true
Pred(x) значение, идущее перед x Любой pred(‘b’)=’a’  pred(-20)=-21
Succ(x) значение, следующее за x Любой succ(0)=1
Ord(x) код значения x Byte ord(‘+’)=206 ord(-9)=-9
Chr(N) символ с ASCII-кодом N  Char сhr(206)=’+’  chr(65)=’A’
Random генерация случайного числа на интервале (0,1) Real x:=Random
Random(x) генерация случайного числа на отрезке [0,x] Integer n:=Random(99)
SizeOf(x) объем памяти, занимаемый x Integer size(real)=6  size(char)=1
High(тип) максимальное значение перечислимого типа Любой high(byte)=255
Low(тип) минимальное значение перечислимого типа Любой low(byte)=0 low(boolean)=false
UpCase(x) заглавный символ от x Char upcase(‘a’)=’A’  upcase(‘.’)=’.’
Readkey значение нажатой клавиши Char c:=ReadKey
KeyPressed факт нажатия клавиши Boolean f:=KeyPressed

Нестандартные функции

 

Функции Формула пересчета Запись на Паскале
tg x sin(x)/cos(x)
arcsin x arctan(x/sqrt(1-sqr(x)))
arcos x arctan(sqrt(1-sqr(x))/x)
ln(x)/ln(a)
lg x ln(x)/ln(10)
   (a>0) exp(b*ln(a))
   (x>0) exp(n*ln(x))

 

Структура программы на языке Турбо Паскаль

 

Структурированность программы – одно из характерных отличий Паскаля от Бейсика. Любая программа, написанная на Паскале, имеет две структурные части:

1 часть - блок описаний, содержащий идентификаторы - константы, метки, типы, переменные, процедуры, функции, модули, объекты.

2 часть - основной блок программы (исполняемая часть программы) – в этом разделе происходит преобразование данных, переданных из 1 структурной части.

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

Program имя программы;

Uses

список используемых модулей;

Label

список меток в основном блоке программы;

Const

определение констант программы;

Type

описание типов;

Var

описание глобальных переменных программы;

[Определение процедур и функций;

Begin

Основной блок программы

End.

 

Label,Const, Type  могут быть введены при необходимости. Поэтому более короткий вид программы:

Begin

<операторы языка>

End.

 

1.Раздел `PROGRAM` - это внутреннее имя программы, как правило указывающее на ее сущность (не обязательное).

Пример: Program MGUPI_ti;

2.Раздел ‘USES’ - этот раздел позволяет использовать стандартные библиотеки Паскаля. Перечислим несколько:

1) CRT – отвечает за работу с текстом, окна, цвета, звук, управление курсором.

2) GRAPH – осуществляет управление графическим режимом.

3) SYSTEM – реализует стандартные математические функции Паскаля(sin, sqrt  и т.д.), этот модуль подключается по умолчанию.

Пример: Uses crt;

3.Раздел ‘ LABEL’.

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

Пример:

Program TI;

Uses crt;

Label 10;

Begin

10:writeln(‘Зацикливание’);

Goto 10;

End.

4.Определение констант ‘CONST’ - это идентификатор, соответствующий значению, которое не может изменяться в процессе работы программы.

Пример: Const h=0.15; N=15; A=’Для продолжения нажмите пробел’;

Обратите внимание на то, что определяемые константы относятся к различным типам: real, integer, string. Эти типы указывать не надо: ЭВМ сама растащит значения по типам.

Замечание. В Паскаль “вшита” лишь одна константа Pi равная 3.1415926….

5.Определение типов ‘TYPE’

Все, не относящиеся к “вшитым” стандартным типам, подлежит определению в разделе Type. Создаваемый тип может быть ПРОСТЫМ или СОСТАВНЫМ. По способу определения простые типы делятся на перечисляемые и диапазонные. При определение перечисляемого типа следует перечислить все возможные значения переменной:

Type

Personages=(TIti, PRpr, ICic);

Boolean2=(false, true, no_info);

Color=(Red, Green, Blue, Orange);

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

Type

Digits=0..9;

Century=1..20;

RusLetters=’A’..’Я’;

При определение составного типа в структуры определяются данные известных машине типов. Самые известные такие структуры – МАССИВ и ЗАПИСЬ (рассмотрим в дальнейших лекциях).

6.Описание переменных ‘VAR’ - переменные, которые будут фигурировать в программе, должны быть описаны в разделе VAR. При описании указывается имя и ее тип. Пример:

Var

i: byte;q: real;c:char;

7. Begin {начало работы программы}

Основной блок программы {группа операторов, отделенных друг от друга точкой запятой}

End. {конец программы}

 

Оператор перехода GOTO <метки>

 

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

 

Оператор присваивания имеет следующую структуру:

 

ИМЯ_ПЕРЕМЕННОЙ:=АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ;

Оператор выполняется следующим образом:

1) В арифметическое выражение подставляются текущие значения переменных, хранящиеся в оперативной памяти ЭВМ.

2) Вычисляется значение арифметического выражения.

3) Результат записывается в ячейку, где хранится переменная, чье имя стоит в операторе слева. При этом прежнее значение этой переменной затирается.

Пример: x:=5; x:=x+2;

Количество операторов присваивания в одной строчке неограниченно.

Отметим:

1. Нельзя присваивать переменной значение не родственного типа (например, строковой переменной – целое значение; целой переменной – логическое и т. п.).

2. Нельзя присваивать переменной значение родственного типа, занимающее в памяти больший объем (например, символьной переменной – строковое значение; байтовой переменной – целое со знаком значение; целой переменной – вещественное значение и т. п.).

 

Стандарты ввода – вывода данных

 

Оператор печать, т.е. вывода на экран на Паскале имеет вид:

Write(список вывода);             Writeln(список вывода);

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

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

Writeln(a,b,c);

Write(‘Вывести х ‘);Writeln(‘x’,x);

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

Пример:         x=4.91E-0008          ()

Для того чтобы в процессе вывода выдать вещественные данные в приемлемом виде, используют так называемый формат вывода с фиксированной точкой (F-форма):

Writeln(‘x= ‘,x:m:n);

Число m называют шириной поля, число n – точностью числа. Ширина поля – это число позиций, отводимых под запись всего числа. Точность – число позиций, отводимых на его десятичную часть.

Пример:

Writeln(‘Pi= ‘,Pi:7:4);        На экране Pi=3.1416

Writeln(‘Pi= ‘,Pi:7:1);        На экране Pi=3.1

Оператор ввода данных с клавиатуры выглядит следующим образом:

Read(список ввода);       Readln(список ввода);

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

Readln(x, y);            =  Readln(x); Readln(y);

При вводе данных из списка вводимые значения можно вводить по одному, нажимая клавишу “Enter” после набора каждого значения, либо набирать в одной строке, разделяя значения произвольным количеством пробелов.

 

Составной оператор

Составной оператор – группа операторов, отделенных друг от друга точкой с запятой, начинающихся со служебного слова BEGIN и заканчивающихся служебным словом END.

Begin

<оператор_1>;

<оператор_n>;

End;

 

Программирование линейных алгоритмов

В линейных алгоритмах результат получается после выполнения одной последовательности действий.

Начало⤍ряд операторов⤍конец.

Пример:

Вычислить площадь параллелограмма. Значения а (основание) и h (высота) ввести с клавиатуры.

Program TI;

Uses crt; {стандартная библиотека}

Var        {раздел описания переменных}

a,h:real;

s:real; {площадь параллелограмма}

begin {начало работы программы}

clrscr; {ф-ция очистки экрана, в данном очистит не весь экран, а только заданное текстовое окно }

 write(‘a=’);

 readln(a);

write(‘h=’);

 readln(h);

s:=a*h;

writeln(‘s=’,s:6:2,’кв.см’); {вывод на экран результата}

Repeat Until Keypressed; {стандартная функция из библиотеки CRT, приводит

                                                                     к  задержке окна результатов до нажатия любой клавиши}

End.

Лекция 6

Процедуры и функции. Условные структуры.

 

Функции Function

Рассмотрим раздел FUNCTION на примере вычисления значения функции:

Реализовать формулу перехода из градусов в радианы (так как тригонометрические функции понимают лишь аргумент в радианной мере (см. ниже Примечание)) несложно, но выписывать ее придется четыре раза. С этой целью имеет смысл один раз запрограммировать ее и четыре раза вызывать. Делается это с помощью организации функции в разделе FUNCTION:

 

Function Имя_функции (входные параметры): тип_результата;

Label внутренние метки функции;

Const определение локальных констант;

Type определение типов;

Var описание локальных переменных функции;

Begin

Основной блок функции

End;

 

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

Термин «ЛОКАЛЬНЫЙ» применимо к меткам, константам и переменным, описанным в разделе FUNCTION, означает, что эти метки, константы и переменные с этими именами могут фигурировать лишь в тексте основного блока функции. При этом следует давать имена локальным переменным, константам и даже – входным параметрам, отличающиеся от имен параметров, фигурирующих в основном блоке программы (так называемых ГЛОБАЛЬНЫХ параметров) во избежание путаницы.

Совпадение меток может привести к выдаче сообщения об ошибке «Duplicate Label Number», а локальная переменная «перекроет» свою глобальную напарницу, что очень трудно предугадать в процессе анализа программы. Приведенная структура в точности копирует в миниатюре структуру программы. Тогда текст функции перевода из градусов в радианы (назовем ее GradRad) будет выглядеть так:

 

Function GradRad(fi:real):real;

begin

GradRad:=fi*Pi/180;

end;

При описании и в тексте функции фигурирует не конкретное значение, а некоторый параметр ‘fi’, для которого и выписана формула. Такой параметр называется ФОРМАЛЬНЫМ. Потом, после вызова функции (например, GradRad(17)) в нее будет передано конкретное значение аргумента (17), для которого функция и будет вычислена. Такой параметр называют ФАКТИЧЕСКИМ.

Для перестраховки fi описан типом real, хотя в нашем примере значения целы. Зато именно такой текст функции годится для любой программы.

Примечание. Тригонометрические функции sin(x) и cos(x) обрабатывают аргумент, представленный в радианной, а не градусной мере. Поэтому выражение sin(30) соответствует синусу 30 радиан, а не 30 градусов и, следовательно, не равно 0.5. Аргумент может быть пересчитан из градусной меры в радианную по формуле

Соответственно значение функции ArcTan(x) получается в радианной мере, и для его пересчета в градусы используют формулу

 

 

Пример: Вычислить значение

 

Program Trigonometry;

Uses crt; {стандартная библиотека}

Var     {раздел описания переменных}

y: real;

Function GradRad(fi: real):real; {функция перевода угла из градусной меры в радианную}

Begin

GradRad:=fi*pi/180

End;

Begin

ClrScr;

y:=sin(GradRad(17))-cos(GradRad(82));

y:=y+sin(GradRad(28))/cos(GradRad(28));

Writeln(' y= ', y:6:2);         {вывод на экран результата}

Repeat Until KeyPressed; {стандартная функция из библиотеки CRT, приводит

 к задержке окна результатов до нажатия любой клавиши}

End.

 

Результат работы программы y=0.685.

 

Процедуры Procedure

 

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

 

Примечание:

Процедура Назначение процедуры Аргумент Примеры
Inc(x) увеличение целого х на 1 Integer inc(d)
Inc(x,k) увеличение целого х на k Integer inc(x, -2)
Dec(x) уменьшение целого х на 1 Integer dec(i)
Dec(x,k) уменьшение целаго х на k Integer dec(j,6)
Randomize изменение программы генерации случайных чисел ______ ______

 

Пример:

Пусть необходимо поменять местами значения вводимых переменных х и у. Эта операция весьма распространена. Поэтому имеет смысл сделать ее стандартной, описав как процедуру. Назовем ее “Swap” (перестановка). Этой процедуре необходимо подавать значения двух переменных. При организации процедур важно помнить одно правило: если передаваемые в процедуру параметры будут в ней изменяться, их описание следует предварять словом Var. Тогда программа примет вид:

Program Change;

Uses CRT;      {стандартная библиотека}

Var

x, y:Real;

Procedure Swap(Var aa, bb:real);

Var  rr:Real;

Begin

rr:=aa; aa:=bb; bb:=rr

end;

Begin

Write(‘x= ‘); Readln(x);

Write(‘y= ‘); Readln(y);

Swap(x,y);

Writeln(‘x= ‘,x:4:1,’ y = ‘,y:4:1); {вывод на экран результата}

Repeat Until KeyPressed; {стандартная функция из библиотеки CRT, приводит

к задержке окна результатов до нажатия любой клавиши}

End.

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

x=4

y=6

x= 6.0 y= 4.0

 

 

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

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

Следует отметить:

v выбор последовательности операторов осуществляется во время выполнения программы в зависимости от выполнения условия;

v условие – это выражение логического типа, которое может принимать одно из двух значений: true (истина-условие выполняется) или false (ложь-условие не выполняется);

v при помощи логических операций and (логическое «И») и or (логическое «ИЛИ») из простых условий можно строить сложные.

 

Оператор ‘IF-THEN’

Оператор IF-THEN (“Если-то”) форма записи имеет вид:

If (условие) Then Begin

Оператор;

Оператор;

...

End;

Работает следующим образом: Если стоящее в скобках условие истинно, то выполняются операторы, стоящие между Begin и End, а если ложно – программа сразу переходит на конец оператора.

Отличие оператора If-Then от оператора If-Then-Else состоит в том, что условная структура If-Then-Else реализует так называемое двойное ветвление.

 

Пример 1. Вычислить квадратный корень из числа x.

При вводе отрицательного значения x ЭВМ выведет сообщение об ошибке “Invalid Floating Point Operation”. Нужно составить программу, которая в случае отрицательного значения x выводила на экран сообщение: 'Недопустимое значение', в случае x>=0 выводила результат.

Фрагмент программы:

              Write(‘x =’); Readln(x);

If (x>=0) Then

Begin

y:=Sqrt(x);

Writeln(‘Sqrt(x)=’,y:6:2);

End;

              If (x<0) Then Write (‘Недопустимое значение’);

 

Любое условие есть величина логическая (типа Boolean), принимающая значение True в том случае, когда условие истинно, и False – в обратном случае. В силу этого обстоятельства условие

If (x<0) then Оператор;

являет собой сокращенную запись условия

 

If ((x<0)=True) then Оператор;

Более краткое If (x<0) then Оператор;

 

 

Оператор ‘IF-THEN-ELSE’

Оператор IF-THEN-ELSE (“Если-То-Иначе”) предусматривает двойное ветвление, форма записи имеет вид:

If (условие) Then

Begin

Оператор1;

End

Else

Begin

Оператор2;

End;

Поставленная после первого End точка с запятой ‘;’ (разделитель операторов) приведет к ошибке, тогда будет означать конец оператора. После ELSE точку с запятой не ставить.

Пример1.Найти максимум из двух целых чисел a и b, введенных с клавиатуры.

Фрагмент программы:

if (a>b)  then max:=a else max:=b;

 

Тройное ветвление

Выбор идет из трех возможных вариантов.

 

Пример 1Ввести x  и вычислить y:

 

Program TI_1;

Uses crt;

Var x,y:real;

Begin

Write(‘x=’); readln(x);

If x<-1 then y:=ln(abs(x)) else

    If (x>=-1) and (x<0) then y:=sin(x) else y:=cos(x);

Writeln(‘x=’,x:5:2,’ y=’,y:5:2);

Readkey; {функция будет ожидать нажатия на любую клавишу}

End.

b<c
+
+
_
_
min:=c
_
+
min:=b
min:=a
a<c
a<b
Алгоритм поиска min и max и его программная реализация

Блок схема

 

 

Пример 1.Найти min из трех вещественных чисел.

Program Poiskmin;

Uses crt;

Var a,b,c,min:real;

Begin

Write(‘a=’); Readln(a);

Write(‘b=’); Readln(b);

Write(‘c=’); Readln(c);

If (a<b) Then If (a<c) Then min:=a Else

If (b<c) then min:=b Else min:=c;

Writeln(‘min(a,b,c)=’,min:6:2);

Repeat Until KeyPressed;

End.

 

 

Пример 2. Найти max из трех вещественных чисел.

 

Фрагмент программы:

If (a>b) Then If (a>c) Then max:=a Else

If (b>c) then max:=b Else max:=c;

 

Более сокращенный вариант

If (a>b) Then max:=a Else max:=b;

If (c>max) Then max:=c;

 

Оператор варианта ‘CASE…OF’

 

Сложное ветвление N-го порядка имеет один существенный недостаток: Приходится писать большое количество однотипных операторов IF-THEN-ELSE. Такую структуру может заменить компактный оператор варианта CASE-OF. Синтаксис этого оператора представлен ниже:

 

CASE имя_переменной OF

              <Вариант1>: [Оператор_1];

                       ………………….

              <ВариантN>: [Оператор_N];

              ELSE [Оператор_N+1];

              END;

 

 

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

 

Пример:

 

Program ZACHET;

Uses crt;

Label metka;

Var examination:char;

Begin

metka: write(‘зачет (Y/N)?-’);

    readln(examination);

Case examination of

‘Y’: write(‘зачет’);

‘N’: write(‘не зачет’);

‘I’: write(‘не явка’);

Else Goto metka;

End;

Repeat Until KeyPressed;

End.

 

На экране

зачет (Y/N)?-Да нужно повторить ввод, т.к. набрано на русском языке.

зачет (Y/N)?-Y

зачет

Лекция 7

Циклические структуры. Вложенные циклы. Рекурсивные функции. Операторы прерывания.

 

Циклическим (циклом) называется такой алгоритм, в котором некоторая группа действий повторяется неоднократно. Группа действий, повторяемая в цикле, называется телом цикл. Однократное выполнение тела цикла называется шагом. Для того чтобы алгоритм не зацикливался (не стал бесконечным), циклом надо управлять. Для это используется специальная величина – параметр цикла. Параметр (переменная) цикла – это величина, которая изменяется от шага к шагу и по значению которой определяются, продолжать исполнение цикла или закончить его. Если количество повторений известно заранее, то это определенный цикл, если определяется в процессе работ цикла, то это неопределенный цикл.

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

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

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

 

Определенные циклы ‘FOR…DO…’

Определенный цикл FOR-DO (цикл со счетчиком) имеет следующую структуру:

(ОТ                                             ДО)

FOR <перем_цикла>:=<нач_знач> TO <конеч_знач> DO

Begin

    <тело_цикла>

    End;

<перем_цикла> - переменная цикла- любая переменная целочисленного типа (Например INTEGER, кроме REAL). Переменную цикла также называют счетчиком.

<нач_знач> - начальное значение - выражение того же типа;

<конеч_знач> - конечное значение - выражение того же типа;

<тело_цикла> - произвольная последовательность операторов Турбо Паскаля;

При выполнении оператора FOR вначале вычисляется выражение <нач_знач> и осуществляется присваивание <перем_цикла>:=<нач_знач>. После этого циклически повторяется:

- проверка условия <перем_цикла> <= <конеч_знач>; если условие не выполнено, оператор FOR завершает свою работу;

- выполнение операторов входящих в <тело_цикла>;

- наращивание переменной <перем_цикла> на единицу;

Первая форма записи оператора FOR с последовательным увеличением счетчика.

ü Для целой переменной строится цикл с шагом +1 по возрастанию параметра

for i:=1 to 8 do Оператор;

В этом случае i последовательно принимает значения 1,2,3,..,8.

ü Попытка организовать цикл «от большего к меньшему»

for i:=8 to 1 do Оператор;

не приведет к ошибке, но будет пройден лишь один шаг (i=8).

 

Пример: Написать программу для вычисления суммы N первых натуральных чисел, т.е. требуется вычислить 1+2+3+…N

 

Program PRIMER;

Var

N: integer;           {последнее число суммы- исходное данное}

i, s:integer;                        {счетчик цикла и слагаемое, сумма результата}

Begin

Write(‘N’);Readln(N); {Вводим значение N}

s:=0;                   {Начальное значение суммы}

for i:=1 to N do     {Цикл подсчета суммы}

s:=s+i;

Writeln(‘S = ’, s);     {вывод на экран результата}

End.

 

Замечание 1. Условие <перем_цикла> <= <конеч_знач>, управляющее работой

цикла FOR-DO проверяется перед выполнением тела цикла: если условие не выполняется в самом начале работы цикла FOR-DO, цикл не будет выполнен ни разу.

Замечание 2. Шаг наращивания параметра цикла строго постоянен и равен 1.

Замечание 3. Внутри



Поделиться:


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

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