Kezdőoldal » Számítástechnika » Programozás » Mi lehet ezzel a kóddal a...

Krisz2 kérdése:

Mi lehet ezzel a kóddal a probléma (c++)?

Figyelt kérdés

Mivel most tanulom a nyelvet valószínűleg tök egyszerű a megoldás csak én nem jövök rá.Lényeg hogy azt próbálja a program eldönteni hogy a szám prím-e de mindig az jön ki hogy nem.


int main()

{

int x,n,b = 0;

std::cin >> n;

for(x = 2;n%x != 0;x++)

if(x > n)

{

std::cout << "Prím";

b = 1;

}

if(b != 1)

std::cout << "Nem prím";

}



2013. márc. 28. 20:06
1 2
 1/11 iostream ***** válasza:
Ez a ciklus így addig megy, amíg nem osztója a számnak x. x == n-nél mindenképp ki fogsz szállni, tehát a ciklusban lévő vizsgálatnak semmi értelme, az x > n sosem áll fenn. n pontosan akkor prím, ha x == n a végén.
2013. márc. 28. 20:14
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:
Ez több mind valószínű hogy igaz de az a baj hogy ettől pl a 17 re még mindig azt írja hogy nem prím
2013. márc. 28. 20:21
 3/11 anonim ***** válasza:

for után az if köré még egy {}?

Vagy a for ciklusban tesztelj másképp?

for (x=2; x<n; x++) { if (n%x != 0) b=1; }

if (b=1) {;} //Prím

else {;} // Nem prím

2013. márc. 28. 20:30
Hasznos számodra ez a válasz?
 4/11 iostream ***** válasza:
Nem értem, mit nem lehetett érteni azon, amit írtam. A ciklus mindenképp ki fog lépni, sosem fog bemenni abba a kódba, ami azt írná ki, hogy prím. Ezt írtam le, valamint egy segítséget, hogy a ciklus lefutása után mikor mondhatod azt, hogy n prím volt. Ezek után mi nem megy még?
2013. márc. 28. 20:37
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:
A probléma az hogy hiába írom át úgy ahogy mondta mert attól még nem lesz jó, viszont egy alap problémára jöttem rá ha pl megadok 20 azt elosztja 2 vel a maradék nulla így a b-t nem álltja 1 re viszont mikor elosztja hárommal akkor már nem nulla a maradék így a b-t átállítja így a 20 at is prímnek veszi
2013. márc. 28. 20:44
 6/11 anonim ***** válasza:

Irok neked 1 prim programot mert unatkozom :D.

#include<iostream>

using namespace std;/*ez azért van itt h ne keljen a cin cout elé irni a std::*/

int main()

{

int szam,fele,oszto;

cin >> szam;

if(szam>2)

{

fele=szam/2;

for(oszto=2;oszto<=fele;oszto++)

{

if(szam%oszto==0)

2013. márc. 28. 21:12
Hasznos számodra ez a válasz?
 7/11 A kérdező kommentje:

kösz de közben én is megoldottam :D így néz ki :

#include <iostream>


int main()

{

int x,n,b = 0;

std::cin >> n;

for(x = 2;x < n;x++)

if(n%x == 0){b = 1;}

if(b == 1)

std::cout << "Nem Prim";

else

std::cout << "Prim";

}

2013. márc. 28. 21:13
 8/11 anonim ***** válasza:

//Bocs az elöbb hamar küldtem

#include<iostream>

using namespace std;/*ez azért van itt h ne keljen a cin cout elé irni a std::*/

int main()

{

int szam,fele,oszto,db=0;

cin >> szam;

if(szam>2)

{

fele=szam/2;

for(oszto=2;oszto<=fele;oszto++)

{

if(szam%oszto==0)

{

db++;

}

}

if(db==0)

cout << "Prím";

else

cout << "Nem prím";

}

else

cout<<"Nem prim";

}

2013. márc. 28. 21:17
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:
A tied majdnem helyes probáltad 1-re vagy 0-ára?
2013. márc. 28. 21:20
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:

Gyorsítási lehetőségek:


-Elég a szám gyökéig nézelődni (lefele kerekítve)


-Ha már van egy osztója, tuti nem prím -> kiléphetünk a ciklusból


-Csak a páratlan számokat (és a kettőt) érdemes vizsgálni


-Ha véletlen megszámolni kell vmeddig a prímeket, érdemes eltárolni (egy darabig) -> nem kell az összes páratlan számot végignézni

2013. márc. 28. 23:07
Hasznos számodra ez a válasz?
1 2

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!