referaty.sk – Všetko čo študent potrebuje
Klement
Sobota, 23. novembra 2024
Obojsmerná rotácia statického poľa
Dátum pridania: 20.11.2003 Oznámkuj: 12345
Autor referátu: super.feto
 
Jazyk: Slovenčina Počet slov: 1 017
Referát vhodný pre: Stredná odborná škola Počet A4: 2.7
Priemerná známka: 2.96 Rýchle čítanie: 4m 30s
Pomalé čítanie: 6m 45s
 

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 začiatok
pre j = 0; j < N; j++ opakuj
začiatok
výstup (matica[i][j]);
koniec
koniec
koniec
vstupmatice
začiatok
pre i = 0; i začiatok
pre i = 0; i začiatok
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.
 
späť späť   1  |  2  |   3   
 
Copyright © 1999-2019 News and Media Holding, a.s.
Všetky práva vyhradené. Publikovanie alebo šírenie obsahu je zakázané bez predchádzajúceho súhlasu.