|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
correzione programma in C
ho scritto questa semplice permutazione però non mi funziona perchè manca qualcosa nel codice e non sono molto pratico di C. mia aiutate a farlo funzionare???
#include <assert.h> #include <stdlib.h> #include <stdio.h> #include <time.h> /*genera tutte le permutazioni sui valori 0,1,...,n-1, inizialmente k = -1 e val[i] = 0, per 0=i<n. prec: vett != NULL && val != NULL; *postc: stampa a video tutte le permutazioni su 0,1,...,n-1, memorizzate in vett.*/ //vett=un parametro di tipo vettore,di interi per la permutazione// //n= Un parametro di tipo intero per la lunghezza del vettore vett// //k=un parametro di tipo intero per la posizione corrente nella permutazione// //val=un parametro di tipo vettore di interi per i valori già usati// void genTPerm(int *vett,int k,int *val,unsigned int n){ int i; if (k == n - 1){ stampaVett(vett,n); }else{ for(i=0;i<n;i++){ if (val[i] == 0){ vett[k+1] = i; val[i] = 1; genTPerm(vett,k+1,val,n); val[i] = 0; } } } } int main(void){ int i; int vett[i]; genTPerm(vett,-1,0, 3); } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Codice:
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/*genera tutte le permutazioni sui valori 0,1,...,n-1, inizialmente k = -1 e val[i] = 0, per 0=i<n.
prec: vett != NULL && val != NULL;
*postc: stampa a video tutte le permutazioni su 0,1,...,n-1, memorizzate in vett.*/
//vett=un parametro di tipo vettore,di interi per la permutazione//
//n= Un parametro di tipo intero per la lunghezza del vettore vett//
//k=un parametro di tipo intero per la posizione corrente nella permutazione//
//val=un parametro di tipo vettore di interi per i valori già usati//
void stampaVett(int *vett, int n)
{
for (int i = 0; i < n; i++)
{
printf ("%d ", vett[i]);
}
printf("\n");
}
void genTPerm(int *vett,int k,int *val, int n)
{
int i;
if (k == n - 1)
{
stampaVett(vett,n);
}
else
{
for(i=0; i<n; i++)
{
if (val[i] == 0)
{
vett[k+1] = i;
val[i] = 1;
genTPerm(vett,k+1,val,n);
val[i] = 0;
}
}
}
}
int main(void)
{
int vett[5];
int val[5] = {0, 0, 0, 0, 0};
genTPerm(vett,-1, val, 5);
printf ("Fine permutazioni\n");
}
__________________
In God we trust; all others bring data |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
correzione programma in C
come faccio a farlo funzionare se scritto in questo modo:
#include <assert.h> #include <stdlib.h> #include <stdio.h> #include <time.h> /* Correzione */ /* VARIABILI GLOBALI: n nChr = numero di permutazioni alcolate (inizialmente 0) Chr = permutazione Chr1 = permutazione inversa (Chr1[i] = n equivale ad elemento di permutazione non definito (se Chr[i]=j, allora Chr1[i]=j) Succ = risposta della procedura genTPerm (inizialmente 1) */ void genTPerm(int k) { int i; if(k>n-1) { stampaVett(Chr); /* verifica se la soluzione trovata è un ciclo: se si succ=1 e termina genTPerm */ nChr++; if(nChr>n*n) {Succ=0; /* Termina la procedura ricorsiva */ } } else for(i=0;i<n;i++) {if(Chr1[i]==n) {Chr[k]=i; Chr1[i]=k; genTPerm(k+1); Chr1[i]=n; Chr[k]=n; } } } } int main(){ } |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
correzione programma in C
ho provato ad aggiustare la prima parte del codice viene eseguito però secondo me è sballato ho fatto qualche errore nelle variabili globali e nel main ed inoltre manca (/* verifica se la soluzione trovata è un ciclo: se si succ=1 e termina genTPerm */).
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* Correzione */
/*
VARIABILI GLOBALI:
n
nChr = numero di permutazioni alcolate (inizialmente 0)
Chr = permutazione
Chr1 = permutazione inversa (Chr1[i] = n equivale ad elemento di permutazione non definito
(se Chr[i]=j, allora Chr1[i]=j)
Succ = risposta della procedura genTPerm (inizialmente 1)
*/
int Chr[2];
int Chr1[2];
int nChr=0;
int Succ=1;
int n;
void genTPerm(int k)
{
int i;
if(k>n-1)
{
printf("%d",Chr);
printf("\n");
/* verifica se la soluzione trovata è un ciclo: se si succ=1 e termina genTPerm */
nChr++;
if(nChr>n*n)
{
Succ=0;
return ;
}
}
else
for(i=0;i<n;i++)
{if(Chr1[i]==n)
{Chr[k]=i;
Chr1[i]=k;
genTPerm(k+1);
Chr1[i]=n;
Chr[k]=n;
}
}
}
int main(){
genTPerm(2);
return 0;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:04.



















