elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Rotar n veces un arreglo con n digitos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Rotar n veces un arreglo con n digitos  (Leído 4,019 veces)
chona

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Rotar n veces un arreglo con n digitos
« en: 6 Marzo 2020, 04:28 am »

Hola tengo que determinar un vector con n casillas y hacerlo girar determinadas veces para calcular el vector y
ejemplo
casillas=5 giro=1 vectorx {1,2,3,4,5} vectory {5,1,2,3,4}
Lo hice de la siguiente forma pero no entiendo muy bien donde colocar los giros para que rote el arreglo
Agradeceria su ayuda

Código
  1. #include <stdio.h>
  2. #define N 10
  3.  
  4. int main() {
  5.    int n,g;
  6. scanf ("%i" ,&n);
  7. scanf(" %i",&g);
  8.    int i;
  9.   int  x[n];//arr
  10.    int y[n];//arr2
  11.  
  12.    for( int i = 0; i < n; i++ );{
  13.        scanf (" /n%i/n", &x[i]);}
  14.  
  15. for (i=0;i<g;i++)
  16. {
  17.    x[n]=x[i+1];
  18.  x[i+1]=x[0];
  19.  x[0]=y[n];
  20.  printf ("%i",y[n]);
  21. }
  22.  
  23.    return 0;
  24. }


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Rotar n veces un arreglo con n digitos
« Respuesta #1 en: 6 Marzo 2020, 05:26 am »

Para rotar las posiciones de un array necesitas guardar uno de los valores en una variable auxiliar para empezar a guardar los nuevos valores en la posición que has guardado fuera y al final restaurar ese valor que tiene la variable auxiliar. Ahora bien, hay muchas formas de hacerlo.

Una forma visual es hacer una función que rote el array a la derecha 1 vez y hacer un bucle for que llame a dicha funciones n veces siendo n el número de posiciones que se quiere rotar el array a la derecha. No es lo más eficiente pero como te digo es visual.
Código
  1. void rotarDerecha(int *numeros, int size){
  2.  int aux = numeros[size-1];
  3.  for(size_t i = size - 1; i > 0; --i)
  4.    numeros[i] = numeros[i-1];
  5.  numeros[0] = aux;
  6. }
  7.  
  8. int main(){
  9.  //...
  10.  for(size_t i = 0; i < rotaciones; ++i)
  11.    rotarDerecha(numeros, size);
  12.  //...
  13. }

Para mejorar un poco la eficiencia del código, en vez de repetir el for tantas veces como el valor de rotaciones, podemos hacerlo (rotaciones % size) veces. Así aunque el número de rotaciones sea muy grande, siempre daremos menos de una vuelta completa al array.

Si lo quieres hacer más eficiente puedes trabajar sobre esta versión y utilizar un poco las matemáticas para sacar alguna relación entre las posiciones del array el número de rotaciones. Esta parte te la dejo a ti que te va a ser más satisfactorio que si te lo encuentras hecho.

Y recuerda que si te atascas en alguna parte puedes volver a dejar tu código para que te echemos una mano. Y te recomendaría usar nombres de variables más significativos; sobre todo si el código lo van a tener que leer terceras personas como es el caso... :rolleyes:   Suerte.  :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines