Kezdőoldal » Számítástechnika » Programozás » Hogy kell C nyelvben megoldani...

Hogy kell C nyelvben megoldani, hogy csak számokat olvassunk be, betű beírása esetén hibát jelezzen? Alul még egy probléma.

Figyelt kérdés

A fenti probléma mellett, nem tudok rájönni mi ebben a rossz.

Mutatókkal egy függvényben ellenőrzöm,hogy prim-e a szam, es ha igen növelek egy valtozot:


void prim(int *p, int *x, int *y)

{ int i;


For (i=2;i=*p-1;++i)

{ If ((*p%i)==0)

{++(*x); //azaz nem prim

Return;}

}

++(*y); // ha nem talalt olyan szamot, amivel oszthato akkor prim


}


Valamiert minden szamot nemprimnek eszlel. Mar az i-nel problema lehet, mert kiirattam a ciklus elejen, es ha a vizsgalando szam 7, akkor az nem a megadott 2 kezdőertektol indul,hanem 6-tól, raadasul el is tudja vele osztani, mert rogton utana kilep a ciklusbol? Mi lehet a problema?



2015. dec. 7. 00:24
 1/5 anonim ***** válasza:

Talán a for ciklus feltétele:

i=*p-1 <- ez itt nem lesz jó

2015. dec. 7. 01:24
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

For feltétele:

i<*p

Te ugye "nem egyenlőt" akartál írni, az viszont != lenne.

De jobb a kisebb, mert az még véletlenül, egyéb programozási hiba esetén sem szalad túl a cikluson.


Amúgy nem kell addig menni, csak a négyzetgyökéig.

Tehát a négyzetgyöktől lefelé induljanak az osztók és 2-ig menjenek.


Rettentő ronda a függvényed, mivel mindent cím szerint adsz át. Nem illik ilyet tenni, csak ha nagyon kell.

Normális függvény inkább visszatérési értékben adja vissza az eredményt.


Beolvasás: csak POZITÍV EGÉSZ számokat szeretnél beolvasni?

Mert akkor csak számjegyet fogadj el, meg a záró karaktert.

2015. dec. 7. 01:30
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Eleve az elgondolás is rossz, túl sokat csinál a függvényed.

Primséget is vizsgál és számol is, ennek két külön függvényben kellene lennie.

2015. dec. 7. 08:44
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

"i=*p-1 <- ez itt nem lesz jó"


Így van. Ez a bentmaradás feltétele, tehát akkor és addig hajtja végre a ciklusmagot, amíg ez igaz. Nálad csak akkor fut le a ciklusmag, ha első körben 2=*p-1, vagyis ha *p=3. Az összes többi számra elvileg semmit nem csinál a függvény.

A helyes megoldást feljebb már megadták.

2015. dec. 7. 15:42
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

"Így van. Ez a bentmaradás feltétele, tehát akkor és addig hajtja végre a ciklusmagot, amíg ez igaz. Nálad csak akkor fut le a ciklusmag, ha első körben 2=*p-1, vagyis ha *p=3. Az összes többi számra elvileg semmit nem csinál a függvény."


Ez pedig nem igaz. Az = értékadás nem összehasonlítás, amire te gondolsz az a ==. Az értékadás visszatérési értéke a kifejezés bal oldala. Akkor hamis ha *p-1 kiértékelve 0 (azaz p*==1), ha bármi más akkor igaz. Mivel i=2 a kezdeti érték, a kifejezés mindig igaz lesz és a ciklusból akkor lép ki ha a *p%i==0 kifejezés igazzá válik. Ha egy prímszámról van szó akkor i==*p esetén lép ki.


6.5.16.3:

An assignment expression has the value of the left operand after the assignment, but is not an lvalue. The type of an assignment expression is the type the left operand would have after lvalue conversion.


6.3.1.2:

When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.

2015. dec. 7. 18:36
Hasznos számodra ez a válasz?

Kapcsolódó 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!