Kezdőoldal » Számítástechnika » Programozás » C programozás segítség?

C programozás segítség?

Figyelt kérdés

A legnagyobb páros számot kéne kiírnom 10 beírt szám közül. Sajnos csak 0-kat kapok mindig. Mi a hiba?


#include <stdio.h>


int main() {

int numbers[10];

int largest=0;

int i;

for(i=1;i<11;i++) {

scanf("%d", &numbers[i]);

if(numbers[i]%2==0 && numbers[i]>largest)

largest=numbers[i];


}

if((largest=0)){

printf("There are no even numbers.");}

else{

printf("%d", largest);}


return 0;

}



2021. jan. 5. 23:01
1 2
 1/15 anonim ***** válasza:
100%

if((largest=0)){

sorban van a hiba, itt a largest=0 miatt 0 értéket kap, ide largest==0 kéne.

2021. jan. 5. 23:12
Hasznos számodra ez a válasz?
 2/15 A kérdező kommentje:
Köszi, innen már tovább tudtam menni. A numbers[10]-et át kellett írnom 11-re, és mivel az inputban voltak negatív számok is, ezért a largest alapértéke -999 lett, valamint az utolsó if-nél is -999. Így működik az adott input értékekkel, bár biztosan meg lehetne oldani elegánsabban is, hogy mindig jó legyen.
2021. jan. 5. 23:21
 3/15 anonim ***** válasza:
100%

A numbers[10] egy tíz elemű tömböt hoz létre, a numbers[11] 11 eleműt. Neked az előbbi kell. Azért "kellett" átírnod, mert a tömb elemeinek indexe (a szögletes zárójel közötti szám) nullától kezdődik, nem 1-től. Tehát ha a for ciklust javítod 0-tól kezdődőre, akkor működni fog.

Emlékeim szerint pl. a Visual Basic indexei kezdődnek 1-től, de a legtöbb programnyelvnél ez 0. Tehát 0-tól a 9. elemig kéred be őket. Már ha el akarod tárolni, mert ez ebben a kódban nem szükséges.

2021. jan. 5. 23:31
Hasznos számodra ez a válasz?
 4/15 anonim ***** válasza:
100%

Nem kell 11-re átírni, 0-tól 9-ig kell a ciklusnak futnia, mert a C-ben a tömb index 0-val kezdődik. És 0-tól 9 pont 10. darab szám van. Ezt érdemes megszokni, mert így mindig cipelsz magaddal egy "üres" (nem használt stb.) tömb elemet. Tehát eleve az első ciklus for (i=0; i<10; i++) formában lenne megfelelő. Ha nem szükséges a beírt számok tárolása felesleges a tömbbel vacakolni. Tehát ha csak arra vagyunk kiváncsiak, hogy a beírt számsorból melyik a legnagyobb akkor tök felesleges ezt egy tömbbe letárolni. Nyilván ha kellenek még valamire a számok akkor el lehet tárolni.

Az elegáns megoldás a largest alapértékre nem -999 hanem a legkisebb int ez fordító függően vagy -32 768 vagy -2 147 483 648 (ezt aktuálisan meg kell nézni, hogy mennyi).

2021. jan. 5. 23:32
Hasznos számodra ez a válasz?
 5/15 A kérdező kommentje:
Köszönöm a válaszokat. Hogyan lehetne ezt tömb nélkül megoldani?
2021. jan. 5. 23:59
 6/15 anonim ***** válasza:
100%

"A numbers[10]-et át kellett írnom 11-re"

Ha a feladatban 10 számot kell bekérni, akkor felesleges.


Inkább a ciklusnál az alábbi sort:

for(i=1;i<11;i++) {

cseréld le erre:

for (i = 0; i < 10; i++) {

ugyanis a C-ben - és az összes C-szerű nyelvben - a tömbök indexelése 0-ról kezdődik.


"és mivel az inputban voltak negatív számok is, ezért a largest alapértéke -999 lett, valamint az utolsó if-nél is -999"

Inkább csináld úgy, hogy a ciklusban, a szám bekérése után a largest változó értékének megadod a legelső számot:

if (i == 0)

largest = num[i];


Majd a következő feltételben leellenőrzöd, hogy az aktuális szám páros-e illetve nagyobb-e a largest értékénél - ha igen, akkor felülírod a largest értékét.


A kiíratási feltételnél pedig e helyett:

if((largest == 0)){

inkább így jársz el:

if (largest % 2 != 0) {

ha ugyanis a legnagyobb szám nem páros (vagyis például megmaradt a tömb legelső eleme), akkor nincsenek páros számok. Ha páros, akkor meg feltételezhető, hogy a legnagyobb páros szám került kiválasztásra.

2021. jan. 6. 00:04
Hasznos számodra ez a válasz?
 7/15 anonim ***** válasza:

#6-nál elírtam:

largest = num[i];

helyett

largest = numbers[i];

2021. jan. 6. 00:07
Hasznos számodra ez a válasz?
 8/15 A kérdező kommentje:

"Inkább csináld úgy, hogy a ciklusban, a szám bekérése után a largest változó értékének megadod a legelső számot:


if (i == 0)


largest = num[i];



Majd a következő feltételben leellenőrzöd, hogy az aktuális szám páros-e illetve nagyobb-e a largest értékénél - ha igen, akkor felülírod a largest értékét."


Sajnos nem jó így, ha az első szám pl. -1, az lesz a largest, de viszont pl. -4 -re már nem fogja átírni, mivel az kisebb, de a végén az lenne a jó megoldás.

2021. jan. 6. 00:17
 9/15 anonim ***** válasza:
100%
Miért is lenne a -4 nagyobb mint a -1? Teljesen helyén való ha a -1 és a -4 közül a -1-et választja mint nagyobb.
2021. jan. 6. 00:19
Hasznos számodra ez a válasz?
 10/15 anonim ***** válasza:

Tömb nélkül, ugyanúgy mint a tömbös változatnál. Most csak a "lényeges" részek


int number;

int largest=-32768;

int i;


for(i=1;i<11;i++) {

scanf("%d", &number);

if(number%2==0 && number>largest)

largest=number;

}


Esetleg a másik változattal:


int number;

int largest;

int i;

for(i=1;i<11;i++) {

scanf("%d", &number);

if (i==1) largest=number;

if(number%2==0 && number>largest)

largest=number;

}

2021. jan. 6. 00:23
Hasznos számodra ez a válasz?
1 2

További kérdések:





Minden jog fenntartva © 2024, 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!