Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve ragazzi, studiando mi è capitata questa traccia sotto mano:
Codice sorgente - presumibilmente C#
Scrivere una funzione void rot(char C[], int n, int k) che ruota i caratteri del vettore C di k posizioni a destra. Ad esempio, se i caratteri nel vettore C sono "programma"(n = 9) e k = 3, allora la funzione modifica il vettore in modo che contenga "mmaprogra".
Sinceramente ho buttato giu qualcosa su carta per capire il procedimento xo mi richiede troppi passaggi tra variabili, che procedimento si può utilizzare per far si che la funzione non diventi troppo elaboriosa e lunga?? sara anche un programmino semplice ma mi sta facendo impazzire da 1 oretta XD non ne vengo fuori hahah
vuoi la funzione già tutta implementata? o dei suggerimenti?
Ti do solo suggerimenti
Copi l'intero vettore di caratteri in un altro vettore ad esempio: char stringa1[20]; In quel vettore ci lavori su. I risultati ottenuti saranno salvati sul vettore in questo caso C.
Esempio:
Codice sorgente - presumibilmente C/C++
char stringa[20];
strncpy(stringa, C, n);
// ciclo con variabile per la selezione degli elementi
stringa[0] = C[0+k];
Se il risultato ovvero 0+k (in questo caso) è maggiore di n, il carattere sarà copiato nel primo elemento del vettore C[0]...
no aspetta, come hai fatto te l'esempio verrebbe fuori una cosa del genere:
Codice sorgente - presumibilmente C++
void rot(char C[],int n,int k){
int i;
char b[n];
strcpy(b,C);
for(i=0;i<n;i++){
C[i]=b[i+k];
}
}
facendo in questo modo la prima stringa andrebbe a contenere dopo il coclo solamente le lettere che io non dovevo spostare, quando invece le lettere che "hanno ruotato" non ci sono xke sono state eliminate
EDIT
cioè io l'ho fatto in questo modo
Codice sorgente - presumibilmente C++
void rot(char C[],int n,int k){
int i;
char b[n];
strcpy(b,C);
for(i=0;i<n;i++){
if(i+k>=n){
C[i]=b[i-k];
}
C[i]=b[i+k];
}
}
teoricamente cosi dovrebbe funzionare xo quando mando in esecuzione con C=ciao k=2 mi stampa solo "ao" cosa sbaglio? logicamente dovrebbe funzionare ma non va
Ultima modifica effettuata da crack001 il 05/01/2011 alle 17:50
Grazie a tutti per aver risposto, ho provato a tradurre quello di gigisoft, ma ci sono errori di indice credo, cioè non mi è tnt kiaro cm funziona la ricorsione in questa funzione, viene richiamata solo con k=1???
cmq...visto che ormai grazie a pitagora avevo buttato giu quel piccolo codice con la copia della stringa, logicamente dovrebbe funzionare, xke non funziona come si deve?
Grazie a tutti per aver risposto, ho provato a tradurre quello di gigisoft, ma ci sono errori di indice credo, cioè non mi è tnt kiaro cm funziona la ricorsione in questa funzione, viene richiamata solo con k=1???
cmq...visto che ormai grazie a pitagora avevo buttato giu quel piccolo codice con la copia della stringa, logicamente dovrebbe funzionare, xke non funziona come si deve?
beh... riguardo agli indici, io l'ho scritto in pseudo codifica, per 1 intendevo il primo elemento per 2 il secondo, ecc...
il C pero' parte da 0, scusa se non sono stato chiaro su questo punto.
Poi c'era effettivamente un errore, nella roazione di un elemento bsognava usare n anziche' k, scusami anche per questo.
Riguardo alla ricorsione, se k=1 faccio la rotazione di 1, se k=x>1 faccio x rotazioni di 1; in realta' si poteva fare anche cosi' (ora gli indici sono giusti):
Salve ragazzi, studiando mi è capitata questa traccia sotto mano:
Codice sorgente - presumibilmente C#
Scrivere una funzione void rot(char C[], int n, int k) che ruota i caratteri del vettore C di k posizioni a destra. Ad esempio, se i caratteri nel vettore C sono "programma"(n = 9) e k = 3, allora la funzione modifica il vettore in modo che contenga "mmaprogra".
Sinceramente ho buttato giu qualcosa su carta per capire il procedimento xo mi richiede troppi passaggi tra variabili, che procedimento si può utilizzare per far si che la funzione non diventi troppo elaboriosa e lunga?? sara anche un programmino semplice ma mi sta facendo impazzire da 1 oretta XD non ne vengo fuori hahah
Salve,
se vuoi evitare di ricopiare tutto l'array, nella funzione rot fai cosi' ( te lo scrivo in pseudocodice ):
Codice sorgente - presumibilmente VB.NET
Funzione rot(C[], n, k)
Variabili:
Temp = Carattere
I = Intero
Inizio Funzione
Se ((k < 0) Oppure (n < 0)) Allora
Inizio Se
Errore!!!
Esci
Fine Se
Se (k = 1) allora
Inizio Se
Temp = C[n]
For I = n to 2 step(-1)
Inizio For
C[I]= C[I - 1]
Fine For
C[1]= Temp
Altrimenti
For I = 1 to k
Inizio For
rot(C, n, 1)
Fine For
Fine Se
Fine Funzione
Per la traduzione in C non dovresti avere troppi problemi.
Ciao.
Luigi
Ultima modifica effettuata da gigisoft il 07/01/2011 alle 19:46