Её явно закрыли, а вопросы остались. Спасибо тем, кто помог. Сейчас буду сидеть разбиратся. Ну а вот на счёт первой задачи как быть? У меня единственнйы вопрос, как там сделать замену числа? Решать её ненадо !!! Просто подскажите, как заменить в файле чётное число на его произведние, Т.е. К примеру у нас в файле написано: 2, 13, 45, 56. Нам надо, чтоб там стало 4, 13, 45, 112. Вот как сделать, чтоб чётное число заменялось, без создание нового файла и писалось на том же месте. СРазу говорю, число максимальное будет 15000. Чтоб не было лишних разговоров. Ну а если Я там был не прав, то извиняюсь. Хотя наврядли !
GLuk
2.05.2003 21:26
Дык, я ж исходник выложил, может тебя смущает немного асма, но основная идея должна быть понятна. В файле есть так называемый указатель позиции записи/чтения. Который после чтения числа увеличивается на длину прочитанных данных которое, по ходу, нужно изменить я уменьшаю на 2 байта, а после записываю удвоенное/утроенное число, и указатель снова становится на место...
___ALex___
2.05.2003 21:37
всё можно сделать легко через BlockWrite/BlockRead/Seek асм вообще не к месту
расшифруй пожалуйста "asm, lea" Alex сделать через "BlockWrite/BlockRead/Seek " это ты имеешь ввиду заменить там существующие функции на эту? Разъясни. P.S. ну хрен с ним что Я ламер в Паскале.......... пока.... Все там были
GLuk
2.05.2003 22:59
Цитата
всё можно сделать легко через BlockWrite/BlockRead/Seek асм вообще не к месту
Реализуй пожалуйста, после хоккея ;) В плане исходника...
To Geroi: lea dx,W - это значит загрузка относительного смещения переменной W в регистр dx (по англ. load effective address). В данном случае получается, что DS:DX указывает на переменную W, что используется (как эквивалент можно привести тип Pointer) в качестве исходных данных для записи, т.к. пишем тип Integer, то в CX помещаем 2. Кстати, работает прога то?...
Geroi
2.05.2003 23:22
нет Она проще должна решатся....... Но всё равно спасибо, может довиду до ума.
___ALex___
2.05.2003 23:35
щас третий период досмотрю и напишу
___ALex___
3.05.2003 0:49
как и обещал:
program For_Forum; uses Crt; type MyFile = File of Integer; var F: MyFile; i: Integer;
Begin
ClrScr; WriteLn('Исходное содержание файла:'); Assign(F, 'C:InFile.dat'); Rewrite(F); for i := 1 to 19 do begin Write(F, i); Write(i:4); end; WriteLn; WriteLn('Конечное содержание файла:'); Seek(F, 0); while not Eof(F) do begin Read(F, i); if i mod 2 = 0 then begin Seek(F, FilePos(F) - 1); i := i * 2; { так пишу потому что компилятор сразу писать Write(F, 2 * i) не даёт и даже приведение не помогает типа Write(F, Integer(2 * i)) ! } Write(F, i); end; Write(i:4); end; Close(F); Erase(F); repeat until KeyPressed
End.
Без BlockRead/... но это без разницы - принцип там тот же - делал как по условию задачи от Нас требовали
to GLuk У тебя по асме какая книжка? to Geroi "Сейчас буду сидеть разбиратся. " Вот это уважаю! вот слова написанные одной программистой "Никакой Интернет со всеми его конференциями, статьями и примерами никогда не заменит программисту собственного опыта. Только то, что добыто (разобрано и понято) своими силами, запоминается надолго и приносит пользу. Опыта надо набираться обязательно. Читайте help, ищите ответ в исходниках, экспериментируйте с проектом сколько душе угодно, но только обязательно сами... "
в них Истина!
Geroi
3.05.2003 10:17
Спасибо Alex за задачу. Если есть мыло или Аська то дай плиз, чтоб форум н забивал если буду вопросы.
GLuk
3.05.2003 10:27
Ты ж говорил, что все это реализуется через BlockRead/Write. Через типизированный я и сам мог сделать, а если попробовать через эти функции, то ничего не получится (ошибка №6). А все из-за чего, из-за кривого кода работы с FSB в паскале! Поэтому и сделал через дескрипторы. По асме книг нету, только в электр. виде (авторы в явном виде не задаются).
To Geroi: Фишка в том, что переменную W нужно не возводить в квадрат, а умножать на 2. Поэтому происходит такая фигня. Прога хоть файл то создает?
AlaRic
3.05.2003 10:58
Цитата
Её явно закрыли, а вопросы остались.
Её закрыли из-за хамского поведения участников форума. Будет повторяться - темы будут закрываться!
___ALex___
3.05.2003 14:24
program For_Forum; uses Crt; var F: File; i: Byte;
Begin
ClrScr; WriteLn('Исходное содержание файла:'); Assign(F, 'C:InFile.dat'); Rewrite(F, 1); for i := 1 to 19 do begin BlockWrite(F, i, 1); Write(i:4); end; WriteLn; WriteLn('Конечное содержание файла:'); Seek(F, 0); while not Eof(F) do begin BlockRead(F, i, 1); if i mod 2 = 0 then begin Seek(F, FilePos(F) - 1); i := i * 2; BlockWrite(F, i, 1); end; Write(i:4); end; Close(F); Erase(F); repeat until KeyPressed
End.
to GLuk вот если так хотелось никакой кривоты я тут не увидел to Geroi ___ALex___@inbox.ru
GLuk
3.05.2003 15:03
Не работает нифига, я примерно так сначала и сделал, как и раньше, выдает мне ошибку №6 (это типа несуществующий дескриптор) ??? :o А с типизированным работает...
___ALex___
3.05.2003 15:10
to GLuk в каком месте ошибка происходит? И что этот номер ошибки значит? У меня всё работает...
GLuk
3.05.2003 16:19
Выдает ошибку после третьего обращения к BlockWrite, а ошибка эта значит, что ДОС передан неверный номер дескриптора... эта ошибка в принципе не может возникнуть, если конечно не затереть номер дескриптора в блоке описаловки файла открытого ТП.
И самое обидное:Потестил на другой машине - все идет :'(
Меня терзают смутные сомнения, может что с машиной не так :( :o
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.