Anuncio

Colapsar
No hay ningún anuncio todavía.

Practica de fortran

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • Fortran Practica de fortran

    Hola, muy buenas. Mis conocimientos de programacion son apenas nulos, y estoy aprendiendo desde hace poco a usar fortran. Una de las practicas me pide que escriba un programa q lea N números e imprima cual es el mayor y cual el menor. He hecho lo siguiente

    PROGRAM MAYOR MENOR
    IMPLICIT NONE
    c Escribe un programa que lea N numeros e imprima cual es el mayor y cual el menor

    INTEGER I,N
    REAL*8 XMAX, XMIN

    XMAX=0.D0
    XMIN=0.D0



    WRITE(*,*) 'ESCRIBE NUMERO DE DATOS'
    READ(*,*)N

    DO I=1,N

    WRITE(*,*) 'ESCRIBE NUMERO'
    READ(*,*) I

    ENDDO


    IF (I.LT.XMIN) THEN

    XMIN=XMIN+I

    WRITE(*,*) 'Menor=',XMIN

    ELSE IF (I.GT.XMAX) THEN

    XMAX=XMAX+I

    WRITE(*,*) 'Mayor=',XMAX

    ENDIF

    END

    Tras compilar, construir y demas, ejecuto el programa sin errores pero no funciona como lo que me piden. Me da un numero que es el mayor mas uno, alguien me echa una mano?

  • #2
    Re: Practica de fortran

    Hola!

    A pesar de que mis conocimientos en fortran son nulos, creo que el problema puede estar en:

    XMAX=XMAX+I

    WRITE(*,*) 'Mayor=',XMAX

    A la variable XMAX le estás asignando el valor que ya tenía (XMAX) más I (I=1, supongo), y luego estás sacando ese nuevo valor de XMAX por pantalla.

    Es probable que me equivoque... Intenta cambiar eso y nos cuentas, o si directamente ves que me equivoco, corrígeme
    Última edición por JunFan; 13/03/2010, 21:30:27. Motivo: confusión

    Comentario


    • #3
      Re: Practica de fortran

      lo siento JunFan, pero de lo poco que sé de fortran, eso sé que no estaría mal definido, porque fortran te permite asignar un valor a una magnitud, que en principio es fija y luego, mas adelante, puedes volver a definirla como variable, aunque eso matemáticamente no tendría sentido xD

      He seguido probando mas cosas pero no me dan resultado, si alguien puede echarme una mano...

      PD: Gracias de todas formas junfan

      Comentario


      • #4
        Re: Practica de fortran

        Tienes varios problemas, pero el principal es que tienes que hacer las comprobaciones dentro del bucle. Tal como lo estás haciendo sólo estás chequeando el último valor entrado. Por otra parte, una vez que consigas que un número es el mayor/menor, simplemente asígnalo a la variable que corresponde, no lo sumes.

        Deberías asignar inicialmente XMIN a un valor muy grande y XMAX a un valor muy pequeño. Mejor aún, deberías leer el primer número antes del bucle y asignarlo tanto a XMIN como a XMAX y luego hacer tu bucle de 2 a N.

        Imprimir cual número es el menor/mayor deberías hacerlo una vez el bucle termine, a menos claro que desees actualizar en pantalla cual es el menor/mayor en la medida que se vayan introduciendo nuevos números.

        Saludos,

        AA

        PD. Si el compilador te acepta leer la variable del bucle dentro del bucle, ok, pienso que no debería ser pero si lo acepta, pues lo acepta. Lo que te puedo decir es que el resultado de asignarle un valor en el interior de un bucle a la variable del bucle es una pésima práctica y puede llevar a obtener resultados inesperados y a errores de ejecución muy difíciles de encontrar. Yo te recomiendo muy encarecidamente que nunca alteres la variable de control del bucle dentro del bucle. Para ese tipo de operaciones existen otras construcciones programáticas como los bucles WHILE, por ejemplo
        Última edición por Al2000; 14/03/2010, 02:10:22. Motivo: Añadir postdata.
        Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

        Comentario


        • #5
          Re: Practica de fortran

          Eso, el problema se centra en que el primer dato de debe asignar a XMIN y XMAX, luego a partir del segundo dato compruebas se I es menor (mayor) que XMIN (XMAX), luego según lo que ocurra debes hacer XMIN=I y no XMIN=I+XMIN, ya que ahí estás cambiando la variable.
          Jorge López

          Comentario


          • #6
            Re: Practica de fortran

            Hola, yo creo que lo que hiciste mal es definir los máximos y mínimos, o no se ja. Tengo un ejercicio similar, pero mas sencillo, no se mucho de Fortran pero tal vez te pueda servir.

            program ejercicio2

            implicit none

            real(8) ::a,b


            write(*,*)"ingrese dos numeros reales"
            read(*,*)a,b

            if(a==b)then
            write(*,*)a, "es igual que", b
            else
            if(a>b)then
            write(*,*)a, "es mayor que", b
            else
            write(*,*)a, "es menor que", b
            endif
            endif

            end program
            Última edición por manadark; 21/03/2010, 15:21:12.

            Comentario


            • #7
              Re: Practica de fortran

              Muchas gracias a todos amigos, ya resolví el problema, aunque no sé nisiquiera por qué funciona xD. El resultado es el siguiente:

              PROGRAM MAYOR MENOR
              IMPLICIT NONE
              c Escribe un programa que lea N numeros e imprima cual es el mayor y cual el menor

              INTEGER N
              REAL*8 I,AMAX,AMIN,X

              WRITE(*,*) 'SACAREMOS EL MAXIMO Y EL MINIMO DE CUANTOS NUMEROS'
              READ(*,*)N

              WRITE(6,*) "INTRODUCE DICHOS NUMEROS" !si lo escribo de esta manera tan
              READ (5,*) AMAX !solo me da la orden una vez
              AMIN=AMAX !aquí los igualo para tenerlos definidos

              DO I=1,N-1
              READ (5,*) X

              IF (X.GT.AMAX) THEN !en el if se separan al tomar el valor del X
              AMAX=X !correspondiente
              ELSE IF (X.LT.AMIN) THEN
              AMIN=X
              ENDIF

              ENDDO
              WRITE (6,*) "MAXIMO",AMAX
              WRITE (6,*) "MINIMO",AMIN
              STOP
              END

              Bueno y eso es todo. Cualquier duda sobre este tema, me encantaría discutirla con ustedes.

              Por ejemplo, ahora tengo otro problema. En otra práctica me piden hacer un programa que de como salida la tabla x, f(x) para el intervalo . Mi problema es hacer un intervalo desde un número negativo, no da errores pero el do al parecer no funciona bien.

              Gracias de antemano.

              Comentario


              • #8
                Re: Practica de fortran

                Define un par de variables XMIN y XMAX y les asignas los extremos del intervalo. Define una de dos: el número de subintervalos N o el incremento DELTAX. En general el espaciamiento de valores en una tabla no será necesariamente números enteros. Si definiste el número de subintervalos, DELTAX = (XMAX - XMIN) / N; si definiste DELTAX, el número de subintervalos será N = INT((XMAX - XMIN) / DELTAX). Ahora puedes generar tu tabla con un bucle DO I=1,N+1. Cada valor de X(I) lo calculas como X(I) = XMIN + (I - 1) * DELTAX; en su defecto puedes inicializar una variable XI = XMIN y le sumas DELTAX al final del bucle.

                Saludos,

                Al
                Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

                Comentario

                Contenido relacionado

                Colapsar

                Trabajando...
                X