| Bilgisayar, bilgilerin depolandığı ve bu bilgiler üzerinde matematiksel işlemleri insanın yapabileceği hızın çok üzerinde yapabildiği bir makinedir. Bilgisayara, bir problemin çözüm işlemlerini hangi sırada ve nasıl yapacağını belirten komutlar veya ifadeler zincirine ise bilgisayar programı denir. Bir programın tasarlanması, yazılması ve test verileri ile çalıştırılmasına programlama denir. Program yazan kişilere programcı denir. Bilgisayarlar insanların düşünce yapısında düşünemez, kavrama kabiliyetine sahip değildirler. Sadece bilgisayara verilen bilgiler programcı tarafından yazılan program tarafından değerlendirilerek bir sonuca ulaşılmasını sağlar. |

Şekil 1.1 Tipik bir bilgisayarın blok diyagramı.
Bilgisayar bellekleri milyonlarca anahtardan oluşur. Bu anahtarlar açık (0-OFF) veya kapalı (1-ON) konumlardan birinde bulunurlar. Bu anahtarların (0 veya 1) herbirine bit diyebiliriz.
| 1 bit 2 li sayı tabanına göre 0 veya 1 değerlerinden biridir. Bu
bitler birleştirilerek byte lar oluşur. İkili sayı sisteminde (genel olarak) en küçük digit grubu 8 bit ten oluşur ve 8 bit 1 byte tır. Bitlerin oluşturduğu byte tan daha büyük gruplara word denir. |
On tabanına ve ikili sayı tabanına göre sayıların karşılaştırılması:
(122)10=2*100+2*101+1*102=2*1+2*10+1*100=(1111010)2
Bilgisayarlar on tabanına göre sayıları kabul eder ve ikili sayı sistemine
bu sayıları çevirirler ve daha sonra
işlem yaptıktan sonra tekrar
onlu sayı sistemine dönüşüm yapılır. Bilgisayar bellekleri, karakter, tamsayı veya gerçel sayıları kayıtlarında tutarlar.
| Pozitif ve negatif tam sayılar bellekte 1, 2, 4 veya 8 byte kadar yer işgal ederler. n bit sayısı olmak üzere, Enküçük tamsayı =-2n-1 Enbüyük tamsayı =2n-1-1 4 byte lık (n=32 bit) tamsayı için, enküçük tamsayı -2.147.483.648 ve enbüyük tamsayı 2.147.483.647 dir. |
Tamsayıların yanlış kullanımı bilgisayarın veya programın hatalı bir şekilde
durmasına neden olur
(overflow error).
Tamsayıların kullanılamadığı yerlerde yani 0.25, 1.4 veya -3.2 gibi sayılar
için gerçel sayılar
(floating-point data type) tanımlanır.
| Pozitif ve negatif gerçel değerler bellekte 4 byte (32 bit) yer işgal ederler. |
4 byte lık gerçel sayılar (32 bit) taban ve kuvvetinden/üstel
terimden (mantissa and exponent) oluşur.
32 bit lik bir gerçel
sayıda 24 bit (3 byte) taban (mantissa) ve 8 bit (1 byte) üstel kısıma
ayrılır.
4 byte lık gerçel sayı = 3 byte lık taban x 1 byte lık üstel terim =m x 2e
Gerçel sayılar ikili sayı sistemine çevrilirken veya tersi
durumunda yuvarlama hataları olmaktadır
(Round off error). Örneğin 1.99999
bazen 2.00000 olarak karşımıza çıkabilir.
| 1 karakter bellekte 1 byte yer işgal eder. Karakterler şunlardır: A dan Z ye, a dan z ye, 0 dan 9 a, ",(){}[]!~@#%$%^&*€ çöşğüı |
Karakterler ASCII (American standard Code for Information Interchange) veya EBCDIC (IBM) standartlarına göre sınıflandırılır. Japon ve Çin dillerinde 4000 civarında karakter vardır.
256 değişik değer 256 byte değerini oluşturur. Her karakter Unicode da, bellekte 2 byte yer işgal eder. Bu da, (2562)=65536 olası karakter kodunun yazılmasını sağlar.
Sayıların duyarlılığı, alt ve üstel kısımlardaki değerlerin alabileceği
bit sayısına bağlıdır. İlk bilgisayarlar makine dilinde programlanıyordu, yani
işlemcilerin doğrudan programlanması yapılıyordu. Bu işlem çok yavaş,
hataya açık ve hazırlanan programın başka makinaya aktarılması açısından
çok zordu.
Yüksek seviyeli diller 1954 yılından itibaren görülmeye başlandı.
Makine dili (Assembly language) yerine, bu yüksek seviyeli diller
kullanılmaya başlandı. FORTRAN (FORmula TRANslator) yüksek seviyeli dillerden
biridir hatta ilkidir. Yüksek dillere örnek olarak Ada, Basic, C,
COBOL, Fortran ve Pascal örnek verilebilir.
| Orijinal FORTRAN I programlama dili ve derleyicisi 1954 ile 1957 yılları arasında
geliştirilmiştir. ilk başlarda askeri amaçlar için (atış hareketlerinde hedefin belirlenmesi) böyle bir programın yazılması düşünülmüştür. Daha sonra kullanımının kolaylığından dolayı popüler hale gelmiştir. 1957 yılındaki yeni sürüme FORTRAN II adı verildi. 1962 yılında ise yeni eklemelerle FORTRAN IV olarak adlandırılımıştır. 1966 yılında ise yeni düzenleme ve standartlarla (alt programlar) FORTRAN 66 ismiyle piyasaya sürüldü. 1977 yılında FORTRAN programlama diline çeşitli standartlar getirilmiştir. Yani bazı deyimler standart kabul edilmiş ve firmalar bu standartların üzerinde eklemeler veya geliştirmeler yapmışlardır. Daha sonra piyasaya çıkan Fortran derleyicilerinde sadece baş harf büyük yazılarak diğerleri küçük yazılmıştır. Fortran 90, Fortran 95, Visual Fortran, Digital Fortran v6.0 gibir kod yorumlayıcıları 1990 yılından sonra geliştirilmişlerdir. Yeni Fortran sürümleri daima geride kalan sürümlerde yazılmış programları desteklemekte ve yapısal bir programlama dili haline gelmiştir. |
Tamsayı - Integer
INTEGER*1 A A değişkeni/sabiti bellekte 1 byte lık yer işgal eder
-128 <= A <= 127 değerlerini alır. Aşağıdaki şekil 1 byte lık integer
tanımını göstermektedir.
Şekil 1.2 Tamsayı gösterimi.
INTEGER*2 A A değişkeni/sabiti bellekte 2 byte lık yer işgal eder -32768 <= A <= 32767 değerlerini alır. Aşağıdaki şekil 2 byte lık integer tanımını göstermektedir.
Şekil 1.3 Tamsayı gösterimi.
INTEGER*4 A A değişkeni/sabiti bellekte 1 byte lık yer işgal eder
-2,147,483,648 <= A <= 2,147,483,647 değerlerini alır. Aşağıdaki şekil
4 byte lık integer tanımını göstermektedir.
Şekil 1.4 Tamsayı gösterimi.
Şekil 1.9 FORTRAN I de yazılmış ikinci dereceden bir polinomun köklerinin bulunması.
C IKINCI DERECEDEN BIR POLINOMUN KOKLERININ BULUNMASI
c FORTRAN I
READ 100,A,B,C
100 FORMAT(3F12.4)
DISCR = B**2-4*A*C
IF (DISCR) 10,20,30
10 X1=(-B)/2.*A
X2=SQRTF(ABSF(DISCR))/2.*A
PRINT 110,X1,X2
110 FORMAT(5H X = ,F12.3,4H +i ,F12.3)
PRINT 120,X1,X2
120 FORMAT(5H X = ,F12.3,4H -i ,F12.3)
GOTO 40
20 X1=(-B)/2.*A
PRINT 130,X1
130 FORMAT(11H X1 = X2 = ,F12.3)
GOTO 40
30 X1=((-B)+SQRTF(ABSF(DISCR)))/(2.*A)
X2=((-B)-SQRTF(ABSF(DISCR)))/(2.*A)
PRINT 140,X1
140 FORMAT(6H X1 = ,F12.3)
PRINT 150,X2
150 FORMAT(6H X2 = ,F12.3)
40 CONTINUE
STOP 25252
Şekil 1.10 FORTRAN 77 de yazılmış ikinci dereceden bir polinomun köklerinin bulunması.
PROGRAM QUAD4
C
C Bu program asagidaki formdaki gibi
C ikinci dereceden bir polinomun katsayilarini okur
C A * X**2 + B * X + C = 0,
C ve koklerini hesaplar (FORTRAN 77 sitili).
C
C ikinci dereceden polinomin katsayilarinin girilmesi
C
WRITE (*,*) 'A, B ve C katsayilarini giriniz: '
READ (*,*) A, B, C
C
C katsayilarin girildigi ekrana yansitilir
C
WRITE (*,100) 'Katsayilar : ', A, B, C
100 FORMAT (1X,A,3F10.4)
C
C diskirminantin kontrol edilmesi ve koklerin hesaplanmasi.
C
DISCR = B**2 - 4*A*C
IF ( DISCR .LT. 0) THEN
WRITE (*,*) ' polinom sanal koklere sahiptir :'
WRITE (*,*) ' X = ', -B/2*A, ' +i ', SQRT(ABS(DISCR))/2*A
WRITE (*,*) ' X = ', -B/2*A, ' -i ', SQRT(ABS(DISCR))/2*A
ELSE IF ( (B**2 - 4.*A*C) .EQ. 0) THEN
WRITE (*,*) ' polinomum gercel kokleri aynidir :'
WRITE (*,*) ' X = ', -B/2*A
ELSE
WRITE (*,*) ' polinomun iki farkli koku vardir:'
WRITE (*,*) ' X = ', (-B + SQRT(ABS(DISCR)))/2*A
WRITE (*,*) ' X = ', (-B - SQRT(ABS(DISCR)))/2*A
END IF
C
END
Şekil 1.11 Fortran 90 da yazılmış ikinci dereceden bir polinomun köklerinin bulunması.
PROGRAM roots
! Amac :
! Bu program A * X**2 + B * X + C = 0 seklindeki birpolinomun
! koklerini hesaplar (Fortran 90 sitili).
!
IMPLICIT NONE
! programin kullanacagi degiskenler
REAL :: a ! X**2 terimini katsayisi
REAL :: b ! X teriminin katsayisi
REAL :: c ! polinomdaki sabit deger
REAL :: discriminant ! Diskriminant
REAL :: imag_part ! Sanal kokun sanal kismi
REAL :: real_part ! Sanal kokun gercel kismi
REAL :: x1 ! Gercel kok
REAL :: x2 ! Gercel kok
! Prompt the user for the coefficients of the equation
WRITE (*,*) 'This program solves for the roots of a quadratic '
WRITE (*,*) 'equation of the form A * X**2 + B * X + C = 0. '
WRITE (*,*) 'Enter the coefficients A, B, and C:'
READ (*,*) a, b, c
! Echo back coefficients
WRITE (*,*) 'The coefficients A, B, and C are: ', a, b, c
! Calculate discriminant
discriminant = b**2 - 4. * a * c
! Solve for the roots, depending upon the value of the discriminant
IF ( discriminant > 0. ) THEN ! there are two real roots, so...
X1 = ( -b + sqrt(discriminant) ) / ( 2. * a )
X2 = ( -b - sqrt(discriminant) ) / ( 2. * a )
WRITE (*,*) 'This equation has two real roots:'
WRITE (*,*) 'X1 = ', x1
WRITE (*,*) 'X2 = ', x2
ELSE IF ( discriminant == 0. ) THEN ! there is one repeated root, so...
x1 = ( -b ) / ( 2. * a )
WRITE (*,*) 'This equation has two identical real roots:'
WRITE (*,*) 'X1 = X2 = ', x1
ELSE ! kokler sanaldir,...
real_part = ( -b ) / ( 2. * a )
imag_part = sqrt ( abs ( discriminant ) ) / ( 2. * a )
WRITE (*,*) 'Esitligin kokleri sanaldir:'
WRITE (*,*) 'X1 = ', real_part, ' +i ', imag_part
WRITE (*,*) 'X2 = ', real_part, ' -i ', imag_part
END IF
END PROGRAM