Uz augšu

Mājaslapa

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

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

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

Aktuālā informācija 2017R:

  • Sveiciens jaunajā mācību gadā!

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, kā arī parādīt tās izsaukšanas kontekstu:

A1[6]. Funkcija a1 ar diviem parametriem x un y, kas apmaina abus veselos skaitļus vietām un atgriež abu skaitļu vidējo aritmētisko vērtību. Piemērs. Dots: x=5, y=6; Pēc izpildes: x=6, y=5, atgriež 5.5.

A2[9]. Funkcija a2 ar diviem parametriem x un y, kas pieņem veselu pozitīvu skaitli x, parametrā y ievieto x bez pirmā cipara, bet atgriež x pirmo ciparu. Piemērs. Dots: x=58462; Pēc izpildes: y=8462, atgriež 5.

B. Izveidot C++ funkciju masīva apstrādei (izsaukšanas konteksts nav obligāts):

B1[7]. Funkcija b1 diviem parametriem M un n (masīvs no veseliem skaitļiem un tā garums), kas atgriež masīvā sastopamo lielāko pāra skaitli; Ja masīvā nav neviena pāra skaitļa, tad atgriež mazāko skaitli. Piemērs #1. M={1,2,3,4,5}; atgriež 4. Piemērs #2. M={11,5,3,7,9}; atgriež 3.

B2[9]. Funkcija b2 četriem parametriem M1, n1, M2, n2 (divi veselu skaitļu masīvi un to garumi), kas atgriež lielāko skaitli no M1, tādu, kas nav sastopams M2; ja visi M1 elementi sastopami arī masīvā M2, tad atgriež M1 mazāko skaitli. Piemērs #1. M1={1,2,3,4,5}, M2={4,5,6,7,8}; atgriež 3. Piemērs #2. M1={5,2,3,4}, M2={1,2,3,4,5,6}; atgriež 2.

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

A1[5]. Funkcija a1 ar diviem parametriem x un y, kas izmaina abu skaitļu vērtību par vienu vienību nulles virzienā (ja atšķiras no 0), bet atgriež sākotnējo skaitļu summu. Piemērs #1. Dots: x=5, y=6; Pēc izpildes: x=4, y=5, atgriež 11. Piemērs #2. Dots: x=0, y=6; Pēc izpildes: x=0, y=5, atgriež 6. Piemērs #3. Dots: x=5, y=-6; Pēc izpildes: x=4, y=-5, atgriež (-1).

A2[8]. Funkcija a2 ar diviem parametriem x un y, kas pieņem veselu pozitīvu skaitli x, parametrā y ievieto x pirmo pusi (pirmās puses ciparus kā vienu skaitli), bet atgriež x otro pusi (ja ciparu skaits ir nepāra skaitlis, vidējais cipars iet pie pirmās puses). Piemērs #1. Dots: x=58462; Pēc izpildes: y=584, atgriež 62. Piemērs #1. Dots: x=123456; Pēc izpildes: y=123, atgriež 456.

B. Izveidot C++ funkciju masīva apstrādei (izsaukšanas konteksts nav obligāts):

B1[6]. Funkcija b1 trim parametriem M, n (masīvs no veseliem skaitļiem un tā garums) un x, kas parametrā x ievieto masīvā sastopamo lielāko negatīvo skaitli, bet atgriež to, vai izdevies tādu atrast; Ja masīvā nav neviena negatīva skaitļa, tad x vērtība ir 0. Piemērs #1. M={1,2,3,4,5}; Pēc izpildes: x=0, atgriež 0. Piemērs #2. M={1,-2,3,-4,5}; Pēc izpildes: x=-2, atgriež 1.

B2[8]. Funkcija b2 trim parametriem M, n (masīvs no veseliem pozitīviem skaitļiem un tā garums) un x, kas parametrā x ievieto masīvā sastopamo lielāko pirmskaitli, bet atgriež to, vai izdevies tādu atrast; Ja masīvā nav neviena pirmskaitļa, tad x vērtība ir 0. Piemērs #1. M={1,2,3,4,5,6}; Pēc izpildes: x=5, atgriež 1. Piemērs #2. M={25,4,21,18}; Pēc izpildes: x=0, atgriež 0.

 

KD2.

B. Izveidot C++ programmu (izmantot tikai veselu skaitļu operācijas):

B1[5]. Dots naturāls skaitlis N. Noskaidrot, kāds ir lielākais šī skaitļa dalītājs (neskaitot pašu skaitli). Piemērs #1. N = 19; atbilde: 1. Piemērs #2. N = 75; atbilde: 25.

B2[7]. Dots naturāls skaitlis N. Atrast (no pozīcijas viedokļa) vidējo ciparu, ja tas ir skaitlis ar garumu nepāra skaitlis. Pāra skaitļa garuma skaitļiem atgriež (-1). Piemērs #1. N = 1256; atbilde: -1. Piemērs #2. N = 31876; atbilde: 8.

B3[9]. Dots naturāls skaitlis N. Uzkonstruēt skaitli M, kas pāra skaitļa garuma skaitļiem apmaina vietām divus vidējos ciparus. Nepāra skaitļa garuma skaitļiem vērtība nemainās (M ir tāds kā N). Piemērs #1. N = 1256; M = 1526. Piemērs #2. N = 31876; M: 31876. Piemērs #3. N = 67; M: 76.

C. Izveidot C++ programmu, kas apstrādā veselu skaitļu masīvu A garumā N (N nepārsniedz 100):

C1[5]. Dots vesels skaitlis X. Noskaidrot, vai X ir sastopams masīvā vismaz 2 reizes Piemērs #1. A = {8,5,8,6,7,8,9}, X = 8, atbilde: jā. Piemērs #2: A = {7,8,5,9}, X = 5, atbilde: nē. Piemērs #3: A = {7,8,5,9}, X = 3, atbilde: nē.

C2[7]. Dots masīvs A garumā 10 (jo int tipā ir līdz 10 cipariem decimālajā pierakstā) un vesels skaitlis X. Aizpildīt masīvu ar skaitļa X cipariem, novietojot ciparus pie beigām, bet masīva sākumā vajadzības gadījumā pieliekot nulles. Ja skaitlis ir negatīvs, visus ciparus ieraksta ar mīnusa zīmi. Piemērs #1. X=-1234, A={0,0,0,0,0,0,-1,-2,-3,-4}. Piemērs #2. X=1234567890, A={1,2,3,4,5,6,7,8,9,0}.

C3[9]. Tas pats, kas iepriekšējā uzdevumā, bet pretējā virzienā – no korekti aizpildīta masīva izveidot int skaitli. Nekorekti aizpildīta masīva gadījumā (masīvā ir ne tikai viencipara skaitļi vai arī ir gan negatīvi, gan pozitīvi) atgriezt 0. Piemērs #1. A={0,0,0,0,0,0,-1,-2,-3,-4}, atbilde=-1234. Piemērs #2. A={1,2,3,4,5,6,7,8,9,0}, atbilde=1234567890. Piemērs #3. A={1,2,-3,4,5,6,-7,8,9,0}, atbilde=0.

 

KD1.

A1[5]. Dots naturāls skaitlis N. Noskaidrot, vai šis skaitlis bez atlikuma dalās gan ar 2, gan ar 3, gan ar 5, gan ar 7. Piemērs #1. N = 99; atbilde = nē. Piemērs #2. N = 420; atbilde: jā.

A2[9]. Dots naturāls skaitlis N. Noskaidrot, vai šis skaitlis ir divciparu skaitlis, tāds, kura ciparu summa arī ir divciparu skaitlis. Piemērs #1. N = 1256; atbilde = nē. Piemērs #2. N = 25; atbilde: nē. Piemērs #3. N = 66; atbilde = jā.

B1[5]. Dots naturāls skaitlis N, kas apzīmē gada mēnesi 1..12. Noskaidrot, vai šajā mēnesī ir 31 diena. Piemērs #1. N = 6; atbilde = nē. Piemērs #2. N = 12; atbilde: jā.

B2[7]. Dots naturāls skaitlis N. Noskaidrot, vai šī skaitļa 3. cipars no beigām ir 7. Piemērs #1. N = 12567; atbilde = nē. Piemērs #2. N = 722; atbilde: jā. Piemērs #3. N = 6766; atbilde = jā. Piemērs #4. N = 76; atbilde = nē.

B3[9]. Dots naturāls skaitlis N. Noskaidrot, vai šis ir četrciparu skaitlis, kas no abām pusēm lasāms vienādi (t.i., ir simetrisks). Piemērs #1. N = 12567; atbilde = nē. Piemērs #2. N = 7227; atbilde: jā. Piemērs #4. N = 7226; atbilde = nē.

 

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)