Uz augšu/Up

Mājaslapa/Home

Kursi/Courses:
  Algoritmi un programmēšana/Algorithms and programming
  Programmatūras izstrādes pamati/Software development fundamentals

Pēdējās izmaiņas/Last changes 04.04.2019.

Pārbaudes darbu REZULTĀTI

GRADE table

Laboratorijas darbu scenāriji
 

Laboratorijas darbu noteikumi (Algoritmi un programmēšana)

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

Lab scenarios in English Requirements for lab (Algorithms and programming)
Mācību materiāli

Aktuālā informācija/Actual info:

  • Publicēts pavasara semestra lekciju grafiks

Programmatūras izstrādes pamati, 2019. gada pavasara semestris

Ned. nr.

Lekciju datumi

 Lekciju tēmas un kontroldarbi**

*

1.

05. II

Plūsmas un faili. Teksta faili.

US

1.

08. II

Datu struktūras un algoritmi.

GA

2.

12. II

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

JZ

2.

15. II

Datu struktūras un algoritmi.

GA

3.

19. II

Datu struktūras un algoritmi.

GA

3.

22. II

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

JZ

4.

26. II

Dinamiskas datu struktūras. Saistītais saraksts.

JZ

4.

01. III

Datu struktūras un algoritmi.

GA

5.

05. III

Datu struktūras un algoritmi.

GA

5.

08. III

Datu struktūras un algoritmi.

GA

6.

12. III

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

JZ

6.

15. III

Izņēmumsituāciju apstrāde. Vienībtestēšanas pamati.

JZ

7.

19. III

Bināru failu apstrāde.

US

7.

22. III

Datu struktūras un algoritmi.

GA

8.

26. III

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

JZ

8.

29. III

Datu struktūras un algoritmi.

GA

9.

02. IV

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

US

9.

05. IV

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

US

10.

09. IV

Datu struktūras un algoritmi.

GA

10.

12. IV

Datu struktūras un algoritmi.

GA

Lieldienu brīvdienas

11.

23. IV

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

US

11.

26. IV

Datu struktūras un algoritmi.

GA

12.

30. IV

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

US

12.

03. V

Datu struktūras un algoritmi.

GA

13.

07. V

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

US

13.

10. V

Datu struktūras un algoritmi.

GA

14.

14. V

Programmatūras darbināšanas platformas. Darbināšana tiešā veidā, linkošana. Virtuālās mašīnas, interpretatori. Programmatūras arhitektūras. Autonomas, platformspecifiskas programmas. Domēnspecifiskas valodas.

JZ

14.

17. V

Datu struktūras un algoritmi.

GA

15.

21. V

Klienta-servera modelis. Servisu orientēta arhitektūra. Platformu neatkarīga programmatūra. Paralēlās programmēšanas pamati.

JZ

15.

24. V

Datu struktūras un algoritmi.

GA

16.

28. V

Noslēguma nodarbība.

US

16.

31. V

Datu struktūras un algoritmi.

GA

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

** izmaiņas pret sākotnējo grafiku iekrāsotas

 

Vērtēšana un datumi

·         Četru laboratorijas darbu atrādīšana klātienē (24%):

o   teksta faili, 28. II

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

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

o   STL list un saistītais saraksts: ar izņēmumsituāciju apstrādi un vienībtestēšanu, 16. V

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

o   5. IV

o   10. V

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

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

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

 

Sekmīga vērtējuma saņemšanas minimālie nosacījumi

1)      nokārtoti vismaz 3 (no 4) laboratorijas darbiem,

2)      sekmīgi nokārtots eksāmens (iegūti vismaz 35% jeb 14 punkti no 40),

3)      sekmīga kopējā kursa atzīme (iegūti vismaz 35% jeb 4).

 

Algorithms and programming, Autumn, 2018

Week

Lecture date

Topics and tests

Lab deadlines and tests in practical classes

1.

2018.09.04.

Algorithm, its properties and methods of notation. Pseudocode. An algorithm and a computer program. Writing and running computer programs. Variables and data types. Operations and execution sequence of operations (control statements). Numerical expressions.

 

2.

2018.09.11.

System (programming) languages and scripting languages, compilers and interpreters. C++ and JavaScript languages. Execution platforms for computer programs. Input, output, assignment. Branching operator if. Testing and debugging of computer programs.

 

3.

2018.09.18.

Structure of a C++ program. Structure of a JavaScript program. Logical expressions. Numerical and logical datatypes. Static typing in C++ and dynamic typing in JavaScript. Loop with counter (for).

 

4.

2018.09.25.

Loops. Functions. Parameter passing techniques and return statement. Calling a function and data exchange with a function. Default and constant parameters.

 

5.

2018.10.02.

Nested branching. Selection operator switch. Conditional (?:) operator. Function overloading. Parameter dynamism in JavaScript.

 

6.

2018.10.09.

Arrays in C++ and JavaScript. Function declaration and implementation in C++, using several files for a program.

Test #1 (branching, logical expressions, loop with counter).

Lab task A (branching and looping)

7.

2018.10.16.

Test #2 (looping, functions).

 

8.

2018.10.23.

Characters. C-style character strings char*. C++-style character strings. Character strings in JavaScript. Pointers, addresses and references. Arrays and pointers.

Lab task B (looping, functions)

9.

2018.10.30.

Dynamic arrays in C++. STL::vector container class in C++. Passing arrays as function arguments.

 

10.

2018.11.06.

Recursion. Function templates in C++ un parameter dynamic in JavaScript.

 

11.

2018.11.13.

Principles of object oriented programming.

 Test #3 (arrays).

12.

2018.11.20.

Object oriented programming. Constructor and destructor. Default constructor. Accessing class elements (public, private). Implementing methods outside class.

Lab task C (arrays and functions)

13.

2018.11.27.

Object oriented programming: Copy constructor. Multidimensional arrays in C++. Multidimensional arrays using STL::vector containers.

 

14.

2018.12.04.

Test #4 (strings, OOP).

Lab task #4 D (OOP un strings)

15.

2018.12.11.

Programming style. Syntactical notation of constructs of programming language. Multidimensional dynamic array in C++.

 

16.

2018.12.18.

Object oriented modelling. UML class diagrams.

 

 

 

TEST #6

A[5]. Define the notion, describe, and give examples. Template class.

B. Given binary file of int values (exactly 4 bytes per number). Write function in C++ to process the file (only constant amount of auxiliary memory allowed).

B1[6]. Function countOdd which counts the amount of odd numbers stored in the file. E.g., {4,8,5,6,3}→2

B2[9]. Function copyOdd which writes all odd numbers from given file to another file. E.g., {4,8,5,6,3}→{5,3}

C. Create the class hierarchy (device-smartphone), where smartphone class inherits from device class. Smartphone object should contain information about operating system (size: 1B) – Android, iOS, other, as well as model name (up to 30 letters), e.g., “Samsung Galaxy J6”. Device object should contain field hasMobileDataAccess and one additional field of student’s choice. The following methods should be implemented for each class: constructor, destructor, print method. All fields should be private. Objects of each class should be created and all the methods called at least once.

C1[7]. Field “model name” with automatic memory.

C2[8]. Field “model name” with dynamic memory memory.

C3[9]. Field “model name” with dynamic memory memory, and copy constructor created and assignment operator overloaded for device class.

D. Write C++ with class templates. Given class template pool10 which implements array up to size 10 (0..10). Implement following methods: push_special(·) which adds element to the array (if the array is already full, than overwrites the oldest element); print() which prints the array chronologically; size() which returns the size of the filled array (0..10).

D[9]. if everything implemented

Penalty 2 points – if no chronological functionality implemented.

Penalty 2 points – if implemented as class without template.

 

 

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/TEST4.

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

 

B. Design a C++ function to process C-style character strings and provide the context how it is called:

B1[5]. Function isUnsignedInteger, which calculates whether the string contains only digits. It is assumed that the string contains at least one character.

B2[7]. Function isInteger, which calculates whether the string contains only digits with optional preceding characters ‘+’ or ‘-’, e.g., “123”, “-456”, “+9”. It is assumed that the string contains at least one character.

B3[9]. Function splitWords, which writes from string 1 to string 2 all sequences of letters, delimited by commas, e.g., “abc123CD.=5xyz;p” →“abc,CD,xyz,p”.

C[9]. Design a C++ class (with all fields defined as private) according to the source code that uses the class and the appropriate comments (from here you should figure out the list of required methods, amount of parameters for each, and its functionality). Class account implements the functionality of keeping the account balance and last 5 account transactions, as well as printing them chronologically. Amounts are stored in (euro) cents, but preferably printed as formatted with two decimal digits. At least one of the methods should be implemented outside class.

    account a;

    a.printstatus(); // 0.00

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

    cout<<a.change(550)<<endl; // 1 – successfully adds 5.50

    cout<<a.change(-70)<<endl; // 1 - successfully withdraws 0.70

    cout<<a.change(-700)<<endl; // 0–not enough money; no action

    cout<<a.change(-100)<<endl; // 1 - successf. withdraws 1.00

    a.printstatus(); // 3.80

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

    a.change(-110); // successfully withdraws 1.10

    a.change(40); // successfully adds 0.40

    a.change(60); // successfully adds 0.60

    a.printstatus(); // 3.70

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

 

KD3/TEST3.

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).

 

A. Design a C++ function to process an integer array A of length N, and provide the context how it is called:

A1[7]. Fill A with first N perfect squares. Example. N=6; Output: A={1,4,9,16,25,36}.

A2[9]. Fill A with first N perfect squares which are odd numbers. Example. N=6; Output: A={1,9, 25,49,81,121}.

B. Design a C++ function to process integer arrays:

B1[7]. Given two integer arrays of the same length. Determine, whether both arrays are equal. Example #1. A={2,4,9},B={2,4,9}. Answer: yes. Example #2. A={2,4,9},B={2,5,8}. Answer: no.

B3[9]. Given two integer arrays. Determine, whether arrays have at least one common value. Example #1. A={2,4,9},B={1,4,8,3,7}. Answer: yes. Example #2. A={1,2,4,9},B={3,5,8}. Answer: no.

C. Design a C++ program to process integer arrays:

C1[7]. Given 2D integer array. Determine the average of odd elements of the array. Example #1. A={{1,22,11},{3,7,6},{8,40,5}}. Answer: 5.4 (=(1+11+3+7+5)/5). Example #2. A={{2,8,4},{6,10,52}}. Answer: “no such numbers”.

C2[9]. Given integer array. Determine the maximum value of unique elements. Example #1. A={1,2,3,4,3,4}. Answer: 2. Example #2. A={1,1,3,4,3,4}. Answer: “no such number”.

 

 

KD2/TEST2.

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

B1[6]. Funkcija ar trīs parametriem x, y un z, kas atgriež vidējo aritmētisko vērtību no diviem lielākajiem skaitļiem. Piemērs. Dots: x=1, y=2, z=3; atgriež 2.5.

B2[9]. Funkcija ar trīs parametriem x, y un z, kas pieņem divus veselus skaitļus x un y, parametrā z ievieto x un y vidējo aritmētisko vērtību, apmaina vietām x un y, kā arī atgriež x un y summu. Piemērs. Dots: x=3, y=4; Pēc izpildes: x=4, y=3, z=3.5, atgriež 7.

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

C1[5]. Dots naturāls skaitlis N. Noskaidrot, kāds ir lielākais veselu skaitļu kubs, kas ir mazāks vai vienāds par N. Piemērs #1. N = 50; atbilde: 27. Piemērs #2. N = 8; atbilde: 8.

C2[9]. Dots naturāls skaitlis N. Izmest no skaitļa pirmo un pēdējo ciparu, ja pirmais cipars ir lielāks par pēdējo. Piemērs #1. N = 1256; atbilde: 1256 (nemainās). Piemērs #2. N = 4321; atbilde: 32. Piemērs #3. N = 98; atbilde: 0.

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

B. Design a C++ function and provide the context how it is called:

B1[6]. Function with three parameters x, y, and z, which returns the average of the two numbers, smallest among x,y,z. Example. x=1, y=2, z=3; returns 1.5.

B2[9]. Function with four parameters w, x, y, and z, which take two integers w and x; puts integer division of w by x into y; puts the remainder of integer division of w by x into z; returns mathematical division of w by x. Example. w=13, x=5; Output: y=2, z=3, returns 2.6.

C. Write a C++ program (only numeric operations allowed):

C1[5]. Given natural number N. Calculate the smallest cube of a natural number, greater or equal to N. Example #1. N = 50; answer: 64. Example #2. N = 8; answer: 8.

C2[9]. Given natural number N. Remove from the number the first and the last digits if the first digit is greater than the last. Example #1. N = 1256; answer: 1256 (unchanged). Example #2. N = 4321; answer: 32. Example #3. N = 98; answer: 0.

D. Write a JavaScript program for tasks given in C.

 

TEST1.

A1. Given integer number N. Calculate the category this number belongs to: (A) 3-digit even, (B) odd, (C) other. Example #1. N = 99; output = odd. Example #2. N = -978; output: 3-digit even. Example #3. N = -50; output: other.

A2. Given weekday of a fixed date: w=1..7 (Monday..Sunday) and number of days n. Calculate, what weekday (a) was before n days, (b) will be after n days. Example (about today): w=4 (Thursday), n=12; Output. (a) before n days: 6 (Saturday), (b) after n days: 2 (Tuesday).

B1. Given two integer values M and N. Calculate, how many numbers are there in the interval M..N, ones which are even numbers and divisible neither by 3 nor 7. Example. M=10, N=25; output = 4 (because 10,16,20,22).

B2. Given two integer values M and N. Calculate, how many numbers are there in the interval M..N, ones with last digit being even number, but 2nd last – being odd number. Example. M=95, N=115; output = 5 (because 96,98,110,112,114).

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)