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

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 ... 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 [150] 151 152 153 154 155 156 157 158 159 160
1491  Programación / Programación C/C++ / Re: error al ejecutar el programa, necesito ayuda! en: 6 Octubre 2011, 18:24 pm
Los problemas son varios. Lo primero que debes hacer es conseguir un buen libro, revisa los temas fijos de este foro.

Errores comunes son la definicion de la funcion main, el uso de conio, etc. Todo eso se discute, de nuevo, en los temas fijos. Por favor revisalos.

El error mas importante en el programa es el uso de la coma como separador de decimales, en C debes utilizar el punto. El programa con las correcciones es:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   int dias;
  6.   int horas_extra;
  7.   double sueldo;
  8.  
  9.   puts("Dias trabajados:");
  10.   scanf("%d", &dias);
  11.  
  12.   puts("Horas extra:");
  13.   scanf ("%d", &horas_extra);
  14.  
  15.   sueldo = dias * 23.5 + horas_extra * 11.3;
  16.   printf("Sueldo: %.2f", sueldo);
  17.  
  18.   return 0;
  19. }

Un saludo
1492  Programación / Programación C/C++ / Re: Ejemplos de funciones en c en: 27 Septiembre 2011, 23:07 pm
En una sentencia de retorno como esta:
Código
  1. return N;
"N" debe ser del tipo indicado en la declaración de la funcion (siguiendo tu ejemplo debe ser "signed int") y puede ser cualquier expresión.

Esto es una expresión:
Código
  1. numero >= '0' && numero <= '9'

La prioridad de los operadores es, utilizando paréntesis:
Código
  1. (numero >= '0') && (numero <= '9')
1) Primero se aplican los operadores ">=" y "<=", el resultado de estos es 1 o 0 (Verdadero o Falso).

2) Despues se aplica el operador "&&" en el caso de '5' tenemos:
Código
  1. (1) && (1)
El operador "&&" resulta en 1 o 0 si se cumple con el operador lógico AND (Verdadero si ambos operandos son distintos de cero, Falso en caso contrario).

Para el tema de expresiones no hay nada mejor que un libro de calidad, si no tienes uno consiguelo (empieza revisando los temas fijos de este foro para recomendaciones).

Un saludo
1493  Programación / Programación C/C++ / Re: Dimensión de Arreglos en C en: 27 Septiembre 2011, 22:52 pm
Por lo visto tenemos una confusión, a ver si ahora me explico mejor.

Cuando indique que el proceso no es acumulativo me refería a la llamada a "malloc", no al incremento del contador "i".

Cuando se reserva memoria la variable "arreglo" sirve como bandera para saber si la reserva fue exitosa o no. Después de ello se libera pero eso no importa porque basta con revisar el valor de esa variable para conocer si funciono (diferente de NULL) o no (NULL).

Si por curiosidad se desea conocer si es posible realizar la máxima (en teoría) reserva de memoria basta con:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   size_t max = -1;
  7.   char *p;
  8.  
  9.   p = malloc(max);
  10.   free(p);
  11.  
  12.   if (p)
  13.      puts("OK");
  14.   else
  15.      puts("Error");
  16.  
  17.   return EXIT_SUCCESS;
  18. }
El programa anterior de naderST realiza (poco mas o poco menos) lo mismo: acercarse al punto donde la reserva de memoria falle.

Un saludo
1494  Programación / Programación C/C++ / Re: Dimensión de Arreglos en C en: 27 Septiembre 2011, 17:52 pm
Si que afecta, fijate mejor xD

El bucle acabara cuando el sistema se quede sin memoria y retorne NULL, eso nunca pasara por que hace free a la memoria que reserva.
No. Las llamadas anteriores no importan porque la intención no es realizar un proceso acumulativo.

Si se llama a "malloc" y esta falla su valor (NULL) se almacenara en la variable "arreglo" y eso causara la salida del bucle.

Un saludo
1495  Programación / Programación C/C++ / Re: Dimensión de Arreglos en C en: 27 Septiembre 2011, 03:52 am
Nunca sale del ciclo por que siempre liberas la memoria.
No. La variable "arreglo" contiene la ultima direccion retornada por malloc, la liberacion de memoria en la siguiente sentencia no afecta la condicion del bucle.

Si piensan ejecutar un bucle asi seria mejor cambiar el incremento a 1 KB o 1 MB.

Un saludo
1496  Programación / Programación C/C++ / Re: Dimensión de Arreglos en C en: 26 Septiembre 2011, 01:44 am
No me gusta de números mágicos.
Muchas personas consideran usar "sizeof" una buena práctica.
Leo Gutiérrez se refiere al uso de sizeof en esta linea:
Código
  1. char * arreglo = malloc(sizeof(char) * i);
Todo compilador que cumpla con el estándar de C debe evaluar "sizeof(char)" resultando en 1 y la multiplicación por este no tiene sentido ya que no afecta el resultado. Por ello se puede abreviar a:
Código
  1. char * arreglo = malloc(i);

En cuanto al tamaño máximo que puede tener un array este depende del compilador utilizado. Ello porque el estándar del lenguaje permite indicar el numero de elementos en un array mediante una expresión constante de tipo entero (cualquier tipo, por ejemplo "int" o "unsigned long") mayor que cero.

Lo que debe hacer el OP (el usuario Principios en C) es revisar la documentación de su compilador.

Un saludo
1497  Programación / Programación C/C++ / Re: Ejemplos de funciones en c en: 26 Septiembre 2011, 01:18 am
El_Java, no entiendo por qué tu usa números mágicos en su codigo
Supongo querias decir: "El_Java, no entiendo por qué el (Leon8086x) usa números mágicos en su codigo".

tambien no entiendo por qué el OP no usa cero en lugar de menos uno.

...

Así, puede usar en el 'if' directamente.
Si se retorna uno en caso de coincidencia y cero en caso contrario no hay porque utilizar un "if", en su lugar se utiliza directamente el resultado del operador "&&":
Código
  1. int esnum(char numero)
  2. {
  3.   return numero >= '0' && numero <= '9';
  4. }

Un saludo
1498  Programación / Programación C/C++ / Re: Programa para convertir bases numericas en: 25 Septiembre 2011, 01:41 am
Solo tienes que tomar el numero y dividirlo por la base una y otra vez hasta que termine en cero. En cada iteracion el residuo de la división (el modulo) te dará el dígito menos significativo (hasta ese momento).

Inténtalo primero con papel y lápiz usando las bases mas utilizadas (8, 10 y 16).

Un saludo
1499  Programación / Programación C/C++ / Re: duda con macro con if else if else en: 23 Septiembre 2011, 17:47 pm
Para algo relativamente complejo es mejor desarrollar una función. Ello porque en la macro seria muy difícil (tal vez mediante la macro "assert") validar los argumentos.

En todo caso si solo quieres agregar un sufijo a la cadena puedes utilizar algo mas o menos así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define FOPEN(var, sufix) ((var) = fopen("asd" TO_STR(sufix) ".dat", "ab"))
  5. #define TO_STR(str)  #str
  6.  
  7. int main(void)
  8. {
  9.   FILE *a;
  10.   FILE *b;
  11.  
  12.   FOPEN(a, 1);
  13.   FOPEN(b, 2);
  14.  
  15.   fclose(a);
  16.   fclose(b);
  17.  
  18.   return EXIT_SUCCESS;
  19. }
Como puedes observar el problema es que se deben utilizar literales como 1 o 2, no puedes utilizar una variable. De nuevo en un caso como ese lo mejor es una funcion.

Un saludo
1500  Programación / Programación C/C++ / Re: Punteros en C en: 19 Septiembre 2011, 15:17 pm
Me parece el mensaje de error es bastante claro: el especificador "%d" espera un (correspondiente) argumento de tipo "int" mientras que tu le pasas "&mientero" que es de tipo "int *".

Si quieres imprimir una dirección de memoria debes utilizar "%p" y convertir explícitamente el puntero al tipo "void *":
Código
  1. printf("%p\n", (void *) &mientero);

Un saludo
Páginas: 1 ... 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 [150] 151 152 153 154 155 156 157 158 159 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines