Autor
|
Tema: Ayuda con arrays (Leído 4,958 veces)
|
norris
Desconectado
Mensajes: 13
|
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 #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
Mensajes: 1.639
|
Una opción mas fácil es solo aparentar el desplazamiento, para ello puedes utilizar el operador de modulo '%'. Por ejemplo: #include <stdio.h> #include <stdlib.h> int main(void) { int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; size_t num_elem = sizeof num / sizeof num[0]; size_t i; puts("Un desplazamiento a la izquierda:"); for (i = 0; i < num_elem; i++) printf(" %d", num [(1 + i ) % num_elem ]); puts("Un desplazamiento a la derecha:"); for (i = 0; i < num_elem; i++) printf(" %d", num [(num_elem - 1 + i ) % num_elem ]); return EXIT_SUCCESS; }
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
Mensajes: 1.314
|
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":#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int i,aux2; int t[N]={3,24,7,-25,0,3,21,19,3,895}; aux2=t[N-1]; for (i=N-2;i>=0;i--) t[i+1]=t[i]; t[0]=aux2; for (i=0;i<N;i++) printf("%d ",t[i]); return EXIT_SUCCESS; }
Saludos!.
|
|
|
En línea
|
|
|
|
norris
Desconectado
Mensajes: 13
|
Si de lo que se trata es de "hacerlo" y no tan solo "simularlo":#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int i,aux2; int t[N]={3,24,7,-25,0,3,21,19,3,895}; aux2=t[N-1]; for (i=N-2;i>=0;i--) t[i+1]=t[i]; t[0]=aux2; for (i=0;i<N;i++) printf("%d ",t[i]); return EXIT_SUCCESS; }
Saludos!. Muchas gracias.Me sale bien el programa Aunque sigo sin entender este ciclo. 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
Mensajes: 1.639
|
Aunque sigo sin entender este ciclo. 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 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): 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
Mensajes: 1.314
|
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:#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int i,aux1; int t[N]={3,24,7,-25,0,3,21,19,3,895}; aux1=t[0]; for (i=1;i<N;i++) t[i-1]=t[i]; t[N-1]=aux1; for (i=0;i<N;i++) printf("%d ",t[i]); return EXIT_SUCCESS; }
Saludos!.
|
|
« Última modificación: 15 Noviembre 2012, 22:43 pm por leosansan »
|
En línea
|
|
|
|
norris
Desconectado
Mensajes: 13
|
Muchisimas gracias.
|
|
|
En línea
|
|
|
|
norris
Desconectado
Mensajes: 13
|
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. #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
Mensajes: 373
|
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
Mensajes: 1.314
|
Justo lo que te indica Durasno, y como por otros post veo que se te atragantan los intercambios en un array te dejo esto:#include<stdio.h> #include<stdlib.h> #define N 8 int main() { int numeros[N]={45,67,13,29,3,28,32,51},i,x,c,aux,indice; int mayor,menor; /*for(i=0;i<10;i++) { printf("Dame el elemento de la posicion %d:",i); scanf("%d",&numeros[i]); }*/ menor = numeros[0]; for(c=0;c<N;c++) { if (numeros[c]<menor) {menor=numeros[c]; indice=c;} } aux=menor; numeros[indice]=numeros[0]; numeros[0]=menor; for(c=0;c<N;c++) { printf("%d ",numeros[c]); } return 0; }
Saludos!.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con fgets y arrays
Programación C/C++
|
jomag
|
8
|
3,218
|
24 Enero 2014, 18:39 pm
por dato000
|
|
|
Ayuda con arrays y punteros
« 1 2 »
Programación C/C++
|
nanto
|
13
|
5,340
|
5 Marzo 2014, 06:17 am
por leosansan
|
|
|
Funcion RecomendarButacas Ayuda!! (Recorrer arrays de arrays)
Java
|
elenfatico
|
2
|
2,938
|
7 Abril 2016, 00:44 am
por 50ShadesOfKenyi
|
|
|
[AYUDA] Programa con arrays
ASM
|
Kougami
|
1
|
2,504
|
10 Mayo 2017, 23:01 pm
por ivancea96
|
|
|
Ayuda con ejercicio de arrays
Programación C/C++
|
Roga
|
1
|
1,828
|
8 Mayo 2017, 07:17 am
por r00t31
|
|