Реферат Курсовая Конспект
Информатика Лабораторный практикум По программированию На Турбо-Паскале - раздел Информатика, Министерство Образования Российской Федерации Российский Госу...
|
Министерство образования Российской Федерации
РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ГИДРОМЕТЕОРОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ
В.А. БОЛЬШАКОВ, Г.И.ВОРОНОВ, Л.А. САВВАТЕЕВА
Информатика
Лабораторный практикум
По программированию
СОДЕРЖАНИЕ
СОДЕРЖАНИЕ.. 3
Предисловие.. 4
Лабораторная работа № 1. 8
Лабораторная работа № 2. 19
Лабораторная работа № 3. 29
Лабораторная работа № 4. 41
Лабораторная работа № 5. 54
Лабораторная работа N 6. 69
Лабораторная работа N 7. 81
Лабораторная работа N 8. 99
Лабораторная работа № 9. 129
Литература.. 151
Приложение А. Система меню и команды Турбо-Паскаля.. 152
Приложение Б. Сообщения об ошибках.. 172
Приложение В. Описание числовых файлов для лабораторных работ 184
Приложение Г. Таблица ASCII-кодов (с альтернативной кодировкой) 189
Предисловие
Сегодня невозможно представить себе современного специалиста, не владеющего персональным компьютером. Особенно ценно при этом умение подчинить персональный компьютер своим требованиям, грамотно поставить, спроектировать и решить профессиональную задачу. Для этих целей в курсе информатики студентов первых курсов знакомят с основами программирования, чтобы с самого начала обучения студент освоил инструмент, который можно было бы в дальнейшем применять для решения как учебных, так и любых других практических задач.
В качестве базового языка программирования выбран один из самых распространенных алгоритмических языков – язык Паскаль, который, благодаря своей простоте и стройности, с нашей точки зрения, наиболее подходит для обучения студентов.
Лабораторный практикум предназначен в первую очередь для обучения основам и принципам программирования, во вторую – для реализации программирования на конкретном алгоритмическом языке Паскаль и в третью – для освоения средства программирования – среды Турбо-Паскаль. Лабораторный практикум ориентирован на освоение идей структурного программирования, начиная от простейших линейных алгоритмов, и до использования внешних подпрограмм и функций.
Задания к лабораторным работам проходили "обкатку" на студентах первого курса всех факультетов гидрометеорологического института. Никаких специальных вопросов, относящихся к профильным дисциплинам института, в практикуме не предусмотрено.
Это также связано с тем фактом, что обучение программированию проводится на первом курсе, когда студенты еще не обладают достаточными знаниями в высшей математике, не проходили разделов теории вероятностей и математической статистики, не начали изучать специальные дисциплины (приемы и методы которых студентам и приходится впоследствии реализовывать на ЭВМ). Поэтому основное внимание уделяется обучению и закреплению навыков по использованию типовых алгоритмов, рекомендуемых приемов и правил программирования, и, главное, умению построить алгоритм решения задачи.
Как уже упоминалось ранее, задания к лабораторным работам не ориентированы на какую-либо конкретную версию Турбо-Паскаля (за исключением лабораторных, посвященных изучению библиотеки Турбо-Паскаля), и могут быть использованы и при изучении других языков. Однако пояснения и примеры программ выполнены на языке Паскаль, а все программы проверялись в среде Турбо-Паскаль 6-ой версии.
Полный курс лабораторных работ включает девять заданий (по одному варианту каждой лабораторной). В каждой лабораторной изучается несколько новых синтаксических конструкций языка и структурных компонентов программных модулей и закрепляются ранее рассмотренные вопросы.
В лабораторных работах изучаются следующие темы:
· Линейные алгоритмы
· Алгоритмы с ветвлениями
· Алгоритмы простейших циклов
· Работа с одномерным массивом
· Обработка двумерных массивов
· Итеративные циклы
· Процедуры. Функции пользователя
· Графика в Турбо-Паскале
· Динамические переменные (списки)
Дополнительно рассмотрены некоторые вычислительные алгоритмы и соответствующие им программы. В данном курсе не рассматриваются вопросы объектного программирования из-за ограниченных возможностей по выделяемым на обучение временным и техническим ресурсам.
Все варианты подобраны так, чтобы в серии работ с одним номером встретились различные типы алгоритмов (итеративные и арифметические циклы, вычисления сумм и поиски экстремумов, сортировки массивов и обработки двумерных массивов) и обрабатывались данные разных типов – числовые (целочисленные и вещественные), символьные и логические. В конце каждого набора заданий приведен 31-й вариант средней сложности, который подробно разбирается и по нему составляется программа.
В начале каждой лабораторной работы рассматриваются основные моменты, связанные с изучаемыми в данной работе особенностями программирования. Поэтому лабораторный практикум может быть использован и для самостоятельного изучения как принципов программирования, так и их конкретной реализации на языке Паскаль.
Авторы выражают благодарность старшему преподавателю кафедры МИТ Волгину Д.И. за помощь, оказанную при проверке лабораторных работ и оформлении настоящего практикума.
Общая схема выполнения лабораторной работы
Выполнение каждой лабораторной обязательно включает несколько этапов, ни один из которых не должен пропускаться. Начинаться работа должна с разбора задания и составления списка объектов, которые будут встречаться в программе (в изображении алгоритма). Этот список объектов в виде таблицы идентификаторов (таблицы распределения памяти) особенно важен в первых работах. Как показал опыт, неумение выделить и описать используемые в программе данные в 90% случаев приводит к ошибкам в программах, например, порядковый номер путают со значением элемента в последовательности, общее количество объектов – с количеством объектов, удовлетворяющих какому-либо критерию и так далее.
Изображение алгоритмов следует выполнять максимально подробно, особенно в первых работах. Нельзя опускать изображения блоков алгоритма, если они "само собой разумеются". Можно позволить объединять в блоке несколько однотипных действий (например, очистку нескольких переменных), но запрос на ввод какого-либо значения и собственно ввод этого значения в переменную с клавиатуры необходимо изображать двумя отдельными блоками, пока обучающиеся не привыкнут, что всякому вводу данных пользователем программы должен предшествовать запрос со стороны программы (ПЭВМ).
Очевидно, что каждая лабораторная должна быть выполнена на компьютере, и только после этого может быть оформлена и представлена к защите. Отчет должен содержать титульный лист, задание, таблицу идентификаторов, блок-схему алгоритма, листинг программы и протокол работы программы (в виде распечатки текстового файла с исходными данными и результатами работы программы). Рекомендуемое оформление каждого раздела приведено ниже. Важно отметить, что с первой же лабораторной работы следует придерживаться порядка и аккуратности в оформлении лабораторной работы. Это важный фактор обучения программированию, так как такой стиль работы в дальнейшем существенно уменьшает количество ошибок и ускоряет процесс написания и отладки программ.
При наличии достаточного количества технических ресурсов (принтера и расходных материалов к нему) все части лабораторной работы (кроме блок-схемы алгоритма) могут распечатываться на принтере. Как минимум, в отчете должна присутствовать распечатка текста программы и результатов ее работы, остальные разделы могут быть выполнены вручную.
При написании текста программы следует придерживаться некоторых рекомендаций. В частности, текст программы должен содержать:
· Комментарий с указанием фамилии программиста и номера группы.
· Описание всех используемых в программе идентификаторов (имен).
· Ввод требуемого количества данных из указанного в задании файла или иной способ задания исходных данных, как сказано в задании.
· Вывод в выводной текстовый файл (до четвертой работы – на экран) введенных исходных числовых значений под заголовком "Исходные данные".
· Проведение обработки числового материала в соответствии с заданием.
· Вывод результатов обработки в выводной текстовый файл (до четвертой работы – на экран) под заголовком "Результаты расчета", с пояснениями, если результат не может быть выведен.
Текст программы (листинг) рекомендуется писать с выделением вложенных циклов, составных операторов и структур смещением на две – три позиции, что облегчает чтение программы и упрощает отладку (поиск пропущенных программных скобок и несоответствий алгоритму).
Листинг и вывод результатов следует размещать так, чтобы в дальнейшем был возможен вывод на печать. Для этого следует учитывать, что ширина стандартного листа бумаги реально позволяет печатать текст шириной до 75 символов в строке, листа из тетради – до 60 символов в строке, двойного листа из тетради – до 76 символов в строке (как правило, это стандартный шрифт матричного принтера).
Наконец, несколько слов о рекомендуемой литературе. Для работы желательно иметь описание языка и инструментальной среды используемой системы программирования. В частности, удобно пользоваться книгами [1,2,4], где описано и то, и другое.
Лабораторная работа № 1
Алгоритмы линейной структуры
Задачи лабораторной работы
Вопросы, изучаемые в работе
Задание (общее ко всем вариантам).
Запрограммировать вычисление заданной функции, вычислить и вывести на экран результат при указанных значениях аргументов. Проверить программу по приведенному в задании ответу. Оформить отчет по лабораторной работе в соответствии с образцом, приведенным для варианта № 31. Таблицу идентификаторов, блок-схему алгоритма и текст программы аккуратно выполнить от руки, с обозначениями пробелов (в программе), где они необходимы.
Содержание программы
Разбор контрольного варианта
Титульный лист
Задание
С помощью операторов присваивания задать значения всем аргументам, входящим в выражение, вычислить выражение и, присвоив полученное значение переменной Х, вывести результат на экран
A=10-2 ; C=102 ; D= -2.5 ;
Таблица распределения памяти
Таблица 4 Таблица идентификаторов
Имя | Тип | Р-р, б | Назначение |
Lab_1 | Имя программы | - | Расчет формулы |
X | Вещественное. | Результат (выражения) | |
A | Вещественное | Аргумент | |
C | Вещественное | Аргумент | |
D | Вещественное | Аргумент | |
R | Вещественное | Рабочая переменная | |
Sqrt | Вещ.функция | – | Вычисление квадратного корня |
Exp | Вещ.функция | – | Вычисление экспоненты |
Ln | Вещ.функция | – | Вычисление натурального логарифма |
Блок-схема алгоритма
Текст программы
PROGRAM Lab_1;
{
Лабораторная работа N 1
Вариант N 31
А.Я.Умненькая, ст. гр. Я-007
}
VAR
A,C,D,X,R :real;
BEGIN
A:=1e-2;
C:=1e2;
D:=-2.5;
R:=Exp(1.5*Ln(A));
X:=Sqrt( Exp(D/3.0*Ln(C)) - 0.5*R +
Exp(R*(C+D)/2.0/A) );
Writeln(' X= ',X:12);
END.
Результат расчета
X= 1.14453E+01
Варианты заданий
Таблица 5. Исходные данные к лабораторной работе №1
№ вар. | Программируемая формула | A | B | C | D | Результат |
105 | 2.5 | 1.95862E+2 | ||||
104 | 0.1 | -3 | -1.48774E+1 | |||
104 | 0.2 | 1.79615E+1 | ||||
10-2 | -1.5 | 4.1 | -3 | 1.61778E-2 | ||
101 | -1.7 | 3.9 | -3 | -3.83304E+0 | ||
103 | 3.5 | 4.1 | -3 | 1.06442E+1 | ||
101 | -0.5 | 1.1 | -1 | 9.65643E-1 | ||
102 | -20.5 | 5.1 | -1.5 | 1.36556E+3 | ||
10-1 | 2.5 | 5.1 | -1.5 | -5.55037E-1 | ||
10-1 | 1.2 | 5.1 | 2.05 | 1.42678E+3 | ||
103 | 7.21 | - | 2.79759E-1 | |||
1.3 | 0.1 | -.05 | 4.72802E+0 | |||
10-2 | 1.39 | 3.1 | 0.55 | 1.39860E-4 | ||
10-3 | 21.39 | 23.1 | -0.12 | -4.73017E+0 | ||
10-1 | 2.1 | 0.1 | -3.12 | -2.24257E+0 | ||
10-3 | -2.1 | 1.1 | -3.12 | 1.07743E+2 | ||
104 | 122.2 | 1.1 | -3.12 | 4.39587E+0 | ||
103 | 33.3 | 2.1 | - | 3.15920E+1 | ||
-103 | - | - | 2.96095E+1 | |||
-104 | 0.2 | -0.5 | 5.26688E-1 | |||
104 | 7.7 | -0.9 | 0.77 | 9.38646E-1 | ||
103 | -0.88 | 0.9 | 1.77 | -1.08136E+1 | ||
10-1 | -0.33 | 2.2 | - | 1.28586E-4 | ||
102 | -0.33 | -3.3 | -2.78081E+3 | |||
10-1 | -0.83 | -4.4 | 1.4 | 5.31933E+0 | ||
103 | - | - | -1.40486E+1 | |||
2.5 | 0.5 | - | -4.37319E-3 | |||
1.9 | 103 | -2.1 | 13.5 | 4.27833E+2 | ||
1.09 | 10-2 | -2.4 | 103 | -1.10303E-2 | ||
10.3 | 0.2 | -104 | - | -3.31949E+0 | ||
10-2 | - | 102 | -2.5 | 1.14453E+1 |
Лабораторная работа № 2
Программирование алгоритмов с ветвлениями
Задачи лабораторной работы
Вопросы, изучаемые в работе
· Построение простейшей программы с ветвлениями.
· Изучение условных операторов.
· Использование именованных констант.
· Использование операторов ввода для исходных данных.
Задание (общее ко всем вариантам).
Написать программу вычисления и вывода на экран значения функции F по значениям одного или нескольких аргументов, величины которых вводятся с клавиатуры операторами ввода. Результат вывести на экран. Проверить программу, задавая значения аргументов, указанные в задании, и сверяя результаты с приведенными ответами.
Оформить отчет по лабораторной работе по образцу первой работы, но текст программы распечатать из оболочки Турбо-Паскаля.
Разбор контрольного варианта
Задание
Написать программу вычисления и вывода на экран (по формату :8:4) значения функции по значениям аргументов A и B, величины которых вводятся с клавиатуры операторами ввода. Проверить ее работу для каждой ветви алгоритма заданием соответствующих исходных данных.
Таблица 9. Данные задания 31 варианта
Вид функции | При условии | Данные для проверки | ||||||||
| | 3.2 0.34 А | 0.68 -3.58 0.13 В | -0.4154 -0.2328 3.9506 F |
Таблица 10. Таблица распределения памяти
Имя | Тип | Р-р,байт | Назначение |
Lab_2 | Имя программы | Вычисление заданной функции | |
F | Веществ. | Результат | |
A | Веществ. | Аргумент | |
B | Веществ. | -"- | |
C | Веществ.константа | 2.13 | |
R | Веществ. | Рабочая переменная | |
sin | Веществ.функция | Вычисление синуса | |
cos | Веществ.функция | Вычисление косинуса | |
exp | Веществ.функция | Вычисление экспоненты | |
ln | Веществ.функция | Вычисление натурального логарифма |
18. Данные к заданию 31 варианта
№ вар. | Задание | Предельные значения числа… | Тип обраб. данных | |
строк | столбцов | |||
Массив размером М строк N столбцов заполнить числами из входного текстового файла. Исходный массив распечатать. Столбец, где расположен минимальный элемент массива, упорядочить по возрастанию методом пересчета в одномерный массив. Созданный массив распечатать. | Веществ. |
Варианты заданий
Таблица 20 Варианты заданий лабораторной работы №5
№ вар. | Задание | Предельные значения числа | Тип обраб. данных | |
строк | столбцов | |||
Массив размером М, строк N столбцов заполнить числами из входного текстового файла. Исходный массив распечатать. Каждую строку массива упорядочить по убыванию обменом. Переделанный массив распечатать. | Целые | |||
Массив размером М строк Nстолбцов заполняется символами из входного текстового файла. Исходный массив распечатывается. Каждый столбец массива упорядочить по возрастанию методом выбора. Переделанный массив распечатать. | Символьн. | |||
Массив размером М строк N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Столбец с минимальным 1-ым элементом упорядочить по убыванию методом обмена. Переделанный массив распечатать. | Целые | |||
Заполнить двумерный массив А(MхN) элементов символами из текстового файла. Первый столбец массива А упорядочить по возрастанию (по алфавиту) методом вставок, используя рабочий одномерный массив В(М). Массив А распечатать до и после сортировки. | Символьн. | |||
Массив размером М строк N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Столбец с максимальным последним элементом упорядочить по возрастанию методом обмена. Переделанный массив распечатать. | Целые | |||
Заполнить двумерный массив А(MхN) элементов символами из одномерного массива В (длиной не более 256 элементов) "змейкой" от конца к началу – сперва M-ю строку справа налево, затем M–1-ю слева направо и т.д. Массив В предварительно заполняется из входного текстового файла. Оба массива распечатать. | Символьн. | |||
Квадратный массив размером МхM заполняется числами из входного текстового файла. Исходный массив распечатывается. Главную диагональ массива упорядочить по убыванию методом выбора. Переделанный массив распечатать. | Целые | |||
Заполнить квадратный массив размерами NхN элементов числами из входного файла, распечатать, поменять местами столбец с номером "К" и строку с номером "M" (оба номера и длина массива вводятся с клавиатуры). Полученную матрицу распечатать. | Целые | |||
Массив размером М строк N столбцов заполняется символами из входного текстового файла. Исходный массив распечатывается. Заказанную строку массива (номер которой вводится с клавиатуры) упорядочить по убыванию методом выбора. Переделанный массив распечатать. | Символьн. | |||
Массив размером М, строк N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Заказанный столбец массива (номер которого вводится с клавиатуры) упорядочить по возрастанию методом обмена. Переделанный массив распечатать. | Веществ. | |||
Квадратный массив размером МхМ заполняется числами из входного текстового файла. Исходный массив распечатывается. Обратную диагональ массива упорядочить по возрастанию методом выбора. Переделанный массив распечатать. | Веществ. | |||
Массив размером М строк, N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Столбец с минимальным вторым элементом упорядочить по возрастанию методом выбора. Переделанный массив распечатать. | Целые | |||
Заполнить квадратный массив А (NхN) элементов (N не более 8) числами из входного файла, распечатать, построить новую матрицу В (NхN), в которой каждый элемент B (i,j) равен минимальному из всех элементов массива А, у которых номер строки <=i, а номер столбца >=j. Полученную матрицу распечатать. | Веществ. | |||
Массив размером М строк, N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Строку, где расположен максимальный элемент массива, упорядочить по убыванию методом обмена. Переделанный массив распечатать. | Целые | |||
Массив размером М строк, N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Строку с минимальным первым элементом упорядочить по убыванию методом выбора. Переделанный массив распечатать. | Веществ. | |||
Массив размером М строк, N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Строку, где расположен минимальный элемент массива, упорядочить по убыванию методом пересчета в одномерный массив, который распечатать. | Целые | |||
Массив размером М строк, N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Заказанный столбец массива (номер которого вводится с клавиатуры) упорядочить по убыванию методом вставок, используя рабочий одномерный массив, который затем переписать на место сортируемого столбца. Переделанный двумерный массив распечатать. | Целые | |||
Заполнить двумерный массив логическими значениями из входного текстового файла, распечатать, перестроить матрицу: первый столбец поменять местами с последним, второй с предпоследним, и т.д. Затем так же переставить строки. Переделанный массив распечатать. | Логич. | |||
Массив размером М строк N, столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Второй столбец массива упорядочить по возрастанию методом пересчета в одномерный массив. Созданный массив распечатать. | Целые | |||
Заполнить двумерный массив размерами 20х20 элементов символами из входного текстового файла, распечатать, перестроить матрицу: исключить из нее столбец с номером "k" и строку с номером "m" (оба номера вводятся с клавиатуры). Полученную матрицу размерами 19х19 распечатать. | Символьн. | |||
Массив размером М строк N, столбцов заполняется символами из входного текстового файла. Исходный массив распечатывается. Столбец, где расположен максимальный элемент массива, упорядочить по возрастанию методом обмена. Переделанный массив распечатать. | Символьн. | |||
Заполнить квадратный массив А (NхN) элементов (N вводится с клавиатуры) числами из одномерного массива В (длиной не более 64 элементов) "змейкой" – сперва первую колонку сверху вниз, затем вторую снизу вверх и т.д. Массив В предварительно заполняется из входного текстового файла. Оба массива распечатать. | Веществ. | |||
Заполнить двумерный массив А (MхN) элементов числами из текстового файла. Каждую строку массива А упорядочить по убыванию пересчетом в соответствующую строку массива В (MxN). Оба массива распечатать. | Целые | |||
Заполнить квадратный массив А (NхN) элементов числами из входного файла, распечатать, построить новую матрицу в В (NхN), в которой каждый элемент B (i,j) равен сумме всех элементов массива А, у которых номер строки >=i, а номер столбца <=j. Полученную матрицу распечатать. | Веществ. | |||
Прочитать из текстового файла с данными первые десять чисел в одномерный массив а последующие числа – в двумерный массив (матрицу) 7х6 элементов. Распечатать оба массива. Заменить нулями в матрице те элементы с четной суммой индексов, для которых имеются равные значения в одномерном массиве. Измененную матрицу распечатать. | Целые | |||
Заполнить квадратный массив А (NхN) элементов числами из текстового файла. Каждый столбец массива А упорядочить по возрастанию вставками в соответствующий столбец массива В (NxN). Оба массива распечатать. | Целые | |||
Заполнить квадратный массив А(NхN) элементов логическими из одномерного массива В (длиной не более 81 элементов) "по спирали" – сперва первую строку слева направо, затем последнюю колонку сверху вниз, затем последнюю строку справа налево, первую колонку снизу вверх и т.д. Массив В предварительно заполняется из входного файла. Оба массива распечатать. | Логич. | |||
Заполнить двумерный массив А (2хN) элементов символами из текстового файла. Распечатать массив А. Далее каждую строку массива Аупорядочить по алфавиту обменом, затем заполнить по алфавиту одномерный массив В (длиной 2N элементов) методом слияния из обеих строк массива А. Оба массива распечатать после сортировок. | Символьн. | |||
Заполнить двумерный массив А (Mх2) элементов числами из текстового файла. Распечатать массив А. Далее каждый столбец массива А упорядочить по возрастанию обменом, затем заполнить по возрастанию одномерный массив В (длиной 2M элементов) методом слияния из обоих столбцов массива А. Оба массива распечатать после сортировок. | Целые | |||
Заполнить квадратный массив размерами МхМ, где М – четное и равно 8, 10 или 12, логическими значениями из входного файла, распечатать. Поменять местами первый октант с третьим, а второй с четвертым. Октантом будем называть четверть массива, причем левая верхняя четверть – это 1-й октант, правая верхняя четверть – 2-ой и т.д. по часовой стрелке. Полученный массив распечатать. | Логич. | |||
Массив размером М строк N столбцов заполняется числами из входного текстового файла. Исходный массив распечатывается. Столбец, где расположен минимальный элемент массива, упорядочить по возрастанию методом пересчета в одномерный массив. Созданный массив распечатать. | Веществ. |
Лабораторная работа N 6
Программирование итерационных циклов
(использование рекуррентных формул для расчета функций)
Задачи лабораторной работы
Содержание программы
Разбор контрольного варианта
Задание
Рассчитать и построить таблицу точных и приближенных значений функции
начальное значение X: A=-0.05, конечное – B=0.04, шаг X– Dx=0.01(вводится с клавиатуры), требуемая точность EPS = 1e-6 (вводится с клавиатуры), тип циклического оператора – repeat (постусловие).
Таблица идентификаторов
Таблица 21. Идентификаторы программы 31 варианта
Имя | Тип | Р-р (байт) | Назначение |
Tabl_Of_Fx | Имя программы | - | Расчет таблицы значений функции |
A | Веществ.константа | Начальное значение 0.05 | |
B | " | Конечное значение 0.04 | |
X | Вещественное | Значение аргумента на j-том шаге | |
Dx | " | " | Шаг аргумента |
S | " | " | Сумма |
C | " | " | Очередное слагаемое |
EPS | " | " | Заданная точность |
Nx | Целое | Количество шагов | |
J | " | " | Номер строки таблицы |
K | " | " | Количество слагаемых |
i | " | " | Счетчик цикла по X |
fout | Послед. симв. файл | Для выходного файла | |
Vvod_Dx | Метка | – | Начало блока ввода шага |
Vvod_EPS | Метка | – | Начало блока ввода точности |
Варианты заданий
Таблица 22. Варианты заданий лабораторной работы N6
№ вар. | F(x) (вид разложения в сумму см.табл.23) | начальное значение A | конечное значение В | шаг Dx | число | точность вычисления EPS * | Тип цикла | |
шагов Nx | итераций Nmax | |||||||
-0.05 | 0.05 | 0.01* | - | 1e-4 | if | |||
-0.09 | 0.09 | 10* | 1e-6 | repeat | ||||
0.08 | 0.01* | 1e-4 | repeat | |||||
0.08 | 0.01* | 1e-5 | if | |||||
-1 | 0.5 | 12* | 1e-6 | repeat | ||||
-2 | 0.5 | 9* | 1e-5 | while | ||||
-0.5 | 0.1* | 1e-5 | if | |||||
0.08 | 0.01* | 1e-4 | repeat | |||||
-0.2 | 0.1 | 0.01* | 1e-5 | while | ||||
-0.5 | 0.1 | 10* | 1e-6 | if | ||||
-0.5 | 0.5 | 21* | 1e-6 | repeat | ||||
-0.1 | 0.2 | 0.03* | 1e-4 | while | ||||
-0.5 | 0.5 | 21* | 1e-5 | if | ||||
0.02 | 11* | 1e-3 | repeat | |||||
-5 | 1* | 1e-4 | while | |||||
-0.1 | -0.2 | 13* | 1e-5 | if | ||||
0.1 | 0.3 | 0.02* | 1e-5 | repeat | ||||
10* | 1* | 1e-6 | while | |||||
0.5 | 11* | 1e-4 | if | |||||
-0.3 | 0.1 | 0.02* | 1e-5 | repeat | ||||
-3 | 1* | 10* | 1e-5 | while | ||||
-0.4 | 0.04 | 17* | 1e-6 | if | ||||
-0.1 | 0.2 | 0.02* | 1e-5 | repeat | ||||
0.1 | 0.55 | 0.05* | 1e-5 | while | ||||
0.2 | 0.4 | 11* | 1e-6 | if | ||||
0.5 | 20* | 1e-5 | repeat | |||||
0.5 | 0.1 | 20* | 1e-5 | while | ||||
1* | 25* | 1e-4 | if | |||||
0.3 | 15* | 1e-4 | repeat | |||||
0.4* | 20* | 1e-5 | while | |||||
-0.05 | 0.04 | 0.1* | 1e-6 | repeat |
Таблица 23. Виды представления функций
№ вар. | Вид представления функции как суммы ряда слагаемых |
Лабораторная работа N 7
Программирование процедур на Паскале
Задачи лабораторной работы
Вопросы, изучаемые в работе
Задание (общее ко всем вариантам).
Написать программу работы с массивом с использованием процедур и функций распечатки и частичной обработки массива.
При написании подпрограмм не использовать глобальные переменные, кроме имен файлов. Все обмены данными между подпрограммами и вызывающей программой выполнять через параметры подпрограмм.
Исходные данные читать из существующего текстового или двоичного файла. Результаты расчета выводить в форматном виде в выходной текстовый файл.
Оформить отчет по лабораторной работе аналогично оформлению предыдущих работ.
Требования к программе и отчету по работе
· В таблице распределения памяти привести имена, используемые как в основной программе, так и в подпрограммах, в том числе и формальные параметры процедур и функций.
· Алгоритмы каждой подпрограммы и основной программы выполнить отдельно.
· Все значения, на которые по смыслу накладываются ограничения, должны при вводе проверяться.
· Все выводимые данные должны подписываться.
Содержание программы.
Пояснения к лабораторной работе
Разбор контрольного варианта
Задание
Таблица 24. Данные к заданию 31 варианта
№ вар. | Программа | Процедуры (Функции) | M<= | N<= | Файл с данными |
Прямоугольный массив заполнить числами из файла, начиная с 33 числа. С помощью функции в исходном массиве сделать элементы последнего столбца равными сумме всех четных элементов соответствующей строки. | 1)Исходный и полученный массивы печатать процедурой. 2)Построить функцию, которая возвращает сумму четных по значению элементов заказанной строки прямоугольного массива. | DATI.BIN |
Таблица идентификаторов
Составляется как для основной программы, так и для каждой подпрограммы пользователя.
Таблица 25. Идентификаторы программы 31 варианта
Имя | Тип | Р-р (байт) | Назначение |
Основная программа | |||
KorrMass | Имя программы | - | Обработка массива |
Massiv | Описатель типа | - | Описатель целочисл. массивов |
Stroka | Описатель типа | - | Описатель строки до 30 символов |
M | Целое | Количество строк массива | |
N | Целое | Количество столбцов массива | |
i | Целое | Номер текущей строки массива | |
j | Целое | Номер текущего столбца массива | |
Fin | Двоичный файл прямого доступа | Файл с исходн. целыми числами | |
Fout | Последовательный символьный файл | Файл с результатами работы | |
Ouest1 | Инициализирован-ная строка | Запрос числа строк массива | |
Ouest2 | Инициализирован-ная строка | Запрос числа столбцов массива | |
A | Целочисленный массив | Обрабатываемый массив | |
InpMN | Имя процедуры | - | Ввод размеров массива |
PrintMas | Имя процедуры | - | Вывод массива в файл протокола |
DATI.BIN | Строка – константа | Имя набора данных с числами | |
Umnik_7.res | Строка – константа | Имя набора данных с протоколом | |
Sum | Имя функции | - | Суммирование четных значений |
InpMN –-Процедура ввода размеров массива | |||
Txt | Строка | Формальный параметр – строка запроса | |
Kol | Адрес целочисленной переменной | Формальный параметр – имя переменной для результата ввода | |
MaxK | Целое | Формальный параметр – предельное возможное значение | |
PrintMas–- Процедура вывода массива в файл протокола (распечатки массива) | |||
Txt | Строка | Формальный параметр – текст заголовка | |
Mas | Адрес массива | Формальный параметр – имя выводимого массива | |
NStr | Целое | Формальный параметр – число строк массива | |
NKol | Целое | Формальный параметр – число столбцов массива | |
i | Целое | Номер строки | |
j | Целое | Номер столбца | |
Sum – Функция вычисления суммы четных элементов заданной строки массива | |||
Mas | Адрес массива | Формальный параметр – имя исходного массива | |
N | Целое | Формальный параметр – число столбцов массива | |
St | Целое | Формальный параметр – номер обрабатываемой строки | |
J | Целое | Номер элемента | |
S | Целое | Сумма | |
Odd | Стандартная логическая функция | - | Проверка нечетности аргумента |
Nbsp; Блок-схема алгоритма
Лабораторная работа N 8
Графика на Паскале
Задачи лабораторной работы
Общие пояснения
Разбор контрольного варианта № 31
Задание
Построить график функции Y=exp(X) для интервала X от –1 до 2, нанести на график размеченные оси координат и сделать подпись (название функции).
Дополнительные требования: график изобразить толстой штриховой линией красного цвета на белом фоне, координатные оси (толстая линия) и разметка (тонкая линия) – черного (темно-серого) цвета, подпись – синего цвета под графиком посередине.
Программу составить для EGA и VGA адаптеров (универсальную). Драйвер графического адаптера (с именем EGAVGA.BGI) находится в каталоге D:TP6BGI.
Условия, принятые из соображений дизайна:
График будет занимать 60% ширины и высоты экрана. Разметку проводим через 0.5 по Х и через 1.0 по Y. График рисуем процедурой LineTo, с шагом 0.2 по оси X.
Таблица идентификаторов
Таблица 28. Идентификаторы задачи 31-го варианта
Имя | Тип | Размер, (байт) | Назначение |
Graph_work | Имя программы | - | Построение графика функции |
Graph | Имя модуля | - | Стандартные графические подпрограммы |
Crt | " | - | Стандартные подпрограммы работы с консолью |
" | - | Стандартные подпрограммы работы с принтером | |
X | Веществен. | Текущее значение аргумента | |
Y | " | " | Текущее значение функции |
Xmin | " | " | Минимальное значение аргумента |
Xmax | " | " | Максимальное значение аргумента |
Ymin | " | " | Минимальное значение функции |
Ymax | " | " | Максимальное значение функции |
DeltaX | " | " | Диапазон изменения аргумента |
DeltaY | " | " | Диапазон изменения функции |
Dx | " | " | Шаг аргумента для расчета графика функции |
Dxs | " | " | Шаг разметки оси Х |
Dys | " | " | Шаг разметки оси Y |
Part | " | " | Доля экрана, занимаемая графиком |
Pole | " | " | Размер полей вокруг графика в долях экрана |
Mx | " | " | Коэффициент пересчета Х в J |
My | " | " | Коэффициент пересчета Y в I |
I | Целое | Горизонтальная координата экрана | |
J | " | " | Вертикальная координата экрана |
Imin | " | " | Нижняя граница графика на экране |
Imax | " | " | Верхняя граница графика на экране |
Jmin | " | " | Левая граница графика на экране |
Jmax | " | " | Правая граница графика на экране |
JAll | " | " | Размер экрана по Х в пикселах |
Iall | " | " | Размер экрана по Y в пикселях |
J0 | " | " | Координата оси Y на экране |
I0 | " | " | Координата оси Х на экране |
DeltaJ | " | " | Размер рисунка по Х |
DeltaI | " | " | Размер рисунка по Y |
Nx | " | " | Шаг между рисками оси Х в пикселях |
Ny | " | " | Шаг между рисками оси Y в пикселях |
Riska | Строка | Подпись текущей риски оси | |
GraphDrv | Целое | Тип графического драйвера | |
GraphMode | " | " | Номер графического режима |
Code | беззнаковое | " | Код завершения процедуры инициализ. граф. |
InitGraph | Имя процедуры | - | Инициализация графического режима |
GraphResult | Имя функции | - | Возвращает код завершения граф. процедуры |
ClearDevice | Имя процедуры | - | Очистка экрана заданным цветом фона |
Halt | Имя процедуры | - | Останов (завершение) программы |
SetBkColor | Имя процедуры | - | Установка цвета фона |
SetColor | Имя процедуры | - | Установка цвета |
SetLineStyle | Имя процедуры | - | Установка типа линии |
SetTextStyle | Имя процедуры | - | Установка стиля текста |
SetTextJustify | Имя процедуры | - | Установка способа размещения текста |
GetMaxX | Имя функции | - | Возвращает размер экрана по Х |
GetMaxY | Имя функции | - | Возвращает размер экрана по Y |
Round | Имя функции | - | Округляет вещественный аргумент в целое |
MoveTo | Имя процедуры | - | Переход в заданную точку экрана |
LineTo | Имя процедуры | - | Проведение отрезка в заданную точку |
Line | Имя процедуры | - | Проведение отрезка |
OutTextXY | Имя процедуры | - | Вывод текста |
Str | Имя процедуры | - | Преобразование числа в строку с его изображен. |
KeyPressed | Имя функции | - | Возвращает TRUE, если нажата клавиша |
CloseGraph | Имя процедуры | - | Закрытие графического режима |
Pr | Имя процедуры | - | Копирование графического экрана на принтер |
Разбор контрольного варианта № 32
Задание
Построить график кривой, заданной параметрически: X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) для интервала t от 0 до 2π, нанести на график размеченные оси координат и сделать подпись.
Дополнительные требования: график изобразить тонкой сплошной линией красного цвета на белом фоне, координатные оси (толстая линия) и разметка (тонкая линия) – черного (темно-серого) цвета, подпись – синего цвета под графиком посередине.
Программу составить для EGA и VGA адаптеров (универсальную). Драйвер графического адаптера (с именем EGAVGA.BGI) находится в каталоге D:TP6BGI.
Условия, принятые из соображений дизайна:
График будет занимать 60% ширины и высоты экрана. Разметку проводим через 0.5 по Х и Y. График рисуем процедурой LineTo, для 400 точек.
Program Graph_work2;
{ Программа Лабораторной работы N 8
Вариант N 32.
Построение кривой, заданной параметрически.
А.Я.Умненькая, ст. гр. Я-007 }
Uses Graph,Crt; { Print - только при наличии принтера для печати графика с экрана на бумагу }
TYPE
mas=array[0..400] of real;
Var
X,Y:mas; { текущие значения переменных Х и Y }
Xmin,Xmax,t,tmin,tmax, { минимальное и максимальное значения Х на графике }
Ymin,Ymax, { минимальное и максимальное значения Y на графике }
DeltaX,DeltaY, { диапазоны изменения X и Y в пределах рисунка }
Dt,R, { шаг построения графика по t }
Xj,Yi,
Dxs,Dys, { Шаги разметки осей по Х и по Y }
Part,Pole, { Доля экрана, занятая рисунком и доля чистого поля с каждой стороны }
Mx,My {Коэффициенты пересчета Х в J и Y в I}
: real;
Imin,Imax, { координаты экрана, соответствующие Ymin и Ymax }
Jmin,Jmax, { координаты экрана, соответствующие Xmin и Xmax }
J,I,N,k, { текущие значения переменных координат экрана }
JAll,IAll, {Максимальные размеры экрана (в пикселях) по X и Y}
J0,I0, {Координаты на экране точки пересечения осей графика }
DeltaJ,DeltaI { Экранные размеры рисунка по Х и Y в пикселях}
: integer;
Riska : String[5]; { Строка для вывода чисел у рисок осей }
GraphDrv, { Тип графического драйвера }
GraphMode: integer;{ Устанавливаемый графический режим }
Code: word; { Код завершения инициализации графики }
BEGIN { Начало программы }
{1.Задание констант, стандартных значений }
tmin:=0; tmax:=2.0*Pi;
Dxs:=0.5; Dys:=0.5;
Part:=0.6; N:=401;
{4.Расчет характеристик функций }
Dt:=(tmax-tmin)/(N-1);
Xmax:=-100;
Xmin:=100;
Ymax:=-100;
Ymin:=100;
For k:=0 to N-1 do
begin
t:=tmin+Dt*k;
R:=2.0+0.5*cos(8.0*t);
X[k]:=R*cos(t);
Y[k]:=R*sin(t);
if X[k]>Xmax then Xmax:=X[k];
if X[k]<Xmin then Xmin:=X[k];
if Y[k]>Ymax then Ymax:=Y[k];
if Y[k]<Ymin then Ymin:=Y[k];
end;
DeltaX:=Xmax-Xmin;
DeltaY:=Ymax-Ymin;
{5.Открытие графики с проверкой правильности срабатывания}
GraphDrv:=0; {пусть определяет режим сам }
InitGraph(GraphDrv,GraphMode,'C:voronovSTUDTPBGI');
Code:=GraphResult;
if Code<>0 then {если завершение с кодом не 0 - закончить программу}
Begin
writeln('Ошибка открытия графики с кодом: ',Code);
Halt; { Останов программы }
End;
{6.Настройка фона}
SetBkColor(15); {Фон белый }
ClearDevice; {Очистка экрана}
{7.Расчет параметров графика на экране}
JAll:=GetMaxX;
IAll:=GetMaxY;
Pole:=(1.0-Part)/2.0;
Jmin:=Round(Pole*JAll);
Jmax:=Round((1.0-Pole)*JAll);
Imin:=Round((1.0-Pole)*IAll);
Imax:=Round(Pole*IAll); { Imin > Imax !!! }
DeltaJ:=Jmax-Jmin;
DeltaI:=Imax-Imin;
{8.Расчет масштабных коэффициентов перехода от X к J и от Y к I}
Mx:=DeltaJ/DeltaX;
My:=DeltaI/DeltaY;
{9.Построение графика функции}
{9.1.Задание характеристик линии}
SetColor(4); { цвет красный }
SetLineStyle(0,0,2);
{9.2.Начальная точка графика}
J:=Jmin+Round((X[0]-Xmin)*Mx);
I:=Imin+Round((Y[0]-Ymin)*My);
MoveTo (J,I);
{9.3.Цикл расчета экранных координат графика (X->J, Y->I) и проведения отрезков}
for k:=1 to N-1 do
Begin
J:=Jmin+Round((X[k]-Xmin)*Mx);
I:=Imin+Round((Y[k]-Ymin)*My);
LineTo(J,I);
End;
{10.Построение осей координат }
SetColor(8); { цвет темно-серый }
SetLineStyle(0,0,3); { сплошная толстая }
J0:=Jmin+Round((0-Xmin)*Mx);
I0:=Imin+Round((0-Ymin)*My);
Line(J0,Imin,J0,Imax); {Построение оси Y (где X=0)}
Line(Jmin,I0,Jmax,I0); {Построение оси Х (где Y=0)}
{11.Разметка осей}
SetLineStyle(0,0,0); { сплошная тонкая }
SetTextStyle(0,0,0); { шрифт стандартный, подпись горизонтальна }
SetTextJustify(1,2); {Размещение текста симметрично, относительно заданной
точки по горизонтали и ниже точки по вертикали}
J:=J0;
Xj:=0;
while J<=Jmax+1 do {от начала координат - вправо }
begin
Line(J,Imin,J,Imax);
Str(Xj:3:1,Riska);
OutTextXY(J,I0+5,Riska);
Xj:=Xj+Dxs;
J:=Jmin+Round((Xj-Xmin)*Mx);
end;
J:=J0;
Xj:=0;
while J>=Jmin do {от начала координат - влево }
begin
Line(J,Imin,J,Imax);
Str(Xj:3:1,Riska);
OutTextXY(J,I0+5,Riska);
Xj:=Xj-Dxs;
J:=Jmin+Round((Xj-Xmin)*Mx);
end;
SetTextJustify(2,1); {Размещение текста симметрично, относительно заданной
точки по вертикали и левее точки по горизонтали }
I:=I0;
Yi:=0;
while I>=Imax-1 do {от начала координат - вверх }
begin
Line(Jmin,I,Jmax,I);
Str(Yi:3:1,Riska);
OutTextXY(J0-10,I,Riska);
Yi:=Yi+Dxs;
I:=Imin+Round((Yi-Ymin)*My);
end;
I:=I0;
Yi:=0;
while I<=Imin do {от начала координат - вниз }
begin
Line(Jmin,I,Jmax,I);
Str(Yi:3:1,Riska);
OutTextXY(J0-10,I,Riska);
Yi:=Yi-Dxs;
I:=Imin+Round((Yi-Ymin)*My);
end;
{12.Подпись графика}
SetColor(1); { цвет синий }
SetTextJustify(1,1); {Размещение текста симметрично, относительно заданной
точки по горизонтали и по вертикали}
I:=Round(IAll*(1-Pole/2)); {середина нижнего поля}
OutTextXY(JAll div 2,I,'X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t)');
{13.Задержка графика на экране }
while Not KeyPressed do;
{14. Вывод графика на печать (на принтер) - только если он подключен }
{Pr;}
{14.Закрытие графического режима }
CloseGraph;
END.
Рисунок 11. Результат работы программы 32-го варианта
Варианты заданий
Таблица 29. Варианты заданий лабораторной работы N9
N вар | Функция или параметрическое уравнение | Аргумент и его диапазон | Цвет | |
текста/ фона | графика/ осей координат | |||
Парабола Y=1.3*X2-1.8 | X [-1.2, 1.2] | голубой белый | зеленый голубой | |
Окружность X=0.5+2*cos(t) Y=0.2+2*sin(t) | t [0, 2p] | красный темно-серый | светло-красный коричневый | |
Степенная функция Y=X3-2* X2+X | X [-1, 3] | розовый темно-серый | светло-зеленый светло-серый | |
Эллипс x=3*cos(t), y=15*sin(t) | t [0, 2p] | синий светло-серый | светло-синий темно-серый | |
Конхоида Никомеда X=A+B*cos(f) Y=A*tg(f)+B*sin(f) | f [1.5, 4.5] A=1, B=2 | светло-красный темно-серый | светло-зеленый красный | |
Кардиоида X=4*cos(t)*(1+cos(t)) Y=4*sin(t)*(1+cos (t)) | t [0, 2p] | розовый красный | синий розовый | |
Дробно-рациональная функция Y=(1.5*X+3)/(X-2) | X [-4.2,1.9] | светло-серый розовый | голубой желтый | |
Декартов лист X=3*A*t/(1+t3) Y=3*A*t*t/(1+t3) | t [-0.5,10] A=2 | синий белый | светло-синий светло-зеленый | |
Функция синус Y=2.5*sin(X)+0.5 | X [-2p, 2p] | белый зеленый | желтый коричневый | |
Циссоида X=5*t2/(1+t2), Y=5*t3/(1+t2), t=tg(f) | f [-p/4, p/4] | розовый черный | зеленый белый | |
Тригонометрическая функция Y=сos(X2) | X [-2p, 2p] | светло-зеленый светло-синий | белый розовый | |
Строфоида X=4*(t2-1)/(t2+1), Y=4*t*(t2-1)/(t2+1) t=tg(f) | f [-p/2.5, p/2.5] | темно-серый голубой | белый желтый | |
Тригонометрическая функция Y=tg(X)-2*X | X [-p/2.5, p/2.5] | зеленый синий | фиолетовый черный | |
Астроида X=3.5*cos3(t), Y=3.5*sin3(t) | t [0, 2p] | голубой белый | светло-зеленый зеленый | |
Арксинус Y=arcsin(0.5*X) | X [-2, 2] | темно-серый голубой | светло-зеленый зеленый | |
Эпициклоида X=(a+b)cos(t)-a*cos((a+b)*t/a), Y=(a+b)sin(t)-a*sin((a+b)*t/a) | t [0, 2p] a=6, b=9 | розовый фиолетовый | голубой синий | |
Логарифм Y=ln(X+2) | X [-1.5, 5] | зеленый красный | желтый светло-зеленый | |
Гипоциклоида X=2a*cos(f)+a*cos(2f) Y=2a*sin(f)-a*sin(2f) | f [-p, p] a=1 | белый розовый | темно-серый голубой | |
Арктангенс Y=3*arctg(X) | X [-5, 5] | светло-зеленый голубой | синий светло-синий | |
Эвольвента окружности X=a*cos(f)+a*f*sin(f) Y=a*sin(f)-a*f*cos(f) | f [-9p, 9p] a=1.5 | зеленый синий | голубой черный | |
Дробно-рациональная нелинейная функция Y = A + B/X + C/X2 | X [0.18, 3] A=1, B=2, C=-0.5 | темно-серый белый | фиолетовый красный | |
Леминиската X=r*cos(f) Y=r*sin(f) r=a*sqrt(2*cos(2f)) | f [-p, p] | светло-зеленый фиолетовый | синий белый | |
Локон Аньези Y=A3/(X2 + A2) | X [-5, 5] A=2 | зеленый белый | темно-серый светло-зеленый | |
Архимедова спираль X=r*cos(f) Y=r*sin(f) r=A*f | f [-6p, 6p] A=1.5 | розовый желтый | синий светло-красный | |
Трохоида(удлинненая циклоида) X=A*(f-B*sin(f)) Y=A*(1-B*cos(f)) | f [-2p, 4p] A=1.5, B=1.3 | темно-серый белый | светло-красный фиолетовый | |
Гиперболическая спираль X=(A*cos(f))/f Y=(A*sin(f))/f | f [0.1, 10] A=3 | фиолетовый зеленый | светло-зеленый розовый | |
Удлиненная эпициклоида X=5*cos(f)-2*cos(5f) Y=5*sin(f)-2*sin(5f) | f [-p, p] | светло-серый синий | светло-синий красный | |
Логарифмическая спираль X=r*cos(f) Y=r*sin(f) r=A*exp(B*f) | f [0, 4] A=1.3, B=0.5 | светло-зеленый синий | белый зеленый | |
Удлиненная гипоциклоида X=4*cos(f)+2*cos(4f) Y=4*sin(f)-2*sin(4f) | f [0, 2p] | темно-серый белый | синий зеленый | |
Улитка Паскаля X=2cos2(t)+3cos(t), Y=2*cos(t)sin(t)+3sin t | t [0, 2p] | коричневый желтый | зеленый синий | |
Показательная функция Y=exp(X2) | X [-1,2] | белый красный | красный темно-серый | |
X=(2+0.5cos(8t))cos(t), Y=(2+0.5cos(8t))sin(t) | t [0 до 2π] | синий белый | красный темно-серый |
Лабораторная работа № 9
Динамические переменные. Списки
Задачи лабораторной работы
Содержание программы
При работе с динамическими переменными важно помнить, что любая память, выделенная процедурой new, должна быть освобождена в программе процедурой DISPOSE !
Динамическая память чаще всего используется для хранения табличных данных. При этом строки таблиц называются записями и описываются как переменные комбинированного типа (типа record), а столбцы описываются как поля соответствующих типов, принадлежащие этим записям. В записях также предусматриваются поля указателей (адресов в памяти) последующих и предыдущих записей для организации связей с ними.
В зависимости от количества ссылочных полей в каждой записи (элементе списка) списки делятся на нуль-, одно-, двух- и многосвязные. Если у списка имеются концевые элементы, он называется линейным, если последний элемент списка связан с первым (или с заголовком) – список называется кольцевым.
В языке Паскаль для списков, в отличие от массивов и структур, нет специального ключевого слова для описания переменных типа списка. Их создают с помощью комбинированных записей, содержащих ссылочные поля.
Ниже приведены схемы различных видов списков записей. На них символами "*" отмечены поля ссылок. Стрелками показаны связи между записями. Поля данных заглавных звеньев обычно используются для хранения общей информации о списках.
Разбор контрольного варианта
Задание
Таблица 31. Данные к заданию 31 варианта
№ вар. | Требования к записям, выбираемым из файла и помещаемым в список | Тип списка | Файл данных |
В начало – только с пятерками, в конец – только с тройками | S0D | dan.txt |
На основе общего задания и данных таблицы вариантов конкретное задание формулируется следующим образом:
Заполнить нульсвязный список дек данными из файла DAN.TXT,занося в начало дека записи о студентах, у которых все оценки – 5 баллов, а в конец дека – сведения о студентах, имеющих все оценки – 3 балла. Добавить в начало дека запись, в которой вместо фамилии указан тип списка, а вместо первой оценки – число записей с информацией в деке. Вывести в выводной текстовый файл таблицу записей из дека. Созданный дек удалить из памяти.
Содержание программы
Задание включает в себя следующие действия, подлежащие программированию:
При составлении программы, формирование дека и его распечатку в выходной файл оформим в виде процедур. Кроме того, отдельными процедурами оформим процессы добавления записи в дек и удаления (выбора) записи из дека.
Учитывая, что файл текстовый, воспользуемся процедурой чтения строки файла с распределением информации по полям структуры, как это рассмотрено в пояснениях выше.
Таблица идентификаторов
Таблица 32. Идентификаторы программы 31 варианта
Имя | Тип | Р-р, байт | Назначение |
Основная программа | |||
Lab_9 | имя программы | - | Работа с динамическими списками |
data | описатель | - | Описатель типа для структуры данных |
.Name | строка | Поле структуры данных для фамилии | |
.Bal1 | целое | Поле структуры данных для первой оценки | |
.Bal2 | целое | Поле структуры данных для второй оценки | |
.SrBal | вещественное | Поле структуры данных для средней оценки. | |
Pd | описатель | - | Описатель типа для указателей на звено дека |
Dek | описатель | - | Описатель типа для структуры данных записи дека |
P1 | указатель | Ссылка на следующий элемент дека | |
P2 | указатель | Ссылка на предыдущий элемент дека | |
Student | структура | Структура – составное поле данных записи дека | |
Docum | структура | Данные одной записи | |
DN | указатель | Указатель первого конца дека (начала) | |
DK | указатель | Указатель второго конца дека (конца) | |
Fin | последовательн. символьн. файл | Входной текстовый файл с данными | |
Fout | последовательн. символьн. файл | Выходной текстовый файл с таблицей результатов | |
k | целое | Количество элементов дека | |
GetStud – процедура выбора строки из входного файла | |||
St | указатель на структуру | Формальный параметр - адрес структуры с данными по студенту | |
F | указатель на файл | Формальный параметр - имя входного файла | |
P | целое | Счетчик пробелов во входной записи | |
i | целое | Порядковый № символа во входной записи | |
PutDek Процедура формирования нового звена дека | |||
NK | указатель | Формальный параметр - адрес конца дека, к которому добавляют запись | |
KN | указатель | Формальный параметр - адрес второго конца дека | |
Inf | структура | Формальный параметр – добавляемые данные | |
Beg | логическое | Признак, что добавляется к началу | |
U | указатель | Вспомогательный указатель на добавляемое звено дека | |
DelDek Процедура удаления крайнего звена дека | |||
NK | указатель | Формальный параметр - адрес конца дека, у которого удаляют запись | |
KN | указатель | Формальный параметр - адрес второго конца дека | |
Inf | указатель на структуру | Формальный параметр – адрес структуры, куда поместить выбираемые данные | |
Beg | логическое | Признак, что удаляется из начала | |
U | указатель | Вспомогательный указатель на удаляемое звено дека | |
ReadFile Процедура чтения записи из файла и заполнения дека | |||
F | указатель на файл | Формальный параметр – указатель на входной файл для входных данных | |
DekN | указатель | Формальный параметр - адрес указателя на начало дека | |
DekK | указатель | Формальный параметр - адрес указателя на конец дека | |
N | указатель | Формальный параметр - адрес переменной для числа элементов дека | |
Stud | структура | Рабочая структура для данных о студенте |
Разработанный алгоритм с использованием перечисленных идентификаторов реализуется на языке Турбо-Паскаль приведенной ниже программой.
Варианты заданий
Таблица 33. Варианты заданий лабораторной работы № 9
№ вар. | Требования к записям, выбираемым из файла и помещаемым в список | Тип Списка | Файл данных |
Средний балл выше 3 | S2KI | dan.dat | |
Отличные оценки во всех полях | S2KO | dan.txt | |
Первые буквы фамилий А, Б, В | S0S | dan.dat | |
Оценки во всех полях ниже 4 баллов | S0O | dan.txt | |
Первая оценка выше 3 | S1L | dan.dat | |
Первая или вторая оценка выше 3 | S1KI | dan.txt | |
Первая оценкой ниже 5, а вторая выше 3 | S1KO | dan.dat | |
Первые буквы фамилий А, В, Е и средние оценки выше 3 | S2L | dan.txt | |
Оценки 3 во всех полях оценок | S2KI | dan.dat | |
Средние оценки выше 3 баллов | S2KO | dan.txt | |
Вторая оценка выше 4, а первая выше 3 баллов | S0S | dan.dat | |
Первая и вторая оценки выше 4 баллов | S0O | dan.txt | |
В начало –со средней оценкой <4 балла, в конец – прочие | S0D | dan.dat | |
Первые буквы фамилий А, Б, В и средние оценки выше 4 | S1L | dan.txt | |
Вторые и средние оценки выше 4 баллов | S1KI | dan.dat | |
Первая оценка выше 3 баллов, а средняя оценка выше 3,5 | S1KO | dan.txt | |
Все оценки не ниже 4 баллов | S2L | dan.dat | |
Вторая и средняя оценки выше 4 баллов | S2KI | dan.txt | |
Средняя оценка выше 3,5 баллов | S2KO | dan.dat | |
Средняя оценка ниже 4,5 и фамилии начинаются с букв А и В | S0S | dan.txt | |
Средняя оценка выше 4 баллов и фамилии, начинаются с букв от А до К | S0O | dan.dat | |
В начало – если первая оценка 3, в конец – если первая – 5 | S0D | dan.txt | |
Первая оценка выше 3 балов, а средняя оценка 4 балла | S1L | dan.dat | |
Все оценки выше 4 и фамилии начинаются с букв А - Е | S1KI | dan.txt | |
Первая и средняя оценки выше 4 баллов | S1KO | dan.dat | |
Все оценки ниже 5 баллов | S2L | dan.txt | |
Первая или вторая оценка выше 4 баллов | S2KI | dan.dat | |
Первая или средняя оценки ниже 4 баллов | S2KO | dan.txt | |
Средняя оценка выше 4 баллов | S0S | dan.dat | |
Все оценки выше 4 или фамилии начинаются с букв А - Е | S0O | dan.txt | |
В начало – только с пятерками, в конец – только с тройками | S0D | dan.txt |
Литература
Приложение А. Система меню и команды Турбо-Паскаля
Меню системы программирования Турбо-Паскаль
Для взаимодействия с системой программирования Турбо-Паскаль можно использовать специальную интегрированную среду этой системы. Интегрированная среда – это совокупность взаимосвязанных сервисных программных средств, обеспечивающих всестороннюю поддержку процесса разработки программ. Умелое использование возможностей среды Турбо-Паскаля позволяет значительно повысить эффективность этапов проектирования, тестирования и отладки программ.
Опции главного меню
Команды опции Ё
About позволяет получить информацию об используемой версии системы программирования Турбо-Паскаль.
Refresh display – обновляет экран.
Clear desktop – закрывает все активные программы и очищает все списки.
Локальные меню
Локальных меню всего пять (здесь учитывается и меню Browse, доступное только в защищенном режиме работы процессора) и каждое из них привязано к соответствующему окну: редактирования, помощи, наблюдений, сообщений и браузера. Активизация локального меню производится нажатием клавиш Alt-F10 или правой клавиши мыши.
Меню окна сообщений.
В этом меню три опции: Clear, Goto source и Track source. Опция Clear позволяет очистить окно сообщений, опция Goto source – перейти в окно редактирования, в котором находится анализируемый файл и, наконец, опция Track source – перейти в окно редактирования и выделить подсветкой строку, соответствующую текущему сообщению.
Приложение Б. Сообщения об ошибках
Таблица 36. Сообщения об ошибках на шаге компиляции
Ниже приводятся коды ошибок и сообщения об ошибках, генерируемые компилятором языка Турбо-Паскаль. Кроме перевода сообщений в некоторых случаях даются необходимые пояснения, а также рекомендации по устранению ошибок.
Код ошибки | Сообщение об ошибке | Перевод сообщения, возможная причина ошибки и рекомендации для ее устранения |
Out of memory | «не хватает памяти» — Компилятор извещает, что доступной памяти недостаточно для размещения программы. Чтобы устранить ошибку, рекомендуется удалить из памяти ранее загруженные, но не используемые в данный момент программы, или указать, что объектный код должен выводиться на диск. Если это не дает результата, следует разделить программу или модуль на большее число модулей | |
Identifier expected | «ожидается идентификатор» — Возможно, в качестве идентификатора использовано зарезервированное слово | |
Unknown identifier | «неизвестный идентификатор» — Идентификатор не объявлен | |
Duplicate identifier | «дублируемый идентификатор» — Идентификатор объявлен дважды | |
Syntax error | «синтаксическая ошибка» — Обнаружен символ, отсутствующий в алфавите языка | |
Error in real constant | ошибка в записи константы вещественного типа | |
Error in integer constant | ошибка в записи константы целого типа | |
String constant exceeds line | «длина строковой константы превышает максимально допустимую длину строки» — Возможно, отсутствует закрывающий апостроф | |
Too many nested files | «слишком много вложенных файлов» — При включении исходных файлов (с помощью директив {$1 <имя файла >}) компилятор допускает не более 15 уровней вложенности | |
Unexpected end of file | «несвоевременное появление признака конца файла» Возможно, не совпадает количество операторов begin и end или не закрыт комментарий | |
Line too long | «слишком длинная строка» — Длина строки превысила 126 символов | |
Type identifier expected | «ожидается идентификатор типа» — В объявлении отсутствует идентификатор типа | |
Too many open files | «слишком много открытых файлов» — Следует задать большее число файлов в CONFIG.SYS (в записи FILES = < число) | |
Invalid file name | неправильно задано имя файла | |
File not found | файл не найден | |
Disk full | на диске нет свободного места | |
Invalid compiler directive | неправильно записана директива компилятора | |
Too many files | «слишком много файлов» — С помощью директив {$1 <имя файла>} включается чрезмерное количество исходных файлов | |
Undefined type in pointer definition | «необъявленный тип в объявлении указателя» — Не объявлен тип данных, указанный в объявлении ссылочного типа | |
Variable identifier expected | ожидается идентификатор переменной | |
Error in type | ошибка в объявлении типа | |
Structure too large | «структура слишком большая» — Превышен допустимый размер (65520 байт) области памяти для данных структурированного типа | |
Set base type out of range | «число значений базового типа для множества превышает допустимое» — Базовый тип не должен содержать более 256 значений | |
File components may not be files or objects | компонентами файла не могут быть файлы или объекты | |
Invalid string length | «недопустимая длина строки» — Превышена максимально допустимая длина строки (255) | |
Type mismatch | «несоответствие типов» — Не соответствуют друг другу типы данных в выражении | |
Invalid subrange base type | недопустимый базовый тип для интервального типа | |
Lower bound greater than upper bound | нижняя граница больше верхней границы | |
Ordinal type expected | ожидается ссылка на порядковый тип | |
Integer constant expected | ожидается целая константа | |
Constant expected | ожидается константа | |
Integer or real constant expected | ожидается целая или вещественная константа | |
Type identifier expected | ожидается идентификатор типа | |
Invalid function result type | недопустимый тип результата функции | |
Label identifier expected | ожидается идентификатор метки | |
Begin expected | ожидается зарезервированное слово begin | |
End expected | ожидается зарезервированное слово end | |
Integer expession expected | ожидается выражение целого типа) | |
Ordinal expession expected | ожидается выражение порядкового типа | |
Boolean expression expected | ожидается выражение булевого типа | |
Operand types do not match operator | типы операндов не соответствуют оператору | |
Error in expression | ошибка в выражении | |
Illegal assignment | неправильное присваивание | |
Field identifier expected | ожидается идентификатор поля записи | |
Object file too large | «объектный файл слишком большой» — OBJ-файл превысил максимально допустимый размер (65520 байт) | |
Undefined external | «не определена внешняя подпрограмма» — Вероятно, во внешней подпрограмме отсутствует соответствующее определение PUBLIC | |
Invalid object file record | «нераспознаваемая запись объектного файла» — Вероятно, объектный файл искажен | |
Code Segment too large | «кодовый сегмент слишком велик» — Превышен максимально допустимый размер кода программы или модуля (65520 байтов) | |
Data segment too large | «сегмент данных слишком велик» — Превышен максимально допустимый размер сегмента данных (65520 байтов) | |
Do expected | ожидается ключевое слово DO | |
Invalid PUBLIC definition | «неправильное определение public» — Несоответствие определения PUBLIC в программе на Ассемблере и директивы external в программе или модуле на Паскале | |
Invalid EXTRN definition | «неправильное определение extrn» — Вероятно, фрагмент программы на языке Ассемблера не объявлен в программе или модуле | |
Too many EXTRN ltfinition | «слишком много определений extrn» — Максимально допустимое число определений EXTRN в Obj-файле равно 256 | |
OF expected | ожидается зарезервированное слово OF | |
INTERFACE expected | ожидается зарезервированное слово INTERFACE | |
Invalid relocatable | «неправильно определена смещенная ссылка» — Вероятно, во фрагменте программы на языке Ассемблера неправильно задано смещение адреса | |
THEN expected | ожидается зарезервированное слово Then | |
TO or DOWNTO expected | ожидается зарезервированное слово To или downto | |
Undefined forward | не завершено опережающее объявление | |
Too many procedures | «слишком много процедур» — Превышено максимально допустимое (512) количество подпрограмм, объявленных в программе или модуле | |
Invalid Typecast | неверно описанное преобразование типов | |
62 | Division by zero | деление на нуль |
Invalid file type | неправильно задан файловый тип | |
Cannot Read or Write variables of type | «нельзя читать или писать переменные этого типа» — Предпринята попытка чтения/записи данных, не обрабатываемых процедурами Read/Readln и Write/Writeln. | |
Pointer variable expected | ожидается переменная ссылочного типа | |
String variable expected | ожидается строковая переменная | |
String expession expected | ожидается выражение строкового типа | |
Circular unit reference | «циклические ссылки модулей» — Не допускается, чтобы два модуля ссылались друг на друга | |
Unit name mismatch | «неправильное имя модуля» — Модуль, имя которого задано в директиве Uses, не найден | |
Unit version mismatch | «неверная версия модуля» — Модуль, подключаемый к программе, был изменен после компиляции | |
Duplicate unit name | имя модуля дублируется в директиве uses | |
Unit file format error | ошибка в спецификации файла модуля | |
Implementation expected | ожидается зарезервированное слово implementation | |
Constant and case types do not match | типы констант и селектора в операторе case не соответствуют друг другу | |
Record variable expected | ожидается переменная комбинированного типа | |
Constant out of range | константа не укладывается в допустимый диапазон | |
File variable expected | ожидается переменная файлового типа | |
Pointer expression expected | ожидается выражение ссылочного типа | |
Integer or real expression expected | ожидается выражение типа integer или real | |
Label not within current block | метка находится вне текущего блока | |
Label already defined | метка ранее уже объявлена | |
Undefined label in preceding statement part | необъявленная метка в предыдущей части раздела операторов | |
Invalid @ argument | неправильный аргумент оператора @ | |
UNIT expected | ожидается зарезервированное слово unit | |
“;” expected | ожидается точка с запятой | |
”:” expected | ожидается двоеточие | |
“,” expected | ожидается запятая | |
“(“ expected | ожидается открывающая круглая скобка | |
“)” expected | ожидается закрывающая круглая скобка | |
“=”' expected | ожидается знак равенства | |
”:=" expected | ожидается знак присваивания | |
”[“' or "(" expected | ожидаются знаки “[“ или “(“ | |
”]” or “)” expected | ожидаются знаки ']' или ')' | |
”.” expected | ожидается точка | |
”..” expected | ожидается горизонтальное двоеточие | |
Too many variables | «слишком много переменных» — Максимально допустимый размер памяти для размещения переменных равен 64К: – глобальных, объявленных в программе или модуле; – локальных, объявленных в подпрограмме | |
Invalid FOR control variable | «неправильная переменная цикла в операторе for» — Переменная цикла в операторе for должна принадлежать одному из простых типов | |
Integer variable expected | ожидается переменная целого типа | |
File and procedure types are not allowed here | в данном контексте файловый и процедурный типы недопустимы | |
String length mismatch | «неправильная длина строки» — Длина строковой константы не соответствует количеству элементов символьного массива. | |
Invalid ordering of fields | неправильный порядок следования полей | |
String constant expected | ожидается константа строкового типа | |
Integer or real variable expected | ожидается переменная типа integer или real | |
Ordinal variable expected | ожидается переменная порядкового типа | |
INLINE error | ошибка в директиве inline | |
Character expession expected | ожидается выражение символьного типа | |
Too many relocation items | «слишком много перемещаемых элементов» — Размер таблицы перемещаемых символов в объектном файле превышает 64К байта. Это означает, что программа слишком велика, чтобы ее смог обработать компоновщик Турбо-Паскаля. | |
Overflow in arithmetic operation. | переполнение при выполнении арифметической операции | |
No enclosing For, While or Repeat statement. | использование операторов Break и Continue вне пределов цикла | |
Case constant out of range | «в операторе case константа не вписывается в допустимый диапазон» — Целочисленные константы, используемые в операторе case, должны находиться в пределах от -32768 до 32767. | |
Error in statement | ошибка в операторе | |
Cannot call an interrupt procedure | не вызывается процедура прерывания | |
Must be in 8087 mode to compile this | «для компиляции данной конструкции должен быть установлен режим сопроцессора» — Данная конструкция может быть откомпилирована только в режиме {$ N+}. | |
Target address not found | «заданный адрес отсутствует» — Не обнаружен оператор, расположенный по заданному адресу. | |
Included files are not allowed here | «в заданном месте не допускается включение файла» — Исходные файлы нельзя включать внутри раздела операторов. | |
No inherited methods are accesible here. | неправильное использование ключевого слова Inherited | |
Invalid Qualifier | «неправильно указан квалификатор» — Возможны следующие причины появления сообщения: задан индекс переменной, не объявленной как массив; задано поле переменной, не объявленной как запись; в качестве указателя используется переменная, не объявленная как ссылочная | |
Invalid variable reference | неправильная ссылка на переменную | |
Too many symbols | «слишком много символов» — Длина текста программы или модуля превышает 64К байта | |
Statement part too large | «слишком велик раздел операторов» — Превышен максимально допустимый размер раздела операторов программы (около 24К байт) | |
Files must be var parameters | «файлы должны быть параметрами-переменными» — Параметры файлового типа в объявлении подпрограмм должны описываться как переменные. | |
Too many conditional symbols | «слишком много условных символов» — Недостаточно памяти для размещения имен, указанных в директивах условной компиляции Рекомендуется укоротить одно или несколько символических имен | |
Misplaced conditional directive | несоответствие директив условной компиляции | |
ENDIF directive missing | отсутствует директива {$ ENDIF} | |
Error in initial conditional defines | «ошибка в установке условных определений» — Условия компиляции, заданные в Options/Compiler/ Conditional defines, должны разделяться пробелами, запятыми или точками с запятой | |
Header does not match previous definition | «заголовок не соответствует предыдущему определению» — Заголовок подпрограммы, заданный в секции связи модуля или в объявлении, использующем forward, не соответствует данному заголовку | |
Critical disk error | серьезная ошибка дискового накопителя | |
Cannot evaluate this expression | данное выражение невозможно вычислить | |
Expession incorrectly terminated | «неправильно завершено выражение» — Вероятно, отсутствует точка с запятой | |
Invalid format specifier | неправильная спецификация формата | |
Invalid indirect reference | «неправильная косвенная ссылка» — Возможно, используется переменная типа absolute, базовая переменная которой не объявлена в данном модуле | |
Structured variables are not allowed here | в данном контексте структурные переменные недопустимы | |
Cannot evaluate without System unit | нельзя вычислить без модуля System | |
Cannot access this symbol | «невозможен доступ к данному символу» — Доступ к некоторым идентификаторам, например, переменным, возможен только после начала фактического выполнения программы | |
Invalid floating-point operation | «неправильная операция с плавающей точкой» » — Операция над двумя значениями вещественного типа привела к переполнению или делению на нуль | |
Cannot compile overlay to memory | нельзя компилировать код оверлейной программы в память | |
Procedure or function variable expected | ожидается переменная типа procedure или function | |
Invalid procedure or function reference | неправильная ссылка на процедуру или функцию | |
Cannot overlay this unit | «данный модуль нельзя сделать оверлейным» — Предпринята попытка объявить оверлейным модуль, который был откомпилирован без директивы {$0+ }. | |
Too many nested scopes | использование недопустимо большого числа вложенных элементов языка | |
File access denied | попытка использовать файл, предназначенный только для считывания, как выходной | |
Object type expected | ожидается объектный тип | |
Local object types are not allowed | «локальный объектный тип недопустим» — Объектный тип не должен объявляться в подпрограмме | |
VIRTUAL expected | ожидается зарезервированное слово virtual | |
Method identifier expected | ожидается идентификатор метода | |
Virtual constructors are not allowed | «виртуальные конструкторы недопустимы» — Метод-конструктор может быть только статическим | |
Constructor identifier expected | ожидается идентификатор конструктора | |
Destructor identifier expected | ожидается идентификатор деструктора | |
Fail only allowed withing constructors | «процедуру Fail можно использовать только внутри конструкторов» | |
Invalid combination of opcode and operands | «неправильное сочетание кода операции и операндов» — Код операции Ассемблера не допускает данного сочетания операндов | |
Memory reference expected | «ожидается ссылка на элемент памяти» — Вероятно, регистровый операнд не заключен в квадратные скобки | |
Cannot add or subtract relocatable symbols | сложение или вычитание переместимых символов недопустимо | |
Invalid register combination | указана неправильная комбинация регистров | |
286/287 Instructions are not enabled | «не разрешены инструкции процессора 286/287» — Отсутствует директива компилятора {$G+}, разрешающая использовать операции 286/287 | |
Invalid symbol reference | «неправильная ссылка на символ» — Данный символ нельзя использовать в ассемблерном операнде | |
Code generation error | ошибка при генерации кода | |
ASM expected | ожидается зарезервированное слово ASM |
Приложение В. Описание числовых файлов для лабораторных работ
Текстовые файлы DATF.TXT и DATI.TXT содержат соответственно вещественные и целые числа, набитые по 10 чисел в строке, DATF.BIN и DATI.BIN содержат вещественные и целые числа во внутримашинной кодировке. Файлы SIMBOL.TXT, RUS.TXT и LAT.TXT содержат символьную информацию. Имена, строение и метод доступа к данным файлов приведены ниже.
1. Файл DATI.TXT – последовательный символьный (текстовый) набор целочисленных данных, содержит 1000 чисел в виде 50 строк (записей) по 20 чисел в каждой строке. Значения чисел не превосходят 999 по абсолютной величине.
Пример открытия файла и чтения из него чисел с 310 по 315:
VAR
mas : array[1..5] of integer;
fin : text;
. . .
BEGIN
. . .
Assign(fin,'D:LAB1DATI.TXT');
Reset(fin);
пропуск 300 чисел в виде 15 строк по 20 чисел:
for i:=1 to 15 readln(fin);
пропуск первых 9 чисел (301-309)
и чтение 6 чисел (310-315):
for i:=1 to 9 read(fin);
for i:=1 to 6 read(fin,mas[i]);
close(fin); закрытие файла
. . .
Примечание: Если рассматривать этот набор данных, как содержащий последовательность символов – цифр, пробелов и других служебных символов, то при чтении его в символьный массив рекомендуется пропускать концы строк. Например, при чтении из этого набора данных в одномерный символьный массив Txt следует использовать функцию Eoln:
for i:= ... do
if not Eoln(fin) then Read(fin, Txt[i])
else Readln(fin);
Если желательно дополнительно также пропускать все пробелы (и символы табуляции), то лучше использовать функцию SeekEoln :
for i:= ... do
if not SeekEoln(fin) then Read(fin, Txt[i])
else Readln(fin);
И, наконец, если при чтении желательно брать только цифры, то можно в программу добавить "шаг назад" при каждом вводе не цифрового значения:
for i:= ... do
begin
Read(fin, Txt[i])
if (Txt[i] < '0') or (Txt[i] > '9') then i:=i-1;
end;
2. Файл DATF.TXT – последовательный символьный (текстовый, форматный) набор вещественных данных, содержит 500 чисел в виде 50 строк (записей) по 10 чисел в каждой строке. Значения чисел не превосходят 1000000 по абсолютной величине. Пример открытия файла и чтения из него чисел с 32 по 35:
VAR
mas : array[1..4] of real;
fin : text;
. . .
BEGIN
. . .
Assign(fin,'D:LAB1DATF.TXT');
Reset(fin);
пропуск 31 числа:
for i:=1 to 31 read (fin);
чтение 4 чисел:
for i:=1 to 4 read(fin,mas[i]);
close(fin);
. . .
Примечание: Если читать из этого набора данных в символьный массив, рекомендуется пользоваться приемами, описанными для файла DATI.TXT.
3. Файл DATI.BIN – файл прямого доступа, представляет набор целочисленных данных, содержит 1000 двухбайтовых целых чисел. Должен описываться как файл из данных целого типа или массивов целого типа. Значения чисел не превосходят 999 по абсолютной величине. Пример открытия файла и чтения из него каждого 5-го числа:
VAR
dann,fict : integer;
fin : file of integer;
. . .
BEGIN
Assign(fin,'D:LAB1DATI.BIN');
Reset(fin);
While not Eof do
begin
for i:=1 to 4 do read(fin,fict); { пропуск 4 чисел, чтением их в фиктивную переменную}
Read(fin,dann); { чтение числа }
. . .
end;
close(fin); {закрытие файла }
. . .
4. Файл DATF.BIN – бесформатный (двоичный, внутримашинный) файл прямого доступа, представляет набор вещественных данных, содержит 500 шестибайтовых вещественных чисел. Должен подключаться к файловой переменной вещественного типа. Значения чисел не превосходят 99 по абсолютной величине. Пример открытия файла и чтения из него всех чисел после 90-го по 10 штук:
TYPE
MAS10 = array[1..10] of real;
VAR
dann : MAS10;
fin : file of MAS10;
. . .
BEGIN
. . .
Assign(fin,'D:LAB1DATI.BIN');
Reset(fin);
пропуск 90 чисел, чтением их в переменную dann длиной 10 чисел 9 раз
for i:=1 to 9 do
read(fin,dann);
While not Eof do {пока не кончится файл}
begin
Read(fin,dann); { чтение очередных 10 чисел: }
. . .
end;
close(fin); { закрытие файла }
. . .
5. Файл SIMBOL.TXT – символьный (текстовый) файл последовательного доступа, представляет набор символьных данных, содержит 410 элементов (без переводов строк). Этот набор данных можно связывать как с текстовой, так и с типизированной (типа char) файловой переменной.
Пример 1. Чтение из файла с 20-го по 50-ый символы в одномерный символьный массив:
VAR
mas : array[0..30] of char;
fin : text;
. . .
BEGIN
. . .
Assign(fin,'D:LAB1SIMBOL.TXT');
Reset(fin);
пропуск 19 символов:
for i:=1 to 19 read (fin);
чтение 31 символа, с 20-го по 50-й:
for i:=0 to 30 read(fin,mas[i]);
close(fin); закрытие файла
. . .
Пример 2. Чтение из файла с каждого четвертого символа в одномерный символьный массив длиной 40 байт:
TYPE
SimMas = array[1..40] of char;
VAR
Sim : SimMas;
fin : file of char;
i,j : integer; {i- счетчик элементов массива, j - номер символа в файле }
. . .
BEGIN
. . .
Assign(fin,'D:LAB1SIMBOL.TXT');
Reset(fin);
. . .
j:=3; { нумерация в файле начинается с 0! }
for i:=1 to 40 do
begin
Seek(fin,j) { ищем нужный номер символа в файле }
read(fin,Sim[i]); { читаем его в очередной элемент массива }
j:=j+4; { устанавливаем новый номер }
end;
close(fin); { закрытие файла }
. . .
6. Файл RUS.TXT – символьный (текстовый) файл последовательного доступа, представляет набор строк, длиной не более 80 символов кириллицы в строке. Файл может читаться только как текстовый.
Пример 1. Чтение из файла с 5-го по 9-ю строки в одномерный строчный массив:
TYPE Ss = string[80];
VAR mas : array[1..5] of Ss;
fin : text;
. . .
BEGIN
. . .
Assign(fin,'D:LAB1RUS.TXT');
Reset(fin);
{ пропуск 4-х строк: }
for i:=1 to 4 do ReadLn (fin);
{ чтение 5-и строк: }
for i:=1 to 5 do ReadLn (fin,mas[i]);
close(fin); { закрытие файла }
. . .
7. Файл LATS.TXT – символьный (текстовый) файл. Может рассматриваться как файл последовательного доступа, если читать в строковые переменные, и как файл последовательного или прямого доступа, при чтении в символьные переменные. В последнем случае содержит он служебные символы возврата каретки и перевода строки. Представляет набор строк, длиной строго по 50 символов ASCII в каждой строке, не считая двух служебных символов.
Пример 1. Чтение из файла ASCII символов в символьный массив [2х55] элементов:
VAR
mas : array[1..2,1..55] of char;
fin : text;
. . .
BEGIN
. . .
Assign(fin,'D:LAB1LATS.TXT');
Reset(fin);
for i:=1 to 2 do
for j:=1 to 55 do
if not Eol(Fin) then
Read (fin,mas[i])
else {пропуск конца записи (служебных символов)}
begin
ReadLn(fin);
j:=j-1; { отмена смещения в массиве }
end;
close(fin); { закрытие файла }
. . .
Приложение Г.
Таблица ASCII-кодов (с альтернативной кодировкой)
Первая половина таблицы – стандартный набор кодов символов
№ п/п | Код 16-й | Символ | № п/п | Код 16-й | Символ | № п/п | Код 16-й | Символ | № п/п | Код 16-й | Символ |
(null) | @ | ` | |||||||||
☺ | ! | A | a | ||||||||
☻ | " | B | b | ||||||||
♥ | # | C | c | ||||||||
♦ | $ | D | d | ||||||||
♣ | % | E | e | ||||||||
♠ | & | F | f | ||||||||
● | ' | G | g | ||||||||
◘ | ( | H | h | ||||||||
○ | ) | I | i | ||||||||
0A | ◙ | 2A | * | 4A | J | 6A | j | ||||
0B | ♂ | 2B | + | 4B | K | 6B | k | ||||
0C | ♀ | 2C | , | 4C | L | 6C | l | ||||
0D | ♪ | 2D | - | 4D | M | 6D | m | ||||
0E | ♫ | 2E | . | 4E | N | 6E | n | ||||
0F | ☼ | 2F | / | 4F | O | 6F | o | ||||
► | P | p | |||||||||
◄ | Q | q | |||||||||
↕ | R | r | |||||||||
‼ | S | s | |||||||||
Π | T | t | |||||||||
§ | U | u | |||||||||
▬ | V | v | |||||||||
↨ | W | w | |||||||||
↑ | X | x | |||||||||
↓ | Y | y | |||||||||
1A | → | 3A | : | 5A | Z | 7A | z | ||||
1B | ← | 3B | ; | 5B | [ | 7B | { | ||||
1C | └ | 3C | < | 5C | 7C | | | |||||
1D | ↔ | 3D | = | 5D | ] | 7D | }| | ||||
1E | ▲ | 3E | > | 5E | ^ | 7E | ~ | ||||
1F | ▼ | 3F | ? | 5F | _ | 7F | D |
Вторая половина таблицы – альтернативный набор кодов символов
№ п/п | Код 16-й | Символ | № п/п | Код 16-й | Символ | № п/п | Код 16-й | Символ | № п/п | Код 16-й | Символ |
А | A0 | а | C0 | └ | E0 | р | |||||
Б | A1 | б | C1 | ┴ | E1 | с | |||||
В | A2 | в | C2 | ┬ | E2 | т | |||||
Г | A3 | г | C3 | ├ | E3 | у | |||||
Д | A4 | д | C4 | ─ | E4 | ф | |||||
Е | A5 | е | C5 | ┼ | E5 | х | |||||
Ж | A6 | ж | C6 | ╞ | E6 | ц | |||||
З | A7 | з | C7 | ╟ | E7 | ч | |||||
И | A8 | и | C8 | ╚ | E8 | ш | |||||
Й | A9 | й | C9 | ╔ | E9 | щ | |||||
8A | К | AA | к | CA | ╩ | EA | ъ | ||||
8B | Л | AB | л | CB | ╦ | EB | ы | ||||
8C | М | AC | м | CC | ╠ | EC | ь | ||||
8D | Н | AD | н | CD | ═ | ED | э | ||||
8E | О | AE | о | CE | ╬ | EE | ю | ||||
8F | П | AF | п | CF | ╧ | EF | я | ||||
Р | B0 | ░ | D0 | ╨ | F0 | Ё | |||||
С | B1 | ▒ | D1 | ╤ | F1 | ё | |||||
Т | B2 | ▓ | D2 | ╥ | F2 | Є | |||||
У | B3 | │ | D3 | ╙ | F3 | є | |||||
Ф | B4 | ┤ | D4 | ╘ | F4 | Ї | |||||
Х | B5 | ╡ | D5 | ╒ | F5 | ї | |||||
Ц | B6 | ╢ | D6 | ╓ | F6 | Ў | |||||
Ч | B7 | ╖ | D7 | ╫ | F7 | ў | |||||
Ш | B8 | ╕ | D8 | ╪ | F8 | ° | |||||
Щ | B9 | ╣ | D9 | ┘ | F9 | • | |||||
9A | Ъ | BA | ║ | DA | ┌ | FA | · | ||||
9B | Ы | BB | ╗ | DB | █ | FB | √ | ||||
9C | Ь | BC | ╝ | DC | ▀ | FC | № | ||||
9D | Э | BD | ╜ | DD | ▌ | FD | ¤ | ||||
9E | Ю | BE | ╛ | DE | ▐ | FE | ▄ | ||||
9F | Я | BF | ┐ | DF | ▄ | FF |
– Конец работы –
Используемые теги: информатика, Лабораторный, Практикум, программированию, Турбо-Паскале0.092
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Информатика Лабораторный практикум По программированию На Турбо-Паскале
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов