Max kiválasztás miért "hibázik"?
c nyelv.
#include <stdio.h>
#include <stdlib.h>
#define T 10
main()
{
int tomb[10],i;
int max=0;
srand(time(NULL));
for(i=0;i<T;i++)
{
tomb[i] = rand() %1001;
printf("%d\t",tomb[i]);
max=tomb[0];
if (tomb[i]>max)
{
max=0;
max=(tomb[i]);
}
}
printf("Legnagyobb szam : %d ",max);
}
Ennek a sornak nincs értelme a cikluson belül:
max=tomb[0];
(Pontosabban maga a parancs értelmes, de a max kiválasztást elrontja.)
Más:
max=0;
max=(tomb[i]);
A max=0 fölösleges, a zárójel is fölösleges.
Más:
Hamár létrehozhat a T konstanst az elemszám tárolására, akkor a tömb deklarálásánál is azt kéne használni, nem csak a ciklusban.
Előre szólok, hogy nem értek a c nyelvhez, de az algoritmust átlátom, és szerintem kicsit túlbonyolítod.
Na most gondold át az egészet a for-tól soronként.
max=tomb[0], vagyis a 'max' értéke a tömb 0. eleme
Utána jön a vizsgálat, hogy ha a tömb i-edik eleme nagyobb, mint a tömb 0. eleme, akkor a maxot nullázod (erre szerintem nincs szükség), és értékként a tömb i-edik elemét adod neki, mert az nagyobb, mint a korábban mért maximum érték. (zárójelre sincs szükség)
Na de itt jön a szemmel látható csavar:
a for ciklus újraindul, és beleesel abba a hibába, amibe nem kéne. Újra felveteted a max=tomb[0]-t, holott a tömb 0. elemének gyakorlatilag semmi köze a maximumhoz, ezáltal akármilyen random számot is generálsz, a 'max' változó értéke minden esetben a tömb 0. elemének értéke lesz.
Egyébként a programozás alapjainál tanulnotok kellett a legnagyobb elem megkeresésének az algoritmusát. Ha az alapján csinálod, garantált a siker.
Legnagyobb elem:
for(i..n){
HA(tomb[i]>max){
max=tomb[i]
}
}
print "Legnagyobb szam: max"
1. A main függvénynek legyen visszatérési értéke. Szóval helyesen:
int main() {
és a legvégén:
return 0;
}
2. Ha már létrehoztad a T konstanst, használd.
Például:
int tomb[T];
3. Ha egy ciklusban akarod megcsinálni az elemfeltöltést és a maximumkeresést, akkor:
- a ciklus előtt a tömb 0. elemének adsz egy véletlenszerű értéket:
tomb[0] = rand() % 1001;
és a maximum a tömb 0. eleme lesz:
max = tomb[0];
- a ciklus 1-től megy a T-1. elemig:
for (i = 1; i < T i++) {
- a cikluson belül meg ha a tömb aktuális, véletlen eleme nagyobb mint a maximum szám, akkor a maximum szám legyen egyenlő a tömb aktuális elemével
tomb[i] = rand() % 1001;
if (max < tomb[i]) {
max = tomb[i];
}
Itt lemaradt egy pontosvessző:
for (i = 1; i < T; i++) {
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!