Zadania z października 2012
Transkrypt
Zadania z października 2012
Michał Śliwiński Programowanie w Pascalu Sprawdzian z 25 X (wersja przykładowa z moimi uwagami): 0. Jakiego typu powinny być a i z w poniższym programie? Uzasadnij i objaśnij, co się w nim dzieje. z:='z'; {Przy takim przypisaniu z wcale NIE MUSI być typu Char!} Inc(z); a:=chr(ord(chr(ord(chr(ord(chr(ord(chr(ord('z')))))))))) 1. Dlaczego poniższe zapisy są w Pascalu niepoprawne? (Podaj wszystkie powody!) a) if a>0 then write(1); else write(333) b) Inc(1) c) Write('a'-1,a-1,ord(1),ord(a)) d) Write('',',','z+1','+2'z,1,+2) {Jak myślałem, że wystarczająco wiele razy wspominałem, instrukcje pascalowe NIE KOŃCZĄ SIĘ średnikiem! Średnik służy do...} 2. Znajdź i krótko opisz wszystkie błędy w poniższym programie. program strasznie bledny var x,y:Byte; write(x); begin write(y>6) x=1 {Tu wcale nie musi być średnika!!} end; 3. Napisz program, który znajdzie sumę sześciocyfrowych wielokrotności siódemki. To powinni Państwo już umieć napisać (stan na 25 X). Zad. 1 Napisz program obliczający sumę 12 – 33 + 52 – 73 + ... + 20012 – 20033. Uwaga na typ! Zad. 2 2 . 3x 28 Napisz program obliczający sumę f (789) f (793) f (797) ... f (1997) f (2013) i wyświetlający ją [z dokładnością do jednej dziesięciotysięcznej – o tym nie mówiliśmy, ale nie jest trudne]. Uwaga na typ! Niech f ( x ) Zad. 3 Napisz program, który dla podanych przez użytkownika naturalnych liczb k i l wyświetli wyrażenie k+(k+1)+(k+2)+...+l, znak równości i jego wartość. Np. dla danych k=3, l=7 powinno się wyświetlić „3+4+5+6+7=25” Zad. 4 Napisz program, który w kolejnych linijkach ekranu wyświetla kolejne liczby naturalne k i (po pewnym odstępie) wartość 1,02k [z dokładnością do jednej stutysięcznej]. Wyświetlone powinny zostać wszystkie potęgi nieprzekraczające 10.000.000, tzn. ostatnią wyświetloną wartością powinna być największa całkowita potęga liczby 1,02 nie większa od 10.000.000. Zad. 5 Napisz program, który po wprowadzeniu przez użytkownika całkowitej dodatniej wartości zmiennej k wyświetli na ekranie k kolejnych potęg naturalnych liczby k, oddzielając je przecinkami. Np. jeśli wprowadzona zostanie liczba 5, powinno się wyświetlić: „5, 25, 125, 625, 3125” (bez przecinka na końcu!). Zad. 6 Napisz program wyświetlający [z dokładnością do jednej setnej] wartość iloczynu 2k 1 2k 2k 1 2 k 2002 ... dla wartości naturalnej k podanej przez użytkownika. 2 k 1 2( k 1) 1 2( k 2) 1 2( k 2003) 1 Zad. 7 („O wdowim groszu”)* W roku narodzin Chrystusa pewna wdowa złożyła 1gr na konto oprocentowane na 1% w skali roku. Ile złotych będzie miał na tym koncie w nadchodzącego Sylwestra prapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprapraprawnuk tej pani? Napisz program, który to obliczy, używając najwyżej 2 zmiennych. Tak rośnie funkcja wykładnicza... Zad. 8 Napisz pętlę znajdującą największą liczbę naturalną, której silnia nie przekracza 1.000.000.000. Zad. 9 Napisz program wypisujący dla podanych przez użytkownika liczb całkowitych a i b (a b) w kolejności malejącej wszystkie wielokrotności siódemki z przedziału [a,b] i pisze, ile ich jest. Zad. 10* Napisz program, który po podaniu przez użytkownika naturalnych a i b (Zakładamy, że a<b.) wyświetli a) x a , x a 1 , x a 2 ,..., x b (gdzie x jest zadaną liczbą rzeczywistą). 1 1 1 1 , , ,..., . b) a ! (a 1)! (a 2)! b! c) a11 ,(a 1)11 ,(a 2)11 ,...,b11 . d) a a ,(a 1) a1 ,(a 2) a2 ,...,bb . * W Pascalu nie ma operatora potęgowania! W zadaniu nie o to zresztą właśnie chodzi! Zad. 11 Wiadomo (?), że 1 k k 1 2 2 6 . Napisz program podający przybliżenia , jakie można w ten sposób obliczyć dla kolejnych k. Napisz pętlę znajdującą najmniejsze takie k, że otrzyma się tą drogą zadaną dokładność. (W Pascalu dostępna jest stała Pi o odpowiedniej wartości.) Zauważ, że szereg ten nie zbiega zatem zbyt szybko. Zad. 12 Zapisz pętlę for i:=0 to 77 do for j:=1 to 10 do Write(i:4,j:2), używając [podwójnej] pętli while. Zad. 13 Napisz program, który dla zadanego przez użytkownika n całkowitego dodatniego wydrukuje coś takiego: n n-1 n-2 . . . 4 3 2 1 n-1 n-2 n-3 . . . 3 2 1 2 n-2 n-3 n-4 . . . 2 1 2 3 . . . . . . 2 1 2 . . . n-4 n-3 n-2 n-1 1 2 3 . . . n-3 n-2 n-1 n Umiesz zadbać o to, żeby kolumny nie były poprzesuwane? (Na zajęciach o tym nie mówiliśmy, ale robi się to b. prosto!) Zad. 24 („Święta za pasem” ) A co wydrukują te programy? (Są one dostępne na chaosie w katalogu /home/s/prow/p-m5n6/Pascal). {program SWIETA1.PAS} var i,j,k:byte; begin for i:=1 to 4 do for j:=1 to 4 do begin for k:=j to 3 do write(' '); for k:=1 to 2*j do write('*'); writeln end; writeln(' **') end. {program SWIETA3.PAS} var i,j,k:byte; begin for i:=2 to 6 do for j:=1 to i do begin for k:=j to 5 do write(' '); for k:=1 to 2*j do write('*'); writeln end; writeln(' **'); end. {program SWIETA2.PAS} var i,j,k:byte; begin for i:=1 to 16 do begin j:=i mod 4; if j=0 then j:=4; for k:=j to 3 do write(' '); for k:=1 to 2*j do write('*'); writeln end; writeln(' **'); end. {program SWIETA4.PAS} var i:byte; procedure rysuj(i:byte); var j,k:byte; begin for j:=1 to 5 do begin for k:=2*i to 9 do write(' '); for k:=2 to 2*i do write('*'); end; writeln end; begin writeln('I po swietach...'); for i:=1 to 4 do rysuj(i); for i:=1 to 48 do write('*'); writeln; for i:=4 downto 1 do rysuj(i) end.