Forum » Programiranje » Logični podatkovni tip
Logični podatkovni tip
black ice ::
Napisal sem program v C++, ki preveri praštevilskost 3 vnesenih števil. Program uspešno prešteje število deliteljev, zatakne se mi pri logičnih vrednostih.
//Program prebere tri števila in ugotovi ali so praštevila #include <iostream> using namespace std; //Funkcija prebere in vrne število //IZHOD: število int PreberiStevilo() { int stevilo; cout << "Vnesi stevilo: " << endl; cin >> stevilo; return stevilo; } //Funkcija preveri, če je število praštevilo //IZHOD: števec/število deliteljev int PreveriStevilo(int stevilo) { int stevec=0; //Preverjanje števila deliteljev for (int i=1; i<=stevilo; i++) { if(stevilo%i==0) stevec++; } if (stevec<=2) bool prastevilo=true; else bool prastevilo = false; cout << "Stevilo deliteljev stevila " << stevilo << " je: " << stevec << endl; return stevec; } int main() { int prvo = PreberiStevilo(); int drugo = PreberiStevilo(); int tretje = PreberiStevilo(); cout << "Prvo stevilo je: " << prvo << endl; cout << "Drugo stevilo je: " << drugo << endl; cout << "Tretje stevilo je: " << tretje << endl; PreveriStevilo(prvo); PreveriStevilo(drugo); PreveriStevilo(tretje); if (prastevilo) cout << "Vsa stevila so prastevila " << endl; else cout << "Vsa stevila niso prastevila " << endl; system ("PAUSE"); return 0; }
AndrejS ::
Zakaj imaš funkcijo PreveriStevilo tipa INT ? Bolje bi bilo da bi bilo tipa bool... in bi funkcija vrnila true v primeru (stevec manjsi ali enak 2)
Potem bi napisal pogoj takole : if (Prastevilo(prvo) and Prastevilo(drugo) and Prastevilo(tretje).
* Že dolgo nisem delal v c++ zato so možne napake v sintaksi.
Potem bi napisal pogoj takole : if (Prastevilo(prvo) and Prastevilo(drugo) and Prastevilo(tretje).
* Že dolgo nisem delal v c++ zato so možne napake v sintaksi.
black ice ::
Najlepša hvala, na to rešitev nisem pomislil.
Problem mi dela le še ta stavek. Zakaj mi izpiše (stevilo +1) - krat? Zapisal sem ga izven zanke, tako da bi se moral izpisati samo enkrat.
EDIT: Sem že uredil.
Rešitev: Razbil sem funkcijo PreveriStevilo na dve funkciji in sicer: funkcija, ki preveri število deliteljev in funkcijo, ki preveri če je število praštevilo (delitelj == 2).
cout << "Stevilo deliteljev stevila " << stevilo << " je: " << stevec << endl;
Problem mi dela le še ta stavek. Zakaj mi izpiše (stevilo +1) - krat? Zapisal sem ga izven zanke, tako da bi se moral izpisati samo enkrat.
EDIT: Sem že uredil.
Rešitev: Razbil sem funkcijo PreveriStevilo na dve funkciji in sicer: funkcija, ki preveri število deliteljev in funkcijo, ki preveri če je število praštevilo (delitelj == 2).
Zgodovina sprememb…
- spremenilo: black ice ()
dolenc ::
Kaj te tle heca ne vem, poskusi določit še oklepaje za if stavke, če ga mogoče kej sheca.
Drugače pa zgoraj lahko še tako narediš, da daš "bool prastevilo = false;" kot globalno spremenljivko in v tist pogoj samo
"if (stevec < =2)
prastevilo=true;"
S tem lahko preverjaš n- števil če katero vmes ni praštevilo, pa še potem nerabiš števila and-at ampak v primeru, da je prastevilo = true, veš da eden izmed njih ni praštevilo. Malo poenostaviš
Drugače pa zgoraj lahko še tako narediš, da daš "bool prastevilo = false;" kot globalno spremenljivko in v tist pogoj samo
"if (stevec < =2)
prastevilo=true;"
S tem lahko preverjaš n- števil če katero vmes ni praštevilo, pa še potem nerabiš števila and-at ampak v primeru, da je prastevilo = true, veš da eden izmed njih ni praštevilo. Malo poenostaviš
Spura ::
Spura ::
bool preveriStevila(int[] stevila, int n) { for (int i = 0;i < n;i++) { if (stevila[i] % 2 == 0) { return false; // en ze ni prastevilo } for (int j = 3;j*j <= stevila[i];j += 2) { if (stevila[i] % j == 0) { return false; } } } return true; }
Ne vem sicer ce je to pravilna C koda ker ze res dolgo nisem Cja delal. Ampak you got the idea. Ceprav bi bilo bolj smiselno, da bi funkcija preverjala samo eno stevilo.
black ice ::
Hvala za koristne nasvete.
Zgornji program sem malo preuredil in tako za pokušino stestiral kako dolgo šteje praštevila med 2 in 1000000. Rezultat se giblje okrog 42 sekund.
Je ta rezultat dober ali slab?
Zgornji program sem malo preuredil in tako za pokušino stestiral kako dolgo šteje praštevila med 2 in 1000000. Rezultat se giblje okrog 42 sekund.
Je ta rezultat dober ali slab?
Spura ::
ce hoces steti prastevila je hitrejsi algoritem eratostenovo sito (tega smo tudi v osnovni al srednji soli delal za stevila do 100).
Tole kar imas zdaj ali pa tudi sito lahko tudi vrzes v vec niti. Ce imas Core i7 ki je quad core s hyperthreadingom naredis 8 niti in racunas v vseh hkrati.
Tole kar imas zdaj ali pa tudi sito lahko tudi vrzes v vec niti. Ce imas Core i7 ki je quad core s hyperthreadingom naredis 8 niti in racunas v vseh hkrati.
Zgodovina sprememb…
- spremenil: Spura ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | (težava) long long v COddelek: Programiranje | 932 (688) | technolog |
» | [c#] Optional parameters must appear....Oddelek: Programiranje | 781 (688) | lambda |
» | VC# čitanje iz datoteke in shranjevanje v poljeOddelek: Programiranje | 1168 (981) | iceurb |
» | [C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevilOddelek: Programiranje | 2940 (2751) | snow |
» | [C++] Optimizacija funkcije za izračun prafaktorjevOddelek: Programiranje | 2340 (2225) | Thomas |