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

Zadaci za vježbu (objasnjenje gradiva)
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 18:16 ned, 16. 1. 2011    Naslov: Zadaci za vježbu Citirajte i odgovorite

u zadacima za vježbu http://web.math.hr/nastava/spa/files/zadaci_za_vjezbu_kolokvij2.pdf

u 4.zadatku,kako da se krećem kroz npr.domenu? jel ok pretpostavit da je domena polje,pa for petljom?
i kako kroz kodomenu? dobim li npr.M(d) tako da pozovem funkciju M(za koju pretpostavimo da je napisana),ili je MAPPING struktura? ali onda neznam je li polje struktura,ili vezana lista itd..?

5.zadatak,njega uopće neznam riješiti neovisno o implementaciji,pa ako netko može napisati rješenje? uopće ne vidim da bi mi neka funkcija iz a.t.p.RELATION bila korisna..

i 6.zad isto?

hvala! :D
u zadacima za vježbu http://web.math.hr/nastava/spa/files/zadaci_za_vjezbu_kolokvij2.pdf

u 4.zadatku,kako da se krećem kroz npr.domenu? jel ok pretpostavit da je domena polje,pa for petljom?
i kako kroz kodomenu? dobim li npr.M(d) tako da pozovem funkciju M(za koju pretpostavimo da je napisana),ili je MAPPING struktura? ali onda neznam je li polje struktura,ili vezana lista itd..?

5.zadatak,njega uopće neznam riješiti neovisno o implementaciji,pa ako netko može napisati rješenje? uopće ne vidim da bi mi neka funkcija iz a.t.p.RELATION bila korisna..

i 6.zad isto?

hvala! Very Happy


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


Pridružen/a: 05. 10. 2009. (17:48:30)
Postovi: (143)16
Spol: muško
Sarma = la pohva - posuda
83 = 86 - 3

PostPostano: 22:19 ned, 16. 1. 2011    Naslov: Citirajte i odgovorite

Pa bas ti kaze da je (ko)domena skup malih slova eng. abecede tak da ti ne treba polje, dovoljno je for(i='a'; i<='z'; ++i)
ako zelis izracunat f(x) za neki x, onda to radis sa COMPUTE

5. zadatak:


[code:1]
int tranzitivna(RELATION R, int n){
int i,j;
SET pom1,pom2,slika,prazan;
SET_MAKE_NULL(&prazan);
for(i=1; i<=n; ++i){
SET_MAKE_NULL(&pom1);
SET_MAKE_NULL(&slika); //ovdje cuvamo sve elemente s kojima je i u relaciji
COMPUTE2(R,i,&pom1);
UNION(prazan,pom1,&slika); //kopiramo "pom1" u "slika" jer ga moramo cuvati
while(!SUBSET(pom1,prazan)){ //ovako provjerimo jel pom1 prazan
SET_MAKE_NULL(&pom2);
j=MIN(pom1); //za svaki element u skupu "pom1"
COMPUTE2(R,j,&pom2); //pogledamo skup svih koji su u relaciji s njim
if(!SUBSET(pom2,slika)) return 0; //i je li taj skup podskup od onih koji su u relaciji s i.
DELETE(j,&pom1); //Ako nije, R nije tranzitivna
}
}
return 1;
}
[/code:1]

b) zadatak: samo ides po nekom skupu u kojem cuvas domain1 i radis COMPUTE2. ispises dobiveni skup, a iz onog skupa u kojem cuvas domain1 obrises ispisane elemente

6) malo kompliciraniji za natipkat, al na slican nacin se kreces po skupovima...
Pa bas ti kaze da je (ko)domena skup malih slova eng. abecede tak da ti ne treba polje, dovoljno je for(i='a'; i⇐'z'; ++i)
ako zelis izracunat f(x) za neki x, onda to radis sa COMPUTE

5. zadatak:


Kod:

int tranzitivna(RELATION R, int n){
    int i,j;
    SET pom1,pom2,slika,prazan;
    SET_MAKE_NULL(&prazan);
    for(i=1; i<=n; ++i){
             SET_MAKE_NULL(&pom1);
             SET_MAKE_NULL(&slika);                                       //ovdje cuvamo sve elemente s kojima je i u relaciji
             COMPUTE2(R,i,&pom1);
             UNION(prazan,pom1,&slika);                                  //kopiramo "pom1" u "slika" jer ga moramo cuvati
             while(!SUBSET(pom1,prazan)){                              //ovako provjerimo jel pom1 prazan
                                         SET_MAKE_NULL(&pom2);
                                         j=MIN(pom1);                            //za svaki element u skupu "pom1"
                                         COMPUTE2(R,j,&pom2);               //pogledamo skup svih koji su u relaciji s njim
                                         if(!SUBSET(pom2,slika)) return 0; //i je li taj skup podskup od onih koji su u relaciji s i.
                                         DELETE(j,&pom1);                       //Ako nije, R nije tranzitivna
                                         }
                                         }
    return 1;
}


b) zadatak: samo ides po nekom skupu u kojem cuvas domain1 i radis COMPUTE2. ispises dobiveni skup, a iz onog skupa u kojem cuvas domain1 obrises ispisane elemente

6) malo kompliciraniji za natipkat, al na slican nacin se kreces po skupovima...


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


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 16:56 sri, 19. 1. 2011    Naslov: Citirajte i odgovorite

hvalaa!!
i može 9. i 13., odnosno samo kako glasi rekurzija i zašto? to isto nemam ideju?
hvalaa!!
i može 9. i 13., odnosno samo kako glasi rekurzija i zašto? to isto nemam ideju?


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


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 19:04 uto, 19. 11. 2013    Naslov: Citirajte i odgovorite

Ako ima tko volje, da mi kaže gdje griješim, ne mogu više vremena izgubiti na traženje greške :)

Program treba napraviti sljedeće: izraz u infixu prebaciti u postfix. Pri tome sam ja napravila da ne izbacuje elemente po redu na ekran, nego da ih sprema u stog S, te ga kasnije preokrenem u stogu O i ispisujem. Problem je što ignorira operatore, dakle, ispisuje samo operande. Eto, to je to :)


[code:1]
#include<stdio.h>
#include<stdlib.h>

typedef char elementtype;

typedef struct celltag{
elementtype element;
struct celltag *next;
}celltype;

typedef celltype *Stack;

void StMakeNull(Stack *S){
*S=NULL;}

int StEmpty(Stack S){
if(S==NULL) return 1;
else return 0;}

void StPush(elementtype x, Stack *S){
celltype *temp;
temp=*S;
*S=(celltype*)malloc(sizeof(celltype));
(*S)->element=x;
(*S)->next=temp;
}

void StPop(Stack *S){
if(StEmpty(*S)) return(202);
else{
celltype *temp;
temp=*S;
*S=(*S)->next;
free(temp);}}

elementtype StTop(Stack S){
if(StEmpty(S)) exit(202);
else return S->element;}

int prior(char c){
if(c=='+' || c=='-') return 1;
if(c=='(') return 0;
if(c=='*' || c=='/') return 2;
if(c=='p') return 3;
}



int main(){

Stack S, P, O;
elementtype x;
StMakeNull(&S);
StMakeNull(&O);
StMakeNull(&P);
char zn;

do{
printf("Upisi clan:\n");
scanf(" %c", &x);
if(x<='Z' && x>='A') StPush(x,&S);
else {
if(StEmpty(P) || x=='(')
StPush(x,&P);
else if(!StEmpty(P) && x==')'){
while(StTop(P)!='('){
StPush(StTop(P),&S);
StPop(&P);
} StPop(&P);}
else if(!StEmpty(P) && prior(x)>=prior(StTop(P)))
StPush(x,&P);
else if(!StEmpty(P) && prior(x)<=prior(StTop(P))){
while(!StEmpty(P) && prior(StTop(P)>=prior(x))){
StPush(StTop(P),&S);
StPop(&P);}
StPush(x,&S);}
}
printf("Zelis li dalje? d:n\n");
scanf(" %c", &zn);
}while(zn=='d');

while(!StEmpty(S)){
StPush(StTop(S),&O);
StPop(&S);
}
while(!StEmpty(O)){
printf("\n%c\n", StTop(O));
StPop(&O);
}

return 0;}[/code:1]
Ako ima tko volje, da mi kaže gdje griješim, ne mogu više vremena izgubiti na traženje greške Smile

Program treba napraviti sljedeće: izraz u infixu prebaciti u postfix. Pri tome sam ja napravila da ne izbacuje elemente po redu na ekran, nego da ih sprema u stog S, te ga kasnije preokrenem u stogu O i ispisujem. Problem je što ignorira operatore, dakle, ispisuje samo operande. Eto, to je to Smile


Kod:

#include<stdio.h>
#include<stdlib.h>

typedef char elementtype;

typedef struct celltag{
    elementtype element;
    struct celltag *next;
    }celltype;

typedef celltype *Stack;

void StMakeNull(Stack *S){
*S=NULL;}

int StEmpty(Stack S){
if(S==NULL) return 1;
else return 0;}

void StPush(elementtype x, Stack *S){
celltype *temp;
temp=*S;
*S=(celltype*)malloc(sizeof(celltype));
(*S)->element=x;
(*S)->next=temp;
}

void StPop(Stack *S){
if(StEmpty(*S)) return(202);
else{
    celltype *temp;
    temp=*S;
    *S=(*S)->next;
    free(temp);}}

elementtype StTop(Stack S){
if(StEmpty(S)) exit(202);
else return S->element;}

