3 posts
· 4 views
· Last UP: 10/04/2014 20:40
Problema codice C
Ciao a tutti, studio programmazione e sto studiando C, devo fare un programma che dato in imput un numero n e restituisce vero se questo è divisibile per 9 facendo il controllo tramite la somma delle cifre (18 1+8 = 9 è divisibile) e titeri il metodo nel caso in cui la somma delle cifre sia maggiore di 9, proprio in questo caso il mio codice non funziona un esempio di numero col quale non funziona è 297, spero possiate aiutarmi grazie SPOILER ( clicca per visualizzare ) #include <stdio.h> #include <stdlib.h> #include <math.h> int main(){ int n,resto,somma=0; printf("Inserire il numero intero,per sapere se è divisibile per 9: "); scanf("%d",&n); etichetta: while (n>0){ resto = n%10; somma += resto; n= n/10; printf("%d ", n); printf("%d", somma); } if (somma <9){ printf("Falso"); } if (somma == 9){ printf("Vero"); } if (somma>9){ n = somma; goto etichetta; } return 0; }
10/04/14 19:11
0
puoi farlo in tanti modi, vedi se questo ti va bene SPOILER ( clicca per visualizzare ) #include <stdio.h> #include <stdlib.h> // #include <math.h> La libreria matematica non serve bool divisibile(int numero_da_controllare,int divisibile_per) { bool divisibile; // Questa è la variabile da restituire bool completato = false; // Per il ciclo while (P.S: puoi farlo anche in altri modi, ad esempio con un do) int contatore = 1; // Contatore per la moltiplicazione while (completato==false) { /* Moltiplico la "base" per il contatore costruendo una specie di tabellina, in seguito effettuo il controllo del valore. Se i valori sono diversi allora dobbiamo controllare se abbiamo già superato il "numero_da_controllare" Se i valori sono uguali, allora il numero_da_controllare è divisibile per il numero scelto Ad esempio : numero_da_controllare = 27; divisibile_per = 9; Il ciclo eseguirà : 1) valore = 9 * 1 = 9; 2) valore < numero_da_controllare --> contatore = +1 3) valore = 9 * 2 = 18; 4) valore < numero_da_controllare --> contatore = +1 5) valore = 9 * 3 = 27; 6) valore = numero_da_controllare --> è divisibile ! Oppure : numero_da_controllare = 12; divisibile_per = 9; Il ciclo eseguirà : 1) valore = 9 * 1 = 9; 2) valore < numero_da_controllare --> contatore = +1 3) valore = 9 * 2 = 18; 4) valore > numero_da_controllare --> NON è divisibile ! */ int valore = divisibile_per * contatore; if (valore < numero_da_controllare) { /* Dobbiamo continuare a moltiplicare per il valore successivo Quindi incrementiamo il contatore e riprendiamo il ciclo */ contatore++; } else if (valore == numero_da_controllare) { /* Il numero è divisibile per 9 */ divisibile = true; completato = true; } else if (valore > numero_da_controllare) { /* Abbiamo superato il numero da controllare, questo significa che il numero non è divisibile per la variabile "divisibile_per" Possiamo uscire da ciclo while. */ divisibile = false; completato = true; } } return divisibile; } int main() { int n=0; printf("Inserire il numero intero,per sapere se e' divisibile per 9: "); scanf("%d",&n); /* Per come è stata definita la funzione di controllo è possibile utilizzare QUALSIASI numero ! Basta sostituire a "9" il numero di controllo desiderato, cioè se ad esempio volessimo vedere se un numero (dato in input) è divisibile per 7 basterà scrivere : bool _divisibile = divisibile(n,7); ATTENZIONE: se ad esempio scrivessi --> bool divisibile = divisibile(n,7); otterrei un errore perchè ho dichiarato divisibile come funzione e non come valore booleano naturalmente per evitare problemi puoi rinominare la funzione "divisibile" in qualunque modo vuoi */ bool _divisibile = divisibile(n,9); if (_divisibile==true) { printf("Vero\n"); } else { printf("Falso\n"); } system("PAUSE"); return 0; } /* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. Qui ti ho un main() un pò più generico in cui puoi settare (come input) direttamente tu i valori -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. int main() { int controllo_con = 0; int numero_da_controllare = 0; printf("--------------------------------\n"); printf("\tE' divisibile ?\n"); printf("--------------------------------\n"); printf("Inserisci un numero intero : "); scanf("%d", &numero_da_controllare); printf("\nControlla se e' divisibile per : "); scanf("%d", &controllo_con); bool _divisibile = divisibile(numero_da_controllare,controllo_con); if (_divisibile==true) { printf("\nRisultato : E' divisibile !\n\n"); } else { printf("\nRisultato : Non e' divisibile\n\n"); } printf("--------------------------------\n"); system("PAUSE"); return 0; } */
10/04/14 20:40
0
Grazie, appena posso lo controllo e ti dico se va bene
Log in to reply to this topic.
Messaggio simile al precedente
Il testo sembra un duplicato o un tentativo di UP. Per far risalire la discussione usa il pulsante UP: mantiene il thread pi├╣ ordinato. Puoi comunque pubblicare il messaggio se lo desideri.
Select message
False or abusive reports are misconduct and may lead to account restrictions and other action by staff.