- Nem érdemes hűtést cserélni a GeForce RTX 5090 Founders Edition VGA-n?
- A WCCFtech szerint egyelőre előzi az AMD az NVIDIA-t a kvantumszámítógépeknél
- Műholdas AI chippel fedné le a bolygót a Samsung
- Gyors hordozható SSD-ket villantott a Corsair
- Számítógépház-választás 2025: airflow, kompatibilitás és hibák
-
PROHARDVER!

Új hozzászólás Aktív témák
-
Sceemz
újonc
Sziasztok!
A segítségeteket szeretném kérni, jelenleg egy programot írok Visual Studioban (x86 assembly). A program lényege, hogy:"Készítsen programot, ami a felhasználó által megadott elemszámú, véletlen számokkal feltöltött tömbben, megadja a következő statisztikai eredményeket: átlag, medián, szórás. Az eredményeket írja ki a képernyőre. Az elemszám megadását billentyűzetről kell bekérni."
Jelenleg a kódom nagy része már kész van és az átlag, szórás számítás tökéletesen működik, visszont a medián számítás részére nem találok megoldást, ha esetleg valaki tudna benne segíteni azt nagyon meg köszöném.
//A változók létrehozásaint N, temp;int a;const char* hun = "Hun";//Setlocale_asm{mov temp, esp;//setlocale(LC_ALL, "Hun");//"Hun" -> LC_ALLpush hun;push LC_ALL;call dword ptr setlocale;mov esp, temp;}//Véletlen szám véletlenítése_asm{mov temp, esp;push 0;call dword ptr time;push eax;call dword ptr srand;mov esp, temp;}//N bekéréseconst char* be_N = "Kérem adja meg a tömb elemszámát: ";const char* intformat = "%d";_asm{mov temp, esp;rossz_N:push be_N;call printf;lea eax, N;push eax;push intformat;call scanf;//N vizsgálata, hogy pozítiv-ecmp N, 0;jle rossz_N;mov esp, temp;}// Az N elemű tömb létrehozása és feltöltése véletlen számokkalint* A = new int[N];//ESP mentő változóint saveESP;_asm{mov saveESP, ESP;}//Ciklus a feltöltéshez_asm{mov esi, 0;ciklus_feltölt:call rand; //eax->be elteszi a rand() értékétmov edx, 0;mov ecx, 1000; // a legnagyobb kigenerált szám 1000 lehetdiv ecx;add edx, 1; // a legkisebb kigenerált szám az 1 lehetmov a, edx;mov eax, esi;mov ebx, 4;mul ebx;mov ebx, eax;mov edx, ebx;mov ecx, dword ptr A;add ebx, ecx;mov eax, a;mov dword ptr[ebx], eax;//ciklus végeinc esi;cmp esi, N;jl ciklus_feltölt;}const char* tomkiiras = "A feltöltött tömb: ";const char* sortores = "\n";const char* szam = "%d, ";int ciklusValtozo;// A feltöltött tömb kiírása ellenőrzésképen_asm{push tomkiiras;call printf;pop tomkiiras;// for ciklusmov eax, N; // N alkalommal fut le a ciklus -> ciklusváltozómov ciklusValtozo, eax;mov esi, 0; //tömbindexhezciklus:// tömb elemeinek kiírása//memóriacím kimentése változóba a dinamikus tömb eléréséhez:mov ebx, dword ptr[A];add ebx, esi; //eltolás hozzáadása a pontos helyhezpush dword ptr[ebx]; //érték verembe helyezéspush szam;call printf;add esi, 4; //int típus 4 bájtospop szam;pop dword ptr[ebx];// tömb elemeinek kiírásának végedec ciklusValtozo;cmp ciklusValtozo, 0;jne ciklus; // ha nem egyenlő az ciklusValtozo tartalma 0-val akkor folytatódi a ciklus// for ciklus vegepush sortores;call printf;pop sortores;}// Átlag kiszámításafloat osszeg = 0.0;float atlag = 0.0;//A tömb átlaga_asm{mov esi, 0;ciklus_atlag://index kiszámításmov eax, esi;mov ebx, 4; // mivel int típusú tömbünk van, 4 byte méretű elemekkel dolgozunkmul ebx;mov ebx, eax; //i*4 kerül az ebx-be//-bmov edx, ebx;mov ecx, dword ptr A;add ebx, ecx;fild dword ptr[ebx]; // fild az integer értéket betölti a FPU regiszterbefld osszeg;fadd;fstp osszeg;//ciklus végeinc esi;cmp esi, N;jl ciklus_atlag;fld osszeg;fidiv N;fstp atlag;}// Átlag kiíratásaconst char* atlagText = "Átlag: ";const char* atlagFormat = "%.1f\n";_asm{mov eax, dword ptr[atlagText];push eax;call printf;add esp, 4;fld atlag; // az átlag értékének betöltése a lebegőpontos regiszterbesub esp, 8; // hely foglalása a veremben a kiíratáshozfstp qword ptr[esp]; // az átlag értékének a veremre helyezésepush dword ptr[atlagFormat];call printf;add esp, 12; // a hely felszabadítása a veremben}// Medián kiszámításafloat median;_asm{mov ecx, N; // ecx-be betöltjük a tömb méretétmov ebx, 2; // ebx-be betöltjük az 2-es értéket, hogy megkaphassuk a tömb középső elemétcdq; // eax regisztert bővíti edx regiszterrelidiv ebx; // az N-t osztjuk 2-vel, az eredmény az eax-ben lesz, a maradék pedig az edx-benmov edx, 0; // az edx-t nullázzuk, hogy ne maradjon benne az osztás eredményecmp edx, 0; // összehasonlítjuk a maradékot 0-val, hogy megállapítsuk, páros vagy páratlan a tömb méreteje paros_meret; // ha a maradék 0, akkor a tömb mérete páros// Ha a tömb mérete páratlan, a medián az N/2. elem leszmov ebx, N; // ebx-be betöltjük a tömb méretétmov eax, ebx; // az N-t mozgatjuk az eax-besar eax, 1; // az N-et osztjuk 2-vel, az eredmény az eax-ben leszmov ebx, eax; // az eredményt áttesszük a ebx-bemov edx, 0; // az edx-t nullázzukmov eax, dword ptr A[ebx * 4]; // az N/2. elemet betöltjük az eax-bejmp kiir; // ugorjunk a kiíratáshozparos_meret:// Ha a tömb mérete páros, a medián az N/2. és (N/2)+1. elem átlagamov ebx, N; // ebx-be betöltjük a tömb méretétmov eax, ebx; // az N-t mozgatjuk az eax-besar eax, 1; // az N-et osztjuk 2-vel, az eredmény az eax-ben leszmov ecx, eax; // az eredményt áttesszük a ecx-beadd eax, 1; // az N/2-hez hozzáadjuk 1-et, az eredményt az eax-be tesszükmov edx, 0; // az edx-t nullázzukmov ebx, dword ptr A[ecx * 4]; // az N/2. elemet betöltjük a ebx-beadd ebx, dword ptr A[eax * 4]; // az (N/2)+1. elemet hozzáadjuk a ebx-hezmov eax, ebx; // az eredményt áttesszük az eax-besar eax, 1; // az összeget osztjuk 2-vel, az eredmény az eax-ben leszkiir:movsd median, xmm0; // az eredményt áttesszük a median változóba}// Medián kiíratása:cout << "Medián: " << fixed << setprecision(2) << median << endl;// Szórás kiszámításafloat standardDeviation = 0.0;float variance = 0.0;int ezzelosztunk = N; // Módosítás: az ezzelosztunk változó értéke N lesz, mert a szórás számításánál N-el osztunk, nem N-1-gyel_asm{// for ciklusmov eax, N; // N alkalommal fut le a ciklus -> ciklusváltozómov ciklusValtozo, eax;mov esi, 0; //tömbindexhezszoras_ciklus:mov ebx, [A];add ebx, esi; //eltolás hozzáadása a pontos helyhezfild[ebx];fld atlag;fsub st(1), st(0); // kivonjuk a generált számból az átlagotfxch st(1); // st(1)-ben lévő eredményt átrakjuk st(0)-bafstp st(1); // st(1)-ben lévő értéket kiszedjük (töröljük)fmul st(0), st(0); // st(0)-ban lévő értékét megszorozzuk önmagával (négyzetre emelés)fadd variance; // a variance-hez hozzáadjuk az eredménytfstp variance; // az eredményt elmentjük a variance-baadd esi, 4; //int típus 4 bájtosdec ciklusValtozo;cmp ciklusValtozo, 0;jne szoras_ciklus; // ha nem egyenlő az ciklusValtozo tartalma 0-val akkor folytatódi a ciklus// ciklus végefld variance; // betöltjük st(0)-ba a variance változó értékétfidiv ezzelosztunk; // elosztjuk az st(0)-ban lévő értéket N-nelfsqrt; // gyökvonásfstp standardDeviation; // az st(0)-ban lévő értéket eltároljuk a standardDeviation változóban}// Szórás kiíratása:const char* standardDeviationText = "Szórás: ";const char* standardDeviationFormat = "%.1f\n";_asm{mov eax, dword ptr[standardDeviationText];push eax;call printf;add esp, 4;fld standardDeviation; // a szorás értékének betöltése a lebegőpontos regiszterbesub esp, 8; // hely foglalása a veremben a kiíratáshozfstp qword ptr[esp]; // a szórás értékének a veremre helyezésepush dword ptr[standardDeviationFormat];call printf;add esp, 12; // a hely felszabadítása a veremben}delete[] A; // Dynamikusan allo tomb memoria felszabaditasareturn 0;}
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Hajlított Dell 34"-os 3k-s monitor kiárusítás!!! AkciÓÓ!
- Félmoduláris minőségi Corsair TX750M tápegység olcsón!
- Zalman Z3 PLUS alsó tápos, plexi oldalú minőségi ATX ház! AkciÓÓ
- Asus F15 FX506HE 15.6" FHD IPS i5-11400H RTX 3050Ti 16GB 512GB NVMe magyar vbill gar
- Meta quest 2 128GB, KIWI akkumulátoros fejpánttal.
- Telefon felvásárlás!! Samsung Galaxy S23/Samsung Galaxy S23+/Samsung Galaxy S23 Ultra
- AKCIÓ! Apple Studio Display 27 5K Nanotexturált üveg monitor garanciával hibátlan működéssel
- Vadiúj garanciás kèszleten lèvő lapok! Kamatmentes rèszletre is!
- Alkalmi ár! Gamer Notebook! Acer Nitro 15 - I7 11800H / RTX 3060 / 16GB DDR4 / 512 SSD + 1TB HDD
- BESZÁMÍTÁS! MSI H310M i5 9500 16GB DDR4 120GB SSD 2TB HDD RTX 2060 Super 8GB ÚJ Zalman T4 Plus 600W
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő




