Zadania 02 11 2015

Macierze wielowymiarowe

Wykład

Wstęp

Deklaracja tablicy dwuwymiarowej (macierzy) wymaga podania liczby wierszy i liczby kolumn, z których będzie składała się tablica.

Powyższa deklaracja definiuje tablicę dwunastu elementów typu float, składającą się z trzech wierszy i czterech kolumn (Rys. 1).

Odwołując się do elementów tablicy dwuwymiarowej musimy podać dwa indeksy: numer wiersza i numer kolumny, na przecięciu których znajduje się dany element. Zapisanie wartości do tablicy:

Inicjalizacja

Po zadeklarowaniu tablicy, wartość jej elementów jest nieokreślona. Inicjalizacja polega na umieszczeniu w deklaracji po znaku równości, ujętej w nawiasy klamrowe, listy wartości kolejnych jej elementów. Poszczególne elementy tablicy umieszczone są w nawiasach klamrowych i oddzielone od siebie przecinkami. Deklaracja:

powoduje wypełnienie tablicy w następujący sposób:

Poszczególne wiersze tablicy wyróżnione są nawiasami klamrowymi. Nawiasy te można pominąć.

Druga postać inicjalizacji pokazuje w jaki sposób są przechowywane tablice w pamięci komputera.

Jeśli wartości podanych w trakcie inicjalizacji jest mniej niż wynosi rozmiar tablicy, to pozostałe elementy tablicy wypełniane są zerami, np.


Inicjalizacja tablicy, w powiązaniu z wypełnianiem pominiętych elementów tablicy zerami, pozwala zapisać w bardzo prosty sposób wypełnienie całej tablicy wartością zero.

Podajemy wartość tylko pierwszego elementu tablicy (zero), zaś pozostałym elementom automatycznie zostanie także przypisana taka sama wartość.


Przykłady

Program 1 – suma dwóch macierzy

#include <stdio.h>

 

int main()

{

int m, n, c, d, first[10][10], second[10][10], sum[10][10];

 

printf("Wprowadzić liczbę wierszy i kolumn macierzy\n");

scanf("%d%d", &m, &n);

printf("Wprowadzić elementy pierwszej macierzy \n");

 

for (c = 0; c < m; c++)

for (d = 0; d < n; d++)

scanf("%d", &first[c][d]);

 

printf("Wprowadzić elementy drugiej macierzy \n");

 

for (c = 0; c < m; c++)

for (d = 0 ; d < n; d++)

scanf("%d", &second[c][d]);

 

printf("Suma obu macierzy:-\n");

 

for (c = 0; c < m; c++) {

for (d = 0 ; d < n; d++) {

sum[c][d] = first[c][d] + second[c][d];

printf("%d\t", sum[c][d]);

}

printf("\n");

}

 

return 0;

}



Program 2 – Mnożenie dwóch macierzy



#include <stdio.h>

 

int main()

{

int m, n, p, q, c, d, k, sum = 0;

int first[10][10], second[10][10], multiply[10][10];

 

printf("Podaj liczbę wierszy i kolumn pierwszej macierzy \n");

scanf("%d%d", &m, &n);

printf("Podaj elementy pierwszej macierzy \n");

 

for (c = 0; c < m; c++)

for (d = 0; d < n; d++)

scanf("%d", &first[c][d]);

 

printf("Wprowadzić liczbę wierszy i kolumn drugiej macierzy \n");

scanf("%d%d", &p, &q);

 

if (n != p)

printf("Podanych macierzy nie można mnożyć ze sobą\n");

else

{

printf("Podaj elementy drugiej macierzy \n");

 

for (c = 0; c < p; c++)

for (d = 0; d < q; d++)

scanf("%d", &second[c][d]);

 

for (c = 0; c < m; c++) {

for (d = 0; d < q; d++) {

for (k = 0; k < p; k++) {

sum = sum + first[c][k]*second[k][d];

}

 

multiply[c][d] = sum;

sum = 0;

}

}

 

printf("Wynik mnożenia obu macierzy:-\n");

 

for (c = 0; c < m; c++) {

for (d = 0; d < q; d++)

printf("%d\t", multiply[c][d]);

 

printf("\n");

}

}

 

return 0;

}


Program 3 - Transponowanie macierzy

#include <stdio.h>

 

int main()

{

int m, n, c, d, matrix[10][10], transpose[10][10];

 

printf("Podaj liczbę wierszy i kolumn macierzy \n");

scanf("%d%d", &m, &n);

 

printf("Podaj elementy macierzy \n");

 

for (c = 0; c < m; c++)

for(d = 0; d < n; d++)

scanf("%d",&matrix[c][d]);

 

for (c = 0; c < m; c++)

for( d = 0 ; d < n ; d++ )

transpose[d][c] = matrix[c][d];

 

printf("Macierz transponowana :-\n");

 

for (c = 0; c < n; c++) {

for (d = 0; d < m; d++)

printf("%d\t",transpose[c][d]);

printf("\n");

}

 

return 0;

}


Program 4 – Sprawdzenie czy macierz jest jednostkowa



  1. /*

  2.  * Sprawdzenie czy dana macierz jest jednostkowa */

  3. #include <stdio.h>

  4.  

  5. void main()

  6. {

  7. int a[10][10];

  8. int i, j, row, column, flag = 1;

  9.  

  10. printf("Podaj rozmiar macierzy \n");

  11. scanf("%d %d", &row, &column);

  12. printf("Podaj elementy macierzy \n");

  13. for (i = 0; i < row; i++)

  14. {

  15. for (j = 0; j < column; j++)

  16. {

  17. scanf("%d", &a[i][j]);

  18. }

  19. }

  20. printf("MATRIX A is \n");

  21. for (i = 0; i < row; i++)

  22. {

  23. for (j = 0; j < column; j++)

  24. {

  25. printf("%3d", a[i][j]);

  26. }

  27. printf("\n");

  28. }

  29. /* czy macierz jest jednostkowa ? */

  30. for (i = 0; i < row; i++)

  31. {

  32. for (j = 0; j < column; j++)

  33. {

  34. if (a[i][j] != 1 && a[j][i] != 0)

  35. {

  36. flag = 0;

  37. break;

  38. }

  39. }

  40. }

  41. if (flag == 1 )

  42. printf("Macierz jest jednostkowa \n");

  43. else

  44. printf("Macierz nie jest jednostkowa \n");

  45. }



Program 5 – mnożenie macierzy za pomocą metody rekursji



  1. /*

  2.  * C Program to Perform Matrix Multiplication using Recursion

  3.  */

  4. #include <stdio.h>

  5.  

  6. void multiply(int, int, int [][10], int, int, int [][10], int [][10]);

  7. void display(int, int, int[][10]);

  8.  

  9. int main()

  10. {

  11. int a[10][10], b[10][10], c[10][10] = {0};

  12. int m1, n1, m2, n2, i, j, k;

  13.  

  14. printf("Podaj liczbę wierszy i kolumn pierwszej macierzy: ");

  15. scanf("%d%d", &m1, &n1);

  16. printf("Podaj liczbę wierszy i kolumn drugiej macierzy: ");

  17. scanf("%d%d", &m2, &n2);

  18. if (n1 != m2)

  19. {

  20. printf("Podanych macierzy nie można mnożyć.\n");

  21. }

  22. else

  23. {

  24. printf("Podaj elementy macierzy A:\n");

  25. for (i = 0; i < m1; i++)

  26. for (j = 0; j < n1; j++)

  27. {

  28. scanf("%d", &a[i][j]);

  29. }

  30. printf("\n Podaj elementy macierzy B:\n");

  31. for (i = 0; i < m2; i++)

  32. for (j = 0; j < n2; j++)

  33. {

  34. scanf("%d", &b[i][j]);

  35. }

  36. multiply(m1, n1, a, m2, n2, b, c);

  37. }

  38. printf("Wynik mnożenia obu macierzy:\n");

  39. display(m1, n2, c);

  40. }

  41.  

  42. void multiply (int m1, int n1, int a[10][10], int m2, int n2, int b[10][10], int c[10][10])

  43. {

  44. static int i = 0, j = 0, k = 0;

  45.  

  46. if (i >= m1)

  47. {

  48. return;

  49. }

  50. else if (i < m1)

  51. {

  52. if (j < n2)

  53. {

  54. if (k < n1)

  55. {

  56. c[i][j] += a[i][k] * b[k][j];

  57. k++;

  58. multiply(m1, n1, a, m2, n2, b, c);

  59. }

  60. k = 0;

  61. j++;

  62. multiply(m1, n1, a, m2, n2, b, c);

  63. }

  64. j = 0;

  65. i++;

  66. multiply(m1, n1, a, m2, n2, b, c);

  67. }

  68. }

  69.  

  70. void display(int m1, int n2, int c[10][10])

  71. {

  72. int i, j;

  73.  

  74. for (i = 0; i < m1; i++)

  75. {

  76. for (j = 0; j < n2; j++)

  77. {

  78. printf("%d ", c[i][j]);

  79. }

  80. printf("\n");

  81. }

  82. }

Zadania

Zestawienie 1:

(1 )Wygenerować wektor o n elementach i sortować wg wielkości oraz (2) macierz w postaci:

Zestawienie 2:

Wygenerować (1) macierz jednostkową oraz (2) macierz w postaci jak poniżej



Zestawienie 3:

(1) Obliczyć sumę poszczególnych kolumn i wierszy w danej macierzy oraz (2) wygenerować macierz w postaci jak poniżej



Zestawienie 4:

(1) Obliczyć liczbę elementów parzystych i nieparzystych w danej macierzy oraz (2) wygenerować macierz w postaci jak poniżej




Wyszukiwarka

Podobne podstrony:
kodeks spółek handlowych 02,11,2015
02 11 podstawy statyki zadanie Nieznany (2)
02 11 podstawy statyki zadanie 11
pic 2015 02 11 092743
pic 2015 02 11 092808
pic 2015 02 11 092757
kodeks rodzinny i opiekuńczy 23,11,2015
Mikrobiologia zywności W 1  02 11
11 2015 Wydanie amerykanskie Newsweek
2014 03 02 11 42 15 01
PID 8 11 2015
Anatomia wykłady 11 2015
2014 03 02 11 45 08 01
prawo energetyczne 23,11,2015
TPL WYK 13 02 11?rozole
TPL WYK 14 02 11 Maści
ZADANIE A7(11), Studia, Politechnika
Zadanie 02 2008 05 20, MEiL, [NW 125] Podstawy konstrukcji maszyn II, Kolokwia
MATEMATYKA 02 11 a

więcej podobnych podstron