Προγραμμαηιζηική άζκηζη: Η γλώζζα προγραμμαηιζμού Ciscal Η Ciscal είλαη κηα κηθξή γιώζζα πξνγξακκαηηζκνύ. Παξόιν πνπ νη πξνγξακκαηηζηηθέο ηεο ηθαλόηεηεο είλαη κηθξέο, ε εθπαηδεπηηθή απηή γιώζζα πεξηέρεη πινύζηα ζηνηρεία θαη ε θαηαζθεπή ηνπ κεηαγισηηηζηή ηεο έρεη λα παξνπζηάζεη αξθεηό ελδηαθέξνλ, αθνύ πεξηέρνληαη ζε απηήλ πνιιέο εληνιέο πνπ ρξεζηκνπνηνύληαη από άιιεο γιώζζεο, θαζώο θαη θάπνηεο πξσηόηππεο. Η Ciscal πεξηέρεη ζπλαξηήζεηο θαη δηαδηθαζίεο, κεηάδνζε παξακέηξσλ κε αλαθνξά θαη ηηκή, αλαδξνκηθέο θιήζεηο, θιπ. Επίζεο, επηηξέπεη θώιηαζκα ζηε δήισζε ζπλαξηήζεσλ θαη δηαδηθαζηώλ θάηη πνπ ιίγεο γιώζζεο ππνζηεξίδνπλ (ην ππνζηεξίδεη ε Pascal, δελ ην ππνζηεξίδεη ε C). Από ηελ άιιε όκσο πιεπξά, ε Ciscal δελ ππνζηεξίδεη βαζηθά πξνγξακκαηηζηηθά εξγαιεία όπσο ε δνκή for θαζώο θαη πξαγκαηηθνύο αξηζκνύο θαη ζπκβνινζεηξέο. Οη παξαιήςεηο απηέο έρνπλ γίλεη ώζηε λα απινπζηεπηεί ε δηαδηθαζία θαηαζθεπήο ηνπ κεηαγισηηηζηή, κία απινύζηεπζε όκσο πνπ έρεη λα θάλεη κόλν κε ηε κείσζε ησλ γξακκώλ ηνπ θώδηθα θαη όρη κε ηε δπζθνιία θαηαζθεπήο ηνπ, αθνύ νη δνκέο πνπ ππνζηεξίδεη είλαη απηέο πνπ παξνπζηάδνπλ πεξηζζόηεξν ελδηαθέξνλ όζνλ αθνξά ηελ πινπνίεζε, ελώ ε δηάθξηζε αλάκεζα ζε πξαγκαηηθνύο θαη αθεξαίνπο αξηζκνύο δελ έρεη λα πξνζθέξεη θάηη εθπαηδεπηηθά. Λεκηικές μονάδες Τν αιθάβεην ηεο Ciscal απνηειείηαη από ηα κηθξά θαη θεθαιαία γξάκκαηα ηεο ιαηηληθήο αιθαβήηνπ («Α»,,«Ζ» θαη «a»,,«z»), ηα αξηζκεηηθά ςεθία («0»,,«9»), ηα ζύκβνια ησλ αξηζκεηηθώλ πξάμεσλ («+», «-», «*», «/»), ηνπο ηειεζηέο ζπζρέηηζεο («<», «>», «=», «<=», «>=», «<>», ην ζύκβνιν αλάζεζεο «:=», ηνπο δηαρσξηζηέο («;», «,») θαζώο θαη ηα ζύκβνια νκαδνπνίεζεο (,,«(»,«)»,«[»,«]») θαη δηαρσξηζκνύ ζρνιίσλ («\*»,«*\»). Μεξηθέο ιέμεηο είλαη δεζκεπκέλεο: and declare do else enddeclare exit procedure function print call if in inout not select program or return while default 1
Οη ιέμεηο απηέο δε κπνξνύλ λα ρξεζηκνπνηεζνύλ σο κεηαβιεηέο. Οη ζηαζεξέο ηεο γιώζζαο είλαη αθέξαηεο ζηαζεξέο πνπ απνηεινύληαη από πξναηξεηηθό πξόζεκν θαη από κία αθνινπζία αξηζκεηηθώλ ςεθίσλ. Τα αλαγλσξηζηηθά ηεο γιώζζαο είλαη ζπκβνινζεηξέο πνπ απνηεινύληαη από γξάκκαηα θαη ςεθία, αξρίδνληαο όκσο από γξάκκα. Ο κεηαγισηηηζηήο ιακβάλεη ππόςε ηνπ κόλν ηα ηξηάληα πξώηα γξάκκαηα. Οη ιεπθνί ραξαθηήξεο (tab, space, return) αγλννύληαη θαη κπνξνύλ λα ρξεζηκνπνηεζνύλ κε νπνηνλδήπνηε ηξόπν ρσξίο λα επεξεάδεηαη ε ιεηηνπξγία ηνπ κεηαγισηηηζηή, αξθεί βέβαηα λα κε βξίζθνληαη κέζα ζε δεζκεπκέλεο ιέμεηο, αλαγλσξηζηηθά, ζηαζεξέο, ή άιιεο δεζκεπκέλεο ιέμεηο. Τν ίδην ηζρύεη θαη γηα ηα ζρόιηα, ηα νπνία πξέπεη λα βξίζθνληαη αλάκεζα ζηα ζύκβνια \* θαη *\. Τύποι και δηλώζεις μεηαβληηών Ο κνλαδηθόο ηύπνο δεδνκέλσλ πνπ ππνζηεξίδεη ε Ciscal είλαη νη αθέξαηνη αξηζκνί. Οη αθέξαηνη αξηζκνί πξέπεη λα έρνπλ ηηκέο από 32768 έσο 32767. Η δήισζε γίλεηαη κε ηελ εληνιή declare. Αθνινπζνύλ ηα νλόκαηα ησλ αλαγλσξηζηηθώλ ρσξίο θακία άιιε δήισζε, αθνύ γλσξίδνπκε όηη πξόθεηηαη γηα αθέξαηεο κεηαβιεηέο. Οη κεηαβιεηέο ρσξίδνληαη κεηαμύ ηνπο κε θόκκαηα. Τν ηέινο ηεο δήισζεο ησλ κεηαβιεηώλ γίλεηαη κε ηελ εληνιή enddeclare. Τελεζηές και εκθράζεις Η πξνηεξαηόηεηα ησλ ηειεζηώλ από ηε κεγαιύηεξε ζηε κηθξόηεξε είλαη: (1) Μνλαδηθνί «not» (2) Πνιιαπιαζηαζηηθνί «*», «/» (3) Μνλαδηθνί πξνζζεηηθνί «+», «-» (4) Δπαδηθνί πξνζζεηηθνί «+», «-» (5) Σρεζηαθνί «=», «<», «>», «<>», «<=», «>=» (6) Λνγηθνί «and», «or» Ενηολές Εθρώξεζε Id := expression Χξεζηκνπνηείηαη γηα ηελ αλάζεζε ηεο ηηκήο κίαο κεηαβιεηήο ή κίαο ζηαζεξάο, ή κίαο έθθξαζεο ζε κία κεηαβιεηή. 2
Απόθαζεο if (condition)... [ else... ] Η εληνιή απόθαζεο εθηηκάεη εάλ ηζρύεη ε ζπλζήθε condition θαη εάλ πξάγκαηη ηζρύεη εθηεινύληαη νη εληνιέο πνπ αθνινπζνύλ. Τν else δελ απνηειεί ππνρξεσηηθό ηκήκα ηεο εληνιήο θαη γη απηό βξίζθεηαη ζε αγθύιε. Οη εληνιέο πνπ ην αθνινπζνύλ εθηεινύληαη εάλ ε ζπλζήθε condition δελ ηζρύεη. Τα άγθηζηξα δελ είλαη ππνρξεσηηθά, όηαλ έρνπκε κόλν κία εληνιή. Επαλάιεςεο do... while (condition) Η εληνιή επαλάιεςεο εθηειεί ηηο εληνιέο πνπ βξίζθνληαη αλάκεζα ζηα άγθηζηξα θαη ηηο επαλαιακβάλεη έσο όηνπ ε ζπλζήθε condition δελ ηζρύεη ή εθηειεζηεί ε εληνιή exit. Με ηελ εληνιή exit ε εθηέιεζε κεηαθέξεηαη έμσ από ην βξόρν. while (condition)... Η εληνιή επαλάιεςεο εθηειεί ηηο εληνιέο πνπ βξίζθνληαη αλάκεζα ζηα άγθηζηξα θαη ηηο επαλαιακβάλεη έσο όηνπ ε ζπλζήθε condition δελ ηζρύεη. Επηινγήο select (id) 1:... 2:... 3:... default:... Αλάινγα κε ηελ ηηκή ηνπ id εθηειείηαη κία από ηηο επηινγέο. Αλ id=1 ε πξώηε, αλ id=2 ε δεύηεξε, θ.ν.θ.. Αλ θακία από ηηο επηινγέο δελ ηζνύηαη κε ηελ ηηκή ηνπ id, ηόηε εθηειείηαη ε default. Πξνζνρή νη αξηζκνί πνπ εθθξάδνπλ ηηο επηινγέο πξέπεη λα μεθηλνύλ από ην 1 θαη λα είλαη ζπλερόκελνη. 3
Επηζηξνθήο return (expression) Χξεζηκνπνηείηαη κέζα ζε ζπλαξηήζεηο γηα λα επηζηξαθεί ην απνηέιεζκα ηεο ζπλάξηεζεο. Κιήζεο Σπλαξηεζεο call function_name(actual_parameters) Χξεζηκνπνηείηαη κέζα ζε ζπλαξηήζεηο γηα λα επηζηξαθεί ην απνηέιεζκα ηεο ζπλάξηεζεο. Εμόδνπ print(expression) Εκθαλίδεη ζηελ νζόλε ην απνηέιεζκα ηεο απνηίκεζεο ηνπ expression Υποπρογράμμαηα Η Ciscal ππνζηεξίδεη ζπλαξηήζεηο θαη δηαδηθαζίεο function id (formal_parameters) procedure id (formal_parameters) H «formal_parameters» είλαη ε ιίζηα ησλ ηππηθώλ παξακέηξσλ. Οη δηαδηθαζίεο θαη νη ζπλαξηήζεηο κπνξνύλ λα θσιηάζνπλ ε κία κέζα ζηελ άιιε θαη νη θαλόλεο εκβέιεηαο είλαη όπσο ηεο PASCAL. Η επηζηξνθή ηεο ηηκήο κηαο ζπλάξηεζεο γίλεηαη κε ηελ εληνιή return. Η θιήζε κηαο δηαδηθαζίαο γίλεηαη κε ηελ εληνιή call. 4
Μεηάδοζη παραμέηρων Η Ciscal ππνζηεξίδεη δύν ηξόπνπο κεηάδνζεο παξακέηξσλ: (1) κε ζηαζεξή ηηκή. Δειώλεηαη κε ηε ιεθηηθή κνλάδα in. Αιιαγέο ζηελ ηηκή ηεο δελ επηζηξέθνληαη ζηνλ θαιόλ πξόγξακκα (2) κε αλαθνξά. Δειώλεηαη κε ηε ιεθηηθή κνλάδα inout. Κάζε αιιαγή ζηε ηηκή ηεο κεηαθέξεηαη θαη ζην πξόγξακκα πνπ θάιεζε ηε ζπλάξηεζε. Μορθή προγράμμαηος program id 5