Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Помогите! Нужно решение задачи на тему "файлы"
FedoroffДата: Вторник, 29.01.2008, 06:56 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 4
Репутация: 0
Замечания: 0%
Статус: Offline
В общем задача:
Дан файл, компоненты которого целые числа. Нужно из етого файла извлечь последнюю и записать в новый файл!

задача очень легкая, но решить ее не смог. Пробовал вот так:

Program p_1(s,f);
uses crt;
Var
s,f:text;
a,k:integer;
Begin
Clrscr;
assign(S,'f1.txt');
assign(f,'f2.txt');
Reset(s);
Rewrite(f);
Append(F);
While not eof(s) do
Begin
Inc(k);
End;
Writeln(F,k);
Close(S);
Close(f);
Readln;
End.


Сообщение отредактировал Fedoroff - Вторник, 29.01.2008, 06:56
 
SeqularДата: Вторник, 29.01.2008, 14:52 | Сообщение # 2
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Code
Program Files;
Uses CRT;
Const f1 = 'file1.dat';
       f2 = 'file2.dat';
Var f: file of Integer;
     i: Integer;
     s: Integer;
Begin
ClrScr;
Randomize;
Assign(f, f1);
ReWrite(f);
Write('Fail soderjit: ');
For i := 1 to 10 do
     Begin
     s := Random(10) + 1;
     Write(f, s);
     Write(s, ' ');
     End;
Seek(f, FileSize(f)-1);
Read(f, s);
Close(f);
Assign(f, f2);
ReWrite(f);
Write(f, s);
Writeln(#13#10,'Posledniy element ',s,' pomeshen v dr. fail');
Close(f);
Readkey;
End.


Поддерживаю также проект сообщество молодых сисадминов
 
PavelДата: Вторник, 29.01.2008, 14:55 | Сообщение # 3
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Quote (Fedoroff)
Var
s,f:text;

Во-первых, эти файлы текстовые. В них компоненты - чары. Надо было: f: file of integer;
Во-вторых,

Quote (Fedoroff)
Writeln(F,k);
, не понятно для чего это сделано? Надо Seek(f, k - 1); а то что ты написал запишет СТРОКУ из переменной k в файл F. Короч, Seqular тебе щас код скинет.
 
FedoroffДата: Среда, 30.01.2008, 04:34 | Сообщение # 4
Новичок
Группа: Пользователи
Сообщений: 4
Репутация: 0
Замечания: 0%
Статус: Offline
а что делает код Seek(f, k - 1), а то мы в школе не проходили такую команды?
Зы
Quote
Quote (Fedoroff)
Var
s,f:text;

Во-первых, эти файлы текстовые. В них компоненты - чары. Надо было: f: file of integer;


Вроде как для работы одновременно с числами и буквами надо ввоить именно Text
 
SeqularДата: Среда, 30.01.2008, 07:13 | Сообщение # 5
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Fedoroff, Seek - смещает позицию файла f на компонент k-1. Ну ты исходный код видишь, там смещаемся на позицию Filesize(f)-1, т.е. на последний элемент!

А еще

Quote
компоненты которого целые числа
- это означает, что файл типизированый! т.е. если полностью выполнить условие задачи - нужно использовать file of integer.

Кроме того, seek и filesize работают с типизированными файлами.

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

Можешь открыть эти файлы любым 16-ричным редактором и убедится в том, что прога работает как надо... (прим число 0х0A = 10)


Поддерживаю также проект сообщество молодых сисадминов
 
PavelДата: Среда, 30.01.2008, 16:25 | Сообщение # 6
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Ага. Кстати, если в школе не проходили, это не значит что не надо этого знать. Можно конечно текст, но как сказано было в условиях, так и сделали. Или надо именно с текстом? На мой взгляд использование текстовых файлов для работы с числами только усложнит работу. Представь, если числа будут отрицательными? Они ведь тоже целые. Как ты их будешь считывать? Можно, но сложно. А у типизированных файлов есть такая фишка как позиция, или указатель в файле. Так что печатай seek и потом по нему поиск, все просто, там увидишь и остальные операции с файлами.
 
PavelДата: Среда, 30.01.2008, 16:27 | Сообщение # 7
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Quote (Fedoroff)
Вроде как для работы одновременно с числами и буквами надо ввоить именно Text

Не надо, а можно!
 
FedoroffДата: Пятница, 01.02.2008, 06:15 | Сообщение # 8
Новичок
Группа: Пользователи
Сообщений: 4
Репутация: 0
Замечания: 0%
Статус: Offline
Так что у меня получилось:
Вот как я по-новому задвчу написал
Program p_1(s,f);
uses CRT;
Var
s,f:file of integer;
a:integer;
Begin
ClrScr;
Assign(s,'ish.txt')
дело в том, что у меня уже есть файлы и их не надо заполнять случайным образом
Seek(s,filesize(s)-1);
Read(s,a);
Close(s);
Assign(f,'pol.txt');
Rewrite(f);
Write(f,a);
Close(f);
Readkey;
End.

Так вот если, например, у меня в файле ish.txt записаны такие числа:1 2 3 4 5, то он записывает в файл pol.txt цифру 4.... Я подумал это из-за того что я писал Seek(s,filesize(s)-1) и попробовал поменять на Seek(s,filesize(s)); но у меня выдалась ошибка №100 Dick read error. Не подскажите почему? и как мне исправить?

Добавлено (31.01.2008, 23:15)
---------------------------------------------
Все решил я задачу но намного проще:
...
ClrScr;
assign(s,'123.txt');
assign(f,'321.txt');
reset(s);
append(f);
While not eof(s) do
Begin
Read(s,a);
end;
Write(f,a);
Close(s);
Close(f);
Readln;
End.

 
SeqularДата: Пятница, 01.02.2008, 07:22 | Сообщение # 9
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Fedoroff, Seek работает с типизированными файлами! А у тебя текстовый, нужно использовать именно типизированный (по условию задачи).

А твое решение:

Code

While not eof(s) do  
Begin  
Read(s,a);  
end;  

неоптимально. Представь, что в файле 1000 символов.... Этот код будет 1000 раз брать из файла по символу и заносить в память... ничего с ними не делая....

А первый код с txt у тебя не работал потому что - тебе нельзя создавать файл в блокноте и т.д....
Потому что там ты создаешь текстовый файл (перевод строки - Ascii13-10), и каждый компонент - 1 байт занимает...
А

Quote (Fedoroff)
Дан файл, компоненты которого целые числа
целое число - Integer - занимает 2 байта...

Чтобы проверить, решил ты задачу или нет: - занеси в файл последним отрицательное число... И увидишь, что оно магическим образом стало ПОЛОЖИТЕЛЬНЫМ, потому что знак "-" считался отдельно от самого числа и был пропущен.... Понимаешь?


Поддерживаю также проект сообщество молодых сисадминов
 
PavelДата: Пятница, 01.02.2008, 18:37 | Сообщение # 10
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Disk read error # 100 - эта ошибка называется хер пойми! На самом деле. Кажется, что все лады, но не все. Еще раз перекомпиль и все, может получится. И еще, типизированные файл ты в блокноте вряд ли сделаешь. По крайней мере у меня не получалось. А то что тебе Seqular сказал правильно. Надо правильно делать, особенно с файлами.
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;