Tablice jednowymiarowe

Transkrypt

Tablice jednowymiarowe
Język C++
Tablice jednowymiarowe
Gdy mamy do czynienia z zestawem zmiennych, to można z nich zrobić tablicę. Tablica jest ciągiem
elementów tego samego typu, który zajmuje ciągły obszar pamięci.
Korzyść z zastosowania tablicy jest taka, że zamiast nazywania każdej zmiennej osobno, wystarczy
odnieść się do k–tego elementu danej tablicy.
Deklaracja tablicy
typ_elementów nazwa tablicy[liczba_elementów];
Przykład 1
Jeśli chcemy mieć 4 elementy typu całkowitego (int), to definicja tablicy o nazwie tablica wygląda
następująco:
int tablica[4];
Elementami tej tablicy są
tablica[0] tablica[1] tablica[2] tablica[3]
Uwaga: Numeracja elementów tablicy w języku C++ zaczyna się od zera
Inicjalizacja tablic
Tablicę można zadeklarować i od razu nadać wartości jej elementom np. za pomocą instrukcji:
float tab[]={0.5, 4, 2.17, 100.0101}
przy czym nie trzeba określać rozmiaru tablicy, gdyż kompilator rozpozna go po liczbie elementów.
Innym sposobem inicjacji tablic jest przypisanie każdemu jej elementowi wartości, np.:
float tab[4];
tab[0]=0.5; tab[1]=4; tab[2]=2.17;
tab[3]=100.0101;
Przekazywanie tablic do funkcji
Funkcja po otrzymaniu tablicy jako argumentu, ma pełen dostęp do zawartości komórek, w których
przechowywane są elementy tablicy –działa bezpośrednio na tablicy.
Przykład 2
void wypelnij (int tab[10])
{
for (int i=0;i<8;i++)
{
cout <<”Podaj wartość elementu”;
cin >>tab[i];
}
}
Jeśli chcemy operować na tablicach o różnych rozmiarach, to musimy oprócz tablicy przekazać jeszcze liczbę jej
elementów, np.:
Przykład 3
void wypelnij2 (int tab[], int rozmiar)
{
for (int i=0;i<rozmiar;i++)
{
cout <<”Podaj wartość elementu”;
cin >>tab[i];
}
}
-1Rafaello
Język C++
Tablice przesyła się podając tylko jej nazwę, która jest zarazem adresem początku tej tablicy. Dla
przykładu 2 wywołanie funkcji będzie wyglądało następująco:
wypełnij(tablica);
UWAGA:
Skoro nazwa tablicy jest równocześnie ADRESEM ZEROWEGO elementu, więc poniższe odwołania są
sobie równoważne:
Tab + 3
⇔
Tab[3]
⇔
&Tab[3]
Tablice dwuwymiarowe
Elementami tablicy dwuwymiarowej są jednowymiarowe tablice, z których każda ma tą samą liczbę
elementów tego samego typu.
Deklaracja tablicy dwuwymiarowej
typ_elementów nazwa tablicy[liczba_wierszy][liczba_kolumn];
Przykład 3
int liczby[2][3] //deklaracja tablicy o 2 wierszach i 3 kolumnach
Zadania
Zadanie 1 Odwrotnie
Napisz program, który wczytuje n liczb naturalnych większych od zera i mniejszych od 1000 i wypisze je
w kolejności odwrotnej.
Wejście
Pierwszy wiersz zawiera liczbę n – ilość elementów do wczytania.
W drugim wierszu podano po spacji n liczb.
Wyjście
Ciąg liczb podanych na wyjściu w odwrotnej kolejności.
Przykład
Dla danych:
4
2 1 7 11
poprawną odpowiedzią jest:
11 7 1 2
Zadanie 2 Liczba
Dany jest ciąg n (n>1 i n<6500) liczb naturalnych nie większych od 1000. Napisz program, który wyznaczy
(o ile istnieje) najmniejszą liczbę naturalną, która w nim nie występuje). Jeśli każda z liczb od 1 do 1000
występuje w podanym ciągu program powinien wypisać wówczas liczbę zero.
Przykład
Dla danych:
5
2 1 3 7 4
poprawną odpowiedzią jest liczba:
5
Zadanie 3 Moda (wartość występująca najczęściej)
Danych jest n liczb naturalnych nie większych od 100. Napisz program, który wyznaczy liczbę, która pojawiła
się najczęściej. Jeśli istnieje kilka liczb występujących najczęściej wypisz najmniejszą z nich.
Przykład
Dla danych:
4
7 1 7 1
-2Rafaello
Język C++
poprawną odpowiedzią jest wynik:
1
Zadanie 4 Zamiana
Napisz program, który wczytuje ciąg liczb do 20 elementowej tablicy jednowymiarowej zamienia miejscami
element pierwszy z ostatnim, drugi z przedostatnim, itd:
Wejście
Pierwszy wiersz wejścia zawiera liczbę całkowitą n z przedziału 2…20, będąca ilością elementów tablicy.
Następny
wiersz
zawiera
oddzielone
pojedynczą
spacją
n–liczb
z
zakresu:
-32768…32767
Wyjście
W kolejnych wierszach wyjścia należy zapisać elementy pozamieniane miejscami.
Przykład
Dla pliku wejściowego:
4
2 3 4 1
poprawną odpowiedzią jest wynik:
1 4 3 2
Zadanie 5 Losowe
Utwórz program, który do tablicy o nazwie A – 100 elementowej zapisze liczby losowe z przedziału 0…100
i wypisze je na ekranie monitora.
Wskazówka:
Do generowania liczb losowych służy funkcja rand(). Generuje ona liczbę całkowitą od 0 do RAND_MAX.
Aby wygenerować liczbę z przedziału <0,a>, napiszemy: d= rand() % (a+1), czyli użyjemy reszty z dzielenia
wygenerowanej liczby przez a+1.
Aby za każdym razem po uruchomieniu programu otrzymać inną sekwencję liczb losowych należy zainicjować
rand() funkcją srand(time(NULL)). Argument w funkcji srand w postaci time(NULL) oznacza, że wartość
bazową w procesie generowania liczby przyjmowany jest odczytany z zegara czas, jaki upłynął w sekundach od
roku 1970. Funkcja rand znajduje się w bibliotece cstdlib.
Wejście
Pierwszy i jedyny wiersz wejścia zawiera liczbę całkowitą k z zakresu 2..100.
Wyjście
W k wierszu wyjścia ma pojawić się k – ty element tablicy.
Przykład
Dla danej wejściowej:
3
Jedną z możliwych odpowiedzi jest::
A[0]= ………
A[1]= ………
A[2]= ………
Zadanie 6 Helikopter
Między miastem A a miastem B odległość wynosi S kilometrów. W tym samym dniu, w tym samym czasie
wyjeżdżają z obu miast ku sobie na spotkanie dwaj rowerzyści bez zatrzymywania się z prędkością Vr
kilometrów na godzinę, a równocześnie z nimi wylatuje z miejscowości A helikopter lecący z prędkością Vh
kilometrów na godzinę. Helikopter, wyprzedziwszy rowerzystę jadącego z miejscowości A, leci na spotkanie
drugiego, który wyjechał z miejscowości B. W momencie spotkania go zawraca natychmiast i leci ku
pierwszemu, doleciawszy doń znów zawraca i zmierza ku drugiemu – i tak powtarza swój lot naprzód i wstecz
tak długo, aż się rowerzyści spotkają. Ile kilometrów przeleci helikopter ?
Wejście
W pierwszym wierszu standardowego wejścia zapisano trzy wartości Vr(5<=Vr<=100), S(100<=S<=500000)
i Vh (100<=Vh<=5000) oddzielone spacją.
Wyjście
-3Rafaello
Język C++
W jedynym wierszu standardowego wyjścia zapisz ile kilometrów przeleciał helikopter z dokładnością do
dwóch miejsc po kropce.
Przykład
Dla danych
50 300 100
poprawna odpowiedź
300.00
Zadanie 7 Wypełnij
Utwórz program z użyciem funkcji, który znajduje średnią ocen zapisanych w jednowymiarowej
dwunastoelementowej. Wykorzystaj 3 funkcje:
1. void wypelnij(float tab[], int ilosc)
2. float sumuj (float tab[], int ilosc)
3. void wypisz(float tab[], int ilosc)
Wejście
Pierwszy wiersz wejścia zawiera liczbę całkowitą n – ilość ocen. Następne wiersz zawiera n – liczb
rzeczywistych przedzielonych spacją – ocen z poszczególnych przedmiotów
Wyjście
W pierwszym wierszu wyjścia ma pojawić się liczba rzeczywista będąca średnią ocen, w następnych wierszach
mają być wypisane wszystkie oceny, których wyliczona została średnia..
Przykład
Dla danych wejściowych:
4
4 3 5 2
poprawną odpowiedzią jest:
3.5
4
3
5
2
Zadanie 8 Największy
Napisz program, który w tablicy o nazwie TAB – 100 elementowej zawierającej liczby losowe z przedziału 100 … 100 znajdzie element największy.
Wejście
Pierwszy wiersz wejścia zawiera liczbę całkowitą n z zakresu 2..100 – ilość elementów tablicy.
Wyjście
W pierwszym wierszu wyjścia należy wypisać:
Numer komórki tabeli, w której znajduje się element największy
Przykład
Dla n=4, p=10 i liczb losowych TAB[0]=23; TAB[1]=10;TAB[2]= -87; TAB[3]=56
poprawną odpowiedzią jest odpowiedź:
3
Zadanie 9 Wyróżniony
Napisz program, który w tablicy o nazwie TAB – 100 elementowej zawierającej liczby losowe z przedziału 100 … 100 znajdzie element wyróżniony (szukany).
Wejście
Pierwszy wiersz wejścia zawiera liczbę całkowitą n z zakresu 2..100 – ilość elementów tablicy. Drugi wiersz
zawiera szukany element - p
Wyjście
W pierwszym wierszu wyjścia należy wypisać:
Numer komórki tabeli, w której znajduje się podany element lub słowo NIE, jeśli element
nie występuje
-4Rafaello
Język C++
Przykład
Dla n=3, p=10 i liczb losowych TAB[0]=23; TAB[1]=10;TAB[2]=-87;:
poprawną odpowiedzią jest odpowiedź:
1
Zadanie 10 Stok
Stokiem rosnącym w tablicy A nazywamy ciąg kolejnych elementów, takich że A[i]<A[i+1] (czyli, każdy
kolejny element musi być większy od poprzedniego). Długość stoku rosnącego jest to liczba jego elementów.
Dla podanego ciągu liczb wyznacz maksymalną długość stoku rosnącego.
Wejście
Pierwszy wiersz wejścia zawiera liczbę naturalną n z przedziału 3…100 oznaczającą ilość danych. W kolejnym
wierszu zapisano n liczb całkowitych z przedziału -215… 215-1
Wyjście
Długość największego stoku rosnącego.
Przykład
Dla danych wejściowych:
8
12534598
Poprawną odpowiedzią jest liczba:
4
Zadanie 11 Maksymalna suma
Dany jest ciąg liczb całkowitych X1, X2, ..., XN. Opracuj program znajdujący w tym ciągu spójnego fragmentu
tzn. podciągu złożonego z pewnej ilości kolejnych elementów XK, XK+1, ..., XJ (gdzie 1 <= k <= j <= n) o
największej możliwej sumie.
Wejście
W wierszu wejścia zapisane są wartości ciągu z przedziału od -30000 do 30000 oddzielone pojedynczą spacją.
Liczba elementów ciągu nie przekracza 60000. Ostatnim znakiem zbioru jest znak końca zbioru EOF.
Wyjście
W standardowym wyjściu w jedynym wierszu zapisana jest maksymalna suma fragmentu.
Przykład
Dla danych
2 5 -9 3 9 -1 2 10
poprawna odpowiedź to
23
Zadanie 12 Zamiana cyfr
Jaka największa liczba może być uzyskana z podanej liczby naturalnej, jeżeli dopuszczamy co najwyżej jedną
operację zamiany miejscami dwóch cyfr? Napisz algorytm, który rozwiąże to zadanie.
Wejście
W pierwszym wierszu standardowego wejścia zapisano jedną liczbę naturalną mieszczącą się w typie int.
Wyjście
W jedynym wierszu standardowego wyjścia powinna znaleźć się odpowiedź
Przykład
Dla danej
2545
poprawnym wynikiem jest 5542
-5Rafaello
Język C++
Zadanie 13 divide and conquer
Napisz program, który w tablicy o nazwie TAB – 100 elementowej zawierającej liczby losowe z przedziału 100 … 100 znajdzie element największy i najmniejszy.
Wejście
Pierwszy wiersz wejścia zawiera liczbę całkowitą n z zakresu 2..100 – ilość elementów tablicy.
Wyjście
W pierwszym wierszu wyjścia należy wypisać dwie liczby oddzielone spacją:
Element największy i najmniejszy
Przykład
Dla n=4, p=10 i liczb losowych TAB[0]=23; TAB[1]=10;TAB[2]= -87; TAB[3]=56
poprawną odpowiedzią jest odpowiedź:
56 -87
Wskazówka
Wykorzystaj tutaj poniższy algorytm:
Krok1: {Podział zbioru na dzw podzbiory: M – zbiór kandydatów na minimum i N – zbiór kandydatów na
maksimum. Na początku zbiory te są puste}. Jeśli n jest liczbą nieparzystą to za an+1=an.
Dla i=1, 3, 5, …, n-1 wykonaj:
Jeśli xi<=xi+1, to dołącz xi do M, a xi+1 do N,
A w przeciwnym razie dołącz xi do N, a xi+1 do M
Krok 2: Znajdź w zbiorze M element najmniejszy
Krok 3: Znajdź w zbiorze N element największy.
Oblicz ile porównań wykonuje powyższy algorytm.
Zadanie 14 Sito Eratostenesa
Napisz program, który wypisze kolejne liczby pierwsze. Skorzystaj z poniższego algorytmu, zwanego sitem
Eratostenesa: Dla danego ciągu kolejnych liczb naturalnych począwszy od 2 do n
Przyjmujemy, że liczba 2 jest pierwsza, następnie wykreślamy wszystkie wielokrotności
liczby 2. Następna nie wykreślona liczba, czyli 3 jest pierwsza. Wykreślamy teraz
wszystkie wielokrotności liczby 3. Następna niewykreślona liczba, czyli 5 jest pierwsza,
itd.
Wykorzystaj tablicę liczb całkowitych o 1000 elementach
Wejście
W pierwszym wierszu wejścia zapisano jedną liczbe n z przedziału 2…1000 – ilość liczb w tablicy
Wyjście
Na standardowym wyjściowym należy zapisać kolejne liczby pierwsze rozdzielone pojedynczą spacją.
Przykład
Dla danej wejściowej:
20
poprawną odpowiedzią jest ciąg liczb:
2 3 5 7 11 13 17
Zadanie 15 Podział
Napisz program, który dla danej tablicy 100 – elementowej „podzieli” ją według elementu wybranego na dwie
części: lewą – gdzie znajdują się elementy nie większe od wskazanego i prawą – gdzie są elementy mniejsze.
Wejście
W pierwszym wierszu wejścia zapisano dwie liczby: liczbę n z przedziału 2…100 – ilość liczb w tablicy oraz
liczbę k – indeks elementu wskazanego
Drugi wiersz zawiera n liczb całkowitych – elementów tablicy
Wyjście
Zgodne z przykładem
Przykład
Dla danych wejściowych:
6 2
-6Rafaello
Język C++
234815
Poprawna odpowiedzią jest ciąg:
231485
Zadanie 16 Scalanie posortowanych tablic
Napisz program, który scali dwie posortowane rosnąco tablice o w jedną uporządkowaną niemalejąco.
Wejście
W pierwszym wierszu wejścia zapisane są dwie liczby naturalne z przedziału od 5 do 100 – ilość elementów
każdej z posortowanych tablic. Kolejne dwa wiersze zawierają elementy poszczególnych tablic w kolejności
rosnącej. Elementy tablicy są niewielkimi liczbami całkowitymi.
Wyjście
Ciąg liczb posortowanych niemalejąco
Przykład
Dla danych wejściowych:
45
1259
13479
Poprawną odpowiedzią jest ciąg:
112345799
-7Rafaello

Podobne dokumenty