primjeri polja dvodim

Post on 30-Jan-2016

241 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

dimenzionalna polja

TRANSCRIPT

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

top related