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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al compilar.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al compilar.  (Leído 1,750 veces)
cantabria1234

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Problema al compilar.
« en: 4 Abril 2013, 22:32 pm »

Buenas noches, soy principiante en programación en C y al hacer este problema me compila pero el programa deja de funcionar. Os adjunto el enunciado del ejercicio y mi código.

Muchas gracias de antemano.

Problema:
En el fichero “comidas” esta la cantidad de calorıas que ingiere un animal en cada dıa, desglosada por alimentos (una lınea por cada dıa, con tantos valores como alimentos). El programa
leer´a de teclado la cantidad de alimentos y las calorıas diarias mınimas para estar suficientemente nutrido. Se considera que si en un d´ıa no llega a ese valor, entonces es dıa de hambre. Si
lo supera es dıa de abundancia. Un periodo de hambre es una cantidad de dıas seguidos, todos
de hambre, y analogamente un periodo de abundancia. El programa escribir´a en pantalla la
duracion del periodo de hambre mas largo
El programa tendrá obligatoriamente al menos otra funcion ademas de main, con un trabajo
repartido en partes similares y con paso de argumentos.
Ejemplo:
Si son 3 alimentos, el mınimo de calorıas son 35 y el fichero “comidas” tiene:
15 12 25
20 14 7
5 23 1
0 2 18
19 21 15
5 1 2
2 2 1
0 1 1
2 18 24
21 20 26
14 12 10
Entonces el periodo de hambre m´as largo es de 3 d´ıas (del 6 al 8).
Aspecto en pantalla
Numero de alimentos: 3
Minimo de calorias: 35
Hambruna mas larga: 3 dias



Este es mi codigo:
#include<stdio.h>
#include<stdlib.h>


void ciclo(FILE *fichero, int minimo,int alimentos, int *variable){
     
     int  dias, hambre, i, comida, calorias, contador;
     
     contador=0;
     *variable=0;
     hambre=0;
     i=0;
     
     while(!feof(fichero)){
        calorias=0;
                         for(i=0;i<alimentos;i++){
                            
                         fscanf(fichero,"%i", &comida);
                         calorias=calorias+comida;
                           }
                         
                         if(calorias<minimo){
                            hambre=hambre+1;
                         }
                         else {
                            contador=hambre;
                            hambre=0;
                      }
                         if(hambre>contador){
                            *variable=hambre;
                            
                         }
                         }
                         
                         
                         
                         }
                     
                         
                                             


void main(int variable){
     
     
     FILE *fichero;
     fichero=fopen("comidas.txt", "r");
     
     int minimo, alimentos;
     printf("Introduce la cantidad de alimentos:\n");
     scanf("%i", alimentos);
     printf("Introduce el minimo de calorias:\n");
     scanf("%i", minimo);
     ciclo(fichero,minimo,alimentos,&variable);
     printf("Hambruna mas larga: %i\n", variable);
     
     
     
     
     
     system("pause>>null");
     }


En línea

85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Problema al compilar.
« Respuesta #1 en: 5 Abril 2013, 01:23 am »

No entiendo de que se trata tu programa pero así como te lo paso anda.´

comidas.txt
Citar
111
222
333
444
555

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4.  
  5. void ciclo(FILE *fichero, int minimo,int alimentos, int *variable){
  6.  
  7.     int  dias=0, hambre, i, comida, calorias, contador;
  8.  
  9.     contador=0;
  10.     *variable=0;
  11.     hambre=0;
  12.     i=0;
  13.  
  14.     while(!feof(fichero))
  15.     {
  16. calorias=0;
  17.  
  18. for(i=0;i<alimentos;i++){
  19.  
  20. fscanf(fichero,"%i", &comida);  
  21.  
  22. printf("%d %d %d\n",comida,alimentos,i);
  23. system("pause");
  24.  
  25. calorias=calorias+comida;            
  26. }
  27.  
  28. if(calorias<minimo){
  29.  
  30. hambre=hambre+1;          
  31. }
  32.  
  33. else {        
  34. contador=hambre;        
  35. hambre=0;      
  36. }
  37.  
  38. if(hambre>contador){
  39.  
  40. *variable=hambre;        
  41. }        
  42. }          
  43. }
  44.  
  45. int main(int variable){
  46.  
  47.     FILE *fichero;
  48.     fichero=fopen("comidas.txt", "r+");
  49.  
  50.     if(!fichero){
  51.  
  52. puts("No existe el fichero!\n");
  53. system("pause");
  54. //return 0;
  55.  
  56. fichero=fopen("comidas.txt", "w");
  57. if(!fichero){
  58. puts("No se ha creado el fichero!\n");
  59. system("pause");
  60. return 0;
  61. }
  62. fclose(fichero);
  63. fichero=fopen("comidas.txt", "r+");
  64.     }
  65.  
  66.     int minimo, alimentos;
  67.     printf("Introduce la cantidad de alimentos:\n");
  68.     scanf("%i", &alimentos);
  69.  
  70.     alimentos = 5;
  71.  
  72.     printf("Introduce el minimo de calorias:\n");
  73.     scanf("%i", &minimo);
  74.     ciclo(fichero,minimo,alimentos,&variable);
  75.     printf("Hambruna mas larga: %i\n", variable);
  76.  
  77.     fclose(fichero);
  78.     system("pause");
  79.     return 0;
  80. }
  81.  



« Última modificación: 5 Abril 2013, 01:28 am por 85 » En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema al compilar.
« Respuesta #2 en: 5 Abril 2013, 17:40 pm »

Buenas noches, soy principiante en programación en C y al hacer este problema me compila pero el programa deja de funcionar. Os adjunto el enunciado del ejercicio y mi código.
Errores en el programa hay varios.

* En la función main hay que cambiar su definición a "int main(void) ...", indicar su valor de retorno con al menos "return 0;" y colocar a "variable" como una variable local a esa función.

* En la misma función en las dos llamadas a scanf falta el operador "dirección de" (el '&').

* En la función "ciclo" el problema principal se debe al uso de cuatro variables para obtener el máximo cuando basta con solo tres (hay que eliminar del calculo y del programa a la variable contador). También hay que eliminar la variable "dias" ya que no se utiliza.

* En esa misma función vas a tener problemas debido al uso de la función feof, la solución mas facil pero no la mejor es utilizar la cadena de formato "%i " con fscanf (esa cadena tiene un espacio al final y es critico).

El programa con las correcciones:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void ciclo (FILE *fichero, int minimo, int alimentos, int *variable);
  5.  
  6. int main(void)
  7. {
  8.   FILE *fichero;
  9.   int variable;
  10.   int minimo, alimentos;
  11.  
  12.   fichero = fopen ("comidas.txt", "r");
  13.  
  14.   printf ("Introduce la cantidad de alimentos:\n");
  15.   scanf ("%i", &alimentos);
  16.   printf ("Introduce el minimo de calorias:\n");
  17.   scanf ("%i", &minimo);
  18.   ciclo (fichero, minimo, alimentos, &variable);
  19.   printf ("Hambruna mas larga: %i\n", variable);
  20.  
  21.   return 0;
  22. }
  23.  
  24. void ciclo (FILE *fichero, int minimo, int alimentos, int *variable)
  25. {
  26.   int hambre, i, comida, calorias;
  27.  
  28.   *variable = 0;
  29.   hambre = 0;
  30.   i = 0;
  31.  
  32.   while (!feof (fichero) ) {
  33.      calorias = 0;
  34.      for (i = 0; i < alimentos; i++) {
  35.         fscanf (fichero, "%i ", &comida);
  36.         calorias = calorias + comida;
  37.      }
  38.  
  39.      if (calorias < minimo)
  40.         hambre = hambre + 1;
  41.      else {
  42.         if (hambre > *variable)
  43.            *variable = hambre;
  44.  
  45.         hambre = 0;
  46.      }
  47.   }
  48. }

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
cantabria1234

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problema al compilar.
« Respuesta #3 en: 5 Abril 2013, 19:50 pm »

Muchas gracias por las respuestas y estoy aprendiendo de los errores, pero el programa sigue sin funcionar  :-\

Un saludo.
En línea

85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Problema al compilar.
« Respuesta #4 en: 5 Abril 2013, 21:25 pm »

deberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes que son las de C++. Fijate en las opciones para el armado del post.

y un extra sería si podés hacer que el código compile en algún compilador online, por ejemplo este;
http://www.compileonline.com/compile_cpp_online.php

así es más fácil ayudarte.

Saludos
En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema al compilar.
« Respuesta #5 en: 6 Abril 2013, 04:33 am »

estoy aprendiendo de los errores, pero el programa sigue sin funcionar
Con solo eso no es posible ayudarte.

Mejor sigue la recomendación de 85:
deberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al compilar
Java
layker 3 3,893 Último mensaje 18 Noviembre 2008, 03:15 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines