Tasks studies - laboratory
Laboratorium – dwa kolokwia praktyczne przy komputerze:
Efekt EK_04:
DST: Student potrafi poprawnie stworzyć program rozwiązujące proste problemy wykorzystując odpowiednie struktury danych oraz konstrukcje programistyczne dostępne w języku C.
DB: Student potrafi poprawnie stworzyć programy rozwiązujące średnio-zaawansowane problemy wykorzystując odpowiednie struktury danych oraz konstrukcje programistyczne dostępne w języku C.
BDB: Student potrafi poprawnie stworzyć programy rozwiązujące zaawansowane problemy wykorzystując odpowiednie struktury danych oraz konstrukcje programistyczne dostępne w języku C.
Efekt EK_05:
DST: Student potrafi poprawnie stworzyć program rozwiązujące proste problemy wykorzystując możliwości standardowych bibliotek dostępnych w języku C.
DB: Student potrafi poprawnie stworzyć programy rozwiązujące średnio-zaawansowane problemy wykorzystując możliwości standardowych bibliotek dostępnych w języku C.
BDB: Student potrafi poprawnie stworzyć programy rozwiązujące zaawansowane problemy wykorzystując możliwości standardowych bibliotek dostępnych w języku C.
Ponadto jest oceniana:
Należy potrafić odczytywać dane z plików tekstowych oraz zapisywać dane do plików tekstowych.
Napisz funkcję matrix_multiplication()
. Która przyjmuje następujące parametry:
Napisz funkcję print_matrix()
, która przyjmuje następujace parametry:
0.0000 0.1000
1.0000 1.1000
2.0000 2.1000
W funkcji main()
zainicjalizuj nastepujące tablice i przetestuj działanie fukcji matrix_multiplication()
.
0.0000 0.1000 0.0000 0.2000
1.0000 1.1000 X 2 = 2.0000 2.2000
2.0000 2.1000 4.0000 4.2000
1.0000 2.0000 3.0000 3.0000 6.0000 9.0000
3.0000 2.0000 1.0000 X 3 = 9.0000 6.0000 3.0000
Utwórz funkcję euclidDistance()
która przyjmuje dwie tablice o długości 3 jako parametry funkcji. Funkcja oblicza odległość Euklidesa pomiędzy punktami określonymi przez wartości tablic według wzoru:
A następnie zwraca obliczoną wartość.
Utwórz zmienną przechowującą następujące wartości X, Y i Z:
X | Y | Z |
---|---|---|
1 | 1 | 1 |
2 | 1 | 1 |
3 | 3 | 3 |
1 | 2 | 3 |
W funkcji main oblicz i wypisz obległości pomiędzy wszystkimi wektorami tj. pomiędzy 1 i 1, pomiędzy 1 i 2, pomiędzy 1 i 3 …. poiędzy 4 i 4.
Utwórz funkcję duplicateRow()
która przyjmuje 4 parametry:
Utwórz funkcję compare()
która przyjmuje dwie tablice o takiej samej długości zawierające znaki oraz liczbę znaków. Funkcja zwraca 0 jeśli słowa są takie same lub ilość liter którymi się różnią.
Utwórz strukturę Array
przechowującą:
Utwórz funkcję initArray()
która zwraca instancję struktury Array
i przyjmuje następujące parametry:
Array
do której przypisuje liczbę wierszy i kolumn.
Następnie rezerwuje w pamięci miejsce na przechowanie dwuwymiarowej tablicy i przypisuje wskaźnik do tego miejsca w odpowiednie pole struktury Array
.
Kompletna instancja jest zwracana przez funkcję.Utwórz funkcję printArray()
która przyjmuje jako parametr strukturę Array
.
Funkcja wypisuje zawartość tablicy z przekazanej struktury w następującym formacie:
2.00 2.00 2.00
2.00 2.00 2.00
12.00 12.00 12.00
Utwórz funckję fillArray()
która przyjmuje instancję klasy Array
i prosi użytkownika o wypełnienie zawartości tablicy.
Przykładowa sesja:
Array[0][0] = 1
Array[0][1] = 1
Array[1][0] = 1
Array[1][1] = 1
Array[2][0] = 11
Array[2][1] = 1
Utwórz funkcję multiplyArrays()
przyjmującą dwie instancje struktury Array
. W ciele funkcji zaimplementuj mnożenie macierzy. Uwzględnij nastepujące aspekty:
W metodzie main()
:
Array
.initArray()
utwórz macierze o wymiarach 3x2 oraz 2x3fillArray()
by wypełnić macierze wartościamimultiplyArrays()
przekazując utworzone macierzeprintArray()
)#include <stdio.h>
#include <stdlib.h>
typedef struct tablica{
int row;
int col;
float **tab;
} tablica;
void matrix_multiplication(float **tab, unsigned int col, int row, float x)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
tab[i][j] *= x; // tab[i] = tab[i] * x
}
}
}
void print_matrix(tablica x)
{
for (int i = 0; i < x.row; i++)
{
for (int j = 0; j < x.col; j++)
{
printf("%f\t", x.tab[i][j]);
}
printf("\n");
}
}
tablica createMatrix(int row, int col){
tablica x;
x.col = col;
x.row = row;
float **tab3;
tab3 = calloc(4, sizeof(float *));
for (int i = 0; i < 4; i++)
{
tab3[i] = calloc(2, sizeof(float));
}
x.tab = tab3;
}
int main(int argc, char const *argv[])
{
tablica asd;
int row = 4;
int col = 2;
float tab[4][2] = { {1, 2}, {2, 3}, {3, 4}, {4, 5} };
float tab2[4][2] = {1, 2, 2, 3, 3, 4, 4, 5};
// matrix_multiplication(tab, 2, 4, 4);
float **tab3;
tab3 = calloc(4, sizeof(float *));
for (int i = 0; i < 4; i++)
{
tab3[i] = calloc(2, sizeof(float));
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("podaj wartosc tab[%d][%d]", i, j);
float val;
scanf("%f", &val);
tab3[i][j] = val;
}
}
print_matrix(tab3, 4, 2);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct tablica{
int row;
int col;
float **tab;
} tablica;
void matrix_multiplication(tablica tab, float x)
{
for (int i = 0; i < tab.row; i++)
{
for (int j = 0; j < tab.col; j++)
{
tab.tab[i][j] *= x; // tab[i] = tab[i] * x
}
}
}
void print_matrix(tablica x)
{
for (int i = 0; i < x.row; i++)
{
for (int j = 0; j < x.col; j++)
{
printf("%f\t", x.tab[i][j]);
}
printf("\n");
}
}
tablica createMatrix(int row, int col){
tablica x;
x.col = col;
x.row = row;
float **tab3;
tab3 = calloc(4, sizeof(float *));
for (int i = 0; i < 4; i++)
{
tab3[i] = calloc(2, sizeof(float));
}
x.tab = tab3;
return x;
}
int main(int argc, char const *argv[])
{
tablica asd = createMatrix(4,2);
for (int i = 0; i < asd.row; i++)
{
for (int j = 0; j < asd.col; j++)
{
printf("podaj wartosc tab[%d][%d]", i, j);
float val;
scanf("%f", &val);
asd.tab[i][j] = val;
}
}
print_matrix(asd);
return 0;
}