Szukaj

1944

Reklama

Chroń swoje dziecko

w Internecie
Reklama

za darmo ...

Kalendarz

Reklama

Jak odbierasz ...

Wygląd portalu
 

"Musicie od siebie wymagać, nawet jeśli inni by od Was nie wymagali..." JP2 [100%]

Reklama
MATRIX - reaktywacja ... czyli tablice ciąg daszy PDF Drukuj Email
Ocena użytkowników: / 3
SłabyŚwietny 
Instrukcje i materiały do ćwiczeń - Podstawy programowania w C++
Wpisany przez Administrator   

Z tej lekcji dowiesz się:

  1. Jak operować na tablicach 2 i więcej wymiarowych
  2. Co to jest zagnieżdżanie pętli
  3. Jak odchudzić kod programu maksymalnie wykorzystując każdą pętlę
  4. Jak przerwać pętlę (break;)

 


W poprzednim artykule nauczyliśmy się podstaw operacji na tablicach jednowymiarowych.

 

Jednak tablica może być na przykład 2-wymiarowa. Tak, jak już wspomniano, tablica wielowymiarowa to tablica tablic. Tak naprawdę każdą tablicę można "rozbić" na tablice jednowymiarowe.

Czyli na przykład  tablica 2-wymiarowa to jednowymiarowa tablica jednowymiarowych tablic. Jeśli przyjmiemy, że w grze w statki każdy rząd jest tablicą o 10 elementach, to kolumny to tablice rzędów. (zobacz obrazek)

 Napiszmy program, który generuje tablicę dwuwymiarową 10x10 składającą się z samych zer.

 

 

 

kod programu

 

 

Zastosowaliśmy tutaj tzw. zagnieżdżanie pętli, czyli zamieszczenie jednej pętli w drugiej. Nie było to trudne a pozwoliło w 2 linijkach kodu "przelecieć" tablicę 10 na 10 elementów.

w praktyce dzieje się tak: pętla wykonywana jest 100 razy: 

  • najpierw przyjmuje za i=0 i dla j= od zera do  wykonuje blok instrukcji w klamrach
  • zwiększa i o 1 i znów powtarza pętlę 10 razy (dla j=0 do 9)
  • .....
  • w końcu i wynosi 9 i po ostatniej pętli(dla j wynoszącego 9) pętla zostaje przerwana.

 

Ćwiczenie 2:

Napisz program, który wypełnia tablicę  5 na 5 elementów liczbami losowymi i wyświetla tą tablicę.

 

 

kod dla sprawdzenia zamieszczono na końcu artykułu

 

ćwiczenie 3:

Napisz program, który w tablicy 2-wymiarowej, wygenerowanej losowo, znajduje najmniejszy element.

Podpowiedź - analogicznie jak w trakcie poprzedniej lekcji z tablicami jednowymiarowymi.

 

 kod dla sprawdzenia zamieszczono na końcu  artykułu

 

ćwiczenie 4:

Napisz program taki, jak w ćwiczeniu 3, jednak zamiast 2 pętli użyj tylko jednej w całym programie.

Podpowiedź: Podczas generowania liczb (wewnątrz pętli) od razu na bieżąco następuje porównywanie i wyłonienie najmniejszego elementu oraz zapisywanie jego adresów (rząd oraz komórka).

pseudokod pętli:

generuj element [i][j]

jeśli ten element jest mniejszy niż dotychczasowe minimum to

{

min_i = i

min_j = j

min - macierz[i][j]

 

ćwiczenie 5:

 

Napisz program, który w tablicy 2-wymiarowej, wygenerowanej losowo, znajduje największy element.

Podpowiedź - analogicznie jak w ćwiczeniu 3.  Zobacz też analogiczne zadanie dla tablicy jednowymiarowej w poprzedniej lekcji.

 

Ćwiczenie 6:

Napisz program, który w tablicy 2-wymiarowej, wygenerowanej losowo, znajduje największy element oraz najmniejszy element. Informacje o ich wartościach oraz adresach wyświetlone są w programie.

Podpowiedź - analogicznie jak w trakcie poprzedniej lekcji z tablicami jednowymiarowymi.

W jednej pętli element jest sprawdzany: czy jest najmniejszy oraz czy jest największy, jeśli tak, to jego dane są zapisane jak tymczasowe minimum lub maksimum. Po zakończeniu sprawdzania ostatnie "tymczasowe" minimum i maksimum staje się automatycznie właściwymi minimum i maksimum.

 

ćwiczenie 7:

Napisz program, który w tablicy 2-wymiarowej, wygenerowanej losowo, znajduje największy oraz najmniejszy element. Informacje o ich wartościach oraz adresach wyświetlone są w programie.Wykorzystaj tylko jedną pętlę.

 

 

Podpowiedź - zob. ćw. 4.

 kod dla sprawdzenia zamieszczono na końcu  artykułu

 

ćwiczenie 8:

Napisz program, który na planszy do gry w statki o wymiarach 10 na 10 pól w sposób losowy umieszcza statek "1-masztowy". Tablica wypełniona jest zerami, natomiast statek wyróżniony jest wartością 1;

 

 

 

podpowiedź:

  1. Cała tablica zostaje wypełniona zerami.
  2. losowanie odbywa się tak: losowy numer z przedziału 0-9 dla rzędu oraz losowy numer z przedziału 0-9 dla komórki. 
  3. Elementowi o adresie wylosowanym w punkcie 2 przypisuje się wartość 1. 

 

  kod dla sprawdzenia zamieszczono na końcu  artykułu

 

Ćwiczenie 9

Napisz program, który na planszy do gry w statki o wymiarach 10 na 10 pól w sposób losowy umieszcza statek "1-masztowy". Tablica wypełniona jest zerami, natomiast statek wyróżniony jest wartością 1. Zadaniem użytkownika jest zatopienie statku w przeciągu 10 prób.Oczywiście, w tym zadaniu program nie wyświetla tablicy statków.

 

 

 

kod programu:

 

 

Zauważ bardzo ważny szczegół: instrukcja break: sprawia, że w dowolnym momencie można opuścić pętlę (przerwać wykonywanie pętli) nawet, jeśli warunek kontynuacji jest dalej spełniony - w tym przypadku po zestrzeleniu statku powtarzanie pętli zostaje przerwane, chociaż niekoniecznie użytkownik wykorzystał swoje 10 prób.

 

Ćwiczenie10:

Napisz program, który na planszy do gry w statki o wymiarach 10 na 10 pól w sposób losowy umieszcza 2 statki 1-masztowe.  Statki nie mogą się stykać. Program wyświetla dane na monitorze. 

 

 

(statki oraz elementy w sąsiednich polach, zostały oznaczone kolorami nie w programie, lecz po dokonaniu zrzutu, aby wskazać obszar, w którym program upewnia się, że nie wylosuje kolejnego statku)

 

podpowiedź: program działa analogicznie jak ten z ćwiczenia 8, jednak trzeba dodać instrukcję upewniającą się, że statki nie stykają się, czyli ich parametry i oraz j nie mogą się jednocześnie różnić o 1.

 

 

   kod dla sprawdzenia zamieszczono na końcu  artykułu

 

 

 

 

 

odpowiedzi:

ćwiczenie 2:

 

 

ćwiczenie 3:

 

 

 

ćwiczenie 4:

 

 

ćwiczenie 8:

 

 

 Ćwiczenie 10: