elektrotehniČki fakultet univerziteta u beogradu … · 2020. 2. 3. · elektrotehniČki fakultet...

10
ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje 120 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 15 poena. d) Prvi zadatak nosi 25 poena, a drugi 30. I. ZADACI 1)Napisati program na programskom jeziku Pascal koji vrši određenu obradu nad nizom znakova (stringom) od najviše 255 znakova. String se sastoji od reči koje mogu biti odvojene jednim blanko znakom. Program najpre treba da učita string sa standardnog ulaza, da zatim formira novi string koji predstava rotaciju ulaznog stringa u levo ili desno za K reči. Broj K se unosi sa standardnog ulaza. Pozitivne vrednosti označavaju rotaciju u desnu stranu, a negativne vrednosti označavaju rotaciju u levu stranu. Nakon toga program treba da ispiše novoformirani string. Učitavanje stringa i obradu realizovati kao zasebne potprograme koji sa glavnim programom komuniciraju isključivo putem argumenata i povratne vrednosti. ULAZ IZLAZ ko to rece ipak se okrece -2 rece ipak se okrece ko to 2)Napisati program na programskom jeziku Pascal koji vrši određenu obradu nad tekstualnom datotekom temperature.txt koja sadrži podatke o izmerenim temperaturama po gradovima. Jedan red datoteke sadrži ime grada (jedna reč od maksimalno 30 karaktera), datum merenja u obliku dd/mm/gggg i prosečnu temperaturu izmerenu tokom dana (realan broj). Podaci su odvojeni blanko znakom. Program treba da za zadati grad na standardnom izlazu pronađe i ispiše najnižu temperaturu u zimskom periodu u zadatoj godini. Smatrati da zima svuda traje od 21.12. do 21.03. uključujući i ova dva datuma. Naziv grada i godina se zadaju na standardnom ulazu u zasebnim redovima. temperature.txt ULAZ IZLAZ Beograd 01/01/2019 -1.5 Beograd 03/01/2018 -5.1 Subotica 03/01/2019 -6 Beograd 01/02/2019 -4 Subotica 03/10/2019 -2.5 Beograd 2019 -4 II. PITANJA 1)Koji je red funkcije složenosti sledećeg segmenta koda? for i := n downto 2 do for j := n - i + 2 to n do begin k := n - i + 1; m := j; repeat k := k - 1; m := m + 1; until m > k; end; A) n 3 B) n 5/2 (C) n 2 2)Koja od ponuđenih sekvenci odgovara sintaksnoj definiciji za start u zadatoj u BNF notaciji? <start> ::= <a> | <a><start><a> <a> ::= 3<a>4 | 2<a>1 | 0<b> <b> ::= 12 | 21 A) 330124412020211 (B) 330124401220211 C) 340124401222011 3)Šta ispisuje sledeći program napisan na programskom jeziku Pascal, ako se redom unose vrednosti 4 234 12123 45 991? program feb2019; const MAX = 100; var s : set of 0..9; arr : array [1..MAX] of integer; i, n, b, d: integer; begin read(n); for i := 1 to n do read(arr[i]); for i := 1 to n do begin s := []; b := arr[i]; arr[i] := 0; while(b > 0) do begin d := b mod 10; b := b div 10; if(not (d in s)) then begin s := s + [d]; arr[i] := arr[i] * 10 + d; end; end; end; for i := 1 to n do write(arr[i], ' '); end. (A) 432 321 54 19 B) 234 123 45 19 C)234 123 45 91 4)Šta ispisuje sledeći program na programskom jeziku Pascal za unos 1 2 3 4 5 6 7? Smatrati da funkcija citaj formira jednostuko ulančanu listu čitajući cele brojeve sa standardnog ulaza i vraća pokazivač na prvi element liste, procedura pisi ispravno ispisuje sadržaj jednostruko ulančane liste na čiji početak pokazuje pokazivač koji je jedini argument procedure, a procedura brisi ispravno briše jednostruko ulančanu listu na čiji početak pokazuje pokazivač koji je jedini argument procedure? program februar20; type PokElem = ^Elem; Elem = record br : integer; sl : PokElem; end; var glava : PokElem; procedure p(var glava : PokElem); var pret, tren, sled : PokElem; deljiv : boolean; begin pret := nil; tren := glava; if (tren <> nil) then sled := tren^.sl else sled := nil; deljiv := false; while (sled <> nil) do begin if (pret <> nil) then begin tren^.br := pret^.br + tren^.br + sled^.br; deljiv := tren^.br mod 3 = 0; pret^.br := tren^.br - (pret^.br + sled^.br); sled^.br := tren^.br - (pret^.br + sled^.br); tren^.br := tren^.br - (pret^.br + sled^.br); if (not deljiv) then begin dispose(tren); pret^.sl := sled;tren := pret; end; end; pret := tren; tren := tren^.sl; sled := tren^.sl; end; end; begin glava := citaj(); p(glava); pisi(glava); brisi(glava); end. (A) 2 3 1 5 7 6 B) 2 1 3 4 5 7 6 C) 2 3 4 5 7 6

