Страница 1 из 2
Помогите решить. Работа с файлами
Добавлено: 28 сен 2007, 21:53
Benera
Колядин Максим, ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ

ДАН ФАЙЛ ВЕЩЕСТВЕННЫХ ЧИСЕЛ. пЕРЕПИСАТЬ В НОВЫЙ ВСЕ КОМПОНЕНТЫ, РАСПОЛОЖЕННЫЕ ПОСЛЕ ПЕРВОЙ ОТРИЦАТЕЛЬНОЙ.
Re: [Pascal] Занести информацию в файл
Добавлено: 28 сен 2007, 21:54
Benera
ДАН ФАЙЛ ВЕЩЕСТВЕННЫХ ЧИСЕЛ. ПЕРЕПИСАТЬ В НОВЫЙ ВСЕ КОМПОНЕНТЫ, РАСПОЛОЖЕННЫЕ ПОСЛЕ ПЕРВОЙ ОТРИЦАТЕЛЬНОЙ.
Re: Помогите решить. Работа с файлами
Добавлено: 29 сен 2007, 09:23
Duncon
Ржунемагу студентики зажигают в не том разделе, скоро паровозиком сюда ходить станут
Re: Помогите решить. Работа с файлами
Добавлено: 05 окт 2007, 18:32
Новенький
Вот код программы:
Код: Выделить всё
uses crt; {подключение модулей}
var f,f2:text; {текстовые файлы}
i,j,chislo,chislo2:integer; {счетчики, переменные для чисел}
begin
clrscr; {очистка экрана}
randomize; {включение режима случайных чисел}
assign(f,'file1.txt'); {размещение первого файла}
assign(f2,'file2.txt'); {размещение второго файла}
{открытие файлов для записи}
rewrite(f);
rewrite(f2);
{заполняем первый файл случайными числами}
for i:=1 to 30 do
begin
chislo:=random(50)-10;
writeln(f,chislo);
end;
close(f); {закрываем первый файл}
reset(f); {открываем первый файл для чтения}
while not eof(f) do {пока не достигнут конец файла}
begin
readln(f,chislo); {считываем число из файла в переменную}
if chislo<0 {если число меньше 0}
then begin
writeln(f2,chislo); {то записываем это число во второй файл}
{а так же все остальные числа}
while not eof(f) do
begin
readln(f,chislo2);
writeln(f2,chislo2);
end;
end;
end;
close(f2); {закрываем второй файл}
close(f); {закрываем первый файл}
end.
Re: Помогите решить. Работа с файлами
Добавлено: 06 ноя 2007, 20:56
Denton
Вот еще задачка:
Даны два файла - А и В: целых чисел. Файл А - отсортирован по возрастанию; файл В - отсортирован по убыванию. Произвести слияние двух файлов в файле С таким образом, чтобы файл С был упорядочен по возрастанию. Слияние производить в соответствии с упорядоченностью А и В.(т.е сравнивать первое число первого файла с последним второго, и навстречу друг другу).
Помогите плз

Re: Помогите решить. Работа с файлами
Добавлено: 07 ноя 2007, 16:00
Denton
Вот та же задачка но с массивами:
uses crt;
const n=10; m=15;
var A:array[1..n] of integer; k,c,i,j,z,d:integer;
B:array[1..m] of integer; p:boolean;
X:array[1..n+m] of integer;
begin clrscr;
writeln('Welcome! This program connects two ranked arrays and disposes them on growth');
writeln('Press any key to continue'); readkey; writeln;
randomize;
for i:=1 to n do
A:=-100+random(200);
k:=n;
repeat
p:=true; dec(k);
for i:=1 to k do
if a>a[i+1] then
begin
c:=a;
a:=a[i+1];
a[i+1]:=c;
p:=false;
end
until p; writeln('This is a first array sorted on growth:');
for i:=1 to n do
write(A,' '); readln;
for i:=1 to m do
B:=-50+random(100);
k:=m;
repeat
p:=true; dec(k);
for i:=1 to k do
if B<B[i+1] then
begin
c:=B;
B:=B[i+1];
B[i+1]:=c;
p:=false;
end;
until p; writeln; writeln('This is a second array sorted on decrease:');
For i:=1 to m do
write(B,' '); readkey; writeln;
i:=1; d:=m;
For j:=1 to n+m do
begin
If (i<=n) and (d>=1) then
If A[i]<B[d] then
begin
X[j]:=A[i];
inc(i);
end
else
begin
X[j]:=B[d];
dec(d);
end
else
if d < 1
then begin
X[j]:= A[i];
inc(i);
end
else if i > N
then begin
X[j]:= B[d];
dec(d);
end;
end;
writeln; writeln('Finaly, is an united array sorted on growth manually:');
For j:=1 to n+m do
write(X[j],' ');
readkey;
writeln; writeln; writeln('Press any key to exit'); readkey;
end.
А нужно с файлами. Как теперь её адаптировать?
Re: Помогите решить. Работа с файлами
Добавлено: 08 ноя 2007, 00:35
Serge_Bliznykov
A, B : file of Integer;
тогда размер файла даст Вам количество записей.
файл A просто читать, файл B - перед каждым чтением делать seek на нужную запись (сначала на последнюю, потом на предпоследнюю и т.д. - аналог того, что в программе про массивы достаётся через B[d] ... )
Re: Помогите решить. Работа с файлами
Добавлено: 08 ноя 2007, 00:43
Serge_Bliznykov
A, B : file of Integer;
тогда размер файла даст Вам количество записей.
файл A просто читать, файл B - перед каждым чтением делать seek на нужную запись (сначала на последнюю, потом на предпоследнюю и т.д. - аналог того, что в программе про массивы достаётся через B[d] ... )
Re: Помогите решить. Работа с файлами
Добавлено: 08 ноя 2007, 01:14
Колядин Максим
В начале кода добавляй:
И замени это
...
randomize;
for i:=1 to n do
A:=-100+random(200);
....
На это
Код: Выделить всё
i:=1;
assign(f, 'input1.txt'); reset(f);
while not eof(f) do begin
readln(f,A[i]);
inc(i);
end;
close(f);
[hr]
Это
for i:=1 to m do
B:=-50+random(100);
На это:
Код: Выделить всё
i:=1;
assign(f, 'input2.txt'); reset(f);
while not eof(f) do begin
readln(f,B[i]);
inc(i);
end;
close(f);
И наконец, записываем в файл. Меняй
writeln; writeln('Finaly, is an united array sorted on growth manually:');
For j:=1 to n+m do
write(X[j],' ');
readkey;
writeln; writeln; writeln('Press any key to exit'); readkey;
На
Код: Выделить всё
assign(f2,'output.txt'); rewrite(f2);
for i:= 1 to n+m do writeln(f2, X[i]);
close(f2);
Фсе! Я код не смотрел, просто заменил рандомное заполнение массива на считывание элементов из файлов
input1.txt и
input2.txt. А вместо вывода ответа на экран - запись в
output.txt.
Re: Помогите решить. Работа с файлами
Добавлено: 08 ноя 2007, 07:10
Serge_Bliznykov
1) ошибка - Readln применимо ТОЛЬКО к файлам типа text
надо использовать Read
2) способ вполне рабочий. Использовать массивы. Но есть один нюанс - конструкции типа
while not eof(f) do begin
теряют всякий смысл -- ибо массивы обявлены строго A - 10 чисел, B - 15 чисел.
Если в файле будет больше чисел - вылетит ошибка записи в массив Range out
Кроме того, при достаточно больших файлах (ну скажем по 60 тысяч чисел) этот метод вообще не применим...