Math class – zad.lista wolframalpha.com „*” oprócz operacji mnożenia oznacza zadania [nieco] trudniejsze. (Tym bardziej warto się więc z nimi zmierzyć!) Przypomnienie/wyjaśnienie: dla naturalnych a i b napis „a%b” oznacza w C/C++ resztę z dzielenia a przez b, czyli to co matematycy i informatycy czasem (nawet całkiem często!) zapisują jako „a mod b”. Na wszelki wypadek przypomnę też, że z kolei „a/b” oznacza w C/C++ (dla a i b naturalnych!) część całkowitą liczby a/b. a Zad. 0. Jak dla danych a i b zdefiniować a mod b przy użyciu ? (Tzn. jak tradycyjnymi działaniami b arytmetycznymi z a, b i a b otrzymać wartość a mod b ?) Z½. Jak dla danych a i b zdefiniować a przy użyciu operacji mod? (Tzn. jak z a, b za pomocą tradycyjnych działań b a ?) b Z¾. (x i y to liczby całk. dod.) Jakie wartości może przyjąć wyrażenie x mod y? Ile rozwiązań ma równanie x mod 11 = x x 5 ? A x mod 5 = 11? A 11 ? 5? A 11 5 Z1. Jak przebiega działanie poniższych algorytmów? (Ustal, jakie wartości przyjmują kolejno zmienne i co pojawia się na ekranie). Oczywiście warto (później) sprawdzić swoje przypuszczenia na komputerze. (Oczywiście wpisując to wraz z odpowiednimi deklaracjami zmiennych w funkcji main). arytmetycznych oraz operacji mod otrzymać wartość a) for (i=2017; i>0; i=i-9) cout << i; b) z=0; for (i=2017; i>0; i=i-9) z=z+1; c) for (i=0; i<44; i=i+1) if (i%3==0) cout << "Hehe!"; /* Chyba da sie domyslic, co robi ta instrukcja z "if"? I co znaczy "=="? - w odroznieniu od "="! */ d) S=0; for (i=0; i<100; i=i+1) S=S+i; // Lepiej nie mylic "s" z "S" // - to dwie rozne rzeczy! e) for (i=1; i<10; i=i+1) for (j=0; j<10; j=j+1) cout << i << j; f) s=0; for (i=1; i<10; i=i+1) for (j=0; j<i; j=j+1) s=s+i; g) for (i=10; i>0; i=i-1) for (j=1; j<10; j=j+1) if (j<i) cout << i; h) a=0; b=0; for (i=0; i<1234; i=i+1) if (i%3==0) if (i%2==1) a++; else b++; Z1’. Czy umiesz dopisać coś do algorytmu h), tak żeby wartość b rosła przy każdym i niepodzielnym przez 3? Przy użyciu tylko elementów C++, które powinniście już znać, daje się to zrobić nawet na dwa sposoby! Z2. A co wypisze ten programik? (Informatycy mówią raczej „fragment kodu” – sorry!) Zauważ, że ostatnia instrukcja wykona się for (i=1; i<1000; i=i+1) tylko raz – czyli już po wyjściu z pętli cout << "Nigdy nie odpisuję zadań domowych!" << endl; (mimo pięknego przecież wcięcia w cout << "I love computer science!"; zapisie – komputer na estetykę nie jest w ogóle czuły!). A ten? (miejsce na notatki) for (i=1; i<1000; i=i+1) { cout << "Nigdy nie odpisuję zadań domowych!" << endl; cout << "I love computer science!"; } Niezłe, co? Wobec tego zastosuj teraz polecenie Z1 do fragmentów: a) for (i=1; i<10; i=i+1) { for (j=1; j<10; j=j+1) cout << i; cout << endl; } Z2,5. I odwrotnie – spróbuj (pętlami!) wygenerować na ekranie coś takiego: b) for (i=1; i<10; i=i+1) { for (j=1; j<i; j=j+1) cout << j; cout << endl; } a) 54321 54321 54321 54321 54321 b) 55555 4444 333 22 1 c) 12345 1234 123 12 1 c) for (i=1; i<10; i=i+1) { cout << i; for (j=1; j<6; j=j+1) cout << j; cout << i; cout << endl; } d) 5 45 345 2345 12345 e) 12345 23451 34512 45123 51234 ę) 54321 45432 34543 23454 12345 Z3. Napisz program znajdujący sumę liczb nieparzystych dodatnich mniejszych od n (gdzie n wczyta się od Użytkownika („cin”)). Z4. (Święta za pasem) Co wypiszą programy: (" " to łańcuch (tekst) będący spacją – odstępem, "*" – to gwiazdka) a) for (i=44; i>0; i--) { for (j=1; j<i; j++) cout << " "; for (j=i; j<44; j++) cout << "*"; } b) for (i=1; i<=4; i++) for (j=1; j<=4; j++) { for (k=j; k<=3; k++) cout << " "; for (k=1; k<=2*j; k++) cout << "*"; cout << endl; } cout << " **" << endl; c) for (i=2; i<=6; i++) for (j=1; j<=i; j++) { for (k=j; k<=5; k++) cout << " "; for (k=1; k<=2*j; k++) cout << "*"; cout << endl; } cout << " **" << endl; d) for (i=1; i<=16; i++) { j=i%4; if (j==0) j=4; for (k=j; k<=3; k++) cout << " "; for (k=1; k<=2*j; k++) cout << "*"; cout << endl; } cout << " **" << endl; Z5. Napisz program, który pozwoli Ci się wreszcie dowiedzieć, dla których naturalnych liczb dwucyfrowych funkcja f(x)=x3 77x2+1001 ma wartości niedodatnie. Z6. Napisz program, dzięki któremu będziesz być może pierwszym człowiekiem, który dowie się, jaka jest najmniejsza liczba trzycyfrowa spełniająca warunek x2 > 123x+999999. Z7. Napisz program wypisujący dla danych liczb całkowitych a i b (zakładamy, że a wszystkie wielokrotności siódemki z przedziału (a, b) i pisze, ile ich jest. b) w kolejności malejącej Z8. Napisz program obliczający sumę 12 – 33 + 52 – 73 + ... + 20172. Z9. Napisz program, który dla danej całkowitej dodatniej liczby k wyświetli na ekranie k kolejnych potęg naturalnych liczby k, oddzielając je przecinkami. Np. dla k=6 powinno się wyświetlić: „1, 6, 36, 216, 1296, 7776” (bez przecinka na końcu!). Z10. („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. (Wynik może zostać wyświetlony w postaci wykładniczej i wiedząc to, powinnaś/-nieneś ją rozumieć!) Tak rośnie funkcja wykładnicza... Z11. W którym z powyższych zadań wygodnie/sensownie jest użyć pętli while? Z12. Co powinien wypisać program: a=123045600789; while (a>0) { cout << a%10; a = (a–(a%10))/10; } ? 12’. Jak zadziałałby ten program, gdyby początkową wartością a była liczba: a) 54321, b) 10, c) jednocyfrowa, d) 0? 12’’. Jak można w C++ (znacznie) uprościć wartość w ostatnim podstawieniu? Z13. Możliwie prosto (na kilka sposobów? :>) uzasadnij, że: a) suma ujemnych potęg dwójki to 1; b) 2/7+3/9+4/11+5/13+... = (wskazówka: od czego jest większy [prawie] każdy składnik?); c) suma odwrotności silni wszystkich liczb naturalnych jest skończona, czyli nie przekracza pewnej wartości. (Wskazówka: jak można oszacować [prawie] każdy jej składnik?) Z14. Napisz programik, który ustali, czy dane x jest doskonałe. (Doskonałe są np. 6 (=1+2+3) i 28 (=1+2+4+7+14), bo (DEFINICJA!) Liczba naturalna n jest doskonała. n jest sumą swoich dzielników mniejszych od siebie (tzw. swoich dzielników właściwych).). Z14½. Znajdź kolejne liczby doskonałe. Z14¾ . Napisz program, który wypisze n (n podaje użytkownik) najmniejszych liczb doskonałych. (Wystarczy, że będzie działał dla n<=4, bo już przy n=5 czas jego działania... – no właśnie: potrafisz ten czas oszacować? (Zad. nieobowiązkowe (możliwa gratyfikacja!), rozwiązania (pełne rozumowanie + rachunki) proszę przesyłać mejlem. Podpowiedź: z sensownym przybliżeniem (całkiem dobrym przy dużych x) można przyjąć, że czas ten jest proporcjonalny do liczby wszystkich obrotów wewn. pętli. (Wiesz dlaczego?)) Uwaga: w poniższych zadaniach należy nie znać potęgowania w C++! Z15. Napisz program znajdujący a) pierwszą całkowitą potęgę dwójki przekraczającą milion; b) największą liczbę naturalną, której silnia nie przekracza 1.000.000.000; c) max{n: 1/1+1/2+1/3+...+1/n < s}, jeśli s jest dodatnią liczbą podaną przez użytkownika. Z16. Napisz program[ik], który: a) dla wczytanych naturalnych a i b (zakładamy spokojnie, że a<b) wypisze w kolejnych linijkach niepodzielne przez 3 wielokrotności piątki z przedziału* [a, b), numerując je kolejno; (Czyli np. dla a=3 i b=20 powinno się wyświetlić: 1. 5 2. 10). b) stwierdzi, ile liczb z przedziału* [12, k] (k podaje użytkownik) ma nieparzystą przedostatnią cyfrę; c) będzie reagował na wprowadzane przez użytkownika liczby naturalne, pisząc „nie”, jeśli jest ona podzielna przez 3, a „OK” i kończąc wczytywanie, jeśli nie; (Czyli np. może przebiec tak o: 12 nie 27 nie 6 nie 12 nie 13 OK). d) wypisze wszystkie liczby trójkątne z przedziału (a, b), oddzielając je przecinkami (ale nie stawiając oczywiście przecinka po ostatniej!); (Czyli np. dla a = 3, b = 15,2 napisze „6, 10, 15”). (Liczby trójkątne to sumy kolejnych liczb naturalnych, czyli kolejno 1 (=1), 3 (=1+2), 6 (=1+2+3), 10, ... Ponieważ stanowią one analogię silni (dlaczegóż?!!), dowcipni informatycy nazywają je czasem słabniami i oznaczają: 1? (=1), 2? (=3) itd.). e) dla podanego x rzeczywistego znajdzie sumę naturalnych potęg dwójki, które nie przekraczają x, tj. np. dla x=8 obliczy (i wypisze) wartość 20+21+22+23; f) zliczy, ile jest sześciocyfrowych (= z przedziału* [100000, 999999]) sześcianów liczb naturalnych; * Przy oznaczaniu przedziałów nawias kwadratowy oznacza to samo co trójkątny – domkniętość z danej strony. g) dla podanych całkowitych a i b wypisuje wyrażenie a*(a+1)+(a+1)*(a+2)+…+(b-1)*b, liczby ujemne otaczając nawiasami, znak równości i jego wartość, tzn. np. dla a= 2, b=1 napisze „(-2)*(-1)+(-1)*0+0*1=2”; h) wypisze wszystkie pary liczb całkowitych x i y z przedziału [-100,100] spełniające równanie x3=xy+y2; i) zliczy pary dwucyfrowych liczb a i b, suma sześcianów których jest mniejsza od 12345; j) znajdzie wszystkie trójkąty pitagorejskie o wszystkich bokach mniejszych od 1000; 3 6 9 12 15 2 4 6 8 10 k) dla podanych m i n wyświetla coś, co dla (m, n) = (3, 5) wygląda tak: ; 12345 0 12 345 l) dla podanego n wyświetli n wierszy piramidki, która dla n=5 wygląda tak o: (w kolejnych 6789 wierszach dopisywane są cyklicznie kolejne cyfry); 01234 ł) dla podanego naturalnego n drukuje w kolejnych liniach kolejno: kolejną liczbę naturalną i [1, n] i najmniejszą liczbę naturalną, której silnia przekracza i. Aspirujący do uzyskania mojej pochwały niechaj spróbują zrobić to, nie zmuszając komputera do liczenia kolejno kolejnych silni; m) taką ramkę: 111111 2 2 3 3 4 4 5 5 666666 (a ściślej jej odpowiednik dla parametru n, którego wartość (mniejszą niż 10) poda użytkownik – w przykładzie po lewej n=6 – to chyba jasne?) n) … i taką piramidkę jak po prawej (również sparametryzowaną): 1 121 12321 1234321 Z17. Napisz programi[cze]k, który po podaniu przez użytkownika naturalnych a i b (Załóżmy spokojnie, że a<b i że nie będziemy musieli próbować obliczać 00, czego matematycy raczej nie definiują.) wyświetli a) x a , x a 1 , x a 2 ,..., x b (gdzie x jest zadaną liczbą rzeczywistą). 1 1 1 1 , , ,..., b) (co oznacza „!” (w tym „0!”!), należy się w razie potrzeby dowiedzieć). 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 . Z18. Zapisz pętlę for ( i=0; i<77; i++) for ( j=1; j<10; j++) cout << i << j;, używając [podwójnej] pętli while. Z19. Znajdź rozkład na czynniki pierwsze danej liczby. Z20. Sprawdź, czy dana liczba jest pierwsza (można dzięki rozwiązaniu Z19 LUB stwierdzając, ile dzielników ma dana liczba (i co z tego?), LUB jeszcze inaczej... ) Znajdź: 20.a) k-tą liczbę pierwszą / k najmniejszych liczb pierwszych; 20.b) najmniejszą liczbę pierwszą większą od ...; 20.c) wszystkie liczby pierwsze z przedziału ... Z21. Napisz program ustalający, czy a) podany przez użytkownika rok jest przestępny. UWAGA: Rok k jest przestępny. <=> (4|k (100|k => 400|k )) b) podana przez użytkownika data jest możliwa. Tj. użytkownik podaje 3 liczby naturalne – dzień, miesiąc i rok, a program pisze „możliwe” / „niemożliwe”. (Np. niemożliwe są daty „31 4 2017”, „30 2 2018”, „29 2 2100”, „32 cokolwiek cokolwiek”, „5 13 2000”). Spróbuj to zrobić, nie rozwlekając niepotrzebnie sprawdzeń. Z21. Wypisz (elementami, może być bez spacji i przecinków) wszystkie 4-elementowe podzbiory (każdy tylko raz!) zbioru {0, 1, 2, ..., 9}. Tzn. program może wypisać kolejno: 0123, 0124, 0125, ..., 6789 i w ciągu tym nie pojawi się np. napis 4012 (bo oznacza on ten sam zbiór, co wypisany już jako drugi). Z22*. Napisz program, który po wczytaniu liczb naturalnych n i p poda zapis n w systemie o bazie p. Czyli np. dla n=1234 i p=5 napisze 14414. W wersji alfa program może działać tylko dla p<10, ale w wersji beta powinien też radzić sobie z większymi p („cyfry dwucyfrowe” najłatwiej chyba pisząc w nawiasach, tzn. np. największą cyfrę w systemie dwunastkowym oznaczając przez „(11)”). Z23. Pola niekoniecznie kwadratowej szachownicy opisujemy współrzędnymi (x,y), gdzie y jest numerem wiersza, a x – kolumny, przy czym lewy dolny róg szachownicy to (1,1), a współrzędne rosną w prawo i do góry. Na pewnym polu stoi goniec, który znienacka rusza na wycieczkę, poruszając się na ukos do góry w prawo, a po dojściu do każdej krawędzi odbijając się od niej zgodnie z prawem odbicia. Napisz program, który wczyta liczby kolumn i wierszy szachownicy oraz współrzędne początkowego położenia gońca, a w odpowiedzi poda jego trasę do momentu zamknięcia cyklu, który następnie zacznie się powtarzać. Np. dla danych 3, 6, 1, 3 powinno się wypisać: (2,4), (3,5), (2,6), (1,5), (2,4), (3,3), (2,2), (1,1), (2,2), (3,3), (2,4), (1,5), (2,6), (3,5), (2,4), (1,3), (2,2), (3,1), (2,2), (1,3). Z24*. Napisz program podający wszystkie trójkąty pitagorejskie, których jeden z boków ma długość będącą podaną liczbą naturalną. Przykładowa reakcja: dla podanej długości 15 wypisuje 9, 12, 15; 15, 20, 25 oraz 15, 112, 113, a dla podanej długości 2 wypisuje „Nie ma!”. Z25. Zrozum i dokończ definicję funkcji NWD („return” na końcu – co powinna zwracać?). Użyj jej w programie, w którym użytkownik poda dwie liczby naturalne, a program powie mu, czy są względnie pierwsze (czy nie). Z26. Dane są dwie liczby oraz ich NWD (ktoś miły obliczył). Jak bez rozkładania czegokolwiek na czynniki znaleźć ich NWW? Z27. A jak można użyć dwuargumentowej funkcji NWD (obliczającej – nie zgadniesz! – NWD dwóch liczb naturalnych) do znalezienia NWD trzech danych liczb? (Tzn. zakładamy np., że za pomocą komputera potrafimy (nieważne jak) ustalić NWD dwóch liczb, i pytanie, jak dzięki temu znaleźć NWD jakichś trzech liczb). Z28. Czy jeśli trzy liczby są względnie pierwsze, to każde dwie z nich muszą być względnie pierwsze? A odwrotnie? Z29. Napisz program, który wypisze coś takiego (ładniej pewnie będzie w kolejnych wierszach): F0=0, F1=1, F2=1, ... (np. do Fn, gdzie n raczy podać użytkownik (ang. „user”)). Program niech używa zdefiniowanej przez nas ostatnio funkcji (chociaż wiemy (? :>) już, że może się to okazać niezbyt roztropne). Przy jakich wartościach zaczyna wymagać to od odbiorcy sporej dozy cierpliwości? Z30. Przypominam: żeby obliczyć F3, nasza funkcja zostanie wywołana 5 razy. A ilu wywołań wymaga obliczenie F5? Narysuj odpowiednie drzewko. A F6? A F7? Oznaczmy te liczby przez wn, tzn. niech wn oznacza liczbę wywołań naszej funkcji przy obliczaniu Fn. Potrafisz podać zależność rekurencyjną dla wn ? Z31. Ciągiem Tribonacciego nazywa się ciąg zdefiniowany podobnie jak Fibonacciego, ale taki, gdzie każdy kolejny wyraz jest sumą trzech poprzednich. Zdefiniuj w C++ funkcję T(n), która będzie zwracać n-ty wyraz ciągu Tribonacciego, przyjmując dowolne warunki początkowe (tzn. dowolne wartości, ale definiując ich dokładnie tyle, ilu potrzeba!). Ile wywołań tej funkcji nastąpi przy obliczaniu T(4)? A T(5)? A T(6)? Ile czasu i miejsca zajmie Ci narysowanie odpowiednich drzewek wywołań w zeszycie? Z32. Zdefiniuj (w C++) funkcję Fi(n), która jak F(n) będzie zwracać n-ty wyraz ciągu Fibonacciego, ale obliczy go pętlą. (Taki sposób nazywamy iteracyjnym). Użyj tej funkcji tak samo jak F(n) w zad. 29. Jak dużo wyrazów ciągu Fibonacciego można teraz śmiało obliczać? Z33. Zdefiniuj ciąg spełniający zależność rekurencyjną: an an 3an 2 2 3 1, n 5 an 1 , n 5 . Warunki początkowe zadaj dowolnie, ale sensownie (nie za dużo i nie za mało). Narysuj drzewko wywołań tej funkcji przy obliczaniu a8. Z34. Zdefiniuj numerowany od 1 ciąg spełniający następującą zależność rekurencyjną: xn 3 x n , 5|n 5 . (Warunkami początkowymi zajmij się jak w Z33). xn 2 xn 2 x1 w przeciwnymrazie Narysuj drzewko wywołań tej funkcji przy obliczaniu x9. W Pascalu i innych językach programowania (ale nie C++) dostępna jest funkcja sqr obliczająca kwadrat argumentu. Na co będzie miało wpływ jej użycie? 2a n Z35. Zdefiniuj ciąg określony wzorem: a n 1 dla n nieparzystych podzielnych przez3 n / 3 dla n parzystych 7 w pozostalych przypadkach Podanie jakich argumentów spowoduje najwięcej wywołań tej funkcji? . c5 ... c n 1 dla n parzystych . c 0 c n 1 + 7 dla n nieparzystych (Warunkami początkowymi zajmij się jak w Z34). Narysuj drzewko wywołań tej funkcji przy obliczaniu c5. Z36. Zdefiniuj ciąg spełniający zależność rekurencyjną c n Z37. a) A co liczy ta funkcja? c1 c3 int Zagadka(int a, int b) { if (a==0) return b; else return Zagadka(a-1,b)+1; } b) Czy po takiej modyfikacji będzie działać tak samo? Ale dlaczego?? int Zagadkowa(int a, int b) { if (b==0) return a; else return Zagadkowa(a-1,b)+1; } Z38. Pisząc program w pewnym popularnym języku programowania, Hildegarda zdefiniowała funkcję: Ile razy zostanie ona wywołana przy obliczaniu przez program f(6)? Narysuj odpowiednie drzewko. int f(int n) { if (n>3) return f(n-1)*2-f(n-2)*f(n-2); else return 123; } Z39. Tzw. podwójną silnię określamy dla dodatnich liczb całkowitych wzorem n!! 1 3 5 ... n, n jest nieparzyste , 2 4 6 ... n, n jest parzyste dodatkowo przyjmując: 0!! = 1. Napisz w C++ funkcję obliczającą podwójną silnię: a) rekurencyjnie, b) iteracyjnie. Z40. Co mogą zrobić te funkcje? int f0(int x,int y) { if (y==0) return 1; return x*f0(x,y-1); } int f1(int x,int y) { if (y==0) return x; return 1+f1(x,y-1); } int f3(int x,int y) { if (x<y) return 0; return 1+f3(x-y,y); } int f2(int x,int y) int f4(int x,int y) { { if (x<y) return x; if (y==0) return 0; return f2(x-y,y); return x+f4(x,y-1); } } Przed komputerową (a następnie oczywiście matematyczną) weryfikacją wzorów na fn(x, y) dla kolejnych n gorąco polecam obliczenie wartości tych funkcji dla małych argumentów na papierze! Z41. Zdefiniuj funkcje: ilelat(n), zwracającą liczbę pełnych lat pozostałych do zakończenia wieku zawierającego rok n w roku n, iledzielników(n), zwracającą liczbę dzielników naturalnych argumentu, min(a,b,c,d), zwracającą min(a,b,c,d). Z42. Napisz programik podający (jako iloczyn, tj. np. „2*5*5*17”) rozkład na czynniki pierwsze wczytanej liczby. A może umiesz gromadzić czynniki wielokrotne w potęgi (i pisać np. „2*5^2*17”)? Jeśli z treści nie wynika co innego, w poniższych programach tablice wypełnij sobie najpierw wg uznania 7 liczbami (kolejne wartości może podawać użytkownik albo Ty je wpisz jakkolwiek w programie). Z43. Pozwól Użytkownikowi wpisać wartość x i niech program odpowie mu (jej?), ile razy wartość ta pojawia się w tablicy. Z44. Odwróć kolejność elementów tablicy, a) używając, b) nie używając drugiej tablicy. Z45. Sprawdź, czy elementy tablicy tworzą ciąg a) różnowartościowy, b) rosnący, c) monotoniczny. Staraj się zminimalizować czas działania programu! Z46. Znajdź minimum tablicy. Z47. Wyrzuć z tablicy pierwszy element i przesuń resztę, tzn. początek tablicy [4, 5, 8, 5, 3] ma wyglądać tak: [5, 8, 5, 3], a po trójce niech się dzieje, co chce. Z48. Wyrzuć co drugi element tablicy, tzn. z [4, 5, 8, 5, 3, 2] niechaj wyjdzie [5, 5, 2] i dalej cokolwiek. Z49. Posortuj tablicę malejąco, a następnie zapisz ją do pliku aqq.txt po jednym elemencie w wierszu. Z50. W pliku aqq.txt zapisane są w kolejnych wierszach ułożone malejąco pewne liczby całkowite. Nie wiadomo, ile ich jest, ale mimo to napisz program stwierdzający, ile razy (być może 0) podana przez użytkownika liczba występuje w tym pliku. Dobrze by było, żeby program kończył przeglądanie pliku, kiedy nie ma ono już sensu. Z51*. Dana jest posortowana tablica o n elementach (n nie jest znane, ale można przyjąć, że mniejsze niż 100). Napisz program, który stwierdzi, czy podana przez użytkownika liczba występuje w tablicy (nieważne, ile razy), wykonując jak najmniej porównań. Z52. W danej tablicy dwuwymiarowej: a) usuń pierwszy wiersz, a następne przesuń w górę (zmień oczywiście wartości zmiennych określających rozmiar); b) znajdź sumę parzystych elementów z przekątnej – od lewego górnego rogu do prawego dolnego (ten podpkt robimy dla tablic kwadratowych); c) zlicz wartości nieparzyste w kolumnach o numerach parzystych; d) znajdź sumy elementów o numerach parzystych z każdego wiersza i dopisz je jako kolejną kolumnę w tej tablicy; e) usuń z tablicy co drugą kolumnę. Z53. Napisz programik, który sprawdzi, ile kolumn macierzy wygląda tak samo jak kolumna 0. Staraj się nie wykonywać niepotrzebnych porównań. Z54. Wpisz do tablicy (odpowiednio je umieszczając) elementy 100 początkowych wierszy trójkąta Pascala. Po podaniu przez użytkownika naturalnego n niechże wyświetli się wiersz nr n oraz suma jego elementów. Z55. W pliku qq.txt (przykładowy możesz ściągnąć z http://www.math.uni.wroc.pl/~msliw) zapisanych jest (dowolnie rozmieszczonych) 15 liczb stanowiących kolejne (wierszami) elementy macierzy 3×5. Zapisz ją ładnie w innym pliku. Z56. Wpisz do tablicy 10000 wyników rzutów kostką (wygenerowanych, jak mówiliśmy na lekcji) i wypisz: a) jaka jest ich średnia, b) ile jest dwójek, c) kiedy pojawiła się pierwsza szóstka, d) ile rzutów średnio dzieli dwie kolejne szóstki. Czy wyniki te są zgodne z oczekiwaniami? (Jakie powinny być oczekiwania?) Z57. Do 10000-elementowej tablicy wpisz sprawiedliwie wylosowane zera i jedynki (czyli zasymuluj w C++ 10000 rzutów monetą). Wypisz: a) w którym rzucie wypadło ostatnie zero, b) jak długi jest najdłuższy ciąg wyrzucanych kolejno zer, c) ile jest takich ciągów, d) jaka jest średnia długość ciągu takich samych wyników. e*) Ile powinno wyjść w d), gdybyśmy rzucili nieskończenie wiele razy monetą idealną? Z58*. Dzięki tablicom dwuwymiarowym (= macierzom) można wygodnie nauczyć komputer rozumieć kółko i krzyżyk. W najłatwiejszej wersji program może wczytywać ruchy wpisywane (w jakiś ustalony sposób oczywiście) na zmianę przez dwóch siedzących przy nim graczy. Powinien jakoś zgrabnie wyświetlać planszę po każdym ruchu, oznajmiać zakończenie gry i reagować na niepoprawne ruchy (pisząc np. „ERROR: Pole zajęte!”). Proponowane modyfikacje: większa plansza, konieczność/możliwość ustawienia ciągu dłuższego niż trójelementowy (i różne ich punktowanie?), granie, dopóki gracze nie powiedzą, że to już koniec, ... Wszystko można też w trzech wymiarach! (Tablice trójwymiarowe chyba jasne, jak wyglądają?) No i komputer może grać przeciwko istocie ludzkiej! (Tylko na ile mądrze? :> Na początek niech rusza się choćby zupełnie losowo!) Z58’. W podobny sposób można zrealizować różne warianty innych gier planszowych, np. piłkarzyków, kropek polegających na otaczaniu kropek przeciwnika, focusa (może i dla czterech osób?), go, szachów (na początek w wersji dwóch graczy grających ze sobą naszym programem ), ... Z58**. Można też pograć z komputerem w okręty (statki). Tutaj ciekawy jest problem początkowego rozstawienia – jak kazać mu to zrobić? (Pewnie jakieś losowanie, ale trzeba wybierać tylko spośród jeszcze niezajętych pól, a z drugiej strony najlepiej spośród wszystkich takich – żeby rozstawienie było jak najmniej przewidywalne dla przeciwnika). Można też zadawać na początku rozmiary planszy (morza), żeby było ambitniej (bo po rozstawieniu kilku początkowych (czasem nawet już od razu) może się okazać, że okręty się nie pomieszczą – program powinien inteligentnie na to reagować). Z59. a) Obejrzyj plik www.math.uni.wroc.pl/~msliw/bluegill.pgm (jak się zwie ten zwierz po polsku?? patrz też przypis poniżej) tekstowo i usuń z niego pierwsze trzy linijki. Pozostałość zapisz tekstowo (czyli np. w Wordzie musisz użyć „Zapisz jako”) jako wej.txt i napisz program, który utworzy plik wyj.pgm, wyglądający tak: jako pierwsze trzy linijki ma to, co skasowałaś/-eś z www.math.uni.wroc.pl/~msliw/bluegill.pgm (jak się zwie ten zwierz po polsku??): „P2 302 178 255”, a w kolejnych wierszach zamiast liczb n z pliku wej.txt stoją wartości 255 n (albo np. n/2; poćwicz n 44 dla n 212 też jeszcze inne ciekawe przekształcenia, np. takie: (chociaż mądrzejsze jest raczej ciut inne – n dla innych n jakie?)). Teraz oglądnij oba pliki pgm w jakimś potrafiącym je odczytać programie graficznym (polecam GIMP-a!). Domyślasz się, co się dzieje? b) Zawartość wej.txt z a) wpisz do tablicy 178 302 (liczb w tym pliku powinno być właśnie tyle – domyślasz się, co o tym świadczy? :>) i zamień np. jej górną połowę z dolną (tzn. każde t[w][k] powinno zamienić się z t[177 w][k]; jasne? uważaj, żeby nie zastosować tej zamiany, przebiegając całą tablicę – dlaczego?). Teraz do wyj.pgm wpisz te same dane co poprzednio („P2 302 178 255”), a potem elementy zmienionej tablicy, wiersz po wierszu. Co się stało rybce? Domyślasz się dlaczego? c) A co wyjdzie jeśli do wyj.pgm przepisze się tylko np. 30200 początkowych liczb z wej.txt? Zdajesz sobie sprawę, że na początku trzeba wówczas wpisać „P2 302 100 255”? A co wyjdzie, gdy przepisać 30200 końcowych liczb? Jak to zrobić? d) A jak umieścić w wyj.pgm tylko lewą górną ćwiartkę obrazka? (Pamiętaj o zmianie wymiarów!) A potrafisz odrąbać rybce ogon? (Rybom robi się o wiele gorsze rzeczy! – http://www.krwaweswieta.pl...) A umieścić ją ogonem do góry (obrócić)? Kazać płynąć w prawo (odbić symetrycznie)? Odbić względem środka obrazka? ... Przeskalować?? (Znaleźć rybę podobną w skali np. 1:2). Albo dwukrotnie ją spłaszczyć? (Chodzi o powinowactwo prostokątne o osi OX i skali (0,1)). A rozciągnąć??? (powinowactwo prostokątne o osi...) e) Jak wygląda obrazek powstały wg tablicy, gdzie na pozycji (x, y) stoi 255((x+y) mod 2)? Stwórz takie obrazki o różnych rozmiarach i oglądaj je w różnych powiększeniach. UWAGA: może być to niemiłe dla wrażliwego na kontrasty oka! - Do tych samych eksperymentów możesz też użyć innych plików – np. www.math.uni.wroc.pl/~msliw/tygrys.pgm (domyślasz się, co zawiera?), .../1a09.pgm (można postawić Agnieszkę do góry głową, zobaczyć, jak bardzo jesteście symetryczni, ...), .../neptun.pgm (planeta słabo wyszła na zdjęciu bez kolorów, ale może da się coś poprawić? – rozjaśnić? *zwiększyć kontrast?). Niektóre programy graficzne (np. GIMP) potrafią zapisywać obrazki w formacie pgm, więc możesz wykonywać podobne operacje również na własnych plikach (trzeba tylko uważać na wiersz dostawiany czasem w nagłówku – np. go zwyczajnie usunąć). Z60. (Matrix – come back) Wypełnij ulubionym sposobem (ale potrafić musisz wszystkimi trzema, które przerabialiśmy – losowo, z pliku i za pomocą użytkownika programu) macierz m n i poukładaj jej kolumny (nie zmieniając ich elementów) według rosnących minimów. (Tzn. kolumną 0 ma być kolumna, której najmniejszy element jest najmniejszy pośród najmniejszych elementów wszystkich kolumn, kolumną 1 – ta, której minimum jest drugie pośród najmniejszych elementów wszystkich kolumn itd.). Z61. Napisz funkcję obliczającą całkę oznaczoną [zdefiniowanej osobno] funkcji f. Z62*. Napisz programik, który po wczytaniu naturalnych l i m poda zapis dziesiętny ich ilorazu (jeśli jest nieskończony, powinien liczyć tak długo, aż dostanie okres, i wypisać go w ogólnie przyjęty sposób, tj. np. przy l=3, m=14 powinno się z triumfem napisać „0,2(142857)”). a) Napisz funkcję o naturalnym argumencie obliczającą sumę jego cyfr. b) Napisz funkcję o naturalnym argumencie obliczającą ostateczną sumę jego cyfr (zwaną również pierwiastkiem cyfrowym). Jeśli masz funkcję z zad. a), warto oczywiście ją wykorzystać (choć w zasadzie oczywiście nie trzeba). Ad 63a-b – w każdej z tych funkcji, niezależnie od drugiej i niezależnie od użycia a) w b), można użyć rekurencji bądź nie – zastosuj metodę bliższą Twemu sercu (a potem spróbuj również zmierzyć się z dalszą!). c) Popatrz na pierwiastki cyfrowe kolejnych liczb nat. *Udowodnisz? d) Funkcję z zad. a) łatwo przerobić na sumującą kwadraty cyfr. Niestety pojęcie ostatecznej sumy kwadratów cyfr nie ma sensu. – Dlaczego? – zbadaj ten problem. A jak jest np. z sześcianami? Z63*. 6 Z2 . A niechże komputer wylosuje resztę z dzielenia przez n (sensowne n ma podać użytkownik) i teraz użytkownik niech odgadnie tę liczbę, przy czym po każdym jego strzale komp. ma pisać „Za dużo!” / „Za mało...”, ew. „OK” i skończyć zabawę. Z65. Co wyświetli program? (Niektórych wartości może nie dać się ustalić, a o innych można tylko powiedzieć, że na pewno wynoszą tyle, co ...) UWAGA: takie programy mogą zawiesić komputer, bo taki skutek mogą mieć odwołania do przypadkowych miejsc w pamięci! Przed ich ew. uruchomieniem zapisz zatem wszystko z uruchomionych programów, czego wolał[a]byś nie stracić! Możesz też te newralgiczne momenty po prostu powycinać. int a, *p1, *p2; p2 = p1; cout << p1 << " " << *p1 << " " << &p1 << " "; cout << p2 << " " << *p2 << " " << &p2 << " " << &a << endl; a=5; p1=&a; *p2=a; cout << p1 << " " << *p1 << " " << &p1 << " "; cout << p2 << " " << *p2 << " " << &p2 << " " << &a << endl; //W tej części programu umiejętny programista wpisał pod adresem 123 //zmienną typu int o wartości 100. p1=(int *)123; *p2=*p1; (*p1)++; cout << p1 << " " << *p1 << " " << &p1 << " "; cout << p2 << " " << *p2 << " " << &p2 << " " << &a << endl; p1=p2; cout << p1 << " " << *p1 << " " << &p1 << " "; cout << p2 << " " << *p2 << " " << &p2 << " " << &a << endl; Z66. Jakie wartości oznaczają (jeśli w ogóle mają sens): t, &t, &*t, *&t, *(t+3), t[-1], *a, t-1, *(t-2), p, &p, *(p+6), ... pod koniec programu: int t[4]={11,12,13,14}, a=123; int *p; p=&t[0]; p=p-1; *(p+4)=-44; t[5]=77; ? (Eksperymentuj z C++, pamiętając, że niektóre wartości są przypadkowe, no i patrz uwaga w zad. powyżej). Z67. Jak przekonać się, ile pamięci zajmuje zmienna danego typu (double albo np. wskaźnik)? A jeśli nie znalibyśmy funkcji sizeof? I nie polegajmy na założeniu, że kolejno deklarowane zmienne C++ rozmieszcza w pamięci w jakiś konkretny sposób! Z68. Czemu po deklaracjach „int a; int b[10];” podstawienie „b=a” nie jest dozwolone? A gdyby podstawić b do a, jakimi wartościami są (co znaczą, co mogą dawać): *b, *a, &a, &b, a[2], &b[2], (*a)+2, (*a+2), (*b)+2, (*b+2), ...? Z69. Co się odbywa w poniższym programie? int a=22, b=333; int * c = &a; *((&b)+1)=111; *c=9; c--; *c=88; cout << ((&b)==c); *Z70. A w tym? int * a; int * b; **((&b)+1)=111; Jak nie używając zmiennej b, zmienić po takich deklaracjach jej wartość? (Załóżmy tu, że C++ umieszcza kolejno deklarowane zmienne bezpośrednio przed poprzednimi). UWAGA: Podstawienia w tym zadaniu mogą spowodować zawieszenie systemu – dlaczego? Jak zadbać o to, by na pewno nie odwoływać się w nim do zakazanych obszarów pamięci? Umiemy to zrobić na dwa (podobne) sposoby, a można też poczytać o operatorze new. Z71. Wieloletnie prowadzone w Internecie badania dowiodły niezbicie, że 102 jest kodem ASCII znaku ‘f’. Co się tu kolejno wyświetli? char cout z++; cout cout z='g'; << int(z-1); << char(z); << char(z-'f'); Z72. Co wypisze w C++ polecenie cout << int ('4'+'5'-'6')? Z73. Napisz a) funkcję, b) procedurę, która: I) odwraca podany jako argument napis (czyli np. z „ATENA” powinna wyjść „ANETA”); II) zmieni w danym napisie wszystkie małe litery na wielkie. (Tzn. z „ABra qa-d’AbRa” zrobi „ABRA QA-D’ABRA”). Z74. Napisz funkcję (procedurę?), która dla podanego łańcucha Ł i znaku z: a) zliczy, ile razy z występuje w Ł (tj. dla z = 'a' i Ł = „Ababa” powinna dawać 2, a dla z = 'b' i Ł = „terefere” – 0); b) poda numer pierwszej pozycji Ł, na której stoi z, lub -1, jeśli takiej nie ma. Np. dla Ł = „Abrakadabra” i z = ‘a’ dałaby 3, ‘b’ – 1, ‘B’ – (-1); c) usunie z Ł wszystkie wystąpienia z (czyli w przykładach z pktu a da „Abb” i „terefere”). Z74’. Jw., tylko nie odróżniając wielkości liter. Z75. Napisz funkcję (co powinna zwracać?), która stwierdzi, czy podany jej jako argument łańcuch jest palindromem. Można założyć, że składa się z samych małych lub samych wielkich liter, ale ambitni mogliby zająć się palindromicznymi zdaniami („Kobyla ma maly bok.”, „Wol utyl i ma mily tulow.”), czyli łańcuchami, w których należy zignorować wszystkie znaki nieliterowe (natomiast można nie używać polskiej diakrytyki). Z76. Napisz funkcję (co powinna zwracać?), która stwierdzi, czy podane jej jako argument dwa łańcuchy są anagramami. Z77. Zdeszyfrujesz wiadomość ‘AHŁĄMLMWŚLGŁGNOLMUJHEEŹĄMCKŁĘ’, jeśli zaszyfrowałem ją z Vigenere’em kluczem 'CHCĄC'? Z78. Odczytaj wiadomość ‘JNŁ AIKUIUSWAŻEGPDN DORZI’. Podp. 0. Podp. 1. Z79. Zapisz algorytm deszyfrowania wiadomości zapisanej szyfrem przedstawieniowym, jeśli przestawienie polegało na zapisaniu oryginalnego tekstu kolumnami w n wierszach. Dla ułatwienia możesz (najpierw?) założyć, że liczba znaków tekstu jest wielokrotnością n, a poza tym rozwiązać (najpierw?) przypadek konkretnego n – np. 2 lub 3. Z80. Jak wiadomo (!?) odwrotność danej liczby to taka liczba, że jak się ją przez nią przemnoży, otrzyma się... Tak samo w arytmetyce modularnej – np. w Z7 odwrotnością dwójki jest oczywiście czwórka, bo 2 4 to wszak... Znajdź odwrotności mod 7 wszystkich elementów Z7 (czyli – przypomnę – reszt z dzielenia przez 7) Jaka jest odwrotność jedynki mod 2016? A mod 2017? A odwrotność dwójki mod 2016? A mod 2017? A trójki (w obu tych światach)? Z80’. Znajdź (Możesz posłużyć się komputerem! A może nawet napiszesz stosowny program? Lepiej napisz!...) odwrotności liczb 1, 2, 3, 123, 2016, 2017 mod 1234577. Z81. A kto rozłoży na czynniki pierwsze liczbę 1219550231? A programem? A 1524157877488187881? (Wskazówka: typ long long. Wsk. 2: to może potrwać... Co najmniej z minutę!) A 123456789012345678901234567890123456789020132014? Można używać całego Internetu! A 2200 1? A 2200+1? A 2200+7? 2365+239? 257885161 1? Z82. Napisz procedurkę, która wypisze ciąg liczb, na jaki zamieni się podany jako argument napis, jeśli dzielić go po n znaków, gdzie n jest drugim jej argumentem. Np. naLiczby("MATMA",3) powinno dać 5062996, 5062912. Z83. Jako szyfrogram algorytmu RSA o kluczu jawnym (2223383429, 7) otrzymałem: a) 2062960583, b) (1547050037, 2071378202, 1208725881, 488288320, 1294264522). Jaką liczbę i jaką wiadomość zapisałem, jeśli w b) grupowałem po dwa kody ASCII big endianem? :> Z84. Jak wygląda dwójkowy (inaczej: binarny, jeszcze inaczej: zero-jedynkowy*) zapis liczby 213, a jak 811? * - Jak myślisz – skąd ta zagadkowa nazwa? :> Z85. Ilu cyfr potrzeba do zapisu liczby w systemie o podstawie b? Dlaczego? Z86. Jak wygląda siódemkowy zapis liczb 7100+7 i 7100−1? Z87. Jak w miarę szybko można obliczyć wartości największej liczby o 10-cyfrowym zapisie szóstkowym? Z88. Jak wyglądają piątkowo: 7, 35, 175, 875, 4375, ...? Co będzie dalej? Wiesz dlaczego? :> Z89. Jeśli przez ś oznaczymy liczbę 6 444 007 088 000 91911, to jaki zapis jedenastkowy ma liczba ś 11, a jaki ś+110? Z90. Zapisz liczby 123 i 999 w systemach o podstawach: 9, 11, 12, 16. Z91. Ile mnożeń wykona się, obliczając schematem Hornera wartość 99-cyfrowej liczby piątkowej? Uzasadnij! Z92. Przez l oznaczmy liczbę 123450,3216. Jak wygląda szóstkowy zapis liczb: x = l 611, y = l/36, z = l/611 ? Z93. Co wypisze się w poniższym programiku dla: a) l = 1986, p = 5; b) l = 10324, p = 4; c) l = 42736019, p = 9 ? Programik: dopóki l>0, powtarzaj: { wypisz wartość (l mod p); do zmiennej l wstaw wartość (l div p) }. Czary?? Z94. Liczba ś ma stucyfrowy zapis dwójkowy 1010...10. Znajdź najmniejsze naturalne n, dla którego ś div 2n = 0. Z95. Zapisz liczbę 3/8: a) dwójkowo, b) ósemkowo, c) szesnastkowo, d) czwórkowo. Z96. Zapisz 11 /32 dwójkowo i czwórkowo: a) z definicji, b) mądrzej (patrz parę zadań wyżej). Z97. Zapisz 11 /27 trójkowo, dziewiątkowo, osiemnastkowo i piętnastkowo. Z98. Jak wygląda pozycyjny zapis szóstkowy liczb: a = 13 11 ; b = 99 100 ? 2100 399 2 3 Z99. Zapisz szesnastkowo: 1101100010110000000111110102, 321034. Z999. Zapisz 9tkowo: 210123, (10)906(72)81. ZC. Zapisz Czwórkowo: 12809ABC16, 3210658. ZCI. Ile wartości uda CI się zapisać na tetradzie? A na 4 B? Oszacuj tę wartość, nie używając maszyn liczących, a następnie sprawdź dokładny wynik. Z102. Ile bajtów, a ile bitów liczy gibibajt? Z103. Co jest większe: 1024 MB czy 8000000 Kib? (Przedrostki rozumiemy zgodnie z układem SI, czyli nie tak jak wielu informatyków). Oczywiście nie wykonuj niepotrzebnych rachunków (– nie trzeba rachować „do końca”). Z104. Zapisz w ZM/U1/U2 na 2 B: a = 40, b = -40, c = -1, d = -1023, e = 220. Jaki jest zakres tego kodowania? (Jaka jest największa, a jaką najmniejsza liczba, którą można tak zapisać?) Z105*. Zapisz algorytm dodawania liczb zapisanych w kodzie SM, please. Z106*. Co trzeba zrobić z wynikiem wykonanego normalnie binarnie dodawania kodów U1 dwóch liczb, żeby wynik był kodem U1 ich sumy? (Rozpatrz chyba osobno sumę dwóch liczb ujemnych i dwóch liczb różnych znaków, ew. rozdzielając jeszcze ten przypadek na sumę dodatnią i ujemną). Jest prosty sposób ustalenia, czy poprawka jest konieczna. Jaki? Z107. Zapisz w kodzie U2: a) -123 na 1 B, b) -66 na 1 B, c) -3 na 2 B, d) -1 na 4 B e) najmniejszą możliwą liczbę na 4 B (Przy okazji podaj również jej wartość). Dla pewności – polecam www.math.uni.wroc.pl/~msliw/U2.cpp. PONIŻSZYM SIĘ CHYBA NIE ZAJMUJEMY!? ALE DO MATURKI WARTO PRZYNAJMNIEJ NIEKTÓRE PRZEĆWICZYĆ! Z71. Excel potrafi [pseudo]losowo wygenerować liczbę z przedziału 0,1). Mając do dyspozycji działania arytmetyczne i funkcję podłoga, przekształć taką losową liczbę l, by mogła losowo przyjmować wartości ze zbioru: 0,7), 4,77), (5,55 , {0,1,2,...,5}, {4,5,...,88}, {0,2,4,...,66}, {9,19,29,...,99}, {66,71,76,...,101}, {13,17,21,...,2009}. Z72. Jeden bok trójkąta pitagorejskiego ma długość ś. Jaką maksymalnie długość może mieć jego najdłuższy bok? ZZ 73-76 należy umieć rozwiązać bez komputera. (Chociaż warto oczywiście sprawdzić wyniki na sprzęcie, no i tym bardziej w razie potrzeby dowiedzieć się dzięki komputerowi, co w ogóle robią używane tu funkcje! ) Z73. Co pojawi się w komórkach, jeśli: a) w polu B2 wpisano: = 1+B1/100, w polu C2 wpisano: = C1–1/(100^$A2), w polu D2 wpisano: = C2+$B2, w polu E2 wpisano: = SUMA(A$1:A2) i obszar B2:E2 skopiowano do obszaru B3:E6? b) w polu B2 wpisano: = 1+B1*10, w polu C2 wpisano: = C1–1/(10^$A2), w polu D2 wpisano: = D1–1/(10^A$2), w polu E2 wpisano: = SUMA(A2:A$6) i obszar B2:E2 skopiowano do obszaru B3:E6? A 0 1 2 3 4 5 B 1 C 1 D 1 2 3 4 5 6 E 0 1 2 3 4 5 6 A 0 1 2 3 4 5 B 1 C 1 D 1 E 1 Z74. Wypełnij (liczbami) to, co obliczy komputer, gdy pole B2 wypełniono, jak pokazano, i skopiowano do obszaru B2:D3. a) w B2 jest: = A$1 + $A2 A B C D b) w B2 jest: = $A$1 + A2 A B C D 1 2 3 1 2 3 2 3 4 1 2 3 1 2 3 2 3 4 Z75. A co pojawi się tu, jeśli pole D1 wypełniono, jak pokazano, i skopiowano do obszaru D1:E3? a) w D1 jest: = LICZ.JEŻELI (A$1:B1;”<2”) b) w D1 jest: = SUMA($A1:B1) 1 2 3 A 2 2 2 B 0 1 2 C 2 1 0 D E 1 2 3 A 2 2 2 B 0 1 2 C 2 1 0 D E Z76. Jakie wartości może dać formuła =JEŻELI(2009*LOS()<101;LICZBA.CAŁK(LOS()*3+44);LICZBA.CAŁK(LOS())+1)? Z77. Spowoduj, by w komórce D9 z prawdopodobieństwem 20% pojawiło się 1, z prawdopodob. 40% 5, a z prawdopodob. 40% 8. Można zrobić to przy użyciu komórki pomocniczej, ale na ocenę cel nie należy! Z78. Kolonia bakterii szczepu Oscylococus abnormalis liczyła wczoraj 2008 osobników i co miesiąc podwaja swoją liczebność, ale bezpośrednio potem ginie tysiąc osobników. Pokaż, jak dzięki Excelowi stwierdzić, kiedy (po ilu miesiącach) liczba osobników w kolonii będzie w zapisie dziesiętnym stucyfrowa. Z79. Po nieroztropnym wzięciu 10 tys. zł kredytu oprocentowanego na 5% miesięcznie pan Malinowski spłaca co miesiąc raty w wysokości 900 zł. Pokaż, jak dzięki Excelowi stwierdzić, kiedy spłaci kredyt. (Zaokrągleniami można się nie przejmować). Z80. W wielkiej wannie jest 100 kg dziesięcioprocentowego roztworu siarczanu (VI) sodu. Co minutę wylewa się z niej 5 kg roztworu, a następnie dolewanych jest 5 kg czystej wody. Stwierdź za pomocą Excela, kiedy stężenie roztworu spadnie poniżej 1%. Zakładamy (oczywiście!), że stężenie wyrównuje się natychmiast po każdym dolaniu. Z81. W gabinecie chemicznym trwają doświadczenia. W 100-litrowym pojemniczku znajdowało się początkowo 10 l wody, ale co minutę dolewa się tam 11 l kwasu azotowego (V) (jego gęstość to ok. 1,5 g/cm3), a litr wody wyparowuje. Na wykresie pokaż stężenie otrzymywanego roztworu w kolejnych minutach do wypełnienia pojemniczka. Z82. W Excelu w komórki A1:C1 wpisujemy trzy liczby dodatnie. Zapisz formułę, która, wpisana do D1, spowoduje, że pojawi się tam pole trójkąta o bokach A1, B1, C1, jeśli taki trójkąt istnieje, a 0 jeśli nie. Przydatny może być tzw. wzór Herona. Z83. Utwórz tablicę 10 na 10, w której pierwszy wiersz i pierwsza kolumna przechowują długości przyprostokątnych trójkąta prostokątnego, a w wierszu p i kolumnie q stoi długość przeciwprostokątnej tego trójkąta, jeśli jest całkowita, a w przeciwnym wypadku 0. Ile jest trójkątów pitagorejskich o wszystkich bokach krótszych od 22? Z84.a) Stwierdź w Excelu, przy jakim kącie kula (armatnia / śnieżna) osiąga maksymalny zasięg, i ustal przy okazji, jak zależy on od prędkości pocz. b) Jak odczytać, po jakim czasie kula zakończy lot? Spróbuj ustalić, jak zależy on od kąta, pod którym kula startuje, a jak od wartości prędkości pocz. c) Naszkicuj (w Excelu!) wykresy: vx (t), vy(t), v(t), x(t), y(t), h(t); czy są zgodne z Twoimi wyobrażeniami? Z85. Pociąg relacji AB jedzie z prędkością 90 km/h, a pociąg relacji BA – 120 km/h (TGV!). Oba wyjeżdżają w samo południe. O której godzinie z dokładnością do 30 s się miną/zderzą, jeśli AB = 47 km? Zobrazuj sytuację na wykresie. Z86. Jaka jest największa wartość wyrażenia xy/15 y2 dla x,y 0,77 ? Ile powinny wynosić x i y? Uwaga: przy użyciu Solvera warto zainicjować zmieniane zmienne jakimiś niezerowymi wartościami (inaczej może sobie nie poradzić). A jak to zrobić, jeśli x i y mają dodatkowo być nieparzystymi wielokrotnościami liczby 4/11? Z87. Przećwicz: http://www.pcworld.pl/artykuly/33710/Excel.2002.tabele.przestawne.html , polecam również (ew. w zamian, gdybyś miał[a] zbyt różną wersję Office’a) wiele innych artykułów o tabelach przestawnych w tzw. Necie, np. na http://pszyperski.republika.pl. Z88. Skonstruuj arkusz z trójkątem Pascala modulo n. Z89. Na płaszczyźnie tworzymy ciąg punktów, tak że pierwszy jest dowolny, a (xn+1, yn+1 ) to z równym prawdopodobieństwem ( 0,4xn 1; 0,4yn 0,1) lub (0,76xn 0,4yn; 0,4xn+0,76yn). Wygeneruj w ten sposób 6789 elementów takiego ciągu i zachwyć się otrzymanym smokiem Heighwaya. Z90. Metodą Monte Carlo oszacuj pole obszaru: a) pomiędzy oX a pierwszym garbem sinusoidy, b) wyciętego z wnętrza elipsy prostą przechodzącą przez jedno z jej ognisk równoległą do jej mniejszej osi, c) pomiędzy oX a krzywą Gaussa dla x (0,1). Z91. Rozwiąż numerycznie równania różniczkowe: y’=y, (y’)2+y2=1, y’’=ky z wybranymi warunkami początkowymi. Z92. Zasymuluj: rzut ukośny, ruch wahadła matematycznego (tłumiony?), ruch punktu materialnego w centralnym polu grawitacyjnym. Z93-95 (wraz z danymi) są autorstwa Centralnej Komisji Egzaminacyjnej (ja je tylko nieznacznie podrasowałem). Z93. („I Ty zostaniesz meteorologiem”) W pliku http://www.math.uni.wroc.pl/~msliw/1c/temp.txt znajdują się średnie temperatury miesięczne w Warszawie w latach 1779-2006 (wrocławskich nie udało nam się zdobyć). W każdym wierszu znajduje się 13 liczb oddzielonych pojedynczymi znakami odstępu: rok oraz średnie miesięczne temperatury w kolejnych dwunastu miesiącach. a) Podaj najniższą średnią roczną temperaturę (wynik podaj z dwoma miejscami po przecinku) oraz rok jej wystąpienia. b) Dla każdego z dwunastu miesięcy podaj minimalną i maksymalną średnią miesięczną temperaturę odnotowaną w tym miesiącu w latach 1779-2006. Sporządź wykres [punktowy] ilustrujący otrzymane zestawienie. Pamiętaj o prawidłowym i czytelnym opisie wykresu! d) Znajdź najdłuższy malejący ciąg średnich temperatur sierpnia w kolejnych latach. Podaj rok początkowy i rok końcowy znalezionego ciągu oraz jego długość. Z94. („I Ty możesz podjąć pracę w spółdzielni mieszkaniowej!”) Każde mieszkanie na osiedlu, którym zarządzasz, ma tylko jednego właściciela (ale jedna osoba może być właścicielem kilku mieszkań). Wśród właścicieli nie ma dwóch osób o tym samym imieniu i nazwisku. Plik http://www.math.uni.wroc.pl/~msliw/1c/adres.txt zawiera informacje o mieszkaniach. W każdym wierszu znajdują się następujące dane rozdzielone pojedynczymi znakami odstępu: identyfikator mieszkania, nazwa ulicy, numer klatki, numer mieszkania oraz metraż mieszkania. Plik http://www.math.uni.wroc.pl/~msliw/1c/osoby.txt zawiera informacje o ich mieszkańcach. W każdym wierszu znajdują się następujące dane rozdzielone pojedynczymi znakami odstępu: identyfikator mieszkania, nazwisko i imię właściciela, liczba osób zamieszkujących mieszkanie. a) Ile osób posiada więcej niż jedno mieszkanie? b) Utwórz listę zawierającą identyfikatory mieszkań, w których średnio na osobę przypada mniej niż 6 m2. c) Podaj nazwiska i imiona właścicieli mieszkań o powierzchni powyżej 90 m2 i zajmowanych tylko przez jedną osobę. d) Podaj, ile jest kobiet, a ilu mężczyzn wśród właścicieli mieszkań (uwaga: jeżeli jedna osoba jest właścicielem więcej niż jednego mieszkania, to liczymy ją tylko raz). Możesz wykorzystać fakt, że w danych imiona wszystkich kobiet (i tylko kobiet) kończą się literą „a”. Z95. („I Ty możesz kiedyś potrzebować lekarza...”) Dane są trzy pliki tekstowe, w każdym z nich dane w wierszu oddzielone są znakami tabulacji. Plik http://www.math.uni.wroc.pl/~msliw/1c/lekarze.txt zawiera dane lekarzy: numer identyfikacyjny lekarza, jego nazwisko, imię, specjalność, datę urodzenia, NIP i PESEL. Plik http://www.math.uni.wroc.pl/~msliw/1c/pacjenci.txt zawiera dane pacjentów: numer identyfikacyjny pacjenta, jego nazwisko, imię, PESEL i datę urodzenia. Plik http://www.math.uni.wroc.pl/~msliw/1c/wizyty.txt zawiera informacje na temat domowych wizyt lekarskich przeprowadzonych przez lekarzy u pacjentów: numer identyfikacyjny lekarza, numer identyfikacyjny pacjenta oraz datę wizyty lekarskiej przeprowadzonej przez lekarza u pacjenta. a) Utwórz zestawienie zawierające nazwiska i imiona lekarzy oraz liczbę wizyt przeprowadzonych przez każdego z nich. Informacje uporządkuj nierosnąco według liczby wizyt. b) Utwórz zestawienie zawierające nazwiska i imiona pacjentów oraz liczbę wizyt lekarzy u każdego z pacjentów, którzy urodzili się przed 1 lipca 1973. Informacje uporządkuj niemalejąco według liczby wizyt. c) Utwórz zestawienie zawierające informacje: nazwisko, imię i specjalność lekarzy posiadających NIP rozpoczynający się od cyfry 8 (btw.: o czym to świadczy?). Informacje uporządkuj alfabetycznie według nazw specjalności. d) Utwórz zestawienie dla każdego pacjenta, zawierającego informację, u ilu lekarzy się leczył, to znaczy wskaż, ilu różnych lekarzy było z wizytą u danego pacjenta. W zestawieniu podaj nazwisko, imię pacjenta oraz liczbę lekarzy. Informacje uporządkuj alfabetycznie według nazwisk. Z96. Zwróć uprzejmie uwagę, że pliki PGM, którymi zajmowaliśmy się w C++, można obrabiać też w Excelu, jeśli... (Do 2007 roku niestety tylko niezbyt duże, bo arkusz excelowy miał wtedy tylko 256 kolumn). Które z operacji, które wykonywaliśmy programując, w arkuszu robi się łatwiej, a które trudniej? Popróbuj na tych plikach co poprzednio, ew. przystosowując je w C++ do potrzeb arkusza. Zauważ, że przy odpowiednim oddaleniu w skoroszycie da się zobaczyć zarys obrazka! Z97. (10 pkt.) W pliku http://www.math.uni.wroc.pl/~msliw/q13.txt zasymulowałem przez wczorajszą noc całkiem sporo ruchów w grze w okręty (każdy ruch kodowany jest wyborem litery i liczby – współrzędnych pola, w które strzela gracz). a) Utwórz tabelkę podającą w jakiś uporządkowany sposób pola, w które strzelano (każde tylko raz!). b) Zapisz je jako plik tekstowy, kodując każdy strzał w kolejności liczba-litera (bez odstępu!). c) Utwórz uporządkowaną alfabetycznie listę wszystkich pól, w które strzelano, wraz z liczbą strzałów, które przyjęły. Z98. Straszny smok Heighwaya z Z89 jest zwykłym atraktorem* pewnego układu odpowiednich przekształceń zwężających (serio!). Inne można uzyskać np. tak: wyobraź sobie, że jesteś żabą, która wyrusza z początku układu współrzędnych i co minutę zmienia swoje położenie, z równymi prawdopodobieństwami udając się w kierunku jednego z punktów (1,0), (½,1) i (0,0), ale przeskakuje tylko połowę dzielącej ją od tego punktu odległości. Wygeneruj w Excelu swoje kolejne położenia. Widzisz podobieństwo do Z89? (Wskazówka: napisz, jak mogą wyglądać współrzędne kolejnego położenia w zależności od położenia po ostatnim skoku – chyba nietrudno je wyznaczyć? – choćby rachując jakieś wektory, ale jest też przecież dość oczywisty wzorek na środek odcinka!) Taki sposób generowania wyżej wspomnianych atraktorów (fraktali) nazywa się grą w chaos. Pobadaj tę grę, zmieniając zasady (pamiętaj, że w Excelu możesz zapisywać odpowiednie parametry w wybranych komórkach), np.: - skacz w kierunku któregoś z punktów chętniej niż w kierunku innych, - rozmieść te punkty inaczej, - do wyboru miej nie trzy, a cztery albo pięć punktów, - skacz nie o połowę dystansu, tylko o np. 1/3, 48%, 51% (teraz już pewnie wektorkami warto by było ustalić wzory na kolejne położenia, chociaż można też dostrzec tu średnie ważone...). W Z99-? komputera używaj tylko do nabycia wprawy i sprawdzania swoich odpowiedzi – będę oczekiwał umiejętności ich rozwiązywania bez pomocy żółwia! PS. Ekran czyści się poleceniem cs. Z99. Co rysuje żółw, kiedy poda mu się poniższe polecenia? a) repeat 3 [ forward 100 left 90 ] b) repeat 3 [ forward 100 left 120 ] c) repeat 2016 [ forward 100 right 90 ] d) repeat 2016 [ forward 1 right 1 ] e) repeat 4 [ forward -44 repeat 2 [ lt 90 forward 44 lt 90 ] ] f) repeat 4 [ fd 20 rt 90 rt 90 repeat 6 [ fd 10 lt 90 ] ] Z100. Jak można oszczędzić żółwiowi nadmiernego spacerowania w Z99.d, tak żeby mimo to narysował to samo? Z101. Co zmieni zamiana 100 na -100 w Z99.a-c? A left na right? Z102. Czy „rt 180 fd 111” to to samo co „fd -111”? * Mój Word myśli, że chodzi mi o traktor! (Ale się myli!) Z103. A co rysuje zagadka? Co znaczą jej parametry? (Jej definicję możesz po prostu skopiować do okienka, które pojawi się po wciśnięciu „Edall” i które należy potem zamknąć, żeby wrócić do trybu komend. A wiadomo, jak ją potem wywołać? – zupełnie podobnie jak np. procedurę left). to zagadka :x :k repeat 4 [ fd :x rt 90 ] if :k>0 [ rt 45 fd :x * sqrt 2 ] if :k=2 [ lt 45 fd -:x lt 45 fd :x * sqrt 2 ] end Z104. Co rysują procedury: to rekurencja :n :a if :n>0 [ fd :a rekurencja :n-1 2*:a ] end Z105. W języku AlaLogo PROC. TRÓJKĄCIK (x) zdefiniowano procedury: POWTÓRZ 3 RAZY: Naszkicuj, co powstanie po {IDŹ NAPRZÓD O x wywołaniu procedury zagadkowa SKRĘĆ W PRAWO O 120 } z parametrami 3 i 20, jeśli żółw KONIEC PROC. TRÓJKĄCIK porusza się po płaszczyźnie i na początku stoi z twarzą zwróconą na południe. (Mam nadzieję, że umiesz przepisać i uruchomić je w naszym Logo!) to rekursja :n :a if :n>0 [ fd :a rt 90 rekursja :n-1 :a*.9 ] end PROC. ZAGADKOWA (s, x) JEŚLI s=1, TO WYKONAJ TRÓJKĄCIK (x) JEŚLI s>1, TO WYKONAJ {TRÓJKĄCIK (x) ZAGADKOWA(s-1,x/2)} KONIEC PROC. ZAGADKOWA Z106. A co narysuje HAHA 4 po następującej definicji HAHA :k? IF :k>0 [ HAHA :k-1 FD 1 ] IF :k=0 [ BACK 7 ] Z107. Napisz procedurkę rysującą: a) 11 promieni tego samego okręgu dzielących go na przystające łuki. Tak miałby wyglądać Twój rysunek, gdyby chodziło o 5 promieni: b) kwadrat i kwadrat symetrycznie w niego wpisany, c) trójkąt równoboczny i jedną Jego Wysokość, d) sześciokąt foremny i jego dwie równoległe przekątne, e) kratkę n n kwadratowych pól o bokach długości x, f) taką piłę o n zębach: g) n takich łamanych o bokach x i x/2 (odstępy między kolejnymi wynoszą x/2): h) takie cóś: (n kwadratów o boku a, a odległości między nimi wynoszą a) i) taki płotek na komary: (odcinków pionowych jest k, a każdy ma długość x i odległości między kolejnymi to również x) j) takie coś (sześciokątów foremnych jest tu 2n): k) to samo, co w niektórych z powyższych (których?), ale rekurencyjnie! (Podp.: rekurencja polega na zauważeniu w problemie dla n tego samego problemu dla n-1 i wywołaniu zatem tej samej procedury oraz ew. zrobieniu jeszcze pojedynczych kroków, patrz Z104-106). Z108. Narysuj następującą zagmatwaną mozaikę z n kwadratami, z których największy ma bok a. (Podp.: Z104-106, a zwłaszcza...) Z109. Napisz procedurkę rysującą Rekurencyjne Pazurki Śliwińskiego*. Potrzebne parametry ustal sobie sam[a]! * - RPŚ stopnia 1 (stopnia 0 nie definiujemy): Dla porównania RPŚ stopnia 3: Z110. Wstęp: Po wydaniu komendy perspective Żółw Nasz Kochany zaczyna umieć latać, tzn. porusza się w trzech wymiarach (trochę dziwnie na ekranie oddawanych) i oprócz obrotów w płaszczyźnie swoich stóp może wykonać także rightroll, downpitch (sprawdź, co to – empirycznie, w helpie albo Internecie) oraz... Aby przywrócić Żółwia do normalnego trybu pracy, należy wpisać wrap. Zrozum, co i dlaczego robi ciąg komend perspective fd 100 rt 90 fd 100 rr 90 fd 100 rt 90 fd 100 up 90 fd 100. Wróć żółwiem do pktu startu: a) po jego dotychczasowym torze, b) dorysowując dwie krawędzie prostopadłościanu równoległe do już narysowanych. Z111. Narysuj lewą i prawą ścianę sześcianu, jeśli przednia jest równoległa do początkowej płaszczyzny ruchu żółwia. Z112. Narysuj wszystkie krawędzie sześcianu: a) używając chytrze zdefiniowanej uprzednio procedury kwadrat, b) nie podnosząc pisaka żółwia, ale tak, żeby jego trasa była jak najkrótsza (*niebanalne zad. matematyczne: jaka trasa jest najkrótsza?), c) jakoś inaczej, wg własnego pomysłu. Z113. Napisz procedurkę generującą takie coś (pionowo i poziomo ułożone kwadraty w perspektywie żółwia): Z114. Narysuj w perspektywie szkielet: a) jakiegoś czworościanu, np. foremnego albo naroża sześcianu, b) piramidy, np. Chefrena, c) jakiegoś graniastosłupa, np. n-kątnego, d) jakiegoś wielościanu (np. któregoś z a-c – którego?) wraz z niektórymi/wszystkimi przekątnymi (nie mówię o przekątnych ścian!). Z115. Bez używania komputera: a) naszkicuj drogę żółwia i oblicz jego przemieszczenie, jeśli na początku stoi, patrząc w górę ekranu, i wykonuje kolejno komendy: leftroll 90 fd 1 uppitch 90 fd 2 downpitch 90 fd 1; b) napisz ciąg poleceń left i rightroll, który da taki sam efekt, jak uppitch 90. Z116. Wywołaj kilka razy „komendę” random 5. To nie jest żadna komenda, stąd zbulwersowanie żółwia (bo to tak, jakby wpisać mu np. sin 30), ale czy domyślasz się, jakie wartości daje ta funkcja? Sprawdź w helpie! (Uwaga: funkcje losujące w innych dialektach Logo mogą działać inaczej!) A co może się narysować komendą repeat 100 [ fd 20 rt (90*random 4) ] ? Zastanów się, a potem sprawdź. (Aby dokładniej zobaczyć, co robi żółw w kolejnych krokach, można dopisać komendę wait 30 – gdzie? (Jak dokładnie ona działa?) Jest to tzw. spacer losowy, tutaj – po sieci kwadratowej. Jak kazać żółwiowi losowo spacerować po sieci trójkątnej? A sześciokątnej? A jak pozwolić mu chodzić w (prawie) dowolnym kierunku? (Jeśli dodatkowo jego kroki będą dostatecznie małe, stworzysz wówczas model ruchów Browna*!) * - Znasz z biologii/chemii/fizyki? :> Z117. Czy zdajesz sobie sprawę, że chodzenie przez żółwia po sieci trójkątnej lub kwadratowej to dość szczególne przypadki? Dlaczego żadna regularna sieć nie powstanie, gdy będziemy kazać mu obracać się o wielokrotności 45 (i iść naprzód o tę samą odległość)? Z117’. Co zrobić, by żółw chodził (losowo) po sieci sześciokątnej (foremnej)? Podp.: o jakie kąty może się po każdym kroku obrócić? Z118. Spowoduj, by żółw stanowił model pijaka jednowymiarowego, tj. chodzącego po prostej krokami o jednostkę w lewo lub w prawo. Można to zrobić podobnie, jak my na lekcji, gdy chodził, obracając się po każdym kroku o odpowiednio losowo wygenerowany kąt, a można również, sprytnie używając tylko instrukcji FD (i losując w niej, czy iść ma w jedną, czy drugą stronę – jak?? Podp.: jaki jest zbiór wartości wyrażenia 2 * (RANDOM 2) – 1?). Z118’. A czy umiesz spowodować, by żółw chętniej szedł w jednym niż w drugim kierunku (np. z prawdopodobieństwami 2/3 i 1/3? (Podp.: da się to zrobić dzięki wyrażeniu podobnemu do tego 2 linijki wyżej, ALE da się też na co najmniej dwa inne sposoby). Z118’’. Poobserwuj zachowanie żółwia w zad. 118 i 118’. Widać różnicę? Z119. Dla konkretnego n (np. 12, 17, 24, 30, 187, 100, 101, 512, 2100, 66): a) ile jest typów n-kątów gwiaździstych? b) co trzeba wpisać, żeby uzyskać najostrzejszy / najbardziej tępy n-kąt gwiaździsty? Z120. Co powstanie dla danych n i d? Ile co najmniej obrotów pętli trzeba wykonać, żeby uzyskać wielokąt? Z121. Jakie jest najmniejsze n, dla którego istnieje dokładnie 10 typów n-kątów gwiaździstych? 1 ? Wpisz jej wzór w wolframalpha.com i obserwuj, weryfikując swoje x 1234 poglądy. Obejrzyj go też w programie Maxima, który warto sobie zainstalować nie tylko na użytek naszych lekcji. (Uruchamia się go, wybierając „wxMaxima”). W obu systemach spróbuj spowodować, żeby widoczne było to, co mogłoby umknąć niewprawnemu badaczowi. (W Maximie, aby zobaczyć nowy wykres, warto zamknąć poprzedni, a komendy wprowadza się, naciskając „Shift+Enter”). Z122. Jak wygląda wykres funkcji x Miłej zabawy! M.Ś.