Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    e questo come si realizza

  2. #12
    codice:
    i=i++
    assomiglia molto a:
    http://gcc.gnu.org/bugs/#nonbugs_c
    Modifying a value twice between two sequence points as shown in the following examples is even worse:
    codice:
    i=++i
    This leads to undefined behavior (i.e. the compiler can do anything).
    ma ok come ti sta descrivendo shodan, non è l'unico problema
    ;-)

  3. #13
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    In pratica puoi copiare in un colpo solo il numero di elementi dettati dal vettore più corto. Se a ha dimensione 4 e b dimensione 5, puoi copiare al massimo 4 elementi di entrambi i vettori nel vettore c senza superare la dimensione massima di nessuno dei tre ( il vettore c è dimensionato in base alla somma delle dimensioni dei due vettori, in questo caso 4+5=9). a lo copi negli indici pari di c, b lo copi negli indici dispari di c. Alla fine c conterrà 8 elementi alternati. Dopo di che si tratta di trovare il vettore più lungo e copiare il resto di quel vettore nel vettore c.
    Ok, oggi pomeriggio ci provo...

  4. #14
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    Ci sono riuscito, ecco il codice completo:

    codice:
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    vector <int> merge (vector <int> a, vector <int> b)
    
    {
       vector <int> c (a.size()+b.size());
    
       int i=0;
       int j=0;
       int k=0;
       int m=1;
    
    
    
    
       if (a.size()<b.size())
    
       {for (i; i<a.size(); i++)
    
       {c[j]=a[i];
       j=j+2;}
    
    
    
       for (k; m<(a.size()+b.size())-1; k++)
    
       {c[m]=b[k];
       m=m+2;}
    
       c[(a.size()+b.size())-1] = b[b.size()-1];}
    
    
    
    
       if (a.size()>b.size())
    
       {for (i; i<a.size(); i++)
    
       {c[j]=b[i];
       j=j+2;}
    
    
    
       for (k; m<(a.size()+b.size())-1; k++)
    
       {c[m]=a[k];
       m=m+2;}
    
    
       c[(a.size()+b.size())-1] = a[b.size()-1];}
    
       return c;
    
    
    
    
    }
    
    
    
    
    
    
    
    
    void print (vector <int> s)
    
    { for (int i=0; i<s.size();i++)
    
      cout << s[i] << endl;
    
    }
    
    
    
    
    int main()
    
    {
        vector <int> a(5);
    
        a[0]=1;
        a[1]=4;
        a[2]=9;
        a[3]=16;
        a[4]=21;
    
    
        vector <int> b(4);
    
        b[0]=9;
        b[1]=7;
        b[2]=4;
        b[3]=9;
    
    
        cout << endl;
    
       vector <int> c;
    
        cout << endl;
    
        c = merge (a,b);
    
        print (c);
    
    return 0;
    
    }

  5. #15
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ancora troppo macchinosa (e ancora non cosideri il caso che i due vettori siano lunghi uguali). Questa versione è più semplice ed efficiente.
    codice:
    vector <int> merge (const vector<int>& a, const vector<int>& b) {
    	vector <int> c (a.size()+ b.size());
    
    	size_t minsz = std::min(a.size(),b.size());
    
    	for (size_t i=0, j=0; j < minsz; i+=2,j++) {
    		c[i] = a[j];
    		c[i+1] = b[j];
    	}
    
    	const vector<int>& d = ( a.size() > b.size()) ? a : b;
    	size_t maxsz = d.size();
    
    	for (size_t i = minsz*2, j = minsz; j < maxsz; i++, j++) {
    		c[i] = d[j];
    	}
    	return c;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #16
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    Si, ok, però così come lo hai scritto te, il codice ha delle cose che io non ho fatto in informatica, quindi non sarei in grado di scriverlo... Comunque anche la versione precedente che avevo postato presentava degli errori, il codice seguente invece anche se macchinoso, dovrebbe funzionare con qualsiasi numero di elementi, sia se il vettore a è più grande o viceversa se è più grande il b, o ancora se sono uguali...

    codice:
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    vector <int> merge (vector <int> a, vector <int> b)
    
    {
       vector <int> c (a.size()+b.size());
    
       int i=0;
       int j=0;
       int m=1;
       int n;
       int f=0;
       int g;
    
    
    
    
       if (a.size()<b.size())
    
       {for (i; i<a.size(); i++)
    
       {c[j]=a[i];
       j=j+2;}
    
    
    
       for (f; m<(a.size()+b.size())-a.size(); f++)
    
       {c[m]=b[f];
       m=m+2;}
    
    
    
     for (g=m;f<b.size();f++)
    
       {
           c[g]=b[f];
           g++;}}
    
    
    
    
    if (a.size()>b.size())
    
    {for (i; j<(a.size()+b.size())-b.size(); i++)
    
       {c[j]=a[i];
       j=j+2;}
    
    
    
    for (f; f<b.size(); f++)
    
       {c[m]=b[f];
       m=m+2;}
    
    
    
    for (g=j;f<a.size();f++)
    
       {
           c[g]=a[f];
          g++;}}
    
    
    
    if (a.size()==b.size())
    
    {
        {for (i; i<a.size(); i++)
    
       {c[j]=a[i];
       j=j+2;}
    
    
    
       for (f; f<b.size(); f++)
    
       {c[m]=b[f];
       m=m+2;}}}
    
    
    
    
    
    
    
    
       return c;
    
    
    
    
    }
    
    
    void print (vector <int> s)
    
    {
    
      for (int i=0; i<s.size();i++)
    
      cout << s[i] << endl;
    
    }
    
    
    
    
    int main()
    
    {
        vector <int> a(6);
    
        a[0]=1;
        a[1]=4;
        a[2]=9;
        a[3]=16;
        a[4]=20;
        a[5]=199;
    
    
    
    
    
        vector <int> b(3);
    
        b[0]=9;
        b[1]=7;
        b[2]=4;
    
    
    
    vector <int> c;
    
    c = merge (a,b);
    
    print (c);
    
    return 0;
    
    }

  7. #17
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Quale parte di quello che ho scritto non hai fatto in informatica? Reference, puntatori? Operatore ternario?

    dovrebbe funzionare con qualsiasi numero di elementi
    Come "dovrebbe"
    Hai provato a eseguirlo o no?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  8. #18
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    35
    Si, si, ho provato e funziona, però non si può mai dire che un programma funzioni perfettamente, visto che i casi possibili sono infiniti... Comunque non ho fatto reference e operatore ternario... Ho fatto vettori, puntatori, cicli iterativi, classi e oggi ho fatto ricorsività e ordinamento e ricerca...

  9. #19
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    visto che i casi possibili sono infiniti...
    Si, d'accordo, ma in questo caso sono tre in tutto.

    puntatori
    Ok. Allora la mia funzione può essere riscritta così:
    codice:
    vector <int> merge (vector<int> a, vector<int> b) {
    	vector <int> c (a.size()+ b.size());
    
    	size_t minsz = 0;
    	// Prendo la dimensione minore dei due vettori.
    	if ( a.size() < b.size()) {
    		minsz = a.size();
    	} else {
    		minsz = b.size();
    	}
    	// Copio i due vettori in c considerandoli di pari lunghezza.
    	for (size_t i=0, j=0; j < minsz; i+=2,j++) {
    		c[i] = a[j];
    		c[i+1] = b[j];
    	}
    
    	// Scelgo il vettore di lunghezza maggiore.
    	const vector<int>* d = 0;
    	if ( a.size() < b.size() ) {
    		d = &b;
    	} else {
    		d = &a;
    	}
    	
    	// Copio il resto del vettore più lungo in c.
    	// La locazione di partenza di c è pari al doppio di minsz.
    	// La locazione di partenza del vettore più lungo è minsz.
    	size_t maxsz = d->size();
    	for (size_t i = minsz*2, j = minsz; j < maxsz; i++, j++) {
    		c[i] = (*d)[j];
    	}
    	return c;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.