08
Metodyka i techniki programowania
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 wskaźniki 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.