User Tools

Site Tools


dydaktyka:cprog:2016:arrays-solutions

This is an old revision of the document!


Tablice – rozwiązania

Laboratorium: klik

Zadanie SUM1D

#include <stdio.h>
#include <stdlib.h>
 
/* skorzystaj ze stalej symbolicznej do przechowywania rozmiaru tablicy */
#define N  4
 
int main()
{
    double tab[N] = {0.3, 0.5, 1.0, 3};
    double suma = 0;    /* zwroc uwage na typ zmiennej `suma`! */
    int i;
 
    for(i = 0; i < N; i++) {
        suma += tab[i];
    }
 
    printf("Suma wynosi %f\n", suma);
 
    return 0;
}

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 pojawiłby się w sytuacji, gdybyśmy z początku wybrali wartość większą od wartości największego elementu tablicy (np. gdybyśmy przyjęli max = 10, dla tablicy {1, 7, 2}).

#include <stdio.h>
#include <stdlib.h>
 
#define N  5
 
int main()
{
    int tab[N] = {1, 5, 0, 9, 3};
    int max; /* wartosc najwiekszego elementu tablicy */
    int i;
 
    max = tab[0];
    for(i = 0; i < N; i++) {
        if (tab[i] > max) {
            max = tab[i];
        }
    }
 
    printf("Maksymalna wartosc: %d\n", max);
 
    return 0;
}

Zadanie SUM2D

#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;
}

Zadanie IDL

#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;
}

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.

#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;
}
dydaktyka/cprog/2016/arrays-solutions.1449745121.txt.gz · Last modified: 2020/03/25 11:46 (external edit)