IT şi electronică > Software
limbaje de programare: CAZ CONCRET. 1.
florin_try:
Iata si versiiunea fortran 90.
Am folosit un compilator vechi si free. ( http://gcc.gnu.org/fortran/ ) . Intel da o luna ifort-ul free.
Ar trebui sa fie usor de urmarit diferenta de sintaxa intre acest limbaj "verbose" si cele C-like.
trapeze_int putea fi o functie dar am pus-o ca subrutine pentru a arata diferenta intre functii si subrutine in fortran.
In C++ o subrutina ar fi o functie void.
Poate cineva pentru comparatie sa ne arate cum ar fi acest cod in defunctul fortran 77? Sintaxa lui fortran77 e total diferita de fortran90.
De fapt fortranul a murit si supravietuit in acelasi timp cu tranzitia de la fortran 77 catre fortran 90.
-------------------------------------------
module operatii
implicit none;
public :: f;
public :: trapeze_int;
contains
real(8 ) function f(x)
real(8 ) x
f = x*x*x
end function f
subroutine trapeze_int(a,b,n, int)
real(8 ) , intent(IN) :: a,b
integer, intent(IN) :: n
real(8 ) , intent(OUT) :: int
real(8 ) s0,step,x
integer i;
step = (b-a)/dble(n);
s0 = (f(a)+f(b))*0.5d0;
x=a;
do i=1,n-1
x=x+step;
s0=s0 + f(x)
enddo
int = s0*step
end subroutine trapeze_int
end module operatii
program main
use operatii, only : trapeze_int
implicit none
real(8 ) integrala
call trapeze_int(2.0d0,4.0d0,1000, integrala)
print*,'int = ',integrala;
end program main;
florin_try:
Iata-l si in windows-powershell. Windows powershelul e un limbaj de scriptare ce poate fi downlaodad de la microsoft
( http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx )
Recomandabil e powershell 2. Cine are windows si nu are powershell are nevoie de un baross ca sa dea cu el in laptop/computer.
Limbajul a fost privit cu entuziasm, e foarte apropiat de c-shelul linuxului (cine a folosit linux stie despre ce e vorba)
Aici insa am avut unele probleme, desi nu vad nici o eroare in script obtin resultate usor diferite de cele aterioare
La 100 pasi integrare obtin: 59.3612000000001
La 1000 pasi integrare obtin: 59.9360119999926
Aparent am mincat un pas????
Evident windows-poweshell nu e pentru acest gen de aplicatie.... Dar e nostim.
Apelul functiei de integrare e cu albastru. Daca incercati trapeze_int(2,4,100) nu va merge desi intuitiv e de neinteles de ce nu merge (e totusi produs microsoft .... nu se dezminte).
-------------------------------
function f ([double]$x){ $x*$x*$x}
function trapez_int ([double]$a , [double]$b , [double]$n) {
$step = ($b-$a)/$n
$s0 = (f($a) + f($b))/2
$x=$a
for ($i=1;$i -le $n-1;$i++){
$x += $step
$s0 += f($x)
}
$step*$s0
}
trapez_int 2 4 1000
florin_try:
In postez si in c-chell (linux/unix) in speranta ca alti cititori vor posta in alte limbaje sau vor gasi util ce e aici.
In windows c-shelul se poate poate instala cu cyg-win ( http://www.cygwin.com/ )
Pentru 100 pasi integrare a durat cam 2 minute iar la 1000 pasi integrare a durat ... mult mai mult.
Asta e diferenta intre script si program compilat.
Bineinteles c-shelul nu e pentru acest gen de aplicatie, dar modul cum l-am scris poate ajuta pe cineva care are de scris un script in linux care sa repete niste operatiuni.
------
#!/bin/bash
PREC=16 # global bariable it is the precition
function f() {
a=`echo "scale=$PREC; $1 * $1 * $1"|bc -l` #f(x) = x*x*x
echo $a
}
function trapez_int() {
step=`echo "scale=$PREC; ($2 - $1) /$3"|bc -l` # step = (b-a)/n
f2=`f $2` # f2 = f(b)
f1=`f $1` # f1 = f(a)
s0=`echo "scale=$PREC; ($f2 + $f1) /2"|bc -l` # s0=(f(b)+f(a))/2
x=$1 # x=a
for i in $(seq 1 $(($3-1)))
do
x=`echo "$x + $step"|bc -l` # x = x + step
fx=`f $x` # fx = f(x)
s0=`echo "$s0 + $fx"|bc -l` # s0 = s0 + f(x)
done
echo `echo "scale=$PREC; $s0 * $step"|bc -l`
}
a=`trapez_int 2. 4. 1000`
echo $a
# 100 = 60.0012000000000000
# 1000 60.0000120000000000
Adi:
Wow, felicitari! Chiar e foarte util sa fie rezolvat un exemplu concret in mai multe limbaje de programare. Tu le-ai programat in toate sau l-ai gasit facut undeva? In orice caz, felicitari pentru idee si pentru realizare!
florin_try:
Pai programare e jobul meu.
Cineva a mentionat bine ca e diferenta intre programator si informatician.
Eu intru in prima categorie, dar ma descurc.
Am scris efectiv micul cod in limbajele de mai sus (am insa experienta anterioara in fiecare din ele) si am indicat si ce mediu am folosit si de unde l-am downloadat si ce rezultat am obtinut.
Incepuse la alt thread o discutie de principiu despre limbaje de programare insa cred ca mai ilustrativ ar fi un caz simplu tradus in diferse limbaje, cu mentiunea ca adevarata diferenta intre limbaje se simte abia la programele complexe.
Hopefully unii cititori vor posta si in alte limbaje.
Navigare
[#] Pagina următoare
Du-te la versiunea completă