Главная страница

Учебное пособие Омск Издательство Омгту 2010 удк 004. 4 (075) ббк 32. 973018я73 ч 49 Рецензенты


Скачать 1.07 Mb.
НазваниеУчебное пособие Омск Издательство Омгту 2010 удк 004. 4 (075) ббк 32. 973018я73 ч 49 Рецензенты
АнкорABC_Pascal.doc
Дата15.02.2017
Размер1.07 Mb.
Формат файлаdoc
Имя файлаABC_Pascal.doc
ТипУчебное пособие
#2721
страница8 из 8
1   2   3   4   5   6   7   8
Тексториентированные процедуры и функции
При выводе логических выражений в зависимости от значения выво­дятся подстроки TRUE и FALSE. Ввод логических констант процедурами RE­AD и READLN не предусмотрен.

10.7. Примеры и задания для работы с файлами

Пример 1. Написать программу, которая вводит с клавиатуры три вещественных числа и записывает эти числа и их сумму в файл FXD.DAT.

PROGRAM FileFD;

VAR

y, x1, x2, x3: real;

FD: TEXT;

BEGIN

ASSIGN(FD, 'FXD.DAT');

READ(x1, x2, x3); {ввод трех чисел}

REWRITE(FD); {открыть файл для записи}

y := x1 + x2 + x3;

WRITELN(FD,' x1=',x1,' x2=',x2,' x3=',x3); {вывод в файл x1,x2,x3}

WRITELN(FD,' сумма = ',y); {вывод в файл суммы}

CLOSE(FD); {закрыть файл}

END.

Пример 2. Вычислить суммы элементов в столбцах двумерного числового массива А[1..2,1..4], заданного в файле FILE1.dat. Полученные значения поместить в файл FILE2.dat.

Для решения задачи разработана СА (рис. 16) и программа:



Program lr_11;

Var

a: array [1..2,1..4] of integer;

s: array[1..4] of integer;

i, j: integer;

f1, f2: text; {объявление файловых переменных текстового типа}

Begin

ASSIGN(f1,’FILE1.dat’); {связывание f1 с физическим файлом}

ASSIGN(f2,’FILE2.dat’);

RESET(f1); {открыть файл для чтения}

for i:=1 to 2 do

for j:=1 to 4 do

Read(f1, a[i, j]); {чтение из файла, связанного с f1 }

CLOSE (f1); {закрыть файл, связанный с f1}

REWRITE (f2); {открыть файл для записи}

WRITELN (f2,’ 1 2 3 4 - столбцы’); {вывод в файл через f2}

WRITELN (F2,’суммы по столбцам); {вывод в файл через F2}

for j:=1 to 4 do

begin

s[j] := 0;

for i:=1 to 2 do

s[j] := s[j] + a[i,j];

write(f2, s[j]:3) {вывод в файл через F2}

end;

CLOSE(F2) {закрыть файл, связанный с F2}

END.

Файл результатов

Исходный файл FILE2.dat

FILE1.dat 1 2 3 4  столбцы

2 2 3 4 суммы по столбцам

5 2 3 4 7 4 6 8
Задания для самостоятельного выполнения

Задание 1

Выполнить задачу из раздела 7.10, считывая исходные данные из одного файла и записывая полученные результаты в другой текстовый файл. Файл с исходными данными должен быть подготовлен предварительно.
Задание 2

1. В текстовом файле Т1 записана последовательность целых чисел, разделенных пробелами. Написать программу, записывающую в текстовый файл Т2 все положительные числа из Т1.

2. В текстовом файле f1 записана последовательность чисел. Сформировать текстовый файл f 2, содержащий все числа в обратном порядке.

3. В текстовом файле Т1 записана последовательность чисел. Разработать программу, переписывающую в текстовый файл Т2 сначала все положительные числа из Т1, нуль, затем – все отрицательные числа.

4. В текстовом файле f 1 дана последовательность целых чисел, разделенных пробелами. Записать в текстовый файл F2 все положительные числа, а в файл F3 – отрицательные числа и нулевые элементы.

5. Сформировать файл из девяти строк, в первой из которых – одна единица, во второй – две двойки,…, в девятой – девять девяток.

6. Даны два файла F1, F2. Сформировать третий файл F, в который сначала записать все элементы файла F1, а затем – элементы файла F2.

7. Элементы каждого из заданных в двух файлах массивов X и Y упорядочены по возрастанию. Объединить элементы этих двух массивов в один файл F с упорядочением их по возрастанию.

8. В заранее подготовленном файле K задан массив из 15 целых чисел. Выделить в другой файл те элементы массива K, индексы которых являются степенями двойки.

9. В текстовом файле S1 записана последовательность из N*K чисел. Написать программу, формирующую в файле S2 матрицу из N строк по K чисел в каждой строке.

10. В файле W задан массив из девяти элементов. В новом файле WW сформировать массив, в котором каждому элементу будет присвоено значение соседнего с ним справа. Последнему элементу присвоить значение первого.

11. В файле D1 задана квадратная матрица вещественных чисел. Сформировать файл D2, в котором поменять местами первую и последнюю строки.

12. В текстовом файле F подготовить последовательность целых чисел, разделенных пробелами. Написать программу, записывающую в текстовый файл FF все различные значения, встречающиеся в файле F.

13. В файле X1 задана матрица целых чисел. Сформировать файл Х2, в котором все элементы с четными номерами строки и столбца матрицы заменить нулем (стереть).

14. В файле X задан массив из 20 чисел. Упорядочить его по возрастанию и занести в файл Y.

15. Задана в файле строка текста. Выполнить все циклические сдвиги слов в заданном тексте влево. Каждый полученный при этом текст вывести в другой файл.

16. В файле Y1 задана матрица вещественных чисел. Сформировать файл Y2, в котором строки матрицы упорядочены по убыванию элементов первого столбца.

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

18. Имеется текстовый файл BOOK. Написать программу, которая игнорирует исходное деление этого файла на строки, переформирует его, разбивая на строки так, чтобы каждая строка оканчивалась точкой либо содержала ровно 40 литер, если среди них нет точки.

19. Имеется текстовый файл T. Вывести в новый файл и напечатать первую из самых коротких его строк.

20. Имеется текстовый файл, содержащий фразу. Написать программу, которая считывает из файла литеры до первой точки и записывает их (без точки) в другой текстовый файл, формируя в нем строки по 20 символов (в последней строке литер может быть меньше).
11. КОМБИНИРОВАННЫЙ ТИП – ЗАПИСИ

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

Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа.

11.1. Структура данных типа записи

Структура объявления типа "запись" имеет следующий вид:

TYPE <ИмяТипа> = RECORD

<поле1>: <тип поля1>;

<поле2>: <тип поля2>;

. . .

<полеN>: <тип поляN>

end;

Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. <ИмяТипа> и поля являются правильными идентификаторами.

Например:

TYPE

DENROGD = RECORD

name: string; {фамилия или имя }

den, mes: byte; {день, месяц}

god: word {год}

end;

Определение константы – записи будет иметь вид

<идентификатоp>: <тип_записи > = (<список_значений_полей>);

Список значений полей представляет собой список из последователь­ностей вида: имя поля, двоеточие и константа. Поля должны указываться в той же последовательности, в какой они перечислены в объявлении типа. Например:

TYPE POINT = record

x, y: real;

end;

CONST

p: POINT = (x:1; y:1);
Объявление переменных производится в разделе VAR:

VAR a, b: DENROGD;

Доступ к каждой компоненте записи производится указанием состав­ного имени: имени переменной и затем через точку имени поля. Например:

a.name := ' MARINA';

a.god := 1991;

a.den := 23;

a.mes := 3;

Таким образом, в типе "запись" определена операция присваивания. Кроме того, как и в массиве, все значения переменных типа "запись" можно присваивать другим переменным того же типа: B := A; .

Над полями можно выполнять действия, разрешенные для базового типа:

b.god := а.god + 1; {на год старше}.

В качестве переменной может быть объявлен массив записей:

VAR s: array[1..20] of STUDENT;

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

Program zapis;

Type {определение нового типа}

student = record {запись}

name: string[15];

den, mes: byte;

god: word

end;

Var

Z: ARRAY [1..20] OF student;

k, m, i, n: byte;

r: string[15]; {вспомогательная строка для перестановки}

BEGIN

writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ');

READln(n);

for i:=1 to n do

begin

writeLN('ВВЕДИТЕ имя ',i,' студента с прописной буквы');

readLN (z[i].name);

WRITELN('ВВЕДИТЕ день рождения');

readLN(z[i].den);

WRITELN('ВВЕДИТЕ месяц рождения');

readLN(z[i].mes);

WRITELN('ВВЕДИТЕ год рождения');

readLN(z[i].god);

end;

for I := n downto 2 do {********* Упорядочение списка *********]

begin {поиск "наибольшего" значения поля NAME}

m:=1;

for k:=2 to i do if z[k].name > z[m].name then m := k;

r := z[i].name; {перестановка записей}

z[i].name := z[m].name;

z[m].name := r

end; {**************************************}

writeln(' Упорядоченный список ');

for i:=1 to n do

begin

WRITE(z[i].name);

WRITELN(' Дата рождения:', z[i].den, '.' ,z[i].mes, '.', z[i].god);

end

END.

11.2. Обработка полей записей

Для упрощения доступа к полям записи может использоваться оператор присоединения. Структура оператора имеет вид

WITH <переменная­_Типа_Запись> DO <оператор>;

где WITH, DO  ключевые слова ( с, делать).

Пример. WITH a DO // где a – запись, структуру см. в п. 11.1

begin

name:='MARINA';

god:=1991;

date:=23;

mes:=3

end;

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

Пример. Определим вложенную запись (запись в записи)

TYPE

STUDENT = RECORD

name: string;

DenRogden: RECORD

den, mes: byte;

god: word

end;

end;

VAR z: STUDENT;

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

z.name := 'LIZA';

z.DenRogden.god := 1994;

Используя оператор присоединения, к этим же полям можно получить доступ другими способами:

WITH z DO

begin

name := 'LIZA';

with DenRogden DO

god := 1994;

end;

или

WITH z DO name := 'LIZA';

WITH Z DO with DenRogden DO god := 1994;

К полю GOD можно также обратиться и следующим оператором:

WITH z.DenRogden DO god:=1994;

Используя тип "запись", можно составить базы данных для разных назначений, а затем обрабатывать их с помощью программы [3–6]. При этом нужно следить, чтобы среди идентификаторов полей не было одинаковых.
11.3. Задания с обработкой записей

Задание 1

1. Ввести оценки студента по 5 экзаменам. Определить средний балл и подсчитать количество удовлетворительных, хороших и отличных оценок. Напечатать название предмета, если есть «неуд».

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

3. Дан список студентов группы. Заполнить его следующими сведе­ниями: фамилия, имя, отчество; имеет ли компьютер (если имеет, то ка­кой и с какого года). Подсчитать сколько студентов имеют ПК.

4. Сформировать список студентов группы со следующими сведения­ми: фамилия, имя, отчество, знает ли языки программирования Pascal ABC, Cи (если да, где обучался и сколько лет). Подсчитать, сколько студентов знают язык Си, сколько – Pascal ABC, сколько – оба языка.

5. Сформировать список студентов группы, в котором указать фами­лию (имя, отчество); город, в котором получил среднее образование (номер школы, если обучался в Омске). Подсчитать, сколько в группе иногородних студентов.

6. Сформировать запись «ключевые слова Pascal ABC»: слово и перевод. Подсчитать их количество. Организовать поиск: ключевое слово – перевод и наоборот.

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

8. Сформировать запись «Даты – праздники». Организовать в прог­рамме ввод дат, подсчитать число праздничных дней и рабочих.

9. Сформировать запись «английское слово – перевод». Вводя слово (английское или русское), найти перевод или выдать сообщение «нет в словаре». По возможности предусмотреть пополнение словаря.

10. Сформировать запись «операторы Pascal ABC»: оператор, действие. Подсчитать их количество и число операторов, имеющих повторяющие­ся ключевые слова.

11. Сформировать запись «типы Pascal ABC»: имя, тип, операции, разрешен­ные в данном типе. Подсчитать количество разных операций и вывести списки типов для каждой операции.

12. Сформировать пополняемую базу данных «Континент – страны», в которой указать столицы, численность населения, крупные города. Ор­ганизовать поиск страны по городу, стран или городов на континенте.

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

14. Сформировать список граждан, в котором указать фамилию, имя, отчество; адрес; профессию. Организовать в программе выборку и подс­чет граждан с одинаковой профессией.

15. Сформировать список студентов группы, в котором указать фами­лию, имя, отчество; день, число и месяц рождения. Организовать выбор­ки по месяцу и году рождения.

16. Дан список студентов группы. Заполнить его следующими сведе­ниями: фамилия, имя, отчество; день, число и месяц рождения. Распе­чатать список в порядке возрастания дат рождения.

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

18. Разработать базу данных «География. Реки», в которой указать название реки, местоположение, длину, глубину.

19. Разработать базу данных «Астрономия», в которой указать название звезды, величину, созвездие.

20. Разработать базу данных «Планеты солнечной системы», в которой указать название планеты, величину, удаленность, спутники.

21. Сформировать базу данных «Химические элементы», в которой указать название элемента, формулу, группу, организовать выборки.

22. Ввести сведения о человеке: фамилия, имя, отчество, пол, национальность, рост, вес, дата рождения.

23. Ввести сведения о гражданине: Ф.И.О., дата рождения, ИНН, № страхового свидетельства, № медицинского полиса. Запрограммировать поиск.

24. Сформировать справочник о спортивных командах: название, город, число сыгранных игр, число очков, количество игроков.

Задание 2

Дополнить программу для предыдущего задания заполнением и обработкой файлов. Имя файла вводить с клавиатуры в процессе работы программы.

12. Процедурные типы

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

TYPE

Proc1 = Procedure(a, b, c: real; var d: real);

Proc2 = Procedure(var b1, b2:byte);

Proc3 = Procedure;

Func = Function(x: real):real;

Func2 = Function(s: string): string;

Для объявления переменных процедурного типа используется запись:

VAR pr: proc1;

f: func;

Пример применения параметра – функции :

type Func = Function(x : real): real;

Function F1(x: real): real;

Begin

. . .

end;

Procedure FF(n:byte; F:Func);

Var ...;

Begin

. . .

end;

BEGIN

. . .

FF(2,F1); ... FF(5,F1);

END.

Библиографический список

  1. Михалкович, С.С. Pascal ABC & Programming Taskbook ME / С.С. Михалкович, М.Э. Абрамян. [Электронный ресурс]. – Режим доступа – http://sunschool.math.rsu.ru/

  2. Ерёмин, О.Ф. Методическое пособие по программированию на языке Pascal ABC / О.Ф. Ерёмин. – Моздок, 2009. – 49 с. [Электронный ресурс]. – Режим доступа – http:// scholtro.narod.ru

  3. Чернов, Ю.П. Программирование для начинающих. Turbo Pascal 7.0: учеб. пособие / Ю.П.Чернов, О.П. Шафеева. – Омск: Изд-во ОмГТУ, 2007. – 132 с.

  4. Чернов, Ю.П. Практикум по программированию для начинающих: учеб. пособие / Ю.П.Чернов, О.П. Шафеева. – Омск: Изд-во ОмГТУ, 2000. – 128 с.

  5. Фаронов, В.В. Турбо Паскаль. Начальный курс / В.В. Фаронов. – М.: Нолидж, 1997. – 616 с.

  6. Марченко, А.И. Программирование в среде Turbo PASCAL. Базовый курс / А.И. Марченко, Л.А. Марченко. – Киев: ВЕК+, 1999. – 464 с.

  7. Иванова, Г.С. Технология программирования / Г.С. Иванова. – М.: Изд-во МГТУ им. Баумана, 2006. – 336 с.

  8. Мануйлов, В.Г. Разработка программного обеспечения на Паскале / В.Г. Мануйлов. – М.: ПРИОР, 1996. – 240 с.

  9. Основы программирования в среде Турбо Паскаля: метод. указания / сост. О.П. Шафеева, Ю.П.Чернов. – Омск: Изд-во ОмПИ, 1999. – 48 с.

  10. ГОСТ 19.701-90. Схемы алгоритмов, пpогpамм, данных и систем. Единая система программной документации. – М.: Изд-во стандартов, 1991. – 26 с.

  11. Алгоритмизации и программирования. Турбо Паскаль : метод. указания / сост. О.П. Шафеева.  Омск: ОмГТУ, 2004. – 48 с.

  12. Методы проектирования программ: метод. указания к выполнению курсовой работы / сост. О.П. Шафеева. – Омск: ОмГТУ, 2004. – 32 с.

  13. Кинг, Д. Создание эффективного программного обеспечения / Д. Кинг. – М.: Мир, 1991. – 287 с.

  14. Камаев, В.А. Технологии программирования / В.А. Камаев, В.В. Костерин. – М.: Высш. шк., 2005. – 359 с.



Приложение

Обозначения графические в схемах алгоритмов (ГОСТ 19.701-90)

Символ

Наименование
Назначение















Данные



Процесс


Предопределенный процесс

Подготовка

Решение

Граница цикла
Соединитель

Терминатор

Комментарий

Основная линия

Определяет ввод или вывод на внешнее устройство или любой носитель данных

Отражает обработку данных: выполнение отдельной операции или группы операций

Отображает предопределённый процесс, состоящий из одной или нескольких операций программы, которые определены в другом месте (подпрограмме, модуле)

Отражает инициализацию и модификацию параметра для управления циклом со счётчиком

Описывает проверку условия и выполняет переключение по одному из условий. Имеет один вход и два или более альтернативных выходов, один из которых активизируется после вычисления условия внутри символа

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

Используется для обрыва линии и продолжения её в другом месте. Должен содержать уникальное обозначение

Определяет начало и конец структурной схемы алгоритма программы или подпрограммы

Используется для добавления пояснительных записей. Связывается с символом или группой символов, обведённых пунктиром

Отображает последовательность выполнения действий в алгоритме

СОДЕРЖАНИЕ

Введение 3

1. Система программирования Pascal ABC 4

1.1. Структура меню среды 5

1.2. Команды редактора Pascal ABC 6

1.3. Правила оформления программ 8

1.4. Компиляция и исправление синтаксических ошибок 9

1.5. Этапы подготовки и решения задач на компьютере 10

1.6. Словарь основных терминов 11

2. Начальные сведения о языке Pascal ABC 12

2.1. Алфавит языка 12

2.2. Константы 13

2.3. Идентификаторы и типы данных 14

2.4. Переменные и именованные константы 15

2.5. Структура простой программы и комментарий 16

3. Оператор присваивания и числовые данные 17

3.1. Арифметические выражения 17

3.2. Оператор присваивания 18

3.3. Процедуры ввода-вывода 18

3.4. Стандартные функции Pascal ABC 19

3.5. Целые типы в Pascal ABC 20

3.6. Вещественные типы 22

3.7. Примеры и задания к самостоятельному выполнению 23

4. Программирование разветвленных алгоритмов 26

4.1. Логические выражения 26

4.2. Условный оператор IF 28

4.3. Составной и пустой операторы 29

4.4. Оператор безусловного перехода 29

4.5. Пример и задания с оператором IF 30

4.6. Оператор выбора варианта CASE 34

4.7. Примеры и задания с оператором CASE 35

5. Программирование алгоритмов циклической структуры 37

5.1.Оператор счётного цикла 37

5.2. Примеры и задания для оператора цикла со счётчиком 38

5.3. Оператор цикла с предусловием 41

5.4. Пример и задания для оператора цикла с предусловием 41

5.5. Оператор цикла с постусловием 44

5.6. Процедуры прерываний циклов 44

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

6. Структурированные типы данных 48

6.1. Массивы данных 48

6.2. Пример и задания для одномерных массивов 50

6.3. Ограниченный тип (диапазон) 52

6.4. Пример и задания для двумерных массивов 53

7. Структурное программирование 56

7.1. Структура сложной программы 56

7.2. Подпрограммы. Процедуры и функции 58

7.3. Структура подпрограммы-функции 60

7.4. Примеры и задания с подпрограммой-функцией 60

7.5. Структура подпрограммы-процедуры 64

7.6. Передача в подпрограмму массивов и строк 65

7.7. Рекурсия в программе 65

7.8. Вложенные подпрограммы. 66

7.9. Процедуры EXIT и HALT 67

7.10. Пример и задания с подпрограммой-процедурой 67

8. Обработка символьных данных 71

8.1. Символьный тип 71

8.2. Задания для символьных данных 73

9. Обработка строк текста 74

9.1. Строковый тип 74

9.2. Встроенные функции и процедуры для обработки строк 75

9.3. Пример и задания для обработки строк 77

10. Файлы 79

10.1. Процедура связывания файлов 80

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

10.3. Типизированные файлы 82

10.4. Текстовые файлы 83

10.5. Процедуры ввода 84

10.6. Процедуры вывода 85

10.7. Примеры и задания для работы с файлами 87

11. Комбинированный тип – записи 90

11.1. Структура данных типа записи 90

11.2. Обработка полей записей 93

11.3. Задания с обработкой записей 94

12. Процедурные типы 96

Библиографический список 97

Приложение. Обозначения графические в схемах алгоритмов 98

Редактор Е.С. Воронкова

Компьютерная верстка О.Г. Белименко

ИД № 06039 от 12.10.2001

Свод. темплан 2010 г.

Подписано в печать 03.06.10. Формат 60х84 1/16. Отпечатано на дупликаторе.

Бумага офсетная. Усл. печ. л. 6,25. Уч.-изд. л. 6,25. Тираж 100 экз. Заказ 398.




Издательство ОмГТУ. Омск, пр. Мира, 11. Т. 23-02-12

Типография ОмГТУ

1   2   3   4   5   6   7   8


написать администратору сайта