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

#51
Cita de: RGT en  4 Abril 2015, 07:11 AMCon ese código solamente me muestra el 5.
Si tomamos ese fragmento de código y en base a el creamos el programa mas pequeño posible (sin otra función mas que main) funciona correctamente. Pero si declaras el array en una función y en otra tratas de obtener su tamaño se genera el comportamiento que mencionas.

Para evitar confusiones mejor publica el código fuente completo del programa.

Un saludo
#52
Cita de: NOIS en  3 Abril 2015, 16:27 PMtengo curiosidad por como podría programar algo en C++ que me permita modificar en Windows el icono asociado a un tipo de archivo
Si apenas empiezas con tu aprendizaje en C o C++ te recomendaría que lo dejaras para después.

En todo caso debes modificar la asociación del archivo en el registro de Windows, esto en lo general se describe (en ingles) en la pagina Extending Context Menus and Changing File Icons y las funciones de la Win32 API para trabajar con el registro en MSDN: Registry Functions.

Un saludo
#53
Programación C/C++ / Re: Duda con variable
3 Abril 2015, 16:48 PM
Cita de: tremolero en  2 Abril 2015, 19:45 PMQuiero saber porque me da error al declarar un array muy grande y como puedo hacer para declararlo.

Despues de ver que me daba error, probando he visto que si declaro un array de mas de 51000 me da error. la cosa es que compila pero cuando ejecuto me salta un error de windows que dejo de funcionar al instante de ejecutarlo.
Ello se debe a los limites que cada compilador decide para el tamaño máximo de un objeto.

Una discusión sobre los limites en el lenguaje C es Array size limits.

En cuanto al ultimo borrador del estándar de C++ el tema se trata en el anexo B:
CitarAnnex B    (informative)
Implementation quantities [implimits]
1    Because computers are finite, C ++ implementations are inevitably limited in the size of the programs they
can successfully process. Every implementation shall document those limitations where known. This documentation may cite fixed limits where they exist, say how to compute variable limits as a function of available
resources, or say that fixed limits do not exist or are unknown.
2    The limits may constrain quantities that include those described below or others.  The bracketed number
following each quantity is recommended as the minimum for that quantity.  However, these quantities are
only guidelines and do not determine compliance.
—  Nesting levels of compound statements, iteration control structures, and selection control structures
[256].
—  Nesting levels of conditional inclusion [256].
—  Pointer, array, and function declarators (in any combination) modifying a class, arithmetic, or incom-
plete type in a declaration [256].
—  Nesting levels of parenthesized expressions within a full-expression [256].
—  Number of characters in an internal identifier or macro name [1 024].
—  Number of characters in an external identifier [1 024].
—  External identifiers in one translation unit [65 536].
—  Identifiers with block scope declared in one block [1 024].
—  Macro identifiers simultaneously defined in one translation unit [65 536].
—  Parameters in one function definition [256].
—  Arguments in one function call [256].
—  Parameters in one macro definition [256].
—  Arguments in one macro invocation [256].
—  Characters in one logical source line [65 536].
—  Characters in a string literal (after concatenation) [65 536].
—  Size of an object [262 144].

En buen cristiano: para conocer los limites de un compilador en particular habrá que revisar su documentación.

Un saludo
#54
(a + sizeof(a[n])*n -a) / sizeof(int)
Por partes:

1) Ya que "a" se suma y luego se resta la quitamos de la expresión, queda "(sizeof(a[n]) * n) / sizeof(int)".
2) "sizeof(a[n])" es el numero de bytes necesarios para almacenar el array de tipo "int [n]".
3) Multiplicado por "n" es el numero de bytes necesario para almacenar "n" arrays de tipo "int [n]".
4) Para quitar al tipo int de la ecuación se divide por "sizeof(int)", con lo que terminamos con solo la multiplicación "n * n".

Un saludo
#55
Otro error (uno lógico) se encuentra en todos los condicionales de la función "testNOfDaysFebruary":
void testNOfDaysFebruary(void)
{
   if (nOfdaysfebruary(2016 != 29)){
   /* ... */
   if (nOfdaysfebruary(2014 != 28)){
   /* ... */
   if (nOfdaysfebruary(2000 != 29)){
   /* ... */
   if (nOfdaysfebruary(1600 != 29)){
   /* ... */
}

Sintácticamente son correctas pero tienen el efecto de llamar a la función "nOfdaysfebruary" con el valor cero como argumento.

Hay que sacar la comparación con las literales fuera de la lista de argumentos de la función:
void testNOfDaysFebruary(void)
{
   if (nOfdaysfebruary(2016) != 29){
   /* ... */
   if (nOfdaysfebruary(2014) != 28){
   /* ... */
   if (nOfdaysfebruary(2000) != 29){
   /* ... */
   if (nOfdaysfebruary(1600) != 29){
   /* ... */
}


Un saludo
#56
Cita de: boy-ka en  1 Abril 2015, 21:54 PMY si en caso de que el segundo dato no sea un entero, y sea un string? u otro tipo de dato?

printf("%s %d %d/%d/%d\n", nombre, num, d, m, a);

Te marcaría error ya que %d hace referencia a que es un entero
Por partes (todo lo que sigue es en buen plan):

1) El valor de retorno de las funciones scanf/fscanf/sscanf es el numero de conversiones realizadas con éxito.
2) En mi programa de ejemplo se verifica que se puedan leer las cinco conversiones, para ello es tan sencillo como verificar que el valor de retorno de la función sea igual a ... cinco.
3) Cuando se encuentra una linea que no cumple con ese formato (y eso sucede con el ultimo elemento del array, la cadena "LINEA_SIN_EL_FORMATO_VALIDO") la función retorna algún otro valor, la condición:
sscanf(linea[i], " %[^#]#%d#%d/%d/%d", nombre, &num, &d, &m, &a) == 5
Resulta en el valor cero (falso en C) y con ello el bucle termina su ejecución.

----

Cita de: boy-ka en  1 Abril 2015, 21:54 PMpor qué no mejor leer el texto entero como si fuese un string?, de esta manera
En su tercer mensaje el creador del tema (me refiero al usuario niraikanai ) indica que utiliza esa función para leer las lineas de texto:
Cita de: niraikanai en  2 Marzo 2015, 21:19 PMLeo la linea con fgets. Por ejemplo fgets(linea, 80, pF)

Un saludo
#57
Cita de: JonaLamper en  1 Abril 2015, 10:37 AMcuando intento hacerlo me dice que me faltan unas referencias a ciertas funciones de mi código y el problema es que no sé qué hacer, no sé cómo resolver esas referencias.
Con solo una captura va a ser difícil ayudarte.

En términos generales los pasos que se deben realizar en programación modular son:
1) Compilas cada unidad (extensión ".c") para generar el código objeto correspondiente (extensión ".o").
2) Mediante el compilador indicas todos los archivos de código objeto y el nombre del ejecutable.

Si en el segundo paso falta un archivo de código objeto se generan los mensajes de "undefined reference to ...", por supuesto ese mensaje se puede generar por otras razones.

En la captura tienes tres unidades pero solo se lista el código objeto de dos y en la linea de comandos al llamar a gcc solo se indica uno.

Un saludo
#58
La recomendación anterior se mantiene: no utilices feof, en su lugar verifica el valor de retorno de la función en turno. También utiliza nombres descriptivos para las variables, "algodon" no lo es.

----

El bucle de lectura lo puedes sustituir con una sola llamada a fread:
int num_regs; /* Numero de registros */

/* ... */

// Leer datos del fichero
Agenda = fopen("agenda.dat", "rb");
num_regs = fread(Datos, sizeof Datos[0], 100, Agenda);
fclose(Agenda);

Con ella se le indica a la función que lea un máximo de 100 registros del archivo y los almacene a partir de la dirección indicada por "Agenda". El numero actual de registros leídos se almacena en la variable "num_regs".

En la misma linea el bucle de escritura se sustituye por la llamada a función:
// Escribir los datos en el fichero
Agenda = fopen("agenda.dat", "wb");
fwrite(Datos, sizeof Datos[0], num_regs, Agenda);
fclose(Agenda);


----

Ya por ultimo cuando se desea leer un valor de tipo unsigned short el especificador de formato con scanf y familia es "%hu".

Un saludo
#59
Primero comentas que el programa debe manejar los destinos, horario de salida y cupos disponibles, con esto se entiende que (por razones obvias) el origen siempre es el mismo.

Pero después indicas que se deben manejar las ciudades de origen y destino lo que me hace pensar mas en un programa sobre una agencia de viajes con todas las rutas disponibles.

¿Debes manejar solo el destino o ambos (origen y destino)?

Un saludo
#60
No. Significa que si quieres utilizar la función system en tu programa solo tienes que incluir el encabezado <stdlib.h>, ello funcionara sin importar el compilador utilizado.

Un saludo