[C] Piccolo programma
Buonasera!
Ho il seguente codice:
La traccia mi chiede di inserire la sequenza di caratteri 1 2 3 4 0.
Facendolo, il risultato è 6.
Mi viene chiesto di dire perché riesce 6.
Mi potreste aiutare a capirlo?
Ho il seguente codice:
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main() { int valore_inserito; int valore_calcolato=0; printf("Inserisci un valore intero tra 1 e 3. Per uscire inserisci 0\n"); scanf("%d", &valore_inserito); while(valore_inserito !=0) { switch (valore_inserito){ case 1: valore_calcolato=valore_calcolato-valore_inserito; break; case 2: valore_calcolato=0; case 3: valore_calcolato=valore_calcolato+valore_inserito; break; default: valore_calcolato++; } printf("Inserisci un valore intero tra 1 e 3. Per uscire inserisci 0\n"); scanf("%d", &valore_inserito); } printf("Il valore calcolato is %d\n", valore_calcolato); system("PAUSE"); return 0; }
La traccia mi chiede di inserire la sequenza di caratteri 1 2 3 4 0.
Facendolo, il risultato è 6.
Mi viene chiesto di dire perché riesce 6.
Mi potreste aiutare a capirlo?
Risposte
Qual'è il valore di valore_calcolato dopo ogni carattere inserito? Faccio i primi due valori:
- il valore iniziale è 0
- dopo aver letto 1 esegui il primo case in cui calcoli valore_calcolato = valore_calcolato - valore_inserito = valore_calcolato - 1. Quindi il valore a questo punto è -1
- inserisci quindi il valore 2. In questo caso valore_calcolato viene semplicemente azzerato, ma manca il break per cui viene eseguito anche il case 3 in cui aggiungi 2 a tale valore. Per cui valore_calcolato sarà 2 a questo punto.
Continua tu..
- il valore iniziale è 0
- dopo aver letto 1 esegui il primo case in cui calcoli valore_calcolato = valore_calcolato - valore_inserito = valore_calcolato - 1. Quindi il valore a questo punto è -1
- inserisci quindi il valore 2. In questo caso valore_calcolato viene semplicemente azzerato, ma manca il break per cui viene eseguito anche il case 3 in cui aggiungi 2 a tale valore. Per cui valore_calcolato sarà 2 a questo punto.
Continua tu..
Ti ringrazio per l'aiuto... ora ho capito e sono riuscito a risolvere! Grazie!
Potresti, per caso, aiutarmi anche in questo esercizio?
"Dato in input un array di 5 caratteri A e un numero intero N, produrre in output l’array B che contiene gli elementi di A spostati a destra di N posizioni (l’ultimo elemento, se spostato a destra di un posto, si troverà in prima posizione). Ad es, se A={a,b,c,d,e} e N = 3, allora B={c, d, e, a, b}. Nel caso in cui N sia <0, allora lo spostamento è verso sinistra. E’ richiesta sia la trattazione per via iterativa che quella per via ricorsiva. Si richiede l'uso di funzioni".
Io ho pensato a questo codice:
Potresti, per caso, aiutarmi anche in questo esercizio?
"Dato in input un array di 5 caratteri A e un numero intero N, produrre in output l’array B che contiene gli elementi di A spostati a destra di N posizioni (l’ultimo elemento, se spostato a destra di un posto, si troverà in prima posizione). Ad es, se A={a,b,c,d,e} e N = 3, allora B={c, d, e, a, b}. Nel caso in cui N sia <0, allora lo spostamento è verso sinistra. E’ richiesta sia la trattazione per via iterativa che quella per via ricorsiva. Si richiede l'uso di funzioni".
Io ho pensato a questo codice:
#include <stdio.h> #include <stdlib.h> void shift_dx (); void shift_sx (); static char a[5]; int main() { int i, j; int b; int N; char temp; for(i=0; i<5; i++) { printf("Inserisci elemento di indice %d: ", i); scanf("%s", &a[i]); } printf("N Ë positivo o negativo? (1 = positivo, 2 = negativo)\n"); scanf("%d", &b); printf("Inserisci N\n"); scanf("%d", &N); if (b==1) { shift_dx (a, N); } else { shift_sx (a, N); } printf("Vettore finale (ruotato a "); if(b==1){ printf("destra"); } else { printf("sinistra"); } printf(" di %d posizioni) : \n", N); for (i=0; i<5; i++){ printf("%c", a[i]); printf("\n"); } system("pause"); return 0; } void shift_dx (char a[], int N) { int i, j; char temp; for(i=0; i<N; i++) { temp = a[4]; for(j=4; j>0; j--) a[j]=a[j-1]; a[j]=temp; } } void shift_sx (char a[], int N) { int i, j; char temp; for(i=0; i<N; i++) { temp = a[0]; for(j=0; j<4; j++) a[j]=a[j+1]; a[j]=temp; } }