Другие языки программирования и технологии

как вывести на экран из массива чисел минимальное число, стоящие на нечетных позициях?

дан массив чисел, надо вывести минимальное среди всех, и оно должно стоять на нечетной позиции, какой командой выводится минимальное число?
и какой командой определить позицию чисел?
> какой командой выводится минимальное число?
и какой командой определить позицию чисел?
Вы наверное так шутите. Одной командой в ассемблере не обойтись. (Ещё остаётся вопрос: в каком ассемблере)

.686
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib

Random proto

.stack 100h

.data
Msg1 db 'Дан массив A[%i]:',13,10,0
Msg2 db 13,10,10,'Минимальный элемент в нечётной позиции: A[%i] = %0.2f',13,10
    db 'Для завершения работы нажмите любую клавишу... ',0
Frmt db '%8.2f',0
Const1 dq 199.98
Const2 dq 99.99

.data?
Seed dd ?
IntBuf dd ?
Len dd ?
Sum dd ?
Array dd ?

.code
N90978173:
    rdtsc
    mov Seed,eax
    finit
    fstcw word ptr IntBuf
    or word ptr IntBuf,0C00h
    fldcw word ptr IntBuf
    invoke Random
    mov dword ptr IntBuf,91
    fimul IntBuf
    fistp Len
    add dword ptr Len,10
    mov eax,Len
    shl eax,3
    invoke VirtualAlloc,NULL,eax,MEM_COMMIT,PAGE_READWRITE
    mov Array,eax
    invoke crt_printf,addr Msg1,Len
    mov ecx,Len
    mov ebx,Array
    xor esi,esi
@@:
    push ecx
    invoke Random
    fmul Const1
    fsub Const2
    fstp qword ptr [ebx+esi*8]
    invoke crt_printf,addr Frmt,dword ptr [ebx+esi*8],dword ptr [ebx+esi*8+4]
    inc esi
    pop ecx
    loop @B

    xor edi,edi
    mov esi,2
    mov eax,Len
    mov ecx,eax
    and eax,1
    shr ecx,1
    add ecx,eax
    dec ecx
FindMin:
    fld qword ptr [ebx+edi*8]
    fld qword ptr [ebx+esi*8]
    fucomip st,st(1)
    ffree st
    jae @F
    mov edi,esi
@@:
    add esi,2
    loop FindMin

    mov eax,edi
    inc eax
    invoke crt_printf,addr Msg2,eax,dword ptr [ebx+edi*8],dword ptr [ebx+edi*8+4]
    invoke crt__getch
    invoke VirtualFree,Array,NULL,MEM_RELEASE
    invoke ExitProcess,NULL

Random proc uses eax edx
    local Const :qword
    local Buff :qword
    mov eax,3DFh shl 20
    mov dword ptr Const+4,eax
    xor eax,eax
    mov dword ptr Const,eax
    mov dword ptr Buff+4,eax
    mov eax,Seed
    mov edx,08088405h
    mul edx
    inc eax
    mov Seed,eax
    mov dword ptr Buff, eax
    fild Buff
    fld Const
    fmul
    ret
Random endp

    end N90978173

ВК
Валентин Кирюхин
51 590
Лучший ответ
язык какой? запускай счетчик, через if отсеивай, потом минимум находи

Похожие вопросы