Proqram üçün proqram#4678

Proqram üçün proqram

8 saniyə
256 meqabayt
Asan

Hər bir proqramçı, tetris yazdıqdan sonra, müəyyən bir proqramlaşdırma dili üçün kompilyator yazmalıdır. Bu, demək olar ki, hər kəsin keçdiyi bir mərhələdir.

Bu tapşırıqda sizdən aşağıdakı proqramlaşdırma dili üçün interpretator yazmağınız tələb olunur. Bu dili Syu adlandıraq. Syu, C-bənzər bir dildir, lakin dinamik tiplidir. Bu dildə aşağıdakı konstruksiyalar mövcuddur:

1) Bütün proqram funksiyalar toplusundan ibarətdir. Funksiyalar icradan əvvəl çağırıla bildiyi üçün, funksiyanın prototipləri də mövcuddur. Funksiya belə təyin olunur:

«ad» ( «vergüllə ayrılmış arqument adları») «blok (funksiyanın gövdəsi)»

Funksiya prototipi:

«ad» («vergüllə ayrılmış arqument adları» );

Proqram main funksiyasının icrası ilə başlayır. Əgər belə bir funksiya yoxdursa və yalnız bir funksiya varsa, o icra olunur.

2) Blok:

{ «nöqtəli vergüllə ayrılmış operatorlar toplusu» }

Blok son operatorun dəyərini qaytarır.

3) Operator aşağıdakı tiplərdən biri ola bilər:

a) Funksiya çağırışı:

«funksiya adı»(«vergüllə ayrılmış parametrlər toplusu»)

b) Təyin etmə:

«dəyişən adı 1» = «dəyişən adı 2» = ... = «dəyişən adı n» = ifadə.

c) İfadə - bütün riyazi qaydalara uyğun; həmçinin ternar operatorlar da ola bilər.

ç) Ternar operator:

«ifadə 1»?«ifadə 2»:«ifadə 3»

Bu şəkildə icra olunur: əgər ifadə 1 doğru olarsa, nəticə ifadə 2, əks halda ifadə 3 olur.

d) Şərt operatoru:

if («ifadə 1») «blok 1» else «blok 2»

Ternar operator kimi icra olunur. else «ifadə 3»; hissəsi olmaya bilər.

e) Dövrlər:

I) for («ifadə 1»; «ifadə 2»; «ifadə 3») «blok»

Əvvəlcə ifadə 1 icra olunur. Sonra ifadə 2 doğru olduğu müddətcə blok icra olunur və sonra ifadə 3. Əvvəlcə doğruluq yoxlanılır - sonra icra olunur.

II) while(«ifadə»)«blok»

blok ifadə doğru olduğu müddətcə icra olunur. Əvvəlcə doğruluq yoxlanılır - sonra icra olunur.

III) do «blok» while («ifadə»)

Blok ifadə doğru olduğu müddətcə icra olunur. Əvvəlcə icra olunur - sonra doğruluq yoxlanılır.

ə) Qaytarma operatoru:

return «ifadə»

Funksiyaya ifadənin dəyərini qaytarır və onun işini dayandırır.

f) Dövrdən çıxış operatoru:

break

Dövrün və ya şərt operatorunun işini dayandırır. Bu zaman dəyər qaytara bilər.

g) Sətir - "«simvollar toplusu»"

ğ) Proqramda simvol - '«simvol»'

h) > (böyük), < (kiçik), >= (böyük və ya bərabər), <= (kiçik və ya bərabər), != (bərabər deyil),== (məntiqi bərabər), || - məntiqi və ya, - məntiqi və operatorları mövcuddur.

i) += (əlavə et və təyin et), -= (çıx və təyin et), *= (vur və təyin et), /= (böl və təyin et), %= (modul al və təyin et), ++«dəyişən adı» (bir əlavə et və dəyəri qaytar), «dəyişən adı»++ (dəyəri qaytar və 1 əlavə et), «dəyişən adı»– (dəyəri qaytar və 1 çıx), –«dəyişən adı» (bir çıx və dəyəri qaytar). Standart print funksiyası mövcuddur, hansı ki, ona ötürülən arqumentləri çıxarır.

j) Ad - latın hərfləri, rəqəmlər və alt xətt simvolunun ardıcıllığıdır. Adın ilk simvolu rəqəm ola bilməz.

Qeyd:

1) Proqram sintaksis baxımından düzgündür və 1000000 iterasiyadan çox icra olunmur.

2) Əgər məntiqi səhvlər varsa, müvafiq mesaj verilməlidir.

Onların siyahısı:

a) Əgər main funksiyası yoxdursa və cəmi bir funksiya yoxdursa, "Ambiguity in function calling" mesajı verilir.

b) Əgər proqram hələ mövcud olmayan bir dəyişənin dəyərini soruşursa, "No such variable" mesajı verilir.

c) Əgər proqram hələ təsvir olunmamış bir funksiyanın dəyərini soruşursa, "No such function" mesajı verilir.

ç) Əgər riyazi ifadədə verilmiş dəyərlərlə icra oluna bilməyən əməliyyatlar varsa, "Incompatible types" mesajı verilir. Rəqəmlərlə bütün riyazi əməliyyatlar icra olunur. Sətirlərlə + və * əməliyyatları - sətirlərin konkatenasiyası. Əgər rəqəm və sətir konkatenasiya olunursa, nəticə - rəqəmin sətirə çevrilməsi və sətirin konkatenasiyası olur. Digər bütün əməliyyatlar qadağandır.

d) Sıfıra bölünmə zamanı "Division by zero" mesajı verilir.

3) = istisna olmaqla, bütün əməliyyatlar soldan-sağa (eyni prioritetlərdə) icra olunur.

Giriş

Giriş faylında yuxarıda təsvir olunan dildə proqram var.

Çıxış

Çıxış faylında proqramın icra nəticəsi (yəni print funksiyalarının çıxardığı) və ya proqramın icra olunmadığı halda səhvlərdən biri (ilk səhv və yalnız o) olmalıdır.

Nümunələr

Nümunə 1

Loading
Loading