Главная  Терминология Хоора 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [ 22 ] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

70 1. Фуноаментальные структуры оанных

----

с1 (содержащую текущую строку) как последовательность

var cl: file of char

Однако вспомним совет никогда не использовать структур с бесконечным кардинальным числом, если имеется эквк лентная фундаментальная структура (такая, как мас^-Действительно, в этом случае рекомендуется испольэ массив. Это возможно, если мы ограничим длину строк пример, 80 символами. Итак, мы определим

var cl: array[l.. 80] of char

Следующие четыре подпрограммы используют с £ массивом индексную переменную i. Фактически же эта ntpe. менная используется локально и может в каждой процедуу хншсываться как локальная. Кроме того, теперь hvj-ввести глобальную переменную L для o6o3Ha4gjijH длины кущей строки.

Getline: i := 0; ho /яо + 1* wjiiie -eo*i().do

begin i := f+1; read {x с1[ф end ; I, := i; readln(x)

Putline: i :~ 0;

while i < Lda

begin I := i+l;write (y, cl[i]) end ;

writelniy) jgj

Headline: i := 0;

while -->eoln(input) do

begin J := /+1; readiclli]) end; L := i; readln

Writelinei i := 0; mite (Ino); while I < £ do

begin J := 1+1; mite(cl[i]) end ; mitebt

Условие noend в программе tnser/ теперь легко можно выразить как

На этом разработка программы редактирования файлов завершается.



Упражнения

УПРАЖНЕНИЯ

Пусть кардинальные числа стандартных типов integer, real и char обо-зцачены через ci, Cr и Сс. Каковы кардинальные числа следующих ти-w пов данных, определенных в этой главе в качестве примеров: пол, Ш Boolean, день, буква, цифра, офицер, row, alfa, date, complex, person, :f\ljcoordinate, charset, tapestatus?

.;Ч(ак бы вы представили переменные типов, перечисленных в упр. 1.1 в памяти вычислительной машины, которой вы пользуетесь? *(Ь) на Фортране? (с) на предпочитаемом вами изыке программирования?

* ; Какова последовательность команд (на вашей ЭВМ) для:

(а) операций размещения в памяти компонент упакованных записей if-f* и массивов и обращения к ним? ..Ь) операций над множествами, включая проверку принадлежности?

1.4. Мо>.->.,лч пп1прм р полчеиия пр--а ....., . -Т^ДЛфоваГ'.. ь.: иость использования записей i. ,43г1антами? д во времи трансляции?

1.5. По каким причинам некоторые совокупности данных определяют как последовательные файлы, а не как массивы?

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

Опишите возможную реализацию, включая выбранное представление данных и процедуры для эле.ментарных файловых операций get, put, reset и rewrite, которые определены с помощью аксиом в , разд. 1.11.

1.7. Выполните упр. 1.6 для сегментированных файлов.

1Л. Имеется железнодорожное расписание, содержащее список ежедневных рейсов поездов иа нескольких линиях железной дороги. Найдите такое представление этих данных с помощью массивов, записей или (jjafejiiP, Jti!lP было бы удобно для поиска времени прибытия и отправления поезАЙ в нужном направлении дли определенной станции.

1.9. Дан текст Т в виде 1}ЛЙда и небольшой список слов в виде двух массивов А W В. Предположим, УЪ хтива - это небольшие массивы символов, максимальная длина которых фикеир°ан. .

Напишите программу, которая преобразует ~;.aCi Ч в текст S, заменяя каждый раз слово Л,- соответствующим (;ловом hi.

Ью. Какие изменении (переопределение констант и т. п.) необходимы, чтобы переделать программы 1.3 и 1.4 для имеющейся у вас вычислительной машины?

II. Напич'гй пр грамму, подобную программе 1.4, с заголовком pro-cedure lii /fc fo.:i аг f: text\ к: real; n, m: integer)

Tprfiye-c . o6pt.3-:- -значение x в последовательность, состоящую крр.й-гс? ре из п символов (их надо добавить в файл f), пред-...м,;,яюи.. -. ?. десятичном виде с фиксированной запятой с т циф-р- ., г.-.. пятой. Если необходимо, числу может предшествовать ,; . .-pfTCTi .L:количество пробелов и/яли знак.

12. Пс, tp:: текстовый редактор из разд. 1.11.4 в виде завершенной програмлш.



Программа А:

i:= 1;У:= N; repeat А: := (j+/)div2;

if вМ < л; then / :== А; else/ := until ( И=л) V iij)

Программа В: Mi --------- Т. i;j i-ht-.i

: repeat к : = (i+jf) div 2;

if д; < a[kltt№aj := Л-1; itф] < X then i : k+l until i > J

Програ1Лма С:

i:=l;y:=JV; repeatA := (j+jf)div2;

if jc < И then/ := к else i := Ar+l until J /

Указание. Все программы должны заканчиваться при аЩ = х, если такая компонента существует, или при а [к] ф к, если нет компоненты со значением к.

1.14.- Некоторая компания- проводит опрос, чтобы выяснить спрос на свою продукцию. Ее продукция - это пластинки и магнитофонные ленты с песнями; самые популярные песни будут п^Даны по радио. Опрашиваемое население делится на четыре кр/еТории согласно полу и возрасту (скажем, моложе 20 и CTp,riU r20). Каждый опрашиваемый должен назвать пять лшйшых песен. Песням ставятся в соответствие числа от 1 до.Г' .апример, пусть N = 30). Результаты опроса пред-<л-Е.-ш1сны в файле poll такого типа

type hit ~ 1 ..N;

sex = (male, female); response =

lecorA fюте, firstname: alfa;

s: sex;

age: integer;

choice: array [1.. 5] of hit

end ;

var poll: SUi of response

Итак, каждый элемент файла представляет опрашиваемого и содержит его имя, фамилию, пол, возраст и пять любимых песен в порядке

1.13. Сравните три следующие версии бинарного поиска с (1.17). Какие иа этих трех программ правильны? Какие более эффективны? Мы преп полагаем, что имеются следующие переменные и константа JV > 0:

var ijji-. integer;

а: array[l ,.Щ(ЛТ; х:Т




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [ 22 ] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133