Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] funzione stampare tutte le possibili stringhe di 4 caratteri

    Scrivere il codice di una funzione C che permetta di stampare tutte le possibili stringhe di lunghezza n
    contenenti solo i 4 caratteri a,b,c,d.
    il valore di n dovrà essere passato come argomento e dovrà essere inferiore o uguale a 8.
    da quello che ho capito io devo dichiarare un char di 4 caratteri (appunto a,b,c,d) ma non so se usare cicli for che tengano in considerazione strlen.
    sapete aiutarmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    inizia almeno a descrivere a parole l'algoritmo, poi vediamo di tradurlo in C.

  3. #3
    Originariamente inviato da c0der
    inizia almeno a descrivere a parole l'algoritmo, poi vediamo di tradurlo in C.
    da quello che ne ho capito io io ho 4 caratteri (a,b,c,d) che si possono mescolare tra loro in diversi modi per formare stringhe di massimo 8 caratteri.
    la funzione deve appunto saper mescolare queste 4 lettere per formare queste parole.
    sapreste darmi una mano?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Proviamo così: fai finta di avere solo due caratteri: a e b.
    Che procedimento usi per avere tutte le combinazioni? ("mescolare" non è il termine esatto).

    Immagina il procedimento con 2, poi è uguale anche con 3 o 4.

  5. #5
    Originariamente inviato da c0der
    Proviamo così: fai finta di avere solo due caratteri: a e b.
    Che procedimento usi per avere tutte le combinazioni? ("mescolare" non è il termine esatto).

    Immagina il procedimento con 2, poi è uguale anche con 3 o 4.
    se ho 2 caratteri come a e b le uniche combinazioni che ottengo sono ab e ba
    se ne ho tre abc acb bac bca cab cba ....

    ma a me serve che le parole che formino abbiano 8 caratteri.
    qualcuno che mostri qualche esempio di codice c'è?

  6. #6
    Originariamente inviato da c0der
    Proviamo così: fai finta di avere solo due caratteri: a e b.
    Che procedimento usi per avere tutte le combinazioni? ("mescolare" non è il termine esatto).

    Immagina il procedimento con 2, poi è uguale anche con 3 o 4.
    se ho 2 caratteri come a e b le uniche combinazioni che ottengo sono ab e ba
    se ne ho tre abc acb bac bca cab cba ....

    ma a me serve che le parole che formino abbiano 8 caratteri.
    qualcuno che mostri qualche esempio di codice c'è?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Scusami co...ne io. Rifo volevo scrivere:

    Proviamo così: fai finta di avere al massimo due posizioni (ma sempre 4 caratteri, a, b, c, d)
    Che procedimento usi per avere tutte le combinazioni?

    Immagina il procedimento con stringhe lunghe 2, poi è uguale anche con 3, 4, 5, 6, 7 e 8.

    P.S. Le combinazioni erano 4 comunque (aa, ab, ba, bb)

  8. #8
    Originariamente inviato da c0der
    Scusami co...ne io. Rifo volevo scrivere:

    Proviamo così: fai finta di avere al massimo due posizioni (ma sempre 4 caratteri, a, b, c, d)
    Che procedimento usi per avere tutte le combinazioni?

    Immagina il procedimento con stringhe lunghe 2, poi è uguale anche con 3, 4, 5, 6, 7 e 8.

    P.S. Le combinazioni erano 4 comunque (aa, ab, ba, bb)
    ok allora immaginando che a e b siano i 2 indici di una matrice per ottenere le 4 combinazioni faccio:
    a[0][0]
    a[0][1]
    a[1][0]
    a[1][1]
    cioè il primo carattere col primo, il primo col secondo, il secondo col primo e il secondo col secondo.
    non so se con sto esempio ti ho fatto capire .
    se ne avessi 3 dovrei comportarmi come sopra.
    ma potresti dirmi a livello di codice come procedere?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Direi che potremmo dire che stai facendo una "disposizione con ripetizioni":
    vedi http://it.wikipedia.org/wiki/Calcolo...on_ripetizioni

    Semplifichiamo con 2 oggetti (k) estratti da un insieme di 4 elementi (n)
    Le disposizioni sono n^k (16)
    aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd

    Puoi vederla come elencare tutti i numeri in base n, da 0 a n^k.

    1) Inizializzi un array di char di k elementi ad 'a'.
    2) chiami in un ciclo for che va da 0 a n^k una funzione (ricorsiva) che ti incrementa l'iesima cifra.
    2.a) Se quella cifra è minore di n allora la incrementi
    2.b) Se quella cifra è uguale ad n allora la riporti ad 'a' e incrementi la cifra successiva
    (questo lo fai richiamando la funzione stessa e passandogli l'indice successivo, i+1)

    Cosi ho fatto in un programmino di test (24 righe).

  10. #10
    risolto.
    grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.