- •Первый семестр
- •Дальнейшее обучение программированию (по семестрам)
- •Рекомендуемая литература
- •I семестр Лекция 1
- •1.1 Алгоритм. Понятие алгоритма
- •1.2 Алгоритмические языки
- •1.3 Запись алгоритма
- •1.4 Элементарные структуры
- •Лекция 2
- •2.1. Договоренности о синтаксисе
- •2.2. Текст программы на Turbo Pascal
- •2.3 Элементарные операции
- •2.4. Таблица перевода для структур
- •Алгоритм:
- •Текст программы
- •2.5 Практические рекомендации по решению задач
- •3.2. Частные случаи для структуры цикла
- •3.3 Массивы
- •Лекция 4
- •4.0 Требования к защите бальных задач
- •4.1 Начало систематического изложения Turbo Pascal (tp)
- •Лекция 5
- •5.1 Простые типы данных
- •5.1.1 Перечислимый тип
- •5.1.2 Интервальный тип
- •5.1.3 Целочисленные типы
- •5.1.4 Данные типа char
- •5.1.6 Вещественные типы данных
- •Лекция 6
- •6.1 Структура программы на Паскале
- •6.2 Процедуры для стандартного ввода/вывода
- •6.3 Массивы. Регулярный тип
- •6.4 Для работы с массивами – шаблоны
- •Лекция 7
- •7.1 Строки
- •7.2 Записи
- •Лекция 8
- •8.1 Множества
- •8.2 Файлы
- •8.3 Процедуры открытия и закрытия файлов:
- •8.4 Процедуры ввода/вывода:
- •Лекция 9
- •9.1 Текстовые файлы.
- •9.2 Проект программы:
- •9.3 Простейший сканер.
- •9.4 Копия любого файла
- •Лекция 10
- •10.1 Процедуры и функции
- •10.2 Передача параметров в процедуры и функции
- •10.3 Глобальные переменные. Перекрытие (экранирование)
- •10.4 Процедурные типы
- •10.6 Рекурсия. Косвенная рекурсия
- •Лекция 11
- •11.1 Статическая и динамическая память программы
- •11.2 Динамическая память (куча, heap) с точки зрения тр
- •11.3 Операции над указателями
- •11.4 Пояснения с помощью картинки
- •11.5 Динамическая цепочка
- •Лекция 12
- •12.1 Цикл жизни программы. Проект программы
- •12.2 Характеристики качества программ
- •12.3 Программное окружение
- •12.4 Модули
- •Пример Печать данного перечислимого типа. Вот простой пример модуля (пусть имя файла с представленным ниже текстом My_Unit.Pas):
- •12.5 Обзор модуля System
- •12.5.1 Процедуры и функции, обслуживающие файловую систему
- •Лекция 13
- •13.1 Модуль crt - средства работы с экраном, клавиатурой и др.
- •13.2 Обзор примеров программ
- •13.3 Процедуры и функции модуля Crt
- •Лекция 14
- •14.1 Модуль dos - работа с файловой системой.
- •14.1.1 Прерывания.
- •14.1.2 Процедуры и функции модуля Dos
- •Лекция 15
- •15.1 Модуль Graph.
- •15.1.1 Общие сведения:
6.4 Для работы с массивами – шаблоны
Шаблон 1. Ввод-вывод одномерного массива.
program …;
const NN=100;{Максимальное число элементов}
…
type MM=array [1..NN]of real; {Новый тип данных - массив}
…
var M:MM; k,i:integer;
…
begin
{Ввод массива}
writeln(‘Введите кол-во элементов (не более ',NN:1,’)’);
readln(k);
writeln(‘Введите ’,k:1,’ элементов массива‘);
for i:=1 to k do read(M[i]); readln;
…
{Вывод массива на экран}
writeln(‘Вот результат:’); {Заголовок вывода}
for i:=1 to k do write(‘M[‘,i:2,’]=’,M[i]:7:3); writeln;
…
end.
Шаблон 2. Ввод-вывод двумерного массива.
program …;
const NN=100; MM=100;{Максимальное число строк и столбцов}
…
type AA=array [1..NN,1..MM]of real;{Новый тип данных – двумерный массив}
…
var A:AA; n,m,i.j:integer;
…
begin
{Ввод двумерного массива}
writeln(‘Введите кол-во строк (не более ’,NN:1,
’) и столбцов (не более ’,MM:1,’)');
readln(n,m);
for i:=1 to n do
begin
writeln(‘Введите ’,i:1,’-ю троку‘);
for j:=1 to m do read(M[i,j]);
readln
end;
…
{Вывод двумерного массива на экран}
writeln(‘Вот результат:’);{Заголовок вывода}
for i:=1 to n do
begin
for j:=1 to m do write(M[i,j]);
writeln
end;
…
end.
Лекция 7
7.1 Строки
Строковый тип данных (STRING) предназначен для обработки цепочек символов (литер, элементов типа CHAR). Переменные типа STRING могут быть объявлены следующим образом:
<имя переменной>:STRING[длина]
или
<имя переменной>:STRING
В стандарте Паскаля такого типа данных нет.
Параметр длина задает максимальную длину строки (максимальное число символов цепочки). Если максимальный размер строки не указан, то он автоматически принимается равным 255 – максимально возможной длине строки. Для переменной типа string резервируется участок памяти длиной длина+1 байт. Дополнительный байт используется для хранения значения текущей длины строки.
В языке Паскаль широко используются константы строкового типа. Они представляют собой цепочки произвольных символов используемой кодовой таблицы, заключенные в апострофы. Например: ‘ВОТ’ – цепочка из трех символов, ‘’ – пустая цепочка.
Строка обладает всеми свойствами массива литер, то есть, структуры данных, описанной описателем array[0..длина] of char. Если имеются описания s,s1:string[10], то, в отличие от массива, допустимы присваивания
s:=’BOT’
s1:=’’.
При этом текущая длина строки s будет равна 3, текущая строка s1 – 0. Текущая длина строки – целое положительное число в диапазоне от 0 до длина – хранится в нулевом элементе строки как данное типа char (s[0]=chr(3), s1[0]=chr(0)). В первом элементе строки s – s[1] – хранится символ ‘B’, во втором – ‘O’, в третьем – ‘T’, значение элемента s[4] неопределенно, обращение к нему является ошибкой, поскольку индекс превышает текущее значение длины строки.
Текущая длина строки не должна превышать максимальную длину.
К строкам применимы стандартные процедуры ввода и вывода. Если выдать на экран значения строк s и s1, то получим:
writeln(s) – на экране строка ‘ВОТ’,
writeln(s1) – на экране пустая строка.
Над строковыми данными определена бинарная операция конкатенации (+). Результатом конкатенации двух строк является строка, содержащая последовательно все символы левого операнда, а затем все символы правого операнда. Вот примеры использования конкатенации:
writeln(s) – на экране текст ВОТВОТ;
s1:=s+’ KOT’; writeln(s1) – на экране ВОТ КОТ.
Пример использования строк для обеспечения защиты ввода целого числа от «дурака». Под «дураком» подразумевается пользователь программы, позволяющий себе, не взирая на настоятельные предупреждения разработчика о формате вводимой информации, вводить произвольную последовательность символов. При использовании стандартных средств ввода в таких случаях может возникнуть ошибка ввода, приводящая к прерыванию выполнения программы. Для обеспечения нормальной работы программы при вводе можно воспользоваться следующим средством:
program Enter_int;
type status=(beginning,znak,Ok,Err);
var s:string; zn,k,i:integer; c:char;
n:longint;
stat:status;
cifra:boolean;
begin
repeat
writeln(‘Введите целое по модулю меньшее ’,$7FFF:1);
readln(s);
k:=length(s);
zn:=1;
n:=0;
stat:=beginning;
for i:=1 to k do
begin
c:=s[i];
cifra:=(c>='0') and (c<='9');
case stat of
beginning: case c of
' ': ;
'+': stat:=znak;
'-': begin stat:=znak; zn:=-1 end;
'0'..'9': begin n:=n*10+ord(c)-ord('0');
stat:=Ok end;
else stat:=Err
end;
znak: if cifra then
begin
n:=n*10+ord(c)-ord('0'); stat:=Ok
end else stat:=Err;
Ok: if cifra then
begin
n:=n*10+ord(c)-ord('0'); stat:=Ok
end else stat:=Err;
end;
end;
n:=zn*n;
if abs(n)>=$7FFF then stat:=Err;
until stat=Ok;
writeln('rezult ',n)
end.
Переменную типа STRING можно сравнивать с другой переменной или константой типа STRING, используя отношения =, <, >, <=, >=, <>. Используется лексикографический порядок (как в каталогах библиотек).
В TP имеются следующие функции для обработки строк:
CONCAT - функция имеет произвольное число параметров строкового типа, результат - строка, полученная последовательной склейкой параметров. Если длина полученной строки превышает 255 символов, то происходит усечение;
COPY(S:string; ind,count:integer):string - возвращает подстроку S длиной count, начиная с литеры номер ind. При несоответствии с максимальной длиной используется усечение;
DELETE(var S:string; ind,count:integer) - удаляет из S count символов, начиная с ind;
INSERT(St:string; var S:string; ind:integer) - вставляет в S St, начиная с позиции ind;
LENGTH(S:string) - функция, возвращает текущую длину строки S;
Две процедуры можно рассматривать как процедуры преобразования типа:
VAL(S:string; var V; var code:integer) - где V - переменная целого или вещественного типа. Процедура выделяет из строки последовательность символов, преобразует к типу соответствующей переменной и присваивает полученное значение этой переменной. Процедура VAL является строковым аналогом процедуры READ. Если при чтении из строки встречается недопустимый символ, то в переменной code возвращается его номер. В противном случае этот параметр равен нулю;
STR(X; var S:string) - преобразует численное значение целого или вещественного типа в его строковое представление. Эта процедура является строковым аналогом процедуры WRITE. После выражения X можно указать длину и точность представления данных.
Вот примеры использования процедур VAL и STR.
var X:real; S:string; i:integer;
begin
X:=3.1415926;
STR(X:8:4, S); S:='X=' + S;
Writeln(S); { на экране 'X= 3.1416'}
S:=DELETE(S,1,2); {удалили первые два символа}
VAL(S,X,i);
if i=0 then writeln(X:10:6) {на экране ' 3.141600'}
end.
В качестве упражнения перепишите программу Enter_int, используя функции и процедуры обработки строк.