» »

[C++] Polnjenje Arraya

[C++] Polnjenje Arraya

kunkka500 ::

Pozdravljeni,

imam en problem, ki je takšen:
Rad bi napolnil array z 10 zaporednimi praštevili ki so večja od n.

Imam že funkcijo IsPrime ki preverja ali je neko stevilo prastevilo, nastane problem pri polnjenju arraya... :(

int n = 13;
nekarray[10];

-kako zdaj teh 10 mest napolnim z 10imi zaporednimi praštevili??? :S

genesiss ::

int i = 0;
while(i<10) {
 n++;
 if(isPrime(n)) {
  nekarray[i] = n;
  i++;
 }
}

Zgodovina sprememb…

  • spremenil: genesiss ()

kunkka500 ::

Hvala za hiter odgovor, ampak nekako mi še vedno ne dela kot bi moralo...
če izpišem ta števila mi to ne vrne 10 (takojšnjih) zaporednih prašrevil ...

recimo če določim da je: int n=4; potem bi mi moral izpisati: 5, 7, 11, 13, 17, 19, 23, 29, 31, 37
to je del moje trenutne kode:

bool IsPrime(int prastevilo){  
     //Podano vecje stevilo od 1
     //Vrne true ce je prime
     //False ce ni
  
    int i;
  
    for (i=2; i<prastevilo; i++){
      
        if (prastevilo % i == 0){
                  
            return false;
        }
    }
  
    return true;  
}




int main(){

int n = 1;
int nekarray[10];


int i = 0;
while(i<10) {
 n++;
 if(IsPrime(n)) {
  nekarray[i] = n;
  i++;
 }
}


return 0;
}

genesiss ::

Meni dela. V zgornjem primeru imaš n=1.

Kako pa izpisuješ?
Kaj ti izpiše?

Zgodovina sprememb…

  • spremenil: genesiss ()

kunkka500 ::

Evo tukaj je z izpisom,... ampak jaz dobim neka čudna, zelo visoka števila (kot npr:1971364090) :S
delam napako ko izpisujem??


#include <iostream>



using namespace std;


//test za prastevila
bool IsPrime(int prastevilo){  
     //Podano vecje stevilo od 1
     //Vrne true ce je prime
     //False ce ni
  
    int i;
  
    for (i=2; i<prastevilo; i++){
      
        if (prastevilo % i == 0){
                  
            return false;
        }
    }
  
    return true;  
}




int main(){

int n = 4;
int nekarray[10];


int i = 0;
while(i<10) {
 n++;
 if(IsPrime(n) && (n >= i)) {
  nekarray[i] = n;
  i++;
  cout << nekarray[i] << ", ";
  
 }

}





system("PAUSE");
return 0;
}

genesiss ::

Ja, problem je ker izpisuješ po povečanju i-ja. To pomeni, da dostopaš do polj v tabeli ki jih še nisi napolnil in vsebujejo random vrednosti iz pomnilnika.

Rešitev:
Zamenjaj vrstici 'i++' in 'cout ...'.

Zgodovina sprememb…

  • spremenil: genesiss ()

kunkka500 ::

Oh, seveda, slepota moja 8-O HVALA!

kunkka500 ::

Ok, imam še eno kratko vprašanje... verjetno sem spet samo malo slep :S

tole zadevo hočem pretvoriti v funkcijo, ki bi jo samo klical v mainu..

int prast [9001]; 
int lowLimit = -217; 
int upLimit = 9001; 
int counter=0;
int nextlowLimit; 
if(lowLimit == 0 || lowLimit < 1){
            nextlowLimit = 2;
            }
else{
     nextlowLimit = lowLimit;
}

for(prastevilo=nextlowLimit; prastevilo <= upLimit; prastevilo++){
                  if (IsPrime(prastevilo) ){
                     prast[counter++] = prastevilo;
                  }
}
cout << "V razponu od " << lowLimit << " do " << upLimit << " je: " << counter << " prastevil." << endl;
cout << endl; 


Zadevo sem naredil takole:

int funkcijadva(int lowLimit, int upLimit, int counter){
    
int prast [9001]; //array prast
int nextlowLimit; //testni pogoj za spodnjo limito zaporedja praštevil
int prastevilo; 
    
    
if(lowLimit == 0 || lowLimit < 1){
            nextlowLimit = 2;
            }
else{
     nextlowLimit = lowLimit;
}

for(prastevilo=nextlowLimit; prastevilo <= upLimit; prastevilo++){
                  if (IsPrime(prastevilo) ){
                     prast[counter++] = prastevilo;
                  }
}    
    
} 


Vendar mi ko kličem to funkcijo
cout << "V razponu je " << funkcijadva(-217, 9001, 0) << " prastevil" << endl;

vrne napačen rezultat, v prvotni kodi pa je rezultat pravilen,...

st0n3 ::

return counter; ?
c-c-c-c


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Zaporedna praštevila nimajo rada enakih zadnjih števk

Oddelek: Novice / Znanost in tehnologija
317676 (5617) Jst
»

NUJNO!Algoritmi C++

Oddelek: Pomoč in nasveti
211954 (1216) DOOM_er
»

Digitalna evolucija (strani: 1 2 3 426 27 28 29 )

Oddelek: Znanost in tehnologija
141675389 (25558) pietro
»

kako definirtati prastevilo

Oddelek: Programiranje
143776 (3581) ooux
»

Problemi pri C++ programiranju...

Oddelek: Programiranje
363890 (3365) George

Več podobnih tem