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

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

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

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


Гость






Помогите решить!!!!!!!!!!!, please!!!!
Для зачета 1 осталась:
Число компонент файла f, компонентами которого являются целые числа кратно 10. Преписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке так, чтобы вначале шли отрицательные числа десятки, а за ними - неотрицательные
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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


Новичок
*

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

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


Тьфу, сорри, выложил по ошибке не то. Сейчас поправил
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


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


Гость






Clon, а ты на размер файла G после прогона твоей программы посмотреть не хочешь?
А задание было:
Цитата
Преписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке <...>
smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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. Все верно? Или я что-то не так понял? Не работает...
Имеет ли значение, работаю я в Турбо или в Борланд Паскале?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






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

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


Гость






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


Гость






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


Гость






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

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


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


Гость






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

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

 




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