Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [fortran77] calc fattoriale

    Salve gente.......
    volevo solo sapere se esiste in fortran77 una funzione di libreria in grado di calcolare il fattoriale di un numero x es:

    x=3
    3!=3*3*2*1

    Purtroppo ho a disposizione solo questo linguaggio e mi rendo conto che é molto datato quindi non so se esista.....

    Se qualcuno ne é a conoscenza mi faccia un fischio....
    My SO:WinXP pro/Linux Debian/Gentoo 2006.0

  2. #2
    Non uso F77 da tempi immemori e quindi sparo a casaccio basandomi su fumosi ricordi :

    x = fact(3)

    non funziona?

    P.s. : e' vero che e' un linguaggio vecchio, ma non e' mica andato in pensione. Per calcolo scientifico va ancora un sacco di moda!
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  3. #3
    Infatti devo calcolare due integrali.....

    Cmq grazie per l'aiuto, ora proveró....
    My SO:WinXP pro/Linux Debian/Gentoo 2006.0

  4. #4
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    W Fortran!!
    :quote:
    Ora vedo sul libro...
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  5. #5
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Non ho trovato una funzione predefinita.....ma il codice è semplicissimo:

    !Calcola il fattoriale di n

    !n e i sono interi
    !n_fattoriale è intero inizializzato a 1
    !..

    DO i = 1,n
    n_fattoriale = n_fattoriale*i
    END DO



    Mi sembra si possa fare anche chiamando una FUNCTION() in modo ricorsivo...se ti interessa stasera posto
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  6. #6
    Originariamente inviato da Xadoom
    Mi sembra si possa fare anche chiamando una FUNCTION() in modo ricorsivo...se ti interessa stasera posto
    A quanto ricordo io il fortran77 non supporta la ricorsione. Forse il 90...
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

  7. #7
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Potresti aver ragione....io ho studiato il 90/95!
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  8. #8
    allora io ho provato cosí:

    codice:
          FUNCTION fattoriale(n)
    
          INTEGER i
          INTEGER l,n
    
          l=n
    
          do i=1,n-1
               l=l*i
          enddo
    
          fattoriale=l
    
          RETURN
    
          END FUNCTION
    
          PROGRAM main
    
          DOUBLE PRECISION h
          INTEGER m
    
          do m=1,15
    
           h=fattoriale(m)
           print *,h
          
          enddo
    
          END
    ma come output ottengo questo:
    1.00000000000000000
    2.00000000000000000
    6.00000000000000000
    24.0000000000000000
    120.000000000000000
    720.000000000000000
    5040.00000000000000
    40320.0000000000000
    362880.000000000000
    3628800.00000000000
    39916800.0000000000
    479001600.000000000
    1932053504.00000000
    1278945280.00000000
    2004310016.00000000
    1932053504.00000000

    i numeri fino a 12 vengono calcolati correttamente ma 13,14 e 15 hanno risultati che non coincidono con quelli che dovrebbero essere.....non so cosa pensare....forse é un probleme di approssimazione???
    My SO:WinXP pro/Linux Debian/Gentoo 2006.0

  9. #9
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491

    Io...

    Il codice mi pare anche giusto, ma mi si intorcinano un pò le idee a guardarlo....troppo facile come ti ho postato prima?
    oppure così:

    codice:
    FUNCTION fattoriale(n)
    
          INTEGER i
          INTEGER l,n
    
          do i=n,1,-1
               l=l*i
          enddo
    
          fattoriale=l
    
          RETURN
    
          END FUNCTION
    ma come postato prima mi pare chiarissimo....
    Poi è inutile nel programma dichiarare una double precision se tanto la function restituisce un integer!
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  10. #10
    Il problema sta proprio nella function che restituisce un integer!

    Gli integer del fortran sono a 32bit e quindi possono rappresentare piu' o meno un numero nel range da -2 miliardi a +2 miliardi ( precisamente da -2^32 a +2^32 -1).

    Poiche' il fattoriale di numeri maggiori di 13 e' piu' grande, da li subentrano i problemi.

    La function fattoriale deve usare i DOUBLE PRECISION.
    S.O. : Ubuntu 5.04
    Lang : J2*E,PHP,tcl/tk

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.