Странице

уторак, 18. фебруар 2014.

Programiranje 109: Strukture

Možemo uyeti ya čoveka da ima nekoliko osobina. Recimo da su to ime, prezime, starost, visina i težina. Sad zamislite da imate deset ljudi u nekoj (većoj) sobi i vi treba da zapišite ovih pet informacija za svakog čoveka. Kako bi ste to radili na papiru? Sigurno ne bi ste u jednom redu napisali imena, u drugom prezimena, u trećem starost itd. Već bi ste napisali po grupama, prvo napišete sve informacije o jednoj osobi u prvom redu, zatim o drugu osobu u drugi red itd. Pa zašto ne bi smo to radili i u programiranju? Kada kažemo čovek koji ima ime, prezime itd. Prevod na programski jezik: struktura (ili objekat) koja sadrži (C++, nije u svakome isto):

struct Covek
{
int age,height,mass;
string first_name,last_name;
};

Sa ovim je mnogo lakše kontrolisati stvari. Često se koriste za baze podataka. Znate kako svako od onih polja u excelu može da ima različitu boju pozadine, slova, ivica... Eto jednog primera, a koristi se na mnogim mestima, recimo u igricam, vaš avatar može da ima život (hp), iskustvo (xp), level. Kada hoćemo da napravimo bazu podataka želimo da svaki novi objekat ima početne informacije, recimo kad dodamo jednog čoveka u bazi on počinje sa 0 godina, 0 visinu, razmak za ime i prezime. To se radi tako što se definišu funkcije u samoj strukturi. Za početne informacije ne treba da se kaže tip funkcije, već samo ime strukture.

Covek()
{
age=0;
height=0;
mass=0;
first_name=" ";
last_name=" ";
}

Kada smo napravili strukturu možemo je koristiti u programu. To radimo tako što prvo deklerišemo promenljivu koja je tipa naše strukture, recimo Covek p. Sada čovek p ima 0 godina, 0 visinu, 0 težinu, ime i prezime su mu razmaci. Da bi smo zadali vrednost nekom od tim parametara koristimo tačku ("."):

cin>>p.age>>p.height;
p.mass=p.height-100;
scanf("%s",p[i].first_name);
scanf("%s",p[i].last_name);

Zbog nepoznatih razloga, Microsoft Visual C++ 2010 Express ne dozvoljava upotrebu "cin>>" kada se unose stringovi iz struktura, zato ću koristiti scanf, nemojte da brinete kako se koristi pošto je to funkcija iz C-a (ne C++). Za ispis će se koristiti printf, što se koristi isto kao scanf. Izvinite što bi to trebalo da pamtite, ali nisam ja pravio program.
Postoje razne primene struktura, pa hajde za početak da napravimo bazu podataka. Da unesemo bazu podataka ljudi, i recimo da odvojimo ljude po visini (visoke i niske). Prvo treba da se napravi struktura za čoveka (koristićemo strukturu iz prethodnog primera). Onda pravimo niz objekata, koji bi nam predstavljali naše ljude u bazi. Na kraju unesemo podatke o svim ljudima, pa ispišemo imena visokih ljudi a zatim niskih. Visoke i niske će mo raspodeliti tako da pola ide u jednu grupu, a druga polovina u drugu:

#include <iostream>
using namespace std;
struct Covek
{
int age,height,mass;
string first_name,last_name;
Covek()
{
age=0;
height=0;
mass=0;
first_name=" ";
last_name=" ";
}
};
int main()
{
Covek p[100];
int n,height_ukupno(0);
cin>>n;
for(int i=0; i<n; i++)
{
scanf("%s",p[i].first_name);
scanf("%s",p[i].last_name);
cin>>p[i].age;
cin>>p[i].height;
cin>>p[i].mass;
height_ukupno+=p[i].height;
}
for(int i=0; i<n; i++)
{
if(p[i].height>height_ukupno/n)
{
printf("%s",p[i].first_name);
cout<<" ";
printf("%s",p[i].last_name);
cout<<endl;
}
}
for(int i=0; i<n; i++)
{
if(p[i].height<=height_ukupno/n)
{
printf("%s",p[i].first_name);
cout<<" ";
printf("%s",p[i].last_name);
cout<<endl;
}
}
}

I gotovo, zbog one mane sa unosom program izgleda glomazno, ali da je moglo samo cout<< stalo bi u 18 linija manje (što je, ako razmislite, puno, za ovako mali kod). Dakle smatram da je ovo dovoljno i za strukture. OVIME ZAVRŠAVAMO OSNOVNO OBRAZOVANJE PROGRAMIRANJA!!! Sada možete da proslavite, recimo da pojedete kolač ili još bolje pojedite n kolača! Naravno, kako god, ovo je bilo samo osnovno obrazovanje o programiranju ću da pišem još dosta, još uvek ima ceo svet programiranja pred vama, zato nemojte da se opirete, pravite programe, vežbajte do sledeće objave i čitajte Science Madness. Naravno, iako je ovo poslednja lekcija imaćete domaći (ovoga puta malo manje):

  1. Napišite program koji za uneti broj n i m rasporedjuje n ljudi u m grupa po visini.
  2. Napišite program koji za uneti niz ljudi (ime, prezime, godina, broj opravdanih i neopravdanih izostanaka i ocene) ispisujeosobu sa najvećom ocenom, ako ih ima više drugi kriterijum su neopravdani izostanci, treći je broj opravdani i poslednji godine (onaj koji je najbliži da ima 20 godina) ako ima više itih takvih onda po leksikografskoj veličini imena.
  3. Napišite program koji za niz taksija koji imaju svoju početnu x i y koordinatu, brzinu, broj i niz od brojeva 1, 2, 3 ili 4, gde 1 predstavlja levo, 2 predstavlja gore, 3 predstavlja levo i 4 predstavlja desno, proverava koliko se taksija nalaze sami (imaju jedinstvenu x i y koordinatu).

Нема коментара:

Постави коментар