Segitene valaki ebben a feladatban?
Nagyon elrontottam a dolgokat és tegnap jöttem rá, hogy van egy csomó beadandóm, de közben egy vizsgára kéne készülnöm. Tegnap megcsináltam a feladatok felét kb, de ez túl nehéznek bizonyult. C-ben kéne leprogramozni és tudom, hogy tömbökkel kéne megoldani, de nekem mégse megy. Legalább ha nem is egy teljes megoldást, de akkor valami segítséget kaphatnék, hogy hogyan kéne elindulnom rajta?
A feladat:
Írj programot, mely egész értéket olvas a bemenetről, és ezek közül a pozitívokat fordított sorrendben kiírja! Az adatsor végjele a 0 érték, legfeljebb 100 darab érték érkezhet (a végjel előtt).
Például: 2 -1 5 -7 -1 8 -3 0 -> 8 5 2
Lehet, hogy nem segít sokat, de elküldöm a probléma Ring-beli megoldását:
lst = [2,-1,5,-7,-1,8,-3,0]
lstSort = sort(lst)
lstSortRev = reverse(lstSort)
for n = 1 to len(lstSortRev)
if lstSortRev[n] > 0
see "" + lstSortRev[n] + " "
else
exit
ok
next
Kimenet:
8 5 2
Az én programom 100 darab számot olvas be, nem száz darab pozitív számot. A feladatban egyértelműen az szerepelt, hogy "egész értékek" jönnek a bemenetről, és hogy "az adatsor végjele a 0 érték".
A break-nek pedig konkrétan az a lényege, hogy "idő előtt" megszakítsa egy ciklus futását. A break szerintem nem csúnya, hanem hasznos, de gondolom ez ízlés dolga, nem hiszem, hogy nagy meló átírni, ha valakinek csípi a szemét.
2-es voltam.
6: "if (tomb[szamlalo]>0) szamlalo++;" csak akkor növeli a szamlalo nevű változót ha beolvasott szám tomb[szamlalo] pozítiv. Hiszen itt a szamlalo nevű változó nővelése az feltételtől függ. Azaz ha a beolvasott érték -5 akkor a tomb[szamlalo]>0 feltétel nem teljesül, a szamlalo nem növekszik, és a következő szám beolvasása ugyanabba az indexű elembe kerül mint az előző. Ld még:
"scanf("%i", &tomb[szamlalo]);" sor. Ez beolvas egy int. értéket és elhelyezi a tomb szamlalo indexű elemébe. Majd jön az a feltétel, hogy ha a beolvasott érték tomb[szamlalo]==0 akkor break-el és kiugrik a ciklusból.
Így van, de te azt írtad, hogy a program 100 pozitív számot "olvas be", ami nem igaz, mert beolvassa a negatív számokat is, csak nem tárolja el őket.
Ugyanis az a feladat, hogy a beolvasott pozitív számokat kell fordított sorrendben kiírni. Ezért, ha negatív a beolvasott szám, akkor nem kell növelni a számlálót, így a következő beolvasott szám ugyanoda fog kerülni a tömbben, felülírva a jelenlegi negatív értéket. Ha nullát olvastunk, akkor kilépünk.
Így kilépés után már elegendő vakon végiglépkedni a tömbön (visszafelé), és készen van a feladat. A szamlalo értékét persze előtte csökkenteni kell, hiszen az vagy az utolsó beolvasott nullára mutat, vagy 100 az értéke, mert végigolvastuk a tömböt.
"100 pozitív számot "olvas be", ami nem igaz, mert beolvassa a negatív számokat is, csak nem tárolja el őket."
Ez nem igaz, mert ha van benne egy rakás negatív szám akkor jóval több mint 100 db. számot olvas be. A te programod továbbra is 100 db. pozítiv számot olvas be. A negatív számokat meg eldobja ez is igaz, hogy beolvassa de bele se számolja a 100 db-ba. így nem megoldása a feladatnak.
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!