<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5_2%2F%D0%9A3_2017</id>
	<title>Програмирање 2/К3 2017 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5_2%2F%D0%9A3_2017"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5_2/%D0%9A3_2017&amp;action=history"/>
	<updated>2026-06-04T06:05:56Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5_2/%D0%9A3_2017&amp;diff=718&amp;oldid=prev</id>
		<title>Ivan Pešić: Dodato resenje zadatka</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5_2/%D0%9A3_2017&amp;diff=718&amp;oldid=prev"/>
		<updated>2020-07-28T16:29:07Z</updated>

		<summary type="html">&lt;p&gt;Dodato resenje zadatka&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Zadatak==&lt;br /&gt;
Napisati program na programskom jeziku C koji razvrstava đake osnovnih škola u željene srednje škole. U svakom redu datoteke skole.txt se nalaze informacije o srednjoj školi u sledećem formatu:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;brojMesta nazivSkole&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;brojMesta&amp;#039;&amp;#039;&amp;#039; - broj slobodnih upisnih mesta u školi (ceo broj)&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;nazivSkole&amp;#039;&amp;#039;&amp;#039; - niz znakova, koji može sadržati blanko znake, od najviše 30 karaktera.&lt;br /&gt;
Svakoj školi se dodeljuje redni broj koji odgovara rednom broju linije teksta u kojem se škola nalazi. Redni brojevi škola počinju od 0. U datoteci ima podataka o najviše 400 škola. U binarnoj datoteci zelje.pod svaki zapis sadrži:&lt;br /&gt;
&lt;br /&gt;
*prijavni broj đaka (ceo broj)&lt;br /&gt;
*ime i prezime đaka (dužine tačno 30 karaktera)&lt;br /&gt;
*prosečnu ocenu (realan broj)&lt;br /&gt;
*redni broj srednje škole koju đak želi da upiše (ceo broj)&lt;br /&gt;
Prijavni brojevi đaka su jedinstveni. Informacije o školama i učenicima se čuvaju pomoću sledećih struktura:&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct school {&lt;br /&gt;
    int id, places;&lt;br /&gt;
    char name[31];&lt;br /&gt;
} School;&lt;br /&gt;
&lt;br /&gt;
typedef struct pupil {&lt;br /&gt;
    int id, school;&lt;br /&gt;
    char name[31];&lt;br /&gt;
    double averageGrade;&lt;br /&gt;
} Pupil;&lt;br /&gt;
&lt;br /&gt;
typedef struct node {&lt;br /&gt;
    Pupil pupil;&lt;br /&gt;
    struct node *next;&lt;br /&gt;
} Node;&lt;br /&gt;
&lt;br /&gt;
#define MAX_NUMBER_OF_SCHOOLS 400&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Deklaracije ovih tipove se nalaze u datoteci type.h i nju je potrebno uključiti svugde gde se koriste ovi tipovi.&lt;br /&gt;
===Prva funkcija===&lt;br /&gt;
Realizovati funkciju &amp;#039;&amp;#039;&amp;#039;void readSchools(School schools[MAX_NUMBER_OF_SCHOOLS]);&amp;#039;&amp;#039;&amp;#039; koja učitava podatke o školama tako što svaki red iz datoteke &amp;#039;&amp;#039;&amp;#039;skole.txt&amp;#039;&amp;#039;&amp;#039; smešta u jedan element niza &amp;#039;&amp;#039;&amp;#039;schools&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;quot;type.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void readSchools ( School schools[MAX_NUMBER_OF_SCHOOLS] ) {&lt;br /&gt;
    FILE *in = fopen(&amp;quot;skole.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    for(int i = 0; fscanf(in, &amp;quot;%d %[^\n]\n&amp;quot;, &amp;amp;schools[i].places, schools[i].name)==2; i++)&lt;br /&gt;
        schools[i].id = i;    &lt;br /&gt;
    fclose(in);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Druga funkcija===&lt;br /&gt;
Realizovati funkciju &amp;#039;&amp;#039;&amp;#039;Node* readPupils();&amp;#039;&amp;#039;&amp;#039; koja učitava podatke o đacima iz datoteke &amp;#039;&amp;#039;&amp;#039;zelje.pod&amp;#039;&amp;#039;&amp;#039; tako što svaki red iz datoteke smešta u jedan element liste. Funkcija kao povratnu vrednost vraća pokazivač na prvi element liste.&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;quot;type.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Node* readPupils ( ) {&lt;br /&gt;
    FILE *in = fopen(&amp;quot;zelje.pod&amp;quot;, &amp;quot;rb&amp;quot;);&lt;br /&gt;
    Node *head = NULL, *tail = head;&lt;br /&gt;
    Pupil p;&lt;br /&gt;
    while(fread(&amp;amp;p, sizeof(p), 1, in) == 1)&lt;br /&gt;
    {&lt;br /&gt;
        Node *tmp = malloc(sizeof(Node));&lt;br /&gt;
        tmp-&amp;gt;pupil = p;&lt;br /&gt;
        tmp-&amp;gt;next = NULL;&lt;br /&gt;
        if(!head)&lt;br /&gt;
            head = tmp;&lt;br /&gt;
        else&lt;br /&gt;
            tail-&amp;gt;next = tmp;&lt;br /&gt;
        tail = tmp;&lt;br /&gt;
    }&lt;br /&gt;
    fclose(in);&lt;br /&gt;
    return head;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Treća funkcija===&lt;br /&gt;
Realizovati funkciju &amp;#039;&amp;#039;&amp;#039;void sortPupils(Node*);&amp;#039;&amp;#039;&amp;#039; koja sortira listu đaka opadajuće po prosečnoj oceni. Ukoliko su prosečne ocene jednake, onda po prijavnom broju rastuće. Pokazivač &amp;#039;&amp;#039;&amp;#039;head&amp;#039;&amp;#039;&amp;#039; pokazuje na prvi element liste.&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;type.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void sortPupils ( Node *head ) {&lt;br /&gt;
    for(Node* f = head; f; f = f-&amp;gt;next)&lt;br /&gt;
    {&lt;br /&gt;
        for(Node* s = f-&amp;gt;next; s; s = s-&amp;gt;next)&lt;br /&gt;
        {&lt;br /&gt;
            if(f-&amp;gt;pupil.averageGrade &amp;lt; s-&amp;gt;pupil.averageGrade ||&lt;br /&gt;
            f-&amp;gt;pupil.averageGrade == s-&amp;gt;pupil.averageGrade &amp;amp;&amp;amp; f-&amp;gt;pupil.id &amp;lt; s-&amp;gt;pupil.id)&lt;br /&gt;
            {&lt;br /&gt;
                Pupil tmp = f-&amp;gt;pupil;&lt;br /&gt;
                f-&amp;gt;pupil = s-&amp;gt;pupil;&lt;br /&gt;
                s-&amp;gt;pupil = tmp;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Četvrta funkcija===&lt;br /&gt;
Realizovati funkciju &amp;#039;&amp;#039;&amp;#039;void matchWrite (Node* head, School schools[MAX_NUMBER_OF_SCHOOLS]);&amp;#039;&amp;#039;&amp;#039; koja formira tekstualnu datoteku &amp;#039;&amp;#039;&amp;#039;upisi.txt&amp;#039;&amp;#039;&amp;#039; koja će za svakog đaka sadržati podatke o dodeljenoj srednjoj školi. Jedan red datoteke treba da ima sledeći format: &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;prijavniBr imePrezime prosOcena nazivSkole&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ako nema mesta u školi koju je đak naveo kao želju, umesto upisane škole upisati &amp;#039;&amp;#039;&amp;#039;NEUPISAN&amp;#039;&amp;#039;&amp;#039;. Đaci sa višom prosečnom ocenom imaju veći prioritet pri raspoređivanju. Prednost prilikom upisa đaka sa istim prosekom imaju oni sa nižim prijavnim brojem. Informacije o đacima se čuvaju u listi na čiji prvi element pokazuje pokazivač &amp;#039;&amp;#039;&amp;#039;head&amp;#039;&amp;#039;&amp;#039;. Informacije o školama se čuvaju u nizu &amp;#039;&amp;#039;&amp;#039;schools&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;quot;type.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void matchAndWrite ( Node *head, School schools[MAX_NUMBER_OF_SCHOOLS] ) {&lt;br /&gt;
    FILE* out = fopen(&amp;quot;upisi.txt&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    for(Node* n = head; n; n = n-&amp;gt;next)&lt;br /&gt;
    {&lt;br /&gt;
        int found = 0;&lt;br /&gt;
        fprintf(out, &amp;quot;%d %s %.6lf &amp;quot;, n-&amp;gt;pupil.id, n-&amp;gt;pupil.name, n-&amp;gt;pupil.averageGrade);&lt;br /&gt;
        for (int s = 0; s &amp;lt; MAX_NUMBER_OF_SCHOOLS; s++)&lt;br /&gt;
        {&lt;br /&gt;
            if(n-&amp;gt;pupil.school == schools[s].id)&lt;br /&gt;
            {&lt;br /&gt;
                if(schools[s].places &amp;gt; 0)&lt;br /&gt;
                {&lt;br /&gt;
                    found = 1;&lt;br /&gt;
                    schools[s].places--;&lt;br /&gt;
                    fprintf(out, &amp;quot;%s\n&amp;quot;, schools[s].name);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(!found)&lt;br /&gt;
            fprintf(out, &amp;quot;NEUPISAN\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    fclose(out);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Peta funkcija===&lt;br /&gt;
Realizovati funkciju &amp;#039;&amp;#039;&amp;#039;void deallocate(Node* head);&amp;#039;&amp;#039;&amp;#039; koja dealocira listu đaka.&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;quot;type.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void deallocateList ( Node *head ) {&lt;br /&gt;
    while(head)&lt;br /&gt;
    {&lt;br /&gt;
        Node* old = head;&lt;br /&gt;
        head = head-&amp;gt;next;&lt;br /&gt;
        free(old); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Glavna funkcija===&lt;br /&gt;
Korišćenjem prethodno realizovanih funkcija napisati glavni program koji najpre iz datoteke &amp;#039;&amp;#039;&amp;#039;skole.txt&amp;#039;&amp;#039;&amp;#039; učita informacije o školama u niz i iz datoteke &amp;#039;&amp;#039;&amp;#039;zelje.pod&amp;#039;&amp;#039;&amp;#039; učita podatke o đacima u listu. Program potom treba da sortira đake po proseku i da formira datoteku &amp;#039;&amp;#039;&amp;#039;upisi.txt&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;quot;type.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    School schools[MAX_NUMBER_OF_SCHOOLS];&lt;br /&gt;
    Node* pupils;&lt;br /&gt;
    &lt;br /&gt;
    readSchools(schools);&lt;br /&gt;
    pupils = readPupils();&lt;br /&gt;
    sortPupils(pupils);&lt;br /&gt;
    matchAndWrite(pupils, schools);&lt;br /&gt;
    deallocateList(pupils);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Програмирање 2]]&lt;/div&gt;</summary>
		<author><name>Ivan Pešić</name></author>
	</entry>
</feed>