Upload: others

Post on 04-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020.

Ispit iz Programiranja 1 Ispit traje 120 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 15 poena. d) Prvi zadatak nosi 25 poena, a drugi 30.

I. ZADACI 1)Napisati program na programskom jeziku Pascal koji vrši određenu obradu nad nizom znakova (stringom) od najviše 255 znakova. String se sastoji od reči koje mogu biti odvojene jednim blanko znakom. Program najpre treba da učita string sa standardnog ulaza, da zatim formira novi string koji predstava rotaciju ulaznog stringa u levo ili desno za K reči. Broj K se unosi sa standardnog ulaza. Pozitivne vrednosti označavaju rotaciju u desnu stranu, a negativne vrednosti označavaju rotaciju u levu stranu. Nakon toga program treba da ispiše novoformirani string. Učitavanje stringa i obradu realizovati kao zasebne potprograme koji sa glavnim programom komuniciraju isključivo putem argumenata i povratne vrednosti. ULAZ IZLAZ ko to rece ipak se okrece -2

rece ipak se okrece ko to

2)Napisati program na programskom jeziku Pascal koji vrši određenu obradu nad tekstualnom datotekom temperature.txt koja sadrži podatke o izmerenim temperaturama po gradovima. Jedan red datoteke sadrži ime grada (jedna reč od maksimalno 30 karaktera), datum merenja u obliku dd/mm/gggg i prosečnu temperaturu izmerenu tokom dana (realan broj). Podaci su odvojeni blanko znakom. Program treba da za zadati grad na standardnom izlazu pronađe i ispiše najnižu temperaturu u zimskom periodu u zadatoj godini. Smatrati da zima svuda traje od 21.12. do 21.03. uključujući i ova dva datuma. Naziv grada i godina se zadaju na standardnom ulazu u zasebnim redovima. temperature.txt ULAZ IZLAZ Beograd 01/01/2019 -1.5 Beograd 03/01/2018 -5.1 Subotica 03/01/2019 -6 Beograd 01/02/2019 -4 Subotica 03/10/2019 -2.5

Beograd 2019

-4

II. PITANJA

1)Koji je red funkcije složenosti sledećeg segmenta koda? for i := n downto 2 do for j := n - i + 2 to n do begin k := n - i + 1; m := j; repeat k := k - 1; m := m + 1; until m > k; end;

A) n3 B) n5/2 (C) n2

2)Koja od ponuđenih sekvenci odgovara sintaksnoj definiciji za start u zadatoj u BNF notaciji? <start> ::= <a> | <a><start><a> <a> ::= 3<a>4 | 2<a>1 | 0<b> <b> ::= 12 | 21

A) 330124412020211 (B) 330124401220211 C) 340124401222011

3)Šta ispisuje sledeći program napisan na programskom jeziku Pascal, ako se redom unose vrednosti 4 234 12123 45 991? program feb2019; const MAX = 100; var s : set of 0..9; arr : array [1..MAX] of integer; i, n, b, d: integer; begin read(n); for i := 1 to n do read(arr[i]); for i := 1 to n do begin s := []; b := arr[i]; arr[i] := 0;

while(b > 0) do begin d := b mod 10; b := b div 10; if(not (d in s)) then begin s := s + [d]; arr[i] := arr[i] * 10 + d; end; end; end; for i := 1 to n do write(arr[i], ' '); end.

(A) 432 321 54 19 B) 234 123 45 19 C)234 123 45 91

4)Šta ispisuje sledeći program na programskom jeziku Pascal za unos 1 2 3 4 5 6 7? Smatrati da funkcija citaj formira jednostuko ulančanu listu čitajući cele brojeve sa standardnog ulaza i vraća pokazivač na prvi element liste, procedura pisi ispravno ispisuje sadržaj jednostruko ulančane liste na čiji početak pokazuje pokazivač koji je jedini argument procedure, a procedura brisi ispravno briše jednostruko ulančanu listu na čiji početak pokazuje pokazivač koji je jedini argument procedure? program februar20; type PokElem = ^Elem; Elem = record br : integer; sl : PokElem; end; var glava : PokElem; procedure p(var glava : PokElem); var pret, tren, sled : PokElem; deljiv : boolean; begin pret := nil; tren := glava; if (tren <> nil) then sled := tren^.sl else sled := nil; deljiv := false;

while (sled <> nil) do begin if (pret <> nil) then begin tren^.br := pret^.br + tren^.br + sled^.br; deljiv := tren^.br mod 3 = 0; pret^.br := tren^.br - (pret^.br + sled^.br); sled^.br := tren^.br - (pret^.br + sled^.br); tren^.br := tren^.br - (pret^.br + sled^.br); if (not deljiv) then begin dispose(tren); pret^.sl := sled;tren := pret; end; end; pret := tren; tren := tren^.sl; sled := tren^.sl; end; end; begin glava := citaj(); p(glava); pisi(glava); brisi(glava); end.

(A) 2 3 1 5 7 6 B) 2 1 3 4 5 7 6 C) 2 3 4 5 7 6

Page 2: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

13E111P1, Programiranje 1, Februar 2019/2020. Rešenje zadataka

Zadatak 1 Napisati program na programskom jeziku Pascal koji vrši određenu obradu nad nizom znakova (stringom) od najviše 255 znakova. String se sastoji od reči koje mogu biti odvojene jednim blanko znakom. Program najpre treba da učita string sa standardnog ulaza, da zatim formira novi string koji predstava rotaciju ulaznog stringa u levo ili desno za K reči. Broj K se unosi sa standardnog ulaza. Pozitivne vrednosti označavaju rotaciju u desnu stranu, a negativne vrednosti označavaju rotaciju u levu stranu. Nakon toga program treba da ispiše novoformirani string. Učitavanje stringa i obradu realizovati kao zasebne potprograme koji sa glavnim programom komuniciraju isključivo putem argumenata i povratne vrednosti. program z1feb1920; var linija, novalinija: string; k, i: integer; procedure citajStr(var linija: string); begin write('Unesite liniju teksta: '); readln(linija); end; function rotirajReci(var linija: string; k: integer) : string; var brojreci, i, j, n, poslevo, posdesno, reci: integer; nova: string; begin n := length(linija); brojreci:= 1; for i:= 1 to n do if linija[i] = ' ' then brojreci:= brojreci + 1; k := k mod brojreci; poslevo := 1; posdesno := 1; reci := 0; for i:= 1 to n do if linija[i] = ' ' then begin reci:= reci + 1; if reci = abs(k) then poslevo := i + 1; if reci = brojreci - abs(k) then posdesno := i + 1; end; if k < 0 then j := poslevo else j := posdesno; for i:= 1 to n do begin if (i <> n) or (linija[j] <> ' ') then nova := nova + linija[j]; if j = n then nova := nova + ' '; j := j mod n + 1; end; rotirajReci:= nova; end; begin citajStr(linija); write('Unesite broj K: '); readln(k); novalinija := rotirajReci(linija, k); writeln(novalinija); readln end.

Page 3: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

13E111P1, Programiranje 1, Februar 2019/2020. Rešenje zadataka

Zadatak 2

Napisati program na programskom jeziku Pascal koji vrši određenu obradu nad tekstualnom

datotekom temperature.txt koja sadrži podatke o izmerenim temperaturama po gradovima.

Jedan red datoteke sadrži ime grada (jedna reč od maksimalno 30 karaktera), datum merenja u obliku dd/mm/gggg i prosečnu temperaturu izmerenu tokom dana (realan broj). Podaci su odvojeni

blanko znakom. Program treba da za zadati grad na standardnom izlazu pronađe i ispiše najnižu temperaturu u zimskom periodu u zadatoj godini. Smatrati da zima svuda traje od 21.12. do 21.03. uključujući i ova dva datuma. Naziv grada i godina se zadaju na standardnom ulazu u zasebnim redovima. program minimalna_temperatura;

type

ddmm = record

dan, mesec: integer;

end;

ddmmgggg = record

datum: ddmm;

godina: integer;

end;

ddmmgggg_str = string[10];

const

ZIMA_POCETAK: ddmm = ( dan: 21; mesec: 12 );

ZIMA_KRAJ: ddmm = ( dan: 21; mesec: 3);

var

tekuci_grad, grad: string;

tekuci_datum: ddmmgggg;

godina: integer;

T, T_min: real;

fajl_t: text;

prva: boolean;

Page 4: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

function citajGrad(var fajl: text): string;

var

znak: char;

rec: string;

blanko: boolean;

begin

blanko := false;

rec := '';

while not blanko do begin

read(fajl, znak);

if znak = ' ' then blanko := true

else rec := rec + znak;

end;

citajGrad := rec;

end;

function konverzijaUBroj(datum: ddmmgggg_str; pocetak, duzina: integer): integer;

var

i, b: integer;

begin

b := 0;

i := pocetak;

while (i < pocetak + duzina) do begin

b := b * 10 + ord(datum[i]) - ord('0');

inc(i);

end;

konverzijaUBroj := b;

end;

function citajDatum(var fajl: text): ddmmgggg;

var

datum: ddmmgggg; pom: ddmmgggg_str;

begin

read(fajl, pom);

datum.datum.dan := konverzijaUBroj(pom, 1, 2);

datum.datum.mesec:= konverzijaUBroj(pom, 4, 2);

datum.godina := konverzijaUBroj(pom, 7, 4);

citajDatum := datum;

end;

Page 5: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

function zimskiDatum(datum: ddmmgggg): boolean;

begin

if ((datum.datum.mesec = ZIMA_POCETAK.mesec) and

(datum.datum.dan >= ZIMA_POCETAK.dan)) or

(datum.datum.mesec < ZIMA_KRAJ.mesec) or

((datum.datum.mesec = ZIMA_KRAJ.mesec) and

(datum.datum.dan <= ZIMA_KRAJ.dan)) then

zimskiDatum := true

else

zimskiDatum := false

end;

begin

writeln('Unesite grad i godinu');

readln(grad);

readln(godina);

prva := true;

T_min := 0;

assign(fajl_t, 'temperature.txt');

reset(fajl_t);

while not eof(fajl_t) do begin

while not eoln(fajl_t) do begin

tekuci_grad := citajGrad(fajl_t);

tekuci_datum := citajDatum(fajl_t);

read(fajl_t, T);

end;

readln(fajl_t);

if (grad = tekuci_grad) and

(zimskiDatum(tekuci_datum) = true) and

(tekuci_datum.godina = godina) and

((prva = true) or (T < T_min))

then begin

T_min := T;

prva := false;

end;

end;

writeln(T_min:0:1); close(fajl_t);

end.

Page 6: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020.

Ispit iz Programiranja 1, Drugi deo Šifra zadatka

Ispit traje 90 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 15 poena. d) Prvi zadatak nosi 25 poena, a drugi 30.

I. ZADACI

Zadatak 1

Napisati program na programskom jeziku Python koji vrši određenu obradu nad nizom znakova (stringom). String se sastoji od reči koje mogu biti odvojene jednim ili više blanko znakova. Program najpre treba da učita string sa standardnog ulaza, da zatim formira novi string koji predstava rotaciju ulaznog stringa u levo ili desno za K reči. Broj K se unosi sa standardnog ulaza. Pozitivne vrednosti označavaju rotaciju u desnu stranu, a negativne vrednosti označavaju rotaciju u levu stranu. U novoformiranom stringu reči treba da budu odvojene zadatim stringom za razdvajanje. Nakon toga program treba da ispiše novoformirani string. Program realizovati prema sledećim stavkama: ULAZ IZLAZ ko to rece ipak se okrece -3 -<>-

