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

    [Scheme] Conversione binario-decimale (solo parte decimale)

    Salve!

    Mi sto spaccando la testa pensando a come risolvere questo problema posto dal professore nell'esame di programmazione dell'anno scorso (io ce l'ho il 21 gennaio e il fatto di non riuscire a risolvere questo mi mette una certa ansia!).

    Vi posto il testo:

    Un numero x compreso nell’intervallo [0, 1[ (cioè tale che 0 ≤ x < 1) può essere codificato, eventualmente in forma
    approssimata, tramite una sequenza finita di cifre binarie, precisamente quelle che comparirebbero a destra del punto
    che separa la parte intera dalla parte frazionaria nella rappresentazione in base 2. Definisci una procedura fract-part
    che, data una stringa f di 0/1, restituisce il valore numerico x di f interpretata come parte frazionaria in base 2.

    Esempi:
    (fract-part "0") → 0 (fract-part "01") → 0.25 (fract-part "101") → 0.625
    (fract-part "1") → 0.5 (fract-part "11") → 0.75 (fract-part "0101") → 0.3125


    Voi come fareste? Avete qualche suggerimento?


    Opzionale: ho provato a risolverlo in modo ricorsivo usando le liste (anche se l'input è una stringa, dovrei attuare la conversione da stringa a lista, ma quello lo implementerò dopo, ora mi interessa più che altro trovare il procedimento), però il risultato viene giusto solo se l'input è 0 o 1, altrimenti gli altri sono tutti sbagliati.
    Avete idea di dove potrei aver sbagliato? Vi posto il codice:

    (define fract-part
    (lambda (bin)
    (let ((n (length bin)))
    (if (= n 0)
    0
    (+ (* (car bin) (/ 1 expt 2 (+ n 1))) (fract-part (cdr bin)))))))



    Grazie mille per l'attenzione!

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
    (define fract-part'
        (lambda (bin)
            (cond
                ( (null? bin) 0 )
                ( else (+ (* (car bin) (/ 1 (expt 2 (length bin)))) (fract-part' (cdr bin)))))))
     
    (define fract-part
        (lambda (bin)
            (fract-part' (reverse bin))))
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Ti ringrazio per la risposta Scara, però purtroppo il tuo programma restituisce esattamente i miei risultati, ovvero funziona se in input gli do 0 o 1, ma negli altri casi il risultato è sbagliato.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Puoi controllare qui: controlla.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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