Aspire
Koineks
  • 23-10-2009, 18:31:37
    #1
    1/2
    Arkadaşlar sorunu nasıl anlatacağım bilmiyorum

    örnek vererek anlatmaya çalışayım,
    mesela bir matematik işleminde

    (a + b ) * ( (c / d) - x * (b+a))

    uygulanan bir işlem sırası vardır. önce en içteki parantezler işlenir.
    işlemlerden önce çarpma , bölme yapılır vs. sırası vardır, çoğumuzun bunu bildiğini düşünerek temel soruma geçeyim.

    matris hesaplarıyla ilgili bir betik üzerinde çalışıyorum. iki matrisin toplamı , veya matrisin tersinin alınması, çarpılması vs ...
    her işlemin modülü var. yani iki matrisi çarpıp toplamakta bir sorun yok, bunun için .NET üzerinde yazılmış fonksiyonlar var. ordaki işlemleri PHP üzerinde yapacağım.

    mat lab gibi program kullanan varsa aşina olacaktır.
    mat labda komut satırına
    N = a +((b + c) + p ^ -1)
    şeklinde bir denklem girilince , çözümü N matrisine aktararak ekrana veriyor.

    PHP de ayrı ayrı bu işlemleri yapabilmeye rağmen böyle bir satırı parçalayarak tek seferde sonuca ulaşılamıyacak gibi.
    bu tarz işlemlerdeki parantez ve işlem sırasını alabilecek bir algoritma üzerinde çalışıyorum. işte tam bu algoritma oluşturmada sorun yaşıyoruz

    çözüm için her türlü fikre açığım
    umarım sorunu anlatabilmişimdir
    biraz beyin fırtınasına ihtiyacım var sanki

    lezzetmenusu - havadan.tv

  • Sponsor Reklam
  • 24-10-2009, 09:31:00
    #2
    1/2
    hepsine aşinayimda tam olarak ne yapmak istiyorsun üstad
  • 24-10-2009, 09:42:28
    #3
    1/2
    sdemirkeser adlı üyeden alıntı
    hepsine aşinayimda tam olarak ne yapmak istiyorsun üstad
    şöyle bişey hocam
    şimdi matrislerde 4 işem , ters alma vs... gibi işlemleri yapan bir sınıfımız var diyelim.
    $matris->carp($a,$b); gibi...

    ekranda sırayla iki matris tanımlayıp bunları çarpabiliyorum diyelim. yada toplayabiliyoruz.

    sorun birden fazla işlemi tek seferde yapmaya çalışmamız.

    yani ; ((a*b) + c) - (b-c) * d
    işemin sonucunu tek seferde almak istyoruz , işlemleri ayrı ayrı yapınca bi sorun yok.
    ama textbox a bu satırı girdiğimde, tanımladığımız matrisleri matematik işlem kurallarına göre , işleme almak istiyoruz.

    ((a*b) + c) - (b-c) * d bu satırda ve benzer denklemlerdeki işlem sırasını çözüp sırayla o işlemleri yapmamız lazım
    ya da başka bir yöntem varsa da çok makbule geçer

    lezzetmenusu - havadan.tv

  • 24-10-2009, 12:09:18
    #4
    1/2
    uysal_rockci adlı üyeden alıntı
    ya da başka bir yöntem varsa da çok makbule geçer
    eval

    PHP- Kodu:
    $a 3;
    $b 4;
    eval(
    '$sonuc = $a * $b;');
    echo 
    $sonuc
    tabi kişi $a gibi dolar işareti kullanmayacaksa buna göre bul değiştir gibi yapmaniz lazim
  • 24-10-2009, 12:26:16
    #5
    1/2
    sdemirkeser adlı üyeden alıntı
    eval

    PHP- Kodu:
    $a 3;
    $b 4;
    eval(
    '$sonuc = $a * $b;');
    echo 
    $sonuc
    tabi kişi $a gibi dolar işareti kullanmayacaksa buna göre bul değiştir gibi yapmaniz lazim
    yani işlemler tam olarak matematik işlemleri gibi degil. yani nasıl anlatsam bilemiyorum

    mesela iki textbox var birisinde A matrisi diğerinde B matrisi tanımlıyoruz.
    topla seçimi yaparak , tamam deyince $matris->topla($a,$b); fonksiyonu sonucunda çözüm veriyor.
    aynı şekilde carp(),bol(),tersal() vs... fonksiyonları var.

    ama istediğimiz şu, her hangi bir işlem (toplama, çıkarma ...gibi ) seçimi yapmadan tek bir denklemle sonuca gidelim.
    yani ekranda herhangi bir işlem seçimi yapmak istemiyoruz.
    birden fazla matrisi tanımlayacağız A,B,C,D .... gibi

    en son textbox'a ((a*b) + c) - (b-c) * d denklemini yazıp tamam diyeceğiz. ve sonucu alacağız

    yani tam olarak matematik işlemleri olmadığı için , fonksiyonlarla sonuca ulaşıldığı için,
    galiba öncelikle verilen denklemdeki işlem sırasını çözümleyerek,$matris->carp(), bol(); topla(); gibi fonksiyonlarla sonuca daha sonra gitmeliyim.
    yani sıralarsak ,
    1 - $x1 = $matris-> carp ($a,$b);
    2 - $x2 = topla($x1 , $c );
    3 - $y1 = cikar($b,$c);
    4 - $y2 = carp($y1,$d);
    5 - $sonuc = cikar ($x2,$y2);

    $sonuc değişkenine bu şekilde ulaşmalıyız. denklemler kalabalıklaştıkça ayrıştırmak zorlaşacak gibi, bunun için nasıl bir algoritma izlemeliyizim, php ya da diğer diller dört işlem için nasıl bir algoritma izliyor acaba.

    lezzetmenusu - havadan.tv

  • 24-10-2009, 13:16:25
    #6
    1/2
    evet sanırım bunu yazması bile ayrı dert

    $matris->cikar($matris->topla($matris->carp($a,$b),$c),$matris->carp($matris->cikar($b,$c),$d));


    hocam preg_match_all ile parantez içlerini alsak sonra bunu harf uzunluğuna göre dizsek
    (a*b)
    (b-c)
    (a*b) + c)
    ((b-c) * d)
    ((a*b) + c) - ((b-c) * d))
    sonra fonksiyona yollasak fonksiyon bunu aralarındaki işarete göre işlem sırası yapsa
    1. yi al çarpma varsa yap yoksa bölme yap yoksa topla yoksa çıkar oda yoksa 2. ye geç
    2. yi al çarpma varsa yap yoksa bölme yap yoksa topla yoksa çıkar oda yoksa 3. ye geç

    gibi.. if for yani :P

    olur gibime geliyor ama baya bi kafa ister buna kafa dumanlıyken yapmak gerek
    ...
  • 24-10-2009, 18:06:29
    #7
    1/2
    Örnekleri hem sayısal hemde harfsel olarak verirseniz. Daha anlaşılır olacaktır.
    Mesela $a içeriği bir sayı mı ? Yoksa başka bir ifade mi içeriyor.
  • 24-10-2009, 18:43:37
    #8
    1/2
    mustafa90 adlı üyeden alıntı
    Örnekleri hem sayısal hemde harfsel olarak verirseniz. Daha anlaşılır olacaktır.
    Mesela $a içeriği bir sayı mı ? Yoksa başka bir ifade mi içeriyor.
    evet ne girilecek a yerine sayımı gelecek ne olacak vs vs
  • 25-10-2009, 00:20:11
    #9
    1/2
    Compillelırlar matematiksel işlemleri yaparken stack kullanır bu sekilde problem kolay bir şekilde çözülebilir

    Öncelikle infix ifade incelenir ve post fix ifadeye cevrilir

    Daha sonra postfix ifade kolayca hesaplanır

    infixden postfixe cevrilme,postfixide çözme sırasında stack kullanabilirsin

    Bunu araştırırsan hemen öğrenebilir uygulayabilirsin

    Diğer şekillerde algortma kurmak zor olabilir
    Justice Crusades