Ispitni zadaci sa rešenjima(vanredni novembarski rok 2000. iz Osnova programiranja - 3. tok - 25.11.2000.) |
Zadaci |
Rešenja ili njihove skice
program faktorijel;
const m = 100; mc = 100; max = 50;
var fakt: array[ 1 .. mc ] of integer;
n, d, prenos, i, p: integer;
procedure ispis;
var i, k: integer;
begin
write(n : 3,"! = ", fakt[ d ] : 1 );
for i := d + 1 to mc do
begin
k := m;
while k > 1 do
begin
k := k div 10;
write( fakt[ i ] div k mod 10 : 1 );
end
end;
writeln
end {ispis};
begin
fakt[ mc ] := 1; d := mc; n := 0;
ispis;
for n := 1 to max do
begin
prenos := 0;
for i := dm downto d do
begin
p := fakt[ i ] * n + prenos;
f[ i ] := p mod m;
prenos := p div m;
end
if prenos > 0 then
begin
d := d - 1;
fakt[ d ] := prenos
end;
ispis;
end
end.
#define WORDMAX 101
main()
{ char thisword[ WORDMAX ], sig[ WORDMAX ];
while( scanf("%s", thisword ) != EOF ) {
strcpy( sig, thisword );
qsort( sig, strlen( sig ), 1, compchar );
printf("%s %s\n", sig, thisword);
}
}
Ovaj program čita sa ulaza reč thisword, maksimalne
dužine Izlaz iz prethodnog koraka se u Bentlijevom rešenju prosleđuje
u program za eksterno sortiranje Funkcija
$1 != prev { prev = $1; if ( NR > 1 ) printf "\n" }
{ printf "%s", $2 }
{ printf "\n" }
END
Interpretirani na primeru 2. zadaaka, ovi redovi znače da se u matrici parova oblika (kanonski oblik reči, reč), poredi prvi element ($1) u tekućem redu sa prvim elementom prethodnog reda. Ako su ove niske jednake, onda je drugi element para ($2) anagram sa drugim elementom iz prethodnog reda i treba ga ispisati. Ako je pak $1 != prev, onda se vrši zamena vrednosti u promenljivoj prev. Na primer, ako je ulazna datoteka sadržavala tekst: vatra rada trava dana dara vrata nada...
rezultati pojedinih koraka su sledeći: vatra aartv vatra aand nada rada aadr rada aand dana trava aartv trava aard dara dana nada dana -- |