You are on page 1of 45

EHB-105 ALGORİTMA VE

PROGRAMLAMA

DERS-7

MATLABDA DOSYALAR

1
Şu ana kadar bir programda hesaplanan veya elde edilen
veriler RAM‟de saklanacak şekilde tanımlanmıştı. Yani,
bilgisayar kapatıldığında veya MATLAB programı sona
erdirildiğinde veriler de kaybolmaktaydı.
Oysa pek çok uygulamada elde edilen veriler daha sonra
kullanılmak üzere saklanması gerekir. Bunun için verilerin bir
dosyaya yazılması gerekmektedir.

2
DOSYA YAZDIRMA-
OKUMA
Program sonuçlarının otomatik olarak farklı bir
dosyaya yazdırılması veya bir dosyadaki bilgilerin
okunarak program içerisinde kullanılması,
programcılıkta oldukça sık başvurulan çıktı alma ve
veri girişi yöntemleridir.
Dosya yazdırma, çıktı almaya; Dosya okuma ise veri
girişine karşılık olan işlemlerdir.
Matlab’de dosya yazdırma, en basit biçimde, diary
komutuyla gerçekleştirilir. Kullanımı ise aşağıdaki
biçimdedir;

3
a=10;
diary sonuc.txt
disp('-----------------')
disp(a)
diary end
İki diary komutu arasındaki “command window” da yazdırılacak
her türlü bilgi, sonuc.txt dosyasına yazdırılır. sonuc.txt dosyası,
mevcut klasörün içinde oluşturulur,
Örnekteki, sonuc.txt dosyası yerine başka dosya tür ve isimleri
kullanılabilir.
Yazdırılacak olan dosya, daha önce oluşturulmuş bir dosya ise,
çıktı dosyanın içindeki metinin altına yazdırılır.

4
Daha gelişmiş dosya yazdırma, fopen, fprintf ve fclose
fonksiyonlarının kullanımı ile gerçekleştirilir.
Bu fonksiyonlar ile dosya yazdırmada, yazdırılacak
olan metnin “command window” da gösterilmesine
gerek yoktur.
fopen, program çıktılarının yazdırılacağı dosyayı açar,
fprintf yazdırır ve fclose ise yazdırma işlemini
sonlandırır.
Örneğin, bir a kenarı programda hesaplatılmış olsun.
Bu programın a çıktısını, kenar.txt isimli bir dosyaya
yazdırmak için, aşağıdaki kodlar düşünülür;

5
Dosya açma:fopen
Fopen komutu bilgi kaydetmek için veri dosyası açar veya
oluşturur. Yazım formatı:
İfade=fopen(„dosya adı‟,‟izin‟)
Burada:
ifade-> dosya değişkeni
dosya adı->verilerin kaydedileceği dosyanın adı
izin-> dosyanın kullanım izni : r,w,.., vs.

6
Dosya kapama: fclose
Dosya yazma ve/veya okumaya açılan dosyanın MATLAB
‟den ilişkisini kesmeye (dosyayı kapamaya) yarayan
komuttur.
Kullanımı:
Sonuc=fclose(ifade)

7
a=150.0234234;
fid=fopen('kenar.txt','w');
fprintf(fid,'%s%1.4f','kenar uzunlugu=',a);
fclose(fid);

w bu dosyanın üzerine yazılacağını gösterir.


(a “mevcut metnin altına yaz” demektir)

8
Dosya yazdırma ve okumada kullanılan izinler
Tip Açıklama
‘r’ Dosyayı sadece okumaya açar. (Yazma işlemine izin vermez)
‘r+’ Dosyayı yazmaya ve okumaya açar.
‘w’ Var olan bir veri dosyası içindeki bilgileri siler, dosya yoksa
oluşturur ve dosyayı yazmaya açar.
‘w+’ Var olan bir veri dosyası içindeki bilgileri siler, dosya yoksa
oluşturur ve dosyayı okumaya ve yazmaya açar.
‘a’ Var olan bir veri dosyasını yazmak için açar, dosya yoksa
oluşturur ve girilecek bilgileri dosya sonuna ekler.

9
Dosyaya bilgilerin kaydedilmesi: fprintf
Verilerin ekrana yazılmasında kullanılan fprintf fonksiyonu,
aynı zamanda fopenkomutuyla açılmış dosyaya yazmaktada
kullanılır.
Kullanımı:
fprintf(ifade=„%format%format%format….%format‟,değişken
1, değişken2,değişken3, …….)