int prior(char c){
if(c=='+' || c=='-') return 1;
if(c=='(') return 0;
if(c=='*' || c=='/') return 2;
if(c=='p') return 3;
 }



int main(){

Stack S, P, O;
elementtype x;
StMakeNull(&S);
StMakeNull(&O);
StMakeNull(&P);
char zn;

do{
    printf("Upisi clan:\n");
    scanf(" %c", &x);
    if(x<='Z' && x>='A') StPush(x,&S);
    else {
        if(StEmpty(P) || x=='(')
            StPush(x,&P);
        else if(!StEmpty(P) && x==')'){
            while(StTop(P)!='('){
                    StPush(StTop(P),&S);
                    StPop(&P);
                  } StPop(&P);}
        else if(!StEmpty(P) && prior(x)>=prior(StTop(P)))
            StPush(x,&P);
        else if(!StEmpty(P) && prior(x)<=prior(StTop(P))){
                while(!StEmpty(P) && prior(StTop(P)>=prior(x))){
                    StPush(StTop(P),&S);
                    StPop(&P);}
                StPush(x,&S);}
}
    printf("Zelis li dalje? d:n\n");
    scanf(" %c", &zn);
}while(zn=='d');

while(!StEmpty(S)){
    StPush(StTop(S),&O);
    StPop(&S);
}
while(!StEmpty(O)){
    printf("\n%c\n", StTop(O));
    StPop(&O);
}

return 0;}


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


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 23:46 uto, 19. 11. 2013    Naslov: Citirajte i odgovorite

Znam da mi se kodovi čine dugački, ali tako je samo zbog implementacije, bitna je samo jedna funkcija i main :D

Nego, xD ovdje me muči sljedeće:
program radi: Ubacuje usmjeren graf na način da za svaki vrh zapisuje u koji vrh ide, tako da napravi polje vrhova, u svako polje ubacuje red vrhova (nije tako komplicirano). I treba napisati duljinu između dva vrha koja ja ubacim. Problem je što nekada mi da točnu duljinu, a nekada ju smanji za jedan (ali samo za jedan). Gdje je problem?

[code:1]
#include<stdio.h>
#include<stdlib.h>

#define max 1000
typedef double elementtype ;

typedef struct{
elementtype elements[max];
int front, rear;
} Queue;

int addone(int i){
return ((i+1)%max);}

void QuMakeNull(Queue *Q){
Q->front=0;
Q->rear=max-1;}

int QuEmpty(Queue Q){
if(addone(Q.rear)==Q.front) return 1;
else return 0;}

void QuEnqueue(elementtype x, Queue *Q){
if(addone(addone(Q->rear))==Q->front) exit(301);
else{
Q->rear=addone(Q->rear);
Q->elements[Q->rear]=x;}}

void QuDequeue(Queue *Q){
if(QuEmpty((*Q))) exit(302);
else Q->front=addone(Q->front);}

elementtype QuFront(Queue Q){
if(QuEmpty(Q)) exit(302);
else return Q.elements[Q.front];}

int duljina(Queue G[], int p, int z){

int bio[max];
int i, dulj=-1;
Queue Q;
QuMakeNull(&Q);
if(p==z) return 0;

for(i=0; i<max; i++)
bio[i]=0;

QuEnqueue(p,&Q); bio[p]=1;

while(!QuEmpty(Q)){
int vrh=QuFront(Q);
++dulj;
while(!QuEmpty(G[vrh])){
int susjed=QuFront(G[vrh]);
QuDequeue(&G[vrh]);
if(!bio[susjed]){
QuEnqueue(susjed,&Q);
bio[susjed]=1;
if(susjed==z) return dulj;}}
QuDequeue(&Q);
}
}

int main(){

int n, i, x, p, z;
Queue *graf;
Queue G;
graf=(Queue*)malloc(n*sizeof(Queue));
char zn;

printf("Upisi duljinu:\n");
scanf("%d", &n);

for(i=0; i<n; i++){
QuMakeNull(&G);
do{
printf("Upisi cvorove u koje ide vrh %d:\n", i);
scanf("%d", &x);
QuEnqueue(x,&G);
printf("Jos?\n");
scanf(" %c", &zn);
}while(zn=='d');
graf[i]=G; }

printf("Duljina izmedu koja dva vrha:\n");
scanf("%d%d", &p,&z);

printf("\nje jednaka: %d\n", duljina(graf,p,z));

return 0;}
[/code:1]
Znam da mi se kodovi čine dugački, ali tako je samo zbog implementacije, bitna je samo jedna funkcija i main Very Happy

Nego, xD ovdje me muči sljedeće:
program radi: Ubacuje usmjeren graf na način da za svaki vrh zapisuje u koji vrh ide, tako da napravi polje vrhova, u svako polje ubacuje red vrhova (nije tako komplicirano). I treba napisati duljinu između dva vrha koja ja ubacim. Problem je što nekada mi da točnu duljinu, a nekada ju smanji za jedan (ali samo za jedan). Gdje je problem?

Kod:

#include<stdio.h>
#include<stdlib.h>

#define max 1000
typedef double elementtype ;

typedef struct{
    elementtype elements[max];
    int front, rear;
    } Queue;

int addone(int i){
return ((i+1)%max);}

void QuMakeNull(Queue *Q){
Q->front=0;
Q->rear=max-1;}

int QuEmpty(Queue Q){
if(addone(Q.rear)==Q.front) return 1;
else return 0;}

void QuEnqueue(elementtype x, Queue *Q){
if(addone(addone(Q->rear))==Q->front) exit(301);
else{
    Q->rear=addone(Q->rear);
    Q->elements[Q->rear]=x;}}

void QuDequeue(Queue *Q){
if(QuEmpty((*Q))) exit(302);
else Q->front=addone(Q->front);}

elementtype QuFront(Queue Q){
if(QuEmpty(Q)) exit(302);
else return Q.elements[Q.front];}

int duljina(Queue G[], int p, int z){

int bio[max];
int i, dulj=-1;
Queue Q;
QuMakeNull(&Q);
if(p==z) return 0;

for(i=0; i<max; i++)
    bio[i]=0;

QuEnqueue(p,&Q); bio[p]=1;

while(!QuEmpty(Q)){
    int vrh=QuFront(Q);
    ++dulj;
    while(!QuEmpty(G[vrh])){
        int susjed=QuFront(G[vrh]);
        QuDequeue(&G[vrh]);
        if(!bio[susjed]){
            QuEnqueue(susjed,&Q);
            bio[susjed]=1;
            if(susjed==z) return dulj;}}
    QuDequeue(&Q);
}
}

int main(){

int n, i, x, p, z;
Queue *graf;
Queue G;
graf=(Queue*)malloc(n*sizeof(Queue));
char zn;

printf("Upisi duljinu:\n");
scanf("%d", &n);

for(i=0; i<n; i++){
    QuMakeNull(&G);
do{
    printf("Upisi cvorove u koje ide vrh %d:\n", i);
    scanf("%d", &x);
    QuEnqueue(x,&G);
    printf("Jos?\n");
    scanf(" %c", &zn);
}while(zn=='d');
    graf[i]=G; }

printf("Duljina izmedu koja dva vrha:\n");
scanf("%d%d", &p,&z);

printf("\nje jednaka: %d\n", duljina(graf,p,z));

return 0;}


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


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 15:47 sri, 20. 11. 2013    Naslov: Citirajte i odgovorite

Zar nitko :(
Zar nitko Sad


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


Pridružen/a: 07. 05. 2012. (15:14:14)
Postovi: (11)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 20:12 sri, 20. 11. 2013    Naslov: Citirajte i odgovorite

http://web.math.pmf.unizg.hr/nastava/spa/files/SPAhanoiqueue.pdf

Moze objasnjenje polja bio[] u zadatku 9?Koja je uopce njegova uloga u kodu?
http://web.math.pmf.unizg.hr/nastava/spa/files/SPAhanoiqueue.pdf

Moze objasnjenje polja bio[] u zadatku 9?Koja je uopce njegova uloga u kodu?


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


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 21:07 sri, 20. 11. 2013    Naslov: Citirajte i odgovorite

@Studoš...

dok prolaziš kroz graf, ti želiš zapravo za jedan čvor ispisati u koje čvorove on može ići. naravno, neki se mogu i ponavljati, recimo da imaš G[0]=(1,2) i G[1]=(0) tada bi beskonačno za 0 išao u 1 pa u 0 pa u 1 pa u 0...uglavnom, u bio[i]=0 ili 1 bilježiš jesi li već prolazio tim čvorom. ako jesi, zapišeš 1, tako se nećeš dovesti u ovu situaciju...
@Studoš...

dok prolaziš kroz graf, ti želiš zapravo za jedan čvor ispisati u koje čvorove on može ići. naravno, neki se mogu i ponavljati, recimo da imaš G[0]=(1,2) i G[1]=(0) tada bi beskonačno za 0 išao u 1 pa u 0 pa u 1 pa u 0...uglavnom, u bio[i]=0 ili 1 bilježiš jesi li već prolazio tim čvorom. ako jesi, zapišeš 1, tako se nećeš dovesti u ovu situaciju...


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


Pridružen/a: 07. 05. 2012. (15:14:14)
Postovi: (11)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 22:57 sri, 20. 11. 2013    Naslov: Citirajte i odgovorite

Ok,jasno.Hvala ti:)
Ok,jasno.Hvala ti:)


[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 2. godine -> Strukture podataka i algoritmi Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
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