Sostituzione di elementi in un array

di il
9 risposte

Sostituzione di elementi in un array

Salve a tutti,so che é un esercizio semplice ma non capisco dove sbaglio. Quello che vorrei fare é creare un nuovo vettore da uno vecchio. Praticamente ho creato un vettore per contare la frequenza delle lettere in una frase e ora vorrei creare un vettore della dimensione della frase dove inserisco soltanto le frequenze diverse dallo 0. Ho provato a farlo con un doppio ciclo for ma quando vado a stampare il mio nuovo vettore, mi viene stampato soltanto l'ultimo numero del vettore delle frequenze.

int vec[dim] = { 0 };                        //vettore di zeri della dimensione che mi occorre 
	
	for (int i = 0; i <= 127; i++)
	{
		
		if (vet_frq[i] != 0 )              //vet_frq é il vettore delle frequenze
		{
			for (int j = 0; j < dim; j++) {
				 vec[j] =vet_frq[i];     
				
				
				
			}
		}
		
	}
	for(int i=0;i<dim;i++)
		cout << vec[i] ;    //vec é il vettore che voglio creare
	

9 Risposte

  • Re: Sostituzione di elementi in un array

    Se non metti tutto il codice sarà dura valutarne la correttezza...
  • Re: Sostituzione di elementi in un array

    Comunque, presupponendo che quello che non c'è sia corretto
    
    for (i = 0, j = 0; i <= 127; i++)
    	if (vet_frq[i]) 
    		vec[j++] =vet_frq[i];     
    
  • Re: Sostituzione di elementi in un array

    Weierstrass ha scritto:


    Comunque, presupponendo che quello che non c'è sia corretto
    
    for (i = 0, j = 0; i <= 127; i++)
    	if (vet_frq[i]) 
    		vec[j++] =vet_frq[i];     
    
    Questo é il codice per le frequenze
    for (int i = 0; i< 127; i++)
    	{                                                          
    
    		for (int j = 0; j < dim; j++)                          // confronto quando le lettere della frase 
    		                                                      //corrisponono ai valori del codice ASCII e incremento il contatore
    							                                 // ogniqualvolta la condizione di ugualianza é verificata
    		{
    
    			vet_frq[i] = vet_frq[i] + (int(frase[j]) == i);
    			
    		}
    		
    	}	
    
    	
  • Re: Sostituzione di elementi in un array

    Il mio obiettivo é creare due vettori come questi partendo dalla mia frase e dalle mie frequenze

    char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
    int freq[] = { 5, 9, 12, 13, 16, 45 };


    dove
    for (int i = 0; i < 127; i++) 
    	{
    		vet_ascii[i] = i;
    
    	}
    é il codice con cui assegno i valori 0-127 al vettore
  • Re: Sostituzione di elementi in un array

    A parte che hai escluso il 127, ora è chiaro cosa vuoi fare.

    Non è un esercizio banale. Visto che sei alle prime armi, ti consiglio il "selection sort" su freq; arr lo aggiorni a mano ogni volta che individui il minimo successivo. Quando hai finito, ignori gli zeri all'inizio
  • Re: Sostituzione di elementi in un array

    Weierstrass ha scritto:


    A parte che hai escluso il 127, ora è chiaro cosa vuoi fare.

    Non è un esercizio banale. Visto che sei alle prime armi, ti consiglio il "selection sort" su freq; arr lo aggiorni a mano ogni volta che individui il minimo successivo. Quando hai finito, ignori gli zeri all'inizio
    si,dovrei mettere <=127, giuso?
    Comunque ora provo a risolvere... Grazie!!!
  • Re: Sostituzione di elementi in un array

    Mathstudent ha scritto:


    Weierstrass ha scritto:


    A parte che hai escluso il 127, ora è chiaro cosa vuoi fare.

    Non è un esercizio banale. Visto che sei alle prime armi, ti consiglio il "selection sort" su freq; arr lo aggiorni a mano ogni volta che individui il minimo successivo. Quando hai finito, ignori gli zeri all'inizio
    si,dovrei mettere <=127, giuso?
    Comunque ora provo a risolvere... Grazie!!!
    Avevo giá ordinato tutto cosí (le variabili temp e temp1 le ho inizializzate in precedenza )
    for (int j = 0; j < 127; j++)    
    	{
    
    		for (int i = 127 - 1; i >= j; i--)
    		{
    			if (vet_frq[i] > vet_frq[i + 1])  
    			{
    				temp = vet_frq[i];                     //qui per le frequenze 
    				vet_frq[i] = vet_frq[i + 1];
    				vet_frq[i + 1] = temp;
    				temp1 = vet_ascii[i];                 //qui per le lettere
    				vet_ascii[i] = vet_ascii[i + 1];
    				vet_ascii[i + 1] = temp1;
    			}
    		}
    
    	}
    
    	
  • Re: Sostituzione di elementi in un array

    Quindi hai usato il bubble sort inverso, va bene lo stesso.

    Ti manca solo da calcolarti l'offset per il primo elemento diverso da zero.

    Ma non è, per caso, la continuazione del thread di qualche giorno fa? Non dovresti ordinarli dal più grande al più piccolo?
  • Re: Sostituzione di elementi in un array

    Weierstrass ha scritto:


    Quindi hai usato il bubble sort inverso, va bene lo stesso.

    Ti manca solo da calcolarti l'offset per il primo elemento diverso da zero.

    Ma non è, per caso, la continuazione del thread di qualche giorno fa? Non dovresti ordinarli dal più grande al più piccolo?
    Si,esatto. Ma sto provando a farlo in un modo diverso e quindi non ho continuato a scrivere lí
Devi accedere o registrarti per scrivere nel forum
9 risposte