Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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: 6402
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