Upload
cedevita111
View
241
Download
0
Embed Size (px)
DESCRIPTION
dimenzionalna polja
PROGRAMIRANJE
Predavanja
dr. sc. Miroslav Slamić, prof. v. šk.
Vježbe
Mr. sc. Mirko Smilevski, pred.
Bojan Nožica, dipli. ing., predavač
Hrvoje Rončević, dipl. ing., asistent
Dvodimenzionalna polja
DVODIMENZIONALNO POLJE - MATRICA
3
BR_RED – broj redaka
BR_STUP – broj stupaca
Indeksiranje članova poljadvodimenzionalna polja
4
Dvodimenzionalno polje (tablica, matrica) npr. float y[M][N];
M – ukupan broj redaka
N – ukupan broj stupaca
redak 1y[0][0] y[0][1] y[0][2] y[0][N-2] y[0][N-1]
redak 2y[1][0] y[1][1] y[1][2] y[1][N-2] y[1][N-1]
. . .
redak my[M-1][0] y[M-1][1] y[M-1][2] y[M-1][N-2] y[M-1][N-1]
ZADATAK
Napiši program u kojem formiraj float polje A
dimenzija M x N (M i N ne smiju biti veći od
10), tako da su elementi polja jednaki aij = i*j.
Nakon toga pomnoţi s konstantom (zadaje se
između 1 do 20) koju ćeš učitati s tipkovnice
ako je ta konstanta veća ili jednaka 5 a manja od
10, odnosno podjeli svaki član polja s
konstantom ako je konstanta veća ili jednaka od
1 a manja od 5. U protivnom ništa ne radi s
elementima polja.
Ispiši rezultat.
RJEŠENJE#include "stdafx.h"
#include <stdio.h>
#define NMAX 10
int main(int argc, char* argv[])
{
float Ocjena = 5;
int A[NMAX][NMAX];
int M, N, KONST;
int temp;
int i, j,k ; /* indeksi polja */
do
{
printf("Upisi broj redaka M i broj stupaca M za kvadratno polje A (manji ili
jednak 10:\n");
scanf("%d %d", &M, &N);
}while( (M<1||M>10) ||(N<1||N>10) );
/*petlja za upis polja A*/
printf("Upisi polje A:\n");
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
A[i][j]=i*j;
}
}
printf("Upisi konstantu između 1 i 20\n");
scanf("%d", &KONST);
/*petlja za rad s konstatnom*/
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
if(KONST>=1 && KONST <5)
A[i][j]=A[i][j]/KONST;
else if (KONST>=5 && KONST <10)
A[i][j]=A[i][j]*KONST;
}
}
/*petlja za ispis*/
printf("Polje A nakon operacije mnoţenja/djeljenja:\n");
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}
ZADATAK 2 ZA SAMOSTALNI RAD
Napišite program koja će ulaznu cjelobrojnu kvadratnu matricu
proizvoljnih dimenzija promijeniti na način da na glavnu dijagonalu
upiše sumu svih ostalih elemenata iz tog retka matrice.
Primjer:
1610143
1211109
8765
4321
će se promijeniti u:
2110143
1231109
87205
4329
PRIMJER
Učitaj kvadratnu matricu A dimenzija 5 x
5 elemenata. Zatim u toj matrici zamjeni
sve elemente polja zrcalno s obzirom na
glavnu dijagonalu.
RJEŠENJE
// zamjena elemenata matrice zrcalno
//
#include "stdafx.h"
#include <stdio.h>
#define NMAX 10
int main(int argc, char* argv[])
{
int A[NMAX][NMAX]; /* definicija i deklaracija kvadratne matrice na max 10 x 10 elemenata */
int M, N, K, P;
int temp;
int i, j,k ; /* indeksi polja */
do
{
printf("Upisi broj redaka M i broj stupaca N za kvadratno polje
A (manji ili jednak 10:\n");
scanf("%d %d", &M, &N);
/* Ako nije zadana kvadratna matrica M=N , ponovi */
if(N != M)
{
printf("Broj stupaca N polja A, mora biti jednak broju
redaka M polja A\n");
continue;
}
}while( (M<1||M>20) ||(N<1||N>10) ); /* petlja se vrti tako dugo
dok se ne zadaju dimenzije veće od 1 a manje od 20 */
/*petlja za upis polja A - upisuje se element po element po retcima*/
printf("Upisi polje A:\n");
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
scanf("%d", &A[i][j]);
}
}
/*petlja za ispis polja A prije zamjene*/
printf("Polje A prije zamjene elemenata je:\n");
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}
/*petlja za zamjenu elemenata zrcalno u odnosu na glavnu dijagonalu*/
for(i=0; i < M;i++)
{
for(j=i+1;j<N; j++) /* u svakom retku započinjemo petlju
po stupcima od i + 1 stupca */
{
temp=A[i][j];
A[i][j]=A[j][i];
A[j][i]=temp;
}
/*petlja za ispis*/
printf("Polje A nakon zamjene elemenata je:\n");
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
printf("%d ", A[i][j]);
}
printf("\n");
}
getchar(); /*program čeka dok se ne pritisne bilo koji znak*/
return 0;
}
MNOŢENJE MATRICA
Za mnoţenje dviju matrica potrebno je
ispunjenje uvjeta:
◦ Broj redaka prve matrice mora biti jednak
broju stupaca druge matrice (npr. matrica 2 x
3 i matrica 3 x 2 rezultirati će matricom 2 x 2
◦ Formula za mnoţenje glasi:
◦ Napisati program za mnoţenje dvije matrice
17
PRIMJER
#include "stdafx.h"
#include <stdio.h>
#define NMAX 20
int main(int argc, char* argv[])
{
int A[NMAX][NMAX], B[NMAX][NMAX],
C[NMAX][NMAX];
int M, N, K, P;
int i, j,k ; /* indeksi polja */
18
RJEŠENJEdo
{
printf("Upisi broj redaka M i broj stupaca N za polje A (manji od 20:\n");
scanf("%d %d", &M, &N);
printf("Upisi broj redaka K i broj stupaca P za polje B(manji od 20):\n");
scanf("%d %d", &K, &P);
if(N != K)
{
printf("Broj stupaca N polja A, mora biti jednak broju redaka K
polja B\n");
continue;
}
}while( (M<1||M>20) ||(N<1||N>20) ||(K<1||K>20) ||(P<1||P>20) );
19
/*petlja za upis polja A*/
printf("Upisi polje A:\n");
for(i=0; i < M;i++)
{
for(j=0;j<N; j++)
{
scanf("%d", &A[i][j]);
}
}
printf("Upisi polje B:\n");
for(i=0; i < K;i++)
{
for(j=0;j<P; j++)
{
scanf("%d", &B[i][j]);
}
}
20
/*petlja za mnoţenje*/
for(i=0; i < M;i++)
{
for(k=0; k < P;k++)
{
C[i][k]=0;
for(j=0;j<N; j++)
{
C[i][k] += A[i][j]*B[j][k];
}
}
}
21