Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pascal срочно, плзззз...


Страницы:   1 2 3 4

cok ©   (2002-03-30 14:55:00) 

Я сейчас пишу прогу на Паскале, вот. Проблева в следующем:
у меня есть число в 10-ной системе счисления, я перевожу его в 2-ую сист.сч., меняю местами некоторые 1 и 0, а потом перевожу это в 10-ую сист.сч, но число больше 6000, и поэтому, когда я его перевожу в 2-ую сист. по длине оно будет ого го, т.е длиннее чем LongInt! Я пытался использовать тип comp или extended, но тогда прога не правильно будет переводить число в 10-ую сист. сч. Че делать?


KSergey   (2002-04-08 10:27:00) [21]

А вообще это классно получается: дают человеку задачку (в некоем учебном заведении), он бросает ее в форум, на ответ говорит "а он неверен, сделайте чтоб работало!" после чего дожидается правильного решения, сдает его - ну и молодец короче. И это еще учитывая то, что задачи во всех учебных заведениях даются с расчетом на уровень троечника.
Далеко пойдешь, cok!
Хочется матом, да воспитание не позволяет.

PS: хотя обсуждение получилось весьма интересным, надо заметить.


cok   (2002-04-01 20:07:00) [22]

2 Alx2 © (01.04.02 14:57)
Большое вам спасибо! Ваш код работает верно.


Alx2   (2002-04-01 14:57:00) [23]

Вот вариант на "чистом" ObjectPascal:

Function rormax(Val: Word): Word;
Var
K, HigherBitPos, LowBit: Integer;
Begin
Result := Val;
If Val = 0 Then exit;
HigherBitPos := trunc(ln(Val) / ln(2));
For K := 0 To HigherBitPos Do
Begin
LowBit := Val And 1;
Val := (Val Shr 1) Or (LowBit Shl HigherBitPos);
If Val > Result Then Result := Val;
End;
End;


cok   (2002-04-01 14:22:00) [24]

2 Anatoly Podgoretsky ©
Я так и догадался, но все равно работает НЕВЕРНО.


Anatoly Podgoretsky   (2002-03-31 22:11:00) [25]

У сеня что буква М, конечно исправь
И здесь конечно, код писался быстро

if F = 1 then N := N or $8000;

Мог бы догадаться


cok   (2002-03-31 21:51:00) [26]

>JibSkeart © (31.03.02 19:36)
Твой код работает неверно!


cok   (2002-03-31 21:49:00) [27]

>Anatoly Podgoretsky © (31.03.02 15:19)
>max := N;
>for i := 1 to 16 do begin
> F := N and 1;
> M := N shr 1;
> if F = 1 then N or $8000;
> if N > Max then Max := N;
>end;


> M := N shr 1;Здесь, наверно, надо написать N:=N shr 1;
> if F = 1 then N or $8000;Здесь ошибка, но не пойму какая.






Anatoly Podgoretsky   (2002-03-31 20:44:00) [28]

может и 16 и 32 зависит от префикса, но это не касается Дельфи, только 32


Anatoly Podgoretsky   (2002-03-31 20:27:00) [29]

Ну ок уточнили.


Rooman   (2002-03-31 20:25:00) [30]

Уже начиная с 386 процессора LOOP оперирует с 32-разрядным счетчиком:)


JibSkeart   (2002-03-31 20:05:00) [31]

насчет ecx 32 я мог ошибится так как с 32-х битным счетчиком
я не сталкивался (не приходилось)

//Во вторых по твоим словам в старом турбо паскале нельзя использовать асмь команды, только TASM или MASM, это не так, начиная с версии 6, можно напрямую, а до этого inline

про Tasm, Masm я имелл виду то что так можно работать с 32 бит рег.

но не имелл ввиду то что паскаль не знает асма
А с 32б мона работать и через db константы ...
на пискале (досявом)


Anatoly Podgoretsky   (2002-03-31 19:55:00) [32]

Ты видимо не представляешь как работает команда loop в 32 битном компиляторе, так вот она учитывает не только cx, но и e.
К тому же ты путаешь 32 битный счетчик с 16 битными рабочими регистрами ax, dx

Во вторых по твоим словам в старом турбо паскале нельзя использовать асмь команды, только TASM или MASM, это не так, начиная с версии 6, можно напрямую, а до этого inline
вот в 16 разрядном компиляторе, конечно нужно mov cx,16


JibSkeart   (2002-03-31 19:36:00) [33]

Вопервых если он пишет на паскале под досем ...
то сакс
он не поддерживает 32-х битные регистры .. :((
можно но только на TASMe или MASME написать и в OBJ
а потом оттуда ... но енто ...

function MaxCombo(N: Word) : Word;assembler еще одна поправка
asm
mov dx,ax
mov ecx,16 --- есх 32-х битный да и зачем ?? ты все рано значение для шетчика пихаеш 16 а может быть 32 ??
@1:
ror dx,1
cmp ax,dx
jb @2
mov ax,dx
@2:
loop @1
end;

да и к томуже по его словам
N (1<=N<=65535).

и не нужна 32 битная математика .65535= 16 бит


Anatoly Podgoretsky   (2002-03-31 19:06:00) [34]

Вот если бы не приходилось вытягивать, что именно нужно, была бы красота


Rooman   (2002-03-31 18:25:00) [35]

Вот на все бы вопросы такие ответы были - красота! :)))


Rooman   (2002-03-31 18:23:00) [36]

да, Анатолий, ecx не заметил... опечаточка вышла...


Anatoly Podgoretsky   (2002-03-31 17:16:00) [37]

Rooman © (31.03.02 16:14)
Я не был уверен, что допустимы асм коды, но могу поправить код, а то он с ошибкой, не учитывается 32 битная математика.
Во первых превратив его в функцию

function MaxCombo(N: Word) : Word;
asm
mov dx,ax
mov ecx,16
@1:
ror dx,1
cmp ax,dx
jb @2
mov ax,dx
@2:
loop @1
end;


JibSkeart   (2002-03-31 16:32:00) [38]

Rooman ©
Угу точно
Ну немного опередил меня ... :))


Rooman   (2002-03-31 16:14:00) [39]

в ассемблере есть инструкции

ROR register,count - циклическое вращение вправо
ROL register,count - циклическое вращение влево

в связи с этим код Анатолия Подгорецкого упрощается:

var NNN:word;
...
asm
mov ax,NNN
mov dx,ax
mov cx,16
@1:
ror dx,1
cmp ax,dx
jb @2
mov ax,dx
@2:
loop @1
mov NNN,ax
end;

коротко и быстро!


JibSkeart   (2002-03-31 16:06:00) [40]

Да а нужно ли все енти переводы оттуда туда
всмысле из десятичной в двоичную и ....


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо