Eski 12-04-04, 15:17 #1
frt frt çevrimdışı

bynogame
Varsayılan pascalla ilgili bir soru

bynogame
iyi günler ben pascal öğrenmeye yeni başladım ve fibonacci sayılarını (her terimin kendimden önceki iki terimin toplamı olduğu sayılar) hesaplayan bir program yazdım ama program çok yavaş çalışıyor. bunun nedenini bana açıklayabilirmisiniz? program şöyle;

program fibonacci;
uses wincrt;
type
sayi = 1..maxint;
var
t : sayi;
x : sayi;
function f(x:sayi):longint;
begin
case x of
1 : f := 1;
2 : f := 1;
3..maxint : f := f(x-1) + f(x-2);
end;
end;
begin
write('kaçinci fibonacci sayisina kadar görmek istiyorsunuz? ');
readln(t);
for x := 1 to t do
writeln(x , ' = ' , f(x));
end.


şimdiden teşekkürler...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 12-04-04, 23:28 #2
CirkinkraL CirkinkraL çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
nihayet kod bazinda bir seyler cikmaya basladi cok tesekkurler.

arkadasim ben basic ten anlamam ,ama kodunda gordugum gibi bir recursive bir algoritma kullanmissin. Ve her toplama isleme icin gidiyor ta en basta ki sayiyi cagiriyor.
mesela 10 icin 9 ve 8 ya. 9 sadece burdaki 9 icin bile 8 ve 7... diye devam ediyor.yani sayi artikkca islem sayin asiri derecede artiyor.

istersen senlen bir sey ogrenmek bazinda bu kodu biraz degistirelim sen de biraz bir sey ler ogrenmis olursun, ne dersin?
ilk basta yazdigimi anlamaya calis ,sonra dusun bakalim neler yapabiliriz .
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-04-04, 11:24 #3
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
açıkcası pek anlayamadım ama nasıl değiştirebileceğimizi öğrenmek isterim. demek istediğin her işlemi yapmak için programın birinci terimden itibaren yeniden toplamaya başlaması mıydı?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-04-04, 11:48 #4
haldunuraz haldunuraz çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
borland pascal mı turbo pascal mı kullanıyorsun?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-04-04, 11:59 #5
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
borland pascal for windows
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-04-04, 17:16 #6
CirkinkraL CirkinkraL çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
evet dedıgım oydu, yanı her ıslem ıcın en bastan baslayarak tekrar ıslem yapıyor . Sence bunu nasıl degıstırebılırız. (porgram aynı methodu tekrar cagırıyor, sonra tekrar , sonra tekrar...) bu tur kendısını cagıran methodlara recursıon method veya procedure veya funksıyon. mesela sen 3 . sayı için program da mutlaka 1. sayı yı kullanmak zorundasın. 4 sayı ıcın de 1 . sayıyı tekrar kullanmak zorundasın. Yani demek istedıgım bır sonrakı deger ıcın kendısınden oncekı degerler tekrar tekrar kullanmak zorundayız.
Sımdı yapman gereken su, 10 nolu sayı bulmak ıcın 1.sayıyı sadece bır kere, ve tabı dıger sayıları da bır kere kullanması gerek. Sence nasıl olmalı?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-04-04, 23:37 #7
comradekemal comradekemal çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
buldugun toplamı bı degere ata sonra o degere yenı deger ekle sonra da ekledıgını bıı oncekı degere ata cok 'degerlı'bi tumce oldu ama anlarsın heralde

toplam:=toplam+i gibi dusun
caselere fonksıyonlara hıc gerek yok
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-04-04, 23:45 #8
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
tamam "toplam:=toplam+i" gibi olsun da onu nasıl yapacağız? birer birer artsa, i sabit olsa oluyo ama toplam gibi i de sabit değil sürekli değişiyor onu çözemedim. bu arada kusura bakmayın çok kopuk şekilde cevap yazıyorum ama okula falan gitmem gerekiyo da..
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 15-04-04, 00:44 #9
CirkinkraL CirkinkraL çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
Yazdigimin sana faydadan cok zarari olacagini dusunuyorum ama al bakalim en kolau cozum bu. Ama istersen o ilk elinde olan fonksiyon gibi kendini cagiran cinsten de yapilabilir.

a = 0
b= 1
c=1
while (burasi sana gore olacak yer)
a= b
b= c
c= a+b
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 16-04-04, 18:28 #10
Sessiz_cin Sessiz_cin çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
For to do döngüsü yane 1 den 100 e kadar sn belli bir biriminde 1 toplayarak gider buda eğer döngüde istediğin sayı arada çok fark warsa zaman alır normaldir yane daha iyi br döngü kurmalısın
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 17-04-04, 00:26 #11
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
sanırım biraz daha çalışmam gerek. bir türlü çıkamadım işin içinden. çirkinkral son söylediğini de pek anlayamadım ama yine de hatamın nerede olduğunu anlamış oldum.
cevaplar için teşekkürler. önerilerinizi bekliyorum...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 17-04-04, 00:44 #12
CirkinkraL CirkinkraL çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
bak uzunca yazacagim umarim anlatabilirim. Programinin yavas calismasi hakkinda once konusalim. Programin ilk baslarda cok hizli calisiyor degil mi??? sonra giddikce yavasliyor .iste bunun sebebi her kademede fonksiyon artarak kendisini cagiriyor. Mesela F(5) = f(4)+f(3) degil mi yani 5 . elemanin sonucu 4 ve 3 un toplamidir. Simdi sorun su bilgisayar F(4) u nasil bulacak?? onu da su sekilde f(4) = f(3)+(2) yani bu bolye gidecek taki f(2)=f(1)+f(0) simdi umarim problemi anlamissindir.mesela f(100) = f(99)+f(98) dusunsene. ta en basa gelene kadar kac kere ayni sekilde islem yapcak.

Simdi mesela biz yine f(5) i bulmaya calisalim. Simdi sunu inceleyelim
int sayac = 0 // bu degisken f(sayac) olarak kontrol etsin, mesela 5 olan sayac
// 0 olana kadar devam etsin.


int a=0 // simdi bu 1 sayi olsun
int b=1 // bu ikinci olsun
int c=1 // bu da 3 sayi olsun

simdi bu dizi nasil ilerliyor dostum ona bakalim...

0 1 1 2 3 5 8 13 21 ...

ilk seferde a = 0 b = 1 c=1
ikinci sef a= 1 b= 1 c=2
3 seferde a =1 b = 2 c=3
4 seferde a= 2 b= 3 c=5

simdi dikkatli bakatigin zaman goreceksin ki c ler bize sonuclari veriyor. Peki bu dizi nasil ileriyor

a = b ; olmus
b = c ;olmus
c = a+ b ; olmus

simdi bana guzel cok guzel bir loop yazki (sayac i kullanmayi unutma ) mesela 10. elemani versin


frt anlamadigin yer olursa lutfen acikca sor, hic cekinmeden...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 17-04-04, 13:51 #13
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
sonunda yapabildim, işte kodu ama birkaç daha soru sorabilir miyim...

program fibonacci;
uses wincrt;
var
x,y,z,sayac,n : real;
begin
write('kacinci fibonacci sayisina kadar görmek istiyorsunuz? ');
readln(n);
sayac := 1;
x := 0;
y := 1;
z := 1;
repeat
x := y;
y := z;
z := x+y;
writeln(sayac:0:0 , ' = ' , x:0:0);
sayac := sayac + 1;
until sayac = n+1;
end.

1- çok uğraştım ama for to döngüsüyle yapamadım, bunun nedeni var mı?

2- real tipi 182. terimden sonrasını bulamıyor, sonsuz(cok büyük) terime kadar yapma şansım var mı?

3- programı yürüyünce pencereyi büyütemiyorum ve pencerede yukarı aşağı hareket edemiyorum sadece 23 satır görebiliyorum, bunun nedeni ne olabilir?

şimdiden teşekkürler...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 17-04-04, 20:00 #14
CirkinkraL CirkinkraL çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
heh cok guzel olmus eline saglik

bak simdi ben hala belirtmek isterim ki pascal bilmiyorum

1 - for dongusunu yanlis olman ihtimali olabilir (bence oyle

2- bulamamasi normal, ama gel senle onun icin de program yapalim ok

3- onu bilen baska arkadaslar var onlar yardimci olabilir. Hic bir fikrim yok.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 18-04-04, 22:56 #15
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
tamam yapalım, çünkü matematikle ilgili böyle şeylerle uğraşmayı çok severim ve bu kadar sınırlı bir aralıkta hesap yapabilmesi benim hatam değil de, pascal'ın bir özelliğiyse daha fazla ilerlemeden başka bir dile geçmem en iyisi olur sanırım...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 19-04-04, 00:47 #16
Kur-Sad Kur-Sad çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
Alıntı:
Gerçek Mesajı Gönderen frt
iyi günler ben pascal öğrenmeye yeni başladım ve fibonacci sayılarını (her terimin kendimden önceki iki terimin toplamı olduğu sayılar) hesaplayan bir program yazdım ama program çok yavaş çalışıyor. bunun nedenini bana açıklayabilirmisiniz? program şöyle;

program fibonacci;
uses wincrt;
type
sayi = 1..maxint;
var
t : sayi;
x : sayi;
function f(x:sayi):longint;
begin
case x of
1 : f := 1;
2 : f := 1;
3..maxint : f := f(x-1) + f(x-2);
end;end;

begin
write('kaçinci fibonacci sayisina kadar görmek istiyorsunuz? ');
readln(t);
for x := 1 to t do
writeln(x , ' = ' , f(x));
end.


şimdiden teşekkürler...
Özyineli (recursive) fonkisyon kullandığın için programın yavaş çalışıyor. Öz yineli fonksiyonlar programı kısaltır fakat mecbur olmadıkça... Öz yineli fonksiyonlar kullandığın zaman eğer iyi kontroller yazmazsan hafıza kaçaklarına sebep olabilir.
programına bakarsan sadece 10. fib. sayısısı için (f(10)) için iç içe sanırım 60-70 tane özyineli f(x) fonksiyonu açıyor...

Mesajı son düzenleyen Kur-Sad ( 19-04-04 - 00:50 )
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 19-04-04, 13:50 #17
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
tamam hız problemini hallettim 2. sayfada verdim kodunu ama anlamadıgım 182. terimden sonra eror veriyor bunun nedeni nedir?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 19-04-04, 22:47 #18
CirkinkraL CirkinkraL çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
cunku her sayinin alabilecegi belli bir buyukluk var dostum
mesela bir int degeri pascal da ne kadar olabiliyor biliyomusun ??

yani anliyacagin dille alakali degil bu is her dilde sayilarin buyuklukleri degisebilir , mesela int den daha buyuk deger alabilen bir sey java double var sonra big integer falan, sanirim pascal da ayni sey vardir.double a bakarsan iyi olu....


*******************

gelelim carpma olayina sen o isi biraz daha unut istersen biraz zor gelebilir ve sevkini kacirabilir, yanlis anlama cunku bunu icin daha fazla bilgiye ihtiyacin var o da zamanla olacak...(data stucture)

*******************

ama istersen baska programlar yapalim.... mesela bir program yapki bilgisayar aklindan bir sayi tutsun, kullanici sayilar girsin bilgisayar da ona karsilik cevap versin buyuk kucuk diye bilince de bitsin ;D
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 19-04-04, 23:01 #19
frt frt çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
çok sağol. o tahmin programını biliyorum o yüzden ben kullanıcının aklından bir sayı tutup bilgisayarın tahmin etmeye çalıştığı bir şey yazmaya çalışacağım. takılırsam yine sorarım???!!!
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 20-04-04, 00:19 #20
comradekemal comradekemal çevrimdışı

bynogame
Varsayılan Cvp: pascalla ilgili bir soru

bynogame
kendın bı cozum bulduysan ben de for dongusu ıle yapılısı gostereyım:

t1:=1; t2:=1; write(t1,' ',t2);
for i:=1 to n-2 do begin
t3:=t1+t2;
write(t3,' ');
t1:=t2; t2:=t3;
end;
end.
n fıbonuccının terım sayısı basta okutursun ' ' bosluk yanı sayılar yanyana yazılmasın dıye bırer bosluk bırakıyoruz...
baska da t1 t2 t3 ınt basta belırtırsın artık onları
kolay gelsın tahmınde de ugras bıraz onun yapılmısı da war bende ama bıraz ugras bakalım...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz

Konu Araçları

Gönderme Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
Smiley Açık
[IMG] kodu Açık
HTML kodu Kapalı



Tüm saatler GMT +3. Şuan saat: 08:47
(Türkiye için artık GMT +3 seçilmelidir.)

 
5651 sayılı yasaya göre forumumuzdaki mesajlardan doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Şikayet Mailimiz. İçerik, Yer Sağlayıcı Bilgilerimiz. Tatil


bynogame