Ayuda con programa en c

Iniciado por yescri, 28 Diciembre 2011, 10:21 AM

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

yescri

Demon lo que yo me refiero es a esto.

Si pongo el programa de esta manera me da un resultado erroneo.

#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
area=(basemayor+basemenor)*altura/2;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);

printf("el area del trapecio es %f metros\n",area);
return 0;
}


Si lo pongo asi si me sale bien

#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);
area=(basemayor+basemenor)*altura/2;
printf("el area del trapecio es %f metros\n",area);
return 0;
}


Mi pregunta es: Que implica que lo declare en un lugar o en otro.
Espero haberme explicado bien.

Un saludo  ;)

Caster

Ni idea ;$

Pero hazlo como te dije yo así no hay error ;D

Saludos

yescri

 ;D bueno no pasa nada pero ya es saberlo por intriga.

Haber si algún otro compañero puede echarnos una mano!!  :P

Gracias programadores por vuestro tiempo  ;-)

Caster

Creo que ya se cual es el error:


#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
area=(basemayor+basemenor)*altura/2;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);

printf("el area del trapecio es %f metros\n",area);
return 0;
}


Aquí el valor de área siempre será 0 porque la pones antes de introducir los datos, entonces te la acepta porque están declaradas todas las variables y la sintaxis es correcta pero el valor de las variables siempre es 0 por lo tanto el resultado será siempre 0

Sin embargo aquí

#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);
area=(basemayor+basemenor)*altura/2;
printf("el area del trapecio es %f metros\n",area);
return 0;
}


Le das un valor a "área" cuando ya has introducido los valores de todas la variables y podrá operar correctamente.

Espero haberme explicado bien ;)

Saludos

3mp3z@ndo

#14
Cita de: yescri en 29 Diciembre 2011, 14:16 PM
Demon lo que yo me refiero es a esto.

Si pongo el programa de esta manera me da un resultado erroneo.

#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
area=(basemayor+basemenor)*altura/2;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);

printf("el area del trapecio es %f metros\n",area);
return 0;
}


Si lo pongo asi si me sale bien

#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);
area=(basemayor+basemenor)*altura/2;
printf("el area del trapecio es %f metros\n",area);
return 0;
}


Mi pregunta es: Que implica que lo declare en un lugar o en otro.
Espero haberme explicado bien.

Un saludo  ;)

Lo que implica es que en el primer caso las variables no están inicializadas, y aunque lo estuviesen, por ejemplo a 0, lo que estás haciendo con

area=(basemayor+basemenor)*altura/2;


es asignarle a area un valor basado en unas variables que todavía no contienen su valor real (el introducido por el usuario), por eso te da error, no importa lo que introduzca el usuario por el teclado, tu ya le has asignado un valor a area ANTES de obtenerlo por el teclado.

Y claro, en el segundo caso te funciona porque es exactamnete lo que quieres hacer, preguntas por unos valores, y DESPUÉS de obtenerlos por teclado es cuando le asignas un valor a area, que esta vez se apoya en los valores introducidos por teclado ya que has hecho esa asignación:


area=(basemayor+basemenor)*altura/2;


DESPUÉS de que las variables obtengan su valor real.

Un saludo

Edito: Se me adelantó |Demon| mientras te contestaba  :P

Caster

Lo que he dicho yo pero mejor explicado  ;)

Saludos

yescri

 ;-) muy bien explicado lo entiendo perfectamente.

Muchas gracias por vuestro tiempo. Ya ire preguntando las dudas que me vallan surgiendo.

Gracias a todos un saludo foreros y feliz navidad.

tillizi

Estimado te aclaro el tema del return que veo que aun te tiene confundido
cuando llamas a una funcion cualquiera como peude ser "main" delante le pones lo que va a devolver y despues le pones lo que se le va a pasar.
void quiere decir que no se le pasa nada o que no devuelve nada.

EJ: void main() {
//estamos llamando a la funcion main la cual no devolvera nada y no se le pasara nada
}

int main(void){
//estamos llamando a la función main y la misma devolverá un int y no se le pasara nada o sea void. En el cuerpo de este main debe haber un return /o sea devolver algo/ en este caso un int
return int; // dicho int puede ser una variable o un numero fijo, por lo general se usa return 0; cuando no quieres devolver nada, es casi como poner void main()
//por lo general si ponemos un int o cualqueir otra cosa delante es para devolver una variable que se calcula dentro de la función
EJ: return mivariable;
}

Espero que te sirva esto como guía para aclarar un poco mas el tema.

yescri

La verdad tillizi que no entiendo muy bien lo que me quieres decir.
Por ejemplo en el programa de antes:

#include <stdio.h>

int main ()
{
float basemayor,basemenor,altura,area;
printf("escriba un valor de la base mayor en metros:");
scanf("%f", &basemayor);
printf("escriba un valor de la base menor en metros:");
scanf("%f", &basemenor);
printf("escriba un valor de la altura en metros:");
scanf("%f", &altura);
area=(basemayor+basemenor)*altura/2;
printf("el area del trapecio es %f metros\n",area);
return 0;
}


Nosotros le vamos a pasar valores, y el programa nos va a dar otro valor. Por lo que he entendido de lo que tu me has explicado tendria que poner int main (int) y al final en vez de poner return 0 tendria que poner return int?

Me estoy liando un poco la verdad haber si alguien me lo puede explicar de alguna manera que lo entienda

Muchas gracias compañeros  ;)

Caster

#19
No te andelantes, no me acuerdo en que post había dicho @Sagrini que la mejor forma de poner main() es esta:

int main (int argc, char *argv [])

Pero si en el programa no vas a usar lo que está entre paréntesis es mejor que prescindas de ello:

int main()

Primero aprende sobre lo primero, variables, controladores de flujo(if, switch, while, for) y después las funciones.

Saludos

PD: Para que lo entiendas rápido, las funciones son "mini-programas" que se van a repetir durante todo el programa principal pero para no repetirlos continuamente se crea una función y se escribe la función en vez del proceso entero.