IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Help - Работа с файлами
ursus
сообщение 1.06.2006 16:59
Сообщение #1


Гость






Помогите решить!!!!!!!!!!!, please!!!!
Для зачета 1 осталась:
Число компонент файла f, компонентами которого являются целые числа кратно 10. Преписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке так, чтобы вначале шли отрицательные числа десятки, а за ними - неотрицательные
 К началу страницы 
+ Ответить 
Clon
сообщение 1.06.2006 19:12
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Ну вот примерно так, если, конечно, я правильно понял задание

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 - 2.11.2006 19:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.06.2006 19:35
Сообщение #3


Гость






Clon, у тебя жестоко нарушена структура программы. В частности, описания процедур внутри блока If ... Then ... Else blink.gif blink.gif
 К началу страницы 
+ Ответить 
Clon
сообщение 1.06.2006 19:51
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Тьфу, сорри, выложил по ошибке не то. Сейчас поправил
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 1.06.2006 20:45
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clon
сообщение 1.06.2006 22:22
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


Ну не знаю, у меня все работает. Сначала пишет содержимое файла, а потом его отсортированный вариант.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.06.2006 22:46
Сообщение #7


Гость






Clon, а ты на размер файла G после прогона твоей программы посмотреть не хочешь?
А задание было:
Цитата
Преписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке <...>
smile.gif
 К началу страницы 
+ Ответить 
Clon
сообщение 2.06.2006 16:27
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

Репутация: -  0  +


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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unknown
сообщение 3.06.2006 15:45
Сообщение #9


Гость






Всем доброго времени суток!
У меня похожее задание:
Заполнить файл 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
сообщение 3.06.2006 16:15
Сообщение #10


Гость






Unknown, во-первых, где ты получаешь значение от пользователя? Нету этого, добавь...

А во-вторых, перед завершением программы не забудь сделать Close(f), чтобы все внесенные значения гарантированно записались в файл, иначе все записанное в буфер просто будет потеряно...
 К началу страницы 
+ Ответить 
Гость
сообщение 3.06.2006 16:30
Сообщение #11


Гость






volvo, сорри, close(f) я просто забыл написать, а, т.к. я - гость, редактировать посты не могу...
Проблема в том, что при прогоне программы она никак не взаимодействует с юзером(просто мигает экран и все): на строке write(f,a); ничего не происходит, а на строке until eof(f) условие считается выполненным, несмотря на то, что Ctrl+Z не нажаты...
Еще раз повторю вопрос: имеет значение, пишу я на Турбо Паскале или на Борланд Паскале? Просто некоторые различия у них есть, может различия есть и в работе с файлами?
 К началу страницы 
+ Ответить 
Гость
сообщение 3.06.2006 16:33
Сообщение #12


Гость






volvo, а разве строка write(f,a); не отвечает за "получение значения от пользователя"? За что тогда отвечает эта строка?
 К началу страницы 
+ Ответить 
volvo
сообщение 3.06.2006 17:04
Сообщение #13


Гость






Эта строка пишет содержимое переменной a в файл... А вот где ты запрашиваешь то значение, которое будет записываться?

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


Возможно, в Турбо и Борланд Паскале и есть какие-то отличия, но здесь разницы абсолютно нет.
 К началу страницы 
+ Ответить 
Гость
сообщение 3.06.2006 17:15
Сообщение #14


Гость






Ага... Кажется, понял! Огромное спасибо!
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.04.2024 8:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"