Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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

Приложение:
  1. var
  2. size: double;
  3. dcount: double;
  4. count: integer;
  5. begin
  6. size := 450 * 80 * 60 / 1024 / 1024;
  7. dcount := size / 1.44;
  8. count := round(dcount + 0.5);
  9.  
  10. end.
  11.  


Ответ отправил: Виталий Лещенко (статус: 4-ый класс)
Время отправки: 19 марта 2008, 14:55

Ответ #3. Отвечает эксперт: min@y™

С учётом вопроса № 1431 (см. приложение).
Программа работает. Проверял. :)

Приложение:
  1. {
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. 1457664 < 2160000 < 2 * 1457664
  11.  
  12.  
  13. }
  14.  
  15. program p1432;
  16.  
  17. const
  18.  
  19.  
  20.  
  21.  
  22. var
  23.  
  24.  
  25. begin
  26. DiskCount:= 1;
  27.  
  28. while (DiskCount * DiskSize < PageSize * PageCount) do
  29. Inc(DiskCount);
  30.  
  31.  
  32.  
  33. Readln;
  34. end.


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 20 марта 2008, 08:37


Мини-форум вопроса

Всего сообщений: 23; последнее сообщение — 30 марта 2008, 15:43; участников в обсуждении: 3.

Страницы: [1] [2] [Следующая »]

Вадим К

Вадим К (статус: Академик), 20 марта 2008, 15:39 [#1]:

а кто сказал, что один символ занимает один байт? а если это юникод? тогда 2 или даже 4. Так что прийдётся запасаться дискетами:)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 21 марта 2008, 08:16 [#2]:

Цитата:

а кто сказал, что один символ занимает один байт?

А никто не сказал, что НЕ 1 байт. :)
И ваще, надо юзать 7zip, тогда 1 дискета будет!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Drozdov D.V.

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.

Drozdov D.V. (статус: 4-ый класс), 24 марта 2008, 15:25 [#5]:

А вот ещё подводный камень расчётов, совсем забыл а символ конца файла 1 байт. Конешно можно не брать в расчёт, но поумнечать надо!
Вадим К

Вадим К (статус: Академик), 24 марта 2008, 16:06 [#6]:

я думаю, что после этого, у препода точно глаза на лоб полезут. Главное красиво преподнести:)
Галочка "подтверждения прочтения" - вселенское зло.
Drozdov D.V.

Drozdov D.V. (статус: 4-ый класс), 24 марта 2008, 17:17 [#7]:

Да согласен а вот и символ конца строки - EoF чтоб не искать.
Хорошо однако чувствовать себя умным!
Вадим К

Вадим К (статус: Академик), 24 марта 2008, 18:16 [#8]:

eof - это конец файла, а не строки. Так что двойка:)
(eof - end of file)
а конец строки - eoln.
Галочка "подтверждения прочтения" - вселенское зло.
Drozdov D.V.

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.
Как летеровался?
Drozdov D.V.

Drozdov D.V. (статус: 4-ый класс), 24 марта 2008, 20:43 [#10]:

р там
Вадим К

Вадим К (статус: Академик), 25 марта 2008, 00:48 [#11]:

опять два:)
1) assign(f,''); - а где имя файла?
2) а если файл пустой? первое же чтение даст исключение
3) нет гарантии, что файл именно текстовый. поэтому я бы фильтровал символы с кодами меньше 32. а некоторые правильно отображал.
Галочка "подтверждения прочтения" - вселенское зло.
Drozdov D.V.

Drozdov D.V. (статус: 4-ый класс), 25 марта 2008, 21:53 [#12]:

assign(f,'file name'); Вот так.
Писать надо, продумал потом пиши!
Вадим К

Вадим К (статус: Академик), 25 марта 2008, 23:33 [#13]:

Ну, а по другим ошибкам что скажем?
Галочка "подтверждения прочтения" - вселенское зло.
Drozdov D.V.

Drozdov D.V. (статус: 4-ый класс), 27 марта 2008, 15:11 [#14]:

Каким?
Вадим К

Вадим К (статус: Академик), 27 марта 2008, 16:34 [#15]:

если файл будет иметь нулевой размер, то произойдёт маленькая бяка.
думаем какая.
Галочка "подтверждения прочтения" - вселенское зло.
Drozdov D.V.

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.

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] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.