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 - rir3760

#1141
Cita de: oxydec en 28 Octubre 2012, 23:29 PM2) ¿como puedo contar el numero de bits "1" en un tipo como el anterior u otra variable? Preferiblemente con el minimo de instrucciones posible.
Utilizando un bucle mas o menos así:
for (num_bits = 0; num != 0; num &= num - 1)
   num_bits++;


* Al verificar que el numero es distinto de cero sabemos que existe al menos un bit a uno.

* La expresión "num & num - 1" desactiva el bit menos significativo.

Un saludo
#1142
Programación C/C++ / Re: ayuda en C
28 Octubre 2012, 17:23 PM
El problema se debe a que almacenas ambas cadenas en el array "frase":
printf("Introduce una frase \n");
fflush(stdout);
fflush(stdin);
gets(frase); /* <== */
printf("Introduce una palabra \n");
fflush(stdout);
fflush(stdin);
gets(frase); /* <== */

En la segunda llamada a "gets" deberías utilizar el array "palabra".

No necesitas de las llamadas a "fflush" (salvo la ultima) y hay que evitar el uso de la función "gets". Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
#1143
Programación C/C++ / Re: Split en C
27 Octubre 2012, 19:58 PM
Los problemas con la función son tres:

* El primero ocurre al contar las instancias del separador, supongamos que este es "999" y la cadena a tasajear inicia con "99999". En base a ello el primer bucle de la función:
for(i = 0; i < tamtotal; i++) {
   while((cadena[i + n] == buscada[n]) && (n < tam))
      n++;
   if (n == tam)
      cantidad++;
   n = 0;
}

Contara tres instancias del separador cuando solo hay una, eso debido a que avanza por la cadena carácter por carácter.

* El segundo es no verificar si el valor de la variable:
tamfrase = i - iant;
Es igual a cero (eso ocurre si hay dos separadores lado a lado), a continuación se trata de reservar memoria con "malloc" y no es valida una reserva de cero.

* El tercero, cuando se hace la reserva de memoria se debe reservar un carácter adicional para el indicador de fin de cadena (el '\0').

No es difícil realizar los cambios, lo podrías tomar como un ejercicio.

Un saludo
#1144
Programación C/C++ / Re: Problema variable j
27 Octubre 2012, 19:01 PM
Solo agregar que no es necesario utilizar dos variables para buscar la cadena en el array, basta con revisar el valor del contador al final del bucle para conocer el resultado:
for (i = 0; i < 10 && strcmp(otrosNombres, nombres[ i ]) != 0; i++)
   ;
if (i != 10)
   puts("Este nombre se encuentra en la lista");
else
   puts("Este nombre no se encuentra en la lista");

Y para imprimir una literal terminada con '\n' es mejor utilizar la función "puts".

Un saludo
#1145
Programación C/C++ / Re: Sobre los Cast
27 Octubre 2012, 17:49 PM
Cita de: BlackZeroX (Astaroth) en 26 Octubre 2012, 04:50 AM¿Es bueno hacer varios cast de tipos?, Se que es recomendable pero no lo se hasta que punto.
No es recomendable. En C la convención es evitar en lo posible las conversiones explicitas, mientras menos mejor. Dos de las excepciones son 1) Cuando el modo estricto del compilador es paranoico y 2) Cuando se utilizan (llaman) funciones con un numero variable de argumentos.

La mayoría de los mensajes de error que mencionas se deben al segundo escenario:
main.c|123|aviso: formato '%d' espera un argumento de tipo 'int', pero el argumento 2 es de tipo 'avl_size_t' [-Wformat]|
Ya que el argumento pasado a la función es de tipo "size_t". Para imprimirlo y evitar la generación del mensaje puedes utilizar el especificador "%zu" (agregado a partir de C99).

El segundo tipo de error:
main.c|17|nota: se esperaba 'int32_t' pero el argumento es de tipo 'avl_t'|
Supongo se refiere a la llamada a "randomnumber", aqui el problema son los tipos de los argumentos y los parámetros:

* Los argumentos son de tipo "uintptr_t" (sin signo).
* Los parámetros son de tipo "int32_t" (con signo).
* El valor de retorno es de tipo "int" (con signo).

Si el valor pasado como argumento no puede almacenarse (esta fuera del rango valido) en el parámetro se pueden presentar problemas (comportamiento no definido). Peor todavía: los tipos "uintptr_t" e "int32_t" son opcionales en C99.

El tercer tipo de error:
main.c|130|error: el paso del argumento 2 de 'randomnumber' crea un entero desde un puntero sin una conversión|
Indica la obtención de un entero a base de un puntero sin conversión explicita de por medio (no es valido, este es otro de los (pocos) casos donde la conversión es requerida) pero no lo encuentro. Habría que revisar el código fuente completo.

Yo en tu lugar quitaría todas las conversiones. El siguiente paso seria solucionar cada uno de los conflictos de tipos o bien utilizar una conversión explicita (y documentarla).

Un saludo
#1146
El error se genera porque una sentencia de selección "if" solo puede tener un bloque "else" y tu tienes dos:
if ((fPtr = fopen ("archivo.txt", "w")) == NULL){
   /* ... */
}else {
   printf ("\nIngrese numero de cuenta, nombre y saldo en decimales (nnnn.nn) ");
   /* ... */
}else { //Este else marca error
   if (strcmp (op, "leer") == 0) {
   /* ... */
}


Un saludo
#1147
Programación C/C++ / Re: Ficheros
25 Octubre 2012, 17:08 PM
Cita de: Ander123 en 25 Octubre 2012, 16:14 PMHola, tenia una pregunta, estoy trabajando con ficheros y no me funciona el programa, uso code blocks, y al compilarlo, sale la consola y solo se puede teclear una tecla y sale del programa, a ver si me podeis ayudar.
Si "sale la consola" no es porque lo estes compilando sino porque lo estas ejecutando.

Como ya te comentaron el programa no tiene errores graves, pero hay que cambiar la definición de la función "main", verificar la apertura del archivo, etc.

El programa no tiene salida porque ... no tiene salida. Lo único que hace es enviar dos lineas al archivo indicado, revisalo.

Un saludo
#1148
Puedes ahorrarte la llamada a la función "clear" utilizando, en lugar de "getline", la función miembro "get":
Código (cpp) [Seleccionar]
cin.get(nombre, 10, '\n');
cin.ignore(numeric_limits<int>::max(), '\n');

// ...


Un saludo
#1149
Lo primero que hay que cambiar son los nombres de los encabezados, la definición de la funcion "main" y evitar el uso de la biblioteca conio de Borland. Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

También deberías conseguir un libro o curso de calidad, puedes utilizar el motor de búsqueda para recomendaciones.

El problema es el bucle:
Código (cpp) [Seleccionar]
for(i=20; i<1; i--)
{cout<<"\n\nElemento a "<<i<<" = "<<a[i];}

Debería ser:
Código (cpp) [Seleccionar]
for (i = 19; i >= 0; i--)
   cout << "a[" << i << "] = " << a[i] << endl;


Un saludo
#1150
Programación C/C++ / Re: Leer un char como float
24 Octubre 2012, 15:39 PM
Cita de: za.asi en 24 Octubre 2012, 12:59 PMme podrías decir en que biblioteca esta la función val?
No es una función, es la variable donde se almacena el valor a utilizar (1.9891e30 si la linea es igual a "Ms" o el valor indicado por el usuario).

Un saludo