Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

smirnvlad

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Необходимо переписать числовые данные из текстового файла в:
1.одномерный массив,
2.типизированный файл.
 
Необходимо обработать все эти данные по одному и тому же алгоритму в соответствии варианта задания и выполнить в виде двух процедур, не связанных между собой (например, при обработке типизированного файла или динамического списка не ссылаться на размер массива и т.д.).
 
                                                            Сама задачка:
 Переместить отрицательные числа в начало, а положительные в конец данных, не применяя сортировку. Если нулей не было, то добавить ноль между двумя граничащими, отрицательным и положительным, числами.  

 

Код:
 
procedure to_array(filename: string);
const
    maxn = 1000;
var
    F: Text;
    i, c, cn, cp: integer;
    a,ap,an: array[0..maxn] of integer;
 
begin
    Assign(F, filename);
    Reset(F);
    c := 0;
    while not EOF(F) do
    begin
        inc(c);
        Read(F, a[c])
    end;
    dec(c);
    Close(F);
 
    cp := 0;
    cn := 0;
    for i := 1 to c do
    begin
        if a[i]<0 then
        begin
            inc(cn);
            an[cn]:=a[i];
        end;
        if a[i]>0 then
        begin
            inc(cp);
            ap[cp]:=a[i];
        end;
    end;
 
    { add zero betweeen }
    if c-cn-cp=0 then inc(c);
 
    fillchar(a[1], sizeof(a[1])*c, 0);
    for i := 1 to cn do a[i] := an[i];
    for i := 1 to cp do a[c-cp+i] := ap[i];
 
    for i := 1 to c do Write(a[i], ' ');
    Writeln;
end;
 
procedure to_file(src, dest: string);
var
    F: Text;
    Fi: File of integer;
    i, t, c,cn,cz,cp: integer;
begin
    Assign(Fi, dest);
    Rewrite(Fi);
 
    Assign(F, src);
    Reset(F);
    c := 0;
    cn := 0;
    cp := 0;
    cz := 0;
    while not EOF(F) do
    begin
        inc(c);
        Read(F, t);
        Write(Fi, t);
    end;
    dec(c);
 
    Close(F);
 
    for i := 1 to c do
    begin
        Seek(Fi, i-1);
        Read(Fi, t);
        if t = 0 then inc(cz);
        if t<0 then
        begin
            inc(cn);
            Seek(Fi, c+cn-1);
            Write(Fi, t);
        end;
    end;
 
    if cz = 0 then inc(cz);
 
    for i := 1 to c do
    begin
        Seek(Fi, i-1);
        Read(Fi, t);
        if t>0 then
        begin
            inc(cp);
            Seek(Fi, c+cn+cp-1);
            Write(Fi, t);
        end;
    end;
 
    for i := 1 to cn do
    begin
        Seek(Fi, c+i-1);
        Read(Fi, t);
        Seek(Fi, i-1);
        Write(Fi, t);
    end;
 
    t := 0;
    for i := 1 to cz do
    begin
        Write(Fi, t);
    end;
 
    for i := 1 to cp do
    begin
        Seek(Fi, c+cn+i-1);
        Read(Fi, t);
        Seek(Fi, cn+cz+i-1);
        Write(Fi, t);
    end;
 
    c := cn+cz+cp;
 
    Seek(Fi, c);
    Truncate(Fi);
 
    for i := 1 to c do
    begin
        Seek(Fi, i-1);
        Read(Fi, t);
        Write(t, ' ');
    end;
    Writeln;
 
    Close(Fi);
end;
 
const
    text_filename = 'text.tmp';
    type_filename = 'text.dat';
var
    i, c: integer;
    F: Text;
begin
    Writeln;
    Writeln('Text file: ');
{ text file }
    Randomize;
    Assign(F, text_filename);
    Rewrite(F);
    for i := 1 to 20 do
    begin
        c := 5 - Random(10);
        Write(F, c, ' ');
        Write(c, ' ');
    end;
    Writeln;
    Close(F);
 
{ to massiv }
    Writeln('V massiv: ');
    to_array(text_filename);
 
{ to file }
 
    Writeln('V file: ');
    to_file(text_filename, type_filename);
end.
 


Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 14:05 26-05-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru