Скачать презентацию Язык программирования Паскаль Основные типы данных и операции Скачать презентацию Язык программирования Паскаль Основные типы данных и операции

Язык программирования Паскаль 3.ppt

  • Количество слайдов: 69

Язык программирования Паскаль Основные типы данных и операции над ними. Работа с текстовыми файлами Язык программирования Паскаль Основные типы данных и операции над ними. Работа с текстовыми файлами 1

Повторение 1. Определите, сколько раз выполнится тело цикла. p: =1; a: =1; while p<60 Повторение 1. Определите, сколько раз выполнится тело цикла. p: =1; a: =1; while p<60 do a: =2*a; p: =p*a; 2. Выбрать фрагмент программы, в котором ищется произведение 2*4*6*8: A. P: =1; i: =0; WHILE i<=8 DO i: =i+2; P: =P*i; B. P: =1; i: =0; WHILE i<8 DO i: =i+2; P: =P*i; C. P: =1; i: =0; WHILE i<8 DO BEGIN i: =i+2; P: =P*i END; D. P: =1; i: =1; WHILE i<8 DO BEGIN P: =P*i; i: =i*2 END; E. P: =0; i: =0; WHILE i<8 DO BEGIN i: =i+2; P: =P*i END; 2

Повторение 3. Определите минимальное значение переменной N в начале выполнения фрагмента программы, если в Повторение 3. Определите минимальное значение переменной N в начале выполнения фрагмента программы, если в конце ее выполнения переменная k приняла значение 217. k: =0; i: =1; while i<=N do begin if (i mod 2 = 0) and (i mod 4 <> 0) then k: =k+1; i: =i+1; end; k: =(k+1)*(k*k-k+1); 3

