Подпрограммы для работы с символами и строками



Имя и параметры Типы параметров Тип возвра-щаемого значе-ния Действие
Length(s) s - string integer возвращает длину строки s
Copy(s,index,count) s -string, index и count - integer string возвращает подстроку строки s длины count, начиная с позиции index
Delete(s,index,count) s - string, index и count- integer   удаляет в строке s count символов начиная с позиции index
Insert(subs,s,index) s, subs – string, index - integer   вставляет подстроку subs в строку s с позиции index
Pos(subs,s) s, subs - string integer возвращает позицию первой подстроки subs в строке s (или 0 если подстрока не найдена)
SetLength(s,n) s - string, n -integer   устанавливает длину строки s равной n
.      
Str(x,s) Str(x:n,s) Str(x:n:m,s) s - string, x-integer, real и n, m - integer   преобразует x к строковому представлению (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m) и записывает результат в строку s
Val(s,v,code) s - string, v-integer, real и code - integer   преобразует строку s к числовому представлению и записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в codeвозвращается ненулевое значение
Concat(s1,...,sn) s1,..., sn -string string возвращает строку, являющуюся результатом слияния строк s1,..., sn. Результат тот же, что у выраженияs1+s2+...+sn
IntToStr(i) i - integer string преобразует целое число к строке
StrToInt(s) s - string integer преобразует строку в целое число . Если преобразование невозможно, то возникает ошибка времени выполнения
FloatToStr(r) r - real string преобразует вещественное число к строке
StrToFloat(s) s - string real преобразует строку в вещественное число. Если преобразование невозможно, то возникает ошибка времени выполнения
UpCase(c) c - char char возвращает символ c, преобразованный к верхнему регистру
LowCase(c) c - char char возвращает символ c, преобразованный к нижнему регистру
UpperCase(s) s - string string возвращает строку s, преобразованную к верхнему регистру
LowerCase(s) s - string string возвращает строку s, преобразованную к нижнему регистру
Trim(s) s - string string возвращает копию строки s с удаленными лидирующими и заключительными пробелами
TrimLeft(s) s - string string возвращает копию строки s с удаленными лидирующими пробелами
TrimRight(s) s - string string возвращает копию строки s с удаленными заключительными пробелами

 

 

2. Пример. Подсчитать количество символов в строке и удалить первое встречающееся заданное слово.

Текст программы:

Program stroka;

var ST:string; SUBST:string[10];

begin

writeln (' Введите строку ');

readln (ST);

writeln (' Введите удаляемое слово ');

readln (SUBST);

writeln ('Количество символов ', Length ( ST ));

delete (ST, Pos(SUBST, ST), Length(SUBST)+1);

writeln ( ST );

end .

 

3. Задание. Написать программу обработки строки в соответствии с вариантом задания. Ввод строк организовать в программе. Строка должна состоять из нескольких слов и символов, разделителем служит пробел. Вывести на экран обработанную строку.

Варианты заданий:

1) Определите количество слов в тексте.

2) Объедините две исходные строки и удалите повторяющиеся слова.

3) Удалите в строке все буквы "К".

4) Поменять местами первое и предпоследнее слово.

5) Удвойте все гласные русские буквы в строке.

6) Подсчитать в строке число букв "А" и "В", и если букв "А" больше, чем "В", то удалить все символы "В", иначе удалить все символы "А".

7) Вставьте в середину первой строки вторую строку и выведите на экран самое короткое слово из полученной строки.

8) Подсчитать количество символов в строке и удалить все вхождения заданного слова.

9) Вывести на экран все слова из строки, содержащие 3 цифры.

10) Подсчитать в строке количество русских слов.

11) Определите, каким по счету символом с начала текста является вторая запятая.

12) Подсчитать количество цифр в строке, удалить их и вставить в конце строки в порядке удаления.

13) Вывести на экран все слова из строки, содержащие по 4 буквы.

14) Подсчитать в строке количество иностранных слов.

15) Удвойте количество пробелов в строке.

16) Определите позиции всех вхождений заданного слова.

17) Вывести на экран все слова из строки, содержащие хотя бы одну цифру.

18) Определите количество слов в тексте, содержащих цифру "6".

19) Подсчитать в строке количество иностранных букв.

20) Вставьте вместо каждой точки слово "тчк".

21) Подсчитать в строке количество русских букв.

22) Объедините две исходные строки "встык" и подсчитайте количество гласных букв.

23) Вывести на экран самое длинное слово в строке.

24) Удалить в строке все лишние пробелы между словами.

25) Определите количество слов, в которых первый и последний символы совпадают.

26) Напечатайте исходную строку в обратном порядке и объедините ее с исходной. Удалите два слова, находящиеся посередине.

27) Замените все строчные латинские буквы на заглавные и подсчитайте количество всех заглавных букв.

28) Определите, на какую букву начинается большинство слов в строке.

29) Подсчитать количество слов, начинающихся на заданную букву.

30) Определите количество пробелов, предществующих первому вхождению заданного слова.

 

Контрольные вопросы.

1. Тип данных Char.

2.  Кодировки Windows 1251 и Unicode.

3. Строки String, правила объявления строк.

4. Операции над строками типа String.

5. Назначение функций Length, Concat, Pos и Copy для оброботки строк.

6. Назначение процедур Insert, Delete, Str, Val и UpperCase для оброботки строк.

7. Сколько байт в памяти занимает строка ST[10] ?

 

Лабораторная работа № 7.

Работа с записями

 

Цель работы: Знакомство со структурированными данными типа запись и их применением. Получение практических навыков работы с записями при составлении программ.

 

Основные сведения.

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

Запись — это структура данных, состоящая из фиксированного числа компонентов, называемых полями. В отличие от элементов массива, поля записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.

В Паскале два способа объявления записи:

1) Type <имя _ типа > = record                       2)Var <и мя _ записи > : record

     <Список полей1 >: <тип1>;                <Список полей1> : <тип1>;

     <Список полей2> : <тип2>;                <Список полей2> : <тип2>;

     …                                                          …

     <Список полей N > : <тип N >               <Список полей N > : <тип3>

     end;                                                            end;

Var <имя_записи> : <имя_типа>;

Список полей записи содержит идентификаторы (идентификатор), разделенные между собой запятой. Например:

Type birthday = record

     day, month: byte;

     year : word

     end;

Var a,b : birthday;

В этом примере тип birthday (день рождения) содержит три поля с именами day, month, и year (день, месяц и год). Переменные a и b являются записями типа birthday. Подобные записи называют фиксированными (или записями с фиксированными полями).

К каждому из полей записи можно получить доступ, если использовать составное имя, т. е. указать имя переменной, затем точку и имя поля, например: a.day:=27;

Чтобы упростить доступ к полям записи, используется оператор присоединения With:

With <имя записи> Do <оператор>;

Например:

With a do begin

     writeln ('введите день '); readln (day);

     writeln ('введите месяц '); readln (month);

     writeln ('введите год '); readln (year);

end;

В языке существуют записи с так называемыми вариантными полями, например:

Type phis = record

     Name : string [10];

     Case Measure : char of

              'д'; 'i' : ( inches : word ) ;

              'c'; 's' : ( santimeters : real );

              'м'; 'm' : ( meters : word;millimeters : byte );

     end;

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

В описании записи может быть только одна вариантная часть и она должна быть последним ее элементом.

2. Пример. Составить список из трех студентов с указанием их имени, фамилии и номера группы, вывести на экран фамилии тех студентов, которые учатся в группе с номером 31.

Program zapis;

Type stud = record

     name : string [7];

     famil : string [10];

     group : byte;

     end;

Var student : array [1..3] of stud;

  n : byte;

begin

writeln ('Bведите данные по трем студентам');

for n:=1 to 3 do

     with student[n] do

begin

write('имя '); readln(name);

write('фамилия '); readln(famil);

write('группа '); readln(group);

              end;

writeln;

for n:=1 to 3 do

     with student[n] do

              if group=31 then writeln('Студент ',famil,' из группы 31');  

end.

 

 

3. Задание. Написать программу обработки записей в соответствии с вариантом задания. Количество студентов запрашивать в программе. Число полей и их имена выбирать произвольно исходя из конкретного задания. Предусмотреть в программе также вывод на экран всего списка студентов со всеми полями.

 Варианты заданий:

1) Распечатать анкетные данные студентов-отличников.

2) Распечатать анкетные данные студентов, успевающих на 4 и 5.

3) Распечатать список студентов, упорядоченный в алфавитном порядке.

4) Распечатать анкетные данные студентов, получивших одну оценку 3 за все время обучения.

5) Распечатать анкетные данные студентов, получивших в летнюю сессию оценку 2.

6) Распечатать анкетные данные студентов, получивших в зимнюю сессию все оценки 5.

7) Распечатать анкетные данные студентов, получивших за все время обучения одну оценку 4, а все остальные оценки — 5.

8) Распечатать анкетные данные студентов, получивших в летнюю сессию три оценки 5.

9) Распечатать список студентов, фамилии которых начинаются с буквы "А", и их оценки за все время обучения.

10) Распечатать фамилии тех студентов, у которых не более 50 % четверок и троек.

11) Распечатать имена и фамилии тех студентов, которые за все время обучения не получили ни одной оценки 3.

12) Распечатать список студентов, фамилии которых начинаются с буквы "Б", и их даты рождения.

13) Распечатать список студентов, упорядоченный по убыванию года рождения.

14) Распечатать список студентов, упорядоченный по возрастанию их среднего балла.

15) Распечатать оценки в последнюю сессию студентов, фамилии которых начинаются на "Ан".

16) Распечатать список студентов, упорядоченный в обратном алфавитном порядке.

17) Распечатать список студентов-отличников, упорядоченный по возрастанию года рождения.

18) Вычислить средний балл группы и распечатать список студентов, имеющих средний балл выше среднего балла группы.

19) Распечатать фамилии тех студентов, у которых оценок 4 не более 70 % и не менее 20 %.

20) Подсчитать средний возраст студентов и средний балл по группе.

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

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

23) Распечатать имена и фамилии тех студентов, которые за все время обучения получили одну оценку 3 и две оценки 4.

24) Распечатать фамилии тех студентов, у которых не менее 75 % пятерок.

25) Распечатать фамилии тех студентов, у которых оценок 4 и 5 от 75 % до 100 %.

26) Распечатать фамилии и оценки в последнюю сессию студентов, фамилии которых состоят из шести букв.

27) Распечатать фамилии студентов, сумма оценок которых равна сумме цифр их года рождения.

28) Распечатать анкетные данные студентов, неуспевающих хотя бы по одному предмету.

29) Распечатать анкетные данные студентов, неуспевающих по трем и более предметам.

30) Распечатать анкетные данные студентов, получивших за последнюю сессию три оценки 4 и две оценки 5.

 

Контрольные вопросы.

1. Описание переменных типа Record.

2. Как можно обратиться к элементу записи ?

3. Оператор With. Правила его использования в записях.

4. Понятие записи с вариантными полями.

 

 


Лабораторная работа № 8.

Работа с подпрограммами

 

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

 

Основныее сведения.

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

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

В Паскале существует множество стандартных процедур и функций, которые объединены в стандартные модули. Например: арифметические функции sin ( x ), abs ( a + b ) и процедура writeln ('Переменная х=',х:5:3)из модуля Sistem; ClrScr -процедура из модуля Crt.

1.1.Процедура имеет следующее структуру:

Procedure <Имя_Процедуры> (<Список_формальных_параметров>);

<Раздел описаний локальных меток, констант, типов и переменных>

<Описание внутренних процедур и функций>

Begin

<Раздел операторов>

End;

Заголовок процедуры — служебное слово Procedure и имя процедуры со списком формальных параметров в скобках.

Вызов процедуры в программе осуществляется в отдельной строке:

<Имя_процедуры> (<Список фактических параметров>);

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

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

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

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

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

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

1.2. Функция объявляется следующим образом:

Function <Имя_Функции> (<Список_формальных_параметров>) : <тип> ;

<Раздел описаний локальных меток, констант, типов и переменных>

<Описание внутренних процедур и функций>

Begin

<Раздел операторов>

End;

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

2. Пример: Задача 1. С использованием функции вычислите сумму элементов массива-вектора и их среднее арифметическое.

Program sred1;

Type mas=array[1..10] of integer;

Var a:mas;

  i:byte;

  sa:real;

function summa(kol:byte; x:mas; var sred:real):integer;

var j:byte;

sum:integer;

begin

sum:=0;

for j:=1 to kol do sum:=sum+x[j];

sred:=sum/kol;

summa:=sum;

end;

begin

writeln('введите 10 элементов вектора в строку');

for i:=1 to 10 do read(a[i]);

writeln;

writeln('Сумма элементов = ',summa(i,a,sa),' среднне арифметическое = ',sa:4:2);

end.

 

Задача 2. Написать эту же программу с использованием процедуры.

Program Sred2;

Type mas=array[1..10] of integer;

Var a:mas;

  i:byte;

  sa:real;

  summa:integer;

procedure calculation(kol:byte; x:mas; var sum:integer; var sred:real);

var j:byte;

begin

sum:=0;

for j:=1 to kol do sum:=sum+x[j];

sred:=sum/kol;

end;

begin

writeln('введите 10 элементов вектора в строку');

for i:=1 to 10 do read(a[i]);

writeln;

calculation(i,a,summa,sa);

writeln('Сумма элементов = ',summa,' среднне арифметическое = ',sa:4:2);

end.

 

 3. Задание:

3.1. Написать программу в соответствии с вариантом в пункте 4.1. Вычислительный процесс выполнить с использованием функции.

3.2. Написать программу в соответствии с вариантом в пункте 4.2. Вычислительный процесс выполнить с использованием процедуры. В вариантах работы с матрицами вывести их на экран в общепринятом виде. Размеры исходных матриц задаются пользователем в программе.

 Варианты заданий.

 Задание 1.

1) Рассчитать площади трех кругов по заданным радиусам.

2) Вычислить средний балл по оценкам для пяти студентов.

3) Рассчитать площади двух цилиндров по заданным высотам и радиусам.

4) Вычислите сумму элементов каждого столбца для трех исходных матриц и определите наибольшую сумму.

5) Рассчитать объемы шаров с радиусом от 10 до 15 с шагом 0.5 и общий объем.

6) Рассчитать объем трех параллелепипедов.

7) Подсчитать число точек, находящихся внутри круга с радиусом R и с центром в начале координат; координаты точек заданы массивами Х(10) и Y(10).

8) Вычислите длины строн треугольника по заданным координатам вершин.

9) Даны две матрицы. Вычислите значение Z=X+Y, где X и Y — максимальные элементы главных диагоналей матрицы.

10) Рассчитать и сравнить длины диагоналей двух прямоугольников.

11) Вычислите суммы положительных элементов массивов Х(n), Y(m) и Z(k).

12) Заданы три массива X(n), Y(m) и Z(k). Упорядочите по возрастанию три числа А, В и С, представляющие собой соответственно минимальные элементы массивов X, Y и Z. Минимальный элемент определять через функцию.

13) Три точки заданы своими координатами. Выясните, какие из них находятся на максимальном расстоянии друг от друга.

14) Вычислить произведение отрицательных элементов двух матриц.

15) Заданы векторы X и Y. Переменной Z присвойте значение 1, если скалярное произведение векторов X и Y положительно, и значение 0 в противном случае.

16) Вычислить скорость падающего тела с ускорением 9,8 м/с2 через 5 секунд падения.

17) Вычислите среднее арифметическое положительных элементов трех матриц.

18) Вычислить и сравнить объемы трех параллелепипедов.

19) Подсчитайте количество нулевых элементов для трех матриц.

20) Подсчитайте количество точек, находящихся внутри круга радиусом r с центром в точке (1;1), координаты заданны массивами X(20) и Y(20).

21) Подсчитайте количество элементов матриц Х и Y, находящихся в интервале от 0 до 1.

22) Вычислите суммы положительных элементов каждой строки для трех матриц.

23) Найдите и сравните объемы трех конусов.

24) Вычислите суммы элементов нижних треугольных матриц для трех исходных матриц.

25) Определить, какая из десяти исходных точек находится ближе к началу координат.

26) Вычислите сумму наименьших элементов трех матриц.

27) Определите число положительных элементов до первого отрицательного в трех матрицах.

28) Вычислите сумму квадратов элементов главной диагонали двух матриц.

29) Проверьте, не являются ли исходные три матрицы "магическими квадратами".

30) Для трех матриц подсчитайте количество положительных элементов и замените все отрицательные элементы нулями, а положительные элементы — единицами.

 

 Задание 2.

1) Напишите программу для сложения двух исходных матриц.

2) Вычислить и запомнить суммы положительных элементов каждой строки исходных матриц А и В (матрицы различного размера).

3) Для трех исходных строк вывести на экран все слова из строки, содержащие по 4 буквы.

4) Из исходной матрицы составте массив-вектор путем удаления из матрицы всех нечетных элементов.

5) Для пяти исходных строк подсчитать количество гласных и согласных букв, а также количество цифр и пробелов.

6) Вычислите длины трех векторов и сформируйте вектор из максимальных элементов этих векторов.

7) Напишите программу транспонирования исходной матрицы.

8) В трех исходных строках удалите все лишние пробелы и подсчитайте количество оставшихся букв.

9) Найти наибольшие элементы и их порядковые номера в матрицах А и В.

10) В исходной матрице замените все элементы, кратные 3, на "1", а все четные на "0"; подсчитайте количество таких элементов.

11) Напишите программу для умножения двух исходных матриц.

12) Найти среднее арифметическое и среднеквадратическое отклонение для элементов трех исходных массивов-векторов.

13) Из двух исходных строк удалить все цифры и сформировать из них вектор.

14) Вычислить и запомнить количество отрицательных элементов каждого столбца для тре исходных матриц.

15) Вычислить суммы и количества элементов, находящихся в интервале от а до b для элементов трех исходных матриц.

16) Для трех исходных строк заменить латинские буквы их порядковыми номерами.

17) Поменяйте первый элемент вектора с последним, второй — с предпоследним и т.д. для четырех исходных векторов.

18) Напишите программу для умножения двух исходных матриц на число.

19) Вычислить сумму максимального элемента массива А и минимального элемента массива В для трех исходных матриц А и В.

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

21) Вычислить сумму элементов верхней треугольной матрицы для трех исходных матриц.

22) Решить уравнение ax2+bx+c=0 для трех различных наборов коэффициентов уравнения a, b, и c.

23) Для каждой из четырех исходных строк подсчитать количество слов и знаков препинания.

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

25) Найти в каждой строке матрицы наибольший элемент и поменять его местами с элементом главной диагонали для трех исходных матриц.

26) Для двух исходных матриц найти для каждой строки число элементов, кратных пяти, и наибольший из полученных результатов.

27) В трех исходных строках заменить точки словом "тчк" и подсчитать количество знаков препинания.

28) Найти строку с наибольшей и наименьшей суммой элементов для четырех исходных матриц.

29) Для двух исходных матриц упорядочить по возрастанию элементы.

30) Для трех исходных строк разбить каждую на четыре равные части и вывести их по-отдельности.

 

Контрольные вопросы.

1. Понятие подпрограммы.

2. Понятие процедуры. Объявление процедуры в Паскале.

3. Понятие функции. Объявление функции в Паскале.

4. Формальные и фактические параметры процедур и функций.

5. Параметры-значения подпрограммы.

6. Параметры-переменные подпрограммы.

7. Параметры-константы подпрограммы.

8. Что общего и в чем различие между процедурой и функцией в Паскале ?

9. Понятие глобальных и локальных переменных.

10. Как должны согласоваться между собой фактические и формальные параметры ?

11. В примере выполнения программы укажите фактические и формальные параметры и объясните действие программы.


 

Лабораторная работа № 9.

Работа с файлами

 

Цель работы: Знакомство с различными видами файлов, процедурами и функциями для обработки файлов. Овладение навыками алгоритмизации и программирования файловых структур данных, знакомство с задачами, для которых используют файлы.

 

Основные сведения.

Понятие файла очень широкое. Это может быть обычный файл данных на диске или коммуникационный порт, внешнее устройство. Файл может быть как источником, так и приемником информации. Для программиста в Паскале существует два различных понятия файла: физический файл и логический файл.

Физический файл — это именнованная область внешней памяти, содержащая какую-либо информацию. В MS-DOS спецификация файла включает: путь к файлу (диск, каталог, подкоталог), имя_файла и его расширение. Например: с:\TP7\lab5.pas, где с: - имя диска, TP7 – имя каталога и lab5.pas – имя файла с расширением pas. Файл может быть и без расширения. MS-DOS не делает особого различия между обычными файлами, т. е. набороми данных и устройствами. Устройства имеют свои фиксированные имена: CON - клавиатура при вводе и монитор при выводе, параллельный порт LPT и последовательный COM, принтер PRN, фиктивное устройство NUL и т. д. Имена физических файлов устройств должны записываться без знаков препинания; регистр роли не играет.

Логический файл — описывается как переменная файлового типа. Файл как тип данных является языковой единицей, в которой отражаются операнды программы, т. е. данные, предназначенные для обмена с физическим файлом.

Тип "файл" является структурным типом, который описывается в программе на основе других структурных или простых типов. Переменная типа "файл" (файловая переменная) состоит из более простых компонентов, как и любая другая структурная переменная. Тип компонентов определяет тип данных файла. Файл может содержать данные одного типа. Тип компонента может быть любым, кроме файлового. Файловые переменные не могут участвовать в операторе присваивания. При использовании файловых переменных в качестве формального параметра подпрограммы, они всегда должны быть объявлены как Var-параметры (параметр-переменная).

Турбо Паскаль поддерживает три разновидности файловых типов.

Текстовые файлы — файлы, содержащие коды ASCII, они организованы по строкам и обязательно содержат специальные коды, называемые конец строки и конец файла. Декларация текстового файла следующая:

Var F1:Text;

Любую информацию (символьную или числовую) текстовый файл хранит (отображает) в виде символов.

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

Read(f, <список ввода>);

Readln(f, <список ввода>);

Readln(f);

Здесь f – файловая переменная – имя логического файла, переменная, которая должна быть типа Text. Переменные в списке ввода могут быть числовые, символьные и строковые.

Вывод данных из оперативной памяти в файл (запись данных в файл):

Write(f,<Список вывода>);

Writeln(f,<Список вывода>);

Write(f);

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

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

1) Var F2: File of char;

2) Type Mass = array[1..10] of byte;

FileType = File of Mass;

Var F3: FileType;

Ввод-вывод данных типизированных файлов осуществляется с помощью прцедур Read(f,<список ввода>) и Write(f,<список вывода>) соответственно. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты типизированного файла f.  

Нетипизированные файлы также состоят из машинного представления данных, но если компонентный файл имеет дело с данными только одного заранее объявленного типа (например: File of real), то бестиповые файлы работают с произвольным набором байтов, независимо от их структуры и типа (блоки данных).

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

1.1. Процедуры и функции для работы с файлами.

     В Паскале имеется ряд стандартных процедур и функций, применимых к файлам любых допустимых типов.

1. Assign (var F; FileName:string); Связывавет файловую переменную F с физическим файлом с именем Filename. Например:

Assign (F1, 'data.txt');

Assign (F2,'c:\dos\data\myfile.dat');

Assign (F3,'LPT1');

2. Reset (var F); Открывает файл с логическим именем F для чтения.

3. Rewrite (var F); Открывает файл с логическим именем F для записи.

4. Close (var F); Закрывает канал ввода-вывода файла с логическим именем F.

5. Rename (var F; NewName:string); Переименовывает физический файл, ранее связанный с файловой переменной F, в файл с именем NewName. Процедура применима лишь к закрытым файлам.

6. Erase (var F); Стирает, если это возможно, физический файл, связанный с файловой переменной F. Применима только к закрытым файлам.

7. EOF (var F):boolean; Возвращает значение True, если достигнут конец физического файла, связанного с логическим файлом F, т. е. из файла уже больше нечего читать или файл пустой, иначе возвращает False.

8. EOLN (var F):boolean; Возвращает значение True, если достигнут конец строки физического файла, связанного с логическим файлом F, иначе возвращает False.

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

1. FileSize (var F):longint; Функция возвращает число записей компонентов (блоков) в открытом файле F.

2. FilePos (var F):longint; Функция возвращает номер записи компонента (блока) в открытом файле F, предшествующий тому, который будет считан или записан последующей операцией ввода-вывода.

3. Seek (Var F; N:longint); Устанавливает текущим компонентом (блоком) в открытом файле F компонент (блок) с номером N. Номер отсчитывается от нулевого. Назначенный компонент (блок) будет считан или записан последующей операцией ввода-вывода.

4. Truncate (Var F); Отсекает часть открытого файла F, начиная с того компонента (блока), который был бы считан последующей операцией чтения и подтягивает на его место конец файла. После отсечения прежнюю длину нельзя восстановить.

 

2. Пример:

А. Создать файл, содержащий сведения о датах рождения ваших сокурсников. Структура записи: фамилия, день рождения (число). Количество записей 5.

Program File_Creat;

uses crt;

type zapis=record

     famil:string[15];

     data:byte;

     end;

var F:file of zapis;

dan:zapis;

name:string;

i:byte;

begin

writeln;

write('Введите имя создаваемого файла ');

readln(name);

assign(F,name);

rewrite(F);

for i:=1 to 5 do with dan do begin

     write('фамилия - ');readln(famil);

     write('день рождения - ');readln(data);

     writeln(F,dan);

     end;

close(F);

clrscr;

reset(F);

writeln('Список из файла ',name);

repeat

read(F,dan);

with dan do begin

     write('фамилия - ');write(famil,' ');

     write('день рождения - ');writeln(data);

     end;

until eof(F);

close(F);

end.

 

Б. Написать программу, выводящую фамилии тех, кто родился во второй декаде месяца (числа от 10 до 20).

Program File_Work;

uses crt;

type zapis=record

     famil:string[15];

     data:byte;

     end;

var F:file of zapis;

dan:zapis;

name:string;

i:byte;

begin

writeln;

write('Введите имя открываемого файла ');

readln(name);

assign(F,name);

reset(F);

repeat

read(F,dan);

with dan do if (data>=10)and(data<=20) then begin

     write('фамилия - ');write(famil,' ');

     write('день рождения - ');writeln(data);

     end;

until eof(F);

close(F);

end.

 

 

Задание.

А. Написать программу создания файла в соответствии с номером варианта. Считать и вывести созданный файл на экран.

Б. Написать программу обработки файла, созданного по заданию пункта А, в соответствии с заданием, указанным в пункте Б для заданного варианта.

 

4. Варианты заданий.

1. А. Создать файл, содержащий сведения о месячной зарплате рабочих завода. Каждая запись содержит поля — фамилия рабочего, наименование цеха, размер заработной платы за месяц. Количество записей — не менее 10.

Б. Вычислить общую сумму выплат за месяц по цеху Х, а также среднемесячный заработок рабочего этого цеха. Напечатать для бухгалтерии ведомость для начисления заработной платы рабочим этого цеха.

2. А. Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Каждая запись содержит поля: фамилия сборщика, количество изделий, собранных им ежедневно в течение шестидневной недели, т.е. раздельно — в понедельник, вторник и т. д. Количество записей не менее 10.

Б. Написать программу, выдающую на печать следующую информацию: фамилию сборщика и общее количество деталей, собранное им за неделю; фамилию сборщика, собравшего наибольшее число изделий, и день, когда он достиг наивысшей производительности труда.

3. А. Создать файл, содержащий сведения о количестве изделий категории А, В, С, собранных рабочим за месяц. Структура записи имеет поля: фамилия сборщика, наименование цеха, количество изделий по категориям, собранных рабочим за месяц. Количество записей не менее 10.

Б. Считая заданными значения расценок SА, SВ, SС за выполненную работу по сборке единицы изделия категорий А, В, С соответственно, выдать на печать следующую информацию: общее количество изделий категорий А, В, С, собранных рабочим цеха Х; ведомость заработной платы рабояим цеха Х; средний размер заработной платы работников этого цеха.

4. А. Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонента, год установки телефона, номер телефона. Количество записей не менее 15.

Б. Написать программу, выдающую информацию следующего вида: по вводимой фамилии абонента выводится номер телефона; определяется количество установленных телефонов с ХХХХ года. Номер года вводится с клавиатуры.

5. А. Создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы. Количество записей не менее 10.

Б. Написать программу, в результате выполнения которой выдаются следующие сведения: названия игрушек, которые подходят детям от 1 до 3 лет; стоимость и наименование самой дорогой игрушки; название игрушки, которая по стоимости не превышает х рублей и подходит ребенку в возрасте от а до b лет. Значения х, а, b вводятся с клавиатуры.

6. А. Создать файл, содержащий сведения о сдаче студентами первого курса сессии. Структура записи: индекс группы, фамилия студента, оценки по пяти экзаменам. Количество записей не менее 15.

Б. Написать программу зачисления студентов группы Х на стипендию. Студенты, получившие все оценки "5" зачисляется на повышенную стипендию (доплата 50%), получившие оценки "4" и "5" и из них оценок "5" больше 75% — доплата 25%. Студенты, получившие только "4" и "5" зачисляются на обычную стипендию, остальные не зачисляются. Индекс группы вводится с клавиатуры.

7. А. Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: индекс группы, фамилия студента, оценки по пяти экзаменам и пяти зачетам ("з" означает зачет, "н" — незачет). Количество записей не менее 10.

Б. Написать программу, выдающую следующую информацию: фамилии неуспевающих студентов с указанием группы и количества задолженностей; средний балл, полученный каждым студентом группы Х, и всей группы в целом.

8. А. Создать файл, содержащий сведения о книгах в библиотеке. Структура записи: шифр книги, автор, название, год издания, местоположение (номер стеллажа и шкафа). Количество записей не менее 15.

Б. Написать программу, выдающую следующую информацию: местоположение книги автора Х названия Y; список книг автора Z; число книг издания ХХХХ года, имеющиеся в библиотеке. X, Y, Z вводить с клавиатуры.

9. А. Создать файл, содержащий сведения о наличии билетов и рейсах Аэрофлота. Структура записи: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне. Количество записей не менее 10.

Б. Написать программу, выдающую информацию следующего вида: время отправления самолетов в город Х; наличие свободных мест на рейс в город Х с временем отправления Y. Значения Х и Y вводятся с клавиатуры.

10. А. Создать файл, содержащий сведения об ассортименте обуви в магазине фирмы. Структура записи: артикул, наименование, количество, стоимость одной пары. Количество записей не менее 10. Артикул начинается с буквы Д для женской обуви, М для мужской, П для детской.

Б. Написать программу, выдающую следующую информацию: о наличии и стоимости обуви артикула Х; ассортиментный список женской обуви с указанием наименования и имеющегося в наличии числа пар каждой модели.

11. А. Создать два файла, содержащих сведения о десяти нападающих хоккейных команд "Металлург" и "Крылья Советов" соответственно: фамилии нападающих, число заброшенных ими шайб, сделанных голевых передач, заработанное штрафное время.

Б. Написать программу, которая по данным, извлеченным из этих файлов, создает новый третий файл, содержащий фамилию, команду, сумму очков (гол + передача) для шести лучших игроков обеих команд. Фамилии и показатели результативности этих игроков вывести на экран.

12. А. Создать файл, содержащий сведения о том, какие из пяти предлагаемых дисциплин по выбору желает слушать студент. Структура записи: фамилия студента, индекс группы, 5 дисциплин, средний балл успеваемости. Выбираемая дисциплина отмечается символом 1, иначе — пробел. Количество записей не менее 10.

Б. Написать программу, которая печатает список студентов, желающих прослушать дисциплину Х. Если число желающих превысит 5 человек, то отобрать студентов, имеющих более высокий средний балл успеваемости.

13. А. Создать файл, содержащий сведения об отправлении поездов дальнего следования с Казанского вокзала. Структура записи: номер поезда, станция назначения, время отправления, время в пути, наличие билетов. Количество записей не менее 10.

Б. Написать программу, которая позволяет получить следующую справочную информацию: время отправление поездов в город Х во временном интервале от А до В часов; наличие билетов на поезд с номером ХХ.

14. А. Создать файл, содержащий сведения о сотрудниках института. Структура записи: фамилия работающего, название отдела, год рождения, стаж работы, должность, оклад. Количество записей не менее 10.

Б. Написать программу, которая позволяет получить следующую информацию: список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы; средний стаж работающих в отделе Х.

15. А. Создать файл, содержащий сведения о пациентах глазной клиники. Структура записи: фамилия пациента, пол, возраст, место проживания (город), диагноз. Количество записей не менее 10.

Б. Написать программу, выдающую следующую информацию: количество иногородних, прибывших в клинику; список пациентов старше Х лет, имеющих диагноз Y. Значения X и Y ввести с клавиатуры.

16. А. Создать файл, содержащий сведения о студентах группы. Структура записи: номер по списку, фамилия, имя, отчество, год рождения, пол.

Б. Написать программу, печатающую список студентов мужского пола с указанием возраста.

17. А. Создать файл, содержащий сведения о членах гаражного кооператива. Структура записи: номер бокса, фамилия владельца, тип гаража. Количество записей не менее 10.

Б. Написать программу, выдающую следующую информацию: владелец бокса с номером Х; количество гаражей типа Y и их владельцы. Значения Х и Y вводить с клавиатуры.

18. А. Создать файл, содержащий данные об автолюбителях. Структура записи: фамилия владельца, марка автомобиля, государственный номер, год выпуска. Количество записей не менее 10.

Б. Написать программу, выдающую следующую информацию: фамилию владельца и марку его автомобиля по номеру; всех автовладельцев и марки автомобилей, у которых год выпуска ниже ХХХХ года.

19. А. Создать файл, содержащий сведения о трех любимых кинофильмах студентов группы (каждый студент по очереди вводит три названия фильма). Количество записей не менее 10.

Б. Написать программу, которая выводит список пяти наиболее популярных фильмов.

20. А. Создать файл, содержащий сведения о датах рождения ваших сокурсников. Структура записи: номер, фамилия, дата рождения (день, месяц, год). Количество записей не менее 10.

Б. Написать программу, выводящую фамилии тех, кто родился летом.

21. А. Создать файл, содержащий сведения о магазинах города. Структура записи: номер магазина, название, улица, номер дома. Количество записей не менее 10.

Б. Написать программу, выводящую следующую информацию: количество магазинов "Книги" и их адреса; данные о магазинах, находящихся на одной улице.

22. А. Создать файл, содержащий сведения о воспианниках художественной школы. Структура записи: шифр группы, фамилия, приоритетный предмет (живопись, графика, скульптура). Количество записей не менее 10.

Б. Написать программу, выдающую информацию о приоритетном направлении для учащегося по его фамилии; данные по ученикам Х группы и наиболее приоритетный предмет в этой группе.

23. А. Создать файл, содержащий сведения о спортсменах клуба "Фотон". Структура записи: фамилия занимающегося, вид спорта, абонентская плата за месяц по виду спорта, месяц и год начала занятий спортсмена. Количество записей не менее 10.

Б. Написать программу, выдающую следующую информацию: количество человек, занимающихся видом спорта Х; по фамилии Y спортсмена подсчитать сумму, которую он затратил на спорт с момента начала занятий по сегодняшний день.

24. А. Создать файл, содержащий сведения о киоске проката видеокассет. Структура записи: наименование фильма, сведение о том, сколько раз кассета была в прокате. Количество записей не менее 10.

Б. Написать программу, которая выводит на экран список четырех самых популярных фильмов с указанием числа их проката.

25. А. Создать файл, содержащий сведения о студентах вашей группы. Структура записи: фамилия, возраст, средний балл. Количество записей не менее 10.

Б. Написать программу, которая по выбору пользователя отсортирует список в алфавитном порядке или по возрастанию среднего балла студентов.

26. А. Создать файл, содержащий статистические сведения об испытаниях устройств. Структура записи: наименование устройства, число испытаний, число отказов. Количество записей не менее 10.

Б. Написать программу, выводящую следующие сведения: вероятность отказа устройства Х (отношение числа отказов к числу испытаний); название устройства с наибольшей вероятностью отказа.

27. А. Создать файл, содержащий сведения о фирме по продаже компьютеров. Структура записи: четыре модели процессоров, три марки матринских плат и пять видов видеокарт с указанием цен на каждую единицу товара.

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

28. А. Создать файл, содержащий сведения о складе товаров. Структура записи: наименование товара, количество, стоимость единицы товара. Количество записей не менее 10.

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

29. А. Создать файл, содержащий сведения о зарегистрированных автомобилях в один день. Структура записи: фамилия владельца, номер автомобиля, цвет, время регистрации (час и минуты). Количество записей не менее 10.

Б. Написать программу, выводящую следующую информацию: количество автомобилей и их данные, зарегистрированные до полудня; фамилии владельцев автомобилей с номером, начинающимся с буквы "о" и кончающийся двумя буквами "о" (оХХХоо).

30. А. Создать файл, содержащий сведения о военослужащих военной части. Структура записи: фамилия, звание, год и месяц призыва. Количество записей не менее 10.

Б. Написать программу, выводящую список военослужащих, которые будут демобилизованы в текущем месяце.

 

Контрольные вопросы.

31) Понятие файла. Физический и логический файл в Паскале.

32) Файловая переменная. Типы файлов.

33) Текстовые файлы.

34) Компонентные файлы.

35) Бестиповые файлы.

36) Процедуры и функции для работы с файлами.

37) Процедуры и функции для работы с типизированными файлами.

 


 

Лабораторная работа № 10.


Дата добавления: 2018-11-24; просмотров: 824; Мы поможем в написании вашей работы!

Поделиться с друзьями:






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