Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Rotar arreglo a la derecha

Estas en el tema de Rotar arreglo a la derecha en el foro de C/C++ en Foros del Web. Código: //Declaración de variables int laiArreglo[8], laiArreglo2[8] = {0}, liContador, liRotaciones; //Entrada de datos for (liContador=0; liContador<8; liContador++) { do { printf("Valor #%d: ", liContador+1); ...
  #1 (permalink)  
Antiguo 17/03/2015, 17:11
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 16 años
Puntos: 5
Pregunta Rotar arreglo a la derecha

Código:
    //Declaración de variables
    int laiArreglo[8], laiArreglo2[8] = {0}, liContador, liRotaciones;

    //Entrada de datos
    for (liContador=0; liContador<8; liContador++)
    {
        do
        {
            printf("Valor #%d: ", liContador+1);
            scanf("%d", &laiArreglo[liContador]);

            if (laiArreglo[liContador] <0)
                printf("\n\tError!, el valor no puede ser menor que 0.\n\n");
        } while (laiArreglo[liContador] <0);
    }

    printf("\nCu%cntas veces des%ca rotar el arreglo: ", 160, 130);
    scanf("%d", &liRotaciones);

    //Procesamiento
    for(liContador=0; liContador<8; liContador++)
    {
        laiArreglo2[liContador] = laiArreglo[liContador-liRotaciones];
    }
    //Salida de datos
    printf("\n\t");

    for (liContador=0; liContador<8; liContador++)
        printf("%d ", laiArreglo2[liContador]);

    printf("\n");
Tengo este código y he logrado rotar los números a la derecha el números de veces que yo quiera.

El problema esta en la posición 0 del segundo arreglo, no sé como pasarle el valor, que puedo hacer?.

  #2 (permalink)  
Antiguo 17/03/2015, 21:16
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 16 años
Puntos: 5
Respuesta: Rotar arreglo a la derecha

Lo he solucionado.
  #3 (permalink)  
Antiguo 18/03/2015, 06:45
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 4 meses
Puntos: 22
Respuesta: Rotar arreglo a la derecha

Hola RGT.

También podrías hacer la rotación sobre el mismo arreglo.
Código C:
Ver original
  1. void shrvec(int* vec, int lenvec, int nrot) {
  2.   int i, j, aux;
  3.  
  4.   for(j = 0; j < nrot; j++) {
  5.     aux = vec[lenvec-1];
  6.     for(i = lenvec; i > 0; i--) vec[i] = vec[i-1];
  7.     vec[0] = aux;
  8.   }
  9. }

Uso:
Código C:
Ver original
  1. {
  2.   int v[5] = {1,2,3,4,5};
  3.  
  4.   shrvec(v, sizeof(v)/sizeof(v[0]), 2);
  5.   ...

Saludos.

(Edito)
O a la izquierda:
Código C:
Ver original
  1. void shlvec(int* vec, int lenvec, int nrot) {
  2.   int i, j, aux;
  3.  
  4.   for(j = 0; j < nrot; j++) {
  5.     aux = vec[0];
  6.     for(i = 0; i < lenvec; i++) vec[i] = vec[i+1];
  7.     vec[lenvec-1] = aux;
  8.   }
  9. }

Última edición por ecfisa; 18/03/2015 a las 07:09 Razón: agregar codigo
  #4 (permalink)  
Antiguo 18/03/2015, 08:06
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Rotar arreglo a la derecha

En esta línea:
Cita:
for(i = lenvec; i > 0; i--) vec[i] = vec[i-1];
comienzas a recorrer vec desde vec[5], que está fuera del límite del array.
  #5 (permalink)  
Antiguo 18/03/2015, 08:39
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 4 meses
Puntos: 22
Respuesta: Rotar arreglo a la derecha

Hola.

Si, tenes razón; se me pasó el -1 al escribir.

Saludos.
  #6 (permalink)  
Antiguo 18/03/2015, 09:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Rotar arreglo a la derecha

Aritmética modular + nuevo arreglo.

Código C:
Ver original
  1. #include <stdio.h>
  2. #define N 10
  3.  
  4. int main() {
  5.     int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  6.     int arr2[N];
  7.     int i;
  8.  
  9.     for(i = 0; i < N; i++) printf("%d ", arr[i]);
  10.     printf("\n");
  11.  
  12.     for(i = 0; i < N; i++) arr2[i] = arr[(N+i-1)%N];
  13.  
  14.     for(i = 0; i < N; i++) printf("%d ", arr2[i]);
  15.     printf("\n");
  16.  
  17.     return 0;
  18. }

Con esto puedes generalizar mover a la izquierda o derecha n posiciones.

Etiquetas: arreglo, derecha, int, rotar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.