Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Pascal / Delphi / Delphi.NET

Cevapla
 
LinkBack Seçenekler
Eski 20/01/2007, 22:41   #1 (permalink)
Üye
 
Üyelik Tarihi: 03/2006
Mesaj: 15
Varsayılan Pascal da Reel Sayıların Üssünü Fonksiyonsuz Almak ?

Merhaba Arkadaşlar;

Pascal da girilen reel sayının üssünü, fonksiyon kullanmadan nasıl bulabiliriz ?

İnteger sayı olsa kolayca halledebiliriz, fakat işe reel sayılar girince fonksiyon kullanmadan bir türlü yapamıyorum.

Bakın "exp" fonksiyonu kullanarak program çalışıyor.

program usalma;
uses crt;

function us_al(var a,b:real):real;
begin
us_al:=exp(b*ln(a));
end;

var
i,j:real;
s:string[1];
begin
repeat
clrscr;
writeln('örnek');
writeln('tabanı giriniz: 3.4');
writeln('üssü giriniz: 1.5');
writeln('sonuc: 6.2693');
writeln;
write('tabanı giriniz: ');readln(i);
write('üssü giriniz: ');readln(j);
writeln(i: 3:4,' üssü ',j: 3:4,' = ',us_al(i,j): 3:4);
s:=readkey;
until (s='0');
end.


Burada fonksiyon kullanmadan programı çalıştırmam gerekiyor. Bana bir akıl verebilirmisiniz.

eğer pascal bilmiyorsanız bile, mantığı konusunda yardımcı olabilirseniz sevinirim ...
hArd_wAr_e hatta değil   Alıntı Yaparak Yanıtla
Eski 21/01/2007, 00:00   #2 (permalink)
.
 
Fobus Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2003
Mesaj: 508
Varsayılan

program usalma;
uses crt;

var
i,j:real;
s:string[1];
begin
repeat
clrscr;
writeln('örnek');
writeln('tabanı giriniz: 3.4');
writeln('üssü giriniz: 1.5');
writeln('sonuc: 6.2693');
writeln;
write('tabanı giriniz: ');readln(i);
write('üssü giriniz: ');readln(j);
writeln(i: 3:4,' üssü ',j: 3:4,' = ',exp(i*ln(j)): 3:4);
s:=readkey;
until (s='0');
end.


Bende pascal yok deneyemedim. Delphi ile benzerini denedim çalıştı. Böyle çalışması lazım.
Fobus hatta değil   Alıntı Yaparak Yanıtla
Eski 21/01/2007, 03:26   #3 (permalink)
Üye
 
Üyelik Tarihi: 03/2006
Mesaj: 15
Varsayılan

saol @fobus,

hoca demiştiki function kullanılmasın."exp ve ln" fonksiyon olmuyor mu ?

Ama fonksiyon kullanılmadan yapmanın tek bir çaresi olması lazım, o da "exp ve ln" fonksiyonunun programını bulmak.

"exp ve ln" fonksiyonunun programını nasıl bulabilirim acaba ?
hArd_wAr_e hatta değil   Alıntı Yaparak Yanıtla
Eski 21/01/2007, 14:37   #4 (permalink)
Üye
 
Üyelik Tarihi: 01/2007
Yer: İstanbul
Mesaj: 29
Varsayılan

Rasyonel bir sayının tamsayı kuvvetini alan bir programı döngüyle yapabiliriz. En rahat ve en güzel yöntem budur diye tahmin ediyorum. İşte hızlıca yazdığım program:

Kod:
program usal;
uses wincrt; {ya da crt}
 var
   i,us:Integer;
  sonuc,sayi:Real;
 begin
  repeat
   sonuc:=1;
   clrscr;
   write('ussu alinacak sayiyi giriniz: '); readln(sayi);
   write('sayinin kacinci kuvveti alinacak? '); readln(us);
   if us<0 then
    for i:=-1 downto us do sonuc:=sonuc/sayi
   else if us=0 then sonuc:=1
    else if us>0 then
      for i:=1 to us do sonuc:=sayi*sonuc;
   writeln(sayi:0:5, ' sayisinin ', us, '. kuvveti: ', sonuc:0:5);
   write('tekrar? (e/h)');
   if upcase(readkey)<>'E' then break;
  until 1=2;
 end.
Fakat rasyonel kuvvetlerin nasıl hesaplanacağını ben de merak ediyorum açıkçası.
Kojiroh hatta değil   Alıntı Yaparak Yanıtla
Eski 21/01/2007, 15:29   #5 (permalink)
Eski Cevizci
 
mr1yh1 Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2005
Yer: samsun
Mesaj: 1,171
Varsayılan

fonksiyon yok derken,
sayıları ikilik sayı sistemine göre yazıp,
bit kaydırmalarla işlem yapmanızı istemiş olabilir.
mr1yh1 hatta değil   Alıntı Yaparak Yanıtla
Eski 21/01/2007, 16:11   #6 (permalink)
Eski Cevizci
 
mr1yh1 Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2005
Yer: samsun
Mesaj: 1,171
Varsayılan

Alıntı:
mr1yh1, mesajından alıntı: Mesajı Gör
fonksiyon yok derken,
sayıları ikilik sayı sistemine göre yazıp,
bit kaydırmalarla işlem yapmanızı istemiş olabilir.
bu mesajı ciddiye alma. tümüyle yanlış.

taylor serileri çözüm olabilir:

exp(x) = (x^n) / n! ; ( n=0 dan sonsuza )
ln(1+x) = [(-1)^(n+1)] * (x^n) / n ; ( n=1 den sonsuza )
mr1yh1 hatta değil   Alıntı Yaparak Yanıtla
Eski 22/01/2007, 19:24   #7 (permalink)
Üye
 
Üyelik Tarihi: 03/2006
Mesaj: 15
Varsayılan

Alıntı:
Kojiroh, mesajından alıntı: Mesajı Gör
Rasyonel bir sayının tamsayı kuvvetini alan bir programı döngüyle yapabiliriz. En rahat ve en güzel yöntem budur diye tahmin ediyorum. İşte hızlıca yazdığım program:

Kod:
program usal;
uses wincrt; {ya da crt}
 var
   i,us:Integer;
  sonuc,sayi:Real;
 begin
  repeat
   sonuc:=1;
   clrscr;
   write('ussu alinacak sayiyi giriniz: '); readln(sayi);
   write('sayinin kacinci kuvveti alinacak? '); readln(us);
   if us<0 then
    for i:=-1 downto us do sonuc:=sonuc/sayi
   else if us=0 then sonuc:=1
    else if us>0 then
      for i:=1 to us do sonuc:=sayi*sonuc;
   writeln(sayi:0:5, ' sayisinin ', us, '. kuvveti: ', sonuc:0:5);
   write('tekrar? (e/h)');
   if upcase(readkey)<>'E' then break;
  until 1=2;
 end.
Fakat rasyonel kuvvetlerin nasıl hesaplanacağını ben de merak ediyorum açıkçası.
@Kojiroh tesekkurler,
Bakalım Rasyonel sayının rasyonel üssünü fonksiyon kullanmadan yapabilecekmiyiz ...
hArd_wAr_e hatta değil   Alıntı Yaparak Yanıtla
Eski 22/01/2007, 19:28   #8 (permalink)
Üye
 
Üyelik Tarihi: 03/2006
Mesaj: 15
Varsayılan

Alıntı:
mr1yh1, mesajından alıntı: Mesajı Gör
bu mesajı ciddiye alma. tümüyle yanlış.

taylor serileri çözüm olabilir:

exp(x) = (x^n) / n! ; ( n=0 dan sonsuza )
ln(1+x) = [(-1)^(n+1)] * (x^n) / n ; ( n=1 den sonsuza )
Selamlar,

Dediğiniz yöntem doğru olabilir, bu yöntemi başka bir arkadaştanda duydum, eğer konuyu açabilirseniz sevinirim ...
hArd_wAr_e hatta değil   Alıntı Yaparak Yanıtla
Eski 22/01/2007, 21:43   #9 (permalink)
Eski Cevizci
 
mr1yh1 Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2005
Yer: samsun
Mesaj: 1,171
Varsayılan

ilk mesajda verdiğiniz programdaki exp ve ln yerine,
taylor serisi gelicek.

http://en.wikipedia.org/wiki/Taylor_series
List of Taylor series of some common functions kısmında denklemler daha açık şekilde verilmiş.

n değerini ne kadar büyük tutacağınız istediğiniz hassasiyete bağlı.
teorik olarak bulmanın yolu var ama bence deneme yanılma size yeter.

aşağıdaki kodu test etmedim, fikir vermesi açısından yazıyorum.
pascal bilmediğim için C de yazdım.

PHP Kodu:
// exp(x) degeri icin taylor dizisin ilk n teriminin toplami.
double exp_serisidouble xint n ){
   
double  sonuc ;
   
double  x_li_terim  
   
long     n_li_terim  ;

   
// sifirinci terim.
   
x_li_terim ;
   
n_li_terim ;
   
sonuc x_li_terim n_li_terim ;

  
// birinciden, n inciye kadar olan terimler
   
for ( int i 1<= i++ ){
        
x_li_terim x_li_terim x;
        
n_li_terim n_li_terim i;
        
sonuc sonuc x_li_terim n_li_terim;
   }

   return 
sonuc;

mr1yh1 hatta değil   Alıntı Yaparak Yanıtla
Eski 24/01/2007, 15:41   #10 (permalink)
Syntax Error
 
HaokaH Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2006
Yer: Bursa // İzmit
Mesaj: 633
Varsayılan

Pascal da variant değişken tipi varmiydi tam emin degilim eger varsa degiskenleri variant tanimlayip, girilen sayiyi, girilen us kadar carptirmayi denersen olabilir.. Variant yoksa double felanda tanimlamayi denermisin.. Yada artik neyse iste

Boylelikle fonksiyon kullanmadan basit bir for dongusuyle us bulmus olabiliriz..
__________________
ProgramcIlIk; Kendini ifade edebilme yetenegidir..
http://www.volkanyildirim.org
HaokaH hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
Sınav sorusu iki rakamın arasındaki sayıların toplamı EmsiMaMi Pascal / Delphi / Delphi.NET 4 27/03/2006 11:02
Sayıların inanılmazlıgı NeoBre Hayata Dair 9 25/02/2006 13:15
C, C++ & pascal Mr_MOON Genel Programlama 1 14/10/2005 17:03
toblodaki sayıların toplamı I2sync ASP 1 19/01/2005 23:28
Sayıların en büyüğünü bulmak. C.d. C / C++ 2 26/09/2004 23:01


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 09:39.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net