Problema al compilar.

Iniciado por cantabria1234, 4 Abril 2013, 22:32 PM

0 Miembros y 1 Visitante están viendo este tema.

cantabria1234

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");
     }

85

#1
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 (cpp) [Seleccionar]

#include<stdio.h>
#include<stdlib.h>


void ciclo(FILE *fichero, int minimo,int alimentos, int *variable){
   
    int  dias=0, 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);  

printf("%d %d %d\n",comida,alimentos,i);
system("pause");

calorias=calorias+comida;            
}
           
if(calorias<minimo){
                         
hambre=hambre+1;          
}
                       
else {        
contador=hambre;        
hambre=0;      
}
                       
if(hambre>contador){
                       
*variable=hambre;        
}        
}          
}

int main(int variable){
   
    FILE *fichero;
    fichero=fopen("comidas.txt", "r+");

    if(!fichero){

puts("No existe el fichero!\n");
system("pause");
//return 0;

fichero=fopen("comidas.txt", "w");
if(!fichero){
puts("No se ha creado el fichero!\n");
system("pause");
return 0;
}
fclose(fichero);
fichero=fopen("comidas.txt", "r+");
    }
   
    int minimo, alimentos;
    printf("Introduce la cantidad de alimentos:\n");
    scanf("%i", &alimentos);

    alimentos = 5;

    printf("Introduce el minimo de calorias:\n");
    scanf("%i", &minimo);
    ciclo(fichero,minimo,alimentos,&variable);
    printf("Hambruna mas larga: %i\n", variable);

    fclose(fichero);
    system("pause");
    return 0;
}


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

rir3760

Cita de: cantabria1234 en  4 Abril 2013, 22:32 PMBuenas 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:
#include <stdio.h>
#include <stdlib.h>

void ciclo (FILE *fichero, int minimo, int alimentos, int *variable);

int main(void)
{
   FILE *fichero;
   int variable;
   int minimo, alimentos;
   
   fichero = fopen ("comidas.txt", "r");
   
   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);
   
   return 0;
}

void ciclo (FILE *fichero, int minimo, int alimentos, int *variable)
{
   int hambre, i, comida, calorias;
   
   *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 {
         if (hambre > *variable)
            *variable = hambre;
         
         hambre = 0;
      }
   }
}


Un saludo
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

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

Un saludo.

85

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
Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

rir3760

Cita de: cantabria1234 en  5 Abril 2013, 19:50 PMestoy aprendiendo de los errores, pero el programa sigue sin funcionar
Con solo eso no es posible ayudarte.

Mejor sigue la recomendación de 85:
Cita de: 85 en  5 Abril 2013, 21:25 PMdeberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes

Un saludo
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