primjeri polja dvodim

21
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

Upload: cedevita111

Post on 30-Jan-2016

241 views

Category:

Documents


0 download

DESCRIPTION

dimenzionalna polja

TRANSCRIPT

Page 1: Primjeri Polja Dvodim

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

Page 2: Primjeri Polja Dvodim

Dvodimenzionalna polja

Page 3: Primjeri Polja Dvodim

DVODIMENZIONALNO POLJE - MATRICA

3

BR_RED – broj redaka

BR_STUP – broj stupaca

Page 4: Primjeri Polja Dvodim

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]

Page 5: Primjeri Polja Dvodim

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.

Page 6: Primjeri Polja Dvodim

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) );

Page 7: Primjeri Polja Dvodim

/*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;

}

}

Page 8: Primjeri Polja Dvodim

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;

}

}

Page 9: Primjeri Polja Dvodim

/*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");

}

Page 10: Primjeri Polja Dvodim

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

Page 11: Primjeri Polja Dvodim

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.

Page 12: Primjeri Polja Dvodim

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 */

Page 13: Primjeri Polja Dvodim

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 */

Page 14: Primjeri Polja Dvodim

/*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]);

}

}

Page 15: Primjeri Polja Dvodim

/*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;

}

Page 16: Primjeri Polja Dvodim

/*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;

}

Page 17: Primjeri Polja Dvodim

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

Page 18: Primjeri Polja Dvodim

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

Page 19: Primjeri Polja Dvodim

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

Page 20: Primjeri Polja Dvodim

/*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

Page 21: Primjeri Polja Dvodim

/*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