Pokazivači

Svaki podatak u računarskom sistemu ima svoju memorijsku lokaciju. C++ omogučava preko promenljivih određenog tipa pristup podacima, pri čemu nije neophodno da se vodi računa o memorijskoj lokaciji gdegde se podatak nalazi.

Pokazivači su specijalni tipovi podataka koji omogućavaju rad sa memorijskim lokacijama. C++ definiše pokazivače tako što posle tipa pokazivača, ispred naziva stavlja * ( int *pokazivač). Ako želimo da saznamo koja je adresa definisanog pokazivača ispred naziva pokazivača se stavlja & (pr. &pokazivac).

Pr:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a = 5;
/* pokayivac ka podatku koji je po tip intedjer*/
int *b;
//b je adresa promenljive a („b pokayuje ka a“)
b = &a;
/*
double *k;
k = &a; //GRESKA: pogresen tip na pokazhuvac (double)
*/
cout << a << endl; //stampa ‘5’ (vrednosta promenljive a)
cout << b << endl; //stampa ‘0x27ff44’ (adresa memorijske lokacije a)
system(„PAUSE“);
return EXIT_SUCCESS;
}

pokazivac

Veoma često, kada se kreiraju pokazivači, potrebno je znati koja je vrednost promenljive ka kojoj pokazuje pokazivač. Sa znakom * pristupamo podatku koji se nalazi na odredjenoj memorijskoj lokaciji. Važno je da se zna da pristupom sa znakom * može vrednost memorijske lokacije da se promeni.

Pr.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a = 5; //promenliva ‘a’ ima vrednost 5
int *p; //pokazhuvac ka podatkom od tipa int

p = &a; //p ja adresa a („p pokazuje ka a“)

cout << a << endl; //stampa ‘5’
cout << *p << endl; //stampa ‘5’

*p = 3; //promena vrednosti

cout << p << endl; //stampa adresu
cout << *p << endl; //stampa ‘3’ (vrednost)
cout << a << endl; //stampa ‘3’
system(„PAUSE“);
return EXIT_SUCCESS;
}

pok2

Jedan pokazivač može se koristiti više puta pri čemu može  da pokazuje i ka različitim promenljivima i memorijskim lokacijama.

Veličina pokazivača zavisi od arhitekturu računarskog sistema, i operativnog sistema, 32 bitni računarski sistem koristi 32 bitne memorijske adrese, veličina pokazivača je 4 bajta.

Pr.

#include <iostream>
using namespace std;

struct typeX
{
int t1, t2, t3, t4;
double t5, t6, t7, t8;
};

int main()
{
int a = 5, b = 2;
double c = 3.8;
char d = ‘Z’;
typeX e;

int *pa = &a, *pb = &b;
double *pc = &c;
char *pd = &d;
typeX *pe = &e;

cout << sizeof(pa) << endl; //stampa ‘4’
cout << sizeof(pb) << endl; //stampa ‘4’
cout << sizeof(pc) << endl; //stampa ‘4’
cout << sizeof(pd) << endl; //stampa ‘4’
cout << sizeof(pe) << endl; //stampa ‘4’

system(„PAUSE“);
return EXIT_SUCCESS;
}

pok3

Niz i pokazivači

 

Dropbox

Рачунари и програмирање

Дропбокс – мој фаворит.
Дропбокс је мрежни сервис за синхронизацију датотека (фајлова) између више уређаја (истог корисника!): кућни рачунар, рачунар на послу, таблет, паметни телефон…
То је складиште на мрежи у које се пакују фајлови којима корисник може приступити са било ког места: или преко претраживача (фајерфокс, хром…) или преко инсталираног програма, који сам обавља синхронизацију! Подршка је одлична за све системе: линукс, виндовс, андроид…  Бесплатан је и нуди 2GB простора. Тај простор се може повећати до 5GB, позивањем пријатеља да користе дропбокс. Уз доплату од 9,99$ месечно добија се 1ТB!

View original post 680 more words

Primeri zadataka koji koriste cin i cout

Računari i programiranje

Pr1.

Napravi program koji unosi i izdaje brojeve?

Rešenje:
#include <iostream>
usingnamespacestd;
intmain()
{
inta, b;
cout << "Unesi dva broja: ";
cin >> a;
cin >> b;
cout << "a = "<< a << endl;
cout << "b = "<< b << endl;
intc, d;
cout << "unesi jos dva broja: ";
cin >> c >> d;
cout << "c = "<< c << endl;
cout << "d = "<< d << endl;
doublereal;
cout << "Unesi jedan decimalni broj: ";
cin >> real;
cout << "real = "<< real;
return0;
}
Pr2.
Napravi program koji izračunava srednju vrednost četiri broja i ispiši rezultat u sledećem obliku:
Unesi cetiri realna broja:
Srednja vrijednost brojeva …., …., …. i …. je ……?

 Rešenje:

#include<iostream>

using namespace std;

int main()

{

    float a,b,c,d,srvr;

    cout<<„Unesi…

View original post 84 more words

Učeniški projekti

Projekat 1. SRTONOGA

slika

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,r=30;
// crtam oko
for (x=75;x<80;x=x+1)
{
circle(x,210,10);
}
for (x=60;x<65;x=x+1)
{
circle(x,220,10);
}
line(60,240,80,240);
//crtam glava

circle(75, 220, 40);

// crtam trup
for (x=150;x<600;x=x+2*r)
{
for (r=5;r<40;r=r+5)
{

circle(x, 240,r+5);
}
}
// crtam antene
line (70, 180,40,120);
line (85, 180,120,120);
// crtam nozice
for (x=160; x<600;x=x+2*r)
{
line(x, 280,x+r, 280+5);
line(x, 280, x-r,280+15);
}
getch();
return EXIT_SUCCESS;
}

Projekat 2.  KAMIONČE

Kamionceslika

 

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;
int main()
{
//Pode[avanja grafi;kih parametara
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,“ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
rectangle(50,240,150,300);
rectangle(150,300,380,150);
rectangle(380,240,480,300);
moveto(150,240);
lineto(400,240);
circle(100,330,30);
circle(430,330,30);
moveto(50,240);
lineto(150,150);
line(150,195,100,195);
system(„PAUSE“);
return EXIT_SUCCESS;
}

Animacija

Animacija se može napraviti veoma jednostavno. Dovoljno je objekat koji je postavljen, pre ponovnog pozicioniranja obrisati.

Pr1. Napravite program koji crta pravougaonik od jedne do druge pozicije, pri čemu se y koordinata objekta ne menja?

Rešenje:

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,y;
for (x=50;x<600;x=x+1)
{
cleardevice();
rectangle(x, y,x+60,y+60);
}
getch();
return EXIT_SUCCESS;
}

Pr2. Napravite program koji omogućava kretanje kruga po različitim putanjama?

Rešenje:

a)

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,y;

for (y=10;y<400;y=y+30)
{
for (x=10;x<600;x=x+1)
{
cleardevice();
circle(x, y,20);
}
}
getch();
return EXIT_SUCCESS;
}

slika

Krug se kreće sleva prema desno kroz celog grahičkog ekrana.

b)

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,y;

for (x=10;x<600;x=x+30)
{
for (y=10;y<400;y=y+1)
{
cleardevice();
circle(x, y,x+10);
}
}
getch();
return EXIT_SUCCESS;
}

c)

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,y;

for (x=10;x<600;x=x+30)
cleardevice();
{

for (y=10;y<400;y=y+1)
{

circle(x, y,x);
}
}
getch();
return EXIT_SUCCESS;

d)

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,r;

for (x=30;x<610;x=x+60)
{
for (r=5;r<31;r=r+5)
{

delay(100);
// cleardevice();
circle(x, 24,r);
}

}
getch();
return EXIT_SUCCESS;
}

Krug koji menja poluprečnik,  kreće se sleva prema desno, pri čemu y koordinata je fiksna, menja se samo x; Evo kako izgleda slika kada ne bi brisali objekte

slika

Pr3.

a)  Animacija koja od donje pozicije ekrana kreće krug koji nakon dolaska do određenu poziciju menja poluprečnik?

Rešenje:

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,r;

for (x=465;x>100;x=x-1)
{
cleardevice();
circle(320, x,10);
}
for (r=10;r<91;r=r+1)
{

delay(100);
cleardevice();
circle(320, x,r);
}

getch();
return EXIT_SUCCESS;
}

Kada ne bi brisali predhodno nacrtani objekat dobili bi sliku slika

Pr4.   Napravite animaciju koja se dešava korišćenjem tastera a-levo, f -desno, c-gore, v-dole

Rešenje:

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x=290;
int y=220;
char odgovor=’d’;

while (odgovor!=’k’)
{
rectangle(x,y,x+60,y+5);
odgovor=getch();
if (odgovor==’a’)
{
x=x-5;
}
if (odgovor==’f’)
{
x=x+5;
}

if (odgovor==’v’)
{
y=y-5;
}
if (odgovor==’c’)
{
y=y+5;
}
//cleardevice();
}
closegraph();
return EXIT_SUCCESS;
}