Повторение 4. Найдите неверную (для языка Паскаль) конструкцию: (k, i – переменные целого типа, Повторение 4. Найдите неверную (для языка Паскаль) конструкцию: (k, i – переменные целого типа, y – переменная вещественного типа) A. k: =81; y: =1; for i: =1 to sqrt(k) do y: =2*y; B. k: =81; y: =1; for i: =1 to 9 do y: =2*y; C. k: =81; y: =1; for i: =1 to trunc(sqrt(k)) do y: =2*y; D. k: =81; y: =1; for i: =1 to round(sqrt(k)) do y: =2*y; E. k: =81; y: =1; for i: =1 to sqr(k) do y: =2*y; 4

l Используя разложение в ряд Тейлора, найти значение sin (x) с заданной точностью e: l Используя разложение в ряд Тейлора, найти значение sin (x) с заданной точностью e: Вариант 1. Определить формулу общего члена. Вариант 2. Вывести рекуррентное соотношение. 5

Основные типы данных и операции над ними Величины в программировании, так же, как и Основные типы данных и операции над ними Величины в программировании, так же, как и математические величины, делятся на переменные и константы (постоянные). Для каждой величины должен быть определен тип. Тип определяет: l множество допустимых значений того или иного объекта; l множество операций, которые к нему применимы; l формат внутреннего представления данных в памяти ЭВМ. В отношении типов объектов Паскаль является статическим языком. Это означает, что тип объекта, например, переменной, определяется при ее описании и не 6 может быть изменен в дальнейшем.

 ТИПЫ ДАННЫХ В ПАСКАЛЕ: l l l l Простые: Порядковые Целые Логический Символьный ТИПЫ ДАННЫХ В ПАСКАЛЕ: l l l l Простые: Порядковые Целые Логический Символьный Перечислимые Интервальный Вещественные Структурированные: Массивы Строки Множества Записи Файлы Указатели 7

Порядковый тип – это тип, состоящий из счётного количества значений, которые можно пронумеровать. На Порядковый тип – это тип, состоящий из счётного количества значений, которые можно пронумеровать. На этом множестве значений существуют понятия «следующий» и «предыдущий» . К порядковым типам относятся все целые типы, логический, символьный тип, перечислимый и интервальный тип. 8

Допустимые операции для целого типа данных: - присваивание; - все арифметические: +, – , Допустимые операции для целого типа данных: - присваивание; - все арифметические: +, – , *, /, div, mod (при обычном делении [/] результат вещественный!); - сравнение <, >, >=, <>, =. l Допустимые операции для вещественного типа: - присваивание; - все арифметические: +, - , *, / ; - сравнение: <, >, >=, <>, =. l 9

Стандартные процедуры и функции, применяемые к числовым типам Название Тип аргумента Тип результата abs(x) Стандартные процедуры и функции, применяемые к числовым типам Название Тип аргумента Тип результата abs(x) I, R Абсолютное значение х sqr(x) I, R Квадрат x sqrt(x) I, R R Квадратный корень из х (х>0) sin(x) I, R R Синус х (х задается в радианах) cos(x I, R R Косинус х(х задается в радианах) arctan(x) I, R R Арктангенс х exp(x) I, R R Эспонента (ex) ln(x) I, R R Натуральный логарифм х (x>0) R R Целая часть числа I, R R Дробная часть числа round(x) R Long. Int Округление числа до ближайшего целого trunc(x) R Long. Int Округление числа до ближайшего превышающего x по модулю Inc(x) I I Увеличивает х на 1 (x: =x+1; ) Dec(x) I I Уменьшает х на 1 (x: =x-1; ) Inc(x, n) I I Увеличивает х на n (x: =x+n; ) Dec(x, n) I I Уменьшает х на n (x: =x-n; ) Odd(x) I Boolean int(x) frac(x) Результат вычисления Возвращает True, если х - нечетное число целого, не 10

Примеры: l l l abs(-6. 8)=6. 8 sqr(4)=16 int(-3. 25)=-3 frac(6. 45)=0. 45 round(-1 Примеры: l l l abs(-6. 8)=6. 8 sqr(4)=16 int(-3. 25)=-3 frac(6. 45)=0. 45 round(-1 -1. 75)=-3 trunc(-2. 75)=-2 11

l Турбо Паскале не содержит некоторые часто используемые математические функции, поэтому при их вычислении l Турбо Паскале не содержит некоторые часто используемые математические функции, поэтому при их вычислении используют эквивалентные математические формулы: Функция Запись в программе xy exp(y*ln(x)) tg(x) sin(x)/cos(x) arcsin(x) arctan(x/sqrt(1 -x*x)) arccos(x) arctan(sqrt(1 -x*x)/x) logax ln(x)/ln(a) 12

l l При возведении в небольшую целую степень вместо операции возведения в степень рекомендуется l l При возведении в небольшую целую степень вместо операции возведения в степень рекомендуется использовать операцию умножения, поскольку возведение в степень выполняется на несколько порядков дольше умножения и не позволяет обрабатывать отрицательные аргументы. Необходимо учитывать, что при исполнении программы автоматически не контролируется выход значения целой величины за границы диапазона. Если это происходит, то в этом случае выдаётся неверный результат, поэтому программист должен сам предусматривать в своей программе предупреждение целочисленного переполнения. 13

Задание: l. При вычислении какого из выражений результат будет отличным от ‑ 2? A. Задание: l. При вычислении какого из выражений результат будет отличным от ‑ 2? A. (-20) div 10 B. (-2) mod 7 C. round(-2. 95) D. trunc(-2. 05) E. trunc(-2. 95) 14

Символьный тип: Char Допустимые операции для типа Char: - присваивание; - сравнение: <, >, Символьный тип: Char Допустимые операции для типа Char: - присваивание; - сравнение: <, >, >=, <>, =. Большим считается тот символ, который имеет больший ASCII-номер. l Пример Var a, b, c: char; Begin …. a: =’r’; b: =’ 3’, c: =#65; l 15

Стандартные процедуры и функции, применяемые к символьному типу Название Тип аргумента Тип результата Результат Стандартные процедуры и функции, применяемые к символьному типу Название Тип аргумента Тип результата Результат вычисления pred(x) Char предыдущее значение x succ(x) Char следующее значение x ord(x) Char Byte порядковый номер значения x chr(x) Byte Char символ с порядковым номером x Upcase(ch) Char преобразует символ ch из строчной латинской буквы в прописную. Если ch не является строчной латинской буквой, то её значение не изменится Справедливо равенство: chr(ord(x))=x 16

Примеры: ord(‘a’)=97 chr(ord(‘c’))=’c’ Pred('F') = 'E' ; Succ('Y') = 'Z' N: =ord(‘d’)-ord(‘a’)=3 l Значения Примеры: ord(‘a’)=97 chr(ord(‘c’))=’c’ Pred('F') = 'E' ; Succ('Y') = 'Z' N: =ord(‘d’)-ord(‘a’)=3 l Значения символьного типа можно сравнивать. Большим считается тот символ, который имеет больший номер в кодировочной таблице: Writeln(‘A’=’Z’); {FALSE} Writeln(‘A’<’Z’); {TRUE} l 17

Задание 1. Вывести в виде таблицы все символы кодировочной таблицы. Program tabl; Var I, Задание 1. Вывести в виде таблицы все символы кодировочной таблицы. Program tabl; Var I, k: integer; Begin K: =0; Write. Ln(‘Таблица символов’); For i: =0 to 255 Do Begin Write(i: 4, ’ Символ ‘, chr(i)); k: =k+1; If k=15 Then Begin Write. Ln; k: =0 End End. 18

Задание 2. Вывести прописные буквы латинского алфавита в следующем виде: A BB CCC …. Задание 2. Вывести прописные буквы латинского алфавита в следующем виде: A BB CCC …. ZZZ…(26 раз) Program latin; Var i: char; J: integer; Begin For I: =’A’ to ‘Z’ Do Begin For j: =1 to Ord(i)-Ord(‘A’)+1 Do Write(i); Write. Ln; End. 19

Стандартные функции, применяемые к порядковым типам Название Результат вычисления pred(x ) предыдущее значение x Стандартные функции, применяемые к порядковым типам Название Результат вычисления pred(x ) предыдущее значение x succ(x ) следующее значение x ord(x) порядковый номер значения x chr(x) символ с порядковым номером x Low(x) наименьшее и наибольшее значения величин данного типа High(x ) 20

Примеры: ord(5)=5 pred(8)=7. . . Var x: integer; . . . writeln(Low(x), '. . Примеры: ord(5)=5 pred(8)=7. . . Var x: integer; . . . writeln(Low(x), '. . ', High(x)); { -32768. . 32767 } l 21

Логический тип: Boolean. Может принимать только два значения: True и False. l Слова False Логический тип: Boolean. Может принимать только два значения: True и False. l Слова False и True определены в языке и являются логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа являются результатом вычислений условных и логических выражений и участвуют во всевозможных условных операторах языка. l Допустимые операции: - присваивание; - сравнение: <, >, >=, <>, =; - логические операции: NOT, OR, AND, XOR. l 22

Таблица истинности A B not A A and B A or B A xor Таблица истинности A B not A A and B A or B A xor B T T F T F F F T T F F F F T T Приоритеты логических операций: 1) not 2) and 3) or 4) xor. 23

Для типа Boolean выполняются следующие равенства: ord(false)=0, ord(true)=1, false<true, pred(true)=false, succ(false)=true. l Примеры логических Для типа Boolean выполняются следующие равенства: ord(false)=0, ord(true)=1, falseB; 4) (A=B) and (C<=D). l Операции отношений (= , <>, <=, <, >) имеют более высокий приоритет, чем логические операции, поэтому их следует заключать в скобки при использовании по отношению к ним логических операции. l 24

Задача. Напечатать таблицу с результатами действия логических операторов (not и and). Использоваться цикл по Задача. Напечатать таблицу с результатами действия логических операторов (not и and). Использоваться цикл по логическим переменным. program Example; var A, B: boolean; begin writeln('Значения логических операторов: '); writeln; {для оператора not} for A: =TRUE downto FALSE do {TRUE больше FALSE!} writeln('not ', A, ' = ', not(A)); writeln; {для оператора and} for A: = FALSE to TRUE do for B: = FALSE to TRUE do writeln(A, ' and ', B, ' = ', A and B); end. 25

Раздел описания констант l l Константам, используемым в программе, можно поставить в соответствие некоторое Раздел описания констант l l Константам, используемым в программе, можно поставить в соответствие некоторое имя и в дальнейшем обращаться к ним по этим именам. Назначение имени константам производится в разделе описания констант: Const <идентификатор>=<значение>; Константы удобно использовать, если в программе часто используется одно и то же значение, которое может измениться (например, ставка подоходного налога). После объявления константы её можно вызывать по имени, но изменять её значение нельзя. 26

Примеры: CONST Min = 0; { константа - целое число } Max = 100; Примеры: CONST Min = 0; { константа - целое число } Max = 100; { константа - целое число } e = 2. 7; { константа - вещественное число } Spec. Char = ''; {константа - символ } Help. Str = 'Нажмите клавишу F 1'; {константа - строка } OK = True; { логическая константа "истина" } l l Тип константы не указывается. Он определяется автоматически при анализе значения константы. 27

Турбо Паскаль дает возможность определять константы как значения выражений из чисел, некоторых арифметических функций Турбо Паскаль дает возможность определять константы как значения выражений из чисел, некоторых арифметических функций языка и ранее определенных констант. Так приведенный выше список констант можно продолжить l CONST Interval = Max - Min + 1; e 2 = e*e; Big. Help. Str = Help. Str + ' для подсказки'; l В выражениях могут использоваться все математические операции (+, -, /, *, div, mod), логические операции (not, or, and, xor) и операции отношения. l В Турбо-Паскале есть несколько зарезервированных констант, которые не нужно описывать в программе. Например, PI=3. 141592653 E+00, Max. Int=32767. l 28

Типизированные константы Типизированная константа – это переменная, которой в разделе описания типов присвоено начальное Типизированные константы Типизированная константа – это переменная, которой в разделе описания типов присвоено начальное значение. Значения типизированных констант могут менять в ходе выполнения программы: <идентификатор> : <тип> = <значение>; l Пример. Const card: integer=1267; size: real=12. 62; Name. Month: Array[1. . 12] Of String[10]=(‘Январь’, ’Февраль’, ’Март’, ’Апрель’, ’Май’, ’Июнь’, ’Июль’, ’Август’, ’Сентябрь’, ’Октябрь’, ’Ноябрь’, ’Декабрь’); Begin card: =card+2; size: =size*card; Writeln(Name. Month[10]); End. l 29

Характеристики типизированных констант: l l при описании типизированных констант явно указывается их тип; типизированные Характеристики типизированных констант: l l при описании типизированных констант явно указывается их тип; типизированные константы могут менять свое значение по ходу выполнения программы также как обычные переменные; типизированные константы описываются в разделе CONST и также, как простые константы, получают при описании (начальное) значение; т. к. типизированные константы это, на самом деле, обычные переменные, их нельзя использовать в описаниях других констант и типов. 30

Раздел описания типов l l l В языке Паскаль для описания типа в общем Раздел описания типов l l l В языке Паскаль для описания типа в общем случае используется зарезервированное слово Type. Формат: type имя_типа = значение_типа; Перечислимый и интервальный тип относятся к типам, определяемым пользователем. 31

Перечислимый тип данных Перечислимыми называются такие типы, которые содержат лишь ограниченное, конечное множество возможных Перечислимый тип данных Перечислимыми называются такие типы, которые содержат лишь ограниченное, конечное множество возможных значений. Перечислимый тип задают в программе, просто перечисляя набор элементов-значений. l Например, перечисляемый тип Svetofor описывается в разделе описания типов. Описание переменных, принадлежащих к скалярным типам, которые объявлены в разделе описания типов, производится с помощью имен типов. Type Svetofor=(RED, YELLOW, GREEN); var S: Svetofor; l Это означает, что переменная S может принимать значения RED, YELLOW или GREEN. l Переменным перечислимого типа можно присваивать константы, входящие в описание типа: S: = YELLOW; { верно} S: = 10; { неверно} l 32

l l Перечислимый тип РАДУГА (Raduga) может содержать константы RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, l l Перечислимый тип РАДУГА (Raduga) может содержать константы RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, VIOLET (КРАСНЫЙ, ОРАНЖЕВЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ) Каждое значение может принадлежать только одному из перечисляемых типов, заданных в программе. Например, перечисляемый тип Svetofor не может быть определен в одной программе с типом Raduga, так как оба типа содержат одинаковые константы. 33

Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля: 0, 1, 2 Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля: 0, 1, 2 и т. д. l К перечисляемым переменным и константам могут быть применены операции отношения и стандартные функции Pred, Succ, Ord. l Максимальная мощность перечисляемого типа - 256 значений. l Например, Writeln(ord(green)); - возвратит место, т. е. 2. Writeln(ord(red)); - возвратит 0. Succ (RED) = YELLOW Pred (RED) выдаст ошибку – выход за границу диапазона. l 34

l Выражения и константы перечисляемого типа допустимы для использования в операторе CASE. l Задача. l Выражения и константы перечисляемого типа допустимы для использования в операторе CASE. l Задача. Сотрудники отдела имеют следующие зарплаты: Иванов, Петров – 6000 с. , Сидоров – 5000 с. , Федоров Гаврилов по 4000 с. Составить программу для определения суммарной зарплаты сотрудников отдела. При составлении программы использовать перечислимый тип. 35

Program P 7; type Tfam =(Ivanov, Petrov, Sidorov, Fedorov, Gavrilov); Var S: real; I: Program P 7; type Tfam =(Ivanov, Petrov, Sidorov, Fedorov, Gavrilov); Var S: real; I: Tfam; // объявление переменной типа Tfam Begin S : = 0; // использование переменной I for I: = Ivanov to Gavrilov do case I of Ivanov, Petrov: S : = S + 6000; Sidorov: S : = S + 5000; Fedorov, Gavrilov: S : = S + 4000; end; writeln ('Summa =', S: 6: 0); end. l В данном примере счетчик цикла является переменной типа перечисления, т. е. порядкового типа. Применение переменных типа перечисления повышает наглядность программы и позволяет автоматически контролировать значения переменных. Так, например, переменная I в программе может принимать только 36 одно из пяти заданных значений.

type month=(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); {Имя type month=(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); {Имя перечислимого типа} var m: month; . . . l 1. В Паскале отсутствуют средства, которые бы позволяли осуществить непосредственный ввод - вывод переменных перечисляемого типа, но можно вывести код: Read (Month); {ошибка} Writeln (Month); {ошибка} l 2. C данными перечислимого типа нельзя выполнять арифметические операции: month : = jun+feb; {ошибка} l 3. Не допустимы русские буквы. l 4. Можно вывести код Write(Ord(M)). l 5. Операция отношения и логические операции допустимы для значений перечисления одного и того же типа. If (M > feb) And (M < jun) Then Write ('Весенний месяц'); 37

Интервальный тип данных Интервальные типы данных задаются только границами своего диапазона. l Отрезок задается Интервальный тип данных Интервальные типы данных задаются только границами своего диапазона. l Отрезок задается диапазоном от минимального до максимального значения констант, разделенных двумя точками. l Нижняя граница должна быть меньше верхней. l В качестве констант могут быть использованы константы, принадлежащие к любому порядковому типу. l Скалярный тип, на котором строится отрезок, называется базовым типом. l Например: type Numbers = (Zero, One, Two, Three, Four, Five); Num = Two. . Four; {диапазон на базе типа Numbers} month = 1. . 12; l 38

Программист может создавать и собственные типы данных, являющиеся комбинацией нескольких стандартных типов. Например: type Программист может создавать и собственные типы данных, являющиеся комбинацией нескольких стандартных типов. Например: type znach = 'a'. . 'z', 'A'. . 'Z', '_', '0. . 9'; l Этот тип состоит из объединения нескольких интервалов, причем в данном случае изменен порядок латинских букв: если в стандартном типе char 'A' < 'a', то здесь, наоборот, 'a' < 'A'. Для величин этого типа выполняются следующие равенства: l pred('9')='8'; ord('b')= 2. l Над переменными, относящимися к интервальному типу, могут выполняться все операции и применяться все стандартные функции, которые допустимы для соответствующего базового типа. l 39

Пример: Даны следующие описания (считаем, что русские буквы допустимы) Type месяц = (январь, февраль, Пример: Даны следующие описания (считаем, что русские буквы допустимы) Type месяц = (январь, февраль, март, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь); var m: месяц; Определить сезон, на который приходится месяц m. 40

{$R+} program p; type month=(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, {$R+} program p; type month=(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); {Имя перечислимого типа} var m: month; {Переменная, которая может принимать значение любой из констант} m 1: 1. . 12; begin write ('m: '); readln (m 1); case m 1 of 1: m: =jun; 2: m: =feb; 3: m: =mar; 4: m: =apr; 5: m: =may; 6: m: =jun; 7: m: =jul; 8: m: =aug; 9: m: =sep; 10: m: =oct; 11: m: =nov; 12: m: =dec; end; Case m of dec, jan, feb: writeln('winter'); mar. . may: writeln('spring'); jun. . aug: writeln ('summer'); sep. . nov: writeln('autumn'); end. 41

Совместимость типов В языке Паскаль введены понятия эквивалентности и совместимости типов. Два типа Т Совместимость типов В языке Паскаль введены понятия эквивалентности и совместимости типов. Два типа Т 1 и Т 2 являются эквивалентными (идентичными), если выполняется одно из двух условий: l. Т 1 и Т 2 представляют собой одно и то же имя типа; lтип Т 2 описан с использованием типа Т 1 с помощью равенства или последовательности равенств. l. Например: type T 1 = Integer; T 2 = T 1; T 3 = T 2; Менее строгие ограничения накладываются на совместимость типов. Так, типы являются совместимыми, если: lони эквивалентны; lявляются оба либо целыми, либо действительными; lодин тип - интервальный, другой - его базовый; lоба интервальные с общим базовым; lодин тип - строковый, другой - символьный. 42

РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ l l При работе с файлами в любом языке программирования РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ l l При работе с файлами в любом языке программирования существует два понятия файла. С одной стороны, файл – это поименованная область внешней памяти, в которой содержится какая-либо информация (физический файл). С другой стороны, файл – это один из типов данных, используемых в программирования (логический файл). В программах логические файлы определяются файловыми переменными. 43

Условно файл в Паскале можно изобразить как некоторую ленту, у которой есть начало, а Условно файл в Паскале можно изобразить как некоторую ленту, у которой есть начало, а конец не фиксируется. Элементы файла записываются на эту ленту последовательно друг за другом: l l l где F – имя файла, а F 1, F 2, F 3, F 4 – его элементы. Файл во многом напоминает магнитную ленту, начало которой заполнено записями, а конец пока свободен. Текстовые файлы состоят из символьных строк. Строки могут иметь разную длину, каждая строка заканчивается специальными символами возврата каретки CR (#13) и перевода строки LF (#10). Эти символы во время просмотра файла обычно не выводятся и являются "невидимыми" символами. Оканчивается текстовый файл признаком конца файла (EOF -- сокращение от английского End Of File): Строка 1 #13 #10 Строка 2 #13 #10 . . . EOF 44

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

При работе с текстовыми файлами нужно каждому файлу поставить в соответствие переменную файлового типа При работе с текстовыми файлами нужно каждому файлу поставить в соответствие переменную файлового типа (тип text). l Эта переменная является представителем текстового файла в программе. l Например, если программа считывает исходные данные из двух файлов и выводить результат в один текстовый файл, то нужно объявить три переменных типа text: Var t, s, r: text; l 46

l l l Текстовые файлы, из которых будет считываться информация, создаются вручную, с помощью l l l Текстовые файлы, из которых будет считываться информация, создаются вручную, с помощью встроенного текстового редактора. Имена файлов и расширения могут быть любыми, но обычно используются расширения txt или dat. В такие файлы можно помещать информацию целого, вещественного, символьного и строкового типов. В процессе чтения или записи информация любого типа преобразуется в символьную форму и обратно. Текстовые файлы с результатом работы программы создаются самой программой и могут быть просмотрены с помощью того же встроенного текстового редактора. 47

Стандартные процедуры для работы с текстовыми файлами 1) Assign(<имя файловой переменной>, <имя внешнего файла>) Стандартные процедуры для работы с текстовыми файлами 1) Assign(<имя файловой переменной>, <имя внешнего файла>) – операция назначения. Она предназначена для связывания переменной файлового типа с конкретным внешним файлом. Имя файла – строковая величина, поэтому пишется в кавычках: Assign(f, ’number. dat’); l После выполнения этой операции всё, что будет происходить в программе с файловой переменной f, произойдёт и с файлом number. dat. l Не разрешается связывать с одним физическим файлом более одной файловой переменной. l 48

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

l l 2) Reset(<имя файловой переменной>) – процедура открытия файла для чтения. Эта процедура l l 2) Reset(<имя файловой переменной>) – процедура открытия файла для чтения. Эта процедура ищет на диске уже существующий файл и переводит его в режим чтения, устанавливая указатель на первую позицию файла. Результат выполнения этой процедуры можно изобразить следующим образом: Если происходит попытка открыть для чтения не существующий еще на диске файл, то возникает ошибка ввода/вывода, и выполнение программы будет прервано. 50

l l l 3) Re. Write(<имя файловой переменной>) – процедура открытия файла для записи. l l l 3) Re. Write(<имя файловой переменной>) – процедура открытия файла для записи. Процедура Rewrite(f) (где f – имя файловой переменной) устанавливает файл с именем f в начальное состояние режима записи, в результате чего указатель устанавливается на первую позицию файла. Если ранее в этот файл были записаны какие-либо элементы, то они становятся недоступными. Результат выполнения процедуры rewrite(f) выглядит следующим образом: 51

l l 4) Append(<имя файловой переменной>) – процедура открытия файла для записи. Процедура rewrite l l 4) Append(<имя файловой переменной>) – процедура открытия файла для записи. Процедура rewrite допускает, что файл может не существовать. Если он существует, то происходит его очистка. Append предполагает, что файл уже существует (пусть даже он пустой). При использовании Append запись информации будет происходит в конец существующего файла, то есть старые данные не стираются. Один и тот же файл не может быть одновременно открыт и для чтения, и для записи. 52

5) Read(<имя файловой переменной>, <список переменных>); l Read. Ln(<имя файловой переменной>, <список переменных>); l 5) Read(<имя файловой переменной>, <список переменных>); l Read. Ln(<имя файловой переменной>, <список переменных>); l Эти процедуры предназначены для чтения значений из файлов. Работает аналогично чтению информации с клавиатуры. Состояние файла f и переменной v до выполнения процедуры Read(f, v): l Состояние файла f и переменной v после выполнения процедуры: 53

6) Write(<имя файловой переменной>, <список вывода>); l Write. Ln(<имя файловой переменной>, <список вывода>); l 6) Write(<имя файловой переменной>, <список вывода>); l Write. Ln(<имя файловой переменной>, <список вывода>); l Используются для записи информации в файл, открытый для записи. l При выполнении процедуры write(f, x) в ту позицию, на которую показывает указатель, записывается очередная компонента, после чего указатель смещается на следующую позицию. Естественно, тип выражения х должен совпадать с типом компонент файла. Результат действия процедуры write(f, x) можно изобразить так: Состояние файла f до выполнения процедуры l Состояние файла f после выполнения процедуры 54

l l 7) Close(<имя файловой переменной>) – закрытие файла и освобождение файловой переменной. Операция l l 7) Close(<имя файловой переменной>) – закрытие файла и освобождение файловой переменной. Операция close очень важна, особенно при работе с файлами, открытыми для записи. Её отсутствие повлечёт за собой неверные данные в результирующем файле. При выполнении процедуры close связь файловой переменной с именем дискового файла, установленная ранее процедурой assign, сохраняется, следовательно, файл можно повторно открыть без дополнительного использования процедуры assign. 55

Таким образом, для чтения данных их файла необходимо: l - описать файловую переменную, l Таким образом, для чтения данных их файла необходимо: l - описать файловую переменную, l - выполнить операцию назначения, l - открыть файл для чтения, l - считать данные из файла, l - закрыть файл. l При чтении чисел из файла лучше использовать оператор Read, а не Read. Ln, т. к. в этом случае не важно, как стоят числа внутри одной строки, в разных строках и даже, если между строками существуют пустые. 56

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

