¡Advertencia!
Este tema no ha tenido respuestas en más de un mes. Recuerda que si deseas añadir una nueva debes cumplir con las normas de la web.
/* 4.- En un arreglo unidimensional de tipo real se tienen almacenadas
las toneladas mensuales de arroz cosechadas durante el año anterior en una finca de Bonao.
A partir de esos datos, calcule y muestre lo siguiente:

.- El promedio anual de toneladas de arroz cosechadas

.- ¿Cuántos meses hubo una cosecha superior al promedio anual?

.- ¿En qué mes se produjo el mayor número de toneladas? ¿Cuántas fueron? */

Tengo este problema para plantearlo en C. Tengo todo bien hasta el promedio de toneladas en el año. En la parte de la cosecha superior anual no sé porque me da un numero tan grande, si lo que pido en el for es recorrer el arreglo arrozToneladas[12], preguntar si algún número del arreglo es mayor al promedio anual y si es así, pues simplemente sumarle 1 a la variable cosechaSuperior (al menos eso creo que yo que es lo que pido). Y tengo dudas sobre como saber el número mayor en un arreglo ( el mes mayor número de toneladas).

Espero no causar muchas molestias. Me ponen unas que otras prácticas en la universidad de algunos 30 ejercicios y siempre hay 1 o 2 ejercicios que me causan problemas. Este es uno de ellos.

#include <stdio.h>

int main ()

{

printf ("TONELADAS DE ARROZ DURANTE EL AÑO:

");
int i, arrozToneladas[12], cosechaSuperior, mayorToneladas;
float promedioAnual;

for (i=0;i<=11;i++)
{
printf ("Ingrese las toneladas de arroz del mes %d: ", i+1);
scanf ("%d", &arrozToneladas);
promedioAnual = promedioAnual+arrozToneladas;
}

promedioAnual=promedioAnual/12;
printf ("Promedio Anual de toneladas de arroz cosechadas: %.2f
", promedioAnual);


for(i=0;i<=11;i++){
if (arrozToneladas>promedioAnual)
cosechaSuperior+=1;
}

printf ("Meses con una cosecha superior al promedio anual: %d", cosechaSuperior);

}

}

Saludos a todos

Mensaje de moderación: por favor, intenta introducir los títulos de forma más abreviada la próxima vez que abras un hilo.
Te digo lo mismo que hace un mes, ten cuidado con las variables sin inicializar ya que algunos compiladores de C por defecto no las inicializan a cero dejando en su lugar un valor indeterminado por el espacio de memoria utilizado.


Si intentas sacar el valor de una variable no inicializada previamente puede darte un valor no esperado por contener lo que se suele decir "basurilla".


En este caso has empezado a sumar sobre las variables f promedioAnual y d cosechaSuperior sin haberlas inicializado a cero previamente, lo que hará que estas dos variables tengan "basurilla" inicialmente (por ejemplo que promedioAnual te devuelva 58342.1202771 y cosechaSuperior te devuelva 9820904). Es un error que mucha gente suele cometer ya que el compilador asume que estás inicializando las variables en el momento en el que empiezas a utilizarlas.

La solución sería inicializarlas a cero mientras las declaras (i ya se inicializa a cero al iniciar cada bucle for):
int i, arrozToneladas[12], cosechaSuperior = 0, mayorToneladas = 0;
	float promedioAnual = 0;


Después para el tercer ejercicio, tendrías que pensar en alguna forma de recorrer el array *d arrozToneladas elemento por elemento y compararlos con el mayor número de toneladas que inicialmente estará a cero y ya dependiendo de cuál es mayor o menor, guardarlo en dicha variable a la vez que el número de mes correspondiente en una variable aparte o bien en la misma en forma de array de tamaño 2, devolviéndolo luego ambos valores por salida estándar.

Bonus: Si has dado strings (punteros de char) en C, podrías dar el mes de forma literal para que quede más elegante. Si no o si el profesor lo pide de forma numérica, hazlo simplemente haciendo que devuelva "en el mes n".


Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".
He asignado 0 a todas las variables desde que me explicaste eso, inclusive he ayudado a varios amigos respecto a eso. Y ahora no se las coloque; irónico.

El profesor nos ha enseñado punteros, definición y una explicación sobre el tema, después una explicación sobre estructuras y como utilizar un puntero en ellas. Al ser el último tema que nos ha dado (semana pasada) no dudo que nos introduzca a los punteros en char la próxima clase. Igual miraré uno que otro tutorial en la web, a ver si lo hago así como el tuyo (sobre poner los meses por su nombre) antes de entregar el trabajo.

Igual gracias por la explicación, así me quedo:

#include <stdio.h>

int main ()

{

printf ("TONELADAS DE ARROZ DURANTE EL AÑO:

");
int i, arrozToneladas[12], cosechaSuperior=0, mayorToneladas=0, mes=0;
float promedioAnual=0;

for (i=0;i<12;i++)
{
printf ("Ingrese las toneladas de arroz del mes %d: ", i+1);
scanf ("%d", &arrozToneladas);
promedioAnual = promedioAnual+arrozToneladas;
}

promedioAnual=promedioAnual/12;
printf ("Promedio Anual de toneladas de arroz cosechadas: %.2f
", promedioAnual);


for(i=0;i<=11;i++){
if (arrozToneladas>promedioAnual)
cosechaSuperior+=1;
}
printf ("Meses con una cosecha superior al promedio anual: %d
", cosechaSuperior);

for(i=0;i<=11;i++){
if (arrozToneladas>mayorToneladas){
mayorToneladas=arrozToneladas;
mes =i+1 ;
}

}

printf ("El mayor numero de toneladas del año fue: %d en el mes %d", mayorToneladas, mes);

}


Por cierto, una pregunta:
¿Cuánto llevas programando?

Saludos y gracias de nuevo

He asignado 0 a todas las variables desde que me explicaste eso, inclusive he ayudado a varios amigos respecto a eso. Y ahora no se las coloque; irónico.

El profesor nos ha enseñado punteros, definición y una explicación sobre el tema, después una explicación sobre estructuras y como utilizar un puntero en ellas. Al ser el último tema que nos ha dado (semana pasada) no dudo que nos introduzca a los punteros en char la próxima clase. Igual miraré uno que otro tutorial en la web, a ver si lo hago así como el tuyo (sobre poner los meses por su nombre) antes de entregar el trabajo.

Igual gracias por la explicación, así me quedo:

Por cierto, una pregunta:
¿Cuánto llevas programando?

Saludos y gracias de nuevo

Es normal equivocarse y que cueste acostumbrarse a coger buenas prácticas a la hora de programar, y más aún en lenguajes de programación a medio-bajo nivel como es C o C++. Pero vamos, con práctica y algo de perseverancia en poco tiempo le coges el tranquillo xDD

Si los punteros lo habéis dado recientemente y no os han dicho nada sobre cadenas de texto en C (punteros de char), entonces sí, déjalo tal cual lo tienes, está bien y es suficiente

Sobre el off-topic, hice mis pinitos con la programación cuando era un crío, empezando a trastear con el lenguaje de programación BASIC a través de un intérprete de DOS llamado QuickBASIC 4.5 y con algo de Pascal con ayuda de mi padre y de unos cuantos libros viejunos de programación que tenía por mi casa. Pero casi nada, solo sabía tocar PRINTs, INPUTs, bucles DO-LOOP, GOTOs, IFs, conversiones, algo de programación estructurada por subrutinas, programación imperativa y poco más.

Cuando empecé a tomarlo más en serio, más que como un hobbie fue al comenzar a estudiar en la universidad a los 18 años donde empecé como tú ahora mismo, con C y C++ en una asignatura llamada Fundamentos de Programación I. A partir de ahí ya empecé a aprender también otros paradigmas y lenguajes de programación de más bajo y de más alto nivel, de la misma forma que lo sigo haciendo actualmente en mi tiempo libre y en algunas prácticas de la universidad.

Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".

Es normal equivocarse y que cueste acostumbrarse a coger buenas prácticas a la hora de programar, y más aún en lenguajes de programación a medio-bajo nivel como es C o C++. Pero vamos, con práctica y algo de perseverancia en poco tiempo le coges el tranquillo xDD

Si los punteros lo habéis dado recientemente y no os han dicho nada sobre cadenas de texto en C (punteros de char), entonces sí, déjalo tal cual lo tienes, está bien y es suficiente

Sobre el off-topic, hice mis pinitos con la programación cuando era un crío, empezando a trastear con el lenguaje de programación BASIC a través de un intérprete de DOS llamado QuickBASIC 4.5 y con algo de Pascal con ayuda de mi padre y de unos cuantos libros viejunos de programación que tenía por mi casa. Pero casi nada, solo sabía tocar PRINTs, INPUTs, bucles DO-LOOP, GOTOs, IFs, conversiones, algo de programación estructurada por subrutinas, programación imperativa y poco más.

Cuando empecé a tomarlo más en serio, más que como un hobbie fue al comenzar a estudiar en la universidad a los 18 años donde empecé como tú ahora mismo, con C y C++ en una asignatura llamada Fundamentos de Programación I. A partir de ahí ya empecé a aprender también otros paradigmas y lenguajes de programación de más bajo y de más alto nivel, de la misma forma que lo sigo haciendo actualmente en mi tiempo libre y en algunas prácticas de la universidad.


Jajaj por Dios eres todo una bestia, espero algún día poder resolver estos problemas con la facilidad que los haces tú. Muchas gracias mano por todo!