[C] Piccolo programma

alfiere15
Buonasera!
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
apatriarca
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..

alfiere15
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:
#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;
    }
}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.