You are on page 1of 14

ВОВЕД ВО

ПРОГРАМИРАЊЕ

Предавања, 10 час
Структуpирани типови на
податоци
 Вредноста на простите (атомски) типови на
податоци (како што се char, int, float, …) не може
да биде разбиена на помали делови. На пример,
секоја int вредност е цел број кој не може да биде
понатаму декомпониран.
 Спротивно, структуpиран тип на податок е таков
податок во кој секоја вредност е множество од
компонентни делови. Секоја вредност има
единствено име, а на секоја компонента од
множеството може да и се пристапи индивидуално.
 Простите типови на податоци (built-in или вградени
типови) претставуваат компоненти на
структуираните типови на податоци.
Структури
 Структура е структуpиран тип на податок со постојан број
на компоненти на кои може да им се пристапи по име.
Индивидуалните компоненти од структурата можат да
бидат од различни типови на податоци.
 Член (member) на структурата е една негова компонента.
Секој член на структурата има име.
 Синтакса за декларација на структура е:
struct ime_struktura {
tip1 ime_clen1;
tip2 ime_clen2;

};
каде ime_struktura е идентификатор кој дава име на
новодефинираниот тип на податок, а ime_clen1,
ime_clen2, …, се имиња на членовите на структурата.
Пример: Структури
 Да креираме структура за да опишеме студент по предметот
Програмирање. Во структурата сакаме да ги чуваме: името и
презимето, просекот пред ислушувaњето на предметот, поени
од прв колковиум, поени од втор колковиум, поени од
редовност, поени од семинарска, и оценката за предметот.
struct StudentRec {// Deklaracija na nov tip
char ime[50];
float prosek;
int prv;
int vtor;
int redovnost;
int seminar;
int ocena;
};
struct StudentRec student1; // Deklaracii na promenlivi od tip struktura
struct StudentRec student2;
Пристап до индивидуални
компоненти на структура
 Синтакса на декларација на промеливи од тип
структура
struct ime_struktura ime_promenliva;
 За да се пристапи до индивидуален член на struct
променлива, прво се наведува името на
променливата проследено со точка и потоа името
на членот. Синтаксата е следната:
ime_promenliva.ime_clen1
 Членот на структурата на кој е пристапено се
третира како која било променлива од дадениот
тип. Може да биде користен во изрази на
доделување, како аргумент во функција итн.
Пример: Структури
 Користејќи ја нашата променлива student1, следниот
сегмент чита поени од прв и втор колоквиум,
редовност, и семинарски и потоа доделува оцена на
студентот.
scanf(“%d”,&student1.prv);
scanf(“%d”,&student1.vtor);
scanf(“%d”,&student1.redovnost);
scanf(“%d”,&student1.seminar);
int vkupno=student1.prv+student1.vtor+student1.redovnost+student1.seminar;
if (vkupno>90) student1.ocena=10;
else if (vkupno>80) student1.ocena=9;
else if (vkupno>70) student1.ocena=8;
else if (vkupno>60) student1.ocena=7;
else if (vkupno>55) student1.ocena=6;
else student1.ocena=5;
Пример: Структури
 Да креираме структура за да опишеме
фудбалски клуб. Во структурата сакаме да
ги чуваме: името на клубот, и број на
освоени поени.
struct klub_podatoci {
char ime[20];
int poeni;
} klub1,klub2;
scanf(“%s”,klub1.ime);
printf(“Prva bukva e %c”,klub1.ime[0]);
Вгнездени структури
 Можно е една структура да има како член
друга структура
struct tim { struct klub_podatoci {
char golman[20]; char ime[20];
char bek[20]; int poeni;
char krilo[20]; struct tim igraci;
} } klub1;

 Пристап до членови на вгнездени структури:


scanf(“%s”,klub1.igraci.golman)
Низи од структури
 Работа со низи од структури:
struct ime_struktura ime_promenliva[100];
ime_promenliva[5].ime_clen1=vrednost1;
 Како што постојат низи во кои секој елемент е
променлива од одреден тип, така постојат низи чии
елементи се структури.
struct klub_podatoci {
char ime[20];
int poeni;
} klubovi[10];
се креира низа klubovi со 10 елементи кои се
променливи од тип struct klub_podatoci.
 Пристап до членови на елементи од една низа:
klubovi[2].poeni=20;
Задача
 Да се направи сортирана табела од клубови според бројот на
освоени поени.
 Внес
const int max=30;
int n,i,j;
struct klub_podatoci {
char ime[20];
int poeni;
} klubovi[max];
printf("Vnesi broj na timovi: ");
scanf("%d",&n);
printf("Vnesi podatoci za timovite: \n");
for (i=0;i<n;i++) {
printf("Vnesi ime na %d tim ",i+1);
scanf("%s",klubovi[i].ime);
printf("Vnesi broj na poeni na %d tim ",i+1);
scanf("%d",&klubovi[i].poeni);
}
Задача
 Сортирање
char tmpI[20]; int tmpP;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++) {
if (klubovi[i].poeni<klubovi[j].poeni) {
kopiraj(klubovi[i].ime,tmpI);
kopiraj(klubovi[j].ime, klubovi[i].ime);
kopiraj(tmpI,klubovi[j].ime);
tmpP=klubovi[i].poeni;
klubovi[i].poeni= klubovi[j].poeni;
klubovi[j].poeni=tmpP;
}
}
Задача
 Печатење
printf("Sortirana tabela na timovite: \n");
for (i=0;i<n;i++) {
printf("Tim %s" , klubovi[i].ime);
printf(" ima %d poeni \n",klubovi[i].poeni);
}
 Функции
void kopiraj(char izvor[], char cel[]) {
int i=0;
while (izvor[i] != '\0') {
cel[i]=izvor[i];
i++;
}
cel[i]='\0';
}
Задача
 Време на извршување на програмот
α+β1*n +β2*(n-1)*n/2 +β3*n, каде
 α е време да се извршат иницијализирачки
наредби
 β1 е време да се извршат наредбите за внес
 β2 е време да се извршат наредбите за сортирање
 β3 е време да се извршат наредбите за печатење
 n е бројот на клубови (влез на програмот)
 Комплексност на програмот
O(n2)
Структури како аргументи на
функции
 Предавањето на променлива од struct тип како функциски
аргумент е дозволена агрегатна операција, т.е. претставува
операција на структура на податоци како целина, спротивно на
операција на индивидуалните компоненти на структурата на
податоци.
 Во претходната задача, да напишеме функција која за влез
некоја структура, ги печати на екран неговите членови.
void pecati(struct klub_podatoci x) {
printf("Tim %s" , x.ime);
printf(" ima %d poeni \n", x.poeni);
}
 Тогаш во главната програма, печатење на низата ќе биде:
printf("Sortirana tabela na timovite: \n");
for (i=0;i<n;i++)
pecati(klubovi[i]);

You might also like