This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dydaktyka:cprog:2016:arrays-solutions [2017/01/02 07:54] pkleczek [Zadanie MAX1D] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tablice – rozwiązania ====== | ||
- | Laboratorium: **[[dydaktyka:cprog:2015:arrays|klik]]** | ||
- | |||
- | ===== Zadanie SUM1D ===== | ||
- | |||
- | <code c sum1d.c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() { | ||
- | double tab[4] = {0.3, 0.5, 1.0, 3}; | ||
- | double suma = 0; /* zwroc uwage na typ zmiennej `suma`! */ | ||
- | int i; | ||
- | |||
- | for(i = 0; i < 4; i++) { | ||
- | suma += tab[i]; | ||
- | } | ||
- | |||
- | printf("Suma wynosi %f\n", suma); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== Zadanie MAX1D ===== | ||
- | |||
- | Zadanie można rozwiązać w następujący sposób: \\ | ||
- | //Przejdź kolejno przez wszystkie elementy tablicy i dla każdego z nich sprawdź, czy jego wartość jest większa od dotychczas znalezionej wartości maksymalnej. \\ | ||
- | Jeśli tak, to przyjmij wartość tego elementu jako nową wartość maksymalną.// | ||
- | |||
- | Jaką wartość przyjąć na samym początku jako maksymalną? Najprościej -- dowolną taką, która występuje w tablicy! Nasz algorytm dokona ewentualnie niezbędnej korekty. \\ | ||
- | Problem pojawia się wtedy, gdy za największą dotychczasową znalezioną wartość przyjmiemy wartość większą od wartości największego elementu tablicy (np. gdybyśmy przyjęli początkowo ''max = 0'', a w tablicy mieli wartości ''{-1, -7, -2}''). | ||
- | |||
- | <code c max1d.c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() { | ||
- | int tab[5] = {1, 5, 0, 9, 3}; | ||
- | int max; /* wartosc najwiekszego elementu tablicy */ | ||
- | int i; | ||
- | |||
- | max = tab[0]; | ||
- | for(i = 0; i < 5; i++) { | ||
- | if (tab[i] > max) { | ||
- | max = tab[i]; | ||
- | } | ||
- | } | ||
- | |||
- | printf("Maksymalna wartosc: %d\n", max); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== Zadanie RAND-ARR ===== | ||
- | |||
- | <code c rand-arr.c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() { | ||
- | int tab[10]; | ||
- | /* Użyj elastycznego określania rozmiaru tablicy. */ | ||
- | int n = sizeof(tab) / sizeof(tab[0]); | ||
- | int i; | ||
- | |||
- | for(i = 0; i < n; i++) { | ||
- | tab[i] = rand() % 100; | ||
- | } | ||
- | |||
- | for(i = 0; i < n; i++) { | ||
- | printf("%d ", tab[i]); | ||
- | } | ||
- | printf("\n"); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== Zadanie SUM2D ===== | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | #define N 5 | ||
- | #define M 8 | ||
- | |||
- | int main() | ||
- | { | ||
- | int tab[N][M]; | ||
- | int suma = 0; | ||
- | int i, j; | ||
- | |||
- | for(i = 0; i < N; i++) { | ||
- | for (j = 0; j < M; j++) { | ||
- | tab[i][j] = i + 2*j; | ||
- | } | ||
- | } | ||
- | |||
- | for(i = 0; i < N; i+=2) { | ||
- | for (j = 0; j < M; j++) { | ||
- | suma += tab[i][j]; | ||
- | } | ||
- | } | ||
- | |||
- | printf("Suma wynosi %d\n", suma); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== Zadanie IDL ===== | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | #include <string.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | char imie[20]; | ||
- | char nazwisko[30]; | ||
- | |||
- | printf("Podaj imie i nazwisko: "); | ||
- | scanf("%s %s", imie, nazwisko); | ||
- | |||
- | printf("Imie : %s (%d)\n", imie, strlen(imie)); | ||
- | printf("Nazwisko : %s (%d)\n", nazwisko, strlen(nazwisko)); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | ===== Zadanie REV ===== | ||
- | |||
- | Poniższe rysunki pomogą Ci zrozumieć ideę rozwiązania (pary kolorowych strzałek wskazują, które elementy zamieniamy ze sobą miejscem). Zwróć uwagę na ilość dokonywanych zamian w zależności od ilości elementów. \\ | ||
- | {{:dydaktyka:cprog:2015:rev_3.png?nolink|}} \\ | ||
- | {{:dydaktyka:cprog:2015:rev_4.png?nolink|}} | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | int tab[] = {1, 2, 3, 4}; | ||
- | int i; | ||
- | |||
- | /* W elastyczny (!) sposob wyznacz ilosc elementow tablicy. */ | ||
- | int ilosc_elementow = sizeof(tab) / sizeof(int); | ||
- | |||
- | /* [1] Odwroc tablice. */ | ||
- | /* i - indeks elementu "od poczatku" */ | ||
- | for(i = 0; i < ilosc_elementow / 2; i++) { | ||
- | /* Pamietaj, ze indeksowanie elementow tablicy zaczyna sie od 0... | ||
- | ...czyli konczy sie na `n-1`! */ | ||
- | int indeks_elementu_od_konca = (ilosc_elementow - 1) - i; | ||
- | int t = tab[indeks_elementu_od_konca]; | ||
- | tab[indeks_elementu_od_konca] = tab[i]; | ||
- | tab[i] = t; | ||
- | } | ||
- | |||
- | /* [2] Wypisz tablice - element po elemencie. */ | ||
- | for (i = 0; i < ilosc_elementow; i++) { | ||
- | printf("%d ", tab[i]); | ||
- | } | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> |