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

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

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

> Как создать типизированный файл, file of
сообщение
Сообщение #1


Новичок
*

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

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


Всем привет! Почитал про типизированные файлы на форуме но так и не наашёл решение своей проблемы.
Хочу создать типизированный файл в который будут писать числа типа real.


const n = 8;
{type numbers = record
num : real;
end;}
type numbers = file of real;
var fname : string;
i : integer;
sum, k : real;
ans : char;
f1 : numbers;

function fi(p: integer): real;
var i : integer;
sum : real;
begin

sum := sqrt(3 * p);
for i := p downto 1 do
if (i = 1) then
fi := sum
else
sum := sqrt(sum + 3 * (i - 1));
end;

procedure newfile(var f1 : numbers);
var s : string;
num : real;
{with num_ref do}
begin
rewrite(f1);
{write(f1, num_ref);}
for i := n downto 1 do
begin
if (i = 1) then
begin
num := sqrt(3);
writeln(f1, num);
break;
end
else
begin
writeln(f1, fi(i));
end;
end;
close(f1);
end;

procedure outputfile(var f1 : numbers; p : integer);
var s : string;

begin
reset(f1);
repeat
readln(f1, s);
write('f', p, '=');
writeln(s);
dec(p);
until eof(f1);
end;

begin
clrscr;
writeln('Create a new file?');
readln(ans);
ans := upcase(ans);
if (ans = 'Y') or (ans = 'YES') then
begin
writeln('Enter name a file');
readln(fname);
assign(f1, fname);
newfile(f1);
outputfile(f1, n);
end
else
begin
writeln('What file you want open?');
readln(fname);
assign(f1, fname);
outputfile(f1, n);
end;
readln;
end.



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


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


kosya4ok,
просмотрел тему и у меня сложилось впечатление, что некоторое недопонимание между тобой и теми, кто тебе отвечал связано тем, что тебе нужно разобрать ДВА вопроса, а не ОДИН:
1. Чем отличается бинарное (внутреннее, машинное) редставление чисел от текстового (форматного).
2. Для чего нужен типизированный файл.

1. Внутри компьютера числа находятся в бинарном виде. Так же они могут быть и сохранены на диске. Т.е. область диска (файл) может быть просто копией фрагмента оперативной памяти. Но разобрать что-либо в таком файле глазами совершенно невозможно. Поэтому прибегают к текстовому представлению информации. При этом дробное число, занимающее в памяти (или бинарном файле), скажем, 4 байта, в виде текста займет уже 12 байт - да и то с потерей точности. Опять же, Паскаль скрывает этот факт, но операторы read и write с текстовыми и бинарными файлами работают совершенно по-разному: при работе с текстом каждый символ подвергается достаточно сложным преобразованиям. Таким образом, разработчику всеегда риходится решать, какому формату файла отдать предпочтение в конкретной программе.
Если нам надо хранить, скажем, 8 Мбайт данных, то
- бинарное представление: длина файла - 8 Мбайт, время чтения - 0.1 с, глазами ничего не увидишь,
- текстовое представление: длна файла - 96 Мбайт, время чтения - 50 с, можно посмотреть глазами.
Что ты в данном случае предпочтешь?
А если надо записать всего десяток чисел, которые и в том, и в другом случае будут занимать один сектор на диске и читаться практически мгновенно?

2. Вообще-то он не нужен. Т.е. без него легко можно обойтись, заменив файлом нетипизированным. Но в некоторых случаях удобнее работать с типизированным.
Твой пример к таковым не относится: если ты работаешь с вещественными числами, то разницы между типизированным и нетипизированным практически нет.
А когда же появляется разница?
Тогда, когда тебе нужно работать не с простым, а со сложным типом данных. Ну например:
type
t3DPoint = packed record
x,y,z : single; // координаты точки в пространстве
u,v : byte; // текстурные координаты
end;

Длина такого типа данных составляет 14 байт и, чтобы не запутаться, лучше объявить фвйл как file of t3DPoint. Одновременно, если ты запросишь длину файла, то тебе будет возвращено именно количество точек, а не количество байтов.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
kosya4ok   Как создать типизированный файл   14.12.2007 15:32
volvo   Данные в типизированный файл не пишутся через Writ…   14.12.2007 15:44
kosya4ok   Ага. volvo заменил writeln на write, но только теп…   14.12.2007 16:43
volvo   А вот смотреть блокнотом не надо типизированные фа…   14.12.2007 16:53
kosya4ok   Так я так и не понял что надо сделать то? :unsure…   14.12.2007 16:59
volvo   Значит, надо создавать НЕ типизированный, а тексто…   14.12.2007 18:03
kosya4ok   Окей. А чем посмотреть тогда типизированный файл и…   14.12.2007 18:33
andriano   Типизированный файл при желании можно посмотреть h…   15.12.2007 0:29
kosya4ok   Ясно. Спасибо за понятный ответ. А то народ никак …   15.12.2007 0:33
volvo   :dry: Сколько же можно тебе объяснять? Тебе поста …   15.12.2007 0:37
kosya4ok   Так а сколько ты нормально раз объснял?Покажи. Заш…   15.12.2007 0:49
andriano   Вдогонку: чем смотреть типизированный файл? Специа…   15.12.2007 0:57
kosya4ok   Я не понимаю как мона сгруппировать и извлечь инфо…   15.12.2007 1:04
andriano   Я не понимаю как мона сгруппировать и извлечь инф…   15.12.2007 1:27
volvo   :mega_chok: 32-битные компиляторы не доведут до…   15.12.2007 1:16
kosya4ok   Цитата(kosya4ok @ 14.12.2007 21:04) Я не понимаю…   15.12.2007 1:43
andriano   Группировать по 6 байтов (48 битов). А что конкрет…   15.12.2007 1:56
Гость   СПС всем !!ТЕМА закрыта!   15.12.2007 3:30
kosya4ok   А вы не объясните почему вот так вот можно писать …   15.12.2007 3:43
Lapp   А вы не объясните почему ... вот так вот нельзя. …   15.12.2007 5:09
andriano   kosya4ok, просмотрел тему и у меня сложилось впеча…   15.12.2007 15:31
kosya4ok   Опочки прикольно! То есть вы хотите сказать чт…   15.12.2007 16:49
andriano   Минуточку. Та ЗНАЧЕНИЕ или ОБЛАСТЬ ПАМЯТИ? write р…   15.12.2007 17:02
kosya4ok   Привет! Вот же ж люди какие бывают какие прони…   15.12.2007 17:18
andriano   Длина файла возвращается в количестве тех переменн…   15.12.2007 17:33
kosya4ok   За По поводу пергрузки: во-первых, write - не фу…   15.12.2007 17:37
andriano   Нет, в том то и дело, что в proc1 произошла переда…   15.12.2007 17:50
kosya4ok   Ну и ну. Вообщем пошёл учить Паскаль.   15.12.2007 18:00


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

 





- Текстовая версия 7.09.2025 15:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name