Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Blaster

#1
Cita de: snake_linux en 25 Agosto 2015, 14:07 PM
el problema lo tengo en cosas más avanzadas, como cuando leo la relación que hay entre punteros y arrays, no acabo de entenderlo, por ejemplo he escuchado que un array es un puntero pero ya digo no me queda del todo claro como manejarlos.

En esencia el nombre de un array no es un puntero mas bien es un identificador para el tipo del array, que al hacer referencia a la misma se realiza una conversión implícita a puntero (esto lo hace automáticamente el compilador) sucede cuando por ejemplo pasas el array como parámetro a una función
#2
 En primer lugar es innecesario el uso de dos bucles, el uso que das del while puede se fácilmente reemplazado por un if

Ahora voy a explicarte mas claramente porque no funciona tu código, supongamos que tenemos como entrada pele , luego ingresamos al bucle for de inmediato nos encontramos con la siguiente condición if

Código (cpp) [Seleccionar]
if(strcmp(nombreBusqueda, arregloPersonas[i].nombre))

Esto es como decir "si nombreBusqueda es diferente a arregloPersonas.nombre entonces ejecutar la instrucción contenida en el if" en este caso ya que manu chao es diferente a pele pasara a ingresar en el if ejecutando todos los printf y finalmente el break terminara el bucle.

En el caso de que la entrada sea manu chao se hará la comprobación y como obviamente son iguales retornara false por ende pasara a ejecutarse el else mostrando que el nombre no se encuentra en la base de datos y de nuevo el break terminara el bucle

Como seguro te has dado cuenta el bucle solo realiza una iteración siempre por eso te muestra la información del primer elemento únicamente.

Saludos
#3
Cita de: dato000 en 13 Mayo 2015, 18:42 PM
rir3760, te agradezco lo que mencionas de verdad que si, pero necesito imprimir en pantalla los datos del struct (nombre, edad) dependiendo de la busqueda, no es suficiente indicar con que se encuentra dentro del arreglo, porque no es lo que solicitaron.

Solo es cuestión de agregarle algunos printf y ya

Código (cpp) [Seleccionar]
for (i = 0; i < 10 && strcmp(nombreBusqueda, arregloPersonas[i].nombre); i++);
        if (i != 10)
        {
            printf("\n\n\nNOMBRE ENCONTRADO!!\n");
            printf("\n--Informacion de la Persona--");
            printf("\nNombre de la Persona Buscada:  %s", arregloPersonas[i].nombre);
            printf("\nEdad de la Persona Buscada:  %i", arregloPersonas[i].edad);
        }
        else
            puts("El nombre no se encuentra en la base de datos");


Y del porque no funciona tu programa, ya te lo explicaron los compañeros mas arriba

Saludos
#4
Cita de: rir3760 en 16 Abril 2015, 17:10 PM
Por ultimo la función no necesita de tres argumentos, con solo dos basta:

rir3760 porque sacrificar rendimiento y velocidad por únicamente ahorrarte un parámetro mas, lo digo porque esta linea

Código (cpp) [Seleccionar]
min(a[0], valormenor(a + 1, n - 1));

Se convierte en

Código (cpp) [Seleccionar]
(a[0] < valormenor(a + 1, n - 1))?(a[0]):(valormenor(a + 1, n - 1));

Como se puede ver , valormenor se llama dos veces, esas dos llamadas hacen cuatro llamadas que a su ves estas realizan otras ocho llamadas y así sucesivamente, por lo esto tendrá una directa incidencia en la velocidad de la función, esto puede notarse si el array es de una tamaño mayor

Un saludo

 
#5
Suponiendo que int es de 4 bytes y short es 2 conversor tendría el siguiente aspecto :

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // <- conversor union
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // <- int entero
                XXXXXXXXXXXXXXXX // <- struct bin
                         XXXXXXX // <- campo sin nombre
                        X        // <- valor


Su código establece entero a 8, que se verá así :

00000000000000000000000000001000

Luego se imprime el valor contenido en conver.bin.valor el cual mostrara el octavo bit que es cero, seguidamente desplazamos entero un bit a la izquierda resultando

00000000000000000000000000010000

Este proceso se repetirá 8 veces, pero cuando i sea igual a tres valor se establecerá a uno, en ese momento ocho sera desplazado cuatro posiciones a la izquierda dando lugar a 128 que en binario es 10000000

Como seguramente ya te has dado cuenta, el campo de bits sin nombre (unsigned short : 7;) sirve como 7 bits de relleno, de manera que a valor le corresponda el octavo bit

Un Saludo

#6
La aproximación que expones, presenta un comportamiento indefinido debido a que estas modificando un puntero que apunta a una cadena literal (linea 19)

Un Saludo
#7
Cita de: DanielC# en 16 Febrero 2015, 22:48 PM
312 en decimal ==> 100111000 en binario.-
Como puedo hacer para mostrar el estado del bits 5 en este caso encendido.-

Solo necesitas asignar a mask el resultado de desplazar 1 a la posición donde quieres verificar el estado del bit .

int pos = 5, mask = 1 << pos, numero = 312;

if(numero & mask)
   puts("Encendido");
else
   puts("Apagado");
 

Un Saludo
#8
Si la idea es convertir cualquier entero sin signo a su equivalente binario, lo mas conveniente seria trabajar con unsigned mas en tu caso ya que 2147483648 ya no es representable por un simple int ya estaría provocando un desbordamiento de enteros. Y ahora para establecer la mascara de bit necesaria lo mas correcto (teniendo en cuenta lo dicho) y portable seria:

Código (cpp) [Seleccionar]
unsigned bits = 1U << sizeof(unsigned) * CHAR_BIT - 1;

Un Saludo
#9
Es necesario cambiar

(*ptrcontact+3).order = 3;

a

ptrcontact[3].order = 3;

O poniendo los paretesís necesarios al usar arítmetica de punteros

(*(ptrcontact+3)).order = 3;

También usando el operador ->

(ptrcontact + 3)->order = 3;

De lo contrario, de acuerdo con la regla de prioridad  * tiene mayor precedencia sobre + provocando el error en tu caso.

Un Saludo

#10
Puedes utilizar la siguiente expresión:

Código (cpp) [Seleccionar]
int n = (&array)[1] - array;

Donde (&array)[1] apunta a la siguiente posición respecto al final del array y  array apunta al primer elemento del array, con todo esto es evidente que con una simple resta sacas la longitud del array.

Un Saludo