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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con arrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con arrays  (Leído 5,032 veces)
norris

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Ayuda con arrays
« en: 15 Noviembre 2012, 09:40 am »

Hola, era para ver si me podeis ayudar a completar este programa.

Primero me pide desplazar un array: (suponiendo que N sea 10):
DAME 10 ENTEROS: 3 24 7 –25 0 3 21 19 3 895

El array desplazado hacia la IZQUIERDA queda así:
24 7 –25 0 3 21 19 3 895 3

ese le tengo hecho
Código:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t[10],ind,lon,num,aux;

ind=0;
do{
printf ("Introduce un número");
scanf("%d",&num);
t[ind]=num;
ind=ind+1;
}while(ind<10);

/* Al salir del anterior bucle ind está apuntando al 10, es decir,
el número de elementos que tiene el array. Guardamos el primer elemento
sobre aux antes de empezar a desplazar el resto a la izqda. */

lon=ind;
aux=t[0];
printf ("aux %d\n",aux);

/* el indice a 1, cuando desplazamos hacia la izda, empezamos
tomando una posición y asignándoselo a la que está a su izquierda, por eso
empezamos en la segunda posición para asignárselo a la primera*/
ind=1;

/*Bucle para realizar el desplazamiento,  empezamos en ind=1 y acabamos en
ind=long-1*/

while(ind <lon){
t[ind-1]=t[ind];
ind=ind+1;
}

/* En la última posición guardamos lo que había antes en la primera */
t[lon-1]=aux;

/*indice a 0 para implementar el bucle para recorrer e
imprimir la tabla*/

ind=0;
while(ind <lon){
printf("%d\n",t[ind]);
ind=ind+1;
}
system("PAUSE");
}

Ahora me pide que haga lo mismo sólo que esta vez desplazando los elementos hacia la derecha y dejando el último elemento en la primera posición del array.

Ejemplo (suponiendo que N sea 10):
DAME 10 ENTEROS: 3 24 7 –25 0 3 21 19 3 895

El array desplazado hacia la DERECHA queda así:
895 3 24 7 –25 0 3 21 19 3

Gracias de antemano, un saludo


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con arrays
« Respuesta #1 en: 15 Noviembre 2012, 16:19 pm »

Una opción mas fácil es solo aparentar el desplazamiento, para ello puedes utilizar el operador de modulo '%'. Por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  7.   size_t num_elem = sizeof num / sizeof num[0];
  8.   size_t i;
  9.  
  10.   puts("Un desplazamiento a la izquierda:");
  11.   for (i = 0; i < num_elem; i++)
  12.      printf(" %d", num[(1 + i) % num_elem]);
  13.   putchar('\n');
  14.  
  15.   puts("Un desplazamiento a la derecha:");
  16.   for (i = 0; i < num_elem; i++)
  17.      printf(" %d", num[(num_elem - 1 + i) % num_elem]);
  18.   putchar('\n');
  19.  
  20.   return EXIT_SUCCESS;
  21. }

Por supuesto si ello vale (o no) depende del enunciado. El valor 1 se indica en las expresiones solo para enfatizar el desplazamiento.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con arrays
« Respuesta #2 en: 15 Noviembre 2012, 20:46 pm »


Ahora me pide que haga lo mismo sólo que esta vez desplazando los elementos hacia la derecha y dejando el último elemento en la primera posición del array.

Ejemplo (suponiendo que N sea 10):
DAME 10 ENTEROS: 3 24 7 –25 0 3 21 19 3 895

El array desplazado hacia la DERECHA queda así:

895 3 24 7 –25 0 3 21 19 3

Si de lo que se trata es de "hacerlo" y no tan solo "simularlo":
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N   10
  4. int main()
  5. {
  6.    int i,aux2;
  7.    int t[N]={3,24,7,-25,0,3,21,19,3,895};
  8.    aux2=t[N-1];
  9.    for (i=N-2;i>=0;i--)
  10.        t[i+1]=t[i];
  11.    t[0]=aux2;
  12.    for (i=0;i<N;i++)
  13.        printf("%d  ",t[i]);
  14.    return EXIT_SUCCESS;
  15. }
Saludos!.
En línea

norris

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con arrays
« Respuesta #3 en: 15 Noviembre 2012, 21:00 pm »

Si de lo que se trata es de "hacerlo" y no tan solo "simularlo":
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N   10
  4. int main()
  5. {
  6.    int i,aux2;
  7.    int t[N]={3,24,7,-25,0,3,21,19,3,895};
  8.    aux2=t[N-1];
  9.    for (i=N-2;i>=0;i--)
  10.        t[i+1]=t[i];
  11.    t[0]=aux2;
  12.    for (i=0;i<N;i++)
  13.        printf("%d  ",t[i]);
  14.    return EXIT_SUCCESS;
  15. }
Saludos!.

Muchas gracias.Me sale bien el programa  Aunque sigo sin entender este ciclo.
Código:
for (i=N-2;i>=0;i--)
        t[i+1]=t[i];
    t[0]=aux2;

me podrias indicar que hace.Muchas gracias de antemano y perdon por las molestias
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con arrays
« Respuesta #4 en: 15 Noviembre 2012, 21:42 pm »

Aunque sigo sin entender este ciclo.
Código
  1. for (i=N-2;i>=0;i--)
  2.        t[i+1]=t[i];
  3.    t[0]=aux2;

me podrias indicar que hace.Muchas gracias de antemano y perdon por las molestias
El bucle itera con el contador tomando los valores N-2 .. 0, esos son los indices de los elementos con excepción del ultimo. En cada iteracion se copia el elemento "i" en la posición "i + 1". Con ello se copia el penúltimo elemento en el ultimo, el antepenúltimo en el penúltimo, etc. con ello se da el efecto de desplazamiento.

El ultimo paso es copiar el ultimo elemento en la primera posición (almacenado previamente en la variable auxiliar):
Código
  1. t[0]=aux2;

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con arrays
« Respuesta #5 en: 15 Noviembre 2012, 22:26 pm »


Primero me pide desplazar un array: (suponiendo que N sea 10):
DAME 10 ENTEROS: 3 24 7 –25 0 3 21 19 3 895

El array desplazado hacia la IZQUIERDA queda así:
24 7 –25 0 3 21 19 3 895 3
De forma parecida tendrías:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N   10
  4. int main()
  5. {
  6.    int i,aux1;
  7.    int t[N]={3,24,7,-25,0,3,21,19,3,895};
  8.    aux1=t[0];
  9.    for (i=1;i<N;i++)
  10.        t[i-1]=t[i];
  11.    t[N-1]=aux1;
  12.    for (i=0;i<N;i++)
  13.        printf("%d  ",t[i]);
  14.    return EXIT_SUCCESS;
  15. }
Saludos!.
« Última modificación: 15 Noviembre 2012, 22:43 pm por leosansan » En línea

norris

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con arrays
« Respuesta #6 en: 16 Noviembre 2012, 21:06 pm »

Muchisimas gracias.
En línea

norris

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda con arrays
« Respuesta #7 en: 18 Noviembre 2012, 13:49 pm »

Hola de nuevo. Perdon por mi insitencia pero es que esto de desplazar vectores me esta costando bastante.

Ahora estoy haciendo un programa que me pide Pedir al usuario una serie de números y almacenarla en un array de tamaño N y una vez se dispone del array con como mucho N números, se pide intercambiar el menor de ellos con el que está en la primera posición.

por ejemplo, DAME HASTA 10 NUMEROS:
45 67 13 29 3 28 32 51

El array, una vez realizado el intercambio, queda así:
3 67 13 29 45 28 32 51

he hecho una parte del programa, en esta parte el programa me haya el numero menor. Pero mi problema viene a la hora de intercambiar el numero menor con el primer numero de la serie. Lo he intentado con un auxiliar para intercambiar los valores pero no me sale.

Código:
#include<stdio.h>
#include<stdlib.h>


int main()
{ int numeros [10],i,x,c,aux;
int mayor,menor;
for(i=0;i<10;i++)
{printf("Dame el elemento de la posicion:");
scanf("%d",&numeros[i]);

}
mayor=numeros[0];
for(x=0;x<10;x++)
{
if (numeros[x]>mayor)
mayor=numeros[x];
}

menor=numeros[0];
for(c=0;c<10;c++)
{
if (numeros[c]<menor)
menor=numeros[c];
}
printf("\nEl mayor es %d",mayor);
printf("\nEl menor es %d",menor);



system("PAUSE");
}

Gracias de antemano, y perdon por ser tan pesado pero es que no termino de pillar lo del desplazamiento.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Ayuda con arrays
« Respuesta #8 en: 18 Noviembre 2012, 17:22 pm »

Hola! para intercambiar los numeros tenes que tener una variable que guarde la posicion del menor numero, luego con esa posicion haces el intercambio en el arreglo


Saludos
En línea

Ahorrate una pregunta, lee el man
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con arrays
« Respuesta #9 en: 18 Noviembre 2012, 18:48 pm »

Justo lo que te indica Durasno, y como por otros post veo que se te atragantan los intercambios en un array te dejo esto:
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define N   8
  4.  
  5. int main()
  6. {
  7.    int numeros[N]={45,67,13,29,3,28,32,51},i,x,c,aux,indice;
  8.    int mayor,menor;
  9.    /*for(i=0;i<10;i++) {
  10.          printf("Dame el elemento de la posicion %d:",i);
  11.         scanf("%d",&numeros[i]);
  12.     }*/
  13.    menor = numeros[0];
  14.    for(c=0;c<N;c++) {
  15.        if (numeros[c]<menor)
  16.        {menor=numeros[c]; indice=c;}
  17.    }
  18.    aux=menor;
  19.    numeros[indice]=numeros[0];
  20.    numeros[0]=menor;
  21.    for(c=0;c<N;c++) {
  22.        printf("%d  ",numeros[c]);
  23.    }
  24.    return 0;
  25. }
Saludos!.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con fgets y arrays
Programación C/C++
jomag 8 3,257 Último mensaje 24 Enero 2014, 18:39 pm
por dato000
Ayuda con arrays y punteros « 1 2 »
Programación C/C++
nanto 13 5,420 Último mensaje 5 Marzo 2014, 06:17 am
por leosansan
Funcion RecomendarButacas Ayuda!! (Recorrer arrays de arrays)
Java
elenfatico 2 2,976 Último mensaje 7 Abril 2016, 00:44 am
por 50ShadesOfKenyi
[AYUDA] Programa con arrays
ASM
Kougami 1 2,520 Último mensaje 10 Mayo 2017, 23:01 pm
por ivancea96
Ayuda con ejercicio de arrays
Programación C/C++
Roga 1 1,857 Último mensaje 8 Mayo 2017, 07:17 am
por r00t31
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines