Kezdőoldal » Számítástechnika » Programozás » Valaki megnézné, hogyan kéne...

Valaki megnézné, hogyan kéne kinéznie helyesen a kódomnak?

Figyelt kérdés

#include <stdio.h>


int main(void) {

int x, y=0, i=0, db=0, z=0;

while(scanf("%d", &x)==1) {

db++;

if(x<0) {

while(x<0) {

if(db==1) {

y=x;

}

if(x>y) {

y=x;

}

scanf("%d",&x);

}

}

else {

while(x>0) {

if(db==1) {

z=x;

}

if(x<z) {

z=x;

}

scanf("%d", &x);

}

}

}

printf("%d", y);

printf("%d", z);

return 0;

}


Egyelőre így néz ki a kódom, de nem működik megfelelően. Azt kéne csinálnia, hogy az inputra beérkező számok közül kiírja a legkisebb pozitívat és a legnagyobb negatívat. Látom, hogy hol van benne a hiba, de nem tudom hogyan kéne kiküszöbölni. Mert ugye amikor az if vagy az else ág végén beolvas egy számot, akkor utána visszaugrik az while elejére és ott újra beolvas egy számot, tehát olyankor sajnos egy szám kiesik, de én nem tudom hogyan kéne ezt rendesen megcsinálni. Illetve a feladat része lenne, hogyha nem jön negatív vagy pozitív szám, vagy egyik se akkor írjon helyettük 3 _ ilyen jelet. Hármat, ha nem jön pozitív és hármat ha nem jön negatív, tehát ha egyik se jön, akkor írjon hatot. De ehhez a részéhez még hozzá se tudtam kezdeni a feladatnak, mert még ez se működik megfelelően.



2021. okt. 3. 16:39
1 2
 1/11 anonim ***** válasza:

Elsőnek is codeshare.io -t vagy bármilyen más kód megosztót oldalt használj.

Másodjára ez egy egyszerű min, max keresés csak két tartományban. Gondolom nem használhatsz tömböket ezért próbálod így megoldani.

Próbáld meg úgy, hogy a Fő While-on belül kiveszed a scanf-eket meg a while-okat, ránézésre teljesen feleslegesek. Vagy te mit szeretnél elérni velük? Az a 3 egymásba ágyazott if megold neked mindent, (pozitívra else meg 2 if).


Azt nézd meg kézzel, hogy mi történik, ha egy pozitív számra jön egy negatív szám, és rájössz, hogy miért ugrik vissza az "elejére".

2021. okt. 3. 17:22
Hasznos számodra ez a válasz?
 2/11 Pelenkásfiú ***** válasza:

Összesen 3 int-re van szükséged: min = 0, max = 0, x.


Olvasod be a számokat és a ciklusban megvizsgálod, hogy

if (x > 0) {

__ if (min == 0 || a < min) {

____ min = a;

__}

}

else {


}


Tehát a külső if/else külön vizsgálja a pozitív és negatív számokat.

A 0-val nem kell foglalkozni, mert az nem pozitív és nem negatív.

A "min" változó értékét akkor írjük felül, ha ez a legelső pozitív számunk ("min" még a kezdeti 0-t tartalmazza) vagy a most kapott szám kisebb az eddig megállapított minimumnál.


Az else ágban ugyanilyen logikával írd meg a negatív számokra.


A végén a kiírás két külön if/else.

Ha találtunk minimumot, akkor a számot írjuk, egyébként a "___"-t.

...

2021. okt. 3. 17:25
Hasznos számodra ez a válasz?
 3/11 A kérdező kommentje:
Jó béna vagyok elismerem, de nekem még így is nehézségeim akadtak. Most mi nem jó a kódomban? [link]
2021. okt. 3. 21:56
 4/11 Pelenkásfiú ***** válasza:

A két if/else ne a while ciklusban legyen.

Minden szám beolvasásakor ki akarod írni, hogy az összes közül melyik a legkisebb/legnagyobb vagy csak a végén egyszer? :)

2021. okt. 3. 21:58
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:
Próbáltam már úgy is, de nekem valahogy akkor se működött, ha azok a cikluson kívül voltak. Csak a végén kéne egyszer kiírnia.
2021. okt. 3. 22:05
 6/11 Pelenkásfiú ***** válasza:
Lehet, hogy azért, mert a "min" és a "max" fel van cserélve a printf()-ben.
2021. okt. 3. 22:09
Hasznos számodra ez a válasz?
 7/11 A kérdező kommentje:
Tényleg, az volt a hiba. Mennyit szórakoztam én ezzel. Most már csak egy esetben van hiba. Az egyik tesztesetben a gép azt próbálta be az inputra, hogy 2 0 -2. És ott rossz eredményt írt ki. A -2-t kiírta, de az egy helyére csak a 3 _ ilyet húzta be. Ez a nulla miatt történt vagy miért? És mit kéne ellene tenni?
2021. okt. 3. 22:23
 8/11 Pelenkásfiú ***** válasza:

Nekem jól működik ezekre a számokra is.

Visszamásoltam a kódot a codeshare-re.

2021. okt. 3. 22:28
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:
Nem értem, arra az egy esetre nem működik ott egyedül. Minden másra igen. Pedig csak annyit csináltam, hogy megváltoztattam a sorrendet, mármint először kéne a negatív számot írnia, és ezért mindehol átírtam, hogy az legyen előbb, de figyeltem a relációs jelekre meg minden. Szerintem azért mert ott nulla jön be, és a nullát pont beveszi még, pozitív számokhoz és ezért az lesz a legkisebb. És mivel a min==0 akkor kell írnia ezt a _ jelet, ezért csak azt írja ki. Ezt hogyan kéne kiküszöbölnöm?
2021. okt. 3. 22:36
 10/11 Pelenkásfiú ***** válasza:

Jaa. Megvan.

if (x>o)

Ennek ne sima else ág legyen, hanem:

else if (x<0)

2021. okt. 3. 22:41
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!