[C] Shift - Rotate

raffaele19651
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.

Risposte
apatriarca
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?

raffaele19651
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.

apatriarca
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;

raffaele19651
Grazie mille!
Giovanni

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