Помощь - Поиск - Пользователи - Календарь
Полная версия: Help - Работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ursus
Помогите решить!!!!!!!!!!!, please!!!!
Для зачета 1 осталась:
Число компонент файла f, компонентами которого являются целые числа кратно 10. Преписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке так, чтобы вначале шли отрицательные числа десятки, а за ними - неотрицательные
Clon
Ну вот примерно так, если, конечно, я правильно понял задание

program ubu(input,output);
var
a:array[1..100] of integer;
i,n,c,j,k,u,m:integer;
g,f:file of integer;
y:char;
procedure vvod;
begin
write('vvedite chislo komponent:');
readln(n);
if (n mod 10)=0 then
begin
rewrite(f);
writeln('vvedite komponenti');
for i:=1 to n do
begin
read©;
write(f,c);
end;
close(f);
end
else
begin
writeln('input error');
vvod;
end;
end;
procedure print;
begin
reset(f);
while not eof(f) do
begin
read(f,c);
write©;
write(' ');
end;
close(f);
end;
procedure active;
begin
k:=1;
m:=1;
rewrite(g);
reset(f);
while not eof(f) do
begin
for j:=1 to 10 do
begin
read(f,c);
if c>0 then
begin
a[k]:=c;
k:=k+1;
end;
if c<0 then
begin
write©;
write(' ');
end;
end;
for u:=1 to k-1 do
begin
write(a[u]);
write(' ');
end;
k:=1;
end;
close(f);
close(g);
end;
begin
assign(f,'f');
assign(g,'g');
writeln('hotite vvesti noviy file?y/n');
readln(y);
if y='y' then vvod;
writeln;
writeln('PRINT');
writeln;
print;
writeln;
writeln('OUTPUT');
writeln;
active;
end.
volvo
Clon, у тебя жестоко нарушена структура программы. В частности, описания процедур внутри блока If ... Then ... Else blink.gif blink.gif
Clon
Тьфу, сорри, выложил по ошибке не то. Сейчас поправил
Malice
Цитата(Clon @ 1.06.2006 20:51) *
Тьфу, сорри, выложил по ошибке не то. Сейчас поправил

Все равно что-то не то, ни одного write(g,..) нет, как результат сохраняется ?
Я думаю вот такой основной блок надо:
nn:=0; reset(q); rewrite(w);
repeat
a:=0; s:=9;
for i:=0 to 9 do begin
read(q,k);
if k<0 then
begin seek(w,10*nn+a); write (w,k); inc(a); end
else
begin seek(w,10*nn+s); write (w,k); dec(s); end;
end;
inc(nn);
until eof(q);

Правда все положительные числа в обратном порядке встанут, ну и что, это не оговаривалось smile.gif
Clon
Ну не знаю, у меня все работает. Сначала пишет содержимое файла, а потом его отсортированный вариант.
volvo
Clon, а ты на размер файла G после прогона твоей программы посмотреть не хочешь?
А задание было:
Цитата
Преписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке <...>
smile.gif
Clon
volvo Ой... mega_chok.gif
Ну тогда так
program ubu(input,output);
var
a:array[1..100] of integer;
i,n,c,j,k,u,m:integer;
g,f:file of integer;
y:char;
procedure vvod;
begin
write('vvedite chislo komponent:');
readln(n);
if (n mod 10)=0 then
begin
rewrite(f);
writeln('vvedite komponenti');
for i:=1 to n do
begin
read©;
write(f,c);
end;
close(f);
end
else
begin
writeln('input error');
vvod;
end;
end;
procedure print;
begin
reset(f);
while not eof(f) do
begin
read(f,c);
write©;
write(' ');
end;
close(f);
end;
procedure active;
begin
k:=1;
m:=1;
rewrite(g);
reset(f);
while not eof(f) do
begin
for j:=1 to 10 do
begin
read(f,c);
if c>0 then
begin
a[k]:=c;
k:=k+1;
end;
if c<0 then
begin
write©;
write(g,c);
write(' ');
end;
end;
for u:=1 to k-1 do
begin
write(a[u]);
write(g,a[u]);
write(' ');
end;
k:=1;
end;
close(f);
close(g);
end;
begin
assign(f,'f');
assign(g,'g');
writeln('hotite vvesti noviy file?y/n');
readln(y);
if y='y' then vvod;
writeln;
writeln('PRINT');
writeln;
print;
writeln;
writeln('OUTPUT');
writeln;
active;
end.
Unknown
Всем доброго времени суток!
У меня похожее задание:
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Получить в файле g те компоненты файла f, которые являются четными.
Но я чего-то вообще не догоняю, как работать с файлами...
Мне всю прогу не надо, а хотя бы первую часть, т.е. заполнить файл f, даже не рандомно, а вручную, чтоб разобраться. Вот, что пишу я:
Код

var f:file of integer; a,i:integer;
begin
assign(f,'file.dat');
rewrite(f);
repeat
write(f,a);
until eof(f)
end.

По идее, юзер вводит последовательность целых чисел до тех пор, пока не будет нажата комбинация Ctrl+Z и Enter, и вся эта последовательность сохраняется в файле с именем file.dat. Все верно? Или я что-то не так понял? Не работает...
Имеет ли значение, работаю я в Турбо или в Борланд Паскале?
volvo
Unknown, во-первых, где ты получаешь значение от пользователя? Нету этого, добавь...

А во-вторых, перед завершением программы не забудь сделать Close(f), чтобы все внесенные значения гарантированно записались в файл, иначе все записанное в буфер просто будет потеряно...
Гость
volvo, сорри, close(f) я просто забыл написать, а, т.к. я - гость, редактировать посты не могу...
Проблема в том, что при прогоне программы она никак не взаимодействует с юзером(просто мигает экран и все): на строке write(f,a); ничего не происходит, а на строке until eof(f) условие считается выполненным, несмотря на то, что Ctrl+Z не нажаты...
Еще раз повторю вопрос: имеет значение, пишу я на Турбо Паскале или на Борланд Паскале? Просто некоторые различия у них есть, может различия есть и в работе с файлами?
Гость
volvo, а разве строка write(f,a); не отвечает за "получение значения от пользователя"? За что тогда отвечает эта строка?
volvo
Эта строка пишет содержимое переменной a в файл... А вот где ты запрашиваешь то значение, которое будет записываться?

Кстати, я сейчас еще кое-что заметил: eof(f) будет истиной сразу же, поэтому после записи первого значения цикл у тебя закончится... Для того, чтобы продолжать цикл до нажатия Ctrl+Z тебе надо сделать
until not eof; { <--- С клавиатуры !!! }


Возможно, в Турбо и Борланд Паскале и есть какие-то отличия, но здесь разницы абсолютно нет.
Гость
Ага... Кажется, понял! Огромное спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.