|
|
|||||||||||
|
||||||||||||
Задания.
I. Ответить на следующие вопросы: а) Верно ли, что элементы файла должны быть одного типа и что файл отличается от массива только тем, что размер (количество элементов) файла произволен, а размер массива фиксирован б) Можно ли, считав из файла пятый элемент, затем сразу же считать второй элемент? А какой можно? в) Верно ли, что, считав из файла пятый элемент, затем уже никогда нельзя считать второй? г) В какое место файла можно добавлять новые элементы: в начало, в середину. в конец, куда угодно, никуда? д)Если не перезаписывать файл заново, то значения каких его элементов можно менять: только первого, только последнего, каких угодно, никаких? е) Если не перезаписывать файл заново, то какие его элементы можно удалять из файла: только первого, только последнего, каких угодно, никаких? ж) Верно ли, что нельзя одновременно считывать из файла и записывать в него? з) Верно ли, что, начав считывать из файла, затем уже никогда нельзя записать в него? А наоборот? и) Можно ли сравнивать файлы?
f:file of integer; x,y:integer; Пусть файл f содержит 2 элемента -3 и 7. Определить, какое значение будет иметь переменная у после выполнения следующих операторов: а) reset (f); read(f,y); if not eof(f) then read(f,y); if not eof(f) then read(f,y); б) reset (f); y:=0; while not eof(f) do begin read(f,x); y:=y+x; end; в) reset (f); y:=1; repeat read(f,x); y:=y*x; until eof(f);
3. а) Type Serii=file of real; Описать функцию Otriz(s), подсчитывающую сумму отрицательных элементов в серии s. б) Type letters=file of 'a'..'z'; Описать процедуру append(f,g,h) от трех файлов типа letters, которая записывает в файл f сначала все элементы файла g, а затем - все элементы файла h. в) Type text=file of char; Описать логическую функцию eg(t1,t2), проверяющую тексты t1 и t2 на равенство. г) Type Stroka=pasked array [1..100] of char; Text=file of char; Описать процедуру zifr(s,t), которая записывает в текст t все цифры из строки s.
i:integer; Определить содержимое файла f после выполнения следующих операторов: а) rewrite(f); if eof(f) then write(f,1) else write(f,2); if eof(f) then write(f,3) else write(f,4); б) rewrite(f); for i:=3 downto 1 do write(f,sqr(i));
а) addl(t,c), добавляющую литеру с в начало текста t. б) addlast(t,c), добавляющую литеру с в конец текста t. в) double(t), удваивающую в тексте t каждую цифру. г) replace(t,c), заменяющую последнюю литеру непустого текста t на литеру с. д) next(t),заменяющую в тексте t каждую цифру на следующую по величине цифру (9 заменить на 0). е) delete(t), удаляющую из текста t все литеры "+" и "-". ж) del(t), удаляющую из текста t предпоследний элемент, если такой есть. з) first(t), оставляющие в тексте t только первые вхождения каждой литеры.
Решения (ответы)
1. б) Нет, шестой. в) Неверно, повторное чтение файла. г) В конец. д) Никаких. ж) Да, исключение нитипизированные файлы. и) Да
2.а) 7; б) 10; в) 21.
3. а) function Otriz(var s:Serii):real; var sum, x: real; begin reset(s);sum:=0; while not eof(s) do begin read(s,x); if x<0 then sum:=sum+x; end; Otriz:=sum; end; в) function eg(var t1,t2:text):boolean; var c1,c2: char; ok: boolean; begin reset(t1); reset(t2); ok:=true; while (not eof(t1)) and (not eof(t2)) and (ok) do begin read(t1,c1); read(t2,c2); ok:=c1:=c2; end; eg:=ok and eof(t1) and eof(t2); end; г) procedure zifr(var s:Stroka; var t:text); var i:integer; begin rewrite(t); for i:=1 to 100 do if s[i] in ['0'..'9'] then write(t, s[i]); end;
4. а) 1, 3 б) 9, 4, 1.
5. a) procedure addl(var t:text; c:char); var d:char; s:text; {Вспомогательный файл} begin {Копирование s в t} reset(t); rewrite(s); while not eof(t) do begin read(t,d); write(s,d); end; {Запись c и s в t} reset(t); rewrite(s); write(t,c); while not eof(t) do begin read(s,d); write(t,d); end; end; |