рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Информатика Лабораторный практикум По программированию На Турбо-Паскале

Информатика Лабораторный практикум По программированию На Турбо-Паскале - раздел Информатика, Министерство Образования Российской Федерации Российский Госу...

Министерство образования Российской Федерации

РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ГИДРОМЕТЕОРОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

 

В.А. БОЛЬШАКОВ, Г.И.ВОРОНОВ, Л.А. САВВАТЕЕВА

 

 

Информатика

Лабораторный практикум

По программированию

На Турбо-Паскале

  Санкт-Петербург

СОДЕРЖАНИЕ

СОДЕРЖАНИЕ.. 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 по значениям одного или нескольких аргументов, величины которых вводятся с клавиатуры операторами ввода. Результат вывести на экран. Проверить программу, задавая значения аргументов, указанные в задании, и сверяя результаты с приведенными ответами.

Оформить отчет по лабораторной работе по образцу первой работы, но текст программы распечатать из оболочки Турбо-Паскаля.

Требования к программе

· Константа, встречающаяся в задании два или более раз, должна быть использована в программе в форме именованной константы. · Значения аргументов вводятся с клавиатуры, перед вводом должен стоять… · Проверку программы выполнить для всех ветвей алгоритма.

Общие пояснения

    Ветвящиеся алгоритмы могут быть построены как из стандартных структур ветвления (А), так и из неполных (В). В данной работе (как и вообще при программировании на языке Паскаль)… 2. Реализация структур ветвления на Паскале осуществляется с помощью условных операторов "if".

Разбор контрольного варианта

Задание

Написать программу вычисления и вывода на экран (по формату :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 столбцов заполнить числами из входного текстового файла. Исходный массив распечатать. Столбец, где расположен минимальный элемент массива, упорядочить по возрастанию методом пересчета в одномерный массив. Созданный массив распечатать. Веществ.

Формирование таблицы идентификаторов

Сортировка пересчетом потребует заводить счетчик (ki) числа элементов, меньше рассматриваемого "i-го" элемента сортируемого столбца,… На основании перечисленных объектов таблица будет содержать:  

Алгоритм

a) Цикл расчета числа элементов, меньших "i-го". Перед циклом ki делаем равным не нулю, а единице, т.к. после подсчета числа элементов,… b) Поиск места в выходном массиве, для рассматриваемого элемента. Если… При оформлении лабораторной работы, алгоритм следует изобразить в форме блок-схемы.

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

{ Программа Лабораторной работы N 5 Вариант N 31. А.Я.Умненькая, ст. гр. Я-007 }

Содержимое файла результатов UMNIK5.RES

Исходный массив из 7x7 элементов -2.20 -6.93 0.20 8.97 8.09 5.38 7.82 5.43 15.33 13.60 9.32 17.38 17.70 16.26

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

Таблица 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

Программирование итерационных циклов

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

Задачи лабораторной работы

Вопросы, изучаемые в работе

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

Требования к программе

· В варианте №3 Arcsin выразить через другие функции (см. в лаб. 1) Arcsin(x)=Arctan(x/sqrt(1-x*x)) . · В варианте №15 учесть, что sin(X)/X при Х=0 равен 1. · В варианте №21 учесть, что cos(X)/Xпри Х=0 не существует, поэтому такое значение Х в таблице пропускать.

Содержание программы

  • Заголовок программы с комментарием;
  • Описание переменных;
  • Описание инициализированных переменных;
  • Ввод с клавиатуры исходных данных;
  • Вычисление (если необходимо) вспомогательных значений;
  • Вывод исходных данных в выводной файл;
  • Формирование шапки таблицы;
  • Задание начальных значений для величин, вычисляемых рекуррентными формулами;
  • Цикл расчета и вывода в текстовый файл строк таблицы;
  • Закрытие выводного файла.

Общие пояснения

Если неизвестная функция разложена в ряд F(x) = C1x1 + C2x2 + C3x3 + … + Cnxn +…, то приближенно можно положить

