ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

Слични документи
MergedFile

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Uvod u računarstvo 2+2

Programski jezik C

070-ALIP2-udzbenik.indb

Strukture predavač: Nadežda Jakšić

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

Datoteke predavač: Nadežda Jakšić

Microsoft PowerPoint - 11.Programski_Jezik_C_ulaz-izlaz [Compatibility Mode]

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Funkcije predavač: Nadežda Jakšić

Uvod u takmičarsko programiranje

07_PJISP_II_Predavanja

PowerPoint Presentation

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Grananje u programu predavač: Nadežda Jakšić

Tutoring System for Distance Learning of Java Programming Language

Programiranje 2 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević February 23, 2008

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Programski jezik C

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

Uvod u računarstvo 2+2

PowerPoint Presentation

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

Programski jezici i strukture podataka

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

PowerPoint Presentation

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

PowerPoint Presentation

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Tutoring System for Distance Learning of Java Programming Language

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1

Државно такмичење године 5. и 6. разред 1. [pločice] Правоугаону терасу димензија d s центиметара квадратних треба поплочати коришћењем плочица

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Programiranje za UNIX Okruženje unix procesa

Računarski praktikum I - Vježbe 01 - Uvod

Funkcije predavač: Nadežda Jakšić

Računarski praktikum I - Vježbe 09 - this, static

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Tutoring System for Distance Learning of Java Programming Language

PowerPoint Presentation

Slide 1

Microsoft PowerPoint - C-4-1

Objektno orjentirano programiranje

Uvod u PHP

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

PowerPoint Presentation

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

P11.3 Analiza zivotnog veka, Graf smetnji

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

Primenjeno programiranje - vezbe GUI i baze podataka

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

ZADACI ZA VEŽBU 1. Realizovati konzolnu aplikaciju koja će računati površinu kvadrata, pravougaonika ili trougla. 2. Preko konzole se unosi ocena od 1

MIP-heuristike (Matheuristike) Hibridi izmedu metaheurističkih i egzaktnih metoda Tatjana Davidović Matematički institut SANU

P3.2 Paralelno programiranje 2

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

Državna matura iz informatike

PowerPoint Presentation

pricalica.PDF

PASCAL UVOD 2 II razred gimnazije

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

АГЕНЦИЈА ЗА БАНКАРСТВО РЕПУБЛИКЕ СРПСКЕ УПУТСТВО ЗА ЕЛЕКТРОНСКО ДОСТАВЉАЊЕ ПОДАТАКА ИЗ ОБЛАСТИ РЕСТРУКТУРИРАЊА БАНАКА Бања Лука, јули године

PHP kod

NIZOVI

Програмирај!

Microsoft Word - 1_Uputstvo-za-ocenjivanje_ZI-2018_Matematika Jun.doc

Microsoft Word - 11 Pokazivaci

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević January 23, 2008

Microsoft PowerPoint - Timer0 16F887.ppt [Compatibility Mode]

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

studirko.com predstavlja: Večernja škola C# za FPZ ( ) v 4.0 Za studirko.com napisao: Slaven Špigl

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ НА КРАЈУ ОСНОВН

Prikaz znakova u računalu

KORISNIČKE UPUTE APLIKACIJA ZA POTPIS DATOTEKA

Programiranje 1

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

obavezno je koristiti spell-checker

Programiranje 1 3. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/1

Транскрипт:

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 02.07.2019. Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite Uputstvo pre popunjavanja Obrasca za odgovore. b) Vrednost odgovora: tačan = 5; netačan = -1.25; nevažeći (nula ili više zacrnjenih kružića) = 0. c) Na pitanjima se može osvojiti najviše 20 poena. Prvi zadatak nosi 20 poena, dok drugi nosi 25 poena. I ZADACI 1)Napisati program na programskom jeziku C koji određuje gde će se iznajmiti biciklovi. Raspored bicikala se zadaje kao matrica nenegativnih brojeva, gde svaki broj označava koliko ima biciklova na tom polju matrice. Program prvo učitava sa standardnog ulaza dimenzije matrice i samu matricu. Učitavanje realizovati u funkciji void read_matrix(int ***matrix, int *m, int *n). Nakon toga sa standardnog ulaza se učitava na kom polju se nalazi onaj koji želi da iznajmi biciklove i broj biciklova koji želi da iznajmi. Program treba da pronađe i ispiše najbliže polje u odnosu na trenutnu poziciju onog koji iznajmljuje biciklove, koje sadrži dovoljan broj biciklova. Ako postoji više polja koja zadovoljavaju uslov, ispisati bilo koje, u suprotnom -1. Pretragu i ispis rezultata realizovati kao zasebne funkcije. Razdaljina između dva polja se računa kao broj polja koje je potrebno preći od jednog do drugog, gde je dozvoljeno horizontalno i vertikalno kretanje, ali nije dozvoljeno dijagonalno. Voditi računa o ispravnom korišćenju dinamičke memorije. 2)Napisati program na programskom jeziku C koji određuje prosečnu cenu različitih vrsta pice po gradovima. Jedan red ulazne datoteke cenapice.txt sadrži podatke o ceni pice po sledećem formatu: dvoslovna skraćenica grada (tačno dva slova), cena pice (realan broj) i naziv pice (string od najviše 256 znakova koji može sadržati blanko znake). Svi podaci su razdvojeni jednim blanko znakom. Broj redova u datoteci je nepoznat. Smatrati da broj različitih gradova nije veći od 100. Program treba da pročita podatke iz ulazne datoteke, a zatim na standardnom izlazu ispiše podatke o prosečnim cenama pice po gradovima u sledećem formatu: naziv vrste pice, prosečna cena, nazivi gradova u kojima se prodaje. Svi podaci treba da budu razdvojeni jednim blanko znakom. Voditi računa o ispravnom korišćenju dinamičke memorije. Datoteka cenapice.txt: BG 420.0 Napolitana NS 520.0 Capricciosa NS 480.0 Napolitana BG 560.0 Quattro fromaggio NI 350.0 Diavolo BG 650.0 Diavolo II PITANJA Primer izlaza: Napolitana 450.0 BG NS Capricciosa 520.0 NS Quattro fromaggio 560.0 BG Diavolo 500.0 NI BG 1)Koje od ponuđenih tvrdnji su tačne za programski jezik C; A) Ako su date definicije float *p; int *x; tada je izraz x = p + 10; ispravan. (B) Ako su data definicije double x = 3, *p = &x; int i; tada je izraz i = *(int*)p << 2 ispravan; C) Ako su date definicije char *s = "String", *p, *q; tada p i q imaju istu vrednost nakon izvršavanja izraza p = s + strlen(s); i q = s; while(*q++); 2)Šta ispisuje sledeći program napisan na programskom jeziku C? int f3 ( int a[] ) { typedef int (*FP)(int*); a[0] += a[1] + a[-1]; int f1 ( int *a ) { return 1; ++*a; return 2; int main ( ) { int a[] = { 1, 2, 3, 4, 5, 6, next = 0; int f2 ( int *a ) { int n = sizeof ( a ) / sizeof ( int ); int x = a[0]; FP f[] = { f1, f2, f3 ; a[0] = a[-1]; for ( int i = 0; i < n; i++ ) next = f[next](a+i); a[-1] = x; for ( int i = 0; i < n; i++ ) printf ( "%d ", a[i] ); (A) 2 3 7 5 6 16 B) 2 3 7 5 16 6 C) 2 7 3 5 6 16 3)Šta ispisuje sledeći program napisan na programskom jeziku C? Program je pokrenut sledećom komandom:./program.exe avgust septembar oktobar oktobar2 strcat(s1, argv[2]); *s1 += 'A'-'a' ; #include <string.h> s1[strlen(argv[4])] = '\0'; int main(int argc, char *argv[]) { s2[strlen(s2)-1] += 'A'-'a'; char *s1 = malloc(20 * sizeof(char)); printf("%s %s\n", s1, s2); char *s2 = malloc(20 * sizeof(char)); strcpy(s1, argv[4]); strcpy(s2, argv[1]); (A) Oktobar2 avgust B) Oktobar2septembar avgust C) Oktobar2 avgust 4)Šta ispisuje sledeći program napisan na programskom jeziku C ukoliko se sa standardnog ulaza unosi tekst ispitp2? Smatrati da je podatak tipa short smešten na širini od 16 bitova, a da program pri izvršavanju niži bajt smešta na nižu adresu, a viši bajt na višu adresu, kao i da je ASCII kod slova A jednak 65, a slova a 97. #include <ctype.h> #define MAX 20 typedef union { struct { unsigned char a, b; s; short i; U; int main(void) { U arr[max]; int c = 0; while(c < MAX &&!isdigit(arr[c].s.a = getchar())) { if(islower(arr[c].s.a)) arr[c].i = (arr[c].i & ~('a' - 'A')) << 8; else arr[c].i = (arr[c].i ('a' - 'A')) << 8; c++; for(int i=0; i<c; i++) putchar(arr[i].s.b); (A) ISPITp B) ispitp C) ispitp 5)Šta ispisuje sledeći program na programskom jeziku C ukoliko su uneseni brojevi 1 1 1 3 4 4 5 2 1 3-1? Smatrati da funkcija release_memory ispravno vrši brisanje liste iz memorije. void release_memory(elem *head); void main() { typedef struct elem { int num,cnt; struct elem *next; elem *h = 0; elem; int num; void add(elem **head_ptr, int num){ while(1){ elem *curr = *head_ptr, *prev = 0; scanf("%d", &num); for(; curr!= 0 && curr->num < num; prev = curr, if(num <= 0) break; curr = curr->next); add(&h, num); if(curr && curr->num == num) curr->cnt++; else { elem *new_elem = malloc(sizeof(elem)); while(h){ new_elem->num = num; new_elem->cnt = 1; printf("%d%d",h->num,h->cnt); new_elem->next = curr; h = h->next; if(prev) prev->next = new_elem; else *head_ptr = new_elem; release_memory(h); (A) 1421324251 B) 5142322114 C) 515217314

13E111P2, Programiranje 2, jul 2018/2019. Rešenje zadataka i ključ za bodovanje Zadatak 1. Napisati program na programskom jeziku C koji određuje gde će se iznajmiti bicikli. Raspored bicikala se zadaje kao matrica nenegativnih brojeva, gde svaki broj označava koliko ima bicikala na tom polju matrice. Program prvo učitava sa standardnog ulaza dimenzije matrice i samu matricu. Učitavanje realizovati u funkciji void read_matrix(int ***matrix, int *m, int *n). Nakon toga sa standardnog ulaza se učitava na kom polju se nalazi onaj koji želi da iznajmi bicikle i broj bicikala koji želi da iznajmi. Program treba da pronađe i ispiše najbliže polje u odnosu na trenutnu poziciju onog koji iznajmljuje bicike, koje sadrži dovoljan broj bicikala. Ako postoji više polja koja zadovoljavaju uslov, ispisati bilo koje, u suprotnom -1. Pretragu i ispis rezultata realizovati kao zasebne funkcije. Razdaljina između dva polja se računa kao broj polja koje je potrebno preći od jednog do drugog, gde je dozvoljeno horizontalno i vertikalno kretanje, ali nije dozvoljeno dijagonalno. Voditi računa o ispravnom korišćenju dinamičke memorije. struct position { int x, y; ; void read_matrix(int ***matrix, int *pm, int *pn) { scanf("%d%d", pm, pn); int m = *pm, n = *pn; int **mat = malloc(m * sizeof(int*)); mat[i] = malloc(n * sizeof(int)); for (int j = 0; j < n; j++) { scanf("%d", &mat[i][j]); *matrix = mat; int distance(int i, int j, struct position pos) { return abs(pos.x - i) + abs(pos.y - j); struct position find_nearest(int **mat, int m, int n, struct position pos, int number) { struct position ret = {-1, -1; for (int j = 0; j < n; j++) { if (number > mat[i][j] (pos.x == i && pos.y == j)) { continue; if (ret.x == -1 distance(i, j, pos) < distance(ret.x, ret.y, pos)) { ret.x = i; ret.y = j; return ret; void print(struct position pos) { printf("%d %d\n", pos.x, pos.y);

void deallocate(int **matrix, int m) { free(matrix[i]); free(matrix); int main() { int m, n, **matrix; read_matrix(&matrix, &m, &n); struct position pos; int bikes; scanf("%d%d%d", &pos.x, &pos.y, &bikes); struct position res = find_nearest(matrix, m, n, pos, bikes); print(res); deallocate(matrix, m);

Zadatak 2. Napisati program na programskom jeziku C koji određuje prosečnu cenu različitih vrsta pice po gradovima. Jedan red ulazne datoteke cenapice.txt sadrži podatke o ceni pice po sledećem formatu: dvoslovna skraćenica grada, cena pice (realan broj) i naziv pice (string od najviše 256 znakova koji može sadržati blanko znake). Svi podaci su razdvojeni jednim blanko znakom. Broj redova u datoteci je nepoznat. Smatrati da broj različitih gradova nije veći od 100, a da je cena jedne vrste pice za jedan grad jedinstvena. Program treba da pročita podatke iz ulazne datoteke, a zatim na standardnom izlazu ispiše podatke o prosečnim cenama pice po gradovima u sledećem formatu: naziv vrste pice, prosečna cena, nazivi gradova u kojima se prodaje. Svi podaci treba da budu razdvojeni jednim blanko znakom. Voditi računa o ispravnom korišćenju dinamičke memorije. Datoteka cenapice.txt: BG 420.0 Napolitana NS 520.0 Capricciosa NS 480.0 Napolitana BG 560.0 Quattro fromaggio NI 350.0 Diavolo BG 650.0 Diavolo #include <string.h> #define PIZZA_NAME_LEN 256 #define PLACE_NAME_LEN 2 #define PLACES_MAX 10 #define MALLOCATE(ptr, type){\ ptr = (type*)malloc(sizeof(type));\ if(ptr == 0) {\ perror(0);\ exit(1);\ \ typedef struct pizza_info { float price; char name[pizza_name_len + 1]; char place[places_max][place_name_len + 1]; int places_cnt; struct pizza_info *next; pizza_info; pizza_info* read_data(const char*); void print_data(pizza_info*); void release_memory(pizza_info*); int main(int argc, char **argv) { pizza_info *head = read_data("cenapice.txt"); print_data(head); release_memory(head); system("pause"); Primer izlaza: Napolitana 450.0 BG NS Capricciosa 520.0 NS Quattro fromaggio 560.0 BG Diavolo 500.0 NI BG pizza_info* read_data(const char* filename) { pizza_info *head = 0, *tail = 0, *new_pizza = 0, *curr; FILE* fp = fopen(filename, "r"); if (fp == 0) { perror("file error: "); while (1) { MALLOCATE(new_pizza, pizza_info); if (fscanf(fp, "%s %f %[^\n]", new_pizza->place[0], &new_pizza->price, new_pizza- >name)!= 3) { free(new_pizza); break;

new_pizza->places_cnt = 1; new_pizza->next = 0; // check if this is new or existing pizza for (curr = head; curr!= 0; curr = curr->next) if (strcmp(curr->name, new_pizza->name) == 0) break; // add new pizza if (curr == 0) { if (tail) tail->next = new_pizza; else head = new_pizza; tail = new_pizza; // add existing pizza else { strcpy(curr->place[curr->places_cnt], new_pizza->place[0]); curr->places_cnt++; curr->price += new_pizza->price; free(new_pizza); fclose(fp); return head; void print_data(pizza_info* head) { for (pizza_info *curr = head; curr; curr = curr->next) { printf("%s %.1f ", curr->name, curr->price / curr->places_cnt); for (int i = 0; i < curr->places_cnt; i++) printf("%s ", curr->place[i]); putchar('\n'); void release_memory(pizza_info* head) { pizza_info *old; while (head) { old = head; head = head->next; free(old);