<?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_2016</id>
	<title>Програмирање 2/К3 2016 - Историја измена</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_2016"/>
	<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_2016&amp;action=history"/>
	<updated>2026-06-04T06:10:58Z</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_2016&amp;diff=717&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_2016&amp;diff=717&amp;oldid=prev"/>
		<updated>2020-07-28T16:18:30Z</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 vrši određenu obradu na datotekom korisnika i datotekom njihovih akcija. U svakom redu datoteke korisnici.txt zapisani su podaci o jednom korisniku u sledećem formatu:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;username email&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;username&amp;#039;&amp;#039;&amp;#039; - korisničko ime, najviše 30 znakova&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;email&amp;#039;&amp;#039;&amp;#039; - email adresa korisnika, najviše 30 znakova&lt;br /&gt;
Username i email su jedinstveni podaci i pojavljuju se u najviše jednom redu. U svakom redu datoteke logs.txt nalaze se podaci o istoriji prijavljivanja i odjavljivanja korisnika na sistem u formatu:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;e-mail akcija vreme&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;e-mail&amp;#039;&amp;#039;&amp;#039; - email adresa korisnika&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;akcija&amp;#039;&amp;#039;&amp;#039; - oznaka “p” ili “o” (p - prijava, o - odjava)&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;vreme&amp;#039;&amp;#039;&amp;#039; - trenutak u kome se akcija izvršila (ceo broj)&lt;br /&gt;
Jedan korisnik se može više puta prijaviti i odjaviti sa sistema. Informacije o korisnicima 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 user {&lt;br /&gt;
    char username[31], email[31];&lt;br /&gt;
    int time;&lt;br /&gt;
} User;&lt;br /&gt;
typedef struct node {&lt;br /&gt;
    User user;&lt;br /&gt;
    struct node *next;&lt;br /&gt;
} Node;&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;Node* read_users();&amp;#039;&amp;#039;&amp;#039; koja formira listu korisnika tako što u listu dodaje svakog pročitanog korisnika iz datoteke &amp;#039;&amp;#039;&amp;#039;korisnici.txt&amp;#039;&amp;#039;&amp;#039;. Funkcija kao povratnu vrednost vraća pokazivač na prvi element novoformirane 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* readUsers ( ) {&lt;br /&gt;
    FILE *in = fopen(&amp;quot;korisnici.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    Node *head = NULL, *tail = head, *tmp;&lt;br /&gt;
    User u;&lt;br /&gt;
    while(fscanf(in, &amp;quot;%s %s&amp;quot;, u.username, u.email)==2)&lt;br /&gt;
    {&lt;br /&gt;
        tmp = malloc(sizeof(Node));&lt;br /&gt;
        tmp-&amp;gt;user = u;&lt;br /&gt;
        tmp-&amp;gt;user.time = 0;&lt;br /&gt;
        tmp-&amp;gt;next = NULL;&lt;br /&gt;
        &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;
===Druga funkcija===&lt;br /&gt;
Realizovati funkciju &amp;#039;&amp;#039;&amp;#039;User update_time(Node *head);&amp;#039;&amp;#039;&amp;#039; koja učitava podatake iz datoteke &amp;#039;&amp;#039;&amp;#039;logs.txt&amp;#039;&amp;#039;&amp;#039; i ažurira listu na osnovu email adrese, tako da za svakog korisnika bude izračunato ukupno vreme koje je proveo prijavljen na sistem. Pokazivač &amp;#039;&amp;#039;&amp;#039;head&amp;#039;&amp;#039;&amp;#039; pokazuje na prvi element liste korisnika. Potprogram treba da vrati korisnika koji je najviše vremena bio prijavljen na sistem. Ukoliko postoji više takvih korisnika vratiti onog čije je korisničko ime prvo u rastuće sortiranoj listi po korisničkom imenu.&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;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
User updateTime ( Node *head ) {&lt;br /&gt;
   FILE *log = fopen(&amp;quot;logs.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
   char email[31];&lt;br /&gt;
   char operation;&lt;br /&gt;
   int duration;&lt;br /&gt;
   User max = head-&amp;gt;user;&lt;br /&gt;
   &lt;br /&gt;
   while(fscanf(log, &amp;quot;%s %c %d\n&amp;quot;, email, &amp;amp;operation, &amp;amp;duration) == 3)&lt;br /&gt;
   {&lt;br /&gt;
       Node *tmp = head;&lt;br /&gt;
       while(tmp &amp;amp;&amp;amp; strcmp(tmp-&amp;gt;user.email, email))&lt;br /&gt;
            tmp = tmp-&amp;gt;next;&lt;br /&gt;
        &lt;br /&gt;
       if(tmp)&lt;br /&gt;
       {&lt;br /&gt;
           switch(operation)&lt;br /&gt;
           {&lt;br /&gt;
               case &amp;#039;p&amp;#039;: tmp-&amp;gt;user.time -= duration;&lt;br /&gt;
                break;&lt;br /&gt;
               case &amp;#039;o&amp;#039;: tmp-&amp;gt;user.time += duration;&lt;br /&gt;
                break;&lt;br /&gt;
           }&lt;br /&gt;
           if(tmp-&amp;gt;user.time &amp;gt; max.time || &lt;br /&gt;
           tmp-&amp;gt;user.time == max.time &amp;amp;&amp;amp; strcmp(tmp-&amp;gt;user.username, max.username) &amp;gt; 1)&lt;br /&gt;
           max = tmp-&amp;gt;user;&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
   fclose(log);&lt;br /&gt;
   return max;&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 deallocateList(Node *head);&amp;#039;&amp;#039;&amp;#039; koja oslobađa memoriju koju je zauzela lista na čiji prvi element pokazuje pokazivač &amp;#039;&amp;#039;&amp;#039;head&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;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* tmp = head;&lt;br /&gt;
        head = head-&amp;gt;next;&lt;br /&gt;
        free(tmp);&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 učita korisnike iz datoteke &amp;#039;&amp;#039;&amp;#039;korisnici.txt&amp;#039;&amp;#039;&amp;#039;, ažurira njihova vremena provedena u sistemu na osnovu informacija iz datoteke &amp;#039;&amp;#039;&amp;#039;logs.txt&amp;#039;&amp;#039;&amp;#039; i ispiše informacije o korisniku koji je najviše vremena proveo u sistemu.&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;lt;string.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;
    Node* users = readUsers();&lt;br /&gt;
    User max = updateTime(users);&lt;br /&gt;
    printf(&amp;quot;%s %s %d&amp;quot;, max.username, max.email, max.time);&lt;br /&gt;
    deallocateList(users);&lt;br /&gt;
    return 0;&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>