Разбор контрольного варианта

Задание

Рассчитать и построить таблицу точных и приближенных значений функции

начальное значение X: A=-0.05, конечное – B=0.04, шаг XDx=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 Метка Начало блока ввода точности

Алгоритм

1. Задание исходных данных в разделе констант (для A и B); 2. Ввод исходных данных (Dx и EPS); 3. Определение длины внешнего (по X) цикла;

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

program Tabl_Of_Fx; { Программа Лабораторной работы N 6 Вариант N 31.

Результаты расчета

Исходные данные Интервал X: [-0.05 0.04], Шаг X:0.010, шагов: 9, точность: 1.0E-0006

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

Таблица 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

Программирование процедур на Паскале

Задачи лабораторной работы

Вопросы, изучаемые в работе

  • Изучение строения и использования процедур, механизма параметров процедур.
  • Изучение строения и использования функций пользователя.
  • Продолжение изучения основных алгоритмов сортировки.
  • Освоение работы с файлами различных типов.

Задание (общее ко всем вариантам).

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

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

Исходные данные читать из существующего текстового или двоичного файла. Результаты расчета выводить в форматном виде в выходной текстовый файл.

Оформить отчет по лабораторной работе аналогично оформлению предыдущих работ.

Требования к программе и отчету по работе

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

· Алгоритмы каждой подпрограммы и основной программы выполнить отдельно.

· Все значения, на которые по смыслу накладываются ограничения, должны при вводе проверяться.

· Все выводимые данные должны подписываться.

Содержание программы.

  • Заголовок программы с комментарием;
  • Описание типов массивов;
  • Описание переменных основной программы;
  • Описание процедур и функций;
  • Ввод необходимых исходных данных с клавиатуры;
  • Открытие входных и выводного файлов;
  • Ввод необходимых исходных данных из файла;
  • Вывод исходных данных, в том числе массива в выводной файл. При выводе массива использовать созданную процедуру;
  • Обработка массива в соответствии с заданием с применением разработанной процедуры или функции;
  • Вывод результатов обработки в выводной файл, возможно с применением процедуры;
  • Закрытие всех файлов.

Пояснения к лабораторной работе

Общие пояснения к использованию процедур и функций.

И процедура, и функция состоят из заголовка, раздела описаний и выполняемого блока. Их описания должны находиться после других операторов описаний… PROCEDURE <имя процедуры>(<список параметров>); – для процедуры… FUNCTION <имя функции>(<список аргументов>):<тип результата>; – для функции.

Механизм параметров

Существует два способа передачи данных через список параметров из вызывающей программы в процедуру. Первый способ заключается в том, что процедуре… Есть некоторые особенности при передаче массивов (и других составных данных… Отметим, что когда параметры передаются по имени, они занимают в памяти по 4 байта. Подробнее об этом смотри…

Разбор контрольного варианта

Задание

Таблица 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;   Блок-схема алгоритма

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

PROGRAM KorrMas; { Лабораторная работа N 7 Вариант N 31 Обработка массива

Лабораторная работа N 8

Графика на Паскале

Задачи лабораторной работы

Вопросы, изучаемые в работе

Общие пояснения

Графический режим экрана

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

Алгоритмы построения графиков на экране

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

Стандартный модуль работы с графическим экраном Graph

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

Разбор контрольного варианта № 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 " - Стандартные подпрограммы работы с консолью
Print " - Стандартные подпрограммы работы с принтером
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 Имя процедуры - Копирование графического экрана на принтер

Алгоритм

2.Ввод исходных данных; 3.Печать исходных данных; 4.Расчет характеристик функций;

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

{ Программа Лабораторной работы N 8. Вариант N 31. Построение графика функции.

Разбор контрольного варианта № 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

Динамические переменные. Списки

Задачи лабораторной работы

Вопросы, изучаемые в работе

В лабораторной работе требуется сформировать заданный тип списка, заполнить его в соответствии с указаниями варианта задания данными из входного… Файл данных Dan.dat находится в каталоге D:LAB1и состоит из записей. Первое… В таблице вариантов указаны условия, которым должны отвечать записи данных, выбираемые из файла, а также типы списка и…

Требования к программе

Содержание программы

  • формирование заглавного звена списка;
  • цикл чтения записей из файла данных и занесения их в список;
  • заполнение полей записи заглавного звена списка;
  • вывод записей данных из списка в выводной файл;
  • удаление списка.

Общие пояснения

Однако, статические переменные в Паскале не могут в сумме превышать 64 килобайта оперативной памяти. Кроме того, уже при составлении программы… Для устранения этих недостатков можно использовать динамическое выделение… Переменные, которые размещаются в этой памяти, называются динамическими. У них нет имен и для обращения к ним…

При работе с динамическими переменными важно помнить, что любая память, выделенная процедурой new, должна быть освобождена в программе процедурой DISPOSE !

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

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

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

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

Односвязные списки

Type Z=Record {комбинированный тип для данных} a: String; {строковое поле}

Двусвязные списки

P=^S; {тип указатель записи базового типа S} S=Record {базовый тип для указателей типа Р} ls: P; {поле типа Р ссылки на следующую запись}

Нульсвязные списки

В нульсвязных списках нет заглавных звеньев. У них есть только начало и конец. Началом (или начальным звеном) называется звено, которое можно взять… В языке Паскаль нет средств, позволяющих описывать переменные типа нульсвязных… Рассмотрим варианты нульсвязных списков.

Описание файлов с данными

1-ое поле - string[15]; { поле для Фамилии И.О.} 2-ое поле - integer; {поле балла за 1 семестр} 2-ое поле - integer; {поле балла за 2 семестр}

Разбор контрольного варианта

Задание

Таблица 31. Данные к заданию 31 варианта

№ вар. Требования к записям, выбираемым из файла и помещаемым в список Тип списка Файл данных
В начало – только с пятерками, в конец – только с тройками S0D dan.txt

 

На основе общего задания и данных таблицы вариантов конкретное задание формулируется следующим образом:

Заполнить нульсвязный список дек данными из файла DAN.TXT,занося в начало дека записи о студентах, у которых все оценки – 5 баллов, а в конец дека – сведения о студентах, имеющих все оценки – 3 балла. Добавить в начало дека запись, в которой вместо фамилии указан тип списка, а вместо первой оценки – число записей с информацией в деке. Вывести в выводной текстовый файл таблицу записей из дека. Созданный дек удалить из памяти.

Содержание программы

Задание включает в себя следующие действия, подлежащие программированию:

  • Формирование пустого дека;
  • Открытие входного и выходного файлов;
  • Чтение данных из файла с занесением нужных записей в дек с подсчетом их количества;
  • Добавление информационной записи в начало дека;
  • Вывод в выходной файл информационной записи из дека с удалением этой записи;
  • Вывод "шапки" таблицы в выходной файл;
  • Удаление из дека записей с выводом информации в табличном виде в выходной файл;
  • Закрытие выходного файла.

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

Учитывая, что файл текстовый, воспользуемся процедурой чтения строки файла с распределением информации по полям структуры, как это рассмотрено в пояснениях выше.

Алгоритм

Добавление записи в дек. Исходя из схемы дека, приведенной на рис. 20, будем считать его пустым, если в нем нет ни одной записи, то есть указатели… Удаление записи из дека. В задаче требуется выбирать данные из дека с одной… Заполнение дека из текстового файла. Представляет собой цикл (пока не достигнут конец файла) чтения очередной строки…

Таблица идентификаторов

Таблица 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 структура Рабочая структура для данных о студенте

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

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

{ Программа Лабораторной работы N 9 Динамические переменные. Списки. Вариант N 31.

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

Таблица 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

Литература

  1. Бородич Ю.С., Вальвачев А.Н., Кузьмич А.И. Паскаль для персональных компьютеров: Справочне пособие. Минск: "Вышейшая школа", 1991.
  2. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0 (третье издание). М.: "Диалог-МИФИ", 1996.
  3. Немнюгин С.А. Turbo Pascal: практикум. СПб.: Питер, 2001.
  4. Кнут Д. Искусство программирования для ЭВМ. /Пер. с англ.: В 3-х томах. т.3. Сортировки и поиск. М.: Мир, 1976.
  5. Бронштейн И.Н., Семендяев К.А. Справочник по математике для инженеров и учащихся ВТУЗов (Изд. 13-е). М.: "Наука", 1986.

 

Приложение А. Система меню и команды Турбо-Паскаля

Меню системы программирования Турбо-Паскаль

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

Главное меню

Выполнить некоторые часто используемые команды дополнительного меню можно, минуя главное меню, с помощью так называемых "горячих клавиш".…   Таблица 34 Пункты главного меню Турбо-Паскаля

Опции главного меню

Команды опции Ё

About позволяет получить информацию об используемой версии системы программирования Турбо-Паскаль.

Refresh display – обновляет экран.

Clear desktop – закрывает все активные программы и очищает все списки.

Команды опции File.

После активизации опции Open на экране появляется диалоговое окно, в котором находится список файлов текущей директории и справа – ряд кнопок.… New – открытие нового окна редактирования и нового файла с именем NONAME<… Save – запись файла, находящегося в активном окне редактирования, на диск. Если файл имеет системное имя, начинающееся…

Команды опции Edit.

Restore line – отмена всех изменений, внесенных последней операцией редактирования. Cut – удаление выделенного фрагмента текста из окна редактирования и помещение… Copy – помещение копии выделенного фрагмента текста в карман.

Команды опции Search.

Find – (поиск) – при выборе этой опции на экране появляется диалоговое окно, а пользователю предлагается ввести искомую последовательность символов… – различать прописные и строчные буквы; – анализировать только слова или знаки пунктуации то же;

Команды опции Run.

Run – компиляция, компоновка и выполнение программы, находящейся в активном окне редактирования. Причем компилируются также модули, определяемые по… Нажатие клавши Ctrl–Break приводит к приостановке процесса выполнения… Program Reset – освобождение памяти, отведенной для программы, закрытие всех файлов, используемых программой и…

Команды опции Compile.

Compile –компиляция программы или модуля, находящегося в активном окне редактирования. После окончания компиляции на экране появляется окно,… В том случае, если в тексте компилируемой программы (или модуля) имеется… Make –с помощью этой опции компилируются:

Команды опции Debug.

Evaluate/Modify –вывод на экран значения произвольного выражения в процессе от­ладки, а также просмотр и в случае необходимости изменение значения… Watches –открытие и активизация окна наблюдений. Эта опция позволяет… Toggle breakpoint –установка/снятие точки останова в строке, где находится курсор.

Команды опции Options.

Compiler: выбор этой опции приводит к развертыва­нию на экране диалогового окна, в котором присутствуют кнопки-флаги, служащие для управления… 1. С помощью окна Code Generation можно определять значения флагов,… - Флаг Force Far Calls дает возможность установить для всех процедур и функций дальнюю или ближнюю модель вызова.…

Команды опции Window.

Size/Move – изменение размеров активного окна и места его расположения на экране. Операции можно осуществлять либо с помощью клавиш со стрелками,… Zoom – расширение окна до его максимальных размеров Tile – размещение на экране дисплея всех открытых в данный момент окнон. Размеры всех окон одинаковы, друг друга они…

Команды опции Help.

– во-первых, можно получить конкретную справку о выбранной опции меню или об активном диалоговом окне, просто нажав клавишу F1 или кнопку [Help],… – во-вторых, справку о языке можно получить, поместив курсор в окне… Если окно Help активно, то присутствующие в нем подсвеченные ключевые слова или предложения могут быть выбраны для…

Локальные меню

Локальных меню всего пять (здесь учитывается и меню Browse, доступное только в защищенном режиме работы процессора) и каждое из них привязано к соответствующему окну: редактирования, помощи, наблюдений, сообщений и браузера. Активизация локального меню производится нажатием клавиш Alt-F10 или правой клавиши мыши.

Меню окна редактирования

Меню окна помощи. Меню включает четыре опции меню Help – Contents, Index, Topic search и…

Меню окна наблюдений

Add служит для добавления выражения в окно наблюдений. Любое выражение, присутствующее в окне наблюдений, можно сделать текущим. Для этого… Modify дает возможность редактировать текущее выражение, находящееся в окне… Remove позволяет удалить текущее выражение из окна наблюдений. Но в этом случае для удаления проще воспользоваться…

Меню окна сообщений.

В этом меню три опции: 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

Сообщения об ошибках на шаге выполнения

Run-time error < номер > at < сегмент >:< смещенне >, где < номер > – номер ошибки, < сегмент >:< смещение > – адрес, по которому произошла ошибка.

Приложение В. Описание числовых файлов для лабораторных работ

Текстовые файлы 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

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Информатика Лабораторный практикум По программированию На Турбо-Паскале

Что будем делать с полученным материалом:

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

Еще рефераты, курсовые, дипломные работы на эту тему:

Лекции по курсу Информатика Лекция 1. Основные понятия и методы теории информатики и кодирования. Информатика как научная дисциплина. Понятие информации и информационных процессов
Лекция Основные понятия и методы теории информатики и кодирования... Информатика как научная дисциплина... Понятие информации и информационных процессов...

ЛЕКЦИЯ 1. 3 ПОНЯТИЕ ПРАВОВОЙ ИНФОРМАТИКИ И ЕЕ ПРЕДМЕТ. Правовая информатика как наука и учебная дисциплина. О месте правовой информатики в системе наук и правоведении. 14
ВВЕДЕНИЕ... ЛЕКЦИЯ... ПОНЯТИЕ ПРАВОВОЙ ИНФОРМАТИКИ И ЕЕ ПРЕДМЕТ Правовая информатика как наука и учебная дисциплина...

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ ЛАБОРАТОРНЫЙ ПРАКТИКУМ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ... ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ...

Лабораторный практикум по языку программирования Pascal
Лабораторный практикум по языку программирования Pascal... Ярославль Печатается по решению...

Аносова С. В. Рабочая тетрадь - практикум по информатике
Хабаровский институт инфокоммуникаций... филиал ГОУ ВПО Сибирского государственного университета телекоммуникаций и...

КУРС ЛЕКЦИЙ по дисциплине Информатика Лекция 1 1. Введение в информатику
Федеральное агентство по образованию... Государственное образовательное учреждение... высшего профессионального образования...

ПОДГОТОВКА, ПЛАНИРОВАНИЕ, ПРОВЕДЕНИЕ И ОБРАБОТКА ФАКТОРНОГО ЭКСПЕРИМЕНТА. Лабораторный практикум по дисциплине «Методология научных исследований»
Государственное образовательное учреждение... высшего профессионального образования... Уфимский государственный авиационный технический университет...

Лекция 1. Объектно-ориентированное программирование – это новый подход к программированию. Объектно- ориентированные языки обладают свойством
ВВЕДЕНИЕ... Приступая к изучению более сложных конструкций языка С следует прежде всего повторить тот материал который был...

ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО МЕХАНИКЕ
Федеральное агентство железнодорожного транспорта... Омский государственный университет путей сообщения...

КОМПЬЮТЕРНЫЙ ПРАКТИКУМ ПО ИНФОРМАТИКЕ. Часть I
Федеральное государственное образовательное учреждение высшего... Орловский государственный аграрный университет...

0.036
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам