|
Вопрос # 1 432/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, срочно решить задачу для младшего брата. А то мы с ног сбились в поисках специалиста.
Задачка в файле. Нужно написать решение на языке программирования.
заранее спасибо:)
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задала: Танута (статус: Посетитель)
Вопрос отправлен: 19 марта 2008, 14:26
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Drozdov D.V.
Здравствуйте, Танута!
Вопрос и сложный и простой.
Если я не ошибаюсь 1 символ 1киловит
60*80=4800
4800*450=2160000
дальше перевидите!
 |
Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 19 марта 2008, 14:38
|
Ответ #2. Отвечает эксперт: Виталий Лещенко
Здравствуйте, Танута!
На одной странице вмещается 60 * 80 символов. (Про то, сколько символо-байт занимает перевод строки ничего не сказано)
Тогда вся рукопись будет занимать 450 * 60 * 80 = 2160000 байт = 2.0599365234375 Кб
На одну дискету вмещается примерно 1.44 Кб, тогда 2.0599365234375 / 1.44 = 1.430511474609375 дискет понадобится.
Но кол-во дискет должно быть натуральным числом, поэтому результат следует округлить в большую сторону.
Ответ: 2
Приложение: Переключить в обычный режим- var
- size: double;
- dcount: double;
- count: integer;
- begin
- size := 450 * 80 * 60 / 1024 / 1024;
- dcount := size / 1.44;
- count := round(dcount + 0.5);
-
- end.
-
 |
Ответ отправил: Виталий Лещенко (статус: 4-ый класс)
Время отправки: 19 марта 2008, 14:55
|
Ответ #3. Отвечает эксперт: min@y™
С учётом вопроса № 1431 (см. приложение).
Программа работает. Проверял. :)
Приложение: Переключить в обычный режим- {
-
-
-
-
-
-
-
-
- 1457664 < 2160000 < 2 * 1457664
-
-
- }
-
- program p1432;
-
- const
-
-
-
-
- var
-
-
- begin
- DiskCount:= 1;
-
- while (DiskCount * DiskSize < PageSize * PageCount) do
- Inc(DiskCount);
-
-
-
- Readln;
- end.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 20 марта 2008, 08:37
|
Мини-форум вопроса
Всего сообщений: 23; последнее сообщение — 30 марта 2008, 15:43; участников в обсуждении: 3.
Страницы: [1] [2] [Следующая »]
|
Вадим К (статус: Академик), 20 марта 2008, 15:39 [#1]:
а кто сказал, что один символ занимает один байт? а если это юникод? тогда 2 или даже 4. Так что прийдётся запасаться дискетами
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 21 марта 2008, 08:16 [#2]:
Цитата:
а кто сказал, что один символ занимает один байт?
А никто не сказал, что НЕ 1 байт. 
И ваще, надо юзать 7zip, тогда 1 дискета будет!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Drozdov D.V. (статус: 4-ый класс), 21 марта 2008, 13:16 [#3]:
Согласен! Но если дос или винда то 1. При условии фаил в формате txt.
Когдато пришлось делать прогу по перекодировки на С 89 с выводом количества символов.
|
|
Вадим К (статус: Академик), 21 марта 2008, 21:31 [#4]:
если винда и файл в формате txt - это абсолютноне означает. что символ будет запимать один байт.
Кстати, я вспомнил, что когда то видел хитрую кодировку для русского текста, где символы кодировались 5 битами, потом паковались по 7 символов. в байт. (да да, там байт был 36бит. в советское время всё было возможно, партия сказала, что бы синус прямого угла был 2 - он будет ).
Так вот, при таком формате мы как раз влазим в дискетку.
Да, я понимаю, что для современной молодёжи это звучит дико, но так было.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Drozdov D.V. (статус: 4-ый класс), 24 марта 2008, 15:25 [#5]:
А вот ещё подводный камень расчётов, совсем забыл а символ конца файла 1 байт. Конешно можно не брать в расчёт, но поумнечать надо!
|
|
Вадим К (статус: Академик), 24 марта 2008, 16:06 [#6]:
я думаю, что после этого, у препода точно глаза на лоб полезут. Главное красиво преподнести
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Drozdov D.V. (статус: 4-ый класс), 24 марта 2008, 17:17 [#7]:
Да согласен а вот и символ конца строки - EoF чтоб не искать.
Хорошо однако чувствовать себя умным!
|
|
Вадим К (статус: Академик), 24 марта 2008, 18:16 [#8]:
eof - это конец файла, а не строки. Так что двойка
(eof - end of file)
а конец строки - eoln.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Drozdov D.V. (статус: 4-ый класс), 24 марта 2008, 20:42 [#9]:
Да, да! Глюк.
а применяется так
Program go;
var
f:text;
sym:char;
begin
assign(f,'');
reset(f);
repeat
read(f,sym);
write(sym)
until eof(f)
end.
Как летеровался?
|
|
Вадим К (статус: Академик), 25 марта 2008, 00:48 [#11]:
опять два
1) assign(f,''); - а где имя файла?
2) а если файл пустой? первое же чтение даст исключение
3) нет гарантии, что файл именно текстовый. поэтому я бы фильтровал символы с кодами меньше 32. а некоторые правильно отображал.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Drozdov D.V. (статус: 4-ый класс), 25 марта 2008, 21:53 [#12]:
assign(f,'file name'); Вот так.
Писать надо, продумал потом пиши!
|
|
Вадим К (статус: Академик), 25 марта 2008, 23:33 [#13]:
Ну, а по другим ошибкам что скажем?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 27 марта 2008, 16:34 [#15]:
если файл будет иметь нулевой размер, то произойдёт маленькая бяка.
думаем какая.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Drozdov D.V. (статус: 4-ый класс), 28 марта 2008, 12:13 [#16]:
Не будет достигнут конец файла. И произойдёт зацикливание программы. Не самый лучший алгоритм, но прост и легко представить смысл дольнейшего направления. Ведь использовав EoF можно усекать файлы до определёного элемента и размера.
|
|
Вадим К (статус: Академик), 28 марта 2008, 12:19 [#17]:
Не совсем верно, первое чтение выполняется без проверки. и если файл пустой - возникнет исключение. Так как в этой программе нет их обработки, то приложение "вылетит". Корректно чтение писать принято так
while not eof(f) do begin
read(f,....);
end;
Осталась ещё 3 ошибка
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 28 марта 2008, 12:20 [#18]:
а вот как усекать файлы с помощью eof - я не знаю.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Drozdov D.V. (статус: 4-ый класс), 28 марта 2008, 12:43 [#19]:
1. Лучшее усечение файла seek(var f; n:longint);
2. EoF применяут для первичного считывания файла затем запускаем через цикл for количество считываний элементов и просто в проге пишем процедуру Truncate(var); фаил усечён. Применяют тип таких алгаритмов для более детальной работы, пригодны для любых типов файлов в отличии 1 варианта.
Извиняюсь, что ввел вас в заблуждение!
|
|
Вадим К (статус: Академик), 28 марта 2008, 21:09 [#20]:
seek не усекает файл, а позиционирует курсор (окно, позицию) чтения/записи.
Truncate - да, тут согласен. Он для усечение и надо.
Цитата:
пригодны для любых типов файлов в отличии 1 варианта
с каких это пор seek не пригоден для позиционирования на любых типах файлов? всё он прекрасно умеет.
Цитата:
Извиняюсь, что ввел вас в заблуждение!
Меня так просто в заблуждение не введёшь А вот других участников сайта - очень таки просто.
Не обижайтесь, что я так "жестко наехал", просто надо элементарные вещи рассказывать даже среди ночи, по этому "писал сонный" - не есть объяснением
Галочка "подтверждения прочтения" - вселенское зло.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|