Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - contare elementi uguali di un array
Forum - C# / VB.NET - contare elementi uguali di un array

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 19:07
Sabato, 04/01/2014
ho un problema:
io ho un array di 5 elementi e devo contare quanti elementi uguali ci sono (ad esempio se ci sono 3 quattro; oppure 3 cinque, ecc...).

Come devo fare?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:49
Sabato, 04/01/2014
Codice sorgente - presumibilmente C++

  1. int array[5] = { ......... };
  2. int s = 0;
  3. int diversi = 0;
  4. int *duplicati;
  5. int *numeroDuplicati;
  6. for (int i = 0; i < 5; i++)
  7. {
  8.     bool trovato = false;
  9.     for (int j = 0; j < 5; j++)
  10.         if ((array[i] == array[j]) && (i != j))
  11.             trovato = true;
  12.     if (!trovato)
  13.         diversi++;
  14. }



così trovi i diversi fra loro........

Codice sorgente - presumibilmente C++

  1. duplicati = (int*)malloc(5 - diversi);
  2. numeroDuplicati = (int*)malloc(5 - diversi);
  3.  
  4. for (int i = 0; i < 5; i++)
  5. {
  6.     bool presente = false;
  7.     for (int j = 0; j < 5- diversi; j++)
  8.         if (array[i] == duplicati[j])
  9.             presente = true;
  10.  
  11.     if (!presente)
  12.     {
  13.         bool trovato = false;
  14.         for (int j = 0; j < 5; j++)
  15.             if ((array[i] == array[j]) && (i != j))
  16.                 trovato = true;
  17.  
  18.         duplicati[s++] = array[i];
  19.     }
  20. }



ora, se non ho sbagliato, hai:

array che non è cambiato; diversi con il numero di numeri diversi fra loro nell' array, duplicati che è grande 5 - diversi e che in ogni "elemento" ha un numero doppio in array (il numero non è duplicato) e numeroDuplicati che è da riempire...... Io lo riempirei così: duplicati[X] ha il valore di un numero duplicato in array, numeroDuplicati[X] ha il numero di volte in cui duplicati[X] è ripetuto nell' array. Hai capito?

dove vedi = (int*)malloc..... cambia con = new int[5-diversi] e togli int *duplicati e lascia int[] duplicati;

Ultima modifica effettuata da TheDarkJuster il 04/01/2014 alle 21:03
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:24
Sabato, 04/01/2014
La domanda mi sembra per il C# e la risposta per C/C++ ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 11:35
Domenica, 05/01/2014
in effetti si, io devo fare questo lavoro in C#, non in C/C++.

Come posso risolvere in modo semplice senza scrivere mille righe di codice?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:30
Domenica, 05/01/2014
Purtroppo mi sono accorto troppo tardi, va beh, ma è uguale, solo che invece di int * metti int[] e dove vedi (int*)malloc(5-diversi) metti new int[5 - diversi]
Il resto non cambia

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 15:25
Domenica, 05/01/2014
forse sono stupido io, ma... ti posso chiedere il grande favore di riscrivermi soltanto la parte che mi serve per verificare quanti numeri uguali ci sono?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:30
Domenica, 05/01/2014
Eh no, adesso esageriamo. Non solo tu prima mi hai chiesto la pappa pronta e io, forse un pò troppo buono te la ho anche data, ma adesso, non avendo capito cambi la domanda e vuoi altro codice. Sarò io cattivo ma non credo che scrivere le cose al posto tuo sia una grande idea. Se tu specifichi BENE cosa vuoi (nota bene che la domanda e ciò che mi hai chiesto ora sono due cose diverse) ti posso anche dire l' algoritmo per arrivare alla soluzione, oppure ti arrangi......

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 18:25
Domenica, 05/01/2014
Allora, cosa importantissima: chiedo un super scusa se sono stato scorretto, non volevo creare problemi :(

E' sicuramente colpa mia che non mi sono spiegato bene; chiedo ancora scusa :(

Adesso ripongo la domanda (sperando di non creare ulteriore confusione):

avete presente il poker, dove come "tipo di punteggio" c'è il TRIS? ecco, io devo fare una cosa praticamente uguale: sto cercando di ricreare il gioco di dadi YAHTZEE, dove come punteggio c'è anche "TRE DADI UGUALI".
Io ho fatto così: ho preso i 5 risultati casuali (bisogna lanciare 5 dadi) e gli ho memorizzati in un array.

Io devo verificare se tra questi 5 numeri casuali (da 1 a 6) ce ne sono 3 uguali.

Ecco il mio problema.
Spero di essere stato il più chiaro possibile. E scusatemi per tutti i fraintendimenti :(

PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 18:25
Domenica, 05/01/2014
Facile. Cicli l'array sei volte cercando ogni volta un numero diverso. Ogni volta che trovi lo stesso numero incrementi una variabile. Esempio

Codice sorgente - presumibilmente C#

  1. private static void Main (string[] argv)
  2. {
  3.     int ripetizioni, n;
  4.     for (int i = 1; i <= 6; i++) {
  5.         ripetizioni = 0;
  6.         foreach (int risultato in risultatiDadi) {
  7.             if (risultato == i) {
  8.                  ripetizioni++;
  9.             }
  10.         }
  11.     if (ripetizioni == 3) {
  12.         n = i;
  13.         break;
  14.     }
  15.     Console.WriteLine("Il numero {0} compare 3 volte", n);
  16. }



Se però vuoi fare l'ingegnere (o l'informatico, non so che indirizzo fai all'università) queste cose dovresti saperle fare a prima vista (senza offesa). Più continui a chiedere qui e meno saprai creare algoritmi (e dovrai saperlo fare se vuoi veramente progettare software o programmarli tu stesso). ATTENZIONE! Un conto è non saper risolvere un algoritmo, un altro è invece chiedere come funziona una libreria o un namespace di .NET. Buono studio.

Ultima modifica effettuata da tuttodiMC il 05/01/2014 alle 18:45
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo