Evo proslo je i republicko takmicenje iz programiranje koje je odrzano u Subotu u Dobijskom fakultetu "Slobomir P". Organizacija losa. Ljudi nisu bili ni predvidili kako cemo predavati zadatke

. Sto se tice zadataka, bilo ih je 6. Sam pokazatelj koliko su bili teski jesu 4 prva mjesta sa 100% bodova.
Ovako izgleda skraceni poredak:
1. Nemanja Tatic, Igor Peric, Aleksandar Stancic, Jelena Pejic - 130 bodova
2. Vladan Bjelic - 125 bodova
3. Sasa Ivanovic - 110 bodova
...
zadnji je imao 0 bodova

A sad zadatci:
1. Neka glupost iz fizike
Kod:
Putnicki voz je krenuo iz Beograda za Pariz brzinom od a km/h. Jedan cas kasnije krece brzi voz u istom smjeru brzinom b km/h.
Napisati program za izracunavanje vremena za koliko ce se vozovi sresti i na kom kilometru.
Resenje:
Kod:
//FreePascal 2.2.0
program zad1;
{$mode objfpc}
var
S, V, T, Voz1, Voz2 : real;
begin
Writeln('Brzina putnickog voza u km/h?');
Readln(Voz1);
Writeln('Brzina brzog voza u km/h?');
Readln(Voz2);
if (Voz1 = 0) and (Voz2 = 0) then
begin
Writeln('VOZOVI NISU NI KRENULI!');
Writeln('Brzi voz je sustigao putnicki na 0.00-tom kilometru');
Writeln('Vrijeme sustizanja prvog voza je 0.00h');
Readln;
Halt(0);
end;
if (Voz1 < 0) or (Voz2 < 0) then
begin
Writeln('Brzina ne moze biti negativna!');
Readln;
Halt(0);
end;
if (Voz1 >= Voz2) then
begin
Writeln('Do susretanja nece doci!');
Readln;
Halt(0);
end;
S := Voz1;
V := Voz2 - Voz1;
T := S / V;
S := T * Voz2;
Writeln('Brzi voz je sustigao putnicki na ', S:0:2, '-tom kilometru');
Writeln('Vrijeme sustizanja prvog voza je ', T:0:2,'h');
Readln;
end.
2. Najlaksi i najveca glupost

Kod:
Napisati program za odredjivanje prve i poslednje cifre unetog broja i zbira cifara.
Primjer:
Ulaz: 234567
Izlaz:
Prva cifra je 2
Zadnje cifra je 7
Zbir cifara je 27
Resenje:
Kod:
//FreePascal 2.2.0
program zad2;
{$mode objfpc}
uses
Sysutils;
var
Ulaz : string;
Izlaz : Int64;
i : Integer;
begin
while Ulaz = '' do
begin
Writeln('Ulaz?');
Readln(Ulaz);
end;
if Ulaz[1] = '-' then
begin
Writeln('Unesen je negativan broj. Cifre ce se gledati kao zasebni prirodni brojevi.');
Ulaz := Copy(Ulaz, 2, Length(Ulaz) - 1);
Writeln(Ulaz);
end;
Writeln('Prva cifra unetog broja je ', Ulaz[1]);
Writeln('Prva cifra unetog broja je ', Ulaz[Length(Ulaz)]);
Izlaz := 0;
for i := 1 to Length(Ulaz) do
Izlaz := Izlaz + StrToInt(Ulaz[i]);
Writeln('Zbir cifara unetog broja je ', Izlaz);
Readln;
end.
3. Sortiranje, ja sam uradio sa bubblesort-om nije mi se dao kucati QuickSort bez potrebe.
Kod:
Napisati program koji ispisuje rang listu takmicara iz republickog takmicenja tako sto se unosi: Sifra takmicara i broj osvojenih bodova.
Resenje:
Kod:
//FreePascal 2.2.0
program zad3;
{$mode objfpc}
type
TUcesnik = record
Sifra : string;
Bodovi : longint;
end;
var
N, i, j, Plasman : longint;
Niz : array[1..10000] of TUcesnik;
Temp : TUcesnik;
begin
Writeln('Unesite broj takmicara?');
Readln(N);
for i := 1 to N do
begin
Writeln('Unesite sifru?');
Readln(Niz[i].Sifra);
Writeln('Unesite Bodove?');
Readln(Niz[i].Bodovi);
end;
for i := 1 to N - 1 do
for j := i downto 1 do
if Niz[j].Bodovi < Niz[j + 1].Bodovi then
begin
Temp.Sifra := Niz[j].Sifra;
Temp.Bodovi := Niz[j].Bodovi;
Niz[j].Sifra := Niz[j + 1].Sifra;
Niz[j].Bodovi := Niz[j + 1].Bodovi;
Niz[j + 1].Sifra := Temp.Sifra;
Niz[j + 1].Bodovi := Temp.Bodovi;
end;
Plasman := 1;
if N = 0 then
begin
Readln;
Halt(0);
end;
Writeln('********************************************');
Writeln('Plasman Sifra Bodovi');
Writeln(Plasman, ' ', Niz[1].Sifra, ' ', Niz[1].Bodovi);
for i := 2 to N do
begin
if Niz[i].Bodovi <> Niz[i - 1].Bodovi then Inc(Plasman);
Writeln(Plasman, ' ', Niz[i].Sifra, ' ', Niz[i].Bodovi);
end;
Readln;
end.
4. Zadatak koji nema ulaza.
Kod:
Naci sve trocifrene brojeve ciji je kvadrat sacinjen od dva uzastopna trocifrena broja.
Primjer:
Trazeni broj je: 428
Dva uzastopna prirodna broja su 183 184
Kvadrat broja 428 je 183184
Resenje:
Kod:
program zad4;
{$mode objfpc}
uses
SysUtils;
var
Num, One, Two, i : longint;
begin
for i := 100 to 999 do
if Length(IntToStr(i * i)) = 6 then
begin
One := (i * i) div 1000;
Two := (i * i) mod 1000;
if One + 1 = Two then
begin
Writeln;
Writeln('Trazeni broj: ', i);
Writeln('Dva uzastopna prirodna broja su: ', One, ' ', Two);
Writeln('Kvadrat broja ', i, ' je ', i * i);
end;
end;
Readln;
end.
5. Opet nema ulaza. Moram reci drugu koji me je ubedjivao da ne valjaju one tri for petlje, da sam ovaj prvo uradio sa 9 for petlji ali je stvarno bilo sporo

pa sam morao smanjiti na 6. Inace baciti pogled na resenje, pravi primjer kako NE treba programirati

Kod:
Vrece su obiljezene brojevima 1 do 9. Vrece treba grupirati u 5 grupa tako da: prva i peta grupa imaju jednu vrecu, druga i cetvrta dvije vrece i 3 grupa da ima 3 vrece. Potrebno je ispisati sve kombinacije koje zadovaljavaju uslov da kad se pomnozi prvi i drugi (kao i cetvrti i peti) daju broj u trecom grupi.
Primjer: 2 78 156 39 4
Malo objasnjenje 2 * 78 = 39 * 4 = 156
Resenje:
Kod:
//FreePascal 2.2.0
program zad5;
{$mode objfpc}
uses
SysUtils;
var
i1, i2, i3, i4, i5, i6, j, k : integer;
Niz : array[0..9] of integer;
Yes : boolean;
begin
for i1 := 1 to 9 do
for i2 := 1 to 9 do
for i3 := 1 to 9 do
for i4 := 1 to 9 do
for i5 := 1 to 9 do
for i6 := 1 to 9 do
begin
Yes := true;
k := i1 * (i2 * 10 + i3);
if k = (i6 * (i4 * 10 + i5)) then
begin
if Length(IntToStr(k)) <> 3 then continue;
FillChar(Niz, SizeOf(Niz), 0);
Inc(Niz[i1]);
Inc(Niz[i2]);
Inc(Niz[i3]);
Inc(Niz[i4]);
Inc(Niz[i5]);
Inc(Niz[i6]);
Inc(Niz[StrToint(IntToStr(k)[1])]);
Inc(Niz[StrToint(IntToStr(k)[2])]);
Inc(Niz[StrToint(IntToStr(k)[3])]);
for j := 1 to 9 do
if Niz[j] <> 1 then Yes := false;
if Yes then Writeln(i1, ' ', i2 * 10 + i3, ' ', k, ' ', i4 * 10 + i5, ' ', i6);
end;
end;
Readln;
end.
6. I na kraju malo DP-a
Kod:
Naucnik se bavi stvaranjem svih moguci lanaca duzine n sastavljni od atoma plutonija i olova, tako da ni jedan slozeni lanac ne moze da stvori eksploziju. Lanac je bezbjedan ako se ne nalaze atomi plutonija jedan do drugog. Potrebno je ispisati koliko ima bezbjedni lanaca duzine od N atoma:
Primjer:
Ulaz: N: 3
Izlaz: 5
Resenje:
Kod:
program zad6;
{$mode objfpc}
var
A, B, T : QWord;
N, i : Longint;
begin
Writeln('Unesite vrijednost za N:');
Readln(N);
A := 1; B := 2;
for i := 2 to N do
begin
T := B;
B := A + B;
A := T;
end;
if N = 0 then B := 0;
Writeln('Postoji ', B, ' bezbjedni lanaca duzine ', N);
Readln;
end.