[C] Shift - Rotate

Messaggioda raffaele1965 » 18/08/2018, 09:21

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.
raffaele1965
Junior Member
Junior Member
 
Messaggio: 166 di 342
Iscritto il: 16/09/2009, 17:12

Re: [C] Shift - Rotate

Messaggioda apatriarca » 18/08/2018, 21:37

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?
apatriarca
Moderatore
Moderatore
 
Messaggio: 5078 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Shift - Rotate

Messaggioda raffaele1965 » 19/08/2018, 08:10

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<stdio.h>
#include<stdlib.h>

main (){

int n, i, V[10];

printf("Inserisci un numero compreso tra 1 e 10:");
scanf("%d", &n);

for (i=0; i<n; i++){
printf("Inserisci un numero: ");
scanf("%d", &V[i]);
}

printf("Il Vettore contiene i seguenti numeri:");
for (i=0; i<n; i++){
printf("%d ",V[i]);
}

for ( i=0; i<=n-2;i++){
V[i]=V[i+1];
}
V[n-1]=V[0];

printf("\nRotate a sinistra ha prodotto il seguente Vettore: ");
for (i=0; i<n; i++){
printf("%d ",V[i]);

}
V[0]=V[n-1];
for ( i=n-1; i>1;i--){
V[i]=V[i-1];
}

printf("\nRotate a destra ha prodotto il seguente Vettore: ");
for (i=0; i<n; i++){
printf("%d ",V[i]);

}

}

Ovviamente non funziona.

Giovanni.
raffaele1965
Junior Member
Junior Member
 
Messaggio: 167 di 342
Iscritto il: 16/09/2009, 17:12

Re: [C] Shift - Rotate

Messaggioda apatriarca » 20/08/2018, 01:02

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.
Codice:
// 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;
apatriarca
Moderatore
Moderatore
 
Messaggio: 5079 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Shift - Rotate

Messaggioda raffaele1965 » 20/08/2018, 16:16

Grazie mille!
Giovanni
raffaele1965
Junior Member
Junior Member
 
Messaggio: 168 di 342
Iscritto il: 16/09/2009, 17:12


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite