Паскаль-файлы-обьединния-сортировка слиянием

Тема в разделе "Pascal and Delphi", создана пользователем eva7, 8 июн 2010.

  1. eva7

    eva7 Гость

    Приветики ))
    мне срочно нужно написать проги..
    но никак не могу разобраться - просто много на раз, и уже не соображаю..
    нужно написать модуль, в котором три функции (или процедуры)

    - создание файла, в котором каждая следуящая цыфра больше предыдущей (количество чисел случайным выбором)
    - прочитать из файла
    - обьединить два "посортованых" файла в третий методом слияния...

    две функции написала.. я решила сначала написать прогу, а потом переработать все в модуль..
    но что-то с третей плутаюсь...
    помогите пожалуйста..очень надо - ведь еще много сложных задач, а времени мало =\
    как-то быстро семестр прошел..


    Код (Delphi):
    program losowanie;
    uses crt;

    var
    plik :text;
    n,i,l: integer;
    adres1,adres2 : string;
    a:array[1..100] of Word;

    Procedure zapisz(adres:string);
    begin
    Assign (plik,adres);
    Rewrite (plik);
    randomize;

    Writeln (plik,'LICZBY ZAPISANE DO PLIKU ');
    Writeln (plik);
    n:= random (100);
    Write (plik, ' ilosc liczb: ');
    write(plik, n);
    writeln(plik);
    l:=0;

    for i:=1 to n do
    begin
    a[i]:= random (60);
    a[i]:= l + a[i];
    l:=a[i];
    write (plik, a[i]:5);
    end;

    close (plik);
    end;

    procedure wypisz(adres:string);
    var
    a:char;
    begin
    assign (plik, adres);
    reset (plik);

    repeat
    read (plik,a);
    write (a);
    until eof(plik);
    close (plik);

    readln;
    end;

    procedure scalanie;

    begin




    end;



    BEGIN
    clrscr;
    adres1 :='C:\FPC\2.4.0\bin\i386-win32\losowanie1.txt';
    adres2 := 'C:\FPC\2.4.0\bin\i386-win32\losowanie2.txt';

    writeln ('PLIK 1 ! ');
    zapisz(adres1);
    wypisz(adres1);
    writeln;

    Writeln (' PLIK 2 ! ');
    zapisz (adres2);
    wypisz (adres2);
    writeln;

    END.
     
  2. eva7

    eva7 Гость

    Может хотя бы подскажите как лучше решать..
    использовать массивы или указатели ?
    или алгоритм какой-то...
    пожалуйста. :blush:
     
  3. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Вот это выдрано от сюда :
     
  4. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Вот, по идее должно работать(не проверял и код писал прямо тут):
    <!--shcode--><pre><code class='Delphi'>var f1,f2,f3:file of real; {f1,f2- файлы(Масивы А и В); f3-файл в который пишем(Масив С)}
    f_1,f_2,f_3:real;
    i,i1,i2,n1,n2:integer;

    . . .

    n1:=0;
    n2:=0;

    reset(f1); {считаем кол-во елементов в первом файле}
    while not eof(f1) do
    begin
    read(f1,f_1);
    n1:=n1+1;
    end;
    close(f1);

    reset(f2); {считаем кол-во елементов во втором файле}
    while not eof(f2) do
    begin
    read(f2,f_2);
    n2:=n2+1;
    end;
    close(f2);

    i1 := 1;
    i2 := 1;
    reset(f1);
    reset(f2);
    rewrite(f3);

    for i := 1 to n1+n2 do
    begin

    seek(f1,i1-1); {получаем елемент А[i1]}
    read(f1,f_1);

    seek(f2,i2-1); {получаем елемент В[i2]}
    read(f2,f_2);

    if i1>n1
    then
    begin
    write(f3, f_2);
    i2 := i2+1;
    end
    else
    if i2>n2
    then
    begin
    write(f3, f_1);
    i1 := i1+1;
    end
    else
    if f_1<=f_2
    then
    begin
    write(f3, f_1);
    i1 := i1+1;
    end
    else
    begin
    write(f3, f_2);
    i2 := i2+1;
    end;
    end;
    close(f1);
    close(f2);
    close(f3);

    . . .[/CODE]
     
  5. eva7

    eva7 Гость

    Спасибо ))
    Постараюсь єто грамотно подключить в функцию проги
     
  6. eva7

    eva7 Гость

    у меня что-то не получаеться =(
    подскажите плиз где ошибка...

    Код (Text):
    program losowanie;
    uses crt;

    var
    plik :text;
    n,i,l: integer;
    adres1,adres2,adres3 : string;
    a:array[1..100] of Word;

    Procedure zapisz(adres:string);
    begin
    Assign (plik,adres);
    Rewrite (plik);
    randomize;

    Writeln (plik,'LICZBY ZAPISANE DO PLIKU ');
    Writeln (plik);
    n:= random (100);
    Write (plik, ' ilosc liczb: ');
    write(plik, n);
    writeln(plik);
    l:=0;

    for i:=1 to n do
    begin
    a[i]:= random (60);
    a[i]:= l + a[i];
    l:=a[i];
    write (plik, a[i]:5);
    end;

    close (plik);
    end;

    procedure wypisz(adres:string);
    var
    a:char;
    begin
    assign (plik, adres);
    reset (plik);

    repeat
    read (plik,a);
    write (a);
    until eof(plik);
    close (plik);

    readln;
    end;

    procedure scalanie (adres:string; var plik : text);

    var
    plik1,plik2, plik3 : file of Word;
    p1,p2,p3 : Word;
    i, i1, i2, n1, n2 : integer;

    Begin
    assign (plik1,adres1);
    reset (plik1);
    assign (plik2,adres2);
    reset (plik2);
    assign (plik3, adres3);
    rewrite (plik3);

    n1:=0;
    n2:=0;

    while not EOF (plik1) do
    begin
    read (plik1,p1);
    n1:=n1+1;
    end;

    while not EOF (plik2) do
    begin
    read (plik2,p2);
    n2:=n2+1;
    end;

    i1:=1;
    i2:=1;

    for i:=1 to n1+n2 do
    begin
    seek (plik1,i1-1);
    read (plik1,p1);

    seek (plik2,i2-1);
    read (plik2,p2);

    if i1>n1
    then
    begin
    write (plik3,p2);
    i2:= i2+1;
    end
    else
    if i2> n2
    then
    begin
    write (plik3,p1);
    i1:=i1+1;
    end
    else
    begin
    write (plik3,p2);
    i2:=i2+1;
    end;
    end;

    close (plik1);
    close (plik2);
    close(plik3);

    end;



    BEGIN
    clrscr;
    adres1 :='C:\FPC\2.4.0\bin\i386-win32\losowanie1.txt';
    adres2 := 'C:\FPC\2.4.0\bin\i386-win32\losowanie2.txt';
    adres3 := 'C:\FPC\2.4.0\bin\i386-win32\losowanie3.txt';

    writeln ('PLIK 1 ! ');
    zapisz(adres1);
    wypisz(adres1);
    writeln;

    Writeln (' PLIK 2 ! ');
    zapisz (adres2);
    wypisz (adres2);
    writeln;

    writeln (' SCALANIE ');
    scalanie (adres3,plik);

    Writeln (' PLIK 3 ! ');
    wypisz (adres3);
    writeln;

    END.
     
  7. eva7

    eva7 Гость

    Уже увидила - я там функцию немного недописала - там где сортировка..но всеравно не работает =((

    а еще у меня странный вопрос
    почему здесь именно так ? =\

    seek(f1,i1-1); {получаем елемент А[i1]}
     
  8. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    перемещаем "позицию курсора" не элемент i1 -1 и readln эго, таким образом считываем элеиент i1
     
  9. eva7

    eva7 Гость

    я уже это поняла.. Спасибки ))
    просто решила попробовать написать с алгоритмом сортировки на матрицах - что то не то =(
    я скину прогу ,еще постараюся подправить - может подскажите ...где я опять вчудила.. мне просто 5 прог до пятницы нужно написать..а еще экзамен трудный параллельно учу + залики.. уже не соображаю =(
     
  10. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
     
Загрузка...
Похожие Темы - Паскаль файлы обьединния
  1. vovanabali
    Ответов:
    0
    Просмотров:
    533
  2. sonia2000
    Ответов:
    0
    Просмотров:
    960
  3. FaRReLL
    Ответов:
    0
    Просмотров:
    858
  4. dron128
    Ответов:
    1
    Просмотров:
    1.216
  5. Deadsven
    Ответов:
    0
    Просмотров:
    1.083

Поделиться этой страницей