Uz augšu

Mājaslapa

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

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

Pārbaudes darbu REZULTĀTI
Laboratorijas darbu scenāriji Laboratorijas darbu noteikumi
Mācību materiāli

Aktuālā informācija 2017R:

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.

 

 

 

Papilduzdevumu tēmas kursā "Algoritmi un programmēšana" (uzdevums E).

  • Variants #1. (prasa failu un STL zināšanas)
    Uzrakstīt funkciju, kas ielasa csv faila saturu dinamiskā 2-dimensiju masīvā (vektorā):
    vector<vector<string> > getCSV (const char *filename),
    kas csv (comma separated values) faila saturu ielasa divdimensiju string masīvā.
    (kā zināms csv failus var izveidot, piemēram, no MS Excel)
    Papildus īpašības varētu būt šādas:
    -- Atdalītāju izvēle, piemēram, komats (,) vai semikols (;)
    -- lauku specifikatoru norādīšana, piemēram, ja laukā ir atdalītājs,
    lauka saturu ietver dubultpēdiņās.

  • Variants #2.
    Varētu paskatīties internetā un norealizēt kādu hash algoritmu --
    MD5 vai SHA-2, piemēram.
    To, cik daudz koda ņemt no interneta, cik pierakstīt klāt,
    vajag pašam saprātīgi izvēlēt.

KD4.

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

B1[6]. Funkcija isSameCount, kas pasaka, vai ciparu skaits virknē ir vienāds ar latīņu alfabēta burtu skaitu (piemēram, “K=/23.d”).

B2[9]. Funkcija trimSpaces, kas padotajā simbolu virknē novāc tukšumus no abām pusēm un atgriež aizvākto simbolu skaitu (piemēram, “   Hello, World!  ” pārveido par “Hello, World!” un atgriež 5).

C. Izveidot C++ klasi, kur visi lauki ir privāti, balstoties uz parādīto (klasi izmantojošo) kodu un komentāriem par tā darbību (realizācijā izmantot tikai veselu skaitļu darbības).

C1[6]. Klase powergenerator (naturālu skaitļu pakāpju ģenerators):

    powergenerator p(2); // bāze=2 (kāpinātājs=0)

    p.print(); // izdrukā: 2^0=1

    cout<<p.next()<<endl; // izdrukā 2

    cout<<p.next()<<endl; // izdrukā 4

    cout<<p.next()<<endl; // izdrukā 8

    p.print(); // izdrukā: 2^3=8

    p.reset(50); // uzstāda uz lielāko pakāpi <=50

    p.print(); // izdrukā: 2^5=32

C2[9]. Klase primegenerator (pirmskaitļu ģenerators):

    primegenerator p(6); // uzstāda uz pirmsk., kas <=6

    p.print(); // izdrukā: 5

    cout<<p.next()<<endl; // izdrukā 7

    cout<<p.next()<<endl; // izdrukā 11

    p.print(); // izdrukā: 11

    p.reset(50); // uzstāda uz lielāko pirmsk., kas <=50

    p.print(); // izdrukā: 47

    cout<<p.previous()<<endl; // izdrukā 43

 

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)