Funkcia na výpis prvkov matice funguje presne na rovnakom princípe, lenže už nenačítava, ale vypisuje príslušné prvky matice, ku ktorej bola funkcia vyvolaná.
Návrh
Pseudojazyk:
začiatok
Definícia konštanty MAX;
opakuj
začiatok
vstup (m);
koniec
pokiaľ 1 > m > MAX
opakuj
začiatok
vstup (n);
koniec
pokiaľ 1 > n > MAX
opakuj
začiatok
vstup (k);
koniec
pokiaľ -n > k > n
vstupmatice (A);
pre i = 0; i < m; i++ opakuj
začiatok
pre j = 0; j < n; j++ opakuj
začiatok
ak k > 0 potom
začiatok
ak (k + j) < n potom
začiatok
B[i][j + k] = A[i][j];
koniec
inak
začiatok
ak (k + j) >= n potom
B[i][(j + k) - n] = A[i][j];
koniec
koniec
ak k == 0 potom
začiatok
B[i][j] = A[i][j];
koniec
inak
začiatok
ak (k + j) >= 0 potom
B[i][j + k] = A[i][j];
B[i][k + j + n] = A[i][j];
koniec
koniec
koniec
ak k != 0 potom
začiatok
pre i = 0; i < m; i++ opakuj
začiatok
pre j = 0; j < n; j++ opakuj
začiatok
ak (A[i][j] % k) == 0 potom
začiatok
C[i][j] = 0;
koniec
inak
začiatok
C[i][j] = A[i][j];
koniec
koniec
koniec
koniec
vypismaticu (A);
vypismaticu (B);
ak k != 0 potom
vypismaticu (C);
koniec
vypismaticu
začiatok
pre i = 0; i
pre j = 0; j < N; j++ opakuj
začiatok
výstup (matica[i][j]);
koniec
koniec
koniec
vstupmatice
začiatok
pre i = 0; i
pre i = 0; i
vstup (matica[i][j]);
koniec
koniec
koniec
Zdrojový text programu
//Zadanie cislo: 2 & uloha cislo: 9
//==================================
#include
#include
//definicia konstanty
#define MAX 10
// prototyp vlastnej funkcie
void vypisMaticu(int matica[MAX][MAX], int M, int N);
void vstupmatice(int matica[MAX][MAX], int M, int N);
void main()
{
int i, j, n, m, k;
clrscr();
// staticke 2rozmerne polia (matice)
int A[MAX][MAX];
int B[MAX][MAX];
int C[MAX][MAX];
// nacitanie velkosti matice a cisla k
do
{
printf("M (rozmer matice) = ");
scanf("%d", &m);
}
while (m < 1 || m > MAX);
do
{
printf("N (rozmer matice) = ");
scanf("%d", &n);
}
while (n < 1 || n > MAX);
do
{
printf("zadaj cislo K = ");
scanf("%d", &k);
}
while (k < -n || k > n);
// vstup jednotlivych prvkov matice
printf("nPrvky matice A:n");
// volanie funkcie na vstup matice
vstupmatice(A, m, n);
// vypocet prvkov matice B
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if(k > 0)
{
//posun doprava
if ((k + j) < n)
{
B[i][j + k] = A[i][j];
}
else
{
if ((k + j) >= n)
B[i][(j + k) - n] = A[i][j];
}
}
if(k == 0)
{
B[i][j] = A[i][j];
}
else
{
//posun dolava
if((k + j) >= 0)
B[i][j + k] = A[i][j];
B[i][k + j + n] = A[i][j];
}
}
}
//vypocet prvkov matice C
if(k != 0)
{
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if ((A[i][j] % k) == 0)
{
C[i][j] = 0;
}
else
{
// ked k=0
C[i][j] = A[i][j];
}
}
}
}
// vypis matic
printf("nMatica A:n");
vypisMaticu(A, m, n);
printf("n===============n");
printf("nMatica B:n");
vypisMaticu(B, m, n);
printf("n===============n");
if(k != 0)
{
printf("nMatica C:n");
vypisMaticu(C, m, n);
}
getch();
}
// funkcia na vypis matice
void vypisMaticu(int matica[MAX][MAX], int M, int N)
{
int i, j;
for (i = 0; i
for (j = 0; j < N; j++)
{
printf(" %3d", matica[i][j]);
}
putchar('n');
}
}
//funkcia na nacitanie matice
void vstupmatice(int matica[MAX][MAX], int M, int N)
{
int i, j;
for (i = 0; i
for (j = 0; j < N; j++)
{
printf("matica[%d][%d] = ", i + 1, j + 1);
scanf("%3d", &matica[i][j]);
}
}
}
Testovanie
Pre veľký objem údajov asi nie je vhodné robiť trasovaciu tabuľku, nakoľko by asi zabrala minimálne tri strany. Preto som zvolil trosku jednoduchší zápis testovania a to na príklade.
M = 2, N = 5, k = 2
A
1 2 3 4 5
2 4 6 8 10
B
4 5 1 2 3
8 10 2 4 6
C
1 0 3 0 5
0 0 0 0 0
M = 3, N = 3, k = -1
A
1 2 3
4 5 6
7 8 9
B
2 3 1
5 6 4
8 9 7
C
0 0 0
0 0 0
0 0 0
Záver
Matematicky je takmer celý program rozanalyzovaný v časti Analýza. Čo sa týka zložitosti celkového riešenia programu, nepokladám ho za veľmi zložitý aj keď mi síce dal zabrať o niečo viac, ako prvé zadanie.
Vedel by som ho ešte troška vylepšiť a to napríklad tým, že by som kontroloval aj veľkosť vkladanej hodnoty do matice, pretože pole ako také máme deklarované v pamäti, ale ak zadám väčšiu hodnotu ako je hodnota, pre ktorú má pole v pamäti vyhradené miesto, nebude sa to pravdepodobne správať podľa našich očakávaní.
Program je v C plne funkčný podľa požiadaviek zadania. Sú v ňom použité dve funkcie a to na načítavanie a výpis matice.