Programowanie i metody numeryczne — laboratorium, część 3 3 3.1 Tablice Wstęp Zadanie 3.1.1. Napisz program, który definiuje dwie tablice zmiennych typu int długości 20, a następnie wypełnia pierwszą z nich kolejnymi liczbami naturalnymi zaczynając od 1, a drugą zerami. Na koniec program powinien wypisać zawartość tablic na ekran. Zadanie 3.1.2. W powyższym zadaniu spróbuj wypełnić więcej elementów pierwszej tablicy, aniżeli wynosi jej zadeklarowana długość, np. 25, 40, 70, 1000, 10000, 100000. Co się wówczas stanie? Zadanie 3.1.3. Napisz procedurę wczytującą trzy zmienne a, b, c, zmieniający wartości zmiennych a i b na a := ca, b := b/c. Napisz program demonstrujący działanie procedury. Zadanie 3.1.4. Napisz procedurę wczytującą dwie tablice typu int o tej samej długości, zapisującą do pierwszej z nich sumę kolejnych elementów obu tablic. Napisz program demonstrujący działanie procedury. Zadanie 3.1.5. Napisz procedurę, która jako argument przyjmuje napis i wyświetla kody odpowiadające znakom zawartym w tym napisie. 3.2 Wczytywanie i wypisywanie Zadanie 3.2.1. Napisz procedurę void zapisz_tab ( string nazwa_pliku , const int * tab , unsigned int n ); która zapisze do pliku podaną tablicę o długości n. Zadanie 3.2.2. Napisz procedurę void s p r a w d z _ i _ z l i c z _ e l e m e n t y ( string nazwa_pliku , unsigned int & n ); która sprawdzi, czy z podanego pliku można wczytać tablicę elementów typu int. Jeśli tak, w zmiennej n należy zwrócić długość tej tablicy, jeśli nie to trzeba zwrócić 0. Zadanie 3.2.3. Napisz procedurę void w c z y t a j _ t a b _ z _ p l i k u ( string nazwa_pliku , int * tab , unsigned int n ); która wczyta tablicę do zmiennej tab długości n z podanego pliku. Zadanie 3.2.4. Używając szablonów, popraw funkcje z powyższych zadań, tak aby mogły one przyjmować tablice elementów dla dowolnego, wybranego typu. 3.3 Operacje Zadanie 3.3.1. Napisz program, który generuje tablicę losowych liczb całkowitych z wybranego zakresu do pliku. Program powinien przyjmować nazwę pliku, dolne i górne ograniczenie zakresu liczb oraz długość tablicy. Zadanie 3.3.2. Napisz procedurę bool z n a j d z _ w _ t a b ( int szuk , int & poz , const int * tab , int n ) która sprawdza, czy w podanej tablicy znajduje sie liczba szuk. Jeśli tak, funkcja zwraca wartość true i w poz zapisuje jej pozycję w tablicy (jeśli liczba wystąpi wiele razy, najmniejszy indeks). W przeciwnym wypadku funkcja powinna zwrócić wartość false i ustawić poz na -1. 1 Zadanie 3.3.3. Napisz program, który wczyta tablicę z pliku podanego przez użytkownika, a następnie korzystając z powyższej funkcji wypisze te liczby {0, 1, . . . , 1000}, które znajdują się we wczytanej tablicy. Na tej podstawie sprawdź, w jaki sposób czas działania powyższej procedury zależy od wielkości tablicy. Zadanie 3.3.4. Napisz program, który posortuje tablicę z pliku podanego przez użytkownika metodą sortowania przez wybieranie. Metoda ta polega na wybraniu z tablicy elementu najmniejszego i przestawieniu go na pierwsze miejsce, a następnie wykonaniu tej samej operacji na tablicy bez pierwszego elementu, itd., aż do uzyskania tablicy jednoelementowej. Operację sortowania umieść w osobnej procedurze. Oceń czas działania metody w zależności od wielkości tablicy. Zadanie 3.3.5. Powtórz powyższe zadanie zmieniając podejście, tzn. iteracyjnie zamiast rekurencyjnie lub odwrotnie. Oceń czas działania w zależności od wielkości tablicy. 2