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

Primjeri Polja Dvodim

Embed Size (px)

DESCRIPTION

dimenzionalna polja

Citation preview

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