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:
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ść.
#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;
}
#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;
}
#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;
}
/*
* Sprawdzenie czy dana macierz jest jednostkowa */
#include <stdio.h>
void main()
{
int a[10][10];
int i, j, row, column, flag = 1;
printf("Podaj rozmiar macierzy \n");
scanf("%d %d", &row, &column);
printf("Podaj elementy macierzy \n");
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
scanf("%d", &a[i][j]);
}
}
printf("MATRIX A is \n");
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
/* czy macierz jest jednostkowa ? */
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
if (a[i][j] != 1 && a[j][i] != 0)
{
flag = 0;
break;
}
}
}
if (flag == 1 )
printf("Macierz jest jednostkowa \n");
else
printf("Macierz nie jest jednostkowa \n");
}
/*
* C Program to Perform Matrix Multiplication using Recursion
*/
#include <stdio.h>
void multiply(int, int, int [][10], int, int, int [][10], int [][10]);
void display(int, int, int[][10]);
int main()
{
int a[10][10], b[10][10], c[10][10] = {0};
int m1, n1, m2, n2, i, j, k;
printf("Podaj liczbę wierszy i kolumn pierwszej macierzy: ");
scanf("%d%d", &m1, &n1);
printf("Podaj liczbę wierszy i kolumn drugiej macierzy: ");
scanf("%d%d", &m2, &n2);
if (n1 != m2)
{
printf("Podanych macierzy nie można mnożyć.\n");
}
else
{
printf("Podaj elementy macierzy A:\n");
for (i = 0; i < m1; i++)
for (j = 0; j < n1; j++)
{
scanf("%d", &a[i][j]);
}
printf("\n Podaj elementy macierzy B:\n");
for (i = 0; i < m2; i++)
for (j = 0; j < n2; j++)
{
scanf("%d", &b[i][j]);
}
multiply(m1, n1, a, m2, n2, b, c);
}
printf("Wynik mnożenia obu macierzy:\n");
display(m1, n2, c);
}
void multiply (int m1, int n1, int a[10][10], int m2, int n2, int b[10][10], int c[10][10])
{
static int i = 0, j = 0, k = 0;
if (i >= m1)
{
return;
}
else if (i < m1)
{
if (j < n2)
{
if (k < n1)
{
c[i][j] += a[i][k] * b[k][j];
k++;
multiply(m1, n1, a, m2, n2, b, c);
}
k = 0;
j++;
multiply(m1, n1, a, m2, n2, b, c);
}
j = 0;
i++;
multiply(m1, n1, a, m2, n2, b, c);
}
}
void display(int m1, int n2, int c[10][10])
{
int i, j;
for (i = 0; i < m1; i++)
{
for (j = 0; j < n2; j++)
{
printf("%d ", c[i][j]);
}
printf("\n");
}
}
(1 )Wygenerować wektor o n
elementach i sortować wg wielkości oraz (2) macierz w postaci:
Wygenerować (1) macierz jednostkową oraz (2) macierz w postaci jak poniżej
(1) Obliczyć sumę poszczególnych kolumn i wierszy w danej macierzy oraz (2) wygenerować macierz w postaci jak poniżej
(1) Obliczyć liczbę elementów parzystych i nieparzystych w danej macierzy oraz (2) wygenerować macierz w postaci jak poniżej