Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    C++: Eliminazione dei doppioni!!

    Buonasera a tutti !! vi prego aiutatemi prima che impazzisco !
    allora il problema è questo:
    ho una matrice inserita da tastiera, ad esempio così:

    1 0 4 5 6
    8 9 3 0 0
    0 5 6 3 5
    1 0 4 5 6
    1 0 4 5 6

    Devo eliminare i doppioni.. cioè le tre righe 1 0 4 5 6 e sommare gli elementi delle rimanenti due, cioè 39! (8+9+3+0+0+0+5+6+3+5).


    codice:
            for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    				if (a[i][j] == a[i+1][j])
    				{
    					a[i][j]=0;
                                            a[i+1][j]=0;
    				}	
    		}
    	}
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			b[i][j]=a[i][j];
    		}
    	}
    	
    	cout<<"La nuova matrice è: "<<endl;
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			cout<<b[i][j];
    			cout<<" ";
    		}
    		cout<<endl;
    	}
    con questo codice appena scritto non va bene, perché confronto solo con la riga successiva, ad esempio:
    1 2 3
    1 2 3
    4 5 6

    diventa:

    0 0 0
    0 0 0
    4 5 6

    ma

    1 2 3
    4 5 6
    1 2 3

    resta uguale !!

    ossia:

    1 2 3
    4 5 6
    1 2 3

    quindi il codice non va, chi mi aiuta ??

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Intanto è meglio che aggiungi la dichiarazione delle variabili e l'inizializzazione...
    poi comunque così è sbagliato, in quanto se la matrice fosse così:

    124
    123
    678

    diventerebbe così

    004
    003
    678

    per risolvere il problema delle righe basta aggiungere un ciclo e, per quello del confronto sbagliato, dopo aver assegnato true a una variabile nel ciclo esterno, la cambi in false se una coppia non è uguale e quindi cambi la riga in zero...
    ...anche se magari sarebbe comodo aggiungere una funzione che ti faccia il confronto delle righe a cui passi solo il primo indice, spero tu mi abbia compreso,
    ciao

  3. #3
    ..si si, è già tutto dichiarato, ho solo incollato quel pezzo di codice che interessa !
    comunque è vero questo:

    124
    123
    678

    diventerebbe così

    004
    003
    678

    e xkè??

    facendo
    codice:
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    				if (a[i][j] == a[i+1][j])
    				{
    					a[i][j]=0;
    					a[i+1][j]=0;
    				}	
    		}
    	}
    ..non paragono tutti gli elementi della prima riga con la seconda ?
    cmq ora provo a fare quello che mi hai detto.

  4. #4
    :'( non ci riesco !! aiuto !!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Si, paragoni tutti gli elementi, ma sostituisci immediatamente se due sono uguali, e lasci invariato nel caso che non lo siano. Quella procedura non sostituisce gli zeri se le due righe sono uguali, ma sostituisce tutti gli elementi uguali e lascia inalterati quelli diversi.

    Prima di continuare, ti serve una funzione che ti dica se due righe della matrice sono uguali.

    Scorri tutto l'array. Se trovi due elementi diversi, ritorna 0. Se hai passato tutto l'array senza trovare elementi diversi, ritorna 1;
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    e quella funzione può implementarla come ho detto io....

  7. #7
    codice:
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    				if (a[i][j] != a[i+1][j])
    				{
    					return 0;
    				}	
    				else
    				{
    					return 1;
    				}
    		}
    	}
    allora.. se le due righe sono diverse mi ritorna 0, cioè esci dal ciclo confrontando altre 2 righe;
    altrimenti mi ritorna 1.
    Ora quando mi ritorna 1 come faccio ad annullare le due righe uguali ?

  8. #8
    ..forse vi aiuto di più pubblicando tutto il codice !

    codice:
    #include <iostream>
    #include <stdio.h>
    #define max 100
    
    using namespace std;
    
    int main(int argc, char** argv)
    
    {
    	int i,j,n,m;
    	int a[max][max],b[max][max];
    	
    	cout<<"Calcolare la somma degli elementi di una matrice appartenenti \nalle righe che non si ripetono nella matrice stessa."<<endl;
    	cout<<"Inserire la dimensione della matrice."<<endl;
    	cout<<"Inserire la dimensione di n: ";
    	cin>>n;
    	cout<<"Inserire la dimensione di m: ";
    	cin>>m;
    	
    	//leggi_mat
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			cout<<"Inserire l'elemento ["<<i<<"]["<<j<<"]: ";
    			cin>>a[i][j];
    		}
    	}
    	//stampa
    	cout<<"La matrice inserita è: "<<endl;
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			cout<<a[i][j];
    			cout<<" ";
    		}
    		cout<<endl;
    	}
    	
    	//doppione
    	/*
    	Scorri tutto l'array. Se trovi due elementi diversi, 
    	ritorna 0. Se hai passato tutto l'array senza trovare 
    	elementi diversi, ritorna 1;
    	*/
    	
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    				if (a[i][j] != a[i+1][j])
    				{
    					return 0;
    				}	
    				else
    				{
    					return 1;
    				}
    		}
    	}
    	
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			b[i][j]=a[i][j];
    		}
    	}
    	
    	cout<<"La nuova matrice è: "<<endl;
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			cout<<b[i][j];
    			cout<<" ";
    		}
    		cout<<endl;
    	}
    	
    	//somma_riga
    	int sum=0;
    	for (i=0;i<n;i++)
    	{
    		for (j=0;j<m;j++)
    		{
    			sum+=b[i][j];
    		}
    	}
    	cout<<"La somma degli elementi della matrice senza doppioni è "<<sum<<".";
    
    	
    	return 0;
    }

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
    int confrontaRighe(int r, int R, int lunghezza, int **m)
    {
       int i, uguali = 1;
       /* confronto di due elementi della riga, se sono diversi viene impostato uguali a zero (false) e bloccato il ciclo*/
       for(i = 0; i < lunghezza; i++)
          if(m[r][i] != m[R][i]) 
          {
             uguali = 0;
             break;
          }
       return uguali;
    }
    questo di confronta due righe....
    ...il resto fallo tu però... ciao

  10. #10
    r ed R cosa sono ?
    r = riga i
    R = riga i + 1 ?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.