Kursi/Courses: Pēdējās izmaiņas/Last changes 04.04.2019. Aktuālā informācija/Actual info:
Programmatūras izstrādes pamati, 2019. gada pavasara semestris
* 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
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 students 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).
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; // 0not 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.
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) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||