Program pro prvočísla – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Program pro prvočísla – C / C++ – Fórum – Programujte.comProgram pro prvočísla – C / C++ – Fórum – Programujte.com

 

Vlákno bylo úspěšně vloženo.
Pokud sám přijdeš na řešení, nezapomeň ho sem přidat!
Daniel
~ Anonymní uživatel
74 příspěvků
15. 10. 2013   #1
-
0
-

Ahojte,

tvořil jsme zrovna program pro výpis prvočísel z intervalu. Našel jsem si podmínku na internetu a po nějaké té hodince, co jsem na to koukal a nepochopil, jak je možné, že to vůbec funguje, jsem se rozhodl napsat na forum.

Kód:

#include <iostream>

using namespace std;

int main(){

    int a = 0;
    int b = 0;
    int i, j;

    cout << "Zadejte interval:\n";
    cin >> a >> b;

    if (!cin.good() || a>b) {
        cout << "Nespravny vstup.\n";
        return 0;
    } //if (!cin.good() || a>b)

    for (i=a; i<=b; i++) {  
        for (j=2; j<=i; j++) {

            if (!(i%j)&&(i!=j)) {break;} 

            if (j==i) {cout << i << endl;} 

        } //for (int j = 2; j <= i; j++)
    } // for (int i = a; i <= b; i++)

    return 0;
} // int main()


Nechápu tu část, kde začíná druhý cyklus for a to včetně první podmínky if (!(i%j)&&(i!=j)) {break;}
, když jsem si celý program rozepsal na papír (a to několikrát) hodnoty mi vycházejí jinak, takže to trošku nechápu. Mohl by mi někdo stručně popsat (trošku jako pro blbce?) Byl bych za to hodně vděčný, už se nemám čeho chytnout.

Děkuji moc.

Daniel.

Nahlásit jako SPAM
IP: 78.102.189.–
vitamin+8
Grafoman
15. 10. 2013   #2
-
0
-

#1 Daniel 

if (
	!(i%j)	//i%j vrati zvysok po celociselnom deleni, ak je cislo i delitelne s j tak vrati 0. Nulu nasledne znagujes a dostanes 1 == true
	&&	//logicky and, musi platit podmienka na lavej strane aj pravej (v tomto pripade hore aj dole :) )
	(i!=j)	//kazde prvocislo je delitelne same sebou bez zvysku, preto je tu aj tato podmienka
)break;		//ukonci cyklus (len 1) 
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Daniel
~ Anonymní uživatel
74 příspěvků
15. 10. 2013   #3
-
0
-

#2 vitamin

Jo to by asi nějak i šlo :-) . Když tam mám break; tak to vrátí cyklus jenom na začátek a nebo vynuluje hodnoty (například jak tam mám proměnou j) na defaultní?

A ještě takový malý dotaz, kdyby na vstupu byly čísla

a=0

b=10

tak pokaždé, když jsme si to algoritmizoval na papír tak by mi podle mých výpočtu na výstup vyšly hodnoty:

2

3

4

5

6

7

8

9

10

a ne:

2
3
5
7

což by měl být správný výstup. Nějak špatně chápu ten cyklus. Pokaždé mi vyšlo že if(j == i)  .

Nějak se nemohu spokojit s tím, že to jenom funguje :-) můj nutkavý pocit to pochopit mi nedá spát :D

Nahlásit jako SPAM
IP: 78.102.189.–
KIIV
~ Moderátor
+43
God of flame
15. 10. 2013   #4
-
0
-

#3 Daniel
chapes spravne co dela ten break?

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Daniel
~ Anonymní uživatel
74 příspěvků
15. 10. 2013   #5
-
0
-

#4 KIIV
No to bude asi ten problém. Nevím přesně co dělá a nevím jestli to dělán jen při splnění podmínky (což asi jo) nebo pořád.

Nahlásit jako SPAM
IP: 78.102.189.–
KIIV
~ Moderátor
+43
God of flame
15. 10. 2013   #6
-
0
-

#5 Daniel
break vesmes predcasne ukonci cyklus ve kterem je. Jestli nevis, zda se dela podminene nebo vzdy, tak to uz asi doporucim procist si zaklady C/C++. Konkretne vetveni, bloky kodu...

Mimochodem je to docela dost neefektivni verze hledani prvocisla... 

Nahlásit jako SPAM
IP: 213.220.241.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Daniel
~ Anonymní uživatel
74 příspěvků
15. 10. 2013   #7
-
0
-

#6 KIIV
No já si zkusím o tom něco najít, protože mi spíše přijde, že se tak nějak navzájem nechápeme a to asi hlavně z důvodu, že to nedokážu správně interpretovat. Samozřejmě, děkuji za rady.

Daniel

Nahlásit jako SPAM
IP: 78.102.189.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Podobná vlákna

Program pro AVR — založil Ravien

Program pro java — založil Luke

Program pro 8051 — založil Wexter

Program v C pro PIC18F452 — založil hynman

Dávka pro program — založil Kiki Lopez

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý