Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Senza entrare nel merito del tuo algoritmo che non è corretto per calcolare il numero arabo (se la "cifra" in posizione i+1 è minore della "cifra" in posizione i allora somma, altrimenti sottrai... quindi, se io scrivo "II" il valore convertito è 0 visto che sono uguali... il confronto sugli indici non capisco che senso abbia e, comunque, i non viene mai incrementato... e quando raggiungo la fine (cioè mai) controllo comunque la cifra successiva alla fine, che non esiste...), vediamo un po' quel che stai cercando di fare dentro quello switch:

    numero_romano[j] è una locazione in memoria che contiene un carattere... come puoi pretendere (logicamente parlando) di assegnarci (memorizzarci dentro) un numero intero (1, 5, 10, 50, 100, 500, 1000)?


    Ciao.
    Ultima modifica di LeleFT; 19-04-2017 a 16:35
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    27
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Senza entrare nel merito del tuo algoritmo che non è corretto per calcolare il numero arabo (se la "cifra" in posizione i+1 è minore della "cifra" in posizione i allora somma, altrimenti sottrai... quindi, se io scrivo "II" il valore convertito è 0 visto che sono uguali... il confronto sugli indici non capisco che senso abbia e, comunque, i non viene mai incrementato... e quando raggiungo la fine (cioè mai) controllo comunque la cifra successiva alla fine, che non esiste...), vediamo un po' quel che stai cercando di fare dentro quello switch:

    numero_romano[j] è una locazione in memoria che contiene un carattere... come puoi pretendere (logicamente parlando) di assegnarci (memorizzarci dentro) un numero intero (1, 5, 10, 50, 100, 500, 1000)?


    Ciao.
    hai assolutamente ragione...direi allora di modificare il codice inserendo una nuova variabile ed inserirla nello switch

    codice:
    switch (cifra_romana) {        case 'I': cifra_romana=1;break;
            case 'V': cifra_romana=5;break;
            case 'X': cifra_romana=10;break;
            case 'L': cifra_romana=50;break;
            case 'C': cifra_romana=100;break;
            case 'D': cifra_romana=500;break;
            case 'M': cifra_romana=1000;break;
    }
    in questo modo.. che dici?
    inoltre nell'algoritmo dovrei modificare il + col meno e dovrei risolvere il tutto, no?

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    E' un esercizio interessante proverò a risolverlo anche io
    Il problema che non ti porta alla soluzione è che l'algoritmo di conversione da numeri romani a numeri decimali è più complesso, diciamo molto più complesso.

    Alcuni suggerimenti
    1 se una numero a sinistra è più piccola di quella di destra va sottratta, se una numero a destra è più piccola di quello di sinistra va sommato.

    2 Ma un numero romano è composto da più cifre, quindi per sommare dovrai considerare almeno due caratteri successivi, esempio MXC , non puoi sommare 1000+10+100 ma dovrai fare 100-10+1000, quindi per la somma devi considerare almeno i due caratteri successivi, visto che in numeri romani si toglie uno a sinistra, esempio 80 LXXX XC 90, 900 CM 800 DCCC , QUINDI ti basta considerare due caratteri successivi, SE IL SECONDO successivo è maggiore esegui una sottrazione, ALTRIMENTI aggiungi semplicemente il suo valore in decimale.
    Tecnologia

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2017
    Messaggi
    27
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    E' un esercizio interessante proverò a risolverlo anche io
    Il problema che non ti porta alla soluzione è che l'algoritmo di conversione da numeri romani a numeri decimali è più complesso, diciamo molto più complesso.

    Alcuni suggerimenti
    1 se una numero a sinistra è più piccola di quella di destra va sottratta, se una numero a destra è più piccola di quello di sinistra va sommato.

    2 Ma un numero romano è composto da più cifre, quindi per sommare dovrai considerare almeno due caratteri successivi, esempio MXC , non puoi sommare 1000+10+100 ma dovrai fare 100-10+1000, quindi per la somma devi considerare almeno i due caratteri successivi, visto che in numeri romani si toglie uno a sinistra, esempio 80 LXXX XC 90, 900 CM 800 DCCC , QUINDI ti basta considerare due caratteri successivi, SE IL SECONDO successivo è maggiore esegui una sottrazione, ALTRIMENTI aggiungi semplicemente il suo valore in decimale.
    bene, scusa se son così ingenuo, quindi una volta considerato il successivo, quindi i++, devo porre che se quest'ultimo è maggiore del precedente sottraggo, sennò sommo? giusto?

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.