slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Увод у програмски језик C Предавање 3 Низови скаларних података PowerPoint Presentation
Download Presentation
Увод у програмски језик C Предавање 3 Низови скаларних података

Loading in 2 Seconds...

play fullscreen
1 / 78

Увод у програмски језик C Предавање 3 Низови скаларних података - PowerPoint PPT Presentation


  • 146 Views
  • Uploaded on

Увод у програмски језик C Предавање 3 Низови скаларних података. Електротехнички факултет у Источном Сарајеву. Садржај. Низови (табеле) Дефинисање низова Иницијализација низова Приступање елементима низова. Увод . Типови података који су до сада разматрани су основни: int long int

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Увод у програмски језик C Предавање 3 Низови скаларних података' - odetta


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Увод у програмски језик C

Предавање3

Низови скаларних података

Електротехнички факултет у Источном Сарајеву

slide2
Садржај

Низови (табеле)

  • Дефинисање низова
  • Иницијализација низова
  • Приступање елементима низова
slide3
Увод
  • Типови података који су до сада разматрани су основни:
    • int
    • long int
    • double
    • ...
  • Зову се основни, јер променљиве садрже једну вредност
  • Променљиве сложеног типа могу садржати више од једне вредности
slide4
Сложени типови података

C располаже и типовима података који су описани са више вредности-нескаларни:

strukture

unije

Скаларни и нескаларни подаци у језику C могу бити организовани у групе које се чувају у меморији под једним именом која се зову поља-array (индексиране променљиве):

једнодимензионално = НИЗ,

дводимензионално = МАТРИЦА,

вишедимензионално

slide5
Увод
  • Обрада информација за 20, 200 или 2000 студената
  • Може се дефинисати 20, 200 или 2000 променљивих

int st1, st2, st3, st4, st5, … st2000;

st1 = 0; st2 = 0; …; st2000 = 0;

  • То је много напоран посао...
  • Да ли може да се користити индексирање:

sti- примена индекса iза приступ сваком податку

  • Тада би иницијализација и обрада била у два реда

for (i=0; i < 2000; i++)

      • sti = 0; /* za 20 000 studenata bi
      • samo promenili
      • jedan broj */
slide6
Низови (Аrray)
  • Синоними: Табеле, Поља, Матрице...
  • Елементи, чланови низа могу бити описани једном вредношћу (скаларни) или су сложени тип податка-описани са више вредности
  • Служе и за представљање више-димензионалних података - матрица (вектора),
  • СВИ ПОДАЦИ У НИЗУ ИМАЈУ ИСТИ ТИП
slide7
Низови
  • Податак унутар низа се назива Елемент низа
  • Сваки елемент низа има свој редни број, преко кога се идентификује
  • Ти редни бројеви се називају индексима.
  • Индекс почиње од нуле (не од јединице!)
slide8
Поља података

niz[0]

niz[1]

niz[2]

niz[3]

niz[4]

niz[5]

niz[6]

niz[7]

МЕМОРИЈА

Једнодимензионална поља-низови, вектори

Низ или вектор је једнодимензионално поље

То је скуп података истог типа

У меморији се смешта у скуп узастопних локација

Сви подаци у низу имају једно име = ИМР НИЗА

Име низа представља почетну адресу низа у меморији

Сваки елемент низа одређен је:

именом низа, и

индексом (померај у односу на почетак низа)

slide9
Дефинисање низова

tip ime_niza [duzina][duzina]... [duzina]

  • tipбило који тип који је до сада коришћен
  • ime_nizaу складу са правилима за идентификаторе
  • duzinaпредставља број елемената низа (цео позитиван број)

float Plate[10]; /* 10 elemenata*/

intА[10][5]; /* 10x5 elemenata*/

slide11
Иницијализација низова

Tip Ime[Duzina] =

{vrednost0, vrednost1,…,vrednostDuzina-1};

  • vrednost0иницијализујеIme[0],vrednost1иницијализујеIme[1], итд.
  • vrednostмора бити одговарајућег типа, иначе ће доћи до аутоматске конверзије типова
slide12
Декларација низа

A[0]

A[2]

A[1]

1

3

2

B[0]

B[2]

B[3]

B[1]

1

3

4

2

C[0]

C[2]

C[3]

C[4]

C[1]

10

0

0

0

0

D[0]

D[2]

D[3]

D[4]

D[1]

0

0

0

0

0

Примеридекларацијеса иницијализацијом:

int A[3]={1,2,3};

intB[]={1,2,3,4};

int C[5]={10};

int D[5]={0};

slide13
Примери иницијализације

int tablica [4]={3, 5, 7, 9};

longa1[6]={3, 5, 7, 9, 0, 0};

int NumDays1[12] = { 31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31 };

/* Jan je 0, Feb je 1, ... */

int NumDays2[13] = { 0, 31, 28, 31,

30, 31, 30, 31, 31, 30, 31, 30,31 };

/* Jan je 1, Feb je 2, */

slide14
Примери иницијализације
  • Ако се наведе почетна вредност,duzinaможе да се изостави приликом дефинисања низа. Број вредности одређује дужину низа

int tablica [ ]={3, 5, 7, 9};

slide15
Примери иницијализације
  • Ако у дефиницији постоји дужина, број наведених вредности за иницијализацију не сме да буде већи од броја елемената низа!

int tablica [3]={3, 5, 7, 9};

/*Greska! Posedice....*/

slide16
Примери иницијализације
  • Ако је број вредности које се додељују мањи од димензија низа оне се дoдељују елементима на почетку низа а остале ће имати вредност нула.

int tablica [5]={3, 5, 7, 0, 0};

је исто што и

int tablica [5]={3, 5, 7};

slide17
Низови-рекапитулација

Тип низа

(тип података у низу)

Вредност елемената у низу

(иницијализација низа)

(иницијализовање није обавезно)

(вредности се раздвајају запетама)

Име низа

(идентификаторнаписан у складу са синтаксом језика С, важе сва правила као и за скаларне променљиве)

Број елемената у низу

(целобројна константа)

(резервише се потребан број најтова за складиштењедекларисаног броја елемената низа)

Декларација низа

Општи облик декларације низа

tip ime_niza [broj_elemenata] = {lista vrednosti}

slide18
Декларација низа

tekst

10*1B = 10B

tekst[1]

tekst[0]

tekst[9]

niz[4]

niz[3]

niz

niz[2]

5*2B = 10B

niz[1]

niz[0]

MEMORIJA

Пример декларације:

int niz[5];

chartekst[10];

Пример декларације:

#define MAX 5

#define LEN 10

main()

{

intniz[MAX];

chartekst[LEN];

...

}

slide19
Приступање елементима низа
  • Елементи низа се идентификују помоћу редног броја који се назива индекс.
  • Ако је дужина низа дефинисана преко вредности duzina онда индекс низа може имати вредност од0доduzina-1
slide20
Приступање елементима низа

int main()

{

int i, tablica[4]={3, 5, 7, 9};

...

slide21
int main()

{

int i, tablica[4]={3, 5, 7, 9};

i = tablica[1];

slide22
int main()

{

int i, tablica[4]={3, 5, 7, 9};

i = tablica[1];

tablica [0]=i+1;

...

}

slide23
int main()

{

int i, tablica[4]={3, 5, 7, 9};

i = tablica[1];

tablica [0]=i+1;

tablica [i-3]=88;

...

}

slide24
Структураниза

S0

S1

S2

S3

S4

S5

S6

S7

S8

S9

  • int s[10];премаint s0,s1,...s9

s

slide26
Вежба
  • Са декларацијом:

float Sales[10];

x = 1;

  • Шта је резултат наредби:
      • Sales[5] = 123.45;
      • Sales[x] = 100.50;
      • Sales[x + 5] = 20.31;
      • Sales[x + 5] = 3.46;
  • Прикажите вредност низа
slide27
Грешке

float Sales[10];

Неправилно додељивање вредности:

Sales = 17.50; /* недостаје индекс */

Sales[-1] = 17.50; /* индекс ван опсега */

Sales[10] = 17.50; /* индекс ван опсега */

Sales[7.0] = 17.50; /* тип индекса */

Sales[’a’] = 17.50;/* тип индекса */

Sales[7] = ’A’; /* тип подaтка */

Аутоматска конверзија:

Sales[7] = 17; /* 17.00, float тип*/

slide28
Додела вредности ...

int niz[10];

int i;

...

for(i = 0;i < 10;i++)

{

niz[i]=5;

}

...

slide29
Додела вредности ...

int mat[4][3];

int i,j;

...

for( i = 0; i < 4; i++ )

{

for( j = 0; j < 3; j++ )

{

mat[i][j]=5 ;

}

}

...

slide30
При индексирању низа може се користити било који израз, који као резултат даје цео број

[] je оператор, прво израчуна израз а потом тражи ту локацију у низу

Код примене израза мора се проверавати вредност пре употребе:

if ((brojE >= 0) && (brojE <= 9))

Zarada[brојЕ] = iznosS;

else

/* Problem ... */

slide31
Стил
  • Дефинишите константу за дужину низа:

#define MAXDUZ 10

  • Користите константу у декларацији низа:

float Plata[MAXDUZ];

  • Користите ту константу у петљама:

for (i = 0;i < MAXDUZ;i++)

Plata[i]=5345;

  • Ако треба да се MAXDUZпромени, онда то радите само на једном месту у програму
slide32
#define RADNICI 4

float Plate[RADNICI] = {117.0, 129.95, 276.22, 201.10};

float zbir; int i;

zbir = 0.0;

for(i = 0; i < RADNICI; i++)

zbir += Plate[i];

printf(“Za isplatu: %.2f\n", zbir);

Plate

117.00 Plate[0]

129.95 Plate[1]

276.22 Plate[2]

201.10 Plate[3]

Пример 1 Збир елемената низа

Za isplatu:724.47

slide33
Пример2 Максимална вредност низа

#define RADNICI 4

float Plate[RADNICI] = {117.0, 129.95, 201.10, 276.22};

float maxP

int i;

maxP = Plate[0];

for (i = 1; i < RADNICI; i++)

{

if (Plate[i] > maxP)

maxP = Plate[i];

}

slide34
Пример3 Минимална вредност низа

#define RADNICI 4

float Plate[RADNICI] = {117.0, 129.95, 201.10, 276.22};

float minP

int i;

minP = Plate[0];

for (i = 1; i < RADNICI; i++)

{

if (Plate[i] < minP)

minP = Plate[i];

}

slide35
Пример4 Испис вредности низа

#define RADNICI 4

float Plate[RADNICI] = {117.0, 129.95, 201.10, 276.22};

int i;

printf(“Radnik broj Zarada\n”);

printf(“--------------------\n”);

for (i= 0; i < RADNICI; i++)

printf(“%4d%17.2f\n”, i, Plate[i]);

slide36
Пример5

n < 1

LAŽ

n

i = 1, n

ISTINA

niz[i-1]

POČETAK

i = 0, n-1

niz[i]

KRAJ

Учитати низ одnцелих бројева, а затим их исписати у једном реду истим редоследом којим су учитани.

#include <stdio.h>

#define MAX 100

main()

{

int niz[MAX];

int i,n;

do

{ printf(”n=”); scanf(”%d”, &n); }

while (n<1);

for (i=1 ; i<=n ; i++)

{ printf(”Unesite %d. broj:”);

scanf(”%d”, &niz[i-1]); }

printf(”Uneli ste: ”);

for (i=0 ; i<n ; i++)

printf(” %d, ”, niz[i]);

}

slide37
Пример6

n < 1

LAŽ

n

i = 1, n

ISTINA

niz[i-1]

POČETAK

i = n, 1

niz[i-1]

KRAJ

Учитати низ одnцелих бројева, а затим их исписати у једном реду обрнутим редоследом од оног којим су учитани.

#include <stdio.h>

#define MAX 100

main()

{

int niz[MAX];

int i,n;

do

{ printf(”n=”); scanf(”%d”, &n); }

while (n<1);

for (i=1 ; i<=n ; i++)

{ printf(”Unesite %d. broj:”);

scanf(”%d”, &niz[i-1]); }

printf(”Uneli ste: ”);

for (i=n ; i>=1 ; i--)

printf(” %d, ”, niz[i-1]);

}

slide38
Пример7

n < 1

T

LAŽ

n

as = s/n

ISTINA

i = 0, n-1

s = 0

POČETAK

ISTINA

LAŽ

niz[i]>as

i = 0, n-1

niz[i]

niz[i]

s = s + niz[i]

T

KRAJ

Учитати низ одnцелих бројева, а затим израчунати исписати њихову аритметичку средину, и оне бројеве који су већи од средње вредности.

#include <stdio.h>

#define MAX 100

main()

{

int niz[MAX];

int i,n,s=0;

float as;

do

{ printf(”n=”);

scanf(”%d”, &n); }

while (n<1);

for (i=0;i<=n-1;i++)

{ printf(”Unesite broj:”);

scanf(”%d”, &niz[i]);

s+=niz[i]; }

as=(float)s / n;

printf(”Sredina: %7.3f\n”,as);

printf(”Veci su: ”);

for (i=0 ; i<n ; i++)

if (niz[i]>as)

printf(” %d”, niz[i]);

}

slide39
Пример8

Учитати низ одnцелих бројева, а затим израчунати и исписати њихову аритметичку средину и онај елемент низа који јој је најближи.

#include <stdio.h>

#include <math.h>

#define MAX 100

main()

{ int niz[MAX], i, rb=0, n, s=0;

float as;

do

{ printf(”n=”); scanf(”%d”, &n); }

while (n<1);

for ( i=0; i<=n-1; i++ )

{ printf(”Unesite broj:”);scanf(”%d”, &niz[i]);

s+=niz[i]; }

as=(float)s / n;

for (i=1 ; i<n ; i++)

if ( fabs(niz[i]-as) < fabs(niz[rb]-as) ) rb=i;

printf(” Sredina je: %7.3f\n”, as);

printf(” Najblizi je %d. po redu\n”, rb+1);

printf(” To je broj: %d”, niz[rb]);

}

slide40
Пример9

Учитати низ A одnцелих бројева, затим формирати низ B, тако да је елемент biједнак највећој цифри елемента ai.

#include <stdio.h>

#define MAX 100

main()

{ int a[MAX], b[MAX], i, n, pom, c;

do

{ printf(”n=”); scanf(”%d”, &n); }

while ((n<1) || (n>MAX));

for ( i=0; i<=n-1; i++ )

{ printf(”Unesite broj:”);scanf(”%d”, &a[i]); }

for (i=0 ; i<n ; i++)

{ b[i]=0; pom=a[i];

do

{ c=pom%10; pom/=10; if (c>b[i]) b[i]=c; }

while (pom);

}

printf(”\n A:”); for (i=0 ; i<n ; i++) printf(” %d”, a[i]);

printf(”\n B:”); for (i=0 ; i<n ; i++) printf(” %d”, b[i]);

}

slide41
Пример10 анализа

Учитати коефицијенте два полиномаAиB, степенаmиn, респективно, (m , n < 10), а затим израчунава и исписује производ та два полинома.

Polinom A:

Am(x) = amxm + am-1xm-1 +...+ a1x + a0

Polinom B:

Bn(x) = bnxn + bn-1xn-1 +...+ b1x + b0

Množenje dva monoma:

aixi * bjxj = ai*bjxi+j

Proizvod polinoma A i polinoma B:

Cm+n(x) = cm+nxm+n + cm+n-1xm+n-1 +...+ c1x + c0

slide42
Пример10

Учитати коефицијенте два полиномаAиB, степенаmиn, респективно, (m , n < 10), а затим израчунава и исписује производ та два полинома.

#include <stdio.h>

#define MAX 10

main()

{ int a[MAX], b[MAX], c[2*MAX]={0};

int i,j,m,n;

printf(”Polinom A:\n”);

do

{

printf(”Stepen polinoma A (m) je:”);

scanf(”%d”, &m);

}

while ((m<0) || (m>=MAX));

for ( i=m; i>=0; i-- )

{

printf(”Unesite koeficijent a%d: ”,i);

scanf(”%d”, &a[i]);

}

slide43
Пример 10

printf(”Polinom B:\n”);

do

{

printf(”Stepen polinoma B (n) je:”);

scanf(”%d”, &n);

}

while ((n<0) || (n>=MAX));

for ( i=n; i>=0; i-- )

{

printf(”Unesite koeficijent b%d: ”,i);

scanf(”%d”, &b[i]);

}

for ( i=0; i<=m; i++ )

for ( j=0; j<=n; j++ )

c[i+j] += a[i] * b[j];

printf(”Proizvod:\n”);

for ( i=m+n; i>=0; i-- )

printf(” %da%d ”, c[i], i);

}

slide44
Пример 11

f[9]

f[9]

f[9]

f[9]

f[9]

f[7]

f[7]

f[7]

f[7]

f[7]

f[5]

f[5]

f[5]

f[5]

f[5]

f[8]

f[8]

f[8]

f[8]

f[8]

f[6]

f[6]

f[6]

f[6]

f[6]

f[4]

f[4]

f[4]

f[4]

f[4]

f[2]

f[2]

f[2]

f[2]

f[2]

f[0]

f[0]

f[0]

f[0]

f[0]

f[3]

f[3]

f[3]

f[3]

f[3]

f[1]

f[1]

f[1]

f[1]

f[1]

0

0

0

0

0

0

0

0

1

0

0

2

0

2

0

4

0

6

2

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1!=

3!=

4!=

2!=

5!=

Учитати природан бројn (n<100), а затим исписатиn!

Напомена:

Стандардни прости типови (int, long) омогућавају највише 12!=479001600

Решење проблема?

Проблем ”великих бројева” решава се тако што се они посматрају као низ цифара!!!

slide45
Пример 11

Учитати природан бројn (n<100), а затим исписатиn!

#include <stdio.h>

#define MAXCIF 1000

main()

{ int f[MAXCIF]={1};

int i,j,n, pom, prenos;

do

{ printf(”n=”); scanf(”%d”, &n); }

while ((n<1) || (n>100));

for ( i=2; i<=n; i++ )

for ( j=0, prenos=0; j<MAXCIF; j++ )

{

pom = f[j]*i + prenos;

f[j] = pom % 10;

prenos = pom / 10;

}

printf(”%d!=”,n);

for ( j=MAXCIF-1; f[j]==0; j-- ); /* preskace vodece nule */

for (; j>=0; j-- )

printf(”%d”,f[j]); /* ispisuje cifre */

}

slide46
Пример 12

Учитати низ целих бројева, а затим га спртирати и исписати у растућем редоследу.

Sortiranje niza:

Sortiranje je postupak kojim se menja poredak elemenata u nizu, kako bi se podaci doveli u željeni redosled:

rastući (ascending)

opadajući (descending)

Rešenje problema?

Postoji velik broj algoritama za sortiranje

Najpopularniji algoritmi za sortiranje:

select-sort

bubble-sort

quick-sort

shell-sort

stack-sort

...

slide47
Пример 12

a[0]

a[2]

a[4]

a[1]

a[3]

7

2

6

3

2

Polazni niz

1. Prolaz: sređivanje prve pozicije (niz[0])

2<7

2<2

6<2

3<2

???

0

1

1

1

1

indeks podobnog elementa

2. Prolaz: sređivanje druge pozicije (niz[1])

a[0]

a[2]

a[4]

a[1]

a[3]

6<7

3<6

2<3

2

???

2

7

6

3

2

Niz nakon 1. prolaza

1

2

3

4

indeks podobnog elementa

2

2

6

3

7

Niz nakon 2. prolaza

SELECT-SORT: uzastopni izbor (selekcija) odgovarajućeg elementa

slide48
Пример 7

a[0]

a[2]

a[4]

a[1]

a[3]

2

2

6

3

7

Niz nakon 2. prolaza

3. Prolaz: sređivanje treće pozicije (niz[2])

7<3

7<6

2

2

???

2

3

3

indeks podobnog elementa

2

2

3

6

7

Niz nakon 3. prolaza

4. Prolaz: sređivanje četvrte pozicije (niz[3])

2

2

3

???

3<6

3

indeks podobnog elementa

3

2

2

3

6

7

Niz nakon 4. prolaza

slide49
Пример 12

Учитати низ бројева, а затимга сортирати и исписати га у растућем редоследу.

#include <stdio.h>

#define MAX 100

main()

{ int niz[MAX];

int i,j,n, rb, pom;

do

{ printf(”n=”); scanf(”%d”, &n); }

while ((n<1) || (n>100));

for ( i=1; i<=n; i++ )

{ printf(”Unesite broj:”);scanf(”%d”, &niz[i-1]); }

for ( i=0; i<n-1; i++ )

{

for ( j=i+1, rb=i; j<n; j++ )

if (niz[j] < niz[rb]) rb=j;

if (rb!=i) { pom=niz[i]; niz[i]=niz[rb]; niz[rb]=pom; }

}

printf(”Sortirani niz:”);

for ( i=0; i<n; i++ ) printf(” %d”,niz[i]);

}

primer 12 1 c sortiranje svakog zadatog niza celih brojeva u neopadajuci poredak metod izbora
/primer12_1.c/ /Sortiranjesvakogzadatognizacelihbrojeva/ /uneopadajuciporedak, METODОМ IZBORA/

#include <stdio.h>

#define MAX 10

main()

{ int i, j, n, pom, niz[MAX];

while(1)

{ /Zadavanje duzine niza/

printf("\n\nUnesite broj elemenata niza n (n<=%d): ",MAX);

scanf("%d", &n);

if(n<1 || n>MAX)break;/prekid izvršenja programa/

/Zadavanje elemenata niza/

printf("Unesite celobrojne vrednosti elemenata niza: ");

for(i=0; i<n; i++)

scanf("%d", &niz[i]);

/Prikaz na ekranu originalnog niza/

printf("\nOriginalni niz:\t");

for(i=0; i<n; i++)

printf("%d ",niz[i]);

primer 12 2 c sortiranje svakog zadatog niza celih brojeva u neopadajuci poredak metod izbora
primer12_2.c/ /Sortiranjesvakogzadatognizacelihbrojeva/ /uneopadajuciporedak, METODОМ IZBORA/

/Sortiranje niza u neopadajuci poredak/

for(i=0; i<n-1; i++)

for(j=i+1; j<n; j++)

if(niz[i] > niz[j])

{ pom = niz[i];

niz[i] = niz[j];

niz[j] = pom;

}

/Prikaz na ekranu sortiranog niza/

printf("\nSortirani niz:\t");

for(i=0; i<n; i++)

printf("%d ",niz[i]);

}

}

primer 13 1 c sortiranje svakog zadatog niza celih brojeva u neopadajuci poredak metod umetanja
/primer13_1.c/ /Sortiranjesvakogzadatognizacelihbrojeva/ /uneopadajuciporedak, METODОМ UMETANJA/

#include <stdio.h>

#include <stdlib.h>

#define MAX 10

main()

{ int i, j, pom, niz[MAX];

/Prikaz na ekranu originalnog niza/

printf("\nOriginalni niz:\t");

for(i=0; i<MAX; i++)

printf("%d ", niz[i]= rand( )/((double)RAND_MAX+1)10);

/Sortiranje niza u neopadajuci poredak/

primer 13 2 c sortiranje svakog zadatog niza celih brojeva u neopadajuci poredak metod umetanja
/primer13_2.c/ /Sortiranjesvakogzadatognizacelihbrojeva/ /uneopadajuciporedak, METODОМ UMETANJA/

/Sortiranje niza u neopadajuci poredak/

for(i=1; i<MAX; i++)

{ pom = niz[i];

for(j=i-1; j>=0; j--)

if(niz[j] > pom)

niz[j+1] = niz[j];

else

break;

niz[j+1] = pom;

}

/Prikaz na ekranu sortiranog niza/

printf("\nSortirani niz:\t");

for(i=0; i<MAX; i++)

printf("%d ",niz[i]);

printf("\n\n");

}

primer1 4 c prikaz na ekranu vrednosti elemenata zadatog niza bez ponavljanja
/primer14.c//Prikaznaekranuvrednostielemenatazadatogniza, bezponavljanja/

#include <stdio.h>

#define MAX 10

main()

{ int i, j, nadjeni_isti;

float niz[MAX];

printf("\n\nUnesite %d realnih brojeva:\n\n",MAX); /Zadavanje niza/

for(i=0; i<MAX; i++)

scanf("%f", &niz[i]);

printf("\nElementi zadatog niza, bez ponavljanja:\n\n");/Prikaz elemenata niza bez ponavljanja/

for(i=0; i<MAX-1; i++)

{ nadjeni_isti=0;

for(j=i+1; j<MAX; j++)

if(niz[i]==niz[j])

{ nadjeni_isti=1;

break;

}

if(!nadjeni_isti)

printf("%f ", niz[i]);

}

printf("%f\n\n", niz[MAX-1]);

}

primer1 5 1 c pretrazivanje zadatog niza celih brojeva metodom linearnog pretrazivanja
/primer15_1.c/ /Pretrazivanje zadatog niza celih brojeva,/ /METODOM LINEARNOG PRETRAZIVANJA/

#include <stdio.h>

#define MAX 10

main()

{ int i, n, niz[MAX], broj, nadjen;

while(1)

{

/Zadavanje duzine niza/

printf("\n\nUnesite broj elemenata niza n (n<=%d): ",MAX);

scanf("%d", &n);

if(n<1 || n>MAX)

break;

/Zadavanje elemenata niza/

printf("Unesite celobrojne vrednosti elemenata niza: ");

for(i=0; i<n; i++)

scanf("%d", &niz[i]);

primer1 5 2 c pretrazivanje zadatog niza celih brojeva metodom linearnog pretrazivanja
/primer15_2.c/ /Pretrazivanje zadatog niza celih brojeva,/ /METODOM LINEARNOG PRETRAZIVANJA/

/Zadavanje trazene vrednosti/

printf("Unesite trazenu celobrojnu vrednost: ");

scanf("%d", &broj);

nadjen = 0;

/Pretrazivanje niza/

for(i=0; i<n; i++)

if(niz[i]==broj)

{ nadjen = 1;

printf("\nVrednost %d ima %d. element niza.",broj,i+1);

}

if(!nadjen)

printf("\nVrednost %d nije nadjena u nizu.",broj);

}

}

primer 1 6 1 c pretrazivanje zadatog niza celih brojeva metodom binarnog pretrazivanja
/primer16_1.c/ /Pretrazivanje zadatog niza celih brojeva,//METODOM BINARNOG PRETRAZIVANJA/

#include <stdio.h>

#define MAX 10

main()

{ int i, niz[MAX], broj, nadjen=0;

int i_min=0, i_max=MAX-1, i_srednji;

/Formiranje niza/

for(i=0; i<MAX; i++)

niz[i] = 2i;

/Prikaz na ekranu originalnog niza/

printf("\nOriginalni niz:\t");

for(i=0; i<MAX; i++)

printf("%d ",niz[i]);

/Zadavanje trazene vrednosti/

printf("\n\nUnesite trazenu celobrojnu vrednost: ");

scanf("%d", &broj);

primer 1 6 2 c pretrazivanje zadatog niza celih brojeva metodom binarnog pretrazivanja
/primer16_2.c/ /Pretrazivanje zadatog niza celih brojeva,//METODOM BINARNOG PRETRAZIVANJA/

/Pretrazivanje niza/

while(i_min <= i_max)

{ i_srednji = (i_min + i_max)/2;

if(broj == niz[i_srednji])

{ nadjen = 1;

printf("\nVrednost %d ima ",broj);

printf("\n%d. element niza.\n\n",i_srednji+1);

break;

}

else if(broj < niz[i_srednji])

i_max = i_srednji - 1;

else

i_min = i_srednji +1;

}

if(!nadjen)

printf("\nVrednost %d nije nadjena u nizu.\n\n",broj);

}

slide60
Дводимензионална поља-матрице

m-1

0

...

j

...

1

0

1

mat[1][0]

i

ред (врста)

n-1

колона

(стубац)

mat[i][j]

mat[n-1][m-1]

Елемент низа може да буде неки низ

Тако се добијају дводимензионални низ (матрица) и

вишедимензионални низови

slide61
Дводимензионална поља-матрице

Тип матрице

(тип података)

Вредности елемената у матрици

Иницијализација матрице

(није обавезна иницијализација)

Име матрице

Димензије матрице

D1 = број редова

D2 = број колона

Резервише се потребан број бајтова за меморисањеD1*D2 елемената

Декларација матрице

Општи облик декларације:

tip ime_mat [D1][D2] = { {L1},{L2},...,{Ln-1} }

slide62
Декларација матрице

tablica[1][2]

0

2

1

tablica[1][1]

0

tablica[1][0]

1

tablica[0][2]

tablica[0][1]

Логички изглед

tablica[0][0]

Физички изглед

МЕМОРИЈА

Напомена: матрице се у програмском језику С смештају по принципу ред по ред, дакле први елемент у меморији јеtablica[0][0]

следећи је tablica[0][1]

следећи је tablica[0][3]

следећи је tablica[1][0]

следећи је tablica[1][1] следећи је tablica[1][2] . . .

Пример декларације матрице знакова:

chartablica[2][3];

slide63
Дводимензионална поља-матрице

0

0

2

2

1

1

3

3

8

8

1

1

0

0

2

0

6

0

5

0

1

1

Декларација матрице

Пример декларације са иницијализацијом:

int mat[2][3] = { {3,1,8}, {2,5,6} };

Пример декларације са иницијализацијом:

int mat[2][3] = { {3,1,8}};

slide64
Дефинисање дводимензионалних низова

intА[10][5];

А00 А01 А02 А03 А04

А10 А11 А12 А13 А14

А20 А21 А22 А23 А24

...

А90 А91 А92 А93А94

slide65
Иницијализација
  • Више димензионални низови
  • Појединачне вредности треба да су и саме низови одговарајућих димензија

int mat2[3][2]={

{1,2},

{3,4},

{5,6}

};

int mat2[3][2]={{1,2},{3,4},{5,6}};

slide66
Иницијализација

int NumDays2[2][13] = {

{0,31,28,31,30,31,30,31,31,30,31, 30,31},

{0,31,29,31,30,31,30,31,31,30,31, 30,31}

};

short kvadratA[4][4]={

{0,1,2,0},{3,4,0,0},{5,6,7,8},{9,0,0,0}

};

short kvadratB[4][4]={

{0,1,2},{3,4},{5,6,7,8},{9}

};

slide67
Иницијализација

int kvA[4][4]={0,1,2,3,4,5,6,7,8,9};

int kvB[4][4]={

{0,1,2,3},{4,5,6,7},{8,9,0,0},{0,0,0,0}

};

slide68
Дводимензионална поља-матрице

Обрада матрица

Учитавање матрице:

for ( red=1; red<=n; red++ )

for ( kol=1; kol<=m; kol++ )

{

printf(”mat[%d][%d]=”,red-1,kol-1);

scanf(”%d”, &mat[red-1][kol-1]);

}

или:

for ( red=0; red<n; red++ )

for ( kol=0; kol<m; kol++ )

{

printf(”mat[%d][%d]=”,red,kol);

scanf(”%d”, &mat[red][kol]);

}

slide69
Дводимензионална поља-рад са матрицама

Исписивање садржаја матрице:

for ( red=1; red<=n; red++ )

{

for ( kol=1; kol<=m; kol++ )

printf(” %4d”,mat[red-1][kol-1]);

printf(”\n”);

}

или:

for ( red=0; red<n; red++ )

{

for ( kol=0; kol<m; kol++ )

printf(” %4d”,mat[red][kol]);

printf(”\n”);

}

slide70
Дводимензионална поља-рад са матрицама

mat[0][0]

mat[1][1]

mat[i][i]

mat[i][j], i=j

mat[n-1][n-1]

Обрада података на главној дијагонали:

Приказ елемената главне дијагонале:

printf(”Glavna dijagonala: ”);

for ( i=0; i<n; i++ ) printf(” %d”, mat[i][i]);

Сумаелемената главне дијагонале:

for ( s=i=0; i<n; i++ ) s+=mat[i][i];

printf(”Suma elemenata na GD: %d”,s);

slide71
Дводимензионална поља-рад са матрицама

mat[0][n-1]

mat[1][n-2]

...

mat[i][j],i+j=n-1

mat[n-1][0]

Рад са елементима на споредној дијагонали:

Исписелементима на споредној дијагонали:

printf(”Sporedna dijagonala: ”);

for ( i=n-1; i>=0; i-- ) printf(” %d”, mat[i][n-1-i]);

Сумаелементима на споредној дијагонали:

for ( s=i=0; i<n; i++ ) s+=mat[i][n-1-i];

printf(”Suma elemenata na SD: %d”,s);

slide72
Дводимензионална поља-рад са матрицама

mat[i][j],j<=i

Обрада елемената испод главне дијагонале:

Испис доње троугаоне матрице:

printf(”Donja trougaona matrica:\n ”);

for ( i=0; i<n; i++ )

{

for ( j=0; j<=i; j++ )

printf(” %4d”, mat[i][j]);

printf(”\n”);

}

slide73
Дводимензионална поља-рад са матрицама

mat[i][j],j>=i

Обрада горње троугаоне матрице:

Испис горње троугаоне матрице:

printf(”Gornja trougaona matrica:\n ”);

for ( i=0; i<n; i++ )

{

for ( j=1; j<=i; j++ ) printf(”%5c”,’ ’)

for ( j=i; j<n; j++ ) printf(” %4d”, mat[i][j]);

printf(”\n”);

}

slide74
Дводимензионална поља-матрице

3

7

1

2

1

4

4

5

6

2

5

8

9

9

7

8

3

6

Полазна матрице

Транспонована матрица

Транспоновање матрице

Испис транспоноване матрице на основу оригиналне матрице:

printf(”Transponovana:\n ”);

for ( i=0; i<n; i++ )

{

for ( j=0; j<n; j++ )

printf(” %4d”, mat[j][i]);

printf(”\n”);

}

Транспоновање :

for ( i=0; i<n; i++ )

for ( j=i+1; j<n; j++ )

{

pom=mat[i][j]);

mat[i][j]=mat[j][i];

mat[j][i]=pom;

}

slide75
Дводимензионална поља-матрице

3

3

1

1

2

2

???

9

5

???

24

17

4

4

5

2

6

1

4

3

???

2

0

1

7

0

1

Matrica A

(m*n)

Matrica B

(n*p)

Matrica C

(m*p)

Множење две матрице

30

66

*

15

Множење матрица:

for ( i=0; i<m; i++ ) /* red matrice C */

for ( j=0; j<p; j++ ) /* kolona matrice C */

for (c[i][j]=0,k=0; k<n; k++ )

c[i][j]+=a[i][k]*b[k][j];

slide76
Вишедимензионална поља

kocka[sloj][red][kolona]

C омогућава рад са вишедимензионалним пољима

Тродимензионално поље

tip ime[d1][d2][d3];

Пример декларације:

int kocka[3][6][6];

Пример 4-димензионалног поља:

char P4[d1][d2][d3][d4];

slide77
Дефинисање вишедимензионалних низова

intА[2][4][2];

А001А011А021А031

А000А010А020А030

А101А111А121А131

А100А110А120А130