Страница 1 из 1

Помогите с РГР

Добавлено: 24 сен 2007, 11:39
Len4ik
Уважаемые програмисты помогите плиз девушке с ргр, я очень хочу научиться программировать и я не блондинка, но эта задача поставила меня в тупик :(

Разработать программу слияния 2х текстовых файлов в один файл по принципу: нечетная строка от первого файла, четная строка от второго файла. Предусмотреть проверку существования исход. файлов и результирующего файла с выдачей диагностич. сообщений, а также разбивку результирующего файла на страницы с указанием номера страницы.

Длина стр. 50 строк

P.S. эта задача мне нужна на паскале :( на дельфи я плохо прогр. на си ниче не знаю :(

Re: Помогите с РГР

Добавлено: 24 сен 2007, 16:35
somewhere

Код: Выделить всё

uses crt;

var

fi1, fi2, fo 		: Text;
fi1name, fi2name, foname: String;
istr			: String;
nstr, npage, lastpage   : Integer;

begin
Clrscr;
Write('Input first filename to combine    : ');
Readln(fi1name);
Write('Input second filename to combine   : ');
Readln(fi2name);
Write('Input destination combined filename: ');
Readln(foname);
Assign(fi1, fi1name);
{$I-}Reset(fi1);{$I+}
If IOResult<>0 then
	begin
        Writeln('File '+fi1name+' could''nt be opened or it does''nt exist');
        halt(1);
        end;
Assign(fi2, fi2name);
{$I-}Reset(fi2);{$I+}
If IOResult<>0 then
	begin
        Writeln('File '+fi2name+' could''nt be opened or it does''nt exist');
        halt(2);
        end;
Assign(fo, foname);
Rewrite(fo);
nstr := 1; lastpage := 0; npage:=1;
Writeln('Combining in progress...');
repeat
If lastpage <> npage then
	begin
        lastpage := npage;
        str(npage, istr);
        Writeln(fo);
        Writeln(fo, ' -= '+istr+' =- ');
        Writeln(fo);
        end;
If nstr mod 2 = 0 then
        if eof(fi1) then Readln(fi2, istr)
                    else Readln(fi1, istr)
        else
        if eof(fi2) then Readln(fi1, istr)
                    else Readln(fi2, istr);
Writeln(fo, istr);
inc(nstr);
If nstr mod 50 = 0 then inc(npage);
until eof(fi1) and eof(fi2);
close(fi1);
close(fi2);
close(fo);
Writeln('Finished');
end.

Re: Помогите с РГР

Добавлено: 24 сен 2007, 18:20
Len4ik
оооооооооо у меня даже слов нету...........спс большое при большое....так приятно..буду изучать программу=)

Re: Помогите с РГР

Добавлено: 10 дек 2007, 04:17
Len4ik
Уважаемые программисты, помогите мне плиз......дело в том, что мне надо переделать эту программу при помощи процедур.......мне стыдно, что я немогу переделать готовую программу, поэтому прошу помогите вы....я могу показать, как я ее переделала, но препод говорит, что она не правильная=(

Re: Помогите с РГР

Добавлено: 10 дек 2007, 11:25
Хыиуду
Можно сделать втупую: разбить программу на части и запихнуть каждую часть в свою процедуру, ни на йоту не поменяв логику. Крайний случай - всю программу запихнуть в одну процедуру, но такой наглости преподы обычно не терпят.
Весь раздел описаний переменных - см выше.

Код: Выделить всё

procedure get_data;
begin
 Clrscr;
 Write('Input first filename to combine    : ');
 Readln(fi1name);
 Write('Input second filename to combine   : ');
 Readln(fi2name);
 Write('Input destination combined filename: ');
 Readln(foname);
end;

procedure open_files;
begin
Assign(fi1, fi1name);
{$I-}Reset(fi1);{$I+}
If IOResult<>0 then
	begin
        Writeln('File '+fi1name+' could''nt be opened or it does''nt exist');
        halt(1);
        end;
Assign(fi2, fi2name);
{$I-}Reset(fi2);{$I+}
If IOResult<>0 then
	begin
        Writeln('File '+fi2name+' could''nt be opened or it does''nt exist');
        halt(2);
        end;
Assign(fo, foname);
Rewrite(fo);
end;

procedure combine;
begin
nstr := 1; lastpage := 0; npage:=1;
Writeln('Combining in progress...');
repeat
If lastpage <> npage then
	begin
        lastpage := npage;
        str(npage, istr);
        Writeln(fo);
        Writeln(fo, ' -= '+istr+' =- ');
        Writeln(fo);
        end;
If nstr mod 2 = 0 then
        if eof(fi1) then Readln(fi2, istr)
                    else Readln(fi1, istr)
        else
        if eof(fi2) then Readln(fi1, istr)
                    else Readln(fi2, istr);
Writeln(fo, istr);
inc(nstr);
If nstr mod 50 = 0 then inc(npage);
until eof(fi1) and eof(fi2);

end;

procedure finalize;
begin
close(fi1);
close(fi2);
close(fo);
Writeln('Finished');
end;

BEGIN {основная программа}
  get_data;
  open_files;
  combine;
  finalize;
END.
Такая программа обозначает примерно следующее: "Не знаю, зачем вы нас заставляете забивать гвозди микроскопом, но раз вы так хотите, можно и это".