Введение в программирование. Сортировка массива. Средства создания программ. Стандартные модули. Структурированные типы данных, страница 14

Z

 

Ctrl

 
Текстовые файлы представляют собой совокупность символов, разделенных на строки. В конце каждой строки ставится признак каждой строки, а в конце файла – признак конца файла

                                                       +

Пример: Файл F1 был создан заранее и наполнен данными. Читать этот файл, удвоив каждый его элемент через пробел

Program           PR1F

VAR                F1; F2; text;

                               X : char;

BEGIN

ASSING          (F1, F11. text)

RESET             (F1)

ASSING           (F2; “)

REWRITE        (F2)

WHILE not EOF  (F1)  do begin

            READ (F1, x)

            WRITE  (F2, x + “|___|” + x)

             END;

WRITELN

CLOSE (F1);        CLOSE (F2)            END

Прочитать файл Т заранее созданный, и определить сколько раз в нем встречается буква А

Program           PR2F

VAR                F1: text;

                         X : char; k : byte

BEGIN

ASSING          (F1, T. PAS “)

RESET             (F1)

K: = 0

WHILE  not  EOF (F1) do begin

READ              (F1, x)

If (x = “a”) or (x = “A”) then  K : = k + 1

END

WRITELN ( ‘букв А= ’ , к);



ДИНАМИЧЕСКИЕ СТРУКТУРЫ. Массивы записи и мн-ва назыв. базисными структурами и в процессе выполнения программы они остаются структурно неизменными. Часто в программах треб. более сложные стр-ры к-ые допускают наращивание, сокращение или замену связей между компонентами в процессе выполнения программы. Создание динамичных стр-р сводится к генерации основных компонентов назыв-х узлами и установлению связи между ними. Связи опр. переменными назыв. указателями. К динамичным стр-ам относятся списки, очереди стеки, деревья, ориентированные графы. Указатель – это переменная в программе, значениями  к-ой  явл-ся адреса. Указатели представляют собой переменную целого типа, к-ая интерпритируется как адрес байта памяти, содер. некоторый элемент данных. Этими элементами может быть константа, переменная адрес др-ой переменной. Сегмент – это участок памяти длиной 64 кб к-ый начин. с физич. адреса со значением кратным 16. Смещение – это число к-ое определяет номер байта в сегменте к-ому необход. обатиться. СИТУАЦИОННОЕ ПРИМЕНИЕ ДИНАМИЧЕСКИХ СТР-Р. 1)Программа должна работать с большим объемом данных общий объем к-ых превышает 64 кб. Использование указателей позволяет решить эту проблему т.к. программа сможет выделить объем памяти необходимый для нормальной программы поддерживая при этом указатель в виде ссылки на адрес по к-ому хранится. Динамически распределяемая область памяти – это область оперативной памяти компьютера предоставляемая программе из к-ой вычитается память занимаемая телом программы, сегментом даных и стеков. Размер динамич. распред. памяти можно устанавливать с помощью директивы компилятора. 2)Программа во время компиляции исп-ет данные.ю, объем памяти для хранения к-ых заранее не известен. Некоторые элемты данных требуют задания максимально возможного объема памяти. Такое кол-во памяти отводится под данную стр-ру по умолчанию даже если данная стр-ра не будит хранить никаких данных. В этом случая происходит нерациональное исп-ие памяти , а при попытке зарезервировать массив очень больших размеров могут произойти ошибки. 3)В программе исп-ся буфер памяти для временного хранения данных. Если процесс работы программы необходимо временно выделить память для хранения каких-л данных и при этом данные не будут сохраняться за все время программы. То в этом случае не обойтись без указателей и динамически распределительной обл. памяти. Временное выделение памяти бывает полезным при написании текстовых редакторов, к-ые для каждого редактируемого файла необходим буфер. 4)Программа работает с неск-ми типами данных. Одной из причин использования  указателей явл-ся необходимость применения ссылки на структурированные переменные к-ые имеют различную стр-ру. 5)Программа исп-ют динамич. стр-ры данных При решении прикладных задач динамич. распределяемая обл. памяти наиболее часто исп-ся для создания стековых стр-р, односвязных и двыхсвязных списков до одинарных деревьев. Исп-ние массива в этом случае приведет к нерациональному исп-нию памяти. Для этих целей удобно применять указатели т.к. они позволяют создавать динамич. стр-ры, необход. размеров при помощи 4-х байтовых указателей. При хранении связных списков в динам. разделит. памяти. Каждый элемент списка содержит запись указывающую на последующий элемент. ССЫЛОЧНЫЙ ТИП ДАННЫХ. Любой ссылочный тип данных опр-ет мн-во значений, к-ые явл-ся указателям назначения нек-ого др. типа данных. В Pascal указатели могут связываться с конкретным типом данных. Такие указатели назыв типизированными. ТИПИЗИРОВАННЫЕ УКАЗАТЕЛИ. Для их объявления исп-ся символ ‘^’. Этот символ располаг. непосредственно перед указанием типа. Для указателей в Pascal сделаны исключения и они могут ссылаться на ещё необъявленный тип данных. Это даёт возможность организовать хранение данных в виде списка. Каждый элемент саиска может содержать указатели на последующий элемент и на предыдущий. НЕТИПИЗИРОВАННЫЕ УКАЗАТЕЛИ. В Pascal можно объявить указатель, не связывая его с каким-л конкретным типом данных. Для этих целей исп-ся стандартный тип данных Pointer т.к. нетипизир. указатели не связаны с конкр-м типом данных их удобно исп-ть для динамич-ого размещения данных меняется в ходе выполнения программы. ОПЕРАЦИИ С УКАЗАТЕЛЯМИ. В Pascal для указателей допустимы только операции присваивания и сравнения. Указателю можно присваивать содержимое др. указателя такого же типа. Значение стандартной константы №14, что обозначает пустой указатель или адрес объекта определенной ф-ции Addr, адрес, возвращаемой ф-ции Ptr.