10
Aşağıda verilen M dizisini (vektörünü)bir dosyaya kaydeden
bir MATLAB programı yazınız
M=[1 2 3 4];
a=fopen('veri.dat','w');
For i=1:4
fprintf(a,'%d\n',M(i));
end
fclose(a);

11
Aşağıda verilen matrisi “veri.dat” dosyasına kaydeden bir
MATLAB programı yazınız.
A=[1 5 11 ; 2 4 5];
a=fopen('veri.dat','w+');
for i=1:2
for j=1:3
fprintf(a,'%d ',A(i,j));
End
End
fclose(a);

12
Örnek: a=[3.12356 4.12456 1;5.8463 6.45111 2;4 5 6] biçiminde
verilen bir a matrisini, elemanları virgülden sonra 4 hane
olacak biçimde, mat.out dosyasına yazdıran bir program
yazınız.

a=[3.12356 4.12456 1;5.8463 6.45111 2;4 5 6]


fid = fopen('mat.out','w');
fprintf(fid,'%1.4f%10.4f%10.4f\n',a);
fclose(fid);

13
Örnek: kenar=1500.123 m ve aciklik=103.3367 grad olan
değişkenleri, sonuc.out dosyasına alt alta yazdırınız.
kenar=1500.123;
aciklik=103.3367;
fid=fopen('sonuc.out','w')
fprintf(fid,'%s%1.3f%s\r\n','kenar=',kenar,' m');
fprintf(fid,'%s%1.4f%s','aciklik=',aciklik,' grad');
fclose(fid)

14
Matlab’de dosyaların içindeki metnin okunması için textread fonksiyonu
bulunmaktadır.
Örneğin, aşağıda koordinat.txt dosyasındaki verilerin okunması istensin:
P1 1000.1234 1300.23423
P2 1300.5673 1450.98563
P3 2000.1500 2000.11000
P4 3500.3100 1000.12000
Nokta isimleri x koordinatları y koordinatları
Bunun için,
[nokta,x,y]=textread('koordinat.txt','%s%f%f')
fonksiyonu kullanılır. nokta, nokta isimlerini içeren bir hücre dizisi; x, x
koordinat vektörü ve y, y koordinat vektörü olarak atanır.

15
Örnek: Koordinat dosyası, aşağıdaki gibi olan bir koordinat.txt
dosyasından, nokta isimlerini, x ve y koordinatlarını textread
fonksiyonu kullanarak uygun değişkenlere atayınız.
Nirengi koordinatları
NN x(m) y(m)
P1 1000.1234 1300.23423
P2 1300.5673 1450.98563
P3 2000.1500 2000.11000
P4 3500.3100 1000.12000
[nokta,x,y]=textread('koordinat.txt','%s%f%f','headerlines',2)
'headerlines‘ komutu ve ardından gelen sayı, dosyanın
başlangıcından itibaren kaç tane satırın dikkate alınmayacağını
gösterir.
koordinat.txt dosyasında ilk iki satır alınmadan nokta isimleri, x ve y
koordinatları okunmuştur.

16
Veri dosyalarının okunması amacı ile fscanf fonksiyonu
kullanılabilir.
[dizi,sayi]=fscanf(ifade,’format’,alan) şeklinde kullanımı
vardır.
Bir önceki uygulamada mat.out dosyasına yazdırdığımız
matrisi tekrar Matlab ortamında okutalım.
fid=fopen('mat.out','r+');
[dizi,sayi]=fscanf(fid,'%f',inf)
fid=fopen('mat.out','r+');
[dizi,sayi]=fscanf(fid,'%f',[3 3])

17
UYGULAMA
Aşağıda bir kenara ait 10 ölçü kenar.txt dosyasında verilmektedir. Bu ölçülerin ortalamasını, her bir ölçünün
ortalamadan farkını (düzeltmeleri), ölçülerin standart sapmasını hesaplayan,|düzeltme|>3*standart sapma olan
ölçüleri ölçü kümesinden silen ve geriye kalan ölçüleri temizolcu.txt dosyasına yazdıran matlab kodunu yazınız.
Olculer
15.538
16.834
12.741
15.862
15.319
13.692
14.566
15.343
18.578
17.769
13.650
Duzeltme=ortalama – ölçü
Standart sapma=([duzeltme2]/(ölçü sayisi-1))(1/2)

18
clear
clc
a=textread('kenar.txt','%f','headerlines',3); %textread fonksiyonu ile veriler okutuluyor.
orta=mean(a); %mean fonksiyonu ile ölçülerin ortalamasi bulunuyor.
for i=1:length(a) % for döngüsüyle duzeltmelerin hesaplanmasi yapiliyor.
duzeltme(i,1)=orta-a(i);
end
stan=sqrt(duzeltme'*duzeltme/(length(a)-1)); %ölçülerin standart sapmasi hesaplaniyor.
hata=0;
artim=0;
for i=1:length(duzeltme) %duzeltmesi standart sapmasindan büyük ölçüler bulunuyor.
if abs(duzeltme(i))>3*stan
artim=artim+1;
hata(artim)=i;
end
end
hata=sort(hata)
for i=1:artim % hatali olcu siliniyor.
a(hata(artim+1-i),:)=[];
end
veri=fopen('temizolcu.txt','w+') % temiz olculer yazdiriliyor.
fprintf(veri,'%1.3f\n',a)

19
fclose(veri)
matris.txt dosyasında kayıtlı olan matris veya vektörün negatif ve pozitif elemanlarının sayısını veren matlab
kodunu yazınız.
clear
clc
veri=fopen('matris.txt','r+');
a=fscanf(veri,'%f',[3 3]);
fclose(veri);
[nsatir nsutun]=size(a);
pozitif=0;
negatif=0;
for i=1:nsatir
for j=1:nsutun
if a(i,j)<0
negatif=negatif+1;
else
pozitif=pozitif+1;
end
end

20
end
Fahrenhayt ve santigrat değerleri arasında istenilen bir aralıkta dönüşüm yapan ve
sonuçları .txt dosyasına yazdıran matlab kodunu yazınız.
fahrenhayt=1.8*santigrat+32;
Tbasla=input('Ilk sicaklik degerinin yaziniz:');
Tson=input('Son sicaklik degerinin yaziniz:');
nTemp=input('Kac deger istediginizi giriniz:');
santigrat=linspace(Tbasla,Tson,nTemp);
fahrenhayt=1.8*santigrat+32;
fid=fopen('temp.txt','w+');
fprintf(fid,'sicaklik donusum tablosu\n');
fprintf(fid,'--------------------------\n');
fprintf(fid,' santigrat fahrenhayt\n');
for k=1:nTemp
fprintf(fid, '%f %f \n', santigrat(k), fahrenhayt(k) );
end

21
fclose(fid);
Dış Ortam Veri İşlemi
Bir Excel (.xls) veri dosyası veya .txt ya da .dat dosyası Matlab
ortamından okunabilir ve üzerinde Matlab işlemleri uygulanabilir.
Benzer olarak bir Matlab program çıkışı da .xls olarak
kaydedilebilir.
- Excel: degisken =xlsread(‘xxx.xls’)
- x=degisken(:,1); %1. sütun
- y=degisken(:,2); %2. sütun
- .txt veya .dat : load xxx.txt
- x=xxx(:,1); %1. sütun
- y=xxx(:,2); %2. sütun

22
Excel’ den veri okutmak amacıyla xlsread fonksiyonu kullanılır.
num = xlsread(‘filename’, sheet, 'range')
A = xlsread('deneme.xlsx', 1, 'C4:D7')

23
Bir sınıftaki “m” tane öğrencinin, “n” tane dersinin notları
mxn boyutlu A matrisine klavyeden girilecektir. Her ders için
sınıf not ortalaması hesaplanacaktır. Eğer öğrencinin o
dersten aldığı not, ortalamadan büyük veya eşit ise
öğrencinin o dersten geçtiği, aksi halde dersten kaldığı
ekrana basılacaktır. Örneğin; Ekranda, “3. Öğrenci 5. Dersten
GEÇTİ.” yazacaktır. Sınıftaki tüm öğrencilerin, her ders için
ders sırasına göre geçme veya kalma durumları ekrana
basılacaktır. Bu problemin çözümü için gerekli olan
algoritmanın akış diyagramını çiziniz.

24
clear all;
M=input('Ders sayısını giriniz:');
N=input('Ogrenci sayisini giriniz:');
for i=1:M
for j=1:N
fprintf('%d. dersin %d.ogrencisinin notunu giriniz:',i,j);
A(i,j)=input('');
end
end
a)
for i=1:M
toplam=0;
for j=1:N
toplam=toplam+A(i,j);
end
ort(i)=toplam/N;
fprintf('%d. dersin sınıf ortalaması %f dir.\n',i,ort(i));

25
end
b)
for i=1:M
en_dusuk=A(i,1);
en_yuksek=A(i,1);
ed_ogrencino=1;
ey_ogrencino=1;
for j=1:N
if A(i,j)<en_dusuk
en_dusuk=A(i,j);
ed_ogrencino=j;
end
if A(i,j)>en_yuksek
en_yuksek=A(i,j);
ey_ogrencino=j;
end
end
fprintf('%d. dersten, en düşük not %f dir. Bu notu %d nolu ogrenci almistir.\n',i,en_dusuk,ed_ogrencino);
fprintf('%d. dersten, en yuksek not %f dir. Bu notu %d nolu ogrenci almistir.\n',i,en_yuksek,ey_ogrencino);
end

26
c)
for i=1:M
for p=1:(N-1)
for r=1:(N-1)
if A(i,r)>A(i,r+1)
temp=A(i,r);
A(i,r)=A(i,r+1);
A(i,r+1)=temp;
end
end
end
end
A
fid=fopen('notlar.txt','wt');
fprintf(fid,'Derslere gore ogrenci notları \n');
fprintf(fid,'------------------------------- \n \n');
for i=1:M
fprintf(fid,'%d. ders ',i);
for j=1:N
fprintf(fid,'%f ',A(i,j));
end
fprintf(fid,'\n');
end

27
fclose(fid)
Aşağıda verilen veri.dat dosyasından okuma yapıp I. sütunu
x, II. sütunu y ve III. sütunu z değişkenine atayan bir MATLAB
Programı yazınız.
4 5 2
3 3.3 4
𝐴=
2.1 10 6
5 8 8

28
ÇÖZÜM:
clear all;clc
a=fopen('veri.dat','r');
b=fscanf(a,'%g',[3 inf]);
x=b(1,:)
y=b(2,:)
z=b(3,:)
fclose(a)

29
Aşağıda verilen ve graf.dat dosyasına kayıtlı bulunan X,Y1 ve
Y2 datalarını okutup aynı grafik penceresinde çizen bir
MATLAB programı yazınız.

X Y1 Y2

2 7.1 7.93

4 8.4 19.0

6 11.2 12.0

8 15.6 13.3

10 17.3 11.0

30
ÇÖZÜM:
a=fopen('graf.dat','r');
z=fscanf(a,'%g',[3 inf]);
x=z(:,1);y1=z(:,2);y2=z(:,3);
plot(x,y1,x,y2)

31
Aşağıda verilen ve matris.dat dosyasında kayıtlı bulunan A
matrisini okutup, 3.sutununu 5 ile çarpıp yine bir B matrisine
atayan bir MATLAB programı yazınız.
3 4 2
𝐴 = −1 3 6
2 5 8

32
ÇÖZÜM:
fid=fopen('matris.dat','r');
A=fscanf(fid,'%g',[3 inf])
fclose(fid);
for i=1:3
for j=1:3
if j==3
B(i,j)=5*A(i,j);
else
B(i,j)=A(i,j);
end
end
end
B

33
Ana programda, x değişkeni 1’den başlayarak 2 şer artımla 55’e kadar değerler almaktadır. Bu
değerlere karşılık
𝑦 = 𝑥 2 − 𝑥 3 + 2𝑥
fonksiyonu bir alt fonksiyonda hesaplayıp ana programda aşağıda verilen formatta sonuc.txt
dosyasına yazdıran bir MATLAB programı yazınız.
ÇÖZÜM:
Ana Program:
x=1:2:55;
y=fonk(x);
a=fopen('sonuc.txt','w');
fprintf(a,'x\ty\n')
for i=1:length(x)
fprintf(a,'%g\t%g\n',x(i),y(i));
end
fclose(a);
Alt program:
function y=fonk(x)
y=x.^2-sqrt(x.^3+2*x);

34
Aşağıda verilen matrisi, veri.dat dosyasının ilk satırında her
bir sütunun üzerine sütunun toplam değerini yazarak
kaydeden bir MATLAB Programı yazınız.

4 5 2
3 3.3 4
𝐴=
2.1 10 6
5 8 8

35
ÇÖZÜM:
A=[4 5 2;3 3.3 4;2.1 10 6;5 8 8]
t1=0;t2=0;t3=0;
for i=1:4
for j=1:3
if j==1
t1=t1+A(i,j);
elseif j==2
t2=t2+A(i,j);
elseif j==3
t3=t3+A(i,j);
end
end
end
%matrisin kaydedilmesi
f=fopen('veri.dat','w')
fprintf(f,'%g %g %g\n',t1,t2,t3)
for i=1:4
for j=1:3
fprintf(f,'%g ',A(i,j));
end
fprintf(f,'\n');
end

36
Aşağıdaki tabloda verilen veriler bir deney sisteminden elde
edilmiş ve veriler.dat isminde bir dosyaya kaydedilmiştir. Bu
verileri dosyadan okuyarak, aşağıda verilen denklemi
hesaplayıp sonuc.txt dosyasına verilen formatta yazan bir
MATLAB programı yazınız.
𝑓 𝑥, 𝑦, 𝑧 = 𝑥 3 − 2 ∗ 𝑦 + 𝑧

x y z f
12 55 210 ..
15 65 220 ..
16 75 230 ..
21 85 250 ..

37
CEVAP:
a=fopen('veriler.dat','r')
b=fscanf(a,'%g',[3 inf]);
fclose(a)
x=b(:,1);y=b(:,2);z=b(:,3)
f=x.^3-2*sqrt(y)+z;
fid=fopen('sonuc.txt','w');
fprintf(fid,'x y z f\n');
for i=1:length(x)
fprintf(fid,'%g %g %g
%g\n',x(i),y(i),z(i),f(i));
end
fclose(fid)

38
Veri.dat isimli dosyada bulunan 4 8 7 12 23 45 50 25 değerleri
ana programda okutulduktan; 𝑦 = 𝑥 3 + 2 ∗ 𝑥 2 −
4 fonksiyonun değerleri hesaplanıp sonuc.txt dosyasına
kaydedecek bir MATLAB programı yazınız.
CEVAP:
a=fopen('veri.dat','r');
x=fscanf(a,'%d',inf)
fclose(a)
y=x.^3+2*x.^2-4;
b=fopen('sonuc.txt','w');
fprintf(b,'%g ',y)
fclose(b)

39
Aşağıda verilen A matrisindeki negatif değerli elemanları bir
vektöre atayıp bu vektörü bir dosyaya kaydeden bir MATLAB
programı yazınız.
−1 3 −10 3
𝐴 = 4 −2 20 −13
−5 12 −3 11

40
k=1;
A=[-1 3 -10 3;4 -2 20 -13;-5 12 -3
11]
a=fopen('negatif.dat','w')
for i=1:3
for j=1:4
if A(i,j)<0
y(k)=A(i,j);
fprintf(a,'%d ',y(k));
k=k+1;
end
end
end
fclose(a)

41
Aşağıda tanımlanan fonksiyonu hesaplayıp aşağıda verilen şekilde
soru.dat adlı dosyaya yazdıran bir MATLAB programı yazınız.
3 ≤ 𝑥 ≤ 5 → 𝑓 𝑥 = 𝑒 𝑥−2
6 ≤ 𝑥 ≤ 8 → 𝑓 𝑥 = 𝑒 𝑥+2
x f(x)
3 …
4 …
5 …
6 …
7 …
8 …

42
a=fopen('soru.dat','w');
fprintf(a,'x f(x)\n');
fprintf(a,'--------------\n');
for x=3:8
if x>=3 & x<=5
f=exp(x-2);
else
f=exp(x+2);
end
fprintf(a,'%g %g\n',x,f);
end
fclose(a);

43
Aşağıda verilen A matrisini bir dosyaya yazdıran bir MATLAB
programı yazınız.
3 1 1 .. 1
1 3 1 .. 1
𝐴 = 1 1 3 .. 1
.. .. .. .. ..
1 1 1 . . 3 (10𝑥10)

44
a=fopen('matris.dat','w');
for i=1:10
for j=1:10
if i==j
fprintf(a,'3 ');
else
fprintf(a,'1 ');
end
end
fprintf(a,'\n');
end

45

You might also like