Visualizzazione dei risultati da 1 a 6 su 6

Discussione: calcolo combinatorio

  1. #1

    calcolo combinatorio

    salve,
    sto tentando di generare liste di lettere concatenate senza ripetizioni, del tipo:

    a
    b
    c
    ...
    x
    y
    z
    aa
    ab
    ac
    ad
    ae
    ...
    zz

    Qualcuno di voi ha un suggerimento? grazie

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    con che criterio?

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Pensavo a qualcosa del tipo: avendo una serie di simboli (a,b,...z), ottenere tutte le combinazioni non ripetute, per esempio di due simboli (aa, ab, ac, ad, etc) o di tre (aaa, aab, aac, etc). L'ordine non é importante, potrebbe anche essere: gf, ac, zu, etc.
    Solo che non so dove partire: mi chiedevo se esiste una qualche funzione o metodo che potrebbe essere usato a questo scopo.

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Ma in che linguaggio?

    Il seguente programma C ti stampa tutte le combinazioni lunghe N lettere scelte nell'intervallo a...MAXCHAR:

    codice:
    #include <stdio.h>
    #include <stdlib.h> 
    #include <string.h> 
    
    #define N 3
    #define MAXCHAR 'g'
    
    
    void genera(char word[], int len, int current){
    	if(len == 0){
    		word[current] = '\0';
    		printf("\n%s", word);
    		return;
    	}
    	for(char c = 'a'; c <= MAXCHAR; c++){
    		word[current] = c;
    		genera(word, len - 1, current + 1);
    	}
    }
    
    int main(){
     	int len = N;
    	char *word = (char *)malloc(len + 1 * sizeof(char));
    	genera(word, len, 0);
    	free(word);
    }

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    anx,
    non capisco il c, sto tentando si imparare il linguaggio vb.net. Non potresti spiegarmi a parole il programma che hai scritto? Grazie

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Se fosse nota la lunghezza delle combinazioni (N) ti basterenne fare N cili (for o while, dipende da come si fanno in VB che non conosco) annidati; lo i-esimo ciclo si occupa di far variare la i-esima posizione della combinazione si tutte le lettere a disposizione.

    Se N non è noto a priori puoi sfruttare il meccanismo della ricorsione: la funzione richiama se stessa per simulare i cicli annidati; ogni singola chimata riceve come input la posizione i-esima di cui si deve occupare, e la fa variare nell'insieme di tutte le lettere, e per ognuna di esse invoca ricorsivamente se stessa aumentando i di uno in modo che la chimata ricorsiva si occupi della posizione successiva.
    codice:
    //parola è un array di N charatteri
    parola = carattere[N]
    
    genera(intero N, intero i){
    	se i supera N
    		stampa parola ed esci;
    
    	altrimenti
    	
    	per ogni carattere c:{
    		poni parola[i] = c;
    		invoca genera(N, i + 1);
    	}
    }
    inizialmente devi invocare la funzione con i = 1, ad esempio

    genera(5, 0);

    se N = 5

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.