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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No entiendo esta lógica [arreglos] [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No entiendo esta lógica [arreglos] [C]  (Leído 3,144 veces)
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
No entiendo esta lógica [arreglos] [C]
« en: 6 Diciembre 2012, 17:47 pm »

Hola, estoy aprendieno C y estoy leyendo un libro, ya voy en el apartado de arreglos, y me tome con un ejemplo del ordenamiento de tipo burbuja utilizando arreglos, lo principal del programa es que inicializa un arreglo con datos cualquiera y los ordena de forma ascendente, pero no entiendo realmente el asunto  de las comparaciones que hace, se los dejo, espero alguien me explique saludos.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define sise 10
  4. int main()
  5. {
  6.    int a[sise]={2,6,4,8,10,12,89,68,45,37};    //inicializamos el arreglo
  7.    int i, pass, hold;
  8.  
  9.    printf("datos ordenados originalmente\n");
  10.  
  11.    for(i=0;i<=sise-1;i++) {printf("%4d",a[i]);}
  12.  
  13.    for(pass=1;pass<=sise-1;pass++) // se recorre el arreglo
  14.        for (i=0;i<=sise-2;i++)    
  15.            if(a[i]>a[i+1]){       //se comparan cual es mayor
  16.                hold=a[i];        //hold toma el valor de a[i]
  17.                a[i]=a[i+1];      //creo que se modifica el valor de a[1]
  18.                a[i+1]=hold; }    //Se regresa el valor de a[i+1] a hold(valor original)
  19.    printf("\n Dator ordenados en orden ascendente\n");
  20.  
  21.    for(i=0;i<=sise-1;i++)
  22.        printf("%4d", a[i]);  
  23.    printf("\n");
  24.  
  25.    return 0;
  26. }

no entiendo como ocurre el ordenamiento, disculpen soy novato...


En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: No entiendo esta lógica [arreglos] [C]
« Respuesta #1 en: 6 Diciembre 2012, 18:18 pm »

Hola, estoy aprendieno C y estoy leyendo un libro [...]

no entiendo como ocurre el ordenamiento, disculpen soy novato...
En la pagina cortesía de Wikipedia: Bubble sort Analysis hay una pequeña animación que muestra el algoritmo en funcionamiento, paso a paso.

Otra pagina de interés, en mi opinión la que explica (en ingles) de forma mas sencilla ciertos algoritmos es Animations to Assist Learning Some Key Computer Science Topics, primera sección "Algorithms".

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
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: No entiendo esta lógica [arreglos] [C]
« Respuesta #2 en: 6 Diciembre 2012, 18:23 pm »

hola gracias, ahora lo checo.
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
Adrisim

Desconectado Desconectado

Mensajes: 18


"El conocimiento es la llave del éxito"


Ver Perfil
Re: No entiendo esta lógica [arreglos] [C]
« Respuesta #3 en: 7 Diciembre 2012, 13:18 pm »

Vale, te explicaré qué hace exactamente el Método de la Burbuja.

El Método de la Burbuja consiste en hacer comparaciones entre los elementos del arreglo. Si el primer elemento es mayor al siguiente, entonces, lo intercambiará, sino, lo dejará como está.

La Burbuja, hará sólamente ''n-1'' pasadas, o comparaciones, puesto que si hiciera la cantidad de comparaciones del tamaño del arreglo, tomaría elementos basura que no están declarados dentro de las dimensiones del arreglo. ¿Esto por qué?. Porque el Método va comparando elementos de dos en dos.

Como primer comentario, te puedo decir que has utilizado variables de más; es decir, innecesarias. Con la varible entera ''i'' que declaraste, hubiese sido suficiente para recorrer los índices del arreglo en cada FOR. Pero entiendo por qué lo hiciste, para no confundirte. Ya después te acostumbrarás a no utilizar tantas variables.

En fin.

Veo que has iniciado tu arreglo.

Entonces:

Código:
// Tu variable 'pass' en el FOR es lo que recorrerá el índica entre corchetes de cada elemento del arreglo. 
 
a[0] = 2
a[1] = 6
a[2] = 4
a[3] = 8
a[4] = 10
a[5] = 12
a[6] = 89
a[7] = 68
a[8] = 45
a[9] = 37

// El método de la burbuja, se trata de comparar elementos de dos en dos. Por eso el IF está escrito así:

if (a[pass] > a[pass]+1)

// Teniendo en consideración que ''pass'' empezará en 0 y preguntará si éste, es mayor a ''pass (0) +1'', es decir, 1.
// Recuerda que éstos solamente son el incremento de los indices. Lo que en realidad está comparando es si ''a[0] = 2 > a[1] = 6''.

// Como en los primeros dos elementos, la condición no se cumple, pasa a los siguientes dos; es decir: ''a[1] = 6 > a[2] = 4''.

// En este caso, la condición del IF sí se cumple. Entonces, aquí necesitamos una variable auxiliar, que guardará el valor previo del elemento del arreglo que vamos a intercambiar, porque si no lo hacemos así, entonces éste valor se perdería.

// Así, tenemos que ''a[1] = 6'' será asignado a tu varible ''hold'', quedando así: ''hold = 6''. Ahora, lo que se hace después, es asignarle el valor de ''a[2] = 4'', a ''a[1] = 6'', teniendo ahora que ''a[1] = 4''. Y el valor que le otorgamos a ''hold'' en un principio, será el nuevo valor que tomará ''a[2]'', siendo ''a[2] = 6''. Quedando así, ordenado de forma ascendente.

// Lo mismo hará con todos los elementos del arreglo.

Espero que te haya servido. Si no, puedes contactarme o checar alguna otra fuente para entenderle mejor.

Suerte.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: No entiendo esta lógica [arreglos] [C]
« Respuesta #4 en: 7 Diciembre 2012, 16:50 pm »

Como primer comentario, te puedo decir que has utilizado variables de más; es decir, innecesarias. Con la varible entera ''i'' que declaraste, hubiese sido suficiente para recorrer los índices del arreglo en cada FOR. Pero entiendo por qué lo hiciste, para no confundirte. Ya después te acostumbrarás a no utilizar tantas variables.
El numero de variables para el algoritmo en el programa de barnix456 es el mínimo: una para controlar el bucle externo y otra para el interno.

Otra opción para estudiar el algoritmo es revisar el código fuente sobre este en los foros, solo debe utilizar el motor de búsqueda, por ejemplo uno de los últimos temas donde se trata BubbleSort es Problemas al intentar hacer mas eficiente un algoritmo de ordenacion.

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
Adrisim

Desconectado Desconectado

Mensajes: 18


"El conocimiento es la llave del éxito"


Ver Perfil
Re: No entiendo esta lógica [arreglos] [C]
« Respuesta #5 en: 7 Diciembre 2012, 21:56 pm »

El numero de variables para el algoritmo en el programa de barnix456 es el mínimo: una para controlar el bucle externo y otra para el interno.

Tienes razón. Cometí un error fatal. Por poco le hice creer al chico que podría hacer más con menos, cuando ya había llenado perfectamente, el perfil de un programa funcional.

Discúlpenme ambos.

En línea

barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: No entiendo esta lógica [arreglos] [C]
« Respuesta #6 en: 10 Diciembre 2012, 23:56 pm »

Hola Adrisim muy muy buena tu explicacion, parece que le he entendido, pero como dice rir3760 lo que tengo que hacer es ver mas ejemplos para poder entender mas el metodo burbuja, gracias por sus respuestas me han ayudado muchisimo, gracias.
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No entiendo que es lo que pasa en esta red.
Hacking Wireless
magito 7 5,182 Último mensaje 14 Junio 2010, 12:31 pm
por lamaruja
Duda Redes wep Wlan_00 ,Lo que dice esta web tiene logica?
Hacking Wireless
Anonymous250 3 3,107 Último mensaje 3 Noviembre 2011, 14:49 pm
por Anonymous250
Realmente esta logica me ha confundido...
Scripting
NekoOs 3 2,607 Último mensaje 22 Febrero 2012, 00:48 am
por Eleкtro
Realmente esta logica me ha confundido...
Scripting
NekoOs 1 1,816 Último mensaje 21 Febrero 2012, 02:52 am
por Eleкtro
No entiendo que esta mal(en C)
Programación C/C++
oxi12pek 7 2,787 Último mensaje 2 Noviembre 2012, 18:17 pm
por oxi12pek
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines