Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - crivello di eratostene
Forum - C/C++ - crivello di eratostene

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Questo topic è stato chiuso dal moderatore

dov'è che sbaglio secondo voi??

Codice sorgente - presumibilmente C++

  1. //intestazione...
  2.  
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. const int Max = 1000;//costante di riferimento per l'array A[].
  8.  
  9. int leggi(int [], int &, int); //prototipo funzione leggi.
  10.  
  11. int ordina(int [], int); //prototipo funzione ordina.
  12.  
  13. int crivello(int [], int &);//prototipo funzione crivello.
  14. //MAIN--------------------------------------------------------------
  15. int main ()
  16. {
  17.     int n, A[Max], idimA = 0;
  18.    
  19.     cout << "inserisci un numero. \n\n";
  20.    
  21.     cin >> n;
  22.    
  23.     leggi(A, idimA, n);
  24.    
  25.     crivello(A, idimA);
  26.    
  27.     cout << "la sequenza dei numeri primi contenuti tra l'unita' e il numero inserito e':\n\n\n";
  28.    
  29.     for(int i = 0; i < idimA; i++)
  30.     cout << A[i] << "   ";
  31.     cout << endl << endl;
  32.    
  33.    
  34.     system("pause");
  35.     return 0;
  36. }    
  37. //------------------------------------------------------
  38. //funzione che applica il concetto del crivello di Eratostene!
  39. //toglie i multipli dei numeri primi lasciando solo quest'ultimi.
  40. //(lavora sui numeri compresi tra l'unità e il numero inserito).
  41. int crivello(int A[], int & idimA)
  42. {
  43.     for (int i = idimA - 1; i >= (idimA - 1)/2; i--){
  44.        for(int z = 0; z <= (idimA - 1)/2; z++)
  45.         if (A[i] % A[z] == 0 && A[i] != A[z]){
  46.                 A[i] = 10000;
  47.                 ordina(A, idimA);
  48.                 idimA--;
  49.                 break;
  50.             }        
  51.        }
  52.     return 0;
  53. }  
  54. //------------------------------------------------------
  55. //funzione che inserisce nell'array A i numeri che vanno da 2 al numero n inserito da tastiera.
  56. int leggi(int A[], int & idimA, int n)
  57. {
  58.  
  59.     for (int i = 0, z = 2; z < n; i++, z++)
  60.     {
  61.          A[i] = z;  
  62.          idimA++;
  63.  
  64.    }
  65. return 0;
  66. }  
  67.  
  68. //--------------------------------------------------------
  69. //funzione che ordina l'array in modo crescente.
  70. int ordina(int A[], int idimA)
  71. {
  72.     int temp = 0;
  73.    
  74.     for (int z = 0; z < idimA; z++)
  75.         for (int i = 1; i <= idimA; i++)
  76.            
  77.            if (A[i - 1] > A[i]){
  78.              
  79.               temp = A[i];
  80.               A[i] = A[i - 1];
  81.               A[i - 1] = temp;
  82.       }
  83.      
  84.       return 0;
  85.      
  86. }



grazie per l'aiuto....questo forum mi piace un casino :rofl:

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:08
Sabato, 28/11/2009
ho risolto.
grazie comunque....

il codice giusto è:

Codice sorgente - presumibilmente C++

  1. //intestazione...
  2.  
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. const int Max = 1000;//costante di riferimento per l'array A[].
  8.  
  9. int leggi(int [], int &, int); //prototipo funzione leggi.
  10.  
  11. int ordina(int [], int); //prototipo funzione ordina.
  12.  
  13. int crivello(int [], int &);//prototipo funzione crivello.
  14. //MAIN--------------------------------------------------------------
  15. int main ()
  16. {
  17.     int n, A[Max], idimA = 0;
  18.    
  19.     cout << "inserisci un numero. \n\n";
  20.    
  21.     cin >> n;
  22.    
  23.     leggi(A, idimA, n);
  24.    
  25.     crivello(A, idimA);
  26.    
  27.     cout << "la sequenza dei numeri primi contenuti tra l'unita' e il numero inserito e':\n\n\n";
  28.    
  29.     for(int i = 0; i < idimA; i++)
  30.     cout << A[i] << "   ";
  31.     cout << endl << endl;
  32.    
  33.    
  34.     system("pause");
  35.     return 0;
  36. }    
  37. //------------------------------------------------------
  38. //funzione che applica il concetto del crivello di Eratostene!
  39. //toglie i multipli dei numeri primi lasciando solo quest'ultimi.
  40. //(lavora sui numeri compresi tra l'unità e il numero inserito).
  41. int crivello(int A[], int & idimA)
  42. {
  43.     for (int i = idimA - 1; i >= 2; i--){
  44.        for(int z = 0; z <= (idimA - 1)/2; z++)
  45.         if (A[i] % A[z] == 0 && A[i] != A[z]){
  46.                 A[i] = 10000;
  47.                 ordina(A, idimA);
  48.                 idimA--;
  49.                 break;
  50.             }        
  51.        }
  52.     return 0;
  53. }  
  54. //------------------------------------------------------
  55. //funzione che inserisce nell'array A i numeri che vanno da 2 al numero n inserito da tastiera meno uno.
  56. int leggi(int A[], int & idimA, int n)
  57. {
  58.  
  59.     for (int i = 0, z = 2; z < n; i++, z++)
  60.     {
  61.          A[i] = z;  
  62.          idimA++;
  63.  
  64.    }
  65. return 0;
  66. }  
  67.  
  68. //--------------------------------------------------------
  69. //funzione che ordina l'array in modo crescente.
  70. int ordina(int A[], int idimA)
  71. {
  72.     int temp = 0;
  73.    
  74.     for (int z = 0; z < idimA; z++)
  75.         for (int i = 1; i <= idimA; i++)
  76.            
  77.            if (A[i - 1] > A[i]){
  78.              
  79.               temp = A[i];
  80.               A[i] = A[i - 1];
  81.               A[i - 1] = temp;
  82.       }
  83.      
  84.       return 0;
  85.      
  86. }



