[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;
}
}