Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Programi s vježbi
WWW:
Idite na Prethodno  1, 2, 3  Sljedeće
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
quark
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 22. 10. 2011. (16:47:39)
Postovi: (DA)16
Spol: muško
Sarma = la pohva - posuda
20 = 26 - 6

PostPostano: 15:15 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

http://web.math.pmf.unizg.hr/~zbujanov/prog2/5%20-%20Stringovi/

:wink:
http://web.math.pmf.unizg.hr/~zbujanov/prog2/5%20-%20Stringovi/

Wink


[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 15:16 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

[quote="Ryssa"]Može netko napisati fukciju za provjeru da li je string palindrom...nije me bilo na vježbama kad se to radilo, a ne ide mi baš ovako :) zad 5.3.13. skripta[/quote]

[code:1]int palindrom(const char* s){
int i = 0;
int j = strlen(s) - 1;
while( i < j ){
if( s[i] != s[j] ) return 0;
++i;
--j;
}
return 1;
}[/code:1]




Za Zenona, evo i "kompaktne" verzije:
[code:1]int palindrom(const char* s){
const char* p = s + strlen(s) - 1;
while( s < p && *s == *p ) ++s, --p;
return s < p;
}[/code:1]
:wink:
Ryssa (napisa):
Može netko napisati fukciju za provjeru da li je string palindrom...nije me bilo na vježbama kad se to radilo, a ne ide mi baš ovako Smile zad 5.3.13. skripta


Kod:
int palindrom(const char* s){
    int i = 0;
    int j = strlen(s) - 1;
    while( i < j ){
        if( s[i] != s[j] ) return 0;
        ++i;
        --j;
    }
    return 1;
}





Za Zenona, evo i "kompaktne" verzije:
Kod:
int palindrom(const char* s){
    const char* p = s + strlen(s) - 1;
    while( s < p && *s == *p ) ++s, --p;
    return s < p;
}

Wink



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Zenon
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 09. 2011. (19:14:43)
Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]

PostPostano: 15:50 čet, 12. 4. 2012    Naslov: Citirajte i odgovorite

Najljepša hvala za obje kompaktnosti! :happy:
Najljepša hvala za obje kompaktnosti! Happy



_________________
It's a wonderful, wonderful life!
[tex]\heartsuit \ \mathcal{PMF-MO} \ \heartsuit[/tex]
[tex]\mathbb Z\Sigma\mathbb N\emptyset\mathbb N[/tex]
[Vrh]
Korisnički profil Pošaljite privatnu poruku
linus
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 20. 11. 2011. (16:59:13)
Postovi: (46)16
Sarma = la pohva - posuda
= 2 - 2
Lokacija: subnet mask

PostPostano: 19:14 uto, 8. 5. 2012    Naslov: Citirajte i odgovorite

evo radim bas program is skripte:

treba ucitati dvije strukture tipa osoba s nekim osobnim podacima, zamijeniti sadrzaje struktura i onda ih ispisati. Za ucitavanje i ispis sam napravio posebne funkcije i s time nema problema, ali napravio sam i funkciju swap

[code:1]

void swap(osoba *ja, osoba *on)
{
osoba *temp;
*temp=*ja;
*ja=*on;
*on=*temp;
}

[/code:1]

na kojoj s eprogram zbrejka. Stvar je u tome sta kada taj dio stavim u main:

[code:1]

osoba temp;
temp=svatko;
svatko=netko;
netko=temp;
[/code:1]

sve radi normalno. Zasto mi ne prihvaca funkciju (deklarirana je prije poziva)?

EDIT1: naravo, funkciji dajem adrese
[code:1]
swap(&netko, &svatko);[/code:1]
evo radim bas program is skripte:

treba ucitati dvije strukture tipa osoba s nekim osobnim podacima, zamijeniti sadrzaje struktura i onda ih ispisati. Za ucitavanje i ispis sam napravio posebne funkcije i s time nema problema, ali napravio sam i funkciju swap

Kod:


void swap(osoba *ja, osoba *on)
{
   osoba *temp;
   *temp=*ja;
   *ja=*on;
   *on=*temp;
}



na kojoj s eprogram zbrejka. Stvar je u tome sta kada taj dio stavim u main:

Kod:


   osoba temp;
   temp=svatko;
   svatko=netko;
   netko=temp;


sve radi normalno. Zasto mi ne prihvaca funkciju (deklarirana je prije poziva)?

EDIT1: naravo, funkciji dajem adrese
Kod:

swap(&netko, &svatko);


[Vrh]
Korisnički profil Pošaljite privatnu poruku
gflegar
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 12. 10. 2011. (15:03:41)
Postovi: (10D)16
Spol: muško
Sarma = la pohva - posuda
68 = 72 - 4

PostPostano: 20:44 uto, 8. 5. 2012    Naslov: Citirajte i odgovorite

[tt]temp[/tt] je pokazivac kojem nigdje ne pridruzujes adresu alocirane memorije.
Vjerojatno hoces ovo:

[code:1]void swap(osoba *ja, osoba *on)
{
osoba temp;
temp=*ja;
*ja=*on;
*on=temp;
} [/code:1]
temp je pokazivac kojem nigdje ne pridruzujes adresu alocirane memorije.
Vjerojatno hoces ovo:

Kod:
void swap(osoba *ja, osoba *on)
{
   osoba temp;
   temp=*ja;
   *ja=*on;
   *on=temp;
}
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail Posjetite Web stranice
linus
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 20. 11. 2011. (16:59:13)
Postovi: (46)16
Sarma = la pohva - posuda
= 2 - 2
Lokacija: subnet mask

PostPostano: 23:43 uto, 8. 5. 2012    Naslov: Citirajte i odgovorite

[quote="gflegar"][tt]temp[/tt] je pokazivac kojem nigdje ne pridruzujes adresu alocirane memorije.
Vjerojatno hoces ovo:

[code:1]void swap(osoba *ja, osoba *on)
{
osoba temp;
temp=*ja;
*ja=*on;
*on=temp;
} [/code:1][/quote]

ee to je to, malo sam se zanio, tnx
gflegar (napisa):
temp je pokazivac kojem nigdje ne pridruzujes adresu alocirane memorije.
Vjerojatno hoces ovo:

Kod:
void swap(osoba *ja, osoba *on)
{
   osoba temp;
   temp=*ja;
   *ja=*on;
   *on=temp;
}


ee to je to, malo sam se zanio, tnx


[Vrh]
Korisnički profil Pošaljite privatnu poruku
sasha.f
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2011. (20:04:19)
Postovi: (3D)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 17:19 pet, 18. 5. 2012    Naslov: Citirajte i odgovorite

u ovom i slicnima ispisuje mi samo zadnji razlomak pa ako moze netko pogledati..

[code:1]/*
Zadatak 7.1.23. Napiˇ site funkciju koja kao argument uzima pointer na poˇ cetak liste
razlomaka (definiranih kao u zadatku 7.1.17), te vra´ ca pointer na invertiranu verziju te
liste. Invertiranje treba posti´ ci razmjeˇ stanjem postoje´ cih elemenata, BEZ upotrebe funk-
cije malloc().*/

#include <stdio.h>
#include <stdlib.h>
typedef struct _cvor
{
int br, naz;
struct _cvor *next;
}cvor;
cvor *dodaj(cvor *prvi, int x, int y)
{
cvor *novi;
novi=(cvor*)malloc(sizeof(cvor));
novi->br=x;
novi->naz=y;
novi->next=NULL;

if(prvi==NULL)
{
prvi=novi;
}

else
{
novi->next=prvi;
prvi=novi;
}
return prvi;
}
cvor *funk(cvor *prvi)
{
cvor *temp, *pom, *prvi1=NULL, *preth=NULL;
for(pom=prvi; pom!=NULL; pom=pom->next)
{
if(preth==NULL)
{
prvi1=prvi;
prvi1->next=NULL;
}
else
{
preth->next=prvi1->next;
prvi1=pom;
}
preth=pom;
}
return prvi1;
}
int main(void)
{
cvor *pom;
cvor *prvi=NULL;
int x,y;
while(1)
{
printf("Brojnik: ");
scanf("%d", &x);
printf("Nazivnik: ");
scanf("%d", &y);
if(y==0)
break;

prvi=dodaj(prvi, x, y);
}

prvi=funk(prvi);

for(pom=prvi; pom!=NULL; pom=pom->next)
{
printf("%d", pom->br);
printf("%d", pom->naz);
}

while(prvi!=NULL)
{
cvor *temp=prvi;
prvi=prvi->next;
free(temp);
}
return 0;
}
[/code:1]
u ovom i slicnima ispisuje mi samo zadnji razlomak pa ako moze netko pogledati..

Kod:
/*
Zadatak 7.1.23. Napiˇ site funkciju koja kao argument uzima pointer na poˇ cetak liste
razlomaka (definiranih kao u zadatku 7.1.17), te vra´ ca pointer na invertiranu verziju te
liste. Invertiranje treba posti´ ci razmjeˇ stanjem postoje´ cih elemenata, BEZ upotrebe funk-
cije malloc().*/

#include <stdio.h>
#include <stdlib.h>
typedef struct _cvor
{
    int br, naz;
    struct _cvor *next;
}cvor;
cvor *dodaj(cvor *prvi, int x, int y)
{
    cvor *novi;
    novi=(cvor*)malloc(sizeof(cvor));
    novi->br=x;
    novi->naz=y;
    novi->next=NULL;
   
    if(prvi==NULL)
    {
        prvi=novi;
    }
   
    else
    {
        novi->next=prvi;
        prvi=novi;
    }
    return prvi;
}
cvor *funk(cvor *prvi)
{
       cvor *temp, *pom, *prvi1=NULL, *preth=NULL;
    for(pom=prvi; pom!=NULL; pom=pom->next)
    {
        if(preth==NULL)
        {
            prvi1=prvi;
            prvi1->next=NULL;
        }
        else
        {
            preth->next=prvi1->next;
            prvi1=pom;
        }
        preth=pom;
    }
    return prvi1;
}
int main(void)
{
    cvor *pom;
    cvor *prvi=NULL;
    int x,y;
    while(1)
    {
        printf("Brojnik: ");
        scanf("%d", &x);
        printf("Nazivnik: ");
        scanf("%d", &y);
        if(y==0)
        break;

        prvi=dodaj(prvi, x, y);
    }

    prvi=funk(prvi);

     for(pom=prvi; pom!=NULL; pom=pom->next)
    {
        printf("%d", pom->br);
        printf("%d", pom->naz);
    }

    while(prvi!=NULL)
    {
        cvor *temp=prvi;
        prvi=prvi->next;
        free(temp);
    }
    return 0;
}


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 18:03 pet, 18. 5. 2012    Naslov: Citirajte i odgovorite

Invertiranje ti je krivo. Probaj nacrtati sto se dogadja na nekoj manjoj listi (3, mozda 4 elementa).

Invertiranje je najbolje napraviti kao kombinaciju brisanja s pocetka jedne liste i dodavanja na pocetak druge, kako je objasnjeno na predavanju.
Invertiranje ti je krivo. Probaj nacrtati sto se dogadja na nekoj manjoj listi (3, mozda 4 elementa).

Invertiranje je najbolje napraviti kao kombinaciju brisanja s pocetka jedne liste i dodavanja na pocetak druge, kako je objasnjeno na predavanju.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Milojko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52)
Postovi: (453)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
17 = 68 - 51
Lokacija: Hilbertov hotel

PostPostano: 18:26 pet, 18. 5. 2012    Naslov: Citirajte i odgovorite

Ne smije koristiti malloc() pa mora bez brisanja, nego samo manipulacija pointerima.

