Uz augšu

Mājaslapa

Kursi:
Algoritmi un programmēšana,
Programmatūras izstrādes pamati

Pēdējās izmaiņas 09.04.2018.

Pārbaudes darbu REZULTĀTI
Laboratorijas darbu scenāriji

Laboratorijas darbu noteikumi (Algoritmi un programmēšana)

Laboratorijas darbu noteikumi (Programmatūras izstrādes pamati)

Mācību materiāli

Aktuālā informācija:

Lekciju tēmas un noteikumi rudens semestrī 2018P (Programmatūras izstrādes pamati):

Ned. nr.

Lekciju datumi

 Lekciju tēmas un kontroldarbi

*

1.

06. II

Plūsmas un faili. Teksta faili.

US

1.

09. II

Objektorientētā programmēšana: mantošana.

US

2.

13. II

Saraksts un C++ datu struktūra STL list.

JZ

2.

16. II

Datu struktūras un algoritmi.

GA

3.

20. II

STL bibliotēkas pamatprincipi un pamatelementi: konteineri, iteratori, algoritmi.

JZ

3.

23. II

Datu struktūras un algoritmi.

GA

4.

27. II

Dinamiskas datu struktūras. Saistītais saraksts.

JZ

4.

02. III

Datu struktūras un algoritmi.

GA

5.

06. III

Vārdnīca un C++ datu struktūra STL map.

JZ

5.

09. III

Datu struktūras un algoritmi.

GA

6.

13. III

Dinamisku datu struktūru realizācija objektorientēti. Saistītais saraksts kā klase. Dinamisks masīvs kā klase.

US

6.

16. III

Datu struktūras un algoritmi.

GA

7.

20. III

Lielais kontroldarbs 1. (STL list, STL map, saistītais saraksts, teksta faili)

JZ

7.

23. III

Datu struktūras un algoritmi.

GA

8.

03. IV

Bināru failu apstrāde.

US

8.

06. IV

Datu struktūras un algoritmi.

GA

9.

10. IV

Datu struktūras un algoritmi.

GA

9.

13. IV

Izņēmumsituāciju apstrāde.

JZ

10.

17. IV

Klases veidnes C++. Saistītais saraksts kā klases veidne. Dinamisks masīvs kā klases veidne.

US

10.

20. IV

Objektorientētās programmēšanas C++ specifiskas tēmas: operatoru pārslogošana, daudzkāršā mantošana.

US

11.

24. IV

Lielais kontroldarbs 2. (mantošana, dinamiska datu struktūra kā klase, bināri faili)

US

11.

27. IV

Datu struktūras un algoritmi.

GA

12.

01. V

–

 

12.

04. V

–

 

13.

08. V

Datu struktūras un algoritmi.

GA

13.

11. V

Datu struktūras un algoritmi.

GA

14.

15. V

Programmatūras darbināšanas platformas. Darbināšana tiešā veidā, linkošana. Virtuālās mašīnas, interpretatori.

JZ

14.

18. V

Datu struktūras un algoritmi.

GA

15.

22. V

Programmatūras arhitektūras. Autonomas, domēnspecifiskas, platformspecifiskas programmas. Klienta-servera modelis. Servisu orientēta arhitektūra.

JZ

15.

25. V

Datu struktūras un algoritmi.

GA

16.

29. V

Platformu neatkarīga programmatūra. Paralēlās programmēšanas pamati.

JZ

16.

01. VI

Noslēguma nodarbība

US

* US – prof. Uldis Straujums, JZ – prof. Jānis Zuters, GA – prof. Guntis Arnicāns

 

Vērtēšana un datumi

·         Trīs laboratorijas darbu atrādīšana klātienē (21%):

o   teksta faili, 22. II

o   STL list un saistītais saraksts, 15. III

o   STL map, bināri faili, 12. IV

·         Divas uzdevumu serverī iesūtītas programmas par datu struktūrām/algoritmiem (14%):

o   6. IV

o   11. V

·         Vairāki mazie kontroldarbi lekciju laikā par datu struktūrām/algoritmiem (5%)

·         Divi lielie kontroldarbi par C++ programmēšanu (20%)

·         Rakstisks eksāmens (viens teorētiskais jautājums un 3 uzdevumi, 120`) 40%

 

Lekciju tēmas rudens semestrī 2017R (Algoritmi un programmēšana)

Ned. nr.

Lekcijas datums

 Lekcijas un kontroldarbi

Laboratorijas darbu atrādīšana

1.

2017.09.05.

Algoritms, tā īpašības un pieraksta metodes. Pseidokods. Algoritms un programma. Programmu veidošana un programmu darbināšana. Mainīgie un datu tipi. Izpildāmās darbības (operācijas) un to izpildes secība (kontroles konstrukcijas). Skaitliskas izteiksmes. Programmēšanas stils.

 

2.

2017.09.12.

Sistēmas un skriptu valodas, kompilatori un interpretatori. Valodas C++ un JavaScript. Programmu darbināšanas platformas. Programmēšanas vides un rīki. Datu ievade, izvade un piešķiršana. Zarošanās operators if. Programmu testēšana un atkļūdošana.

 

3.

2017.09.19.

C++ programmas struktūra. JavaScript programmas struktūra. Loģiskās izteiksmes. Skaitliskie un loģiskie datu tipi. Statiskā tipizācija C++ un dinamiskā tipizācija JavaScript. Cikls ar skaitītāju.

 

4.

2017.09.26.

Cikli. Funkcijas. Parametru veidi (vērtība, reference) un vērtības atgriešanas mehānisms. Funkcijas darbināšana un datu apmaiņa ar funkciju. Noklusētie un konstantie parametri.

 

5.

2017.10.03.

KD1 45` (zarošanās, loģiskas izteiksmes, cikls ar skaitītāju).
Lekcija: Vairāku līmeņu zarošanās. Izvēles operators switch. Kondicionālais(?:) operators. Funkciju pārslogošana. Parametru skaita un tipu dinamisms JavaScript.

 

6.

2017.10.10.

Masīvi C++ un JavaScript. Funkcijas deklarācijas nodalīšana no realizācijas C++ un programmas koda izvietošana vairākos failos.

Uzdevums A (zarošanās un cikli)

7.

2017.10.17.

KD2 90` (cikli, funkcijas).

 

8.

2017.10.24.

Simboli. C++ zema līmeņa simbolu virknes char*.  Augsta līmeņa simbolu virknes string valodā C++. Simbolu virknes valodā JavaScript. Norādes, adreses un references. Masīvi un norādes.

Uzdevums B (cikli un funkcijas)

9.

2017.10.31.

Dinamiskie masīvi C++. Iebūvētais dinamiskais masīvs STL::vector valodā C++. Masīvs kā funkcijas parametrs.

 

10.

2017.11.07.

Rekursija. Funkciju veidne C++ un parametru dinamisms JavaScript.

 

11.

2017.11.14.

KD3 45` (masīvi).
Lekcija: Objektorientētās programmēšanas principi.

 

12.

2017.11.21.

Objektorientētā programmēšana. Konstruktors un destruktors. Noklusētais konstruktors. Klases elementu pieejamība (public, private). Metožu realizācijas ārpus klases.

Uzdevums C (masīvi un funkcijas)

13.

2017.11.28.

Objektorientētā programmēšana: Kopijas konstruktors. Vairākdimensiju parastie masīvi C++. Vairākdimensiju masīvi, izmantojot STL::vector datu tipu.

 

14.

2017.12.05.

KD4 90` (simbolu virknes, objektorientētā programmēšana).

Uzdevums D (OOP un simbolu virknes)

15.

2017.12.12.

Programmēšanas stils. Programmēšanas valodas konstrukciju sintakses apraksts. Vairākdimensiju dinamisks zema līmeņa masīvs C++.

 

16.

2017.12.19.

Objektorientētā modelēšana. UML klašu diagrammas.

 

 

 

KD5. 2018. gada pavasara 1. kontroldarba treniņuzdevumi "Programmatūras izstrādes pamati"

A. Definēt jēdzienu, dot piemēru. (Te būs teorētiskais jautājums.)".

B. Dots teksta fails f. Uzrakstīt funkciju valodā C++, kas veic noteiktu darbību ar šo failu, nolasot faila saturu pa vienai rindiņai. Drīkst pieņemt, ka fails beidzas ar jaunas rindiņas simbolu. (Programmas darbības laikā nevienā brīdī viss faila saturs nedrīkst atrasties operatīvajā atmiņā!) Drīkst pieņemt, ka funkcijai tiek padots jau veiksmīgi lasīšanas režīmā atvērts fails.

B1[6]. Funkcija int countDigitLines (fstream &f) noskaidro, cik failā ir tādu rindiņu, kas satur vismaz vienu ciparu.

B2[8]. Funkcija int copyDigitLines (fstream &f, fstream &g) pārraksta failā g (kas ir atvērts rakstīšanas režīmā) visas tās rindiņas, kas satur vismaz vienu ciparu.

C. Uzrakstīt C++ programmu. Dots netukšs vienvirziena saistītais saraksts (reprezentēts gan ar norādi uz pirmo, gan ar norādi uz pēdējo elementu) no int.

Uzrakstīt funkciju, kas apstrādā sarakstu.

C1[5]. Metode bool monotonousstrong(), kas noskaidro, vai saraksts sakārtots stingri augoši (katrs nākamais elements ir lielāks).

C2[7]. Metode bool monotonousweak(), kas noskaidro, vai saraksts sakārtots vāji augoši (drīkst būt vienādi elementi).

C3[8]. Metode void insertlast2(int n), kas ievieto jaunu elementu ar vērtību n pirms otrā elementa no beigām, ja tāds eksistē (t.i. sarakstā ir vismaz 2 elementi).

Piemēri

{1,2,3,4,5}

{1,2,3,3,4}

{7,6}

{1}

A1()

1

0

0

0

A2()

1

1

0

0

A3(99)

{1,2,3,99,4,5}

{1,2,3,3,4}

{99,7,6}

{1}

D. Uzrakstīt C++ programmu. Dota int virkne, kas izveidota ar konteineru klasi STL::list.

Uzrakstīt funkciju, kas apstrādā šo virkni.

Uzdevumi tādi paši, kā C.

 

 

KD4.

B. Izveidot C++ funkciju, kā arī funkcijas izsaukumu ar nepieciešamo kontekstu zema līmeņa simbolu virknes apstrādei.

B1[5]. Funkcija isUnsignedInteger, kas pasaka, vai simbolu virkne satur tikai ciparus, piemēram, “123”. Šajā un nākošajā uzdevumā simbolu virknē jābūt vismaz vienam ciparam.

B2[7]. Funkcija isInteger, kas pasaka, vai simbolu virkne satur tikai ciparus, kam priekšā neobligāti ir “-” vai “+”, piemēram, “123”, “-456”, “+9”.

B3[9]. Funkcija splitWords, kas pārraksta no pirmās simbolu virknes uz otro visas burtu virknes, atdalot tās ar komatu, piemēram, “abc123CD.=5xyz;p” →“abc,CD,xyz,p”.

C[9]. Izveidot C++ klasi, kur visi lauki ir privāti, balstoties uz parādīto kodu un komentāriem par tā darbību. Klase account realizē konta atlikuma un pēdējo 5 konta darbību saglabāšanu un izdruku hronoloģiskā secībā. Naudas summas tiek norādītas un glabātas centos, bet izdrukātas, vēlams, formatētas ar diviem cipariem aiz decimālās zīmes. Vismaz vienai metodei jābūt realizētai ārpus klases galvas.

    account a;

    a.printstatus(); // 0.00

    a.printhistory(); // --no data--

    cout<<a.change(550)<<endl; // 1 - veiksmīgi pievieno 5.50

    cout<<a.change(-70)<<endl; // 1 - veiksmīgi noņem 0.70

    cout<<a.change(-700)<<endl; // 0 - nepietiek naudas; nenotiek

    cout<<a.change(-100)<<endl; // 1 - veiksmīgi noņem 1.00

    a.printstatus(); // 3.80

    a.printhistory(); // 5.50 -0.70 -1.00

    a.change(-110); // veiksmīgi noņem 1.10

    a.change(40); // veiksmīgi pievieno 0.40

    a.change(60); // veiksmīgi pievieno 0.60

    a.printstatus(); // 3.70

    a.printhistory(); // -0.70 -1.00 -1.10 0.40 0.60

 

KD3.

A. Izveidot C++ funkciju, kas apstrādā veselu skaitļu masīvu A garumā N, un dot funkcijas izsaukšanas kontekstu:

A1[5]. Aizpildīt masīvu ar pirmajiem N Fibonači skaitļiem (F(0)=1; F(1)=1); F(n)=F(n-1)+F(n-2)). Piemērs. N=8; Rezultāts: A={1,1,2,3,5,8,13,21}.

A2[9]. Noskaidrot, vai masīva skaitļu vidējā aritmētiskā vērtība ir vesels skaitlis. Piemērs #1. A={2,4,9}. Atbilde: jā (jo avg(A)=5). Piemērs #2. A={1,2,4}. Atbilde: nē (jo avg(A)=2.33333).

B. Izveidot C++ programmu, kas apstrādā veselu skaitļu masīvus:

B1[6]. Doti divi veselu skaitļu masīvi vienādā garumā. Noskaidrot, vai visi otrā masīva elementi ir lielāki par attiecīgajiem pirmā masīva elementiem. Piemērs #1. A={2,4,9},B={3,5,10}. Atbilde: jā. Piemērs #2. A={2,4,9},B={3,5,8}. Atbilde: nē (jo 8 nav lielāks par 9).

B2[8]. Dots 2D veselu skaitļu kvadrātisks masīvs. Noskaidrot maksimālo summu starp rindām un kolonnām, kopā ņemot. Piemērs. A={{1,2,9},{3,7,6},{8,4,5}}. Atbilde: 20 (pēdējā kolonna).

B3[9]. Dots veselu skaitļu masīvs. Noskaidrot, cik unikālu vērtību atrodas šajā masīvā. Piemērs. A={4,5,6,5,4,5,6,7}. Atbilde: 4 (4,5,6,7).

 

KD2.

B. Izveidot C++ funkciju, kā arī parādīt tās izsaukšanas kontekstu:

B1[5]. Funkcija ar trīs parametriem x, y un z, kas atgriež maksimālo no skaitļiem. Piemērs. Dots: x=5, y=6, z=4; atgriež 6.

B2[8]. Funkcija ar trīs parametriem x, y un z, kas atgriež skaitli, kurš ir vidējais starp skaitļiem pēc lieluma. Piemērs. Dots: x=5, y=6, z=4; atgriež 5.

B3[9]. Funkcija trīs parametriem x, y un z, kas pieņem divus veselus skaitļus x un y, parametrā z ievieto x un y dalījumu, bet atgriež true, ja dalījums ir vesels skaitlis, bet false, ja nav vesels skaitlis. Piemērs #1. Dots: x=20, y=4; Pēc izpildes: z=5.0, atgriež true. Piemērs #2. Dots: x=20, y=3; Pēc izpildes: z=6.66667, atgriež false.

C. Izveidot C++ programmu (izmantot tikai skaitliskas operācijas):

C1[5]. Dots naturāli skaitļi N un c. Noskaidrot, cik ciparu c ir skaitļa N decimālajā pierakstā. Piemērs. N = 164528963, c = 6; atbilde: 2.

C2[9]. Dots naturāls skaitlis N. Izmest (no pozīcijas viedokļa) vidējo ciparu, ja tāds eksistē. Piemērs #1. N = 1256; atbilde: 1256 (nemainās). Piemērs #2. N = 31876; atbilde: 3176 (izmet 8).

D. Izveidot JavaScript programmu atbilstoši uzdevumu C nosacījumiem.

 

KD1.

A1[5]. Dots vesels skaitlis N. Noskaidrot, kurai no 3 grupām pieder šis skaitlis: (1) divciparu, (2) trīsciparu, (3) cits. Piemērs #1. N = 99; atbilde = divciparu. Piemērs #2. N = -999; atbilde: trīsciparu Piemērs #3. N = -5; atbilde: cits.

A2[9]. Dots mēneša datums dat=1..31, šī mēneša kopējais dienu skaits m=28..31, kā arī šī datuma nedēļas diena nd=1..7. Noskaidrot, kāda nedēļas diena šim datumam būs nākamajā mēnesī. Piemērs (par šodienas datumu). dat=3, m=31, nd=2; atbilde = 5.

B1[5]. Dots divi veseli skaitļi M un N, kas nosaka veselu skaitļu intervālu. Noskaidrot, cik dotajā intervālā ir pāra skaitļu, kas nebeidzas ar 0. Piemērs. M=95,N=105; atbilde = 4 (jo 96,98,102,104).

B2[9]. Dots divi veseli skaitļi M un N, kas nosaka veselu skaitļu intervālu. Noskaidrot, cik dotajā intervālā ir tādu skaitļu, kuru pēdējie divi cipari ir vienādi. Piemērs. M=80,N=130; atbilde = 5 (jo 88,99,100,111,122).

 

Eksāmena kārtība

Eksāmens sastāv no 2 daļām: rakstiskās un mutiskās.

Vispirms notiek rakstiskā daļa, kad tiek rēķināti divi uzdevumi (uzdevumus var izvēlēties ar dažādu grūtības pakāpi). Rakstiskā daļa notiek visiem uzreiz, tāpēc visiem uz eksāmenu jānāk jau pašā sākumā. Rakstiskajā daļā var izmantot jebkādus drukātus palīglīdzekļus bez ierobežojuma. Rakstiskās daļas ilgums 45 minūtes.

Pēc rakstiskās daļas sākas mutiskā daļa, kurā studenti pa vienam velk biļeti, kurā ir 2 jautājumi no jautājumu saraksta, kas publicēts zemāk. Bez tam mutiskajā daļā pretendents prezentē rakstiskajā daļā uzrakstīto. Biļešu vilkšana notiek rakstiskās daļas darbu nodošanas secībā. Garantētais gatavošanās laiks biļetes atbildēšanai – 20 minūtes. Gatavošanās laikā drīkst (un ir vēlams) veikt pierakstus, kurus drīkst izmantot, biļeti atbildot. Mutiskās daļas laikā, atšķirībā no rakstiskās daļas, nav atļauts izmantot palīglīdzekļus.

Eksāmena atzīme ir zināma uzreiz pēc mutiskās daļas beigām. Ja ir nokārtoti visi laboratorijas darbi, tad uzreiz ir zināma arī gala atzīme. Par katru neieskaitīto laboratorijas darbu automātiski tiek noņemta viena balle no gala atzīmes. Uz eksāmenu drīkst nākt pirms laboratorijas darbi ir nokārtoti sev vēlamajā apjomā – šajā gadījumā vienkārši uzreiz nebūs gala atzīmes vai tā iespējams būs zemāka nekā gaidīts. Eksāmenu drīkst kārtot atkārtoti, bet tikai norādītajos eksāmena laikos.

Neaizmirstiet pārliecināties, vai šajā vietnē pie rezultātiem, bet galvenais – LUIS sistēmā ir publicēta jūsu gala atzīme – pasniedzējs arī var kļūdīties.

  • Uz eksāmenu visiem ir jānāk pl. 9:00, jo sākumā ir visiem kopēja eksāmena rakstiskā daļa;
  • Var brīvi izvēlēties, kurā datumā kārtot eksāmenu, iepriekš par to nepaziņojot;

Eksāmena jautājumi

Šeit pieejami jautājumi, kas tiks iekļauti programmēšanas eksāmenu teorētiskās daļas biļetēs:

Dažas noderīgas saites

http://www.cplusplus.com/ (The C++ Resources Network)

http://www.cppreference.com/ (C/C++ Reference)

http://www.sgi.com/tech/stl/stl_index.html (The Standard Template Library)