|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
[JAVA] Non mi funziona questo algoritmo che calcola le permutazioni di una parola...
Ciao a tutti,
chi mi dice perchè il programma restituisce come permutazioni "null" seguito dalla prima lettera della parola immessa dall'utente? Codice:
import java.io.*;
import java.math.*;
public class permutazioni {
public static void main(String[] args) throws IOException {
// Costruisce l'oggetto di accesso alla tastiera
BufferedReader input=new BufferedReader(
new InputStreamReader(System.in)
);
// TODO code application logic here
String parola="";
double x;
int p;
int I=0;
int Y=0;
int flag=0;
int riempimento=0;
int K=0;
System.out.println("Inserire la parola di cui eseguire le permutazioni: ");
parola=input.readLine();
int lungh=parola.length(); //lunghezza parola di cui calcolarne il fattoriale
System.out.println(lungh);
int dim=1;
do{
dim=dim*lungh;
lungh--;
} while ((lungh-1)>0);
String vet[] = new String [dim]; //crea il vettore di permutazioni [l'indice andrà da 0 a (dim-1) ]
vet[0]=parola;
for(I=1; I<dim; I++) {
do {
flag=0;
for(Y=0; Y<lungh; Y++){
x=Math.random();
p=(int)(x*lungh);
vet[i]=vet[i]+parola.charAt(p);
}
for (K=0; K<riempimento; K++) {
if(vet[i]==vet[K]){
flag=1;
}
}
} while (flag==1);
riempimento++;
}
System.out.println("Le permutazioni della parola inserita sono:");
for(I=0; I<dim; I++){
System.out.println(vet[i]);
}
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Codice:
for(I=1; I<dim; I++) {
do {
flag=0;
for(Y=0; Y<lungh; Y++){
x=Math.random();
p=(int)(x*lungh);
vet[i]=vet[i]+parola.charAt(p);
}
for (K=0; K<riempimento; K++) {
if(vet[i]==vet[K]){
flag=1;
}
}
} while (flag==1);
riempimento++;
}
No comunque seriamente, in questo tipo di problemi non si usano mai funzioni random... |
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Quote:
Il primo for genera la permutazione, invertendo in maniera random la posizione delle lettere, mentre il secondo si preoccupa di stabilire se flag=1 (cioè se la permutazione è già presente nel vettore di permutazioni). Non so se mi sono spiegato bene... Comunque, perchè non si usa il random in questo caso? Sclera con le stringhe? |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Preciso che il programma, così com'è, non calcola le permutazioni bensì le disposizioni con ripetizione, dato che non è stato fatto il controllo ad ogni generazione random dell'indice; se viene generato, su quattro volte, più di una volta lo stesso valore, la nuova stringa conterrà due lettere uguali...
Magari ponendo i numeri prima in un vettore e poi controllando con un flag che nessun numero sia uguale all'altro il problema si risolve. Tuttavia resta quello del "null" in output seguito dalla prima lettera della parola immessa dall'utente di cui eseguire le permutazioni... Avete qualche idea per risolvere il problema??? Grazie |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
up
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
No, perchè in questo modo in via del tutto teorica l'esecuzione dell'algoritmo potrebbe andare avanti all'infinito, bisogna invece usare un procedimento che passo passo in modo ordinato trova tutte le permutazioni. Con un procedimento del genere puoi anche dire a priori, data la lunghezza della parola quanti cicli impiegherà il programma x generare il risultato.
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Prego, comunque ho trovato gli errori x cui ti scrive sempre null + la prima lettera, te li ho segnati in rosso:
Codice:
import java.io.*;
import java.math.*;
public class permutazioni {
public static void main(String[] args) throws IOException {
// Costruisce l'oggetto di accesso alla tastiera
BufferedReader input=new BufferedReader(
new InputStreamReader(System.in)
);
// TODO code application logic here
String parola="";
double x;
int p;
int i=0;
int y=0;
int flag=0;
int riempimento=0;
int k=0;
System.out.println("Inserire la parola di cui eseguire le permutazioni: ");
parola=input.readLine();
int lungh=parola.length(); //lunghezza parola di cui calcolarne il fattoriale
System.out.println(lungh);
int dim=1;
do{
dim=dim*lungh;
lungh--;
} while ((lungh-1)>0);
lungh=parola.length(); //Nel ciclo precedente avevi modificato il valore di lungh, quindi il random veniva sempre 0
String vet[] = new String [dim]; //crea il vettore di permutazioni [l'indice andrà da 0 a (dim-1) ]
vet[0]=parola;
for(i=1; i<dim; i++) {
do{
flag=0;
vet[i]=""; //Non avevi inizializzato vet[i] che inizialmente vale proprio "null"
for(y=0; y<lungh; y++){
x=Math.random();
p=(int)(x*lungh);
vet[i]=vet[i]+parola.charAt(p);
}
for (k=0; k<riempimento; k++) {
if(vet[i]==vet[k]){
flag=1;
}
}
} while (flag==1);
riempimento++;
}
System.out.println("Le permutazioni della parola inserita sono:");
for(i=0; i<dim; i++){
System.out.println(vet[i]);
}
}
}
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Grazie mille!!!!
Solo ora, grazie a te, mi sono accorto di quegli stupidi errori. Grazie!!! |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Ora funziona!!!!!!!!!!!!!!!!!!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:59.




















