| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |