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

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

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

> Как создать типизированный файл, file of
kosya4ok
сообщение 14.12.2007 11:32
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
andriano
сообщение 15.12.2007 11:31
Сообщение #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 - 15.12.2007 11:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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