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. | |