Research Papers
Technologies
Computers, Consumer Electronics
Programmēšanas valodas. Pascal. Spēle "Sudoku"-
Programmēšanas valodas. Pascal. Spēle "Sudoku"
Nr. | Chapter | Page. |
I. | VISPĀRĒJĀ DAĻA (Ieraksti) | 4 |
II. | SPECIĀLĀ DAĻA | 9 |
II.1. | Uzdevuma nostādne | 9 |
II.2. | Ieejas dati | 9 |
II.3. | Izejas dati | 10 |
II.4. | Algoritma apraksts | 10 |
II.4.1. | Galvenā programma | 10 |
II.4.2. | Procedūra playsnd | 11 |
II.4.3. | Procedūra UpdateProgressBar | 11 |
II.4.4. | Procedūra MouseInit | 11 |
II.4.5. | Funkcija CanInput | 11 |
II.4.6. | Procedūra DrawDigit | 11 |
II.4.7. | Procedūra FillArray | 11 |
II.4.8. | Procedūra DrawSelect | 12 |
II.4.9. | Procedūra DrawHint | 12 |
II.4.10. | Procedūra DrawGrid | 12 |
II.4.11. | Procedūra GridAdd | 12 |
II.4.12. | Procedūra CellDel | 13 |
II.4.13. | Procedūra CellDraw | 13 |
II.4.14. | Procedūra GameStart | 13 |
II.4.15. | Procedūra GameRules | 14 |
II.4.16. | Procedūra GameScores | 14 |
II.4.17. | Procedūra MenuInit | 14 |
II.4.18. | Procedūra MenuMain | 15 |
II.5. | Lietotāja instrukcija | 15 |
III. | PIELIKUMI | 17 |
III.1. | Programmas teksts | 17 |
III.2. | Algoritma blokshēma | 27 |
III.2.1. | Pamatprogrammas blokshēma | 27 |
III.2.2. | Procedūra playsnd | 28 |
III.2.3. | Procedūra UpdateProgressBar | 29 |
III.2.4. | Procedūra MouseInit | 30 |
III.2.5. | Funkcija CanInput | 31 |
III.2.6. | Procedūra DrawDigit | 32 |
III.2.7. | Procedūra DrawGrid | 33 |
III.2.8. | Procedūra GridAdd | 34 |
III.2.9. | Procedūra GameStart | 35 |
III.2.10. | Procedūra GameRules | 38 |
III.2.11. | Procedūra GameScores | 39 |
III.3. | Ieejas/izejas datu piemērs | 40 |
Radītāju vērtības var inkrementēt un dekrementēt, izmantojot atbilstoši Inc un Dec, turklāt tipizētais radītājs tiek palielināts vai samazināts par viņam atbilstoša tipa izmēra vērtību. Praksē tas nozīmē ka, ja atmiņā pēc kārtas tiek izvietoti vienāda tipa mainīgie, un radītājs norāda uz pirmo, tad pēc vērtības palielināšanas ar Inc procedūras palīdzību radītājs noradīs uz nākamo mainīgo. Ar radītājiem atļauts lietot salīdzināšanu un vienādību (=) un nevienādību (<>), citi nav pieļaujami.
Tā kā palaižot programmu rādītāji satur norādi uz nil – rādītāju konstante, kas norāda uz adresi atmiņā $0000:$0000, šos rādītājus vajag inicializēt ar procedūru New1. Procedūra New atrod brīvo atmiņas apgabalu, kur var glabāt nepieciešamos datus un rādītājā saglabā šī atmiņas apgabala adresi, ja vairs brīvās atmiņas nav, tad tiek radīta izpildlaika kļūda un programma tiek pārtraukta. Aizņemto atmiņu var atbrīvot ar Dispose2 palīdzību. Gan New, gan Dispose ir tikai viens parametrs – rādītājs, ar kuru tiek veikta atbilstoša darbība.
2. piemērā ir vienkārša programma ar rādītāju izmantošanu.
type
PInteger = ^Integer; {izveidojam PInteger tipu, kas būs rādītāja tips, kas norāda uz Integer skaitļiem}
var
a: PInteger; {paziņojam PInteger rādītāju}
b: ^Integer; {paziņojam rādītāju, kas norādīs uz Integer tipa skaitli}
begin
New(a);
New(b); {izveidojam jaunus dinamiskos mainīgos}
a^ := 1; {a := 1; rakstīt nedrīkst, jo a ir rādītājs nevis Integer}
b^ := 2;
Inc(a^);
WriteLn('a = ', a^); {izvada a = 2}
Dispose(a);
Dispose(b); {atbrīvojam atmiņu}
{WriteLn('b = ', b^); radis kļūdu, jo b atkal norāda uz nil}
end.
Pastāv iespēja izmantot netipizētos radītājus, kas nenorāda ne uz kāda noteikta tipa dinamisko mainīgo, bet vienkārši uz rezervēto atmiņas apgabalu. Šādi rādītāji ir noderīgi gadījumos, kad rezervēt atmiņu nenoteiktam datu tipam, piemērām, strādājot ar grafiku to ir ērti izmantot attēla saglabāšanai. Šādus rādītājus var sadaļā apzīmē vienkārši ar Pointer. Tā kā par šiem nav zināmi tādi dati, ka norādāmo dinamisko datu izmērs, tad tos nav iespējam izmantot ar New un Dispose procedūrām. To vietā ir jāizmanto GetMem3 atmiņas rezervēšanai, un FreeMem4 atmiņas atbrīvošanai. Abām procedūrām ir divi vienādi parametri. Pirmais parametrs ir rādītājs, un otrs ir atmiņas apgabala izmērs, uz kuru norāda šis rādītājs. Programmētājam pašam ir jāseko, lai gan GetMem, gan FreeMem parametros tiktu pierakstīts vienāds izmērs ar atbilstošu rādītāju.
3. piemērā ir programmā, kurā ir pielietots netipizēts rādītājs kopumā ar GetImage procedūru.
uses Graph;
var
Gd, Gm: Integer;
P: Pointer; {netipizētais rādītājs}
Size: Word;
begin
Gd := Detect;
InitGraph(Gd, Gm, ''); {grafikas inicializācija}
if GraphResult <> grOk then
Halt(1); {kļūdas gadījuma parstraucam programmu}
Bar(0, 0, GetMaxX, GetMaxY); {nokrāsojam visu ekrānu}
Size := ImageSize(10, 20, 30, 40); {iegāstam attēla izmēru}
GetMem(P, Size); {rezervejam atmiņu attēla saglabāšanai}
GetImage(10, 20, 30, 40, P^); {saglabājam attēlu}
Readln; {gaidam ENTER}
ClearDevice; {attīram ekrānu}
PutImage(100, 100, P^, NormalPut); {izvadam saglabāto attēlu}
Readln; {gaidam ENTER}
FreeMem(P, Size); {atbrīvojam atmiņu}
CloseGraph; {atslēdzam grafiku}
end.
Darbam ar dinamisko atmiņu ir paredzētas vēl divas procedūras. Ar procedūru Mark1 var saglabāt dinamiskās atmiņas stāvokli. Šai procedūrai tiek norādīts viens rādītājs, kurā arī tiks saglabāta informācija par dinamiskās atmiņas stāvokli. Lai atgrieztu atmiņu saglabātajā stāvoklī jāizmanto procedūra Release2, kurai kā vienīgais parametrs tiek norādīts rādītājs, kurā tika saglabāts atmiņas stāvoklis. Kopā ar šīm abām procedūrām nevajadzētu lietot procedūras FreeMem un Dispose, jo tas var radīt konfliktus.…
RVT, Dtortehnikas nodaļa. Patstāvīgais darbs priekšmetā: Programmēšanas valodas, Pascal. “Spēle SUDOKU”, 2005.g.
- "Prolog" programmēšanas valoda - elementu saraksta apstrāde
- Programmēšanas valodas. Pascal. Spēle "Sudoku"
- Programmēšanas valodu raksturojums
-
You can quickly add any paper to your favourite. Cool!Programmēšanas valodu raksturojums
Research Papers for secondary school3
-
"Prolog" programmēšanas valoda - elementu saraksta apstrāde
Research Papers for secondary school6
-
Programmēšanas valodaPHP
Research Papers for secondary school10
-
Programmēšanas valodas C++ izmantošana datorspēļu izstrādē
Research Papers for secondary school16
-
Pascal
Research Papers for secondary school28