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 | 1075 (831) | technolog |
| » | [c#] Optional parameters must appear....Oddelek: Programiranje | 893 (800) | lambda |
| » | VC# čitanje iz datoteke in shranjevanje v poljeOddelek: Programiranje | 1263 (1076) | iceurb |
| » | [C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevilOddelek: Programiranje | 3061 (2872) | snow |
| » | [C++] Optimizacija funkcije za izračun prafaktorjevOddelek: Programiranje | 2422 (2307) | Thomas |