[size=9][color=#999999]Added after 6 minutes:[/color][/size]

Ne povezuješ listu naopačke, pa ti zato ne radi. Mislim da, ako staviš [tt]prvi1->next = preth[/tt] će raditi. Ova linija gdje povezuješ preth->next... je nepotrebna
Ne smije koristiti malloc() pa mora bez brisanja, nego samo manipulacija pointerima.

Added after 6 minutes:

Ne povezuješ listu naopačke, pa ti zato ne radi. Mislim da, ako staviš prvi1→next = preth će raditi. Ova linija gdje povezuješ preth→next... je nepotrebna



_________________
Sedam je prost broj Smile

Bolonja je smeće i to pod hitno treba mijenjat
[Vrh]
Korisnički profil Pošaljite privatnu poruku MSNM
sasha.f
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2011. (20:04:19)
Postovi: (3D)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 18:56 pet, 18. 5. 2012    Naslov: Citirajte i odgovorite

evo zamjenjeno s:
[code:1]while(prvi!=NULL)
{
temp=prvi;
prvi=prvi->next;

temp->next=prvi1;
prvi1=temp;
}[/code:1]

i radi.
hvala :)
evo zamjenjeno s:
Kod:
while(prvi!=NULL)
    {
       temp=prvi;
       prvi=prvi->next;
       
       temp->next=prvi1;
       prvi1=temp;
    }


i radi.
hvala Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
angelika
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 02. 2011. (17:26:51)
Postovi: (5F)16
Sarma = la pohva - posuda
= 3 - 1

PostPostano: 13:18 uto, 22. 5. 2012    Naslov: Citirajte i odgovorite

Jel mi može netko reći gdje griješim u ispisu vezane liste? Već se dva sata mučim pokušavajući ispisati to čudo :oops:
[code:1]#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Automobil{
char ime[31];
int cijena;
struct Automobil *next;
}au;


au* ubaci_na_pocetak (au* start, int x, char a[])
{
au* novi=(au*)malloc(sizeof(au));
if(novi==NULL)
{
printf("greska pri alokaciji");
exit(-1);
}
novi->cijena=x;
strcpy(novi->ime,a);
novi->next= start;
return start;
}

au* izbaci_s_pocetka( au* start)
{
if(start!=NULL)
{
au* izbaceni=start;
start=izbaceni->next;
free(izbaceni);
}
return start;
}

void brisanje_liste(au* start)
{
while(start!=NULL)
{
start=izbaci_s_pocetka(start);
}
}

void ispis(au* start)
{
au *p;
printf("Ispis liste\n");
for(p=start; p!=NULL; p=p->next)
{

printf(" %s %d" ,p->ime , p->cijena);

}
}
int main()
{
int x;
char odg;
char autek[31];
au* lista=NULL;
au *p;

while(1)
{
printf("Ucitaj ime\n");
scanf(" %[^\n]", autek);

printf("Ucitaj cijenu\n");
scanf("%d",&x);

lista=ubaci_na_pocetak(lista,x, autek);
printf("Zelis li ucitati jos auta? d/n");
scanf(" %c",&odg);
if(odg=='n') break;

}

ispis(lista);

brisanje_liste(lista);

return 0;

}
[/code:1]
Jel mi može netko reći gdje griješim u ispisu vezane liste? Već se dva sata mučim pokušavajući ispisati to čudo Embarassed
Kod:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Automobil{
    char ime[31];
    int cijena;
    struct Automobil *next;
}au;


au* ubaci_na_pocetak (au* start, int x, char a[])
{
    au* novi=(au*)malloc(sizeof(au));
    if(novi==NULL)
    {
        printf("greska pri alokaciji");
        exit(-1);
    }
    novi->cijena=x;
    strcpy(novi->ime,a);
    novi->next= start;
    return start;
}

au* izbaci_s_pocetka( au* start)
{
    if(start!=NULL)
    {
        au* izbaceni=start;
        start=izbaceni->next;
        free(izbaceni);
    }
    return start;
}

void brisanje_liste(au* start)
{
    while(start!=NULL)
    {
        start=izbaci_s_pocetka(start);
    }
}

void ispis(au* start)
{
    au *p;
    printf("Ispis liste\n");
    for(p=start; p!=NULL; p=p->next)
        {

            printf(" %s %d" ,p->ime , p->cijena);

        }
}
int main()
{
    int x;
    char odg;
    char autek[31];
    au* lista=NULL;
    au *p;

    while(1)
    {
        printf("Ucitaj ime\n");
        scanf(" %[^\n]", autek);

        printf("Ucitaj cijenu\n");
        scanf("%d",&x);

       lista=ubaci_na_pocetak(lista,x, autek);
       printf("Zelis li ucitati jos auta? d/n");
       scanf(" %c",&odg);
       if(odg=='n') break;

    }

    ispis(lista);

    brisanje_liste(lista);

    return 0;

}


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 13:57 uto, 22. 5. 2012    Naslov: Citirajte i odgovorite

Vracas krivi pocetak liste u [tt]ubaci_na_pocetak()[/tt]. :)
Vracas krivi pocetak liste u ubaci_na_pocetak(). Smile



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
angelika
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 02. 2011. (17:26:51)
Postovi: (5F)16
Sarma = la pohva - posuda
= 3 - 1

PostPostano: 14:05 uto, 22. 5. 2012    Naslov: Citirajte i odgovorite

[quote="vsego"]Vracas krivi pocetak liste u [tt]ubaci_na_pocetak()[/tt]. :)[/quote]
#-o
Hvala! :D
vsego (napisa):
Vracas krivi pocetak liste u ubaci_na_pocetak(). Smile

d'oh!
Hvala! Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
simon11
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 10. 2011. (21:02:52)
Postovi: (7C)16
Spol: zombi
Sarma = la pohva - posuda
23 = 25 - 2
Lokacija: FunkyTown

PostPostano: 14:39 uto, 29. 5. 2012    Naslov: Citirajte i odgovorite

imam i ja problem s ispisom,tocnije napravim program koji samo ucita listu i potom ju ispise i to sve napravi pravilno,ali se poslije ispisa srusi.pa ako netko moze reci zasto.evo kod
[code:1]#include<stdio.h>

typedef struct _razlomak
{
int x,y;
struct _razlomak *next;
}razlomak;

int main(void)
{
razlomak *glava=NULL,*pom,*pom2,*new;
char c='d';
int x,y;
while(c=='d') //unos liste
{
new=(razlomak*)malloc(sizeof(razlomak));
scanf("%d%d",&x,&y);
new->x=x;
new->y=y;
if (glava)
pom=pom->next=new;
else
pom=glava=new;
printf("opet? d/n");
scanf(" %c",&c);
}
pom2=glava;
while(pom2) //ipis liste
{
printf("%d/%d\n",pom2->x,pom2->y);
pom2=pom2->next;
}
printf("ovdje");//ovaj dio se ne ispise jer se program srusi
for(pom=glava;pom;pom=pom2) //oslobadanje liste
{
pom2=pom->next;
free(pom);
}
return 0;
}
[/code:1]
imam i ja problem s ispisom,tocnije napravim program koji samo ucita listu i potom ju ispise i to sve napravi pravilno,ali se poslije ispisa srusi.pa ako netko moze reci zasto.evo kod
Kod:
#include<stdio.h>

typedef struct _razlomak
{
    int x,y;
    struct _razlomak *next;
}razlomak;

int main(void)
{
    razlomak *glava=NULL,*pom,*pom2,*new;
    char c='d';
    int x,y;
    while(c=='d') //unos liste
    {
        new=(razlomak*)malloc(sizeof(razlomak));
        scanf("%d%d",&x,&y);
        new->x=x;
        new->y=y;
        if (glava)
          pom=pom->next=new;
        else
          pom=glava=new;
        printf("opet? d/n");
        scanf(" %c",&c);
    }
    pom2=glava;
    while(pom2) //ipis liste
    {
        printf("%d/%d\n",pom2->x,pom2->y);
        pom2=pom2->next;
    }
    printf("ovdje");//ovaj dio se ne ispise jer se program srusi
    for(pom=glava;pom;pom=pom2) //oslobadanje liste
    {
        pom2=pom->next;
        free(pom);
    }
return 0;
}



