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) a1 ,(a  2) a2 ,...,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.