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");
}
No entiendo de que se trata tu programa pero así como te lo paso anda.´
comidas.txt
Citar
111
222
333
444
555
#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;
}
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
Muchas gracias por las respuestas y estoy aprendiendo de los errores, pero el programa sigue sin funcionar :-\
Un saludo.
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
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