_________________
#Usa
getting recognized
[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 15:55 uto, 29. 5. 2012    Naslov: Citirajte i odgovorite

Fali ti da [tt]next[/tt] od zadnjeg, nakon ucitavanja, stavis na [tt]NULL[/tt], pa ti ispis "izleti" iz liste.
Fali ti da next od zadnjeg, nakon ucitavanja, stavis na NULL, pa ti ispis "izleti" iz liste.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
simon11
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 10. 2011. (21:02:52)
Postovi: (7C)16
Spol: zombi
Sarma = la pohva - posuda
23 = 25 - 2
Lokacija: FunkyTown

PostPostano: 16:40 uto, 29. 5. 2012    Naslov: Citirajte i odgovorite

[quote="vsego"]Fali ti da [tt]next[/tt] od zadnjeg, nakon ucitavanja, stavis na [tt]NULL[/tt], pa ti ispis "izleti" iz liste.[/quote]

da.. :oops: hvala :D
vsego (napisa):
Fali ti da next od zadnjeg, nakon ucitavanja, stavis na NULL, pa ti ispis "izleti" iz liste.


da.. Embarassed hvala Very Happy



_________________
#Usa
getting recognized
[Vrh]
Korisnički profil Pošaljite privatnu poruku
quark
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 22. 10. 2011. (16:47:39)
Postovi: (DA)16
Spol: muško
Sarma = la pohva - posuda
20 = 26 - 6

PostPostano: 19:44 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

Evo, sad meni treba pomoć :D
Riječ je o zadatku 8.1.45.: (u spoileru je da bude preglednije)

8.1.44: [spoiler]U datoteci su popisane nogometne utakmice, u svakom retku po jedna i
to u sljedecem formatu:
Klub 1:Klub 2=a:b
Brojevi a i b oznacavaju broj golova koje je dao “Klub 1” odnosno “Klub 2”. Pobjeda
donosi 3 boda, izjednacenje 1 bod, a poraz 0 bodova. Napisite funkciju koja kao argumente prima nazive ulazne i izlazne datoteke, te ucitava podatke o utakmicama (snimljene
na opisani nacin) iz ulazne datoteke. U izlaznu datoteku funckija treba ispisati konacnu
rang-listu klubova sortiranu silazno prema broju bodova, u formatu pogodnom za citanje pomocu tablicnih kalkulatora.
Mozete pretpostaviti da je ukupni broj klubova najvise 20, te da je naziv svakog kluba
najvise 50 znakova.[/spoiler]

8.1.45: Rijesite prethodni zadatak bez ogranicenja na najveci moguci broj klubova.
Upute. Izmijenite funkciju teamIndex() tako da po potrebi realocira memoriju za nove
elemente polja. Pri tome argument list mora biti tipa team**. Takoder, potrebno je
prilagoditi deklaraciju liste momcadi u funkciji football().

Meni nije jasno zašto treba biti [tt]team**[/tt], tj. [tt]tablica**[/tt]?
Imamo pokazivač na structove i onda svaki put realociramo tu varijablu i na to zadnje realocirano mjesto zalijepimo podatke. Ja sam onda napisao program po svojoj intuiciji i ruši se :oops:
(I ako stavim za globalnu varijantu [tt]klub tablica[0][/tt] compiler se buni; zar to nije ekvivalentno :?)

[code:1]typedef struct
{
char imeKluba[50];
int brojBodova;
} klub;

klub *tablica=NULL;
int brojKlubova=0;

void dodajBodove(char ime[], int bodovi)
{
int i;

for(i=0;i<brojKlubova;++i)
if(strcmp(ime, tablica[i].imeKluba)==0)
{
tablica[i].brojBodova+=bodovi;
return;
}

tablica=(klub*) realloc(tablica, sizeof(klub));
strcpy(tablica[brojKlubova].imeKluba, ime);
tablica[brojKlubova].brojBodova=bodovi;
++brojKlubova;

return;
}

void napraviTablicu(FILE *fin, FILE *fout)
{
int i, j;
while(1)
{
char klub1[50], klub2[50];
int gol1, gol2;
if(fscanf(fin, " %[^:]:%[^=]=%d:%d", klub1, klub2, &gol1, &gol2)!=4)
break;
if(gol1>gol2)
{ dodajBodove(klub1, 3);
dodajBodove(klub2, 0);
}
if(gol2>gol1)
{
dodajBodove(klub2, 3);
dodajBodove(klub1, 0);
}
if(gol2==gol1)
{
dodajBodove(klub1, 1);
dodajBodove(klub2, 1);
}
}
for(i=0;i<brojKlubova;i++)
for(j=i+1;j<brojKlubova;j++)
if(tablica[i].brojBodova < tablica[j].brojBodova)
{
klub temp = tablica[i];
tablica[i]=tablica[j];
tablica[j]=temp;

}

for(i=0;i<brojKlubova;i++)
fprintf(fout, "%s;%d\n", tablica[i].imeKluba, tablica[i].brojBodova);
return;


}[/code:1]

Unaprijed hvala :)
Evo, sad meni treba pomoć Very Happy
Riječ je o zadatku 8.1.45.: (u spoileru je da bude preglednije)

8.1.44:
Spoiler [hidden; click to show]:


8.1.45: Rijesite prethodni zadatak bez ogranicenja na najveci moguci broj klubova.
Upute. Izmijenite funkciju teamIndex() tako da po potrebi realocira memoriju za nove
elemente polja. Pri tome argument list mora biti tipa team**. Takoder, potrebno je
prilagoditi deklaraciju liste momcadi u funkciji football().

Meni nije jasno zašto treba biti team**, tj. tablica**?
Imamo pokazivač na structove i onda svaki put realociramo tu varijablu i na to zadnje realocirano mjesto zalijepimo podatke. Ja sam onda napisao program po svojoj intuiciji i ruši se Embarassed
(I ako stavim za globalnu varijantu klub tablica[0] compiler se buni; zar to nije ekvivalentno Confused)

Kod:
typedef struct
{
    char imeKluba[50];
    int brojBodova;
} klub;

klub *tablica=NULL;
int brojKlubova=0;

void dodajBodove(char ime[], int bodovi)
{
    int i;

    for(i=0;i<brojKlubova;++i)
        if(strcmp(ime, tablica[i].imeKluba)==0)
            {
                tablica[i].brojBodova+=bodovi;
                return;
            }

    tablica=(klub*) realloc(tablica, sizeof(klub));
    strcpy(tablica[brojKlubova].imeKluba, ime);
    tablica[brojKlubova].brojBodova=bodovi;
    ++brojKlubova;

    return;
}

void napraviTablicu(FILE *fin, FILE *fout)
{
    int i, j;
    while(1)
    {
        char klub1[50], klub2[50];
        int gol1, gol2;
        if(fscanf(fin, " %[^:]:%[^=]=%d:%d", klub1, klub2, &gol1, &gol2)!=4)
            break;
        if(gol1>gol2)
            {   dodajBodove(klub1, 3);
                dodajBodove(klub2, 0);
            }
        if(gol2>gol1)
            {
                dodajBodove(klub2, 3);
                dodajBodove(klub1, 0);
            }
        if(gol2==gol1)
            {
                dodajBodove(klub1, 1);
                dodajBodove(klub2, 1);
            }
    }
    for(i=0;i<brojKlubova;i++)
            for(j=i+1;j<brojKlubova;j++)
                if(tablica[i].brojBodova < tablica[j].brojBodova)
                {
                    klub temp = tablica[i];
                    tablica[i]=tablica[j];
                    tablica[j]=temp;

                }

        for(i=0;i<brojKlubova;i++)
            fprintf(fout, "%s;%d\n", tablica[i].imeKluba, tablica[i].brojBodova);
        return;


}


Unaprijed hvala Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 19:57 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

[quote="quark"]Meni nije jasno zašto treba biti team**, tj. tablica**?[/quote]

Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
[tt]tablica=(klub*) realloc(tablica, ...);[/tt]
a [tt]tablica[/tt] je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa [tt]klub*[/tt], pointer na njega je [tt]klub**[/tt], a tvoja realokacija tada postaje
[tt]*tablica=(klub**) realloc(*tablica, ...);[/tt]

Tebi se rusi zbog krive realokacije. Funkcija [tt]realloc()[/tt] kao drugi argument prima [b]novu velicinu niza[/b] ([tt](brojKlubova+1) * sizeof(klub)[/tt]), a ne [strike]kolicinu dodane memorije[/strike] ([tt]sizeof(klub)[/tt]).
quark (napisa):
Meni nije jasno zašto treba biti team**, tj. tablica**?


Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
tablica=(klub*) realloc(tablica, ...);
a tablica je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa klub*, pointer na njega je klub**, a tvoja realokacija tada postaje
*tablica=(klub**) realloc(*tablica, ...);

Tebi se rusi zbog krive realokacije. Funkcija realloc() kao drugi argument prima novu velicinu niza ((brojKlubova+1) * sizeof(klub)), a ne kolicinu dodane memorije (sizeof(klub)).



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
quark
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 22. 10. 2011. (16:47:39)
Postovi: (DA)16
Spol: muško
Sarma = la pohva - posuda
20 = 26 - 6

PostPostano: 20:32 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

[quote="vsego"]

Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
[tt]tablica=(klub*) realloc(tablica, ...);[/tt]
a [tt]tablica[/tt] je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa [tt]klub*[/tt], pointer na njega je [tt]klub**[/tt], a tvoja realokacija tada postaje
[tt]*tablica=(klub**) realloc(*tablica, ...);[/tt]
[/quote]

A ako funkciji pošaljem (već u mainu definiran) [tt]tablica[/tt], zar to nije ekvivalentno s [tt]&tablica[0][/tt] pa je to onda varijabilni argument?

[quote]Tebi se rusi zbog krive realokacije. Funkcija [tt]realloc()[/tt] kao drugi argument prima [b]novu velicinu niza[/b] ([tt](brojKlubova+1) * sizeof(klub)[/tt]), a ne [strike]kolicinu dodane memorije[/strike] ([tt]sizeof(klub)[/tt]).[/quote]

Da da, hvala puno :)
vsego (napisa):


Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
tablica=(klub*) realloc(tablica, ...);
a tablica je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa klub*, pointer na njega je klub**, a tvoja realokacija tada postaje
*tablica=(klub**) realloc(*tablica, ...);


A ako funkciji pošaljem (već u mainu definiran) tablica, zar to nije ekvivalentno s &tablica[0] pa je to onda varijabilni argument?

Citat:
Tebi se rusi zbog krive realokacije. Funkcija realloc() kao drugi argument prima novu velicinu niza ((brojKlubova+1) * sizeof(klub)), a ne kolicinu dodane memorije (sizeof(klub)).


Da da, hvala puno Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 21:11 čet, 31. 5. 2012    Naslov: Citirajte i odgovorite

[quote="quark"]A ako funkciji pošaljem (već u mainu definiran) [tt]tablica[/tt], zar to nije ekvivalentno s [tt]&tablica[0][/tt] pa je to onda varijabilni argument?[/quote]

Da, [tt]*tablica[/tt] iliti [tt]tablica[0][/tt] [b]je[/b] varijabilni (tj. original), ali sama varijabla [tt]tablica[/tt] je kopija. Posto ti kod realokacije imas [tt]tablica = ...[/tt], mijenjas tu kopiju.

Nisi poslusao moj savjet i procitao [url=http://degiorgi.math.hr/forum/viewtopic.php?p=171658#171658]moj post o varijabilnim argumentima[/url], je l' da? :P
quark (napisa):
A ako funkciji pošaljem (već u mainu definiran) tablica, zar to nije ekvivalentno s &tablica[0] pa je to onda varijabilni argument?


Da, *tablica iliti tablica[0] je varijabilni (tj. original), ali sama varijabla tablica je kopija. Posto ti kod realokacije imas tablica = ..., mijenjas tu kopiju.

Nisi poslusao moj savjet i procitao moj post o varijabilnim argumentima, je l' da? Razz



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Idite na Prethodno  1, 2, 3  Sljedeće
Stranica 2 / 3.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan