Programación General > C/C++

 Una duda con un programa basico

(1/2) > >>

tkc009:
Hola a todos, miren tengo una duda con un programa que lo fui haciendo a travez de un tutorial, pero hay una cosa que no se me aclaro:


--- Código: C++ ---#include <stdio.h> int main()    {    float x1, x2, paso;    float y, i;    printf("Tabla de valores para la funcion Y=X*X-5*X+10n");    printf("nIntroduce el valor menor de x: ");    scanf("%f",&x1);    printf("Introduce valor mayor de x: ");    scanf("%f",&x2);    printf("Introduce el incremento del valor x: ");    scanf("%f",&paso);    for (i=x1;i<=x2;i=i+paso)        {        y=i*i-5*i+10;        printf("nX= %15f Y= %15f",i, y);        }        while(getchar()!='n');        getchar();} 
yo se que bueno se introducen los 3 valores, bueno despues de eso dentro del for que tenemos y=i*i-5*i+10; osea la primera i de este calculo que es remplazado por x1 y luego la segunda i por x2 y por ultimo por paso, esto es lo que no se me aclara

ProfesorX:
Estas completamente equivocado y confundido, el valor de i en toda la ecuacion vale lo mismo, no tiene 3 valores diferentes como mencionas. Por lo que estas mencionando, me parece que tu confusion viene de aqui:


--- Código: C++ --- for (i=x1;i<=x2;i=i+paso)        {        y=i*i-5*i+10;        printf("nX= %15f Y= %15f",i, y);        }  
Esa linea en realidad significa:
1. Guarda el valor de x1 en i (i=x1).
2. Pregunta si el valor de i es menor o igual que X2 (i<=X2)
Si es menor o igual, entra al ciclo.
Si es mayor, sales del ciclo (ve al paso 6)
3. Calcula la equacion e imprime el resultado.
4. Incrementa el valor de i en paso (i=i+paso)
5. Regresas al paso 2
6. Salida del ciclo

Segun esto, y suponiendo que tienes X1= 1, X2 = 3, paso = 1, significaria que el ciclo se ejecuta 3 veces, ya que iria de 1 hasta 3, incrementando de uno en uno, y por lo tanto la primera vez que entra al ciclo, TODOS los valores de i en la ecuacion se sustituyen por el valor de 1, esto significa que tu ecuacion:

y=i*i-5*i+10

se tranforma en:

y=1*1-5*1+10

La segunda vez se tranforma en

y=2*2-5*2+10

y asi sucesivamente.

Si aun asi no entiendes, me parece que tendrias que regresarte a la materia de algoritmos, es especial la seccion que trata sobre ciclos, contadores y acumuladores.

Saludos :)

tkc009:
Muchas gracias profesorx hoy empeze a ver el siglo "for", me aclaraste la duda de muy lejos  :D sabia que estaba completamente equivocado, y bueno yo muy agradecido jaja.
Salu2

tkc009:
Ahora tengo otra duda con otro programa que es este:


--- Código: C++ ---#include <stdio.h> int main()    {     float x1, x2, paso;     float i, y;     printf("nTabla de valores para la funcion Y=X*X-5*X+10");     printf("nnIntroduce el menor valor de x: ");     scanf("%if",&x1);     printf("nIntroduce el mayor valor de x: ");     scanf("%if",&x2);     if (x1>x2)        {        printf("nLo siento vuelta a intentarlo");        return;        }        printf("nIntroduce el incremento del valor x: ");        scanf("%if",&paso);                if (paso<=0)           {                    printf("nLo siento vuelta a intentarlo");                    return;                    }        for (i=1;i<=x2;i=i+paso)            {            y=i*i-5*i+10;            printf("Y= %if X= %if",y, i);            }while(getchar()!='n');getchar();}  
yo lo ejecuto con dev-c++ pero el compilador creo que dice que es un error del return, cual seria exactamente el problema

Garethsoul:
Primero que nada buenas je al final te dejo el codigo ya funcionando te comento los errores que vi y correji:

1) como sabras la funcion int main(){} debe de retornar un entero SIEMPRE! vos estabas poniendo el
--- Código: C++ --- return;   pero te faltaba agregarle o una variable entera o el numero 0 EJEMPLO
--- Código: C++ --- return 0;  .
 
2)El otro error que vi es que tratabas de tomar los valores float con scanf usando la letra incorrecta ya que para cada tipo de variable se usa una letra distinta EJEMPLO

--- Código: C++ ---scanf("%if",&x2); // asi lo ponias vosscanf("%f",&x2); //como es un float usas la letra f y solo f   
si la variable x2 en ves de ser float fuese int usarias lo siguiente

--- Código: C++ --- scanf("%i",&x2); // o tambien podes usar %d si mal no recuerdo   
y no hace falta que pongas tantos "return 0" con que lo pongas antes de cerrar la funcion main anda igual.
El codigo que sigue es con los returns de MAS.
 

--- Código: C++ ---#include <stdio.h> int main()    {     float x1, x2, paso;     float i, y;     printf("nTabla de valores para la funcion Y=X*X-5*X+10");     printf("nnIntroduce el menor valor de x: ");     scanf("%f",&x1);     printf("nIntroduce el mayor valor de x: ");     scanf("%f",&x2);     if (x1>x2)        {        printf("nLo siento vuelta a intentarlo");        return 0;        }        printf("nIntroduce el incremento del valor x: ");        scanf("%f",&paso);         if (paso<=0)           {                    printf("nLo siento vuelta a intentarlo");                    return 0;                    }        for (i=1;i<=x2;i=i+paso)            {            y=i*i-5*i+10;            printf("Y= %f X= %f",y, i);            }while(getchar()!='n');getchar();  return 0;}   
y ACA TENES SIN LOS RETURNS los probe a ambos funcionan igual.

--- Código: C++ ---#include <stdio.h> int main()    {     float x1, x2, paso;     float i, y;     printf("nTabla de valores para la funcion Y=X*X-5*X+10");     printf("nnIntroduce el menor valor de x: ");     scanf("%f",&x1);     printf("nIntroduce el mayor valor de x: ");     scanf("%f",&x2);     if (x1>x2)        {        printf("nLo siento vuelta a intentarlo");         }        printf("nIntroduce el incremento del valor x: ");        scanf("%f",&paso);         if (paso<=0)           {                    printf("nLo siento vuelta a intentarlo");                     }        for (i=1;i<=x2;i=i+paso)            {            y=i*i-5*i+10;            printf("Y= %f X= %f",y, i);            }while(getchar()!='n');getchar();  return 0;}  
Cualquier duda avisa :)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa