Zestaw do kolokwium
Transkrypt
Zestaw do kolokwium
Zestaw do kolokwium
dr Bożena Woźna-Szcześniak
Programy kompiluj przy pomocy polecenia:
g++ -Wall -o nazwa nazwa.cc
Jeżeli kompilator zgłasza jakiekolwiek ostrzeżenia należy program poprawić tak, aby żadnych ostrzeżeń nie było.
1. Dana jest jednowymiarowa tablica liczb całkowitych. Znaleźć najwiȩkszy element w tej tablicy - wypisać
na ekranie jego pozycjȩ i wartość.
2. Dana jest jednowymiarowa tablica liczb całkowitych. Zamienić miejscami dwa wskazane elementy w tej
tablicy. Wypisać na ekranie zawartość tablicy przed i po zamianie.
3. Napisz funkcjȩ sortowaniebobelkowe, która sortuje n liczb w tablicy o rozmiarze n metoda̧ sortowania ba̧belkowego. (Metoda polega na przechodzeniu tablicy i jednoczesnym porównywaniu pary elementów). Funkcja powinna być typu void, pobierać jeden argument tablicowy oraz jeden argument całkowity
- rozmiar tablicy.
4. Napisz funkcjȩ przeszukiwanieliniowe, która poszukuje w danej tablicy określonego elementu.
Przeszukiwanie liniowe polega na porównywaniu każdego elementu tablicy z poszukiwanym elementem.
Funkcja powinna być typu void, pobierać jeden argument tablicowy oraz dwa argumenty całkowite rozmiar tablicy oraz poszukiwany element.
5. Napisz funkcjȩ przeszukiwaniebinarne, która poszukuje w danej tablicy określonego elementu.
Przeszukiwanie binarne eliminuje połowȩ elementów przeszukiwanej tablicy po każdym porównaniu. Algorytm znajduje środkowy element tablicy i porównuje go z poszukiwanym elementem. Jeśli sa̧ takie same, to
szukany element jest znaleziony, w przeciwnym przypadku problem jest redukowany do przeszukania prawej
lub lewej połówki tablicy. Jeśli poszukiwany element jest mniejszy od środkowego elementu, to przeszukiwana jest lewa połówaka tablicy, w przeciwnym wypadku prawa. Funkcja powinna być typu void, pobierać
jeden argument tablicowy oraz trzy argumenty całkowite - lewy i prawy koniec tablicy oraz poszukiwany
element.
6. Napisz funkcje obliczaja̧ca̧ dominantȩ - czyli najczȩściej wystȩpuja̧cy element w n elementowej tablicy.
Elementami tablicy moga̧ być tylko liczby 1, 2, 3, 4, 5, 6. Użyj generatora liczb losowych do
wypełnienia tablicy. (Funkcje rand(), srand() ze zbioru stdlib.h )
7. Napisz program symuluja̧cy rzucanie dwiema kostkami. Powinien on wykorzystywać funkcjȩ rand() do
rzucania kostkami. Nastȩpnie powinna być obliczona suma obu wartości. Twój program powinien rzucać
nimi 36000 razy. Użyj tablicy jednowymiarowej do zliczania, ile razy pojawia̧ siȩ każda z możliwych sum.
Wyświetl rezultaty w formie tabelarycznej.
8. Napisz funkcjȩ wielokrotność określaja̧ca̧ dla pary liczb całkowitych, czy druga liczba jest wielokrotnościa̧
pierwszej. Funkcja ma pobierać dwa argumenty typu int i zwracać wartość 1, jeżeli druga liczba jest
wielokrotnościa̧ pierwszej, 0 w przeciwnym wypadku.
9. Napisz funkcjȩ parzysta określaja̧ca̧, czy liczba całkowita podana jako argument jest parzysta. Funkcja ma
pobierać jeden argument typu int i zwracać wartość 1, jeżeli liczba jest parzysta, 0 w przeciwnym wypadku.
10. Napisz funkcjȩ, która bȩdzie rysowała kwadrat o określonym boku z podanego znaku. Funkcja ma być typu
void i pobierać dwa argumenty. Jeden typu int - długość boku, drugi typu char - cegiełka budowlana.
11. Napisz funkcje pierwsza sprwadzaja̧ca̧, czy dana liczba jest pierwsza, czy nie. Funkcja ma pobierać jeden
argument typu int i zwracać wartość 1,jeżeli liczba jest pierwsza, 0 w przeciwnym wypadku.
12. Napisz funkcjȩ: int NP(int n), która znajduje najmniejszy podzielnik danej liczby całkowite n > 1.
1
13. Napisz program, który wypisuje wszystkie liczby pierwsze z przedziału [10..1000], których cyfry pierwsze i
ostatnie sa̧ identyczne. Zadanie wykonaj przy użyciu funkcji sprawdzaja̧cych, czy dana liczba jest pierwsza
i czy pierwsza, i ostatnia cyfra danej liczby jest identyczna
14. Napisz program, który wypisuje wszystkie liczby pierwsze z przedziału [2..15000], które zawieraja̧ przynajmniej dwa zera. Zadanie wykonaj przy użyciu funkcji sprawdzaja̧cych, czy dana liczba jest pierwsza i czy
liczba zawiera wiȩcej niż dwa zera.
15. Napisz program, który oblicza sumȩ odwrotności liczb naturalnych podzielnych przez 5 nie wiȩkszych od
podanej liczby N. Zadanie wykonaj przy użyciu stosownych funkcji.
16. Liczba całkowita jest nazywana doskonała̧, jeśli suma jej dzielników wraz z 1 (ale bez samej siebie) jest
równa tej liczbie. Napisz funkcjȩ doskonała określajaa̧ca̧, czy dana liczba jest doskonała. Funkcja ma
pobierać jeden argument typu int i zwracać wartość 1,jeżeli liczba jest doskonała, 0 w przeciwnym wypadku.
Nastȩpnie napisz program wyświetlaja̧cy wszystkie liczby doskonałe od 1 do 1000.
17. Napisz funkcjȩ pobieraja̧ca̧ wartość całkowita̧ i zwracaja̧ca̧ liczbȩ z cyframi napisanymi od końca. Np.
otrzymuja̧c liczbȩ 76543 funkcja powinna zwrócić 34567.
18. Napisz funkcjȩ obliczaja̧ca̧ NWD (Najwiȩkszy Wspólny Dzielnik) dwóch liczb całkowitych.
19. Napisz funkcjȩ obliczaja̧ca̧ NWW (Najmniejsza̧ Wspólna̧ Wielokrotność) dwóch liczb całkowitych.
20. Napisz funkcjȩ odleglosc obliczaja̧ca̧ odległość miȩdzy dwoma punktami,(x, y) i (x1, y2). Wszystkie liczby
i wartość powinny być typu float.
21. Napisz funkcjȩ zamieniaja̧ca̧ dana̧ liczbe całokowta̧ n na liczbȩ binarna̧. Funkcja powinna pobierać jeden
argument typu int i zwracać liczbȩ typu unsigned long.
22. Napisz funkcjȩ zamieniaja̧ca̧ dana̧ liczbe całokowta̧ n na liczbȩ ósemkowa̧. Funkcja powinna pobierać jeden
argument typu int i zwracać liczbȩ typu unsigned long.
23. Dane sa̧ liczba naturaln n < 20 i dwa wektory: a = [a1 , a2 , · · · , an ] i b = [b1 , b2 , · · · , bn ]. Oblicz iloczyn
skalarny tych wektorów.
24. (Sito Eratostenesa) Liczba pierwsz to dowolna liczba całkowita dziela̧ca siȩ bez reszty tylko przez 1 i sama̧
siebie. Sito Eratostenesa jest metoda̧ znajdowania liczb pierwszych. Działa ono nastȩpuja̧co:
(a) Utwórz tablicȩ ze wszystkimi elementami zainicjowanymi wartościa̧ 1. Elementy tablicy z indeksami
pierwszymi pozostana̧ 1. Wszystkie inne zostana̧ wyzerowane.
(b) Zaczynaja̧c od inedeksu 2 (indeks 1 - jest liczba̧ pierwsza̧), każdorazowo po znalezieniu elementu tablicy o wartości 1, przejdź pozostała̧ jej czȩść zeruja̧c każdy element, którego indeks jest wielokrotnościa̧
indeksu elementu o wartości 1. Dla indeksu 2 wszystkie elementy tablicy powyżej 2, bȩda̧ce wielokrotnościami 2, zostana̧ wyzerowane (indeksy 4, 6, 8, itd.). Dla indeksu 3, wszystkie elementy tablicy
powyżej 3 bȩda̧ce wielokrotnościami 3 także zostana̧ wyzerowane (indeksy 6, 9, 12, 15 itd.) i tak
dalej.
Kiedy proces zakończy siȩ, elementy tablicy nadal ustawione na 1 bȩda̧ wskazywać, że ich indeks jest liczba̧
pierwsza̧. Napisz program wykorzystuja̧cy tablicȩ 1000 elementów do znalezienia i wyświetlenia liczb
pierwszych. Zignoruj element 0 tablicy.
n!
. Prototyp
25. Napisz funkcj˛e n_nad_k, która pobiera dwa argumenty typu int i zwraca wartość nk = (n−k)!∗k!
powyższej funkcji jest nast˛epujacy:
˛ long long n_nad_k(int, int); Napisz program wykorzystujacy
˛ t˛e funkcj˛e.
26. Napisz funkcj˛e long max2(int A [], int n), która zwraca sume dwóch najwi˛ekszych elementów z tablicy A o
rozmiarze n. Przetestuj ja˛ w prostym programie.
27. Napisz funkcj˛e int ileCyfr(long long a);, która policzy ilość cyfr liczby a. Np. ileCyfr(123)=3.
28. Napisz funkcjȩ bool pierwsza(int a);, która sparwdza, czy liczba przekazana jako argument jest liczba˛ pierwsza.˛ Np. pierwsza(3)=true, pierwsza(12)=false.
29. Napisz funkcjȩ int suma(int A[], int n); , która policzy sum˛e elementów parzystch zanjdujacych
˛
si˛e w tablicy
A.
Napisz program demonstruja̧cy użycie funkcji suma, który również wykorzystuje funkcje czytaja̧ce i wypisuja̧ce
zawartość tablic typu int (tj. funkcjȩ void czytaj(int[], int) oraz void pisz(int[], int)).
30. Napisz funkcj˛e int sumaCyfr(long long a);, która policzy sum˛e cyfr liczby a. Np. sumaCyfr(123)=6. Napisz
program demonstruja̧cy użycie tej funkcji.
31. Napisz funkcj˛e, która pobiera trzy argumenty: znak oraz dwie liczby całkowite. Pierwsza liczba określa
liczb˛e razy, jaka˛ należy wyświetlić znak w jendym wierszu; druga liczba określaliczb˛e wierszy. Napisz
program wykorzystujacy
˛ t˛e funkcj˛e.
32. Napisz funkcj˛e, która zwraca różnic˛e mi˛edzy najwi˛ekszym i najmniejszym elementem w tablicy. Przetestuj
ja˛ w prostym programie.
33. Napisz funkcjȩ long long lustrzaneOdbicie(int a);, która zwróci lustrzane odbicie liczby a. Np. dla liczby a
= 2005 wartościa˛ funkcji jest liczba 5002.
34. Napisz funkcjȩ void odwrocFragment(int A[], int lewy, int prawy); , która odwróci fragment tablicy znajdujacy
˛ si˛e pomi˛edzy indeksami lewy i prawy. Np. Dana jest tablicy A = {1, 2, 3, 4, 5, 6, 7, 8, 9}, lewy=3 oraz
prawy =7, wywołujemy funkcja˛ odwrocFragment(A,3,7) i w wyniku otrzymujemy tablic˛e o nast˛epujacych
˛
wartościach A = {1, 2, 7, 6, 5, 4, 3, 8, 9}.
35. Nie używajac
˛ operatora indeksowania napisz napisz funkcj˛e o nagłówku long long potegi2(long
long * beg, long long * end), która zwraca sume dwóch najwi˛ekszych elementów z tablicy.
Przetestuj ja˛ w prostym programie.
36. Nie używajac
˛ operatora indeksowania napisz funkcjȩ o nagłówku void potegi2(long long * beg,
long long * end), która wypełni tablicȩ o poczatku
˛
w beg i końcu w end kolejnymi pot˛egami
liczby 2. W funkcji main zadeklaruj dwa wskaźniki do long long o nazwach: Abeg i Aend oraz zmienna˛ n, w której przechowany powinien być dany rozmiar tablicy dynamicznej zwiazanej
˛
ze wskaźnikami
Abeg i Aend. Nast˛epnie przydziel odpowiednia˛ ilość pami˛eci dla tablic Abeg i odpowiednio ustaw
wskaźnik Aend. Po przydzieleniu pami˛eci dla tablicy wywołaj funkcj˛e potegi3 z pierwszym argumentem
Abeg oraz drugim argumentem Aend. Wykorzystujac
˛ funkcje wypisuja̧ca˛ zawartość tablic typu long long
(tj. funkcjȩ void pisz(int *first, int *last)) pokaż zawartość tablicy wskazywanej przez
Abeg oraz Aend po wypełnieniu.
37. Nie używajac
˛ operatora indeksowania napisz funkcjȩ o nagłówku void razy3(int const* A, int*
B, int n), która skopiuje tablicȩ A do tablicy B, ale w taki sposób, że jeśli i − ty element tablicy A jest
parzysty, to w tablicy B na tym miejscu powinna znaleźć siȩ wartość trzykrotnie wiȩksza.
W funkcji main zadeklaruj dwa wskaźniki do int o nazwach: tabA oraz tabB, oraz zmienna˛ n, w której
przechowany powinien być dany rozmiar tablic dynamicznych zwiazanych
˛
ze wskaźnikami tabA i tabB.
Nast˛epnie przydziel odpowiednia˛ ilość pami˛eci dla tablic tabA oraz tabB. Po przydzieleniu pami˛eci dla
tablic, wykorzystujac
˛ funkcje czytaja̧ce i wypisuja̧ce zawartość tablic typu int (tj. funkcjȩ void czytaj(int*,
int) oraz void* pisz(int[], int)) wypełnij losowo tablice tabA oraz pokaż jej zawartość po wypełnieniu.
Nast˛epnie wywołaj funkcj˛e razy3 z pierwszym argumentem tabA, drugim argumentem tabB oraz
trzecim argumentem n. Przykład wykonania: Wprowadzamy A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}. Uzyskujemy.
B = {1, 6, 3, 12, 5, 18, 7, 24, 9, 0}.
38. Napisz funkcj˛e void zamiana(char* str), która zamienia małe litery na duże w łańcuchu str.
W funkcji main wczytaj łańcuch o dowolnej długości, po czym wywołaj funkcj˛e zamiana z pierwszym
argumentem b˛edacym
˛
wczytanym łańcuchem. Wypisz na ekran zmodyfikowany łańcuch. Przykładowo dla
wczytanego napisu ”aaaabbbbBBBBCCC’ program powinien wypisać “AAAABBBBBBBBCCC”.
39. Napisz funkcj˛e o nagłówku char* co4(char* dest, char const* src), która kopiuje do łańcucha
dest co czwarty znak z łańcucha src. Jako wynik funkcja ta zwraca wskaźnik do swojego pierwszego argumentu. W funkcji main zadeklaruj dwa wskaźniki do char o nazwach: napis oraz liczba, a nast˛epnie używajac
˛ wskaźnika napis wczytaj łańcuch o dowolnej długości. Po wczytaniu łańcucha przydziel
odpowiednia˛ ilość pami˛eci dla łańczucha wynikowego, po czym wywołaj funkcj˛e co4 z pierwszym argumentem liczba oraz drugim napis. Wypisz na ekran łańcuch wskazywany przez wskaźnik liczba.
Przykładowo dla wczytanego łańcucha ”ABCDRE” program powinien wypisać ”ACR”.
40. Napisz funkcj˛e int liczba(char const* s) nie używajac
˛ operatora indeksowania. Funkcja ta ma
zwracać liczb˛e reprezentowana˛ przez cyfry w napisie s, np. wywołanie liczba("123") powinno zwrócić
liczb˛e 123. Program demonstrujacy
˛ powinien wywoływać funkcj˛e liczba dopóki podane dane sa˛ poprawne,
albo też użytkownik nie życzy sobie wi˛ecej powtórzeń.s