Презентация "Программирование на языке Паскаль"
Подписи к слайдам:
Программирование
на языке Паскаль
- Языки программирования
- Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора (ассемблер)
- Языки высокого уровня – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера
- для обучения: Бейсик, ЛОГО, Паскаль
- профессиональные: Си, Фортран, Паскаль, Делфи
- для задач искусственного интеллекта: Пролог, ЛИСП
- для Интернета: JavaScript, Java, Perl, PHP, ASP
- Структура программы
- program <имя программы>;
- uses crt;
- const …;{константы}
- var …; {переменные}
- begin
- clrscr;
- … {основная программа}
- readkey;
- end.
- { процедуры и функции }
- комментарии в фигурных скобках не обрабатываются
- Основные понятия
- Константа – постоянная величина, имеющая имя.
- Переменная – изменяющаяся величина, имеющая имя (ячейка памяти).
- Процедура – вспомогательный алгоритм, описывающий некоторые действия (рисование окружности).
- Функция – вспомогательный алгоритм для выполнения вычислений (вычисление квадратного корня, sin).
- Алфавит языка
- 1. Символы, используемые в идентификаторах
- латинские буквы (A-Z)
- цифры
- знак подчеркивания _
- заглавные и строчные буквы не различаются
- 2. Разделители
- любой управляющий символ (коды от 0 до 31)
- пробел
- Комментарий – { }; * *
- имя не может начинаться с цифры
- 3. Специальные символы
- знаки пунктуации [ ],( ), { }, * *, :=, .. , #, $
- знаки операций: буквенные (not, div, or, mod) и небуквенные (+, =, *, /, <, >, <>, <=, >=)
- зарезервированные слова (begin, end)
- 4. Неиспользуемые символы (буквы рус. алфавита, %, &)
- Константы
- const
- i2 = 45; { целое число }
- pi = 3.14; { вещественное число }
- qq = 'Вася'; { строка символов }
- L = True; { логическая величина }
- целая и дробная часть отделяются точкой
- можно использовать русские буквы!
- может принимать два значения:
- True (истина, "да")
- False (ложь, "нет")
- Переменные
- Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы.
- Типы переменных:
- integer { целая }
- real, longint { вещественная }
- char { один символ }
- string { символьная строка }
- boolean { логическая }
- Объявление переменных (выделение памяти):
- var a, b: integer;
- Q: real;
- s1, s2: string;
- Типы данных
- Вещественные
- Массивы
- Простые
- Структурированные
- Указатели
- Строки
- Процедурные
- Объекты
- Массивы
- Записи
- Множества
- Файлы
- Порядковые
- Вещественные
- Целые
- Логические
- Символьный
- Перечисляемый
- Тип-диапазон
- Изменение значений переменной
- Оператор – это команда языка программирования высокого уровня.
- Оператор присваивания служит для изменения значения переменной.
- Пример:
- program qq;
- var a, b: integer;
- begin
- a := 5;
- b := a + 2;
- a := (a + 2)*(b – 3);
- end.
- a
- ?
- 5
- 5
- b
- ?
- 5+2
- 7
- a
- 5
- 7*4
- 28
- Оператор присваивания
- Общая структура:
- <имя переменной> := <выражение>;
- Арифметическое выражение может включать
- константы
- имена переменных
- знаки арифметических операций:
- + - * / div mod
- вызовы функций
- круглые скобки ( )
- умножение
- деление
- деление нацело
- остаток от деления
- program qq;
- var a, b: integer;
- x, y: real;
- begin
- a := 5;
- 10 := x;
- y := 7,8;
- b := 2.5;
- x := 2*(a + y);
- a := b + x;
- end.
- Какие операторы неправильные?
- имя переменной должно быть слева от знака :=
- целая и дробная часть отделяются точкой
- нельзя записывать вещественное значение в целую переменную
- Арифметические функции
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Порядок выполнения операций
- вычисление выражений в скобках
- умножение, деление, div, mod слева направо
- сложение и вычитание слева направо
- 2 3 5 4 1 7 8 6 9
- z := (5*a*c+3*(c-d))/a*(b-c)/ b;
- 2 6 3 4 7 5 1 12 8 11 10 9
- x:=(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));
- Оператор ввода
- read ( a ); { ввод значения переменной a}
- read ( a, b ); { ввод значений переменных a и b}
- Как вводить два числа?
- через пробел:
- 25 30
- через Enter:
- 25
- 30
- a
- 25
- b
- 30
- a
- 25
- b
- 30
- Оператор вывода
- write ( a ); { вывод значения переменной a}
- writeln ( a ); { вывод значения переменной a и переход на новую строчку}
- writeln ( 'Привет!' ); { вывод текста}
- writeln ( 'Ответ: ', c ); { вывод текста и значения переменной c}
- writeln ( a, '+', b, '=', c );
- Форматы вывода
- program qq;
- var i: integer;
- x: real;
- begin
- i := 15;
- writeln ( '>', i, '<' );
- writeln ( '>', i:5, '<' );
- x := 12.345678;
- writeln ( '>', x, '<' );
- writeln ( '>', x:10, '<' );
- writeln ( '>', x:7:2, '<' );
- end.
- всего символов
- всего символов
- в дробной части
- Задания для самостоятельной работы
- Составить программу, переводящую введенные с клавиатуры мили в километры(1 миля =1,852 км)
- 2. Составить программу, запрашивающую 2 числа и выдающую их сумму.
- Задания для самостоятельной работы
- 4. Составить программу, запрашивающую имя и приветствующую по этому имени.
- 3. Вычислить периметр и площадь прямоугольника, по введенным с клавиатуры сторонам.
- Операторы языка Паскаль
- Простые операторы (оператор присваивания, оператор безусловного перехода Goto, пустой оператор)
- Структурированные операторы (составной оператор, условный оператор IF, условный оператор CASE, оператор цикла REPEAT, оператор цикла WHILE, оператор цикла FOR)
- Условный оператор IF
- if <условие> then begin
- {что делать, если условие верно}
- end
- else begin
- {что делать, если условие неверно}
- end;
- Особенности:
- перед else НЕ ставится точка с запятой
- вторая часть (else …) может отсутствовать (неполная форма)
- если в блоке один оператор, можно убрать слова begin и end
- Разветвляющиеся алгоритмы
- Задача. Ввести два целых числа и вывести на экран наибольшее из них.
- Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.
- Блок-схема
- начало
- max:= a;
- ввод a,b
- вывод max
- a > b?
- max:= b;
- конец
- да
- нет
- полная форма ветвления
- блок "решение"
- Программа
- uses crt;
- var a, b, max: integer;
- begin
- clrscr;
- writeln('Введите два целых числа');
- read ( a, b );
- if a > b then begin
- end
- else begin
- end;
- writeln ('Наибольшее число ', max);
- readkey;
- end.
- max := a;
- max := b;
- полная форма условного оператора
- Сложные условия
- Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
- not – НЕ (отрицание, инверсия)
- and – И (логическое умножение, конъюнкция, одновременное выполнение условий)
- or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий)
- xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих)
- Простые условия (отношения)
- < <= > >= = <>
- равно
- не равно
- Сложные условия
- Порядок выполнения
- выражения в скобках
- not
- and
- or, xor
- <, <=, >, >=, =, <>
- Особенность – каждое из простых условий обязательно заключать в скобки.
- Пример
- 4 1 6 2 5 3
- if not (a > b) or (c <> d) and (b <> a)
- then begin
- ...
- end
- Сложные условия
- Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ "подходит" или "не подходит").
- Особенность: надо проверить, выполняются ли два условия одновременно.
- Вариант 1. Алгоритм
- начало
- ввод x
- 'подходит'
- конец
- да
- нет
- x >= 25?
- да
- нет
- x <= 40?
- 'не подходит'
- 'не подходит'
- Вариант 1. Программа
- uses crt;
- var x: integer;
- begin
- clrscr;
- writeln('Введите возраст');
- read ( x );
- if x >= 25 then
- if x <= 40 then
- writeln ('Подходит')
- else writeln ('Не подходит')
- else
- writeln ('Не подходит');
- readkey;
- end.
- Вариант 2. Алгоритм
- начало
- ввод x
- 'подходит'
- да
- нет
- x >= 25 и
- x <= 40?
- 'не подходит'
- конец
- Вариант 2. Программа
- uses crt;
- var x: integer;
- begin
- clrscr;
- writeln('Введите возраст');
- read ( x );
- if (x >= 25) and (x <= 40) then
- writeln ('Подходит')
- else writeln ('Не подходит')
- readkey;
- end.
- сложное условие
- Задания для самостоятельной работы
- 1. Составить программу, запрашивающую возраст и отвечающую «Привет друг» если возраст введен меньше 16 лет и отвечающую «Не знаю тебя» в противном случае.
- 2. Составить программу - отзывающуюся только на имя «Саша»
- Задания для самостоятельной работы
- 3. Составьте программу, увеличивающую введенное число на 1 , если оно больше или равно100 и уменьшающее число на 1 в противном случае.
- 4. Составить программу, вычисляющую функцию:
- Операторы циклы
- Цикл – это многократное выполнение одинаковой последовательности действий.
- цикл с известным числом шагов
- цикл с неизвестным числом шагов (цикл с условием)
- Оператор цикла FOR
- for <переменная> := <начальное значение> to
- <конечное значение> do begin
- {тело цикла}
- end;
- Увеличение переменной на 1:
- for <переменная> := <начальное значение> downto
- <конечное значение> do begin
- {тело цикла}
- end;
- Уменьшение переменной на 1:
- Оператор цикла FOR
- начало
- i, i2, i3
- конец
- i2 := i * i;
- i3 := i2 * i;
- i := 1,8
- блок "цикл"
- тело цикла
- Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b).
- Особенность: одинаковые действия выполняются 8 раз.
- Программа
- uses crt;
- var i, i2, i3: integer;
- begin
- clrscr;
- for i:=1 to 8 do begin
- i2 := i*i;
- i3 := i2*i;
- writeln(i:4, i2:4, i3:4);
- end;
- readkey;
- end.
- переменная цикла
- начальное значение
- конечное значение
- Цикл FOR с уменьшением переменной
- Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке).
- Особенность: переменная цикла должна уменьшаться.
- Решение:
- ...
- for i:=8 1 do begin
- i2 := i*i;
- i3 := i2*i;
- writeln(i:4, i2:4, i3:4);
- end;
- ...
- downto
- Оператор цикла WHILE
- while <условие> do begin
- {тело цикла}
- end;
- Особенности:
- можно использовать сложные условия:
- если в теле цикла только один оператор, слова begin и end можно не писать:
- while (a<b) and (b<c) do begin
- {тело цикла}
- end;
- while a < b do
- a := a + 1;
- Цикл с условием
- Особенности:
- условие пересчитывается каждый раз при входе в цикл
- если условие на входе в цикл ложно, цикл не выполняется ни разу
- если условие никогда не станет ложным, программа зацикливается
- a := 4; b := 6;
- while a > b do
- a := a – b;
- a := 4; b := 6;
- while a < b do
- d := a + b;
- Сколько раз выполняется цикл?
- a := 4; b := 6;
- while a < b do a := a + 1;
- 2 раза
- a = 6
- a := 4; b := 6;
- while a < b do a := a + b;
- 1 раз
- a = 10
- a := 4; b := 6;
- while a > b do a := a + 1;
- 0 раз
- a = 4
- a := 4; b := 6;
- while a < b do b := a - b;
- 1 раз
- b = -2
- a := 4; b := 6;
- while a < b do a := a - 1;
- зацикливание
- Цикл WHILE
- Задача: Ввести целое число (<2000000) и определить число цифр в нем.
- Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.
- Проблема: Неизвестно, сколько шагов надо сделать.
- Решение: Надо остановиться, когда n = 0, т.е. надо делать "пока n <> 0".
|
|
|
|
|
|
|
|
|
|
- Алгоритм
- начало
- count
- конец
- нет
- да
- n <> 0?
- count := 0;
- count := count + 1;
- n := n div 10;
- обнулить счетчик цифр
- ввод n
- выполнять "пока n <> 0"
- Программа
- uses crt;
- var n, count: integer;
- Begin
- clrscr;
- writeln('Введите целое число');
- read(n);
- count := 0;
- while n <> 0 do begin
- count := count + 1;
- n := n div 10;
- end;
- writeln('В числе ', n, ' нашли ',
- count, ' цифр');
- readkey;
- end.
- , n1: integer;
- n1 := n;
- n1,
- выполнять "пока n <> 0"
- Какая ошибка?
- ?
- Замена for на while и наоборот
- for i:=1 to 10 do begin
- {тело цикла}
- end;
- i := 1;
- while i <= 10 do begin
- {тело цикла}
- i := i + 1;
- end;
- for i:=a downto b do
- begin
- {тело цикла}
- end;
- i := a;
- while i >= b do begin
- {тело цикла}
- i := i - 1;
- end;
- Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла.
- Замена цикла for на while возможна всегда.
- Задания для самостоятельной работы
- 1. Найти сумму чисел от 1 до 10
- 2. Напечатать таблицу умножения на
- введенное с клавиатуры число,
- например ввели 7
- 7х1=7
- 7х2=14
- …….
- 7х9=63
- Цикл с постусловием (цикл REPEAT)
- Особенность: Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием).
- Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.
- Цикл с постусловием: алгоритм
- начало
- конец
- да
- нет
- n > 0?
- тело цикла
- условие ВЫХОДА
- блок "типовой процесс"
- ввод n
- основной алгоритм
- Программа
- program qq;
- var n: integer;
- begin
- repeat
- writeln('Введите положительное число');
- read(n);
- until n > 0;
- ... { основной алгоритм }
- end.
- until n > 0;
- условие ВЫХОДА
- Особенности:
- тело цикла всегда выполняется хотя бы один раз
- после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла
- Задания для самостоятельной работы
- 1. Составить программу , запрашивающую числа до тех пор, пока не ввели числа большего 50.
- 2. Составить программу, печатающую слово «Привет» и запрашивающую
- «Повторить Д/Н?». Программа завершает выполнение в случае нажатия Н,
- если Д, то повторяет.
- Оператор выбора CASE
- Особенности:
- после case может быть имя переменной или арифметическое выражение целого типа (integer)
- или символьного типа (char)
- case i+3 of
- 1: begin a := b; end;
- 2: begin a := c; end;
- end;
- var c: char;
- ...
- case c of
- 'а': writeln('Антилопа');
- 'б': writeln('Барсук');
- else writeln('Не знаю');
- end;
- Оператор выбора
- Особенности:
- если нужно выполнить только один оператор, слова begin и end можно не писать
- нельзя ставить два одинаковых значения
- case i+3 of
- 1: a := b;
- 1: a := c;
- end;
- case i+3 of
- 1: a := b;
- 2: a := c;
- end;
- Оператор выбора
- Особенности:
- значения, при которых выполняются одинаковые действия, можно группировать
- case i of
- 1: a := b;
- 2,4,6: a := c;
- 10..15: a := d;
- 20,21,25..30: a := e;
- else writeln('Ошибка');
- end;
- перечисление
- диапазон
- смесь
- Оператор выбора CASE
- Задача: Ввести номер месяца и вывести количество дней в этом месяце.
- Решение: Число дней по месяцам:
- 28 дней – 2 (февраль)
- 30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
- 31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)
- Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от номера месяца.
- Алгоритм
- начало
- конец
- оператор выбора
- ни один вариант не подошел
- ввод M
- да
- нет
- M = 1?
- D := 31;
- нет
- M = 2?
- D := 28;
- да
- нет
- M = 12?
- D := 31;
- да
- вывод D
- ошибка
- Программа
- uses crt;
- var M, D: integer;
- begin
- clrscr;
- writeln('Введите номер месяца:');
- read ( M );
- case M of
- 2: begin D := 28; end;
- 4,6,9,11: begin D := 30; end;
- 1,3,5,7,8,10,12: D := 31;
- else D := -1;
- end;
- if D > 0 then
- writeln('В этом месяце ', D, ' дней.')
- else
- writeln('Неверный номер месяца');
- readkey;
- end.
- ни один вариант не подошел
- Задания для самостоятельной работы
- 1. По введенному номеру от 1 до 7 определить день недели- например 1 – Понедельник и т.д.
- 2. Ставить программу , запрашивающую возраст и при введении до 15 включительно - говорит «Привет», от 16 до 20 говорит «друг», и говорит «Пока» в противном случае.
- Процедуры
- Процедура – это вспомогательный алгоритм, который предназначен для выполнения какой-то законченной последовательности действий.
- Для исполнения подпрограммы процедуры необходимо сначала описать ее, а потом к ней обращаться
- Описание процедуры включает заголовок (имя) и тело процедуры
- Заголовок состоит из зарезервированного слова procedure, имени процедуры и заключенных в скобки списка формальных параметров с указанием типа
- Процедуры
- Особенности:
- в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа
- program qq;
- procedure A(x, y: integer);
- var a, b: real;
- begin
- a := (x + y)/6;
- ...
- end;
- begin
- ...
- end.
- локальные переменные
- Процедуры
- Задача: найти наибольшее из 4-х чисел, используя подпрограмму нахождения наибольшего из 2-х чисел
- program max;
- uses crt;
- var a,b,c,d,p,q,m: integer;
- procedure bid(x,y: real; var z: real);
- begin
- if x>y then z:=x else z:=y
- end;
- begin
- clrscr;
- write(‘введите 4 числа:’);
- readln (a,b,c,d);
- bid (a,b,p);
- bid (c,d,q);
- bid (p,q,m);
- writeln(‘наибольшее из 4-х чисел’; m);
- readkey;
- end.
- Функции
- Функция – это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение.
- Примеры:
- вычисление , ,
- расчет значений по сложным формулам
- ответ на вопрос (простое число или нет?)
- Отличия
- в заголовке
- в теле функции: хотя бы раз имени функции должно быть присвоено значение
- Функции
- Особенности:
- заголовок начинается словом function
- формальные параметры описываются так же, как и для процедур
- в конце заголовка через двоеточие указывается тип результата
- функции располагаются ВЫШЕ основной программы
- Max (a, b: integer): integer;
- function
- function Max (a, b: integer): ;
- integer
- function qq( a, b: integer; x: real ): real;
- a, b: integer; x: real
- Функции
- Особенности:
- можно объявлять и использовать локальные переменные
- значение, которое является результатом, записывается в переменную, имя которой совпадает с названием функции; объявлять ее НЕ НАДО:
- function Max (a, b: integer): integer;
- begin
- ...
- end;
- Max := a;
- function qq (a, b: integer): float;
- begin
- ...
- end;
- var x, y: float;
- Функции
- Задача: найти наибольшее из 4-х чисел, используя подпрограмму нахождения наибольшего из 2-х чисел
- program max;
- uses crt;
- var a,b,c,d,p,q,m: integer;
- function bid(x,y: real): real;
- begin
- if x>y then bid:=x else bid:=y
- end;
- begin
- clrscr;
- write(‘введите 4 числа:’);
- readln(a,b,c,d);
- p:=bid(a,b);
- q:=bid(c,d);
- m:=bid(p,q);
- writeln(‘наибольшее из 4-х чисел’;m);
- readkey;
- end.
- Массивы
- Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом.
- Особенности:
- все элементы имеют один тип
- весь массив имеет одно имя
- все элементы расположены в памяти рядом
- Примеры:
- список учеников в классе
- квартиры в доме
- школы в городе
- данные о температуре воздуха за год
- Объявление массивов
- определить имя массива
- определить тип массива
- определить число элементов
- выделить место в памяти
- Массив целых чисел:
- Размер через константу:
- имя
- начальный индекс
- конечный индекс
- тип
- элементов
- var A: array[1.. ] of integer;
- const N=5;
- N
- var A : array[ 1 .. 5 ] of integer ;
- Массивы
- Объявление:
- Ввод с клавиатуры:
- Поэлементные операции:
- const N = 5;
- var a: array[1..N] of integer;
- i: integer;
- for i:=1 to N do begin
- write('a[', i, ']=');
- read ( a[i] );
- end;
- for i:=1 to N do a[i]:=a[i]*2;
- Массивы
- Задача: Заполнить массив из 5 элементов с клавиатуры и вывести на экран сумму 2 и 5 элементов
- uses crt;
- var i,sum: integer; a: array[1..5] of integer;
- begin
- clrscr;
- for i:=1 to 5 do
- begin
- write(‘Введите’, i, ‘элемент’); read (a[i]);
- end;
- sum:=a[2]+a[5];
- write(‘Сумма 2 и 5 равна’, sum);
- readkey;
- end.
- Задания для самостоятельной работы
- 1. Заполнить массив из 5 элементов и вывести на печать сначала все, ниже третий.
- 2. Заполнить массив из 5 элементов с клавиатуры и найти их среднее арифметическое.
- Строковые величины
- Строка – это последовательность символов кодовой таблице.
- Длина строки (количества символов) может лежать в диапазоне 0..255
- Для определения длины данных строкового типа используется идентификатор string, за которым следует максимальное значение длины строки данного типа.
- В программе значения переменных и констант типа char (символьный) заключается в апострофы.
- Например, st:=’река’
- var s: string[20];
- Символьные строки
- Задача: ввести строку с клавиатуры и заменить все буквы "а" на буквы "б".
- program qq;
- var s: string;
- i: integer;
- begin
- writeln('Введите строку');
- readln(s);
- for i:=1 to Length(s) do
- if s[i] = 'а' then s[i] := 'б';
- writeln(s);
- end.
- readln(s);
- writeln(s);
- Length(s)
- ввод строки
- длина строки
- вывод строки
- Операции со строками
- Объединение: добавить одну строку в конец другой.
- Запись нового значения:
- var s, s1, s2: string;
- s := 'Вася';
- s1 := 'Привет';
- s2 := 'Вася';
- s := s1 + ', ' + s2 + '!';
- 'Привет, Вася!'
- Подстрока: выделить часть строки в другую строку.
- s := '123456789';
- s1 := Copy ( s, 3, 6 );
- s2 := Copy ( s1, 2, 3 );
- '345678'
- '456'
- с 3-его символа
- 6 штук
- Удаление и вставка
- Удаление части строки:
- Вставка в строку:
- s := '123456789';
- Delete ( s, 3, 6 );
- с 3-его символа
- 6 штук
- строка
- меняется!
- '123456789'
- '129'
- s := '123456789';
- Insert ( 'ABC', s, 3 );
- Insert ( 'Q', s, 5 );
- куда вставляем
- что вставляем
- начиная с 3-его символа
- '12ABC3456789'
- '12ABQC3456789'
- Задания для самостоятельной работы
- 1. Ввели слово, определить его длину и вывести 3 символ, а так же вывести вырезку с 2 символа , длинной 5 символов.
- 2. Из слова «вирус» путем замены букв получите слово «фокус».
- Файлы
- Файл – это область на диске, имеющая имя.
- Файлы
- только текст без оформления, не содержат управляющих символов (с кодами < 32)
- ACSII (1 байт на символ)
- UNICODE (2 байта на символ)
- *.txt, *.log,
- *.htm, *.html
- могут содержать любые символы кодовой таблицы
- *.doc, *.exe,
- *.bmp, *.jpg,
- *.wav, *.mp3,
- *.avi, *.mpg
- Текстовые
- Двоичные
- Папки (каталоги)
- Принцип сэндвича
- I этап. открыть файл :
- связать переменную f с файлом
- открыть файл (сделать его активным, приготовить к работе)
- assign(f, 'qq.dat');
- reset(f); {для чтения}
- rewrite(f); {для записи}
- II этап: работа с файлом
- Переменная типа "текстовый файл": var f: text;
- III этап: закрыть файл
- close(f);
- read ( f, n ); { ввести значение n }
- write ( f, n ); { записать значение n }
- writeln ( f, n );{c переходом на нов.строку }
- append(f); {дописывать данные}
- Работа с файлами
- Особенности:
- имя файла упоминается только в команде assign, обращение к файлу идет через файловую переменную
- файл, который открывается на чтение, должен существовать
- если файл, который открывается на запись, существует, старое содержимое уничтожается
- данные записываются в файл в текстовом виде
- при завершении программы все файлы закрываются автоматически
- после закрытия файла переменную f можно использовать еще раз для работы с другим файлом
- Пример
- Задача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output.txt их сумму.
- Алгоритм:
- Открыть файл input.txt для чтения.
- S := 0;
- Если чисел не осталось, перейти к шагу 7.
- Прочитать очередное число в переменную x.
- S := S + x;
- Перейти к шагу 3.
- Закрыть файл input.txt.
- Открыть файл output.txt для записи.
- Записать в файл значение S.
- Закрыть файл output.txt.
- цикл с условием "пока есть данные"
- Программа
- program qq;
- var s, x: integer;
- f: text;
- begin
- assign(f, 'input.txt');
- reset(f);
- s := 0;
- while not eof(f) do begin
- readln(f, x);
- s := s + x;
- end;
- close(f);
- assign(f, 'output.txt');
- rewrite(f);
- writeln(f, 'Сумма чисел ', s);
- close(f);
- end.
- f: text;
- eof(f)
- логическая функция, возвращает True, если достигнут конец файла
- запись результата в файл output.txt
- Обработка текстовых данных
- Задача: в файле input.txt записаны строки, в которых есть слово-паразит "короче". Очистить текст от мусора и записать в файл output.txt.
- Файл input.txt :
- Мама, короче, мыла, короче, раму.
- Декан, короче, пропил, короче, бутан.
- А роза, короче, упала на лапу, короче, Азора.
- Каждый, короче, охотник желает, короче, знать, где ...
- Результат - файл output.txt :
- Мама мыла раму.
- Декан пропил бутан.
- А роза упала на лапу Азора.
- Каждый охотник желает знать, где сидит фазан.
- Обработка текстовых данных
- Алгоритм:
- Прочитать строку из файла (readln).
- Удалить все сочетания ", короче," (Pos, Delete).
- Перейти к шагу 1.
- Обработка строки s:
- Особенность:
- надо одновременно держать открытыми два файла (один в режиме чтения, второй – в режиме записи).
- пока не кончились данные
- repeat
- i := Pos(', короче,', s);
- if i <> 0 then Delete(s, i, 9);
- until i = 0;
- искать ", короче,"
- удалить 9 символов
- Работа с файлами
- program qq;
- var s: string;
- i: integer;
- fIn, fOut: text;
- begin
- assign(fIn, 'instr.txt');
- reset(fIn);
- assign(fOut, 'outstr.txt');
- rewrite(fOut);
- ... { обработать файл }
- close(fIn);
- close(fOut);
- end.
- fIn, fOut: text;
- файловые переменные
- открыть файл для чтения
- открыть файл для записи
- Полный цикл обработки файла
- while not eof(fIn) do begin
- readln(fIn, s);
- writeln(fOut, s);
- end;
- repeat
- i := Pos(', короче,', s);
- if i <> 0 then
- Delete(s, i, 9);
- until i = 0;
- пока не достигнут конец файла
- обработка строки
- запись "очищенной" строки
- Задания для самостоятельной работы
- 1. Создать на диске С файл 1.txt с 5 числами, введенными с клавиатуры.
- 2. Дописать в существующий файл 1.txt данные, введенные с клавиатуры.