Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Rotazione complessa di elementi in un array
Forum - C/C++ - Rotazione complessa di elementi in un array

Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 17:38
Lunedì, 24/10/2011
Io ho scritto due funzioni di rotazione che operano su un vettore di caratteri di lunghezza pari ad un quadrato perfetto.
La prima ruota di numero_linea volte ogni linea dispari verso destra e numero_linea volte ogni linea pari verso sinistra. La seconda ruota di numero_colonna volte ogni colonna dispari verso il basso e numero_colonna volte ogni colonna pari verso l'alto.

Esempio:
abcde
fghij
klmno
pqrst
uvwxy

diventa:
eabcd
hijfg
mnokl
tpqrs
uvwxy

e in fine:
unoxd
epqcg
hvwfl
mabks
tijry

Vorrei ridurre il tutto ad una sola funzione, o meglio, ad un solo ciclo che sposti ogni carattere nella sua posizione finale senza effettuare tutti i passaggi.
È possibile? Qualche suggerimento?

Ultima modifica effettuata da drewnik99 il 25/10/2011 alle 17:37
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6075
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:01
Lunedì, 24/10/2011
Tutto in una funzione lo capisco...

In un solo ciclo, perché?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 19:31
Lunedì, 24/10/2011
Se uso due cicli, accedo ad ogni elemento del vettore due volte: una per la prima rotazione delle righe e l'altra per la rotazione delle colonne. Se riesco a trovare il modo di ottenere subito la posizione finale di ogni carattere, accedo ad ogni elemento del vettore una sola volta.

Ultima modifica effettuata da drewnik99 il 24/10/2011 alle 19:31
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 19:37
Lunedì, 24/10/2011
Io avevo provato qualcosa di simile:

Codice sorgente - presumibilmente C++

  1. char txt[] = "abcdefghijklmnopqrstuvwxy";
  2. int r = sqrt(strlen(txt));
  3. char result[r][r];
  4. int y, z, x = 0;
  5.  
  6. for(y = 0; y < r; y++)
  7. {
  8.     for(z = 0; z < r ; z++)
  9.     {
  10.         if(((z + (y + 1)) % 2) == 1)
  11.         {
  12.                 result[(r - (z + (y + 1)) - 1)][(z + (y + 1)) % r] = txt[x++];
  13.         }
  14.         else
  15.         {
  16.                 result[(z + (y + 1) + 1) % r][(z + (y + 1)) % r] = txt[x++];
  17.         }
  18.     }
  19. }


Ultima modifica effettuata da drewnik99 il 24/10/2011 alle 20:23
PM Quote