ipak-<>-se-<>-okrece-<>-ko-<>-to-<>-rece

1. Napisati funkciju read_words() koja učitava niz znakova sa standardnog ulaza. Povratna vrednost je lista reči.

2. Napisati funkciju rotate_words(words, K) koja prima listu reči words i broj K i vrši rotaciju liste reči za K mesta ulevo ili udesno u zavisnosti da li je broj K negativan ili pozitivan. Obezbediti korektan rad funkcije čak iako je vrednost K po apsolutnoj vrednosti veća od ukupnog broja reči.

3. Napisati funkciju format_words(words, sep) koja prima listu reči words i string za razdvajanje sep i na osnovu njih formira string koji se sastoji od reči iz liste razdvojenih stringom za razdvajanje.

Korišćenjem prethodno realizovanih funkcija napisati glavni program koji najpre učitava reči, potom učitava broj K, rotira dobijenu listu reči, učitava separator i ispisuje rezultujući string.

Page 7: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

Zadatak 2

Napisati program na programskom jeziku Python koji vrši određenu obradu nad tekstualnom CSV datotekom temperature.csv koja sadrži podatke o izmerenim temperaturama po gradovima. Jedan red datoteke sadrži naziv grada, datum merenja u obliku dd/mm/gggg i prosečnu temperaturu izmerenu tokom dana (realan broj). Program treba da učita podatke iz datoteke, a zatim pronađe najnižu temperaturu za svaku godinu i svaki grad, izmerenu u zadatom periodu. Rezultat izvršavanja je broj nepostojećih merenja. Voditi računa o korektnom rukovanju korišćenim resursima.

1. Napisati funkciju read_temperatures(filename) koja iz fajla sa zadatim imenom filename čita informacije o izmerenim temperaturama i formira rečnik kod kojeg je ključ ime grada, a vrednost lista torki koje čuvaju datum merenja i izmerenu temperaturu. Povratna vrednost funkcije je ovaj rečnik. Unutrašnje liste sadrže pojedinačne podatke svakog reda datoteke.

2. Napisati funkciju remove_temperatures(temperatures, start, end), koja prima listu torki temperatures (koje čuvaju datum merenja i izmerenu temperaturu) i dva cela broja start i end koji predstavljaju mesece. Zadati meseci pripadaju istoj godini. Funkcija treba da iz date liste ukloni sve torke koje pripadaju zadatom vremenskom intervalu, uključujući i mesece start i end. Povratna vrednost funkcije je lista preostalih torki.

3. Napisati funkciju find_lowest_temperature(temperatures, year), koja prima listu torki temperatures (koje čuvaju datum merenja i izmerenu temperaturu) i godinu year tipa int. Povratna vrednost funkcije treba da bude samo najniža temperatura izmerena u zadatoj godini ili None ukoliko ne postoji nijedna izmerena temperatura za tu godinu,

4. Korišćenjem prethodno realizovane funkcije find_lowest_temperature() napisati funkciju find_lowest_temperatures(city_temperatures, years), koja prima rečnik city_temperatures (ključ je ime grada, a vrednost lista torki koje čuvaju datum merenja i izmerenu temperaturu) i skup godina years gde je svaka godina tipa int. Funkcija treba da pronađe najniže temperature za svaki grad i svaku godinu iz zadatog skupa. Rezultat je rečnik rečnika. Ključ spoljašnjeg rečnika je godina, a vrednost unutrašnji rečnik. Ključ unutrašnjeg rečnika je ime grada, a vrednost najniža temperatura za datu godinu i grad.

5. Napisati funkciju read_years(), koja sa standardnog ulaza učitava niz celih brojeva u jednoj liniji odvojenih razmakom koji predstavljaju godine. Povratna vrednost je lista celih brojeva koji predstavljaju godine. Smatrati da unos neće saržati duplikate.

Korišćenjem prethodno realizovanih funkcija napisati glavni program koji učitava sva merenja iz fajla temperature.csv u rečnik listi, izbaci iz nje sve podatke o merenjima koja su obavljena od februara do juna (uključujući i te mesece), zatim učita godine sa standardnog ulaza i za iste pronađe merenja koja odgovaraju najnižim temperaturama za svaku zadatu godinu i svaki grad. Na standardnom izlazu ispisati broj nepostojećih merenja (vrednost None) iz pronađenih merenja.

Page 8: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

Kraj

II. PITANJA

Pitanje

Koji je red funkcije složenosti sledećeg segmenta koda? for i := n downto 2 do for j := n - i + 2 to n do begin k := n - i + 1; m := j; repeat k := k - 1; m := m + 1; until m > k; end;

®) n3 ®) n5/2 (®) n2

Pitanje

Koja od ponuđenih sekvenci odgovara sintaksnoj definiciji za start u zadatoj u BNF notaciji?

<start> ::= <a> | <a><start><a> <a> ::= 3<a>4 | 2<a>1 | 0<b> <b> ::= 12 | 21

®) 330124412020211 (®) 330124401220211 ®) 340124401222011

Pitanje

Šta ispisuje sledeći program na programskom jeziku Python? Funkcija enumerate čiji je argument string line pridružuje indeks i svakom znaku c tog stringa (počevši od 0) . def foo(line): return len(set(line)) == len(line) def bar(line): return ''.join(c for i, c in enumerate(line) if not c in line[:i]) def process(lst): return [e for e in lst if foo(e)] + [bar(e) for e in lst if not foo(e)] lst = ["243", "12123", "45", "991"] print(' '.join(e for e in process(lst)))

(®) 243 45 123 91 ®) 11223 199 234 45 ®) 2 3 4 1

Pitanje

Šta ispisuje sledeći program na programskom jeziku Python? import re def foo ( text ): matches = re.findall ( "\d:\d|\d{1,}", text ) number = 0 b = int ( matches [ len ( matches ) - 1 ] ) for match in matches[:-1]: d, p = [ int ( x ) for x in match.split ( ":" ) ] number += d * b**p return number list = [ "1:3|3:2|5", "3:4|2:2|9", "5:3|6:2|1:3|2" ]

Page 9: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

print ( " ".join ( [ str ( foo ( x ) ) for x in list ] ) )

(®) 200 19845 72 ®) 200 19485 72 ®) 200 19855 77

Zadatak 1

def read_words ( ): return input ( ).split ( ) def rotate_words ( words, K ): K = K % len ( words ) rotated_words = words[-K:] + words[:-K] for i in range ( len ( words ) ): words[i] = rotated_words[i] def format_words ( words, sep ): return sep.join ( words ) words = read_words ( ) K = int ( input ( ) ) rotate_words ( words, K ) separator = input ( ) print ( format_words ( words, separator ) )

Zadatak 2

def read_temperatures(filename): data = {} with open(filename) as f_in: for line in f_in: fields = [elem.strip() for elem in line.split(',')] city = fields[0] date = fields[1] t = fields[2] if not city in data: data[city] = [] data[city].append((date, t)) return data def remove_temperatures(temperatures, start, end): temperatures_new = [] for sample in temperatures: mm = int(sample[0].split('/')[1]) if not start <= mm <= end: temperatures_new.append(sample) return temperatures_new def find_lowest_temperature(temperatures, year): min = None for sample in temperatures: yyyy = int(sample[0].split('/')[2]) t = float(sample[1]) if yyyy == year and (min is None or min > t): min = t return min def find_lowest_temperatures(city_temperatures, years): data = {} for year in years: data[year] = {} for city in city_temperatures: data[year][city] = find_lowest_temperature(city_temperatures[city], year) return data def read_years(): return [int(elem) for elem in input().split()] t = read_temperatures("temperatures.csv") start, end = 2, 6

Page 10: ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU … · 2020. 2. 3. · ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 30.01.2020. Ispit iz Programiranja 1 Ispit traje

for city in t: t[city] = remove_temperatures(t[city], start, end) years = read_years() lowest = find_lowest_temperatures(t, years) #print(lowest) cnt_none = 0 for year in lowest: for city in lowest[year]: if lowest[year][city] is None: cnt_none += 1 print(cnt_none)