scusa, ma questo non è C++ ?Originariamente inviato da edriv
Questo è un mio programma completo che fa quello che vuoi tu:
(non è ricorsivo)
La funzione + importante è disp()
Se trovi bug avvisami!codice:#include <iostream> #include <string> // per system("PAUSE") e exit() #include <cstdlib> using namespace std; void disp(); void init(); void show(); void filltable(); int tot_chars; int *vals; string parola; int main() { // Spiege come formattare l'input cout << "Inserisci una parola che contenga tutte le lettere da utilizzare e premi invio." << endl; cout << "Scrivi 'alfa' se vui tutto l'alfabeto minuscolo." << endl; cout << "Scrivi 'ALFA' se vui tutto l'alfabeto maiuscolo." << endl; cout << "Scrivi 'Alfa' se vui tutto l'alfabeto minuscolo e maiuscolo." << endl; cout << "Permi solo invio per le cifre da 0 a 9." << endl; // 40 caratteri dovrebbero bastare a fondere qualsiasi computer char buf[40]; // Qui chiede l'input con getline() cin.getline(buf,40); parola = buf; // Riempie la tabella dei caratteri (se ad esempio ha messo "Alfa" filltable(); cout << "Quanto sarà lunga ogni combinazione?" << endl; do { cin >> tot_chars; } while(tot_chars <= 0); // Crea l'array delle combinazioni vals = new int[tot_chars]; if(!vals) { cout << "Memoria insufficiente!!!"<<endl; system("PAUSE"); exit(1); } // Inizializza con il primo valore init(); // Mostra tutte le combinazioni disp(); // Cancella l'array delle combinazioni delete [] vals; cout << "Grazie e arrivederci." << endl; system("PAUSE"); return 0; } void filltable() { int i; if(parola == "alfa") { parola = ""; // Riempie la tabella con lettere da 'a' a 'z' for(i='a'; i<='z'; i++) parola += i; } else if(parola == "ALFA") { parola = ""; // Riempie la tabella con lettere da 'A' a 'Z' for(i='A'; i<='Z'; i++) parola += i; } else if(parola == "Alfa") { parola = ""; // Riempie la tabella con lettere da 'a' a 'z' for(i='a'; i<='z'; i++) parola += i; // Riempie la tabella con lettere da 'A' a 'Z' for(i='A'; i<='Z'; i++) parola += i; } else if(parola.size() == 0) { parola = ""; // Riempie la tabella con cifre da '0' a '9' for(i='0'; i<='9'; i++) parola += i; } } void disp() { int last = tot_chars - 1; int pos = last; bool end_flag; // Mostra la combinazione attuale (tutti zeri) show(); for(end_flag = false; !end_flag; ) { // Incrementa il valore alla posizione corrente vals[pos]++; // Mostra la combinazione attuale show(); // Torna alla prima posizione. pos = last; // Vado avanti finchè non trovo un valore che non sia l'ultimo while (vals[pos]==(parola.size()-1)) { // Imposto la posizione corrente a 0 vals[pos] = 0; // precedente pos--; // Se sono arrivato prima dell'inizio del vettore, // cioè anche il primo carattere era un valore finale (come 9) // allora ho finito. if(pos < 0) end_flag = true; } } } void show() { for(int i=0; i<tot_chars; i++) { cout << parola[vals[i]]; } cout << endl; } void init() { for(int i=0; i<tot_chars; i++) vals[i] = 0; }

Rispondi quotando