Visualizzazione risultati 1 fino 13 di 13

Discussione: C++[funzione randomizzazione in while]

  1. #1
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito C++[funzione randomizzazione in while]

    raga devo inserire un ciclo in questa funzione che mi consenta di inserire un seme per randomizzare e mi stampi i risultati fino a quando non inserisco in input il tappo.



    Codice:
    {
    	unsigned seme;
        
    	cout<<"Il seme e':";
    	cin>>seme;
    	
    	srand(seme);
    
    		
    		
    	for(int i=0;i<20;i++){
    		
    		cout<<setw(10)<<1+rand()%6;
             
    		if(i%5==0)
    
    			cout<<endl;
    	
    
    		
    		}
    è banale ne sono sicuro ma non riesco ad integrare il for dentor il while perchè nn mi da i venti risultati ma bensi 1. :?????:


    poi volevo sapere se qualcuno sa dove ho sbagliato qui:
    questo programma deve memorizzare in un array dei numeri escludendo i multipli di 5 e poi arrivati ai 2 deve continuare su una nuovsa linea e dirmi a che posizione si trovava quel 2.

    Codice:
    #include<iostream>
    using namespace std;
    
    
    int riempiArray(int num);
    
    int main(){
    
    	int cont=0;
    	int num;
    
    	cin>>num;
    
    	while(num!=-1){
    		if(num==2){
    
    			cout<<"   "<<endl;
    		cont++;
    		else
    			cout<<riempiArray(num);}}
    		cin>>num;
    		return 0;
    
    
    		int riempiArray(int b[]){
    			const grandezzaArray=100;
                int tot;
    			int j,b[grandezzaArray]={0};
    			if(b[j]%5==0){
    
    				for(j=0;j<grandezzaArray;j++)
    				
    					tot=b[j];	
    					
    				return tot;}}}
    sono sicuro che ho fatto un casino aiutatemi.

    edito..l ho scritto ora comeme lo ricordo ma n ho inizializzato e dichiarato cont,e neppure stampato,chiedo a voi proprio di aiutarmi a farlo anche perchè io l ho cancellato e lo ricordo vagamente e mi dava 3 errori chenn risucivo a coreggere. :?????:
    Ultima modifica di Xsescott : 02-04-2005 alle ore 00.23.23
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  2. #2
    Guest

    Predefinito

    Sposto.


    Ciaooooo!!!!!!

  3. #3
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    ok sposta ma non ho capito che centra con questa sezione,secondo il mio modesto parere dato che si parla di linguaggio di program.era meglio che rimaneva li.
    cmq tu sei il mod e tu gestisci.
    ciao.
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  4. #4
    Guest

    Predefinito

    Visto che il livello 3 tratta di php, mysql, ssi e cmq di "servizi" legati ad AV (perchè disponibili) argomenti trattanti altri linguaggi (web e non) vanno postati in Plug & Pray (problemi con programmi e software)

    ;)


    Ciaooooooo!!!!!!!!

  5. #5
    Guest

    Predefinito

    azz sono sformattati tutti i codici...non ho capito neanche quello che vuoi fare :S

    Il primo funziona, a me stampa 20 risultati andando a capo ogni 5, nessun problema. Non ho capito che ci devi fare...

    Il secondo codice è un casino come formattazione...
    1) hai dichiarato int riempiArray() dentro main, la devi dichiarare fuori :) non puoi dichiarare una funzione dentro una funzione
    2) il prototipo della stessa funzione è sbagliato (int riempiArray(int num) ) invece che int riempiArray(int num[])
    3) in main() fai un solo cin e poi fai un ciclo sul numero che è sempre uguale: in questo modo andrà all'infinito. Es inserisco 1, while (1 != -1) andrà all'infinito -> devi mettere un altro cin>>
    4) num (int num) non è un array, e la cifra che inserisci non sarà mai un array (non serve dichiararlo int num[]) -> non puoi passarlo come parametro di riempiArray
    Codice:
    int riempiArray(int b[])
    {
    ...
    const grandezzaArray;
    }
    5) const non è una variabile, devi dichiararlo const int
    Codice:
    int riempiArray(int b[])
    {
    ...
    int b[grandezzaArray]={0};
    }
    6) (codice qui sopra) non puoi dichiarare nuovamente b come array, dato che hai già l'int b[] come parametro
    7) se non inizializzi j (es int j = 0) quando accedi a un elemento dell'array (cioè quando usi if(b[j]%5==0) ) il programma crasherà
    8) non ho capito il fine di questo ciclo:
    Codice:
    for(j=0;j<grandezzaArray;j++)
    tot=b[j];
    return tot;
    in questo modo tot sarà sempre il primo elemento dell'array, dato che la funzione ritorna subito tot.

    Hai le idee un po' confuse te :winkOLD:

    Forse ho capito il fine del programma, provo a farti un esempio
    Ultima modifica di xmax : 02-04-2005 alle ore 10.41.35

  6. #6
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    il problema è non sapere la sintassi in c++ in verità,specialmente sugli array.
    cmq tralasciando il fatto di aver iserito la funzione nel main,quella è l ultima cosa,l ho scritta giu veloce,io volevo sapere dove poteva essere il vero errore sulle varie dichiarazioni e su come scorrevo l'array :P


    cmq per il fatto del ciclo infinito nn sono daccordo,forse nn hai notato ma c'è il cin_>> all'interno.poi per il fatto degli array ero gia consapevole che poteva esser tuto un casino.

    allora ti spigo il mio intento qual'era....era solo per esercitazione e consisteva nell'inserire una serie di numeri che dovevano essere max 100 che poteva contenere l array,poi eliminare tutti i numeri 5,10,15,20,25 multipli di 5 in poche parole,quindi nn memorizzarli nell array e nel momento in cui andavi ad inserire in num 2 doveva saltare su una nuova linea e cominciare tutto da capo sempre facendo scorrere l array.
    alla fine inserendo il tappo deve restituirmi tutti gli insiemi di numeri preceduti dal due che ero andato a memorizzare nell array e poi dirmi in che posizione stava il due nella serie .esempio:4,6,7,4,4,2 il due qui sta nella sesta posizione.e linsieme di numeri è 4,6,7,4,4

    spero di aver spiegato tutto bene.
    grazie,spetto delucidazioni :)
    Ultima modifica di Xsescott : 04-04-2005 alle ore 02.48.24
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  7. #7
    Guest

    Predefinito

    adesso è molto più chiaro, anche riguardando il tuo codice. Il cin c'è ma è all'esterno del ciclo,

    Il metodo che hai scelto è giusto, con il while e la funzione (anche se dovrebbe fare solo un'istruzione...). Non devi però passare l'array ma il numero stesso che devi inserire e la posizione nell'array (int cont nel tuo caso), mentre l'array lo puoi dichiarare globale (fuori da qualsiasi funzione) e non hai bisogno di dichiararlo ogni volta.

    Quindi
    Codice:
    const int arraySize = 100;
    int array[arraySize] = {0};
    
    int riempiArray(int number, int count)
    {
    array[count] = number;
    }
    
    int main()
    {
    	int count = 0;
    	int number
    	while(cin>>number)
    	{
    		if (number != -1 && number%5 != 0)
    		{
    			 riempiArray(number, count)
    			 count++;
    		}
    		//ecc
    		...
    	}
    	return 0;
    }
    Poi dovresti fare una funzione stampaArray che cicla fra tutti gli elementi finchè trova un 2, memorizza la posizione del 2 in un altro numero, fa un nuovo ciclo del tipo

    Codice:
    int oldpos = 0;
    for (int i = 0....
    {
    if (array[i] == 2)
    {
    ...
    for (int i2 = oldpos; i2<i; i++)
    {
    cout<<array[i2];
    }
    int oldpos = i; // oldpos è la posizione del 2 che abbiamo appena trovato (i è la posizione attuale)
    }
    }
    Se vuoi ti posto il mio codice...

  8. #8
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    si ora piu' o meno ho capito come memorizzare l array,anche se n so come fare il resto.
    mi faresti il favore di scrivermi tu tuto il codice cosi me lo guardo per bene e vedo che cosa hai fatto.Sono sicuro che capiro' molto di + cosi'.
    grazie mille!
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  9. #9
    Guest

    Predefinito

    vualà, te l'ho commentato un po' anche
    Codice:
    const int nArraySize = 100;
    int nArray[nArraySize] = {0};
    
    // la dichiaro inline (cioè espande il codice della funzione nella chiamata alla funzione),
    // visto che è solo una espressione
    inline void riempiArray(int number, int count)
    {
    	nArray[count] = number;
    }
    
    void stampaArray()
    {
    	int oldpos = 0;
    	int count = 1;
    	for(int i = 0; i<nArraySize; i++)
    	{
    		if (nArray[i] == 2)
    		{
    			// Formatto la riga tipo: 
    			// 1) Posizione 2: 4
    			// Numeri compresi: 10 46 76 123
    			// 2) Posizione 2: 20
    			// ...
    		    cout<<count<<") "<<"Posizione 2: "<<i<<endl
    			    <<"Numeri compresi: "<<endl;
    			
    			// Scrivo tutti i numeri tra il vecchio 2 escluso (posizione: oldpos+1) 
    			// e il nuovo (posizione: i)
    			// oldpos == 0 ? oldpos : oldpos+1 è una forma abbreviata per
    			// scrivere if(oldpos == 0) i2 = oldpos; else i2 = oldpos+1;
    			for (int i2 = (oldpos == 0 ? oldpos : oldpos+1); i2<i; i2++)
    			{
    			    cout<<nArray[i2]<<"  ";
    			}
    			
    			count++;
    			oldpos = i; // vecchia posizione del 2
    			cout<<endl;
    		}
    	}
    }
    
    int main()
    {
    	int number = 0;
    	int count = 0;
    	while(cin>>number || count <= nArraySize)
    	{
    		if (number == -1 || count == nArraySize)
    		{
    			stampaArray();
    			break;
    		}
    		else if (number == 2)
    		{
    			riempiArray(number, count);
    			count++;
    			cout<<endl;
    		}
    		else if (number%5 == 0) //se vuoi puoi saltarli direttamente qua i multipli di 5...
    			continue;
    		else
    		{
    			// Il primo parametro è il numero, il secondo serve per inserire nella giusta 
    			// posizione il numero
    			riempiArray(number, count);
    			count++;
    		}
    	}
    	
    	system("pause");
    	return 0;
    }
    Ultima modifica di xmax : 04-04-2005 alle ore 21.17.20

  10. #10
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    eccomi :)..scusa ma non ho potuto collegarmi...io cmq avevo risolto cosi pero' non avevo utilizzato funzioni perchè non sapevo creare il prototipo :P

    Codice:
    #include<iostream>
    using namespace std;
    
    
         int main()
    	 {
         int cont3=0,cont2=0,j=0,s[100]={0}; 
    	 cout<<"Numero inserito nell'Array con indice:"<<j<<"=";
         cin>>s[j];
         cont2++;
    	 while(s[j]!=1)
    	 {
             if(s[j] % 5 != 0)
    		 {
    			  j++;
    		 }
    			
    		 else if(s[j] % 5 == 0)
    		 {
    			j;
    		 }
    		
    		 cout<<"Numero inserito nell'Array con indice:"<<j<<"=";
    		 cin>>s[j];
    		 cont2++;
    	 }
    			 
     
    	 while(cont3<=cont2)
    			 
    	 { 
    		 if(s[j]==1)
    		 {
    			cont2=cont2-cont3-1;
    		 } 
    				 
    		 j=cont3;
    			 
    		 if(s[j]==2)
    		
    			 cout<<"\n*-*-*";
                    
    		 int pos=j+1;
    				
    		 if(s[j]!=2)
    			 
    			 cout<<s[j]<<"-";
    			
    		 else
    			
    			 cout<<"La posizione della serie sopra e':"<<pos<<endl;
    			
    			 cont3++;
    	 }
    		     
    		return 0; 
    	 }
    il tuo si vede che è molto + professionale..ora lo provo e me lo studio un po'.;)
    grazie mille!
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  11. #11
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    ciao..ho appena testato il tuo codice ma ho notato che l'ultimo sequenza iserita dopo il salto di un due non viene visualizzata,cioè se io nell'ultima sequenza prima del -1 non metto un 2 non mi visualizza quella sequenza.
    cmq che cosa fa il:system("pause"); ?
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  12. #12
    Guest

    Predefinito

    beh, c'è una soluzione molto veloce, cioè aggiungere l'ultimo 2 quando premi -1, prima di stampare l'array:

    Codice:
    if (number == -1 || count == nArraySize)
    {
    	riempiArray(2, count); //qui
    	stampaArray();
    	break; //esco dal ciclo
    }
    system("pause") è il responsabile della scritta "Premi un tasto per continuare". Se non ci fosse vedresti sfilarti davanti in un millisecondo la sfilza di intervalli tra ogni 2, e poi la finestra si chiuderebbe. Per molti è una soluzione brutta (dovresti usare getch() (get char) o robe del genere) ...io nn ci vedo niente di male :)

    Prova a toglierlo :) normalmente è la primissima domanda/problema che un programmatore alle prime armi ha: "Perchè la finestra mi si chiude subito dopo che la apro?" :)
    Ultima modifica di xmax : 08-04-2005 alle ore 19.11.09

  13. #13
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    ahhh ecco perchè quando vado ad aprire gli eseguibili dalla cartella mi si chiudevano subito dopo l esecuzione :grin: hehh
    ciao :winkOLD:
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •