You are on page 1of 9

PROGRAMIRANJE 2

LABORATORIJSKE VJEBE

LV2
Strukture

Elektrotehniki fakultet Osijek


Kneza Trpimira 2b

www.etfos.unios.hr

1 UVOD
Do sada ste se susretali sa poljima, gdje ste mogli grupirati vei broj podataka istog tipa.
No, esto nam treba jo vie fleksibilnosti u smislu grupiranja razliitih tipova podataka.
Strukture (eng. structure ili records u nekim programskim jezicima) i slue upravo tomu, tj.
Strukture grupiraju vie podataka razliitih tipova.
Jedan od tradicionalnih primjera strukture je primjer liste za isplatu plae: svaki zaposlenik
je opisan nizom atributa poput imena, prezimena, adrese, OIB-a, plae itd. Nadalje, adresa
svakoga zaposlenika moe imati niz svojih atributa poput ulica, kuni broj, grad, drava.
Pomou struktura imamo mogunost grupirati sve atribute za pojedinog zaposlenika isto
kao sto moemo grupirati i sve atribute vezane uz adresu zaposlenika u drugu, zasebnu
strukturu. U nastavku emo vidjeti kako emo to uiniti.

2 STRUKTURE
Kao to smo u uvodu pojasnili, za razliku od polja, kod kojih svi elementi moraju biti istog
tipa, strukture omoguavaju grupiranje elemenata razliitih tipova u jednu cjelinu.
2.1

DEKLARACIJA STRUKTUR E

Opi oblik deklaracije strukture je:


struct ime_strukture {
tip_1 ime_1;
tip_2 ime_2;
.... ....
tip_n ime_n;
};
gdje je:
struct kljuna rije koja oznaava poetak deklaracije strukture
ime_strukture je naziv koji dajemo strukturi
tip_1 ime_1, tip_2 ime_2 itd. su lanovi strukture
Deklaracija strukture mora zavriti znakom ;
Struktura se moe deklarirati:
1) na poetku programa (tj. izvan svih funkcija),
2) unutar neke funkcije,
3) unutar nekog bloka naredbi.

Primjer:
struct tocka {
int x;
int y;
};
Strukturu tocka definira toku u ravnini pomou njezinih x i y koordinata. Ova struktura
sadri dva lana istog tipa, no lanovi strukture mogu biti bilo kojeg tipa, osnovni tipovi,
pokazivai, polja i druge strukture.
2.2

VARIJABLE TIPA STRUK TURE I INICIJALIZACIJA STRUKURE

Deklaracija strukture samo definira tip podatka, ali ne rezervira memorijski prostor. Nakon
to je struktura deklarirana moemo definirati varijable tog tipa:
mem_klasa struct ime varijabla1, varijabla2,...;
gdje je mem_klasa memorijska klasa, ime je naziv strukture, a varijabla1, varijabla2,..
varijable koje definiramo.

Tako je za gore prikazani primjer strukture za tocka mogue definirati varijable p1 i p2 na


sljedei nain:
struct tocka p1,p2;
Ovdje su varijable p1 i p2 tipa tocka i za njih je ovdje rezerviran potreban memorijski
prostor. Osim ovakvog naina definiranja varijabli, mogue je definirati varijable unutar
deklaracije strukture na sljedei nain:
mem_klasa struct ime {
tip_1 ime_1;
tip_2 ime_2;
.... ....
tip_n ime_n;
} varijabla1, varijabla2,...;
odnosno, za gore navedeni primjer bi bilo:
struct tocka {
int x;
int y;
} p1,p2;
Takav nain deklaracije strukture i definicije varijabli pogodan je kada varijable tipa
strukture uvodimo samo na jednom mjestu. U tom sluaju nije nuno dati ime strukturi,
naravno, druge varijable tog tipa na drugom mjestu onda nije mogue definirati.
Varijabla tipa strukture moe se inicijalizirati prilikom definicije na ovaj nain:
mem_klasa struct ime varijabla={v_1, v_2,..., v_n};
pri emu se v_1 pridruuje prvom lanu strukture, v_2 drugom itd.

Primjer:
struct racun {
int broj_racuna;
char ime[80];
float stanje;
};
struct racun kupac={1234,"Goran S.", -234.00};
U gore prikazanom primjeru smo inicijalizirali svaki lan strukture racun tako da je
broj_racuna izjednaen s vrijednou 1234, ime sa Goran S., a stanje sa -234.00.
U gore navedenom primjeru smo inicijalizaciju mogli izvriti tako da svakom lanu
pristupimo zasebno i dodijelimo odreenu vrijednost, kako je prikazano u primjeru ispod.

Primjer:
struct racun {

int broj_racuna;
char ime[80];
float stanje;
};
struct racun kupac;
kupac.broj_racuna= 1234;
strcpy(kupac.ime, Ivan I.);
kupac.stanje= 100.000;
Slino se moe inicijalizirati i polje struktura:
struct racun kupci[]= { 34,"Ivo R.", 456.00,
35,"Josip S.", 234.00,
36,"Dalibor M.",00.00};
S obzirom na to da ne postoji poseban format za ispis strukturnih varijabli, pri unosu ili
ispisu se svaki lan strukturne varijable tretira posebno.

Primjer:
struct tocka {
int x;
int y;
} p1,p2;
scanf ("%d %d",&p1.x, &p1.y);
printf("\n Tocka p1: x=%d y=%d", p1.x, p1.y);

3 RJEENI PRIMJERI
Slijedi nekoliko rijeenih primjera u kojima su koritene strukture.
Primjer 1. Napisati C program koji e imati strukturu Konj koja kao lanove ima: ime konja,
godine konja, visina konja te imena oba roditelja. Unijeti podatke za jednu strukturnu varijablu
te ispisati sve unesene podatke.

#include <stdio.h>
int main()
{
/* deklaracija strukture */
struct konj
{
int godine;
int visina;
char ime[20];
char ime_oca[20];
char ime_majke[20];
};
struct konj Moj_konj; /* deklaracija strukturne varijable */
/* inicijalizacija strukturnih podataka preko ulaznih podataka */
printf("Unesite ime konja: " );
scanf("%s", Moj_konj.ime );
printf("Koliko je star %s? ", Moj_konj.ime );
scanf("%d", &Moj_konj.godine );
printf("Koliko je visok %s ? ", Moj_konj.ime );
scanf("%d", &Moj_konj.visina );
printf("Tko je otac od %s? ", Moj_konj.ime );
scanf("%s", Moj_konj.ime_oca );
printf("Tko je majka od %s? ", Moj_konj.ime );
scanf("%s", Moj_konj.ime_majke );
/* Ispis podataka */
printf("\n%s ima %d godina, visok(a) je %d,",
Moj_konj.ime, Moj_konj.godine, Moj_konj.visina);
printf(" te su mu(joj) roditelji %s i %s .\n", Moj_konj.ime_oca,
Moj_konj.ime_majke );
return 0;
}

Kratko obrazloenje [Primjer 1]: Nakon to je definirana struktura Konj sa svim


pripadajuim lanovima, deklarirali smo strukturnu varijablu Moj_konj. Pomou funkcije
scanf smo uitali vrijednosti za sve lanove strukture i na taj nain inicijalizirali sve lanove
strukture. Nakon toga smo ispisali sve unesene podatke, tj. vrijednosti svih lanova
strukturne varijable Moj_konj.

Primjer 2. Napisati C program koji e imati strukturu Automobil koja kao lanove ima: marka
automobila, godina proizvodnje te jaina motora. Unijeti podatke za 5 strukturnih varijabli pri
emu je potrebno koristiti polje struktura te ispisati sve unesene podatke.
#include <stdio.h>
int main()
{
/* deklaracija strukture */
struct Automobil
{
int jacina;
int godina;
char marka[20];
}Auto[5]; /* deklaracija strukturne varijable */
/* inicijalizacija strukturnih podataka preko ulaznih podataka */
for (int i=0; i<5;i++){
printf("Unesite tip automobila: " );
scanf("%s", Auto[i].marka );
printf("Koje godine je proizveden? ");
scanf("%d", &Auto[i].godina );
printf("Koja je jacina motora automobila ? ");
scanf("%d", &Auto[i].jacina );
}
/* Ispis podataka */
for (i=0; i<5;i++){
printf("\nAutomobil [%d] je marke %s, proizveden je %d godine, te mu
je
jacina
motora
%d.",
i,
Auto[i].marka,
Auto[i].godina,
Auto[i].jacina);
}
return 0;
}

Kratko obrazloenje [Primjer 2]: Nakon to je definirana struktura Automobil sa svim


pripadajuim lanovima, deklarirali smo varijablu polja struktura Auto. U for petlji smo
pomou funkcije scanf smo uitali vrijednosti za sve lanove polja struktura i na taj nain
inicijalizirali sve lanove polja struktura. Nakon toga smo ispisali sve unesene podatke.

Primjer 3. Napisati C program koji e imati strukturu Ucenik koja kao lanove ima: ime i
prezime uenika, matini broj uenika, prosjek ocjena te strukturu sa podacima o datumu
roenja. Inicijalizirati podatke za jednu strukturnu varijablu te ispisati sve podatke za tu
strukturnu varijablu.

#include <stdio.h>
int main()
{
/* deklaracija strukture */
struct datum
{
int dan;
int mjesec;
int godina;
};
struct ucenik
{
char ime[15];
char prezime[15];
int maticni;
float prosjek;
struct datum rodjendan;
} u1; /* deklaracija strukturne varijable */
/* inicijalizacija strukturnih podataka */
printf("\n Molim, unesite ime: ");
scanf("%s",u1.ime);
printf("\n Molim, unesite prezime: ");
scanf("%s",u1.prezime);
printf("\n Molim, unesite maticni broj: ");
scanf("%d",&u1.maticni);
printf("\n Molim, unesite prosjek: ");
scanf("%f",&u1.prosjek);
printf("\n Molim, unesite datum u formatu dan.mjesec.godina.: ");
scanf("%d.%d.%d.",&u1.rodjendan.dan,
&u1.rodjendan.mjesec,
&u1.rodjendan.godina);
/* Ispis podataka */
printf("\nUcenik pod maticnim brojem %d ima sljedece podatke: \nIme i
prezime ucenika: %s %s \n Prosjek ocjena: %f \n Datum rodjenja:
%d.%d.%d.",u1.maticni, u1.ime, u1.prezime,u1.prosjek,
u1.rodjendan.dan, u1.rodjendan.mjesec, u1.rodjendan.godina );
return 0;
}

Kratko obrazloenje [Primjer 3]: S obzirom da u ovom zadatku imamo strukturu unutar
strukture, gdje se struktura datum nalazi unutar strukture ucenik, moemo vidjeti unos
vrijednosti za strukturnu varijablu u1 za datum roenja uenika. lanovima podstrukture
pristupa se na isti nain kao i lanovima strukture uporabom operatora toke, ali
potrebnoje spustiti se na razinu lana te strukture, to je u ovom primjeru, recimo,
u1.rodjendan.dan.

4 ZADACI ZA VJEBU
Pri rjeavanju zadataka potrebno je ispisati rezultate u tono odreenom formatu. Budui
da sustav automatski provjerava ispravnost rjeenja, sustav oekuje tekst REZULTATI: u
jednom redu, a nakon njega tono formatiran ispis rezultata na nain koji e biti naveden u
tekstu zadatka. Sav tekst koji se ispie prije teksta REZULTATI: sustav e ignorirati, kao i
sav tekst koji se ispie nakon oekivanog izlaza.
Zadatke je potrebno predati preko aktivnosti na Loomenu u koju e Vas uputiti nastavnici
na vjebama.
1. Napiite C program koji e omoguiti upis dva kompleksna broja te ispisati njihov
zbroj i razliku. Ispisati rezultate zbroja i razlike u formatu %.3f, %.3f*i\n.
2. Napiite C program koji e zatraiti broj uenika u razredu, a nakon toga omoguiti
unoenje imena, prezimena, matinog broja, prosjeka i datuma roenja za sve
uenike jednog razreda. Ispisati ime i prezime uenika koji ima najbolji prosjek.
(Uenike upisati u polje od najvie 40 elemenata.)
3. Deklarirati strukturu stan koja ima lanove: povrina, cijena, adresa, energetski
razred, klima ureaj [1/0]. Omoguiti korisniku unos podataka za eljeni broj
stanova (max. 20) u polje struktura. Ponavljati unos dokle god je eljeni broj manji
od 2, ili vei od 20. Ispisati adrese i cijene svih unesenih stanova kod kojih je cijena
po kvadratu manja od 900 eura i sve stanove kojima je cijena vea od 1100 eura po
kvadratu, a nemaju klima ureaj.
Ako nema takvih stanova ispisati tekst: Niti jedan stan ne odgovara kriterijima., a
ako ima takvih stanova ispisati ih u formatu adresa, cijena za svaki takav stan u
novi red.

You might also like