ciao hedo :rofl:

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 10:19
Sabato, 28/11/2009
ciao :)

PM
Avatar
Federico Magni (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/02/2019

Segnala al moderatore
Postato alle 11:28
Martedì, 19/02/2019
salve a tutti, stavo provando il programma e ho notato che non funziona nell'esecuzione del programma inserendo 50 mi da un errore, elenco di seguito le stringhe che la console emette:

//console
inserisci un numero.

50

la sequenza dei numeri primi contenuti tra l'unita' e il numero inserito e':


-858993460   2   3   4   5   6   7   8   9   10   11   13   17   19   23   29   31   37   41   43   47

Press any key to continue . . .

//

come vedete da un errore sia sul primo valore che non so come mai esiste visto che il crivello dovrebbe partire dal 2 (non sono sicuro e non vorrei sbagliarmi) e inoltre stampa anche dei numeri non primi come 4, 6, 8, 10
Allego il link da cui ho visto il funzionamento del crivello aimè wikipedia...

https://it.wikipedia.org/wiki/Crivello_di_Eratostene#/media ...

attendo risposta
cordiali saluti,
- Federico Magni

Ultima modifica effettuata da Federico Magni il 19/02/2019 alle 11:31
PM
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:15
Martedì, 19/02/2019
Testo quotato

Postato originariamente da Federico Magni:
salve a tutti, stavo provando il programma e ho notato che non funziona nell'esecuzione del programma inserendo 50 mi da un errore, elenco di seguito le stringhe che la console emette:

//console
inserisci un numero.

50

la sequenza dei numeri primi contenuti tra l'unita' e il numero inserito e':


-858993460   2   3   4   5   6   7   8   9   10   11   13   17   19   23   29   31   37   41   43   47

Press any key to continue . . .

//

come vedete da un errore sia sul primo valore che non so come mai esiste visto che il crivello dovrebbe partire dal 2 (non sono sicuro e non vorrei sbagliarmi) e inoltre stampa anche dei numeri non primi come 4, 6, 8, 10
Allego il link da cui ho visto il funzionamento del crivello aimè wikipedia...

https://it.wikipedia.org/wiki/Crivello_di_Eratostene#/media ...

attendo risposta
cordiali saluti,
- Federico Magni



Attendi risposta a cosa? Un post del 2009? Su un esercizio scolastico postato da qualcuni che magari nemmeno frequenta più il forum da anni? Hai letto il regolamento?

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:00
Mercoledì, 20/02/2019
Testo quotato

Postato originariamente da Federico Magni:

salve a tutti



A parte il fatto che non si riesumano i thread di 10 anni fa, avresti potuto controllare da solo che il problema era nell'ordinamento, ovvero nella for

for (int i = 1; i <= idimA; i++)

che deve essere

for (int i = 1; i < idimA; i++)

A parte questo, con il SECONDO codice, inserendo 50, non ho i tuoi risultati (4, 6 ...) ma quelli corretti ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
Federico Magni (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/02/2019

Segnala al moderatore
Postato alle 15:33
Giovedì, 21/02/2019
Testo quotato

Postato originariamente da TheDarkJuster:
Testo quotato

Postato originariamente da Federico Magni:
salve a tutti, stavo provando il programma e ho notato che non funziona nell'esecuzione del programma inserendo 50 mi da un errore, elenco di seguito le stringhe che la console emette:

//console
inserisci un numero.

50

la sequenza dei numeri primi contenuti tra l'unita' e il numero inserito e':


-858993460   2   3   4   5   6   7   8   9   10   11   13   17   19   23   29   31   37   41   43   47

Press any key to continue . . .

//

come vedete da un errore sia sul primo valore che non so come mai esiste visto che il crivello dovrebbe partire dal 2 (non sono sicuro e non vorrei sbagliarmi) e inoltre stampa anche dei numeri non primi come 4, 6, 8, 10
Allego il link da cui ho visto il funzionamento del crivello aimè wikipedia...

https://it.wikipedia.org/wiki/Crivello_di_Eratostene#/media ...

attendo risposta
cordiali saluti,
- Federico Magni



Attendi risposta a cosa? Un post del 2009? Su un esercizio scolastico postato da qualcuni che magari nemmeno frequenta più il forum da anni? Hai letto il regolamento?


ciao ho letto il regolamento posso accettare che magari non ho rispettato le richieste dell'admin riguardo intestazione ecc ecc. non ho obbligato nessuno a rispondermi, sul fatto del punto "non facciamo compiti a nessuno" beh sono un ragazzo che studia da solo e sta cercando di imparare qualcosa ho trovato questo esercizio su un libro di inforatica per scuole superiori del 2009, ho chiesto un aiuto perche visto il mio codice che non funzionava ho provato questo, avendo quell'errore e non capendone l'origine, sul fatto di riesumare un ost di 9 anni fa quale roblema c'era? finché è presente nel forum perche non posso usarlo?

buon pomeriggio,
cordiali saluti
-Federico Magni

PM
Avatar
Federico Magni (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/02/2019

Segnala al moderatore
Postato alle 15:34
Giovedì, 21/02/2019
Testo quotato

Postato originariamente da TheDarkJuster:
Testo quotato

Postato originariamente da Federico Magni:
salve a tutti, stavo provando il programma e ho notato che non funziona nell'esecuzione del programma inserendo 50 mi da un errore, elenco di seguito le stringhe che la console emette:

//console
inserisci un numero.

50

la sequenza dei numeri primi contenuti tra l'unita' e il numero inserito e':


-858993460   2   3   4   5   6   7   8   9   10   11   13   17   19   23   29   31   37   41   43   47

Press any key to continue . . .

//

come vedete da un errore sia sul primo valore che non so come mai esiste visto che il crivello dovrebbe partire dal 2 (non sono sicuro e non vorrei sbagliarmi) e inoltre stampa anche dei numeri non primi come 4, 6, 8, 10
Allego il link da cui ho visto il funzionamento del crivello aim&amp;Atilde;&amp;uml; wikipedia...

https://it.wikipedia.org/wiki/Crivello_di_Eratostene#/media ...

attendo risposta
cordiali saluti,
- Federico Magni



Attendi risposta a cosa? Un post del 2009? Su un esercizio scolastico postato da qualcuni che magari nemmeno frequenta pi&Atilde;&sup1; il forum da anni? Hai letto il regolamento?


ciao ho letto il regolamento posso accettare che magari non ho rispettato le richieste dell'admin riguardo intestazione ecc ecc. non ho obbligato nessuno a rispondermi, sul fatto del punto non facciamo compiti a nessuno beh sono un ragazzo che studia da solo e sta cercando di imparare qualcosa ho trovato questo esercizio su un libro di inforatica per scuole superiori del 2009, ho chiesto un aiuto perche visto il mio codice che non funzionava ho provato questo, avendo quell'errore e non capendone l'origine, sul fatto di riesumare un post di 9 anni fa quale è il problema ? finche il post è presente nel forum perche non posso usarlo?

buon pomeriggio,
cordiali saluti
-Federico Magni

Ultima modifica effettuata da Federico Magni il 21/02/2019 alle 15:40
PM
Avatar
Federico Magni (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/02/2019

Segnala al moderatore
Postato alle 15:38
Giovedì, 21/02/2019
Testo quotato

Postato originariamente da nessuno:
Testo quotato

Postato originariamente da Federico Magni:

salve a tutti



A parte il fatto che non si riesumano i thread di 10 anni fa, avresti potuto controllare da solo che il problema era nell'ordinamento, ovvero nella for

for (int i = 1; i <= idimA; i++)

che deve essere

for (int i = 1; i < idimA; i++)

A parte questo, con il SECONDO codice, inserendo 50, non ho i tuoi risultati (4, 6 ...) ma quelli corretti ...




non capisco dove abbia sbagliato nel chiedere spiegazioni penso anche umilmente come risposto all'altro ragazzo sono anche io un ragazzo che sta cercando di imparare qualcosa e che trovando questo esercizio utile per combinare array e funzioni ho provato a farlo, nel regolamento non trovo nessun roblema con la risposta a post di 10 anni fa siccome era ancora presente nel forum ho risposto e chiesto spiegazioni.

grazie comunque dell'aiuto alla fine avevo fatto anche io un altro codice lo posto qui di seguito:

https://pastebin.com/R0qbQGvd

buon pomeriggio,
cordiali saluti
-Federico Magni

Ultima modifica effettuata da Federico Magni il 21/02/2019 alle 15:48
PM
Pagine: [ 1 2 ] Precedente | Prossimo