Министерство общего и профессионального образования Российской Федерации РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ КАФЕДРА ...
18 downloads
264 Views
407KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство общего и профессионального образования Российской Федерации РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ КАФЕДРА ТЕОРЕТИЧЕСКОЙ И ВЫЧИСЛИТЕЛЬНОЙ ФИЗИКИ _______________________________________________________________
Т. П. Шестакова МЕТОДИЧЕСКИЕ УКАЗАНИЯ по курсу "Программирование и вычислительная физика" Часть III Типы данных языка Turbo Pascal. Файлы. Записи.
г. Ростов-на-Дону 2003 г.
2
Печатается по решению учебно- методической комиссии физического факультета. Протокол N от Шестакова Т. П. Методические указания по курсу "Программирование и вычислительная физика". Часть III. Типы данных языка Turbo Pascal. Файлы. Записи. Заказ N
3
ВВЕДЕНИЕ В третьей части методических указаний рассматриваются типизированные, нетипизированные и текстовые файлы, стандартные процедуры и функции для работы с файлами, а также тип данных запись (record). ФАЙЛЫ Средства языка Turbo Pascal позволяют работать с файлами, что облегчает обработку данных: например, программа может обращаться к файлам, содержащим необходимые данные, а также записывать в файлы результаты обработки данных. Напомним, что под файлом понимается именованная область памяти компьютера (жесткого диска, дискеты), либо логическое устройство − потенциальный источник или приемник информации. Длина файла ограничена только объемом памяти компьютера. Программа может обращаться к нескольким файлам одновременно. Для обращения к файлу необходимо ввести переменную файлового типа. В процессе работы программы она будет связана с конкретным файлом или логическим устройством, с которым будет происходить обмен данными (см. ниже). Turbo Pascal позволяет работать с файлами трех видов (вид файла определяет способ хранения информации в нем). 1. Типизированные файлы − содержат компоненты указанного типа, например, действительные числа. Описание типизированного файла: type <имя типа> = file of <тип компонентов>; Примеры: type RealFile = file of real; {Файл содержит действительные числа} IntFile = file of integer; {Компоненты файла - целые числа} Text80 = file of string[80]; {Компоненты файла - строки длиной не более 80 символов} var f1: RealFile; f2: IntFile; f3: Text80; Альтернативно, переменную файлового типа можно объявлять в программе без предварительного описания самого типа:
4
var <имя переменной>: file of <тип компонентов>; Примеры: var f4: file of byte; f5: file of char; 2. Текстовые файлы − определяются типом text. Описание текстового файла: type <имя типа> = text; Примеры: type TextFile = text; var t1: TextFile; Альтернативно, файловую переменную можно объявлять в программе без предварительного описания типа text: var <имя переменной>: text; 3. Нетипизированные файлы − определяются типом file. Описание нетипизированного файла: type <имя типа> = file; Примеры: type FileType = file; var t2: FileType; Альтернативно, файловую переменную можно объявлять в программе без предварительного описания типа file: var <имя переменной>: file;
5
Файлы или логические устройства становятся доступными программе только после выполнения особой процедуры открытия файла. Исключение составляют ввод данных с клавиатуры и вывод на экран. При открытии файла ранее объявленная файловая переменная связывается с именем уже существующего или вновь создаваемого файла. Для этого служит стандартная процедура assign: assign (<файловая переменная>, <имя файла или логического устройства>); Здесь <имя файла> − выражение строкового типа; может содержать прописные и строчные латинские буквы, цифры, а также символы ! @ # $ % ^ & ( ) ' ~ - _ (всего не более 8 символов). Имя файла начинается с любого из названных символов и может сопровождаться расширением − последовательностью, состоящей не более чем из 3 допустимых символов, отделяющейся точкой от имени файла. Перед именем файла может быть указан также путь к файлу, который может включать в себя имя диска и имя текущего каталога. Максимальная длина имени файла, включая путь и расширение − 79 символов. Стандартные имена логических устройств. клавиатура или экран дисплея (консоль). Использование этого логического имени позволяет осуществлять чтение данных с клавиатуры и вывод данных на экран. prn принтер. При подключении к компьютеру нескольких принтеров они получают логические имена lpt1, lpt2, lpt3, ... , причем prn и lpt1 по умолчанию считаются синонимами. Использование этих логических имен позволяет осуществлять вывод данных непосредственно на принтер. aux коммуникационный канал, используемый для связи компьютера с другими машинами. При наличии нескольких коммуникационных каналов они получают логические имена com1, com2, com3, ... , причем aux и com1 по умолчанию считаются синонимами. nul логическое имя "пустого" устройства (может использоваться при отладке программы). con
Перечисленные имена являются зарезервированными, т. е. нельзя, например, обратиться к файлу на жестком или гибком диске с логическим именем prn. После связывания файловой переменной с именем файла с помощью процедуры assign, необходимо его инициировать, указать направление передачи данных − открывается ли файл для чтения или для записи.
6
Файл открывается для чтения с помощью стандартной процедуры reset: reset (<файловая переменная>); Если делается попытка инициировать чтение из несуществующего файла или логического устройства prn, возникает ошибка ввода-вывода. Для контроля за ошибками ввода-вывода служит опция I/O CHECKING (меню OPTIONS − COMPILER − RUNTIME ERRORS − I/O CHECKING). В активном состоянии она позволяет контролировать правильность операций ввода-вывода. Существуют также директивы компилятора, которые позволяют включать (директива {$I+}) и отключать (директива {$I-}) контроль правильности операций ввода-вывода. В случае типизированных файлов к файлу, открытому с помощью процедуры reset, можно обращаться не только для чтения, но и для записи информации (т. е. использовать процедуры write/writeln). Для текстовых файлов, открытых с помощью процедуры reset, процедуры write/writeln использовать нельзя. Файл открывается для записи с помощью стандартной процедуры rewrite: rewrite (<файловая переменная>); Если файл, открытый с помощью процедуры rewrite, уже существовал ранее (т. е. файловая переменная была связана с именем уже существующего файла при выполнении процедуры assign), при выполнении процедуры rewrite старый файл с указанным именем уничтожается, и к приему информации подготавливается новый, пока еще пустой файл, указатель файла устанавливается в 0. Для того, чтобы добавить записи в конец уже существующего файла, не уничтожая его, служит процедура append: append (<файловая переменная>); Процедура append применима только к текстовым файлам (т. е. файловая переменная должна иметь тип text). Процедура append инициирует запись информации в ранее существовавший текстовой файл, указатель файла устанавливается в его конец. Если текстовой файл ранее уже был открыт с помощью процедур reset или rewrite, использование процедуры append приводит к закрытию этого файла и открытию его вновь, но уже для добавления записей.
7
Стандартные процедуры для работы с файлами любого типа: close (<файловая переменная>) закрывает файл, обеспечивая сохранение в файле всех новых записей и регистрацию файла в каталоге. Связь файловой переменной с именем файла, установленная ранее процедурой assign, сохраняется, поэтому файл можно повторно открыть без дополнительного использования процедуры assign. rename (<файловая переменная>, <новое имя>) процедура переименования файла. Если файл был ранее открыт с помощью процедур reset, rewrite или append, перед выполнением процедуры rename его необходимо закрыть с помощью процедуры close. erase (<файловая переменная>) уничтожает файл. Если файл был ранее открыт с помощью процедур reset, rewrite или append, перед выполнением процедуры rename его необходимо закрыть с помощью процедуры close. flush (<файловая переменная>) очищает внутренний буфер файла. При выполнении процедуры flush все записи, временно хранящиеся в буфере (т. е. во вспомогательной памяти, предназначенной для промежуточного хранения данных), будут записаны на диск. Если файл был инициирован для чтения процедурой reset, процедура flush игнорируется. chdir (<путь>) изменяет текущий каталог, устанавливая путь к новому каталогу. getdir (<устройство>, <каталог>) определяет имя текущего каталога. В результате выполнения процедуры getdir получают определенные значения переменная типа word (<устройство>), содержащая номер устройства, и переменная типа string (<каталог>), содержащая путь к текущему каталогу на указанном устройстве, причем 0 соответствует устройству по умолчанию, 1 − диску a:, 2 − диску b: и т. д. mkdir (<имя каталога, включая путь>) создает каталог с указанным именем. Имя не может совпадать с именем уже существующего каталога. rmdir (<имя каталога, включая путь>) удаляет каталог с указанным именем. Удаляемый каталог должен быть пустым, т. е. не содержать файлов или каталогов низшего уровня.
8
Стандартные функции для работы с файлами любого типа: eof (<файловая переменная>) логическая функция типа boolean. Принимает значение true, если указатель файла находится в конце файла. В этом случае при записи данные будут добавляться в конец файла, при чтении это означает, что файл исчерпан. ioresult функция типа word. Ее значением является код последней операции ввода-вывода. В случае успешного завершения последней операции ввода-вывода принимает значение 0, в противном случае − код ошибки ввода-вывода. Функция ioresult становится доступной только при отключении контроля за ошибками ввода-вывода с помощью директивы компилятора {$I+}. Стандартные процедуры для работы с типизированными файлами: read (<файловая переменная>, <список переменных>) чтение очередных компонентов файла. При выполнении процедуры read переменные, указанные в списке, последовательно принимают значения очередных компонентов типизированного файла. При этом тип переменных из указанного списка должен совпадать с типом компонентов файла. Файловая переменная должна соответствовать типизированному файлу (т. е. иметь тип file of ... ) и быть связана с именем конкретного файла с помощью процедуры assign. Файл должен быть открыт для чтения с помощью процедуры reset. После каждого чтения указатель файла сдвигается к следующему компоненту файла. Если файл исчерпан, обращение к процедуре read вызовет ошибку ввода-вывода. write (<файловая переменная>, <список переменных>) запись очередных компонентов файла. При выполнении процедуры write в файл записываются значения переменных, указанных в списке. При этом тип переменных из указанного списка должен совпадать с типом компонентов файла. Файловая переменная должна соответствовать типизированному файлу (т. е. иметь тип file of ... ) и быть связана с именем конкретного файла с помощью процедуры assign. Файл должен быть открыт с помощью процедуры reset или rewrite. После каждой записи указатель файла сдвигается к следующему компоненту файла. seek (<файловая переменная>, <номер компонента>) смещает указатель файла к компоненту с заданным номером. Номер компонента задается выражением типа longint. Первый компонент файла имеет номер 0.
9
Стандартные функции для работы с типизированными файлами: filesize (<файловая переменная>) функция типа longint, ее значением является количество компонентов файла. filepos (<файловая переменная>) функция типа longint, ее значением является порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода. Первый компонент файла имеет номер 0. Текстовой файл в языке Turbo Pascal рассматривается как совокупность строк переменной длины. Доступ к каждой строке осуществляется последовательно, начиная с первой. При создании текстового файла в конце каждой строки помещается специальный признак конца строки. В конце файла помещается специальный признак конца файла. Стандартные процедуры для работы с текстовыми файлами read (<файловая переменная>, <список переменных>) чтение данных из файла. Файловая переменная имеет тип text и должна быть связана с именем конкретного файла с помощью процедуры assign. В отличие от типизированных файлов переменные, указанные в списке, могут иметь любой целый или вещественный тип, а также char или string. В зависимости от типа переменных процедура чтения данных выполняется по-разному. При чтении целых или вещественных данных в текстовом файле выделяется последовательность (подстрока) символов, которая должна соответствовать символьному представлению числовой константы, например, 65535 35 4.0 -78.128 -0.27408E-07 Пробелы, которые могут находиться в начале строки (так называемые ведущие пробелы), при этом игнорируются. Признаком конца подстроки (после значащих символов) является пробел, символ конца строки или конца файла. Если символы подстроки не соответствуют принятому формату представления чисел (например, подстрока представляет собой запись действительного числа, в то время как ожидается чтение целого числа), возникает ошибка ввода-вывода. Если достигнут конец файла, а значащих символов не обнаружено, переменная получает значение 0. При чтении символьных данных переменная типа char получает значение, равное очередному считанному символу из файла.
10
При чтении строковых данных переменная типа string получает значение, соответствующее последовательности считанных из файла символов, причем количество считанных символов равно максимальной длине строки, если только один из считанных символов не является признаком конца строки или конца файла. Если файловая переменная не указана, предполагается, что ввод данных осуществляется с клавиатуры, т. е. мы имеем дело с уже хорошо знакомой нам процедурой read. readln (<файловая переменная>, <список переменных>) процедура аналогична процедуре read, за исключением того, что при выполнении процедуры readln считывается целая строка из файла. При следующем обращении к процедуре readln чтение данных из файла начинается с начала следующей строки. Использование процедуры readln без параметра <список переменных> приводит к пропуску строки. write (<файловая переменная>, <список переменных>) запись данных в файл. Файловая переменная имеет тип text и должна быть связана с именем конкретного файла с помощью процедуры assign. В отличие от случая типизированных файлов переменные, указанные в списке, могут иметь любой целый или вещественный тип, а также char или string. Если файловая переменная не указана, предполагается, что вывод данных осуществляется на экран, т. е. мы имеем дело с уже хорошо знакомой нам процедурой write. Формат представления данных, записываемых в текстовой файл, может быть определен программистом аналогично тому, как это можно сделать при выводе данных на экран. Например, при выводе десятичных чисел можно указать число цифр после запятой и полное число десятичных знаков, включая знак числа и десятичную точку. writeln (<файловая переменная>, <список переменных>) процедура аналогична процедуре write, за исключением того, что при выполнении процедуры writeln в файл записывается целая строка, в конец строки помещается признак конца строки. Использование процедуры writeln без параметра <список переменных> приводит к записи в файл пустой строки (содержащей только признак конца строки).
11
Стандартные функции для работы с текстовыми файлами eoln (<файловая переменная>) логическая функция типа boolean. Принимает значение true, если достигнут конец строки. seekeoln (<файловая переменная>) логическая функция типа boolean. Принимает значение true, если в строке нет более значащих символов (пробелы и символы табуляции игнорируются). seekeof (<файловая переменная>) логическая функция типа boolean. Принимает значение true, если в файле нет более значащих символов (пробелы, символы табуляции и признаки концов строк игнорируются). Нетипизированные файлы отличаются тем, что для них не указан тип компонентов. Это делает их совместимыми с любыми другими файлами. При работе с нетипизированными файлами необходимо указывать длину записи нетипизированного файла. Для записи информации в нетипизированный файл и чтения данных из файла используются специальные процедуры blockread и blockwrite (аналоги процедур read и write). Ниже мы рассмотрим пример программы, которая находит сумму действительных чисел, содержащихся в файле. В первой части программы создается файл, и в него записываются действительные числа, вводимые с клавиатуры. Затем вычисляется и выводится на экран сумма чисел. Сначала мы рассмотрим использование типизированного файла. Program Files_1; type RealFile = file of real; var freal: RealFile; name: string[8]; Procedure OpenRealFileForWriting; {Процедура открытия для записи файла, компонентами которого являются действительные числа} begin {OpenRealFileForWriting} write('Введите имя файла '); write('(не более 8 символов): '); read(name); assign(freal, name);
12
{Файловая переменная связывается с именем файла} rewrite(freal) {Файл открывается для записи} end; {OpenRealFileForWriting} Procedure WriteToRealFile; {Процедура ввода данных в файл, компонентами которого являются действительные числа} var x: real; begin {WriteToRealFile} write('Последовательно вводите '); writeln('действительные числа.'); write('Ввод каждого числа завершайте '); writeln('нажатием клавиши Enter.'); write('Для окончания ввода данных '); writeln('нажмите клавиши Ctrl-Z и Enter.'); while not eof do begin readln(x); {Ввод очередного числа с клавиатуры} write(freal, x) {Запись очередного числа в файл} end; close(freal) {Файл закрывается} end; {WriteToRealFile} Procedure ReadRealFile; {Процедура открывает для чтения файл, компонентами которого являются действительные числа и выводит их на экран, а также определяет их сумму} var x, sum: real; begin {ReadRealFile} sum := 0; reset(freal); {Файл открывается для чтения} write('Файл', name:9); writeln(' содержит следующие числа:');
freal
13
while
not eof(freal)
do begin read(freal, x); {Чтение очередного числа из файла} writeln(x:10:5); {Вывод очередного числа на экран} sum := sum + x {Вычисление суммы чисел} end; writeln('Сумма чисел в файле: ', sum:10:5) end; {ReadRealFile} begin {Program} write('Определение суммы чисел, '); write('содержащихся в '); writeln('типизированном файле'); writeln; OpenRealFileForWriting; WriteToRealFile; writeln; ReadRealFile; writeln; end. {Program} В следующем варианте программы используется текстовой файл. Program Files_2; var ftext: text; name: string[8]; Procedure OpenTextFileForWriting; {Процедура открытия для записи текстового файла} begin {OpenTextFileForWriting} write('Введите имя файла '); write('(не более 8 символов): '); read(name); assign(ftext, name); {Файловая переменная ftext связывается с именем файла} rewrite(ftext) {Файл открывается для записи}
14
end;
{OpenTextFileForWriting}
Procedure WriteToTextFile; {Процедура ввода данных в текстовой файл} var x: real; begin {WriteToTextFile} write('Последовательно вводите '); writeln('действительные числа.'); write('Ввод каждого числа завершайте '); writeln('нажатием клавиши Enter.'); write('Для окончания ввода данных '); writeln('нажмите клавиши Ctrl-Z и Enter.'); while not eof do begin readln(x); {Ввод очередного числа с клавиатуры} writeln(ftext, x) {Запись очередного числа в файл} end; close(ftext) {Файл закрывается} end; {WriteToTextFile} Procedure ReadTextFile; {Процедура открывает для чтения текстовой файл и выводит на экран содержащиеся в нем числа, а также определяет их сумму} var x, sum: real; begin {ReadTextFile} sum := 0; reset(ftext); {Файл открывается для чтения} write('Файл', name:9); writeln(' содержит следующие числа:'); while not eof(ftext) do begin readln(ftext, x); {Чтение очередного числа из файла} writeln(x:10:5); {Вывод очередного числа
15
экран} на sum := sum + x {Вычисление суммы чисел} end; writeln('Сумма чисел в файле: ', sum:10:5) end; {ReadTextFile} begin {Program} write('Определение суммы чисел, '); write('содержащихся в '); writeln('текстовом файле'); writeln; OpenTextFileForWriting; WriteToTextFile; writeln; ReadTextFile; writeln end. {Program}
16
ТИП ЗАПИСЬ В ЯЗЫКЕ TURBO PASCAL Запись − это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, поля записи могут иметь различные типы. Для того, чтобы можно было сослаться на то или иное поле записи, каждое поле имеет имя. Описание типа запись: type <имя типа> = record <имя поля>: <тип поля>; <имя поля>: <тип поля>; ... <имя поля>: <тип поля> end; Примеры: type personname = record {Запись ИМЯ ЧЕЛОВЕКА} familyname: string[15]; {Поле ФАМИЛИЯ} name: string[10] {Поле ИМЯ} end; address = record {Запись АДРЕС} street: string[20]; {Поле УЛИЦА} number: byte {Поле НОМЕР ДОМА} end; person = record {Запись ЧЕЛОВЕК} pname: personname; {Поле ИМЯ. Само являемся записью. Состоит из ФАМИЛИИ и ИМЕНИ} paddr: address; {Поле АДРЕС. Также является записью} phone: longint; {Поле ТЕЛЕФОН} year: word {Поле ГОД РОЖДЕНИЯ} end; var p, q: person; Альтернативно, переменную типа запись можно объявлять в программе без предварительного описания самого типа:
17
var <имя переменной>: record <имя поля>: <тип поля>; <имя поля>: <тип поля>; ... <имя поля>: <тип поля> end; Так же, как и в случае массивов, в языке Turbo Pascal допустимо с помощью одного оператора присвоить всем компонентам одной записи значения, которые имеют компоненты другой записи. Например, для записей p и q, описанных выше, допустим оператор p := q; С другой стороны, к каждому из компонентов записи можно обращаться отдельно. используя составное имя, которое состоит из имени переменной и имени поля, разделенных точкой: p.year := 1968; p.paddr.number := 181; Таким образом, можно обращаться к полям любой степени вложенности (как в приведенном выше примере, когда поле paddr переменной P, в свою очередь, представляет собой запись, и мы обращаемся к полю number этой записи). Альтернативно, для обращения к полям записи можно использовать оператор with. Оператор присоединения with: with <имя переменной> do <имя поля> := <значение>; Например, with p do with paddr do number := 181; или with p.paddr do number := 181; (эти операторы эквивалентны). Рассмотрим следующую задачу: подготовим файл данных, в котором содержатся сведения о сотрудниках некоего учреждения − фамилия, имя, адрес (название улицы и номер дома), телефон, год рождения каждого сотрудника.
18
Наиболее удобно использовать типизированный файл, компоненты которого являются записями: var f: file of person; Процедура CreateFile создает файл, содержащий необходимые сведения. Процедура WriteRecord добавляет в файл очередную запись. Процедура ReadData позволяет вывести на экран данные, содержащиеся в файле. Далее, предположим, нам нужно узнать адрес сотрудника по его имени и фамилии. Процедура SearchData осуществляет поиск необходимой информации. Program Records; type personname = record familyname: string[15]; name: string[10] end; address = record street: string[20]; number: byte end; person = record pname: personname; paddr: address; phone: longint; year: word end; var p, q: person; f: file of person; Procedure WriteRecord; {Процедура внесения в файл очередной записи} var fn: string[15]; n: string[10]; st: string[20]; nm: byte; ph: longint; y: word; begin {WriteRecord} writeln('Введите данные:'); write('Фамилия: '); readln(fn);
19
write('Имя: '); readln(n); write('Название улицы: '); readln(st); write('Номер дома: '); readln(nm); write('Телефон: '); readln(ph); write('Год рождения: '); readln(y); with p do begin with pname do begin familyname := fn; name := n end; with paddr do begin street := st; number := nm end; phone := ph; year := y end; write(f, p) end; {WriteRecord} Procedure CreateFile; {Процедура создания файла и ввода в него необходимой информации} var n: string[8]; a: 0..1; begin {CreateFile} write('Введите имя файла '); write('(не более 8 символов): '); readln(n); assign(f, n); rewrite(f); repeat WriteRecord; write('Вы будете вводить следующую '); write('запись? 1 - да, 0 - нет '); readln(a);
20
writeln until a = 0; writeln; close(f) end; {CreateFile} Procedure ReadData; {Процедура чтения данных из файла и вывода информации на экран} begin {ReadData} reset(f); write('Файл данных содержит '); writeln('следующую информацию:'); while not eof(f) do begin read(f, p); write('Фамилия: '); writeln(p.pname.familyname); write('Имя: '); writeln(p.pname.name); write('Улица: '); writeln(p.paddr.street); write('Номер дома: '); writeln(p.paddr.number); write'Телефон: '); writeln(p.phone); write('Год рождения: '); writeln(p.year); writeln end; close(f) end; {ReadData} Procedure SearchData; {Процедура поиска информации} var fn: string[15]; n: string[10]; flag: boolean; begin {SearchData} reset(f); write('Поиск адреса сотрудника '); writeln('по его имени и фамилии'); write('Введите фамилию: '); readln(fn);
21
write('Введите имя: '); readln(n); flag := true; while not eof(f) and flag do begin read(f, p); if (fn = p.pname.familyname) and (n = p.pname.name) then begin write('Адрес: '); write(p.paddr.street); write(' '); writeln(p.paddr.number); flag := false end end;
`
if flag then writeln('Запись о таком сотруднике отсутствует'); writeln; writeln end; {SearchData} begin {Program} CreateFile; ReadData; SearchData end. {Program} ЛИТЕРАТУРА 1. В. Э. Фигурнов, IBM PC для пользователя. Краткий курс, М., 1999. 2. В. В. Фаронов, Turbo Pascal 7.0. Начальный курс, М., Изд-во "Нолидж", 1998. 3. Л. А. Бугаев, Г. М. Чечин, К. Н. Жучков, Методические указания к проведению практических занятий по курсу "Информатика". Вып. 1.1. Необходимые определения и команды для работы на компьютере. Элементы языка Pascal (часть I), Ростов-на-Дону, УПЛ РГУ, 1998. 4. Л. А. Бугаев, Г. М. Чечин, К. Н. Жучков, Методические указания к проведению практических занятий по курсу "Информатика". Вып. 1.4.Задачи для самостоятельного решения на компьютере, Ростов-на-Дону, УПЛ РГУ, 1998.
22
5. Шестакова Т. П. Методические указания по курсу "Программирование и вычислительная физика". Часть I. Основные конструкции языка Turbo Pascal. Простейшие типы данных, Ростов-наДону, УПЛ РГУ, 2003. 6. Шестакова Т. П. Методические указания по курсу "Программирование и вычислительная физика". Часть II. Процедуры и функции в языке Turbo Pascal. Перечисляемые типы данных, тип-диапазон и оператор case. Массивы, Ростов-на-Дону, УПЛ РГУ, 2003.