Urganch davlat universiteti axborot texnologiyalari kafedrasi


program Polynom_Automat;     var



Download 13,56 Mb.
Pdf ko'rish
bet53/99
Sana31.12.2021
Hajmi13,56 Mb.
#262961
1   ...   49   50   51   52   53   54   55   56   ...   99
Bog'liq
akademik litsey kasb hunar kollejlarda informatika fanidan olimpiada masalalarini ishlash boyicha korsatmalar

program Polynom_Automat; 

  

var fv:text; 

    x,sum:extended; 

    koef,deg,sign:

longint

    ch:



char

    STATE:



integer

    s:



string



function power(a:extended; n:

longint

):extended; 

  

var res:extended; 

begin 

  res:=exp(n*ln(abs(a))); 

  

if (a<

0



and odd(n) then power:=-res 



  

else power:=+res 

end

 

begin 



  assign(fv,

'polynom.dat'

);reset(fv); 

  readln(fv,x); 

  writeln(

'reset...'

); 

  s:=


''

  sign:=+



1

;sum:=


0

;STATE:=


0

  



while 

true 


do begin 

    if not eoln(fv) then read(fv,ch) else ch:=

' '


    write(ch); 




    s:=s+ch; 

    


case STATE of 

    

0

:



case ch of 

      

'0'


..

'9'


:

begin 

        koef:=ord(ch)-ord(

'0'


); 

        STATE:=

1



        



end

        


'x'

:

begin 



          koef:=

1

; STATE:=



3

         



end

         



else begin 

            writeln(

'ERROR...'

); 

            STATE:=



         



end

    


1

:

case ch of 



      

'0'


..

'9'


:

begin 

        koef:=koef*

10

+ord(ch)-ord(



'0'

); 


        STATE:=

1



      

end

      


'-'

,

'+'



:

begin 

        sum:=sum+sign*koef; 

        


if ch=

'-' 


then sign:=-

        



else sign:=+

1



        STATE:=

0



      

end

      


'*'

:STATE:=


3

      



' '

:

begin 



        sum:=sum+sign*koef; 

        STATE:=

       


end 

      else begin 

        writeln(

'ERROR...'

); 

        STATE:=



       


end 

     end

     


2

:

case ch of  



      

'x'


:STATE:=

3



       

else begin 

          writeln(

'ERROR...'

); 

          STATE:=



       


end 

      end

      


3

:

case ch of 



          

'^'


:STATE:=

4



          

else begin 

            writeln(

'ERROR...'

); 

            STATE:=



          



end 

         end

       


4

:

case ch of 



          

'0'


..

'9'


:

begin 

            deg:=ord(ch)-ord(

'0'


);STATE:=

5



           

end


          

else begin 

            writeln(

'ERROR...'

); 

            STATE:=



           



end 

          end

        


5

:

case ch of 



          

'0'


..

'9'


:

begin 

            deg:=deg*

10

+ord(ch)-ord(



'0'

); 


            STATE:=

5



           

end

           

'-'

,

'+'



:

begin 

              sum:=sum+sign*koef*power(x,deg); 

              



if ch=

'-' 


then sign:=-

              



else sign:=+

1



              STATE:=

0



            

end

           

' '

:

begin 



              sum:=sum+sign*koef*power(x,deg); 

              STATE:=

9



            



end

            



else begin 

                writeln(

'ERROR...'

); 

                STATE:=



              



end 

            end

           

9

:

break



            



end

           



end

           close(fv); 

           assign(fv,

'polymon.sol'

);rewrite(fv); 

           writeln(fv,sum);close(fv) 

       

end

Ushbu  dastur  shunday  spetsifik  ravishda  tashkillashtirilganki  uni  sozlashda  “hozir  biz 

qayerdamiz”ni  nazorat  qilish  qiyin,  bajarishning  u  yoki  bu  qadamida  qaysi  simvol  qayta 

ishlanmoqda  va  qanday  simvollar  undan  oldin  borligini  izlash  qiyin.  Ushbu  masalani 

osonlashtirish  uchun  sozlash  vositalari  ishlatilgan.  Dastur boshida  {$define  ECHo}  va  {$define 

STRING_ECHO} ismini aniqlash  yozilgan. Ularning birinchisi shartli {$ifdef ECKO}{$endif} 

kompilyatsiya  ko‘rsatmalarida  har  bir  o‘qilgan  simvolni  ekranga  chiqarishga,  ikkinchisi  esa 

sozlash  oynasida  qarash  mumkin  bo‘lgan  yordamchi  s  qator  oxiriga  tugallashga  imkon  beradi. 

O‘qilgan simvollarni ekranga yoki sozlovchining oynasida ko‘rish imkoniyati sozlash jarayonini 

yetarlicha  osonlashtiradi.  Biroq  shartga  ko‘ra  dastur  faqat  yakuniy  sonli  javobnigina  chiqarishi 

kerak.  Aslida  dastur  sozlashini  tugallab,  yordamga,  fragmentlarni  yo‘q  qilish  yetarlidir.  Bittasi 

aloxida-dastur  tugallanganligini  qanday  bilish  mumkin.  Ushbu  vaziyatda  dasturning  yakuniy 

matnida  kerak  bo‘lmagan  barcha  “yordamga  inventor”  ni  shartli  {$ifdef  ism}{$endif} 

kompilyatsiya  ko‘rsatmalarining  ichida  joylashtirish  mumkin.  Ushbu  ko‘rsatmalarning  ma’nosi 

quyidagicha:  agar  ifdef  dan  keyin  (dasturda  bu  STRINE_ECHO  va  ECHO  isimlari)  ism 

aniqlangan  bo‘lsa,  u  holda  komplyator  {$ifdef  ism}  va  {$endif}  komandalar  orasidagi  matnini 

dastur  matnining  odatiy  qismi  singari  qabul  qiladi.  Agarda  ushbu  ism  aniqlanmagan  bo‘lsa,  u 

holda  {$ifdef  ism}  va  {$endif}  komandalar  orasidagi  matn  komplyatsiyada  rad  qilishadi. 

Komlpyatsiya paytida ismni aniqlash uchun dastur matnidan  yuqorida  {$defrne ism} deb yozish 




kerak.  Keyin  komplyator  yordamida  operatorlarni  rad  qilishi  zarur  bo‘lishida  {$defineism} 

direktivalarga  {va  $  simvollar  orasiga  probel  qo‘yish  kerak.  Komplyator  {$define  ism}  matnni 

ismni aniqlash emas izoh singari qabul qiladi} va {$ifdef ism} va {$endif} orasidagi operatorlarni 

rad qiladi.  Komplyatsiyani  boshqarish  uchun  nafaqat  foydalanuvchi  balki  komplyatorining  o‘zi 

tamonidan  aniqlangan  isimlardan  foydalanish  mumkin.  Masalan,  TER70  ismi  Borland  da  va 

Turbo  Pascal  7.0  da  aniqlangan  bo‘lsada,  Free  Pascal  da,  xatto  Turbo  Pascal  7.0  bilan 

moslashuvchanlik  rejimi  ulangan  bo‘lsa  ham,  aniqlanmagan.  Dasturning  yakuniy  variant  katta 

massivli Free Pascal bilan komplyatsiyalanishi kerak, deb tahlil qilamiz, sozlash uchun Borland 

Pascal ning biz ko‘nikkan muhiti qo‘llaniladi. U holda dasturning 

const MAXN=

500




const MAXN=

10000


;

 

fragmentini  qanday  o‘zgarishlar  bo‘lmasin  Borland  Pascal  {MaXN:500}  da  ham  Free  Pascal 



dan ham komplyatsiyalanishi mumkin.  

Keltirilgan  har  bir  ikkala  dasturni  x

^

1  o‘rniga  odiy  x  ni  yozish  mumkinligini  bilib  uni 



modifikatsiyalash kerak. 

 

2.2.4. Qavslar tillari. 

2.10-masala. Ochiluvchiva yopiluvchi kavslar(va) ketma-ketligi qavsli ifoda deyiladi. Qavsli 

ifoda agar:  

a) qavslar tengligi va bir juftda avval olingan, keyin esa yopilgan bo‘lsa 

b)qavslar ichidagi barcha qavslar yopilganidan keyin qavs yopilsa to‘g‘ri deyiladi. 

Qavslar to‘g‘ri ifoda hosil qilishi aniqlansin. 

Kirish.  balance.txt  matning  har  bir  qatorida  alohida  test  mavjud;  qatorlar  miqdori 

cheklanmagan, tugallanish begisi bo‘lib matn oxiri hisoblanadi. Qatorlar uzilishlari 1 dan 2*10

9

 

gacha. Qatorlarda kavslardan farq qiluvchi simvollar yo‘qligi kafolatlangan. 



Chiqish. Testlarga mos keluvchi 0 va 1 simvollardan (balance.sol fayilida) qator (testdagi 

ifoda to‘g‘ri bo‘lsa 1, aksincha bo‘lsa 0). 



Misol. 

Kirish ( ) ( ) chiqish 1100 

(( )) ( ) 

(()))  


() ) (  

Masalani  yechish.  NOpen  hisoblagichini  ishlatamiz:  qatorning  o‘qilgan  qismidagi  ochiq  va 

hali  yopilmagan  qavslar  miqdori  unung  qiymati  bo‘ladi.  Har  bitta  qator  boshida  NOpen=0

Qavsli  ifodali  qatorni  bitta  simvol  bo‘yicha  o‘qiymiz,  bunda  har  bir  ‘c’  bilan  NOpenni  1  ga 

ortiriladi  va  har  bir  ‘)’  bilan  NOpen  1  ga  kamayadi.  Agar  oldin  ochilmagan  yakunlovchi  qavs 

paydo  bo‘lsa,  unda  NOpen<0  ni  olamiz.  Ushbu  vaziyatda  ifoda  noto‘g‘ri-qator  oxirini, 

keyinchalik  tahlil  qilmasdan,  o‘tkazish  mumkin.  Agar  qator  tugallangandan  keyin  NOpen  ≠0 

bo‘lsa, qavslar tengligi miqdori bajarilmagan, ya’ni ifoda noto‘g‘ri ifodaning to‘g‘rilik belgisini 

bo‘lingan  ok  o‘zgaruvchisida  eslab qolamiz.  Qatorni  qayta  ishlagandan  keyin  ord(ok)  natijasini 

chiqaramiz. Keltirilgan harakatlarni quyidagi dasturda aniqlashtiramiz: 


Download 13,56 Mb.

Do'stlaringiz bilan baham:
1   ...   49   50   51   52   53   54   55   56   ...   99




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish