You are on page 1of 4

8.12.2010 Zadania przygotowawcze do drugiego kolokwium ze Wstpu do programowania imperatywnego.

Zad 1. Napisz funkcj function Iloczyny6(var T:array[1..n]of integer; k:integer):Boolean; ktra przyjmie warto "true", wtedy i tylko wtedy gdy iloczyn liczb zapisanych w kadym segmencie tablicy T dugoci k jest podzielny przez 6 dla k>0. Zad 2. Tablica A:tab zawiera albo liczby dodatnie, albo wartoci -1, przy czym wszystkie wartoci -1 wystpuj w jednym spjnym segmencie. Ponadto dla dowolnych i,j takich e 1<=i<=j<=n zachodzi (A[i]<>-1 oraz A[j]<>-1) (A[i]<=A[j]). Napisz funkcj znajdz(const A:tab; x:Integer):1..n, , ktra znajdzie w tablicy A indeks zadanej liczby dodatniej x, o ile ona si tam znajduje. Jeli liczby x nie ma w A, to wartoci funkcji powinno by -1. Zad 3. Napisz funkcj takiesame(var A:array[1..2*N]of integer):Boolean; ktra sprawdzi, czy z zapisanego w tablicy cigu 2N liczb cakowitych mona wybra Nelementowy podcig tak, by cigi elementw wybranych i niewybranych byy takie same. Zad 4. Dany jest typ tab=array[1..n]of Integer, przy czym n>0. Dla tablicy A:tab oraz liczby cakowitej k powiemy, e segment A[d..g] jest k-paski, jeli dla kadych i,j takich, e d i,j g zachodzi nierwno A[i]-A[j]<=k. Napisz funkcj kaplaski(const A:tab, k:Integer):Integer, ktra wyznaczy dugo najduszego k-paskiego segmentu w tablicy A. Zad 5.Niech T={1,...,n}. Funkcja f: T T jest niemalejca, a jej wartoci s zapisane w tablicy F: array[1..n] of Integer tak, e f(k)=F[k] dla k=1,...,n. Definiujemy funkcj gf : T T w nastpujcy sposb: gf (k)=|{aT : f(a)=k}|, gdzie przez |X| oznaczamy liczno (moc) zbioru X. Napisz fragment programu, ktry zmiennej rekord nada warto rwn maksimum spord wartoci przeciwobrazw funkcji gf z jednoelementowych podzbiorw zbioru T, czyli max (|{gf-1({k})|: k=1,...,n}). Zad 6 Przez segment sowa vA* skadajcy si z tych samych liter x nazwiemy takie sowo w = xk dla pewnego xA oraz kN+ , e v=w'ww'' dla pewnych w',w''A* . Segment taki jest maksymalny, jeli ani w' nie koczy si na x, ani w'' nie zaczyna si od x. Napisz gramatyk generujc wszystkie sowa v nad alfabetem {a,b,c} o tej waciwoci, e kady

maksymalny segment zoony z samych liter b w sowie v musi by bezporednio poprzedzony przez duszy segment zoony z samych liter a. Zad 7. Dane s dwie funkcje f,g:{0,1}* Z okrelone w nastpujcy sposb: f()=0, f(0w)=g(w)+1, f(1w)=g(w)-1, g()=0, g(0w)=f(w)-1, g(1w)=f(w)+1. Napisz funkcj JestL(const T:array[1..n]of Integer):Boolean, ktra sprawdzi, czy sowo zapisane w tablicy T naley do jzyka L. Zad 8. Dana jest nastpujca funkcja: function coto(n:Integer):Integer; var i,x,y:Integer; begin x:=0; y:=1;i:=2; while i<=n do begin x := x+y; y := x-y; i:=i+2 end; if odd(n) then coto := y else coto := x end; Okrel dla kadego n, co jest wartoci funkcji coto(n) i udowodnij to. dla w{0,1}*. Zdefiniujmy jzyk L = {w{0,1}*: f(w)=0}.

Zad 9. Dana jest nastpujca funkcja: function coto(n:Integer):Integer; var x,y:Integer; begin x:=0; y:=1; while y<=n do begin x := x-y; y := y-x end; if odd(n) then coto := y

else coto := -x end; Okrel dla kadego n, co jest wartoci funkcji coto(n) i udowodnij to. Zad 10. Dany jest typ tab=array[1..n] of Real, {n>0} oraz cig prostoktw P1,...,Pn. Tablice A,B:tab reprezentuj dugoci bokw tych prostoktw tak, e dla kadego i=1,...,n para (A[i],B[i]) okrela dugoci bokw prostokta Pi. Cig tych prostoktw ma t szczegln wasno, e tablica A jest posortowana niemalejco, a tablica B nierosnco. Napisz funkcj minprzek(const A,B:tab):Real, ktra obliczy dugo najkrtszej przektnej prostoktw P1,...,Pn. Uwaga: funkcja pierwiastka kwadratowego ma w Pascalu nazw sqrt. Zad 11. Dany jest typ tab=array[1..n] of Real, {n>0}. Napisz funkcj mindist(const A,B:tab):Real, ktra obliczy warto min(|A[k]-B[k]| : 1<=k<=n), przy zaoeniu, e tablica A jest posortowana rosnco, a B malejco. Zad 12 .Podaj gramatyk jzyka L={w{a,b}* : #(a,w)=2#(b,w)}. Zad 13. W tablicy A typu tab2=array[1..N] of Real jest zapisana wysoko pokrywy nienej na dachu pewnego budynku w dniach 1..N i wiemy, e jest to cig sabo bitoniczny (najpierw niemalejcy, potem nierosncy). Kady centymetr wieego niegu (z danego dnia) way nw, za centymetr niegu z dnia poprzedniego jest c razy ciszy ni w dniu poprzednim. Kolejne warstwy niegu ukadaj si na poprzednich; jeli nieg topnieje to dzieje sie to w kolejnoci odwrotnej, czyli najpierw topnieje nieg z wczoraj, potem z przedwczoraj itd. Napisz funkcj zaciezko(const A:tab2; c,r,nw:Real):Boolean, ktra sprawdzi, czy by taki dzie, w ktrym ciar niegu na dachu przekroczy warto krytyczn r. Zad 14. Niech A bdzie tablica typu tab3=array[0..n-1] of Integer, gdzie n jest parzyste i wiksze od zera. Napisz funkcj k_antybiton(var A:tab3):Boolean, sprawdzajc, czy istnieje takie k z przedziau 0..n-2, e tablica B, rwna tablicy A przesunitej cyklicznie o k elementw w prawo, jest cile antybitoniczna, czyli od pocztku do pewnego miejsca malejca i od tego samego miejsca do koca rosnca. Zad15. Rozwaamy funkcj f:{1,..,n} {1,..,n}. Dla kadego naturalnego k okrelamy fk(x) = f(x) dla k=0 oraz fk(x)=fk-1(f(x)) dla k>0. Powiemy, e y jest zalene od x jeli istnieje k > 0 takie, e y=fk(x). O funkcji f wiemy tyle, e wyznaczona przez ni relacja zalenoci jest antysymetryczna. Dwa elementy x i y s niezalene, jeli ani x nie jest zalene od y ani y od x. Zbir X nazwiemy niezalenym, jeli kade dwa jego elementy s niezalene. Funkcj f definiujemy za pomoc tablicy typu tab4=array[1..n] of Integer. Napisz funkcj maxniezalezne(var f:tab4):Integer, ktra wyznaczy liczno najliczniejszego niezalenego podzbioru zbioru {1,...,n} wyznaczonego przez funkcj f.

Zad 16 (*) Dla danego typu tab01: array[1..n] of 0..1 napisz funkcj maxrot(Const A:tab01):Integer, ktra wyznaczy takie k, eby jedynki i zera w tablicy powstaej przez przesunicie A o k pozycji w prawo uoyy si w moliwie du liczb w zapisie dwjkowym. {Zrobienie tego w czasie liniowym jest moliwe, ale wykracza poza zakres materiau tego semestru} Zad 17. Dane s dwa typy: cecha=array[0..n-1] of 0..1 oraz mantysa=array[0..m-1] of 0..1. Napisz funkcj wieksza(const c1,c2:cecha; const m1,m2:mantysa):Boolean ktra sprawdzi, czy liczba zapisana w systemie zmiennopozycyjnym o cesze c1 i mantysie m1 jest wiksza ni liczba o cesze c2 i mantysie m2. Zakadamy, e minimalna cecha reprezentuje 0 i e nie ma ukrytego bitu jednej drugiej. Zad 18. Dla typw, jak w zadaniu poprzednim, wygeneruj kolejn co do wielkoci liczb rzeczywist do danej. Procedure kolejna(var c:cecha;var m:mantysa); Jeli mielimy najwiksz moliw liczb w tablicach c:cecha, m:mantysa, to zostaw tablice w spokoju i niczego nie zmieniaj. Procedure kolejna(var c:cecha;var m:mantysa); Zad 19. Oblicz bd wzgldny wykonania dziaania 2/7+3/11 w systemie zmiennopozycyjnym z wykadu.

You might also like