[C++] Funzione Srand(),Rand() e array

« Older   Newer »
  Share  
hp1200
CAT_IMG Posted on 15/1/2012, 16:44     +1   -1




Salve ragazzi, ho prodotto questo codice che dovrebbe scambiare i valori tra due array,e poi mostrarli.
Potreste darci un'occhiata?
CODICE
#include <iostream>
#include <ctime>
using namespace std;
int main (){
   int v[10],v1[10],sca,i,j,b,a=10,k=0;
   for(i=0;i<10;i=i+1){
                       cout<<"numero "<<i<<endl;
                       cin>>v[i];}
   for(j=0;j<10;j=j+1){
   srand ( time ( NULL ) );
           b = ( ( rand ( ) % a ) + 1 );
           cout<<"b= "<<b<<endl;        
           v1[j]=v[b];
           sca=v[b];
           v[b]=v[a];
           v[a]=sca;
           a=a-1;}
           for(i=0;i<10;i=i+1){                    
cout<<"v = "<<v[i]<<endl;}
for(k=0;k<10;k=k+1){
cout<<"v1 = "<<v[k]<<endl;}
system ("pause");}

Grazie:D

EDIT:
Ho provato a modificare in questa maniera il codice..solo che mi esce un "33" come valore che non è stato inserito e non ha motivo per esserci..sapreste dirmi perchè?
CODICE
#include <iostream>
#include <stdio.h>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
   int v[10],v1[10],sca,i,j,b,a=10,k=0;
   for(i=0;i<10;i=i+1){
                       cout<<"numero "<<i<<endl;
                       cin>>v[i];}
   for(j=0;j<10;j=j+1){
   srand ( time ( NULL ) );
           b = rand ( ) %a+ 1 ;
           cout<<"b= "<<b<<endl;        
           v1[j]=v[b];
           sca=v[b];
           v[b]=v[a];
           v[a]=sca;
           a=a-1;}
           for(i=0;i<10;i=i+1){                    
cout<<"v = "<<v[i]<<endl;}
for(k=0;k<10;k=k+1){
cout<<"v1 = "<<v[k]<<endl;}
system ("pause");


Edited by hp1200 - 15/1/2012, 18:14
 
Top
I.Ren
CAT_IMG Posted on 15/1/2012, 18:50     +1   -1




volendo si poteva fare tutto in unico for, ma così capisci meglio probabilmente. Il tuo codice è osceno, non c'ho capito niente, l'identazione è oscena, i nomi della variabili illeggibili.. tienti un codice che funziona e studiatelo:

CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
       srand( time(0) ); // per la generazione del seme pseudocasuale

       int arr1[10], arr2[10];
       int temp;

       // riempio gli array

       for (int i=0;i<10;i++)
       {
               cout << "Inserisci il numero: ";
               cin >> arr1[i];
               arr2[i] = 1 + rand() % 10;
       }

       // scambio i valori e li stampo a schermo
       
       for (int i=0;i<10;i++)
       {
               temp = arr1[i];
               arr1[i] = arr2[i];
               arr2[i] = temp;
               
               cout << endl << "arr1[" << i << "] = " << arr1[i] << "\t"
                       << "arr2[" << i << "] = " << arr2[i] << endl;
       }


       return 0;
}
 
Top
hp1200
CAT_IMG Posted on 15/1/2012, 18:58     +1   -1




Ti ringrazio per la risposta, ma non è questo il codice che serve a me. Se noti io non inserisco valori random nel secondo array, ma utilizzo la variabile estratta in maniera random come indice del primo array, che poi passa il valore al secondo. Il tuo codice è esatto, non vorrei sembrare sfacciato, scortese o altro..ma non fa ciò che fa il mio. Non è nè un ""insulto"" nè altro.. grazie comunque:D
 
Top
I.Ren
CAT_IMG Posted on 15/1/2012, 19:12     +1   -1




siccme il tuo codice non ero nemmeno riuscito a leggerlo (consiglio: dovresti guardarti un po' di stile di programmazione in c++, lo trovi anche su wikipedia) e non avevi spiegato avevo pensato che volessi semplicemente scabiarli

cmq tu vuoi che l'indice del 2° array sia scelto casualmente?

se ho ben capito, tieni:

CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
       srand( time(0) ); // per la generazione del seme pseudocasuale

       int arr1[10], arr2[10];
       int temp, random_index;

       // riempio gli array

       for (int i=0;i<10;i++)
       {
               cout << "Inserisci il numero: ";
               cin >> arr1[i];
               arr2[i] = 1 + rand() % 10;
       }

       // scambio i valori e li stampo a schermo
       
       for (int i=0;i<10;i++)
       {
               random_index = rand() % 9;
               temp = arr1[i];
               arr1[i] = arr2[random_index];
               arr2[random_index] = temp;
               
               cout << "arr1[" << i << "] = " << arr1[i] << "\t"
                       << "arr2[" << i << "] = " << arr2[i] << endl;
       }


       return 0;
}
 
Top
hp1200
CAT_IMG Posted on 15/1/2012, 19:23     +1   -1




Evidentemente non riesco a spiegarmi, e non voglio approfittare della tua pazienza..ti ringrazio per l'aiuto datomi:D
P.S. Per le variabili, beh è un problema mio, nel senso che non riesco a non chiamarle a,b,x,y negli esempi :P poi se devo fare un programma le chiamo correttamente per evitare confusione..ma nei test no:D
 
Top
I.Ren
CAT_IMG Posted on 16/1/2012, 14:33     +1   -1




intendi così allora? dovrebbe essere come il tuo:

CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
       srand( time(0) ); // per la generazione del seme pseudocasuale

       int arr1[10], arr2[10];
       int temp, random_index, random_max = 10;

       // riempio gli array

       for (int i=0;i<10;i++)
       {
               cout << "Inserisci il numero: ";
               cin >> arr1[i];
               arr2[i] = 1 + rand() % random_max;
       }

       // scambio i valori e li stampo a schermo
       
       for (int i=0;i<10;i++)
       {
               random_index = rand() % (random_max-i);
               temp = arr1[i];
               arr1[i] = arr2[random_index];
               arr2[random_index] = temp;
               
               cout << "arr1[" << i << "] = " << arr1[i] << "\t"
                       << "arr2[" << i << "] = " << arr2[i] << endl;
       }


       return 0;
}
 
Top
hp1200
CAT_IMG Posted on 16/1/2012, 18:32     +1   -1




No xDD tu riempi il secondo array con un valore casuale..e non deve essere cosi xD Il secondo array deve essere vuoto, dopodichè viene estratto un indice in maniera casuale dal primo array ed il valore corrispondente all'indice passa nel secondo array. più chiaro di cosi non riesco ad essere. Ed il mio codice non mi sembra tanto indecifrabile .-.
 
Top
I.Ren
CAT_IMG Posted on 16/1/2012, 19:13     +1   -1




ok, ora me lo sistemo con l'identazione come dico io e lo leggo bene xD
 
Top
I.Ren
CAT_IMG Posted on 16/1/2012, 20:14     +1   -1




ok credo di avere capito xD

CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
       srand( time(0) ); // per la generazione del seme pseudocasuale

       int arr1[10], arr2[10];
       int random_index, random_max = 10;

       // riempio il primo array

       for (int i=0;i<10;i++)
       {
               cout << "Inserisci il numero: ";
               cin >> arr1[i];
       }

       // scambio i valori e li stampo a schermo
       
       for (int i=0;i<10;i++)
       {
               random_index = rand() % (random_max-i);
               arr2[i] = arr1[random_index];
               
               cout << "arr1[" << i << "] = " << arr1[i] << "\t"
                       << "arr2[" << i << "] = " << arr2[i] << endl;
       }


       return 0;
}


giusto? : D
 
Top
hp1200
CAT_IMG Posted on 16/1/2012, 21:14     +1   -1




Ora..a parte lo scambio..cos'ha di diverso il tuo codice dal mio? ._. Io non trovo differenza, se riesci a decifrare il mio e trovare la differenza fammi sapere:D

EDIT:
Aggiungo lo scambio e torna a non funzionare come il mio xDD Dacci un'occhiata qui, cosi capisci meglio cos'ho fatto.
CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
      srand( time(0) ); // per la generazione del seme pseudocasuale

      int arr1[10], arr2[10];
      int random_index, random_max = 10;
      int sca;

      // riempio il primo array

      for (int i=0;i<10;i++)
      {
              cout << "Inserisci il numero: ";
              cin >> arr1[i];
      }

      // scambio i valori e li stampo a schermo
     
      for (int i=0;i<10;i++)
      {
              random_index = rand() % (random_max-i);
              arr2[i] = arr1[random_index];
              sca=arr1[random_index];
              arr1[random_index]=arr1[i];
              arr1[i]=sca;
              cout<<"random= "<<random_index;
             
             
      }for(int i=0;i<10;i=i+1){
cout << "arr1[" << i << "] = " << arr1[i] << "\t"
                      << "arr2[" << i << "] = " << arr2[i] << endl;}
system("pause");
      return 0;
}
 
Top
I.Ren
CAT_IMG Posted on 16/1/2012, 21:36     +1   -1




doveva essere come il tuo infatti xD cmq ora sono su winzoz quindi non posso far niente, domani quando sono su ubuntu riguardo : D
 
Top
hp1200
CAT_IMG Posted on 16/1/2012, 21:42     +1   -1




Ti ringrazio per l'infinita pazienza:D Perchè sto dando di matto..è solo un semplice scambio ._.
 
Top
I.Ren
CAT_IMG Posted on 17/1/2012, 14:27     +1   -1




fatto, va xD

CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
       srand( time(0) ); // per la generazione del seme pseudocasuale

       int arr1[10], arr2[10];
       int temp, random_index, random_max = 10;

       // riempio il primo array

       for (int i=0;i<10;i++)
       {
               cout << "Inserisci il numero: ";
               cin >> arr1[i];
       }

       // scambio i valori e li stampo a schermo
       
       for (int i=0;i<10;i++)
       {
               random_index = rand() % (random_max-i);
               arr2[i] = arr1[random_index];
               temp = arr1[i];
               arr1[i] = arr2[i];
               arr2[i] = temp;

               cout << "arr1[" << i << "] = " << arr1[i] << "\t"
                       << "arr2[" << i << "] = " << arr2[i] << endl;
       }


       return 0;
}
 
Top
hp1200
CAT_IMG Posted on 17/1/2012, 22:01     +1   -1




Oddio..
Ti sollevo ufficialmente dall'incarico di correggere il source, perchè penso che molto presto mi manderai a quel paese ma, non è giusto xDD
L'errore è nello scambio..lo scambio che ho fatto io è quello corretto(almeno dovrebbe esserlo) ma non và.
Tu usi come indice lo 0 al primo ciclo..invece dovrebbe essere random..e poi 10.
Non odiarmi <3 xD
 
Top
13 replies since 15/1/2012, 16:44   337 views
  Share