Ukoliko se izbriše komanda za brisanje predhodnog objekta dobija se slika slika

ili ako početni objekat je krug, dobija se slika slika

 Pr5. Napravite program koji pomoću miša pomera objekat na grafičkom ekrenu?

Rešenje:

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,““);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
while (!kbhit())
{
rectangle(mousex(), mousey(), mousex()+50, mousey()+50);
}
closegraph();
return EXIT_SUCCESS;
}

slika

Napomena: Naredba kbhit() ispituje dali je neki taster tastature pritisnut. Znaši naredbom while(!kbhit()) objekat se pomera sve dok se ne pritisne bilo koji taster na tastaturi.

Grafika- zadaci

Pr 1.

Napravite program koji crta  slika - Copy?

Rešenje:

#include <iostream>
#include <stdlib.h>
#include <winbgim.h>

using namespace std;

int main(int argc, char *argv[])
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode, “ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int i,r=80;
int x=160, y=140;
for (i=1;i<=5;i++)
{
circle(x,y,r);
x=x+r;
}
getch();
closegraph();
system(„PAUSE“);
return 0;
}

Pr 2.

Napravite program koji crta slika

Rešenje:

#include <iostream>
#include <stdlib.h>
#include <winbgim.h>

using namespace std;

int main(int argc, char *argv[])
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode, “ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int i,r=60;
int x=320, y=60;
for (i=1;i<=5;i++)
{
circle(x,y,r);
y=y+2*r;
}
x=80,y=240, r=60;

for (i=1;i<=5;i++)
{
circle(x,y,r);
x=x+2*r;
}
getch();
closegraph();
system(„PAUSE“);
return 0;
}

Pr 3.

Napravite program koji crta slika - Copy

Rešenje:

#include <iostream>
#include <stdlib.h>
#include <winbgim.h>

using namespace std;

int main(int argc, char *argv[])
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode, “ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int i,r=60;
int x=60, y=60;
for (i=1;i<=5;i++)
{
circle(x,y,r);
y=y+85;
x=x+85;
}
getch();
closegraph();

system(„PAUSE“);
return 0;
}

Pr 4.

Napravi program koji prikazuje slika - Copy

Rešenje:

#include <iostream>
#include <stdlib.h>
#include <winbgim.h>

using namespace std;

int main(int argc, char *argv[])
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode, “ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,r=20;
for (x=20;x<475;x=x+15)
{
circle(x,240,r);
r=r+5;

}
getch();
closegraph();

system(„PAUSE“);
return 0;
}

Pr 5.  Napravite program koji izdaje slika

Rešenje:

#include <iostream>
#include <stdlib.h>
#include <winbgim.h>

using namespace std;

int main(int argc, char *argv[])
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode, “ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
int x,y=40,r=20;
for (x=20;x<275;x=x+15)
{
circle(x,y,r);
r=r+10;
y=y+10;

}
getch();
closegraph();

system(„PAUSE“);
return 0;
}

 

 

Crtanje linija

Linija se crta korišćenjem naredbu

line(x1, y1, x2, y2), gde je x1- x koordinata pošetne tačke duži, y1-y koordinata početne tačke duži

gde je x2- x koordinata pošetne tačke duži, y2-y koordinata početne tačke duži

 

pr.

line(160,100,480,380); Ako je gdriver=9 i gmode=2, veličina grafičkog prozora je 640x480piksela

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,“ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line(160,100,480,380);
getch();
return EXIT_SUCCESS;
}

slika

Pr 2.

Napravi program koji crta pravougli koordinatni Dekartov sistem?

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,“ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
line(100,240,540,240);
line(320,20,320,460);
getch();
return EXIT_SUCCESS;
}

slika

 

 

Osim naredbom line, linije se mogu crtati i pomoću naredbe moveto i lineto. Naredbom moveto određujese  početna tačka linije, a naredbom lineto, krajna tačka  linije.

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,“ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(100,40);
lineto(320,460);
getch();
return EXIT_SUCCESS;
}

slika

Pr. Napravite program koji crta dve linije različite boje?

#include <cstdlib>
#include <iostream>
#include <winbgim.h>
using namespace std;

int main()
{
int gdriver=9;
int gmode=2;
initgraph(&gdriver,&gmode,“ „);
setbkcolor(WHITE);
setcolor(BLACK);
cleardevice();
moveto(100,40);
lineto(320,460);
setbkcolor(WHITE);
setcolor(RED);
moveto(40,480);
lineto(320,60);
getch();
return EXIT_SUCCESS;
}

slika