[C] Shift - Rotate
Buongiorno.
Mi chiamo Giovanni e frequento la terza liceo scientifico Scienze Applicate.
Abbiamo studiato i comandi "shift" e "rotate" dei vettori. Per quanto riguardo lo shift penso di avere capito come fare; vorrei, tuttavia, capire meglio il loro significato, in particolare di "rotate"
.
Qual'è la sintassi corretta nel linguaggio C.
Noi usiamo sempre il ciclo for.
Potreste aiutarmi?
Giovanni.
Mi chiamo Giovanni e frequento la terza liceo scientifico Scienze Applicate.
Abbiamo studiato i comandi "shift" e "rotate" dei vettori. Per quanto riguardo lo shift penso di avere capito come fare; vorrei, tuttavia, capire meglio il loro significato, in particolare di "rotate"
.
Qual'è la sintassi corretta nel linguaggio C.
Noi usiamo sempre il ciclo for.
Potreste aiutarmi?
Giovanni.
Risposte
Non esiste una implementazione standard di quelle operazioni sui vettori. Si possono usare delle funzioni come memmove invece di fare un ciclo, ma non esiste alcuna "sintassi corretta" (non ha in realtà nulla a che vedere con la sintassi del linguaggio.. il termine corretto qui sarebbe implementazione). In effetti qualsiasi implementazione il cui risultato è corretto in base alla definizione di quelle operazioni è corretta.
Che cosa non capisci del loro significato? La loro utilità? Quello che fanno?
Che cosa non capisci del loro significato? La loro utilità? Quello che fanno?
Intanto grazie per la risposta.
In realtà ho provato a scrivere un piccolo programma che eseguisse uno shift a sx e a dx e ci sono riuscito.
Non riesco, invece, a capire come fare eseguire un rotate.
Ho provato così.
#include
#include
main (){
int n, i, V[10];
printf("Inserisci un numero compreso tra 1 e 10:");
scanf("%d", &n);
for (i=0; i
printf("Inserisci un numero: ");
scanf("%d", &V);
}
printf("Il Vettore contiene i seguenti numeri:");
for (i=0; i
printf("%d ",V);
}
for ( i=0; i<=n-2;i++){
V=V[i+1];
}
V[n-1]=V[0];
printf("\nRotate a sinistra ha prodotto il seguente Vettore: ");
for (i=0; i
printf("%d ",V);
}
V[0]=V[n-1];
for ( i=n-1; i>1;i--){
V=V[i-1];
}
printf("\nRotate a destra ha prodotto il seguente Vettore: ");
for (i=0; i
printf("%d ",V);
}
}
Ovviamente non funziona.
Giovanni.
In realtà ho provato a scrivere un piccolo programma che eseguisse uno shift a sx e a dx e ci sono riuscito.
Non riesco, invece, a capire come fare eseguire un rotate.
Ho provato così.
#include
#include
main (){
int n, i, V[10];
printf("Inserisci un numero compreso tra 1 e 10:");
scanf("%d", &n);
for (i=0; i
scanf("%d", &V);
}
printf("Il Vettore contiene i seguenti numeri:");
for (i=0; i
}
for ( i=0; i<=n-2;i++){
V=V[i+1];
}
V[n-1]=V[0];
printf("\nRotate a sinistra ha prodotto il seguente Vettore: ");
for (i=0; i
}
V[0]=V[n-1];
for ( i=n-1; i>1;i--){
V=V[i-1];
}
printf("\nRotate a destra ha prodotto il seguente Vettore: ");
for (i=0; i
}
}
Ovviamente non funziona.
Giovanni.
In entrambi i cicli c'è almeno un valore che viene usato ma che è già stato settato ad un valore non corretto. La soluzione più semplice è quella di memorizzare tale valore in una variabile e usare questa variabile alla fine del ciclo.
// sinistra int v0 = V[0]; for (i = 0; i <= n-2; i++) { V[i] = V[i + 1]; } V[n-1] = v0; // destra int vLast = V[n - 1]; for (i=n-1; i > 1; i--) { V[i] = V[i - 1]; } V[0] = vLast;
Grazie mille!
Giovanni
Giovanni