Для определения конца строки в файле и конца файла, используются функции: l Eo. F(<имя Для определения конца строки в файле и конца файла, используются функции: l Eo. F(<имя файловой переменной>) – принимает значение «истина» , если достигнут конец файла, l Eo. Ln(<имя файловой переменной>) – принимает значение «истина» , если достигнут конец строки. 58

Пример. В исходном файле inp. dat хранится несколько чисел. Найти их сумму, произведение и Пример. В исходном файле inp. dat хранится несколько чисел. Найти их сумму, произведение и среднее арифметическое. Результат записать в файл rez. dat. 59

Program Example; Var a, sum, mul, sred: real; i: integer; dan 1, dan 2: Program Example; Var a, sum, mul, sred: real; i: integer; dan 1, dan 2: text; Begin Assign(dan 1, ’inp. dat’); Assign(dan 2, ’rez. dat’); Reset(dan 1); Re. Write(dan 2); sum: =0; mul: =1; i: =0; While Not Eof(dan 1) Do Begin Read(dan 1, a); sum: =sum+a; mul: =mul*a; i: =i+1 end; sred: =sum/i; Write. Ln(dan 2, ’Сумма=’, sum); Write. Ln(dan 2, ’Произведение=’, mul); Write. Ln(dan 2, ’Среднее арифметическое=’, sred); Close(dan 1); Close(dan 2) End. 60

Генератор случайных чисел служит для моделирования процессов, которые нужно воспроизвести в реальной ситуации (например, Генератор случайных чисел служит для моделирования процессов, которые нужно воспроизвести в реальной ситуации (например, при программировании некоторых игр нужно смоделировать бросание кубика). l Функция Random (N: integer) возвращает случайное число целого типа, параметр указывает на диапазон значений случайного числа. Функция Random без параметров возвращает случайное вещественное число из диапазона [0 1). l Пример: Y: = Random(10); Z: =Random; l первый оператор присвоит переменной Y случайное целое число из интервала 0<=Y<10 l второй оператор присвоит переменной Z случайное вещественное число в диапазоне [0 1). l Randomize - процедура без параметров, которая инициализирует генератор случайных чисел (в зависимости от показания системных часов). l Если не запускать процедуру Randomize, то последовательность случайных чисел, получаемая с помощью счетчика случайных чисел, будет одна и та же. l Процедура Randomize вызывается один раз, в начале программы. Для получения очередного случайного числа нужно использовать функцию Random. l 61

Формулы получения случайного числа из любого диапазона: l 1. Получение случайного вещественного числа из Формулы получения случайного числа из любого диапазона: l 1. Получение случайного вещественного числа из [0 1) в переменной Z. Z: =Random; l 2. Получение случайного вещественного числа из [0; k) в переменной Z, где k - положительная константа. Z: =k*Random; l 3. Получение случайного вещественного числа из [А; В) в переменной Z, где А, В – константы. l Z: =A+Random*(B-A); l 4. Получение случайного целого числа из [0; k) в переменной Y, где k - положительная целая константа. Y: =Randorn(k); l 5. Получение случайного целого числа из [А; В) в переменной Y, где А, В – целые константы. Y: =A+Random(B-A); 62

Основные элементы языка блок-схем l Блок-схема – графический способ записи алгоритма, состоит из отдельных Основные элементы языка блок-схем l Блок-схема – графический способ записи алгоритма, состоит из отдельных фигур (блоков) для обозначения действий и стрелок, показывающих последовательность выполнения этих действий. Фигура Начало Определение Начало и конец алгоритма Конец Простой процесс (присваивание, вычисление) Сложный процесс, который вспомогательным алгоритмом может реализовываться Условие (решение) Ввод или вывод информации 63

Пример Нарисовать блок-схему решения квадратного уравнения: ax 2+bx+c=0. Исходные данные: a, b, c. Результат: Пример Нарисовать блок-схему решения квадратного уравнения: ax 2+bx+c=0. Исходные данные: a, b, c. Результат: корни уравнения. 64

НАЧАЛО Ввод a, b, c D=b*b-4 ac D 0 X 1= Вывод: Действительных корней НАЧАЛО Ввод a, b, c D=b*b-4 ac D 0 X 1= Вывод: Действительных корней нет X 2= Вывод: X 1, X 2 КОНЕЦ 65

Тестовые задания Текстовый файл ‘INPUT. DAT’, содержит одну строку, в которой записаны числа 1, Тестовые задания Текстовый файл ‘INPUT. DAT’, содержит одну строку, в которой записаны числа 1, 2, 3, 4, 5. Определите, что будет выведено на экран после выполнения программы: program P; var F: text; I, C: integer; begin assign(F, ‘INPUT. DAT’); reset(F); C: =0; while not eof(F) do begin read(F, I); C : = C + I end; writeln(С); close(F) end. l Ответ: 15 66

Какая из перечисленных конструкций на Паскале соответствует данной блок -схеме? l A. If Y Какая из перечисленных конструкций на Паскале соответствует данной блок -схеме? l A. If Y 1 then begin S 1; repeat S 2 until Y 2 end; l B. While Y 1 Do S 1; Repeat S 2 Until Y 2; l C. While Y 1 do Begin S 1 Repeat S 2 Until Y 2 end; l D. Repeat S 1; While Y 2 Do S 2 Until Y 1; l E. If Y 1 then Begin S 1; If Y 2 then S 2 end; 67

Какая из перечисленных конструкций на Паскале соответствует данной блоксхеме? l A. If Y 1 Какая из перечисленных конструкций на Паскале соответствует данной блоксхеме? l A. If Y 1 then If Y 2 then S 1 else S 2; l B. If Y 1 then Begin If Y 2 then S 1 end else S 2; l C. If Y 1 then S 2 else If Y 2 then S 1; l D. If Y 1 then S 2 else Begin If Y 2 then S 1 end; l E. While Y 1 Do begin S 1; If Y 2 then S 1 end; 68

Изобразить блок-схему для приведённого ниже алгоритма. While Y 1 Do Begin Repeat S 1; Изобразить блок-схему для приведённого ниже алгоритма. While Y 1 Do Begin Repeat S 1; S 2; If Y 2 Then S 3 Else Begin S 4; S 5 End Until Y 3; S 6 End; l 69