Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

lamed
Статус: Академик
Рейтинг: 5326
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Академик
Рейтинг: 5324
∙ повысить рейтинг »
Роман Селиверстов
Статус: Академик
Рейтинг: 2762
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1185
Дата выхода:03.06.2011, 22:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:175 / 174
Вопросов / ответов:1 / 1

Вопрос № 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 входящих файла и в основной программе возвращает результат.


С уважением!

Отправлен: 29.05.2011, 21:35
Вопрос задал: angel.nero (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает lamed (Академик) :
Здравствуйте, angel.nero!
Код :
// 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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное