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
Pascal - Generare tutte le possibili combinazioni di un array 2D
Forum - Pascal - Generare tutte le possibili combinazioni di un array 2D

Avatar
danieleg (Normal User)
Newbie


Messaggi: 2
Iscritto: 25/04/2012

Segnala al moderatore
Postato alle 12:28
Mercoledì, 25/04/2012
Salve a tutti.
In un programma mi servirebbe generare tutte le possibili combinazioni di un array 2D. Il problema è che devo generare tutte le possibili combinazioni di tutte le lunghezze possibili (nel mio caso da 1 a 10). La matrice è definita così:
Codice sorgente - presumibilmente Pascal

  1. matrice= array [1..10,1..2] of char;


è da alcuni giorni che sto cercando di farlo, ma non riesco, ho provato anche a cercare in giro, ma non trovo niente di utile.
Avete qualche idea? Grazie in anticipo.

Ultima modifica effettuata da danieleg il 25/04/2012 alle 12:29
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:29
Mercoledì, 25/04/2012
Ciao!

Cosa intendi con "generare tutte le possibili combinazioni di un array 2D" ?
Lo vuoi stampare a video, registrare gli elementi, o confrontare gli elementi ?

Posta il programma completo.


PM Quote
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 13:42
Mercoledì, 25/04/2012
Premesso che non conosco Pascal...
Penso di aver capito che tu, avendo un array bidimensionale, vuoi trovare tutte le combinazioni possibili di quell'array. Cioè array[0][0], array[0][1], array[0][2] ecc....

La soluzione in C++ è la seguente..
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main ( void )
  5. {
  6.     // Dichiara l'array
  7.     int array[10][5];
  8.    
  9.     //QUESTO NOMINA TUTTI GLI ELEMENTI
  10.     for ( int i = 0; i < 10; i++ )
  11.         for ( int j = 0; j < 5; j++ )
  12.             array[i][j] = 1 + rand() % 1000;
  13.            
  14.     //QUESTO LI SCRIVE TUTTI
  15.     for ( int i = 0; i < 10; i++ )
  16.         for ( int j = 0; j < 5; j++ )
  17.             cout << array[i][j] << endl;
  18.    
  19.     system("PAUSE>NUL");
  20.     return 0;
  21. }



Praticamente usi l'iterazione for (non so com'è in Pascal) due volte, in questo modo riesci ad operare su tutti gli elementi..

Se non è quello che ti serviva spiegati meglio :)

PM Quote
Avatar
danieleg (Normal User)
Newbie


Messaggi: 2
Iscritto: 25/04/2012

Segnala al moderatore
Postato alle 14:27
Mercoledì, 25/04/2012
Innanzitutto grazie mille per le risposte!
Cerco di spiegare meglio:
da quella matrice devo calcolare le  stringhe di caratteri lunghe da 1 a 10. Per ogni "posto" della stringa ho a disposizione i due caratteri contenuti nella matrice. La stringa creata è una chiave con cui devo decrittare un testo, quindi la genero (prima tutte quelle lunghe 1, poi 2 e così via fino a 10), la provo e se non è corretta ne genero un'altra fino a trovare quella corretta.

Un esempio:
se la matrice è fatta così:
a b c d e f g h j k
l m n o p q r s t u

devo generare:
combinazioni di 1 carattere: a, l
combinazioni di 2 caratteri: ab, am, lb, lm
combinazioni di 3 caratteri: abc, abn, amn, lmn, lbc, lmc
e così via fino a 10 caratteri.

Il programma completo serve per decrittare un testo crittato con il cifrario di Vigenere (codifica polialfabetica).

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 22:49
Mercoledì, 25/04/2012
Puoi farlo usando una funzione ricorsiva.
Però sta' attento che richiedere un tempo esponenziale !

Codice sorgente - presumibilmente Delphi

  1. var
  2. matrice= array [1..10,1..2] of char;
  3. combinazione= string[10];
  4.  
  5. procedure calcola(i : byte; max:byte);
  6. begin
  7. if (i>max) then begin
  8.   writeln(combinazione); //Scrive la combinazione se l'ho già trovata
  9. end else begin
  10.   combinazione[i]:=matrice[i][1];
  11.   calcola(i+1, max);
  12.   combinazione[i]:=matrice[i][2];
  13.   calcola(i+1, max);
  14. end;
  15. end;
  16.  
  17. procedure combinazione(max:byte);
  18. begin
  19.   combinazioni[0]:=max;
  20.   calcola(1,max);
  21. end;


Ultima modifica effettuata da Phi il 25/04/2012 alle 22:51
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 1:12
Giovedì, 26/04/2012
cmq si chiama bruteforce...

PM Quote