Вопрос № 183409: Здравствуйте! Прошу помощи в следующем вопросе: Нужно написать программу в которой описаны следующие подпрограммы: 1 -ая процедура: задан тип Type letter=file of 'a'..'z'; Описать процедуру Mix(F,G,H) которая записывае...
Вопрос № 183409:
Здравствуйте! Прошу помощи в следующем вопросе: Нужно написать программу в которой описаны следующие подпрограммы: 1 -ая процедура: задан тип Type letter=file of 'a'..'z'; Описать процедуру Mix(F,G,H) которая записывает поочередно в файл H буквы из файлов F и G. Остаток более длинного файла дописывает в конец файла H. 2-ая фукция : Описать ф-цию которая сравнивает 2 входящих файла и в основной программе возвращает результат.
// ABC-Net. 1.3. beta
//
Type
latins = 'a'..'z';
letter = file of latins;
procedure FilePrint(const ThisFile: letter; const name: string);
// Печать ассоциированного файла
var
c: latins;
begin
seek(ThisFile,0);
write(name, '>');
while not eof(ThisFile) do
begin
read(ThisFile, c);
write(c);
end;
writeln;
end;
procedure FileFill(var ThisFile: letter; const s: string);
// Заполнение ассоциированного файла
var
i: integer;
begin
rewrite(ThisFile);
for i:= 1 to length(s) do
write(ThisFile, s[i]);
close(ThisFile);
end;
procedure Mix(const F,G: letter; var H: letter);
// Записывает поочередно в файл H буквы из файлов F и G.
// Остаток более длинного файла дописывает в конец файла H.
var
sizef, sizeg, minsize, maxsize: longint;
i: longint;
ch: latins;
begin
sizef:=filesize(f);
sizeg:=filesize(g);
seek(f,0);
seek(g,0);
if sizef>sizeg then
begin
minsize:= sizeg;
maxsize:= sizef;
end
else
begin
minsize:= sizef;
maxsize := sizeg;
end;
for i := 1 to minsize do
begin
read(f, ch);
write(h,ch);
read(g, ch);
write(h,ch);
end;
if sizef>sizeg then
for i := minsize+1 to maxsize do
begin
read(f, ch);
write(h,ch);
end
else if sizeg > sizef then
for i := minsize+1 to maxsize do
begin
read(g, ch);
write(h,ch);
end;
end;
function FileComp(const f,g: letter):boolean;
// Функция сравнивает два входящих файла и в основной программе возвращает результат.
var
sizef, sizeg, i: longint;
chf, chg: latins;
eq: boolean;
begin
sizef:=filesize(f);
sizeg:=filesize(g);
if sizef<>sizeg then
FileComp := false
else
begin
i:= 1;
eq := true;
while (i<=sizef) and (eq) do
begin
read(f, chf);
read(g, chg);
if chf<>chg then
eq := false;
inc(i);
end;
FileComp := eq;
end;
end;
var
f,g,h: letter;
namef, nameg, nameh: string;
s: string;
begin
// Определяем полные имена файлов
write('f->');
readln(namef);
write('g->');
readln(nameg);
write('h->');
readln(nameh);
// Ассоциируем файловые переменные
assign(f, namef);
assign(g, nameg);
assign(h, nameh);
// Перезаписываем f и g
write('Строка для заполнения ', namef, '>');
readln(s);
FileFill(f,s);
write('Строка для заполнения ', nameg, '>');
readln(s);
FileFill(g,s);
// Открываем f и g для чтения
reset(f);
reset(g);
// Сравниваем f и g
if FileComp(f,g) then
writeln(namef, '=', nameg)
else
writeln(namef, '<>', nameg);
// Заполняем h
rewrite(h);
mix(f,g,h);
// Печатаем результат
FilePrint(f, namef);
FilePrint(g, nameg);
FilePrint(h, nameh);
// Закрываем файлы
close(f);
close(g);
close(h);
end.
Примеры работы
Код :
f->f
g->g
h->h
Строка для заполнения f>abcd
Строка для заполнения g>abcd
f=g
f>abcd
g>abcd
h>aabbccdd
Код :
f->f
g->g
h->h
Строка для заполнения f>abcd
Строка для заполнения g>efgh
f<>g
f>abcd
g>efgh
h>aebfcgdh
Если требуются комментарии, задавайте вопросы в мини-форуме.
Ответ отправил: lamed (Академик)
Ответ отправлен: 31.05.2011, 10:01
Номер ответа: 267481 Россия, Ковров Тел.: +79107793141
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267481
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.