Metodyka i techniki programowania 08 Tablice Dr inż. Paweł Kułakowski Ćwiczenie 1. Tablice - podstawy 1. Zaimplementuj poniższy kod, pozwalający obliczyć iloczyn skalarny dwóch wektorów: int i ; float wekt1[3], wekt2[3], skalar ; printf ("Podaj wspolrzedne wektora wekt1:\n") ; for (i=0; i<3; i++) scanf ("%f", &wekt1[i]) ; printf ("oraz wspolrzedne wektora wekt2:\n") ; for (i=0; i<3; i++) scanf ("%f", &wekt2[i]) ; skalar = wekt1[0]*wekt2[0] + wekt1[1]*wekt2[1] + wekt1[2]*wekt2[2] ; printf ("\nIloczyn skalarny wektorow wynosi: %f\n", skalar) ; 2. Linię programu, w której liczona jest zmienna skalar zmodyfikuj w taki sposób, aby to obliczenie było wykonywane z użyciem pętli. 2. Zmień wywołania funkcji scanf w taki sposób, aby ich argumentami były wskazniki do tablic wekt1 i wekt2. 3. Zmodyfikuj program tak, aby oprócz iloczynu skalarnego był liczony również iloczyn wektorowy. Ćwiczenie 2. Operacje na tablicach Poniższy program ma na celu odwrócenie tablicy liczb: w efekcie pierwsza liczba ma się znajdować na ostatnim miejscu, druga na przedostatnim, itd. Gdzie tkwi błąd w tym programie? Napisz jego poprawną wersję. int i, tablica[10] ; srand (time (NULL)) ; /* inicjalizacja generatora liczb losowych */ /* losowanie liczby od 0 do 99 : */ for (i=0; i<10; i++) tablica[i] = rand()%100 ; printf ("\nTablica po inicjalizacji:\n") ; for (i=0; i<10; i++) printf ("%i ", tablica[i]) ; /* odwracanie kolejnosci liczb w tablicy : */ for (i=0; i<10; i++) tablica[i] = tablica[9-i] ; printf ("\n\nTablica po odwroceniu:\n") ; for (i=0; i<10; i++) printf ("%i ", tablica[i]) ; printf ("\n\n") ; Zadanie Napisz program, który uporządkuje liczby w 10-elementowej tablicy typu int. Wartości początkowe niech będą generowane losowo z przedziału od 1 do 20. Ćwiczenie 3. Tablice wielowymiarowe 1. Zaimplementuj poniższy kod, wyświetlający stan rozgrywki szachowej. Na przedstawionej szachownicy, użyto oznaczeń: 'W' wieża, 'S' skoczek, 'G' goniec, 'H' hetman, 'K' król, 'P' pionek. Duże litery oznaczają czarne figury, a małe białe. '+' to puste pole. int i, j ; char chess[8][8] = {"W++HKGSW", /* wpisanie stanu szachownicy */ "PGPPPP+P", /* do dwuwymiarowej tablicy */ "SP++++P+", "+g++s+++", "++++++h+", "++++p+++", "pppp+ppp", "wsg+k++w"} ; printf ("\n") ; for (i=0; i<8; i++) /* wyswietlenie na ekranie stanu gry */ { printf (" ") ; for (j=0; j<8; j++) printf ("%c", chess[i][j]) ; printf ("\n") ; } 2. Czy można obejść się bez wewnętrznej pętli? Popraw powyższy program. 3. Obecny ruch należy do czarnych. Wykonaj bicie białego pionka czarnym gońcem i wyświetl na ekranie zaktualizowaną wersję szachownicy. 4. W ruchu białych, również zbij pionka gońcem, szachując czarnego króla. 5. W kolejnym ruchu czarnych nie masz już wyboru: zbij gońca hetmanem. 6. Ostatni ruch białych: Biały hetman bije czarnego i mat! Po każdym ruchu aktualizuj szachownicę na ekranie. Zadanie Napisz program umożliwiający grę w Mastermind. Podstawowe zasady gry: 1. Program losuje cztery cyfry z zakresu od 1 do 6 i ustawia je w określonej kolejności. Cyfry mogą się powtarzać (np. 1365, 1442, 3623, 6525). 2. Gracz próbuje zgadnąć cyfry, podając komputerowi swoją propozycję. 3. W odpowiedzi, komputer podaje graczowi dwie informacje: a. ile cyfr udało się odgadnąć i ustawić na właściwych pozycjach (za każdą odgadniętą w ten sposób cyfrę komputer rysuje gwiazdkę - *), b. ile cyfr udało się odgadnąć, ale ich pozycje nie są właściwe (za każdą odgadniętą w ten sposób cyfrę komputer rysuje zero - 0). Oczywiście suma gwiazdek i zer nigdy nie będzie większa od 4. 4. Gracz ponownie próbuje odgadnąć cyfry, podjąć swoja kolejną propozycję gra się toczy do odgadnięcia wszystkich czterech cyfr (oczywiście cyfry muszą się znajdować na właściwych pozycjach) na co komputer powinien odpowiedzieć czterema gwiazdkami i komunikatem o wygranej. Przykład: Odgadywane cyfry to: 6261. Gracz proponuje cyfry: 6312. Komputer odpowiada: *00. Gracz nie wie, które z zaproponowanych przez niego cyfr udało mu się trafić, ale po kolejnych próbach może już wyciągać pewne wnioski.