Yeni yığın tabanlı dilimi uygulama zamanı! Adı StackyMath. Bu, yığında 8 işlem ve yığına sayı eklemenin yolları olan yığın tabanlı bir dil olacaktır.
İşlemler listesi:
/
: Bölünme. Yığının ilk 2 sayısında gerçekleştirilir. Sonucu yığına geri iter.*
: Çarpma işlemi. Yığının ilk 2 sayısında gerçekleştirilir. Sonucu yığına geri iter-
: Çıkarma. Yığının ilk 2 sayısında gerçekleştirilir. Sonucu yığına geri iter+
: İlave. Yığının ilk 2 sayısında gerçekleştirilir. Sonucu yığına geri iter^
: Üs. Yığının ilk 2 sayısında gerçekleştirilir. Sonucu yığına geri iter%
: Modulo. Yığının ilk 2 sayısında gerçekleştirilir. Sonucu yığına geri iter!
: Faktöriyel. Yığının en üstündeki numarada gerçekleştirilir. Sonucu yığına geri iterD
: Yığında en üstteki sayıyı çoğalt
Sahte kodda tanımlanan işlemler:
/
:push(pop divided by pop)
*
:push(pop times pop)
-
:push(pop minus pop)
+
:push(pop plus pop)
^
:push(pop to the pop)
%
:push(pop mod pop)
!
:push(factorial pop)
D
:t = pop; push(t); push(t)
Sayılar yığına nasıl aktarılır:
Yığına sayı eklemek kolaydır, ham sayıyı ihtiyacınız olan yere programınıza koyun. Yığına birden fazla sayı koymanız gerekirse, bunları virgülle ( ,
) ayırabilirsiniz . Programınızın -
girişteki sayıları işlemesine gerek yoktur , Kullanıcı bir tane isterse, negatif, sıfır ve istediği sayıyı itmelidir -
. Program girişindeki sayılar da pozitif tamsayılarla sınırlıdır.
Giriş:
Programınız girdiyi komut satırından veya std girişinden almalıdır. Giriş yalnızca ,
gerektiğinde sınırlanan sayılardan (bilimsel gösterim veya ondalık sayılar olmadan) ve yukarıda tanımlanan işlemlerden oluşur.
Çıktı:
Programınız numarayı yığının üstüne yazmalıdır.
Hata durumları:
- Program yığını aşırı doldurmaya çalışırsa, yazdırmalısınız
StackUnderflowException!!!
. - Sıfıra bölme işleminiz varsa yazdırın
DivisionByZeroException!!!
- Programı yürütürken veya girişteki bir sayıyı işlerken 64 biti geçen bir sayı varsa,
NumberOverflowException!!!
- Bir şekilde yığının üstünde negatif bir sayı alırsanız ve bir faktöriyel yapmanız gerekiyorsa, yazdırın
NegativeFactorialException!!!
- Yığının üstünde bir kayan nokta numaranız varsa ve bir sonraki işlem faktöriyelse,
FloatingFactorialException!!!
- Program çıkarken (örn. Program boşken) yığınta sayı yoksa yazdırma
EmptyProgram!!!
Notlar:
- Tüm hata çıkışı yo std err veya en yakın eşdeğeri olmalıdır.
- Tüm sayılar 64 bit kayan nokta ile sınırlıdır.
Örnek programlar:
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(Gerekirse daha fazlasını ekleyebilirim)
654,489,48,43/5*7D+-*%
dönmelidir 77.6875
. ( 43/48*5-(7+7)
olması gerekir (7+7)-43/48*5
)
!
içinF
).