- •Министерство образования и науки российской федерации
- •Начальный курс программирования на основе алгоритмического языка Паскаль
- •Введение
- •Часть. Основы программирования на Паскале
- •1.1. Структура простейшей Паскаль-программы
- •1.2. Данные и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных
- •1.2.3. Правила записи констант
- •1.2.4. Описание переменных и именованных констант в Паскале
- •1.2.5. Выражения
- •1.3. Операторы преобразования данных
- •1.3.1. Оператор присваивания
- •1.3.2. Понятие ввода и вывода
- •1.3.3. Оператор вывода
- •1.3.4. Оператор ввода
- •1.4. Разработка простейших программ
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале
- •1. Следование
- •2. Ветвление (развилка)
- •If условие then
- •If условие then
- •3. Цикл
- •1.4.5. Примеры разработки программ
- •1.5. Массивы
- •1.5.1. Понятие массива. Основные правила работы с массивами в Паскале
- •1.5.2. Примеры программ с массивами
- •1.614. Структура паскаль-программы
- •Часть.Подпрограммы
- •2.1. Общие сведения о подпрограммах
- •2.2. Процедуры в Паскале
- •2.2.1.Описание процедур
- •2.2.2. Обращение к процедуре
- •2.3. Функции Паскаля
- •2.3.1. Описание функций
- •2.3.2. Обращение к функции
- •2.4. Глобальные и локальные имена
- •2.5. Использование подпрограммы в качестве параметра другой подпрограммы
- •2.6. Модули
- •2.6.1. Общие сведения
- •2.6.2. Структура модуля
- •2.6.3. Использование модулей
- •2.6.4. Модули как средство программирования
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации
- •3.1.1. Символьный тип
- •3.1.2.Строковые типы
- •3.1.3. Подпрограммы, работающие со строками
- •Функции
- •Процедуры
- •3.2. Тип запись
- •3.3. Файлы
- •3.3.1. Общие понятия
- •3.3.2. Файлы в Турбо Паскале
- •3.3.3. Текстовые файлы
- •Пример 1
- •Пример 2
- •3.3.4. Типизированные файлы
- •3.3.5. Нетипизированные файлы
- •Часть IV. Работа с динамическими массивами
- •О статическом и динамическом распределении памяти
- •Указатели в Паскале
- •Динамические массивы
- •Формальные параметры-массивы без указания границ
- •Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.
- •Режимы компиляции программы, использующей модули
- •Приложение 2. Краткая инструкция по работе в режиме консольного приложения средыDelphi. Создание консольного приложения
- •Сохранение консольного приложения.
- •Отладка программы
- •Контрольные вопросы
- •Заключение
- •Библиографические ссылки
- •Содержание
- •Часть IV. Работа с динамическими массивами 98
3.3.5. Нетипизированные файлы
Описание нетипизированного файла:
VAR ИмяФайла:FILE;
Содержимое нетипизированного файла рассматривается системой программирования как последовательность байтов. Нетипизированный файл может содержать данные в любом представлении (внешнем, внутреннем). Ответственность за правильное использование данных несет программист. Нетипизированные файлы дают возможность организовать высокоскоростной обмен информацией.
Процедуры открытия нетипизированного файла:
RESET(ИмяФайла,РазмерЗаписиВбайтах) – для чтения,
REWRITE(ИмяФайла,РазмерЗаписиВбайтах) – для записи.
Запись – это минимальное количество передаваемых за одно обращение к устройству байтов. Размер записи по правилу умолчания равен 128. За одно обращение к устройству передается блок из N записей. Высокоскоростная передача данных получается, когдаразмер блока равен кластеру. Кластер – количество байтов, считываемых за один поворот диска. Типичный размер кластера – 512 или 1024.
Процедуры чтения и записи для нетипизированного файла:
BLOCKREAD(ИмяФайла,Буфер, N, NN)
BLOCKWRITE(ИмяФайла,Буфер, N, NN),
где буфер- переменная для считывания (записи) информации,NN - число считанных записей (NN<=N, строгое неравенство возможно для последнего блока).
Пример.Процедура копирования файлов произвольного типа.
Procedure Kopir(infile,outfile:string);
Var f1,f2:file; Buf:array[1..Klaster] of Byte; i:word;
{Klaster - глобальная константа, размер кластера}
Begin assign(f1,infile); assign(f2,outfile); reset(f1,1); rewrite(f2,1);
repeat
BlockRead(f1,Buffer, Klaster,i);
BlockWrite(f2,Buffer, Klaster,i)
until eof(f1);
close(f1); close(f2);
End.
Часть IV. Работа с динамическими массивами
О статическом и динамическом распределении памяти
Статическое распределение памятипроисходит на этапе компиляции программы; это распределение не изменяется в процессе выполнения программы. Динамическое распределение памяти - это выделение и освобождение памяти в процессе выполнения программы. Данные, размещаемые в памяти компилятором, называютсястатическими, а распределяемые в ходе выполнения программы -динамическими.
Распределение памяти под глобальные данные(объявленные в разделах программы – см. §2.4) являетсястатическим. При распределениилокальных данныхподпрограмм имеет местоэлемент динамизма, так как оно происходит на этапе выполнения программы при вызове подпрограммы. Заметим, что распределение локальных данных не изменяется в процессе выполнения подпрограммы, а при завершении подпрограммы память освобождается.
Обычно под динамическим распределением памятипонимается выделение и освобождение памяти в процессе выполнения программы с помощью специальныхоператоров динамического распределения памяти. Эти операторы используют тип данныхуказатель,предназначенный для хранения адреса области памяти. При динамическом распределении память берется из специальной области, называемойдинамической памятьюиликучей.
Указатель определяется как абстрактное обобщение адреса (а не как переменную, принимающую значения на множестве адресов), потому что значение адреса зависит от конкретной ЭВМ и условий, в которых происходит работа компилятора. Тип указатель имеется во всех универсальных языках программирования.
Динамическое распределение памяти используется в двух ситуациях:
когда статической памяти и стека подпрограмм не хватает для решения задачи;
когда характер задачи требует динамического распределения.
Пример второй ситуации рассматривается в §4.3.