Reseni ispiti
-
Upload
anonymous-mbz8dv1 -
Category
Documents
-
view
291 -
download
0
Transcript of Reseni ispiti
-
7/25/2019 Reseni ispiti
1/31
SSETF
[PROGRAMIRANJE 1]Materijali za prvu godinu iz predmeta programiranje 1, zadaci. Autori zadataka su navedeni ispod
datuma zadatka.
elimo Vam srean i uspean rad!Va SSETF, Filip Zecevic
-
7/25/2019 Reseni ispiti
2/31
[PROGRAMIRANJE 1] SSETF
2
Januar 2012 zadatak 2
Autor:nepoznat
Data je atoteka ponue.txt u kojoj se u svakom reu nalaze poaci o jenoj ponui, i to: ifra ponue(ceo broj), minimalni broj porubina a bi ponua uspela (ceo broj), jeinina cena ponue (ceo broj) i
popust koji de biti oobren ukoliko ponuda uspe (ceo broj). Datoteka porudzbine.txt u svakom redu
sari
poatke o jenoj porubini, i to: ifru poruioca (ceo broj), ifru ponue (ceo broj) i broj porubina
(ceo
broj). Da bi ponua uspela, potrebno je a minimalni broj porubina ukupno za svaku ponudu bude
poruen,
u suprotnom ponua nije uspela. Napisati program na programskom jeziku Pascal koji ita opisane
datoteke i
ispisuje koje su ponue uspele (ime ponuaa i naziv ponue). Pore toga, program treba a ispie i
koliko
iznosi najvedi ukupni ostvareni popust meu uspelim ponuama. Broj reova u atotekama nije unapre
poznat. Svaku atoteku je ozvoljeno proititi samo jenom.
Resenje:
program p118012012z2;
type porudzbina=record
{ne treba sifra porucioca}
sifra:integer; {sifra porudzbine}broj:integer; {broj porudzbina}
end;
pokazivac=^element;
element=record
p:porudzbina;
sledeci:pokazivac;
end;
var prvi:pokazivac; {pokazivac na pocetak liste}
tekuci:pokazivac;
ponude, porudz:text;
temp:porudzbina;sifbzvz, brojponuda:integer;
sifp, minbrpor, jedcena, popust:integer;
maxpopust:integer;
brojreda:integer;
procedure obrisilistu(var prvi:pokazivac);
var tekuci:pokazivac;
begin
-
7/25/2019 Reseni ispiti
3/31
[PROGRAMIRANJE 1] SSETF
3
while prvi nil do begin
tekuci:=prvi^.sledeci;
dispose(prvi);
prvi:=tekuci;
end;
end;
procedure ubaciulistuk(var prvi:pokazivac; por:porudzbina); {menja se tip onoga sto se dodaje}
var tekuci, novi:pokazivac;
begin
new(novi);
novi^.p:=por;
novi^.sledeci:=nil;
if prvi = nil then
prvi:=novi
else begin
tekuci:=prvi;
while tekuci^.sledeci nil do
tekuci:=tekuci^.sledeci;
tekuci^.sledeci:=novi;
end;
end;
begin
prvi:=nil; {lista je uvek prazna na pocetku}
assign(ponude, 'ponude.txt');
assign(porudz, 'porudzbine.txt');
reset(ponude);
reset(porudz);
while not eof(porudz) do begin
readln(porudz, sifbzvz, temp.sifra, temp.broj);
ubaciulistuk(prvi, temp);
end;
brojreda:=0;
writeln('Uspele ponude:');
while not eof(ponude) do begin
readln(ponude, sifp, minbrpor, jedcena, popust);
brojponuda:=0;
tekuci:=prvi;
while tekuci nil do begin
if (sifp = tekuci^.p.sifra) then brojponuda:=brojponuda+tekuci^.p.broj; {prebroj
sve ponude}
tekuci:=tekuci^.sledeci;
end;
-
7/25/2019 Reseni ispiti
4/31
[PROGRAMIRANJE 1] SSETF
4
if (brojponuda >= minbrpor) then begin
writeln(sifp, ';');
if (brojreda=0) then begin
maxpopust:=brojponuda*jedcena*popust div 100;
brojreda:=brojreda+1;
endelse
if (brojponuda*jedcena*popust div 100) > maxpopust) then
maxpopust:=brojponuda*jedcena*popust div 100;
end;
end;
writeln('Najveci popust:');
writeln(maxpopust, ' dinara');
close(ponude);
close(porudz);
obrisilistu(prvi); {!!!}
end.
-
7/25/2019 Reseni ispiti
5/31
[PROGRAMIRANJE 1] SSETF
5
Oktobar 2011 zadatak 2
Autor:DarioM
Napisati program na programskom jeziku Pascal koji pomae serviseru u otkrivanju kvarova na
mobilnom telefonu. U atoteci kvarovi.txt at je spisak svih mogudih kvarova. U svakom reuove atoteke zapisane su informacije o tano jenom kvaru i to u sleedem formatu: naziv kvara
(jena re o 20 znakova) i potom o 10 celih brojeva koji prestavljaju ifre simptoma koji se
pojavljuju ko tog kvara. Serviser sa stanarnog ulaza unosi ifre simptoma (o 10 celih brojeva) koji su
primedeni ko pokvarenog telefona, a program treba a na stanarni izlaz ispie nazive svih mogudih
kvarova ko kojih se pojavljuju svi uoeni simptomi (npr. neka kvar X ima simptome 2 34 8 20, a serviser
je uoio simptome 2 i 8; zato treba ispisati kvar X kao mogudi kvar; a je serviser kojim sluajem uoio
simptome 2 7 i 8, kvar X uopte ne bi trebaloispisati, jer nisu uoeni svi simptomi).
Resenje:
PROGRAM KvaroviTelefona (input, output, ulaz);
VAR
naziv : string[20];
c : char; (* pomocu njega citamo naziv *)
simptomi : array [1..10] of integer; (* simptomi u fajlu *)
broj : integer; (* broj simptoma ucitanih iz jedne linije fajla *)
s : array [1..10] of integer; (* simptomi ucitani sa standardnog ulaza *)
n : integer; (* broj simptoma ucitanih sa standardnog ulaza *)
i, j : integer; (* pomocne varijable - brojaci *)
ulaz : text;
moguci, postoji : boolean; (* moguci -> kvar, ako svi elementi postoje i u liniji fajla *)(* postoji -> ako jedan od simptoma sa standardnog ulaza postoji u liniji fajla *)
(* koristi se u unutrasnjoj petlji u provjeri *)
BEGIN
assign (ulaz, 'kvarovi.txt');
reset (ulaz);
(* citanje simptoma sa glavnog ulaza - u varijablu s *)
n := 0;
WHILE ( (NOT eoln(input)) AND (n < 10) ) DO
BEGINn := n + 1;
read (input, s[n])
END;
WHILE NOT eof(ulaz) DO
BEGIN
(* citanje naziva jednog kvara iz fajla *)
naziv := ''; (* naziv = nulti string *)
-
7/25/2019 Reseni ispiti
6/31
[PROGRAMIRANJE 1] SSETF
6
read (ulaz, c);
WHILE (c ' ') DO
BEGIN
naziv := naziv + c;
read (ulaz, c)
END;(* citanje simptoma za dati kvar iz fajla *)
broj := 0;
WHILE ( (NOT eoln(ulaz)) AND (broj
-
7/25/2019 Reseni ispiti
7/31
[PROGRAMIRANJE 1] SSETF
7
Jun 2011 zadatak 1
Autor:zmajciki
Neka se u datoteci biblio.txt nalaze podaci o knjigama koje poseduje neka biblioteka. Svaki
re sari ifru knjige (ceo broj), broj raspoloivih kopija (ceo broj) i naslov knjige o kraja rea (ne uio 255 karaktera). U atoteci izato.txt se nalaze poaci o knjigama koje su izate na itanje po
sleedem formatu: ifra knjige (ceo broj) i ifra korisnika (ceo broj) koji je pozajmio knjigu na itanje.
Napisati program na programskom jeziku Pascal koji proita saraj naveenih atoteka i na glavnom
izlazu ispie naslove svih onih knjiga ije su sve kopije izate na itanje korisnicima. Voiti rauna o
ispravnom koridenju zauzetih resursa.
Resenje:
PROGRAM jun2011_zadatak1(output, biblioteka, izdato);
TYPE knjiga = RECORD
sifra, brojKopija :integer;
naslov :string[255];
END;
pelem = ^elem;
elem = RECORD
info :knjiga;
sled :pelem;
END;
{dodavanje na kraj ulancane liste}
PROCEDURE dodaj(VAR lista :pelem; k :knjiga);
VAR novi, tek :pelem;
BEGIN
new(novi);
novi^.info:= k;
novi^.sled:= NIL;
IF lista = NIL THEN {ako je lista prazna}
lista:= noviELSE BEGIN
tek:= lista;
WHILE tek^.sled NIL DO
tek:= tek^.sled;
tek^.sled:= novi;
END;
END;
-
7/25/2019 Reseni ispiti
8/31
[PROGRAMIRANJE 1] SSETF
8
{brisanje liste}
PROCEDURE obrisi(VAR lista :pelem);
VAR tek, stari :pelem;
BEGIN
tek:= lista;WHILE tek NIL DO BEGIN
stari:= tek;
tek:= tek^.sled;
dispose(stari);
END;
lista:=NIL;
END;
{ucitavanje datoteke u listu}
PROCEDURE ucitajKnjige(VAR dat :TEXT; VAR lista :pelem);
VAR k :knjiga;
BEGIN
reset(dat);
WHILE NOT eof(dat) DO BEGIN
readln(dat, k.sifra, k.brojKopija, k.naslov);
dodaj(lista, k);
END;
close(dat);
END;
{na osnovu ifre nalazi knjigu i umanje broj kopija za 1}
PROCEDURE izdajKnjigu(lista :pelem; sifra:integer);VAR tek :pelem;
nasao :boolean;
BEGIN
tek:= lista;
nasao:= FALSE;
WHILE (tek NIL) AND (NOT nasao) DO BEGIN
IF tek^.info.sifra = sifra THEN BEGIN
tek^.info.brojKopija:= tek^.info.brojKopija - 1;
nasao:= TRUE;
END;tek:= tek^.sled;
END;
END;
{ispis knjiga ije su sve kopije izate}
PROCEDURE ispisiIzdate(lista :pelem);
VAR tek :pelem;
-
7/25/2019 Reseni ispiti
9/31
[PROGRAMIRANJE 1] SSETF
9
BEGIN
tek:= lista;
WHILE tek NIL DO BEGIN
IF tek^.info.brojKopija = 0 THEN
writeln(output, tek^.info.naslov);
tek:= tek^.sled;END;
END;
{glavni program}
VAR biblioteka, izdato :TEXT;
knjige :pelem;
sifra :integer;
BEGIN
assign(biblioteka, 'biblio.txt');
assign(izdato, 'izdato.txt');
ucitajKnjige(biblioteka, knjige);
reset(izdato);
WHILE NOT eof(izdato) DO BEGIN
realn(izato, sifra); {ita se samo ifra knjige, korisnik nam nije potreban}
izdajKnjigu(knjige, sifra);
END;
close(izdato);
ispisiIzdate(knjige);
obrisi(knjige);END.
-
7/25/2019 Reseni ispiti
10/31
[PROGRAMIRANJE 1] SSETF
10
Januar 2011 zadatak1
Autor: zmajciki
Data je atoteka profesori.txt u kojoj se nalazi po jean re za svakog profesora, koji sari
jenu ili vie ifara premeta koje taj profesor preaje, ge su ifre formirane o tacno 6 znakova, aizmeu ifara se nalazi po jean blanko znak. Napisati program na programskom jeziku Pascal koji
formira jenostruko ulancanu listu premeta u kojoj svaki element sari ifru premeta i broj profesora
koji predaju taj predmet. Na osnovu formirane liste ispisati na glavnoj izlaznoj jedinici, u posebnim
redovima,ifre onih premeta koje preaje samo jean profesor. Voiti racuna o ispravnom koricenju
zauzetih resursa.
Resenje:
PROGRAM zad1_19_01_2011(profesori, output);
TYPE SifraPredmeta = string[6];
Pelem = ^Elem;
Elem = RECORD
sifra:SifraPredmeta;
brojProfesora:integer;
sled:Pelem;
END;
{dodavanje na kraj liste}
PROCEDURE dodaj(VAR lista:Pelem; s:SifraPredmeta; br:integer);
VAR novi, tek:Pelem;
BEGIN{pravimo novi element}
new(novi);
novi^.sifra:=s;
novi^.brojProfesora:=br;
novi^.sled:=nil;
{ako je lista prazna}
if (lista = nil) then
lista:=novi
{ako nije prazna trazimo kraj liste}
else begin
tek:=lista;while (tek^.sled nil) do
tek:=tek^.sled;
tek^.sled:=novi;
end;
END;
{brisanje liste}
PROCEDURE brisi(VAR lista:Pelem);
-
7/25/2019 Reseni ispiti
11/31
[PROGRAMIRANJE 1] SSETF
11
VAR tek, stari:Pelem;
BEGIN
tek:=lista;
while (tek nil) do begin
stari:=tek;
tek:=tek^.sled;dispose(stari);
end;
lista:=nil;
END;
{trazi zadatu sifru u listi i vraca adresu pronadjenog elementa ili nil ako ne postoji}
FUNCTION trazi(lista:Pelem; kljuc:SifraPredmeta):Pelem;
VAR tek:Pelem;
BEGIN
tek:=lista;
trazi:=nil; {pretpostavimo da necemo naci element}
while (tek nil) do begin
if (tek^.sifra = kljuc) then
trazi:=tek; {kada smo nasli element pamtimo njegovu adresu}
tek:=tek^.sled;
end;
END;
VAR profesori:text;
lista, tek:Pelem;
sifra:SifraPredmeta;
c:char;
BEGIN
assign(profesori, 'profesori.txt');
reset(profesori);
lista:=nil; {lista je prazna}
{dok ne dodjemo do kraja datoteke}
while not eof(profesori) do begin
{dok ne dodjemo do kraja reda}
while not eoln(profesori) do begin{citamo sifru predmeta}
read(profesori, sifra);
read(profesori, c); {gutamo prazan znak}
{ako postoji dobijamo pokazivac na odovarajuci element liste}
tek := trazi(lista, sifra);
{proveravamo da li sifra postoji}
if tek nil then
{ako sifra postoji povecavamo broj profesorai za 1}
-
7/25/2019 Reseni ispiti
12/31
[PROGRAMIRANJE 1] SSETF
12
tek^.brojProfesora:= tek^.brojProfesora + 1
else
{ako ne postoji upisuje novi element}
dodaj(lista, sifra, 1);
end;
readln(profesori); {prelazak u novi red}end;
{ispisujemo samo predmete koje drzi jedan profesor}
tek:=lista;
while tek nil do begin
if (tek^.brojProfesora = 1) then
writeln(output, tek^.sifra);
tek:=tek^.sled;
end;
brisi(lista);
close(profesori);
readln
END.
-
7/25/2019 Reseni ispiti
13/31
[PROGRAMIRANJE 1] SSETF
13
Januar 2011 zadatak 2
Autor: stefanvozd uz pomoc forumasa
Napisati program na programskom jeziku Pascal koji pronalazi trougao najvede povrine. Trouglovi
se zaaju pomodu va niza realnih brojeva, najvede uine 100, koji prestavljaju osnovice i visinetrouglova. Program treba a uita nizove, izrauna povrine svih trouglova, a zatim pronae i ispie
poatke o trouglu najvede povrine: uinu osnovice i visine, i povrinu. Uitavanje, raunanje
povrine i pronalaenje trougla najvede povrine realizovati kao zasebne potprograme. Potprogrami
sa glavnim programom smeju a komuniciraju iskljuivo putem svojih argumenata i povratne
vrenosti. Program treba a ponavlja prethone korake sve ok se za uinu nizova ne unese
nekorektna vrednost.
Resenje:
program drugizad;
type
osnovice=array[1..100] of integer;
visine=array[1..100] of integer;
var
a:osnovice;
h:visine;
i,n:integer;
max_p,max_o,max_h:real;
procedure izracunaj(a:osnovice; h:visine; p:integer; var max_p,max_o,max_h:real);
var
i:integer;
povrsina:real;
begin
max_p:=0;
for i:=1 to p do
povrsina:=a[i]*h[i]/2;
if povrsina>max_p then
begin
max_p:=povrsina;
max_o:=a[i];
max_h:=h[i];end;
end;
procedure ispisi(max_p,max_o,max_h:real);
begin
writeln('Najveca povrsina troulga je',max_p:0:2);
write('Osnovice i visine tog trougla su');
-
7/25/2019 Reseni ispiti
14/31
[PROGRAMIRANJE 1] SSETF
14
write(max_o:8:2);
write(max_h:8:2);
end;
begin
writeln('Ucitaj duzinu niza');readln(n);
while((n>0) and (n
-
7/25/2019 Reseni ispiti
15/31
[PROGRAMIRANJE 1] SSETF
15
//funkcija za ucitavanje visina i osnovica trouglova u odgovarajuce nizove
function UcitajNizove(var nizO, nizV: nizRB; var brEl: integer; maxBrEl: integer): boolean;var
i: integer;
begin
//vrednost funkcije je na pocetku 'true' - pretpostavljamo da ce nizovi
//biti ucitani (nece biti uneta nedozvoljena vrednost za broj elemenata)
UcitajNizove:= true;
writeLn('Unesite broj trouglova:');
//ucitavamo uneti broj elemenata/trouglova
readLn(brEl);
//ako je ta vrednost dozvoljena za broj elemenata/trouglova
if (brEl > 0) and (brEl
-
7/25/2019 Reseni ispiti
16/31
[PROGRAMIRANJE 1] SSETF
16
begin
//za svaki trougao
for i:= 1 to brEl do
//izracunavamo njegovu povrsinu i smestamo u niz
nizP[i]:= nizO[i] * nizV[i] / 2;
end; //function
//procedura za pronalazenje trougla sa najvecom povrsinom
//i ispis informacija o tom trouglu (osnovica, visina, povrsina)
procedure PronadjiNajvecu(nizO, nizV, nizP: nizRB; brEl: integer);
var
i: integer;
maxP, visina, osnovica: real;
begin
//postavljamo najvecu povrsinu na nemogucu vrednost
maxP:= -1;
//zatim, za svaki trougao
for i:= 1 to brEl do
begin
//proveravamo da li je njegova povrsina veca od
//trenutno najvece pronadjene povrsine
if nizP[i] > maxP then
begin//ako jeste, pamtimo novu povrsinu
maxP:= nizP[i];
//i podatke o tom trouglu
osnovica:= nizO[i];
visina:= nizV[i];
end; //if
end; //for
//deo za ispis
writeLn;
//ispisujemo najvecu povrsinu (dve decimale)
writeLn('Maksimalna povrsina: ', maxP:0:2);
//ispisujemo osnovicu trougla sa najvecom porsinom (dve decimale)
writeLn('Osnovica trougla sa maksimalnom povrsinom: ', osnovica:1:2);
-
7/25/2019 Reseni ispiti
17/31
[PROGRAMIRANJE 1] SSETF
17
//ispisujemo visinu trougla sa najvecom povrsinom (dve decimale)
writeLn('Visina trougla sa maksimalnom povrsinom: ', visina:1:2);
//malo praznih linija da bi lepse izgledalo
writeLn;writeLn;
writeLn;
end; //function
//glavni program
begin
//ako uspesno ucitamo nizove (to jest, ako je uneta dozvoljena vrednost
//za broj truglova, funkcija vraca true)
while UcitajNizove(niz_osnovica, niz_visina, broj_elemenata, max_br_el) do
begin
//onda ulazimo u petlju i pozivamo proceduru za izracunavanje svih povrsina,
IzracunajPovrsine(niz_povrsina, niz_osnovica, niz_visina, broj_elemenata);
//proceduru za pronalazenje trougla sa najvecom povrsinom i
//ispis trazenih podataka o tom trouglu (povrsina, visina, osnovica)
PronadjiNajvecu(niz_osnovica, niz_visina, niz_povrsina, broj_elemenata);
end; //whileend. //program
-
7/25/2019 Reseni ispiti
18/31
[PROGRAMIRANJE 1] SSETF
18
Februar 2010 zadatak 2
Autor:persefona
U tekst datoteci kupovina.txt nalaze se podaci o obavljenoj kupovini. U svakom redu se nalaze
poaci o jenom kupljenom proizvou i to: ifra proizvoa (ceo broj) i koliina (ceo broj). Poaci ojednom proizvodu se pojavljuju samo u jednom redu datoteke. U datoteci cenovnik.txt nalaze se podaci
o proizvoima i cenama, zapisani tako a svaki re sari: ifru proizvoa i cenu po jeinici mere (realan
broj). Cenovnik sari najvie 1000 proizvoa.
Resenje:
program Kupovina (ulaz1, ulaz2, output);
type
proizvod = record
id : integer;
kolicina : integer;
end;
cenovnik = record
sifra, brcena : integer;
cena : real;
end;
var
ulaz1, ulaz2 : text;
i : integer;s : real;
kupljeno : proizvod;
niz : array [1..1000] of cenovnik;
begin
assign (ulaz1, 'C:\kupovina.txt');
reset (ulaz1);
assign (ulaz2, 'C:\cenovnik.txt');
reset (ulaz2);
s := 0.0;
i := 1;while not eof (ulaz2) do
begin
read (ulaz2, niz[i].sifra, niz[i].cena);
i := i + 1; brcena := brcena + 1;
end;
close (ulaz2);
while not eof (ulaz1) do
begin
-
7/25/2019 Reseni ispiti
19/31
[PROGRAMIRANJE 1] SSETF
19
read (ulaz1, kupljeno.id, kupljeno.kolicina);
for i := 1 to brcena do
begin
if niz[i].sifra = kupljeno.id then
s := s + kupljeno.kolicina * niz[i].cena;end;
end;
writeln (output, 'Vas racun je: ', s:5:2);
readln;
close (ulaz1);
end.
-
7/25/2019 Reseni ispiti
20/31
[PROGRAMIRANJE 1] SSETF
20
Januar 2010 zadatak 1
Autor:zmajciki
U tekst datoteci ulaz.txt nalaze se podaci o stanovima. U svakom redu datoteke nalazi se podatak oaresi stana (ulica, najvie 30 znakova, i broj), zatim broj prostorija, nakon ega slee imenzije svake
prostorije. Na primer: "Beogradska 11 3 10 4 5 5 3 3", znai a je aresa stana Beograska 11, stan ima 3
prostorije, a dimenzije prostorija su 10x4, 5x5, 3x3, respektivno. Broj stanova (redova u datoteci) kao i
broj prostorija svakog stana nije unapred poznat. Na osnovu podataka o prostorijama, izraunati
povrinu svakog stana. Poatke o prostorijama nije potrebno uvati. Napisati program na programskom
jeziku Pascal koji uitava poatke o stanovima iz atoteke, zatim sa stanarnog ulaza uitava
informacije o donjoj i gornjoj granici povrine za koju je korisnik zainteresovan, i u izlaznu atateku ispie
najpre jedan red sa zadatim granicama, a onda u posebnim redovima adrese stanova koji zadovoljavaju
postavljeni uslov. Potrebno je obezbeiti a se program izvrava sve ok korisnik ne unese negativnu
vrednost za jednu od granica.
Resenje:
PROGRAM zadatak1_januar2010(input, ulaz, izlaz);
TYPE Stan = RECORD
ulica: STRING[30];
brojSoba: INTEGER;
povrsina: REAL;
END;
{Procedura koja cita jednu rec iz nevedene datoteke i smesta je u string
preskacuci pri tom sve blanko znake ispred reci ako postoje}
PROCEDURE citajRec(VAR dat:TEXT; VAR rec:STRING);
VAR c:CHAR;
BEGIN
rec := '';
{gutanje razmaka i hvatanje prvog znaka}
repeat
if (not eof(dat)) and (not eoln(dat)) then read(dat,c)
else break;
until (c ' ');
{citanje stringa do prvog razmaka}
while (c ' ') and (not eoln(dat)) and (not eof(dat)) do begin
-
7/25/2019 Reseni ispiti
21/31
[PROGRAMIRANJE 1] SSETF
21
rec := rec + c;
read(dat,c);
end;
{zakrpa za citanje poslednjeg slova ako se rec nalazi na kraju reda, koje bi se inace preskocilo}
if eoln(dat) OR eof(dat) then rec := rec + c;
END;
{Procedura koja iz jednog reda zadate datoteke cita sve podatke o stanu,
racuna povrsinu i prelazi u novi red datoteke. Ova procedura
prakticno opanasa proceduru readln, ali za podatak tipa Stan}
PROCEDURE ucitajStan(VAR dat:TEXT; VAR podatak:Stan);
VAR duzina, sirina: REAL;
i: INTEGER;
broj: STRING[5];
BEGIN
{citanje ulice}
if not eof(dat) then begin
{cita ulicu}
citajRec(dat, podatak.ulica);
{cita broj, kao string}
citajRec(dat, broj);
{dodaje string broj}
podatak.ulica:= podatak.ulica + ' ' + broj;
end;
{citanje broja soba}
if not eof(dat) then read(dat, podatak.brojSoba);
{citanje podataka o sobama i racunanje povrsine}
podatak.povrsina:= 0;
for i:= 1 to podatak.brojSoba do
if not eof(dat) then begin
read(dat, duzina, sirina);
podatak.povrsina:= podatak.povrsina + duzina*sirina;
end;
{prelazak u novi red}
readln(dat);
END;
VAR ulaz, izlaz: TEXT;
podatak: Stan;
-
7/25/2019 Reseni ispiti
22/31
[PROGRAMIRANJE 1] SSETF
22
min, max: REAL;
i: INTEGER; {i sluzi za kreiranje imena izlazne datoteke}
broj: STRING[5]; {broj sluzi za kreiranje imena izlazne datoteke}
BEGIN
{pridruzivanje ulazne datoteke i datotecke promenljive}assign(ulaz, 'ulaz.txt');
{citanje minimalne i maksimalne povrsine}
writeln('Unesite minimalnu i maksimalnu zeljenu povrsinu stana');
readln(input, min, max);
{glavna obrada}
i:=0;
while (min>=0) and (max>=0) do begin
{priprema datoteku za citanje}
reset(ulaz);
{priprema datoteku za pisanje}
{i se dodaje na ime izlazne datoteke da bi svaki put pisali u novu datoteku
sa imenima 'izlaz1.txt', 'izlaz2.txt', itd.; u principu ovo je nepotreban deo :)}
inc(i); str(i,broj); {konvertuje i u string}
assign(izlaz, 'izlaz'+broj+'.txt');
rewrite(izlaz);
{ispis minimalne i maksimalne povrsine u datoteku zaokruzenih na dve decimale}
writeln(izlaz, min:2, ' ', max:2);
{citanje datoteke i ispis}while not eof(ulaz) do begin
ucitajStan(ulaz, podatak);
if (podatak.povrsina >= min) and (podatak.povrsina
-
7/25/2019 Reseni ispiti
23/31
[PROGRAMIRANJE 1] SSETF
23
Jun 2009 zadatak 1
Autor:stefanvozd
Data je tekstualna atoteka polinom.txt koja sari poatke o jenom polinomu. U prvom
reu atoteke se nalazi ceo broj N (maksimalna vrenost 100) koji ozna ava re polinoma. Unarednom redu se nalazi N+1 celih nenegativnih brojeva koji ozna avaju koeficijente polinoma o
koeficijenta najvede teine an o koeficijenta najmanje teine a0. Napisati program na programskom
jeziku Pascal koji proita atu tekstualnu atoteku, ispie u itani polinom, a zatim izrauna i ispie
vrednost polinoma za vrenost x koja se unosi sa stanarnog ulaza. Ispis i ra unanje polinoma
realizovati kao zasebne potprograme koji sa pozivajudim programom komuniciraju iskljuivo putem
argumenata i povratne vrednosti. Prilikom ispisivanja polinoma, ne ispisivati lanove iji koeficijenti
imaju vrednost 0.
Resenje:
program polinomt;
type
niz=array[1..101] of integer; {dakle u zadatku je receno da najveci stepen moze biti 100, a ovo 101 je
mesto ostavljeno ako budemo imali 100stepen, pa za broj n+1 koji je takodje naznacen u zadatku}
var
f:text; { f ce nam biti promenljiva vezana za tekstualni faj}
n,x,i:integer; {n ce nam biti stepen, x ce nam trebati na kraju kada budemo hteli da izraznunamo P(x) i I
ce nam biti brojac}
a:niz; {radi lepseg pisanja deklarisacemo da nam je a niz umesto da pisemo niz[i] pisacemo a[i]}
{Korak po korak kako sam ja radio bice oznacen, nadjite gde su koraci 1,2,3 i po tom redosledu citajte.}
procedure ispisiPolinom( n:integer; a:niz); {>>>2.KORAK!!!3.korak!!!
-
7/25/2019 Reseni ispiti
24/31
[PROGRAMIRANJE 1] SSETF
24
suma:=a[1]*exp(n*ln(x)); {na pocetku je suma jednaka samo prvom clanu niza ax^n gde je n stepen,
exp je ugradjena fja za racunanje stepena na n-ti}
for i:=2 to n+1 do {krecemo od drugog clana jer smo prvi izracunali}
begin
suma:=a[i]*exp((n-1)*ln(x))+suma; {odavde sabiramo sve clanove tipa ax^n i dodajemo ih na sumu}
end;izracunaj:=suma; {rezultat koji ce nam ispisivati fja- ce biti jednak sumi koju smo izracunali}
end;
begin {>>>1.KORAK
-
7/25/2019 Reseni ispiti
25/31
[PROGRAMIRANJE 1] SSETF
25
Jun 2009 zadatak 2
Autor: DarioM
Napisati program na programskom jeziku Pascal koji rauna uinu zatvorene izlomljene linije u
ravni prestavljene pomodu liste taaka. Program treba najpre auita sa stanarnog ulaza realnekoorinate taaka u ravni. Broj taaka nije unapre poznat, ved se unos taaka vri sve ok se ne oformi
zatvorena linija (ok se ponove koorinate polazne ta ke). Potom je potrebno ispisati sve unete take i
obim figure koju unete take formiraju. Program treba a ponavlja prethono opisani postupak sve ok
se ne unese linija nulte uine (prva i ruga taka su ientine). Voiti rauna o ispravnoj alokaciji i
ealokaciji inamike memorije.
Resenje:
PROGRAM izl_linija (input, output);
TYPE Tacka = RECORD
x, y : REAL;
END;
ElemPok = ^Elem;
Elem = RECORD
t : Tacka;
sled : ElemPok;
END;
VAR
t : Tacka;kraj : BOOLEAN;
lista, posl, novi : ElemPok; (* lista je zapravo pokazivac na prvi element liste *)
(* obrisi () ima zadatak da, ako argument nije vec prazan, da ga isprazni, obrise i postavi na nil *)
PROCEDURE obrisi (var lista : ElemPok; var posl : ElemPok);
VAR stari : ElemPok;
BEGIN
WHILE (lista NIL) DO
BEGINstari := lista;
lista := lista^.sled;
DISPOSE (stari);
END;
posl := NIL;
lista := NIL; (* nisam siguran treba li ovaj red nakon dispose, ali ne moze da skodi *)
END;
-
7/25/2019 Reseni ispiti
26/31
[PROGRAMIRANJE 1] SSETF
26
(* dodaj ima zadatak da tacku koja je vec provjerena na uslove za kraj rada doda u listu *)
(* da ne bismo prolazili svaki put kroz citavu listu, sto pri velikim listama zna biti ogroman gubitak *)
(* pamticemo pokazivac na poslednji ucitani element liste, to je ona varijabla posl *)
PROCEDURE dodaj (var lista, posl : ElemPok; el : ElemPok);BEGIN
IF (lista = NIL) THEN
lista := el
ELSE
posl^.sled := el;
posl := el;
END;
(* iste je funkcija koja vraca true ako su tacke proslijedjene kao argumenti iste, a false ako nisu iste *)
FUNCTION iste (e1 : ElemPok; e2 : ElemPok) : BOOLEAN;
BEGIN
IF (e1 NIL) AND (e2 NIL) AND (e1^.t.x = e2^.t.x) AND (e1^.t.y = e2^.t.y) THEN
iste := TRUE
ELSE
iste := FALSE;
END;
(* rastojanje () mjeri rastojanje izmedju dva elementa/tacke *)
FUNCTION rastojanje (e1 : ElemPok; e2 : ElemPok) : REAL;BEGIN
rastojanje := SQRT ( (e2^.t.x - e1^.t.x)*(e2^.t.x - e1^.t.x) + (e2^.t.y - e1^.t.y)*(e2^.t.y - e1^.t.y) );
END;
(* ispis koordinata i obima mnogougla *)
PROCEDURE ispisi (lista : ElemPok);
VAR
tek : ElemPok;
obim : REAL;BEGIN
tek := lista;
obim := 0;
WRITE ('[');
WHILE (tek NIL) DO
BEGIN
WRITE ('(', tek^.t.x:5:2, ',', tek^.t.y:5:2, ')');
IF (tek^.sled NIL) THEN
-
7/25/2019 Reseni ispiti
27/31
[PROGRAMIRANJE 1] SSETF
27
obim := obim + rastojanje (tek, tek^.sled)
ELSE
obim := obim + rastojanje (tek, lista);
tek := tek^.sled;
END;
WRITELN (']');WRITE ('Obim: ', obim:5:2);
WRITELN ();
READLN ();
END;
BEGIN
kraj := FALSE;
WHILE (kraj = FALSE) DO
BEGIN
WRITELN ();
REPEAT
NEW (novi);
WRITE ('Unesite koordinate (x,y): ');
READLN (novi^.t.x, novi^.t.y);
novi^.sled := NIL;
IF (iste (posl, novi) = TRUE) THEN
kraj := TRUE;
ELSE IF (iste (lista, novi) = FALSE) THEN
dodaj (lista, posl, novi);
UNTIL (lista novi) AND (iste (lista, novi) = TRUE); (* lista novi uslov omogudava a ne
proslijeimo jenu te istu taku u va argumenta, tj. postavljamo uslov a se ne posmatra sluaj ka
lista i novi pokazuju na istu taku. Ako pokazuju na istu taku, tj. ka unesemo prvi element, ona uslovnede biti ispunjen, pa de opet a vrti petlju. *)
IF (iste (posl, novi) = FALSE) THEN (* ako iskoimo u kraj := TRUE; bloku, nedemo oati novi na
kraj liste, jer ne ulazimo u ELSE IF granu, pa ova provjera vai i ovje *)
BEGIN
ispisi (lista);
obrisi (lista, posl);
END;
END;
DISPOSE (novi); (* kad unesemo dva puta iste koordinate i zavrimo program, nismo povezali novi u
listu, pa moramo posebno a ga obriemo *)
obrisi (lista, posl); (* takoe moramo opet a obriemo listu jer nismo uli u ispisi (lista); obrisi (lista);blok *)
END.
-
7/25/2019 Reseni ispiti
28/31
[PROGRAMIRANJE 1] SSETF
28
Septembar 2008 zadatak 1
Autor:DarioM
Neka su graovi neke regije oznaeni brojevima o 1 o n. Postojanje puta o graa 1 o graa 2
oznaeno je parom 1 2. Niz ovakvih parova at je u atoteci parovi.txt, ge je svaki par zaat uposebnom redu. Potrebno je utvrditi da li je putanja izme u graova zatvoren kruni put, tj. a li se,
kretanjem o prvog naveenog graa u atoteci (gra 1 u primeru) moe stidi naza u taj gra, tako a
se prou svi putevi naveeni u atoteci. Smatrati a je reosle parova u atoteci proizvoljan, kao i a
su putevi jenosmerni (tj. a put 3 1 ne moe biti zamenjen putem 1 3). Napisati program na
programskom jeziku PASCAL koji proita tekstuelnu atoteku parovi.txt, a zatim orei a li je efinisana
putanja zatvorena. U sluaju a jeste, program na stanarnom izlazu ispie "Zatvorena" a u suprotnom
"Nije Zatvorena". Maksimalan broj parova je 100.
Resenje:
PROGRAM Putanja (ulaz, output);
TYPE
par = RECORD
elem1, elem2 : integer;
END;
VAR
parovi : par;
ulaz : text;
put1, put2 : ARRAY [1..100] OF par;i, j, n : INTEGER;
nadjen : BOOLEAN;
BEGIN
ASSIGN (ulaz, 'C:\parovi.txt'); reset(ulaz);
n := 1;
WHILE NOT EOF (ulaz) DO
BEGIN
READ (ulaz, put1[n].elem1, put1[n].elem2);
n := n+1;
END;n := n - 1;
put2[1] := put1[1];
i := 1;
nadjen := TRUE;
WHILE nadjen DO
BEGIN
nadjen := FALSE;
FOR j := 2 TO n DO
-
7/25/2019 Reseni ispiti
29/31
[PROGRAMIRANJE 1] SSETF
29
BEGIN
IF put2[i].elem2 = put1[j].elem1 THEN
BEGIN
i := i+1;
put2[i] := put1[j];
nadjen := TRUE;END;
END;
END;
IF (put2[1].elem1 = put2[n].elem2) AND (i = n) THEN
writeln (output, 'Zatvorena')
ELSE
writeln (output, 'Nije zatvorena');
CLOSE (ulaz);
END.
-
7/25/2019 Reseni ispiti
30/31
[PROGRAMIRANJE 1] SSETF
30
Jun 2007 zadatak 1
Autor:parkins
U nizu o najvie 200 elemenata se nalaze poaci o masama paketa koje treba transportovati
kamionima nosivosti 5t. Paketi ija je masa preko 1000kg se ne transportuju i podatke o njima trebaizbaciti iz niza. Nakon toga, paketi se u kamione utovaruju po reosleu iz niza sve ok zbirna teina
paketa nije veda o nosivosti kamiona. Potrebno je ispisati koliko je kamiona potrebno za transport svih
paketa, a za svaki kamion ukupnu masu paketa koji de biti transportovani. Izbacivanje elemenata iz niza i
ispis realizovati kao odvojene potprograme, koji sa glavnim programom komuniciraju samo putem
povratnih vrednosti i/ili liste argumenata.
Resenje:
program kamioni (input, output);
type pok = ^element;
element = record
masa : integer;
sledeci : pok;
end;
var slog : pok;
glava : pok;
procedure izbacivanjeelemenata (glava : pok);
var tekuci : pok;begin
tekuci := glava;
while tekuci^.sledeci nil do
begin
if tekuci^.sledeci^.masa > 1000 then
begin
glava := tekuci^.sledeci;
tekuci^.sledeci := glava^.sledeci;
dispose (glava);
end
elsetekuci := tekuci^.sledeci;
end;
end;
procedure ispisliste (glava:pok);
begin
while glava nil do
-
7/25/2019 Reseni ispiti
31/31
[PROGRAMIRANJE 1] SSETF
begin
write (output,glava^.masa, ' ');
glava := glava^.sledeci;
end;
end;
procedure obrada (var glava : pok);
var brojkamiona, suma : integer;
tekuci : pok;
begin
tekuci := glava;
suma := glava^.masa;
brojkamiona := 1;
while glava^.sledeci nil do
begin
if (suma + glava^.sledeci^.masa) > 5000 then
begin
writeln('kamion broj ', brojkamiona, ' ce nositi ', suma, 'kg');
suma := 0; brojkamiona := brojkamiona + 1;
end
else
begin
suma := suma + glava^.sledeci^.masa;
end;
tekuci := glava;
glava := glava^.sledeci;
dispose (tekuci);
end;
writeln ('ukupno je iskorisceno ', brojkamiona, 'kamiona');end;
BEGIN
glava := nil;
writeln ('unesi mase');
while not eoln (input) do
begin
new (slog);
read (input,slog^.masa);
slog^.sledeci := glava;
glava := slog;end;
ispisliste (glava);
izbacivanjeelemenata (glava);
writeln (output);
ispisliste (glava);
obrada (glava);
END.