100 likes | 357 Views
Ödevlerin en iyi ÇÖZÜMLERİ. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN. Ödev: OBEB (Ortak Bölenlerin En Büyüğü) ve EKOK (En Küçük Ortak Kat) algoritmalarını yazınız. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN.
E N D
Ödevlerinen iyiÇÖZÜMLERİ ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Ödev: OBEB (Ortak Bölenlerin En Büyüğü) ve EKOK (En Küçük Ortak Kat) algoritmalarını yazınız. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
EBOB hesabında Öklit yöntemi Büyük sayıyı bul. Büyüğü küçüğe böl. Kalanını al. Kalan diğer sayı olsun. Büyük sayıyı bul. Büyüğü küçüğe böl. Kalanını al. Kalan diğer sayı olsun. Kalan sıfır olana kadar devam et. Son bölen ebob olur. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Örnek 1 program obeb; uses wincrt; var i, j : integer; begin write ('iki sayı gir : '); read (i, j); while i <> j do if i > j then i := i - j else j := j - i; writeln ('OBEB : ',(i)); end. i=36, j=48 i<>j oluncaya kadar (36<>48) 36>48 değil, o zaman j=48-36=12 i=36, j=12 36<>12 36>12 öyleyse i=36-12=24 i=24, j=12 24>12 öyleyse i=24-12=12 i=12, j=12 i=j mi, EVET O halde obeb=i Başla İki sayı al (i,j) İ, j’ye eşit oluncaya kadar devam Eğer i>j, i=i-j; yoksa j=j-i Devam Son çıkan i ebob olur. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Örnek 2 program obeb2; uses wincrt; var x, y: integer; function obeb(a, b: integer): integer; begin if b = 0 then obeb := a else obeb := obeb(b, a mod b end; begin write ('OBEBi alınacak iki sayı giriniz : '); read(x, y); write('OBEB : ',obeb(x, y)) end. Burada bölme sonucu kalanı gösteren mod komutu kullanılarak a,b sayılarının yerini değiştiren bir function kullanılıyor. Write (obeb(x,y)) dediğimizde iş bitiyor. Örnek 2’nin açılımı >>>>> ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Örnek 2’nin açılımı Function obeb (a,b), işlemdeki obeb (b,a mod b) yani (b,a). Dikkat!..... a=192, b=72 olduğunda b=0 mi, değil O halde obeb (72,192 mod 72), yani (72,48), obeb (a,b) olduğu için a=72, b=48 b=0 mi, değil O halde obeb (48,72 mod 48), yani (48,24), obeb (a,b) olduğu için a=48, b=24 b=0 mi, değil O halde obeb (24,48 mod 24), yani (24,0), obeb (a,b) olduğu için a=24, b=0 B=0 mı? EVET. O halde obeb=a, yani obeb=24 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Örnek 3 program obeb3; uses wincrt; var m,n,r : integer; function obeb (m, n: integer): integer; begin r := m mod n; if r = 0 then obeb := n else obeb := obeb(n, r) end; begin write ('İki sayı giriniz : '); read (m,n); write (m,' ve ',n,' sayılarında Obeb : ',obeb(m,n)) end. Obeb (m,n) M=75, n=35 ise R=m mod n=75 mod 35=5 R=0 değil Obeb (n,r) yani obeb (35,5) R=m mod n=35 mod 5=0 R=0 ?, Evet. O halde obeb=n=5 Burada da function kullanılıyor ama yazımı değişik! Obeb (n,r) ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
OBEB’e başka örnekler Program obeb4; uses wincrt; var m,n:integer; function gcd(m,n:integer):integer; var prev:integer; begin while m<>0 do begin prev:=m; m:=n mod m; n:=prev; end; gcd:=n end; begin writeln ('İki sayı giriniz : '); read (m,n); write (m,' ve ',n,' sayılarında Obeb : ',gcd(m,n)); end. Program obeb5; uses wincrt; var m,n,p,ebob:integer; function gcd(m,n:integer):integer; begin if n=0 then gcd:=abs(m) else gcd:=gcd(n,m mod n) end; begin writeln ('İki sayı giriniz : '); read (m,n); write (m,' ve ',n,' sayılarında Obeb : ',gcd(m,n)); end. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
EKOK hesabı algoritma ve programı program ekok; uses wincrt; var i,k,b:integer; Begin write('Küçük sayıyı giriniz :');readln(k); write('Büyük sayıyı giriniz :');readln(b); i:=b; repeat i:=i+1; until (i mod k=0) and (i mod b=0); writeln; writeln('En küçük ortak kat :',i); repeat until keypressed; End. Küçük ve büyük sayıları al. İ=büyük sayı, İ’yi birer artırarak yükselt. i mod k =0 ve i mod b=0 oluncaya kadar arttır. Her ikisi de tam bölünüyorsa ekok odur. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN
Program obebekok; uses wincrt; var m,n:integer; ekok:real; function gcd(m,n:integer):integer; var prev: integer; begin while m<>0 do begin prev:=m; m:=n mod m; n:=prev; end; gcd:=n end; begin writeln ('İki sayı giriniz : '); read (m,n); writeln (m,' ve ',n,' sayılarında Obeb : ',gcd(m,n)); ekok:=(m/gcd(m,n))*n; write (m,' ve ',n,' sayılarında Ekok : ',ekok:8:0) end. ALGORİTMA VE PROGRAMLAMAYA GİRİŞ Prof.Dr.Mustafa ERGÜN