Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77

    [C++] Problema scrittura algoritmo

    Buonasera a tutti,
    ho un problema con la scrittura dell'algoritmo di questo programma e volevo avere qualche consiglio per capire come impostare il programma: dato un file in cui è presente una sequenza di interi di lunghezza INDEFINITA, devo scrivere un programma che trovi i numeri che si ripetono e le occorrenze di questi numeri e scrivere su un secondo file contenente su ogni riga la coppia numero - occorrenze
    Esempio:
    File 1: 12 34 56 1 12 34 60 12 4

    File 2:
    12 3
    34 2

    Per la scrittura dell'algoritmo ho alcuni dubbi. Il primo è che non so come ragionare per la comparazione in quanto ci sono più elementi che ripetono,fosse stato uno solo avrei comparato questo con ogni posizione del vettore e incrementato il contatore delle occorrenze in caso di uguaglianza, ma già per dire con due numeri che si ripetono non so come fare.Il secondo dubbio riguarda invece un possibile soluzione, in pratica avevo pensato di comparare la posizione i-esima con ciascuna posizione successiva ma chiaramente il problema sorge con le posizioni precedenti. Ultimo dubbio era riguardante il file 2 che non so se utilizzare una struct oppure graficamente facevo in modo di stampare i numeri che si ripetevano e a fianco le occorrenze.

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Premetto che sicuramente ci sono soluzioni migliori, ma vorrei proporti come risolverei io il problema.

    Per trovare l'occorrenza di un numero, scorriamo l'array e verifichiamo se troviamo numeri uguali.


    Ora per il problema specifico, trovare tutte le occorrenze, procederei cosi.

    1) Mi creo un array di appoggio dove inserisco i numeri che prendo in considerazione.

    2) Prendo il primo elemento della sequenza, e lo inserisco nel'array di appoggio
    3)Scorro la sequenza, e verifico le occorrenze.
    4) Prendo il secondo elemento della sequenza, verifico che non sia contenuto nel'array di appoggio, se non è contenuto "non è mai stato preso in considerazione quel numero",lo salvo nel'array, procedo a scorrere la sequenza e verifico le occorrenze.

    5) Questo fatto per ogni elemento della sequenza di numeri . il confronto deve avvenire dalla posizione dell' elemento, ossia 3 elemento, confronto da posizione 3 a fine sequenza, perché i numeri precedenti sono stati già confrontati.

    Visto che non parla di uso di struct, io salverei file2, con un testo.

    Numero 12 occorrenze 3
    Numero 4 occorrenze 2
    ....
    ....
    Ultima modifica di torn24; 16-03-2016 a 09:14
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Puoi utilizzare parte del counting sort.
    Se sei pigro puoi utilizzare un hashing table al posto di un array di dimensione max-min+1, perderai l'ordinamento crescente dei numeri ma per il problema non è rilevante.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Premetto che sicuramente ci sono soluzioni migliori, ma vorrei proporti come risolverei io il problema.

    Per trovare l'occorrenza di un numero, scorriamo l'array e verifichiamo se troviamo numeri uguali.


    Ora per il problema specifico, trovare tutte le occorrenze, procederei cosi.

    1) Mi creo un array di appoggio dove inserisco i numeri che prendo in considerazione.

    2) Prendo il primo elemento della sequenza, e lo inserisco nel'array di appoggio
    3)Scorro la sequenza, e verifico le occorrenze.
    4) Prendo il secondo elemento della sequenza, verifico che non sia contenuto nel'array di appoggio, se non è contenuto "non è mai stato preso in considerazione quel numero",lo salvo nel'array, procedo a scorrere la sequenza e verifico le occorrenze.

    5) Questo fatto per ogni elemento della sequenza di numeri . il confronto deve avvenire dalla posizione dell' elemento, ossia 3 elemento, confronto da posizione 3 a fine sequenza, perché i numeri precedenti sono stati già confrontati.

    Visto che non parla di uso di struct, io salverei file2, con un testo.

    Numero 12 occorrenze 3
    Numero 4 occorrenze 2
    ....
    ....
    ora ci provo e vedo se trovo problemi. Un altro dubbio che avevo riguardava però l'allocazione dinamica del vettore di dimensione indefinita, è corretto scrivere così?

    codice:
    int main (){
    	int riemp = 0;
    	int *vet;
    	vet = new int [riemp];
    	
        fstream file;
        file.open ("dati.txt",ios::in);
        if(!file)
        {
        	cout << "errore apertura file!!!";
        }
    	
    	while (!file.eof())
    	{
    		file >> vet[riemp++];
    		
    	}
    	
    	
    	for (int i=0;i< riemp ;i++)
    	cout << "  "<< vet[i];
    	
    	system("pause");
    }

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    No, perché l'array ha come dimensione quella con cui viene creato.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Comunque è sia più semplice che più efficiente fare come ho detto io...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Strano eppure me lo stampa correttamente l'array,in tal caso come si scrive l'allocazione dinamica? Comunque io non ho mai usato il counting sort,quindi non so come applicarlo al mio problema in un certo senso.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    allora per il momento mi sono messo in condizioni "comode" cioè ho scelto questo array: 1 2 1, e ho impostato vet2 di lunghezza 1 per il momento. Tuttavia non mi stampa nulla.il codice è questo:

    codice:
    int cont = 0;
    int j = 0;
    
    
    while (j < riemp)	{
    	  for (int i=j;i<riemp;i++)
    	  {
    		vet2[j] = vet1[i];
    		if (vet2[j]==vet1[i+1])
    		cont++;
    		if (i==riemp)
    		{
    		  j++;
    	    }
    	  }	
    	  
    	  
    	}

    in sostanza avevo pensato che con un while avrei potuto confrontare l'elemento dell'array d'appoggio in questione con tutta la sequenza e non appena la prima comparazione fosse terminata aumentavo l'indice dell'array d'appoggio,passando all'elemento successivo e così una nuova comparazione con la sequenza.

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Puoi usare il template vector nella libreria standard?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Per mia sfortuna no poichè non l'abbiamo mai trattato a lezione,anche se da come ho capito sarebbe molto utile ma purtroppo devo usare nei miei programmi solo quello che abbiamo studiato in classe.

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.