49
Многолетний Апельсин
31.07.14
✎
15:35
|
Вот совсем по честному без использование выделяемой памяти(по сути массива) - компилятор стековые переменные укладывает рядом.
int cur = 0;
int max = 0;
#define DO_THINGS(d) { \
printf("Введите число"#d":\n>"); \
scanf("%d",&cur); \
int diff = max - cur; \
*((&cur) + !(diff & (1<<31))) = cur;\
} \
DO_THINGS(0)
...
DO_THINGS(10)
printf("%d",max);
ну ассемблере наверное будет что-то типа
push 0x0008 ; пушаем адрес строки "%d"
push 0x0000 ; пушаем адрес cur
call scanf ; вызываем сканф
mov eax,max ; запихиваем max в еax
sub eax,[0x0000]; вычитаем из него cur
and eax,2147483648 ; вычисляем бит знака
not eax ; делаем инверсию
mul 4 ; высчитываем смещение для этого числа
mov [0x0000],eax ; перемещаем cur в нужную ячейку памяти
...
push 0x0008
push 0x0004
call printf
да |
|
65
Lama12
31.07.14
✎
17:12
|
(0) Дружище, я такие задачки с ходу решал на спектруме. Имея только руководство пользователя и голову. Учился тогда, в 8 классе.
Самому-то не стыдно такое спрашивать?
да |
|