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

Pomoc oko zadatka
WWW:
Idite na Prethodno  1, 2, 3, 4, 5, 6, 7  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
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: 18:47 sri, 2. 1. 2013    Naslov: Citirajte i odgovorite

[quote="Redeemer"]
ako sam dobro shvatio

<snip>

[/quote]

Dobro si shvatio.

Dvije napomene:

1. Taj način zamjene funkcionira samo kada se radi o dinamički alociranoj matrici. Ako je alokacija izvršena automatski, onda se mora vršiti zamjena član po član.

2. Jasno je što si mislio kad si napisao [tt]array[1][][/tt], no bilo bi dobro imati na umu da to nije baš ispravno napisano. Prazne uglate zagrade nemaju nikakvo značenje, osim pri deklaraciji parametara funkcije. Ono što se zapravo događa je zamjena pointera [tt]array[1][/tt] i [tt]array[2][/tt].
Redeemer (napisa):

ako sam dobro shvatio

<snip>



Dobro si shvatio.

Dvije napomene:

1. Taj način zamjene funkcionira samo kada se radi o dinamički alociranoj matrici. Ako je alokacija izvršena automatski, onda se mora vršiti zamjena član po član.

2. Jasno je što si mislio kad si napisao array[1][], no bilo bi dobro imati na umu da to nije baš ispravno napisano. Prazne uglate zagrade nemaju nikakvo značenje, osim pri deklaraciji parametara funkcije. Ono što se zapravo događa je zamjena pointera array[1] i array[2].



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
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: 20:52 sri, 2. 1. 2013    Naslov: Citirajte i odgovorite

@Redeemer: Baci oko na skriptu za vjezbe, poglavlje 4.3. Ako razumijes sto se dogadja u memoriji (a tamo je objasnjeno i nacrtano), trebalo bi ti biti kad takva zamjena radi, a kad ne (i zasto).
@Redeemer: Baci oko na skriptu za vjezbe, poglavlje 4.3. Ako razumijes sto se dogadja u memoriji (a tamo je objasnjeno i nacrtano), trebalo bi ti biti kad takva zamjena radi, a kad ne (i zasto).



_________________
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
la mer
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 09. 2012. (17:39:46)
Postovi: (F)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 22:05 ned, 6. 1. 2013    Naslov: Citirajte i odgovorite

Imam problem s code blocksom na novom računalu. Ne rade mi vitičaste zagrade. Može li mi netko dati uputu kako da to riješim?
Imam problem s code blocksom na novom računalu. Ne rade mi vitičaste zagrade. Može li mi netko dati uputu kako da to riješim?


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


Pridružen/a: 31. 10. 2009. (11:56:09)
Postovi: (23)16
Sarma = la pohva - posuda
-2 = 1 - 3

PostPostano: 15:04 čet, 17. 1. 2013    Naslov: Citirajte i odgovorite

Zadatak uchitava broj i niz brojeva i sortira ih po sumi znamenaka. Zanima me znachi li ovo da sam koristila pomochni niz obzirom da sam sumu znamenaka spremila u prvotni niz i onda ga sortirala?

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

int main(){
int n,a[200],i,s=0,t,d,m,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);}
for(i=0;i<n;i++){
t=a[i];
if(t<0) t=-t;
s=0;
while(t>0){
d=t%10;
s=s+d;
t=t/10;}
a[i]=s;}
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
m=a[i];
a[i]=a[j];
a[j]=m;}}}
for(i=0;i<n;i++){
printf("%d\n",a[i]);}

return 0;
}
[/code:1]
Zadatak uchitava broj i niz brojeva i sortira ih po sumi znamenaka. Zanima me znachi li ovo da sam koristila pomochni niz obzirom da sam sumu znamenaka spremila u prvotni niz i onda ga sortirala?

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

int main(){
    int n,a[200],i,s=0,t,d,m,j;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);}
    for(i=0;i<n;i++){
        t=a[i];
        if(t<0) t=-t;
        s=0;
        while(t>0){
            d=t%10;
            s=s+d;
            t=t/10;}
            a[i]=s;}
    for(i=0;i<n-1;i++){
        for(j=i+1;j<n;j++){
        if(a[i]>a[j]){
           m=a[i];
           a[i]=a[j];
           a[j]=m;}}}
    for(i=0;i<n;i++){
        printf("%d\n",a[i]);}

        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: 16:12 čet, 17. 1. 2013    Naslov: Citirajte i odgovorite

Ne, ali znaci da si ispisala sume znamenaka umjesto elemenata ucitanog niza (koje si pogubila kad si ih pregazila sumama), sto nije zadatak.
Ne, ali znaci da si ispisala sume znamenaka umjesto elemenata ucitanog niza (koje si pogubila kad si ih pregazila sumama), sto nije zadatak.



_________________
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
JustLovely
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 09. 2011. (09:16:02)
Postovi: (E)16
Spol: žensko
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 0:49 pet, 18. 1. 2013    Naslov: Citirajte i odgovorite

može pomoć oko zadatka 11.6.17. :
Napisite funkciju koja prima niz realnih brojeva, te iz njega brise
najmanji element. Ako se taj pojavljuje u nizu vise puta, treba obrisati sve njih.

uz pomoć rješenja zad11.6.15 i objašnjena iz skripte rješenje bi izgledalo ovako :

[code:1]
void f(double x[], int *n){
int i, j;
double min;
if (n == 0) return;
min = x[0];
for (i = 1; i < *n; i++)
if (x[i] < min)
min = x[i];

for (i = 0; i < *n; i++) {
if (x[i] == min) {
for (j = i + 1; j < *n; j++)
x[j - 1] = x[j];
(*n)--;

}
}
return;
}

[/code:1]


al mi taj program ne radi kad su 2 uzastopna broja jednaka minimumu npr za niz 1 0 0 2. nakon brisanja min dobijen niz 1 0 2.
pa me zanima jel se to može riješiti tako da nakon (*n)- - ubacin i- - ?
može pomoć oko zadatka 11.6.17. :
Napisite funkciju koja prima niz realnih brojeva, te iz njega brise
najmanji element. Ako se taj pojavljuje u nizu vise puta, treba obrisati sve njih.

uz pomoć rješenja zad11.6.15 i objašnjena iz skripte rješenje bi izgledalo ovako :

Kod:

        void f(double x[], int *n){
   int i, j;
   double min;
   if (n == 0) return;
   min = x[0];
   for (i = 1; i < *n; i++)
      if (x[i] < min)
         min = x[i];
      
   for (i = 0; i < *n; i++) {
      if (x[i] == min) {
         for (j = i + 1; j < *n; j++)
            x[j - 1] = x[j];
         (*n)--;
      
      }
   }
return;
}




al mi taj program ne radi kad su 2 uzastopna broja jednaka minimumu npr za niz 1 0 0 2. nakon brisanja min dobijen niz 1 0 2.
pa me zanima jel se to može riješiti tako da nakon (*n)- - ubacin i- - ?


[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: 1:04 pet, 18. 1. 2013    Naslov: Citirajte i odgovorite

Probas, pa saznas. 8)

Zadatak 11.6.15. brise samo jedan element. Bolja referenca je zadatak 11.6.10.

Pristup koji ti pokusavas dobiti ima kvadratnu slozenost (ovaj u 11.6.10. ima linearnu), no ako bas zelis tako, onda bi to ovako trebalo ici:
[code:1]for (i = 0; i < *n; ) {
if (x[i] == min) {
for (j = i + 1; j < *n; j++)
x[j - 1] = x[j];
(*n)--;
} else
i++[/code:1]
Poanta: ako obrisemo element, onda on dolazi na mjesto [tt]i[/tt] i tek ga treba provjeriti, sto znaci da [tt]i[/tt] u tom slucaju ne povecavamo. Umjesto da ga smanjimo i povecamo, bolje je inkrement prebaciti iz [tt]for()[/tt] u [tt]else[/tt].
Probas, pa saznas. Cool

Zadatak 11.6.15. brise samo jedan element. Bolja referenca je zadatak 11.6.10.

Pristup koji ti pokusavas dobiti ima kvadratnu slozenost (ovaj u 11.6.10. ima linearnu), no ako bas zelis tako, onda bi to ovako trebalo ici:
Kod:
for (i = 0; i < *n; ) {
  if (x[i] == min) {
    for (j = i + 1; j < *n; j++)
      x[j - 1] = x[j];
    (*n)--;
  } else
    i++

Poanta: ako obrisemo element, onda on dolazi na mjesto i i tek ga treba provjeriti, sto znaci da i u tom slucaju ne povecavamo. Umjesto da ga smanjimo i povecamo, bolje je inkrement prebaciti iz for() u else.



_________________
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
JustLovely
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 09. 2011. (09:16:02)
Postovi: (E)16
Spol: žensko
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 1:14 pet, 18. 1. 2013    Naslov: Citirajte i odgovorite

s ovim i- - mi je dobro :D a u skripti piše da je rješenje jednako onom iz 11.6.15 uz brisanje naredbe return iz for petlje pa me to zbunilo ...
u svakom slučaju hvala :)
s ovim i- - mi je dobro Very Happy a u skripti piše da je rješenje jednako onom iz 11.6.15 uz brisanje naredbe return iz for petlje pa me to zbunilo ...
u svakom slučaju hvala Smile


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


Pridružen/a: 23. 10. 2011. (17:34:05)
Postovi: (2F)16
Sarma = la pohva - posuda
= 3 - 3

PostPostano: 12:48 sri, 30. 1. 2013    Naslov: Citirajte i odgovorite

Zanima me da li gradivo popravnog uključuje "Dodavanje i brisanje elemenata"? Koliko se sjećanje služi na vježbama je rečeno da neće. :?:
I može li hint za 2. zadatak i rješenje 3. http://degiorgi.math.hr/prog1/kolokviji/p1-kolokvij-1213-2.pdf

Hvala! :)
Zanima me da li gradivo popravnog uključuje "Dodavanje i brisanje elemenata"? Koliko se sjećanje služi na vježbama je rečeno da neće. Question
I može li hint za 2. zadatak i rješenje 3. http://degiorgi.math.hr/prog1/kolokviji/p1-kolokvij-1213-2.pdf

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: 13:13 sri, 30. 1. 2013    Naslov: Citirajte i odgovorite

[quote="patakenjac"]I može li hint za 2. zadatak[/quote]

Tupi kut ima negativni kosinus. To znaci da treba provjeriti je li
[tex]a^2 > b^2 + c^2 \quad \text{ili} \quad b^2 > a^2 + c^2 \quad \text{ili} \quad c^2 > a^2 + b^2[/tex].
Naravno, da bi nesto bilo tupokutni trokut, treba prvo provjeriti je li uopce trokut, sto znaci da treba provjeriti da je [tex]a,b,c > 0[/tex] i nejednakost trokuta:
[tex]a < b + c \quad \text{i} \quad b < a + c \quad \text{i} \quad c < a + b[/tex].
Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po [tt]i[/tt], ide od 1 do [tt]n[/tt], druga, po [tt]j[/tt], ide od [tt]i[/tt]+1 do [tt]n[/tt], a treca ide [tt]j[/tt]+1 do [tt]n[/tt] (time sprijecis ponavljanja).

[quote="patakenjac"]i rješenje 3. http://degiorgi.math.hr/prog1/kolokviji/p1-kolokvij-1213-2.pdf[/quote]

Rutinski sort i trazenje. Ne pise mi se cijelo rjesenje, sorry.
patakenjac (napisa):
I može li hint za 2. zadatak


Tupi kut ima negativni kosinus. To znaci da treba provjeriti je li
[tex]a^2 > b^2 + c^2 \quad \text{ili} \quad b^2 > a^2 + c^2 \quad \text{ili} \quad c^2 > a^2 + b^2[/tex].
Naravno, da bi nesto bilo tupokutni trokut, treba prvo provjeriti je li uopce trokut, sto znaci da treba provjeriti da je [tex]a,b,c > 0[/tex] i nejednakost trokuta:
[tex]a < b + c \quad \text{i} \quad b < a + c \quad \text{i} \quad c < a + b[/tex].
Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po i, ide od 1 do n, druga, po j, ide od i+1 do n, a treca ide j+1 do n (time sprijecis ponavljanja).

patakenjac (napisa):
i rješenje 3. http://degiorgi.math.hr/prog1/kolokviji/p1-kolokvij-1213-2.pdf


Rutinski sort i trazenje. Ne pise mi se cijelo rjesenje, sorry.



_________________
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
hendrix
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 03. 09. 2012. (15:59:06)
Postovi: (92)16
Sarma = la pohva - posuda
29 = 31 - 2

PostPostano: 20:33 sri, 30. 1. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"]Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po [tt]i[/tt], ide od 1 do [tt]n[/tt], druga, po [tt]j[/tt], ide od [tt]i[/tt]+1 do [tt]n[/tt], a treca ide [tt]j[/tt]+1 do [tt]n[/tt] (time sprijecis ponavljanja).[/quote]

Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do [tt]n-2[/tt], druga do [tt]n-1[/tt], a samo treća do [tt]n[/tt]? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.)
vsego (napisa):
Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po i, ide od 1 do n, druga, po j, ide od i+1 do n, a treca ide j+1 do n (time sprijecis ponavljanja).


Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do n-2, druga do n-1, a samo treća do n? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.)


[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: 20:48 sri, 30. 1. 2013    Naslov: Citirajte i odgovorite

[quote="hendrix"][quote="vsego"]Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po [tt]i[/tt], ide od 1 do [tt]n[/tt], druga, po [tt]j[/tt], ide od [tt]i[/tt]+1 do [tt]n[/tt], a treca ide [tt]j[/tt]+1 do [tt]n[/tt] (time sprijecis ponavljanja).[/quote]
Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do [tt]n-2[/tt], druga do [tt]n-1[/tt], a samo treća do [tt]n[/tt]? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.)[/quote]

Traze se troclani skupovi, a student matematike vjerojatno zna da su skupovi [tex]\{i,j,k\}[/tex] i [tex]\{j,i,k\}[/tex] jednaki te da nisu troclani ako su neki od tih indeksa jednaki.

Sto se petlje tice, recimo da je [tt]i = n-1[/tt]. Tada u prvom koraku unutrasnje (tj. srednje) petlje imamo [tt]j = i+1 = n[/tt]. Posto je uvjet petlje [tt]j < n[/tt], ta se nece niti jednom izvrtiti. Bilo bi preglednije kako si napisao, ali radi i ovako, a nisam htio zapiliti s detaljima. Ipak je to samo skica.
hendrix (napisa):
vsego (napisa):
Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po i, ide od 1 do n, druga, po j, ide od i+1 do n, a treca ide j+1 do n (time sprijecis ponavljanja).

Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do n-2, druga do n-1, a samo treća do n? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.)


Traze se troclani skupovi, a student matematike vjerojatno zna da su skupovi [tex]\{i,j,k\}[/tex] i [tex]\{j,i,k\}[/tex] jednaki te da nisu troclani ako su neki od tih indeksa jednaki.

Sto se petlje tice, recimo da je i = n-1. Tada u prvom koraku unutrasnje (tj. srednje) petlje imamo j = i+1 = n. Posto je uvjet petlje j < n, ta se nece niti jednom izvrtiti. Bilo bi preglednije kako si napisao, ali radi i ovako, a nisam htio zapiliti s detaljima. Ipak je to samo skica.



_________________
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
hendrix
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 03. 09. 2012. (15:59:06)
Postovi: (92)16
Sarma = la pohva - posuda
29 = 31 - 2

PostPostano: 21:00 sri, 30. 1. 2013    Naslov: Citirajte i odgovorite

Istina, kao i mnogo puta dosad, propustio sam očitije/jednostavnije rješenje. :D

Glede prvog dijela, ja sam na kolokviju imao grupu s uređenim trojkama pa otud i "razilaženje" u postovima iznad (zato sam se i zbunio poslije kolokvija jer nisam znao što mi je na kraju pisalo), pretpostavio sam da je u svim grupama bilo isto, sad vidim da ipak nije.
Istina, kao i mnogo puta dosad, propustio sam očitije/jednostavnije rješenje. Very Happy

Glede prvog dijela, ja sam na kolokviju imao grupu s uređenim trojkama pa otud i "razilaženje" u postovima iznad (zato sam se i zbunio poslije kolokvija jer nisam znao što mi je na kraju pisalo), pretpostavio sam da je u svim grupama bilo isto, sad vidim da ipak nije.


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


Pridružen/a: 08. 04. 2013. (10:17:56)
Postovi: (1)16
Sarma = la pohva - posuda
-1 = 0 - 1

PostPostano: 16:59 sub, 18. 5. 2013    Naslov: Citirajte i odgovorite

Ako može mala pomoć oko zadatka iz predprošlog kolokvija 3.zadatak:

Elementi vezane liste trebaju sadrzavati po jedan string ime s najvise 10 znakova i dva cijela broja start i end.

Napisite funkciju osam(element *first, element second), gdje je first pokazivac na prvi element liste, koja ubacuje element second u listu first i to prije osmog elementa liste. Ako lista ima manje od osam elementa, funkcija ne radi nista.

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

typedef struct _element {
char ime[11];
int start, end;
struct _element *next;
} element;

element *osam(element *first, element second)
{
element *t, *osam, *n=(element*)malloc(sizoef(element));
int i=0, n=0;

strcpy(n->ime,second.ime)
n->start=second.start;
n->end=second.end;

for(t=first;t;t=t->next) n++;

if (n<8) return first;

for(t=first;t;t=t->next)
{
i++;
if(i==7)
{
osam= t->next;
t->next=second;
second->next=osam;
}
}
return first;
}


Moje pitanje je može li se ta funkcija napisati na ovaj način, tj. jeli ovo ispravno???
Hvala
Ako može mala pomoć oko zadatka iz predprošlog kolokvija 3.zadatak:

Elementi vezane liste trebaju sadrzavati po jedan string ime s najvise 10 znakova i dva cijela broja start i end.

Napisite funkciju osam(element *first, element second), gdje je first pokazivac na prvi element liste, koja ubacuje element second u listu first i to prije osmog elementa liste. Ako lista ima manje od osam elementa, funkcija ne radi nista.

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

typedef struct _element {
char ime[11];
int start, end;
struct _element *next;
} element;

element *osam(element *first, element second)
{
element *t, *osam, *n=(element*)malloc(sizoef(element));
int i=0, n=0;

strcpy(n→ime,second.ime)
n→start=second.start;
n→end=second.end;

for(t=first;t;t=t→next) n++;

if (n<Cool return first;

for(t=first;t;t=t→next)
{
i++;
if(i==7)
{
osam= t→next;
t→next=second;
second→next=osam;
}
}
return first;
}


Moje pitanje je može li se ta funkcija napisati na ovaj način, tj. jeli ovo ispravno???
Hvala


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


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 16:40 sri, 22. 5. 2013    Naslov: Citirajte i odgovorite

Pomoc u vezi prvog zadatka s proslogodinjeg kolokvija:

http://degiorgi.math.hr/prog2/kolokviji/p2-kolokvij-1112-2.pdf

Moj kod za upis i ispis: (bez predzadnjeg i zadnjeg dijela zadatka)

[code:1]
typedef struct _drzava{
char naziv[21];
unsigned populacija;
double povrsina;
} drzava;

struct _drzava*ucitaj(unsigned *n){
struct _drzava*niz=NULL;
char ime[21];
int i;

for(i=1; i<*n; ++i){

printf("Upisi %d. drzavu: \n", i);
scanf(" %[^\n]", ime);
niz=(drzava*)realloc(niz,i*sizeof(drzava));
strcpy(niz[i].naziv, ime);
/*ovdje u rjesenju pise strcpy(niz[*n].naziv, ime), ne znam zasto /*

printf("Upisi populaciju i povrsinu: \n");
scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
}
return niz;
}

int main (void){

unsigned n;

drzava *a=ucitaj(&n);

ispisi(a,n);

return 0;

}

[/code:1]

Rjesenje s neta kad isprobam ne radi. :cry:

Ako ne rijesim zadnji dio prvog zadatka, onda ucitavanje nema ogranicenja?
Mozda razmisljam pogresno, ali gdje se onda ucitava taj n pa da program zna kad zavrsiti s ucitavanjem?
Pomoc u vezi prvog zadatka s proslogodinjeg kolokvija:

http://degiorgi.math.hr/prog2/kolokviji/p2-kolokvij-1112-2.pdf

Moj kod za upis i ispis: (bez predzadnjeg i zadnjeg dijela zadatka)

Kod:

typedef struct _drzava{
  char naziv[21];
  unsigned populacija;
  double povrsina;
} drzava;

struct _drzava*ucitaj(unsigned *n){
  struct _drzava*niz=NULL;
  char ime[21];
  int i;

  for(i=1; i<*n; ++i){

    printf("Upisi %d. drzavu: \n", i);
    scanf(" %[^\n]", ime);
    niz=(drzava*)realloc(niz,i*sizeof(drzava));
    strcpy(niz[i].naziv, ime);                           
 /*ovdje u rjesenju pise        strcpy(niz[*n].naziv, ime), ne znam zasto  /*
 
   printf("Upisi populaciju i povrsinu: \n");
    scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
  }
  return niz;
}

 int main (void){

    unsigned n;

    drzava *a=ucitaj(&n);

    ispisi(a,n);

    return 0;

 }



Rjesenje s neta kad isprobam ne radi. Crying or Very sad

Ako ne rijesim zadnji dio prvog zadatka, onda ucitavanje nema ogranicenja?
Mozda razmisljam pogresno, ali gdje se onda ucitava taj n pa da program zna kad zavrsiti s ucitavanjem?


[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:04 sri, 22. 5. 2013    Naslov: Citirajte i odgovorite

Ti u funkciju posaljes adresu cijelog broja [tt]n[/tt] i tamo onda to koristis... a gdje mu zadajes vrijednost? Ili, ako hoces drugacije: koliko puta ce se tvoja [tt]for[/tt]-petlja u funkciji [tt]ucitaj()[/tt] izvrsiti?
Hint: u funkciji fali [tt]scanf("%d", n);[/tt] (da, [b]bez[/b] [tt]&[/tt]!).

P.S. Kad vec imas [tt]typedef[/tt], ne treba ti [tt]struct _drzava[/tt] u svakoj deklaraciji; stavi ekvivalentnu deklaraciju [tt]drzava[/tt], da ustedis na pisanju (na kolokviju nema copy/paste-a).
Ti u funkciju posaljes adresu cijelog broja n i tamo onda to koristis... a gdje mu zadajes vrijednost? Ili, ako hoces drugacije: koliko puta ce se tvoja for-petlja u funkciji ucitaj() izvrsiti?
Hint: u funkciji fali scanf("%d", n); (da, bez &!).

P.S. Kad vec imas typedef, ne treba ti struct _drzava u svakoj deklaraciji; stavi ekvivalentnu deklaraciju drzava, da ustedis na pisanju (na kolokviju nema copy/paste-a).



_________________
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
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 17:53 čet, 23. 5. 2013    Naslov: Citirajte i odgovorite

[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct _drzava{
char naziv[21];
unsigned populacija;
double povrsina;
} drzava;

drzava*ucitaj(unsigned *n){

drzava*niz=NULL;
char ime[21];
int i;

printf("Upisi broj drzava: \n");
scanf("%d", n);
for(i=1; i<=*n; ++i){


printf("Upisi %d. drzavu: \n", i);
scanf(" %[^\n]", ime);
niz=(drzava*)realloc(niz,i*sizeof(drzava));
if(!strcmp(ime, "kraj")) return niz;
strcpy(niz[*n].naziv, ime);
printf("Upisi populaciju i povrsinu: \n");
scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
}
return niz;
}

void ispisi(drzava *niz, unsigned n){
unsigned i;
printf("%-20s %10s %10s\n","Ime","Stanovnika","Povrsina");
for(i=1;i<=n;++i)
printf(" %-20s %10u %10f\n",niz[i].naziv,niz[i].populacija,niz[i].povrsina);
}

int main (void){

unsigned n;

drzava *a=ucitaj(&n);

ispisi(a,n);

free (a);
return 0;

}
[/code:1]

1. Ne ispisuje mi dobro imena drzava, zadnu upisanu drzavu dobro ispise, a prethodne ne.

2. zasto u funkciji ucitaj radimo

[code:1] strcpy(niz[*n].naziv, ime)[/code:1]

a ne

[code:1]strcpy(niz[i].naziv, ime)[/code:1]

3. Zasto moramo inicijalizirati ----> drzava*niz=NULL?
Da ne koristimo realloc, onda ne bi trebali?
Kod:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct _drzava{
  char naziv[21];
  unsigned populacija;
  double povrsina;
} drzava;

  drzava*ucitaj(unsigned *n){

  drzava*niz=NULL;
  char ime[21];
  int i;

  printf("Upisi broj drzava: \n");
  scanf("%d", n);
  for(i=1; i<=*n; ++i){


    printf("Upisi %d. drzavu: \n", i);
    scanf(" %[^\n]", ime);
    niz=(drzava*)realloc(niz,i*sizeof(drzava));
    if(!strcmp(ime, "kraj")) return niz;
    strcpy(niz[*n].naziv, ime);
    printf("Upisi populaciju i povrsinu: \n");
    scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
  }
  return niz;
}

void ispisi(drzava *niz, unsigned n){
  unsigned i;
  printf("%-20s %10s %10s\n","Ime","Stanovnika","Povrsina");
  for(i=1;i<=n;++i)
    printf(" %-20s %10u %10f\n",niz[i].naziv,niz[i].populacija,niz[i].povrsina);
}

int main (void){

    unsigned n;

    drzava *a=ucitaj(&n);

    ispisi(a,n);

    free (a);
    return 0;

 }


1. Ne ispisuje mi dobro imena drzava, zadnu upisanu drzavu dobro ispise, a prethodne ne.

2. zasto u funkciji ucitaj radimo

Kod:
 strcpy(niz[*n].naziv, ime)


a ne

Kod:
strcpy(niz[i].naziv, ime)


3. Zasto moramo inicijalizirati ----> drzava*niz=NULL?
Da ne koristimo realloc, onda ne bi trebali?


[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:00 čet, 23. 5. 2013    Naslov: Citirajte i odgovorite

Ovako nabrzinu, cini mi se da si u pravu i da treba ici [tt]i[/tt]. Ovaj [tt]*n[/tt] je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se [tt]n[/tt] ne ucitava.

Takodjer, petlje bi trebale ici od 0 do [tt]<n[/tt]. Isprobaj, pa javi je l' ok. :)

Inace, ovdje ne treba [tt]realloc()[/tt], ako se oslanjamo na to da je [tt]n[/tt] ucitan. Dosta je nakon [tt]scanf("%d", n);[/tt] staviti [tt]malloc()[/tt].

Ref. 3. da, zbog [tt]realloc()[/tt].
Ovako nabrzinu, cini mi se da si u pravu i da treba ici i. Ovaj *n je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se n ne ucitava.

Takodjer, petlje bi trebale ici od 0 do <n. Isprobaj, pa javi je l' ok. Smile

Inace, ovdje ne treba realloc(), ako se oslanjamo na to da je n ucitan. Dosta je nakon scanf("%d", n); staviti malloc().

Ref. 3. da, zbog realloc().



_________________
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
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 18:34 čet, 23. 5. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"]Ovako nabrzinu, cini mi se da si u pravu i da treba ici [tt]i[/tt]. Ovaj [tt]*n[/tt] je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se [tt]n[/tt] ne ucitava.

Takodjer, petlje bi trebale ici od 0 do [tt]<n[/tt]. Isprobaj, pa javi je l' ok. :)

Inace, ovdje ne treba [tt]realloc()[/tt], ako se oslanjamo na to da je [tt]n[/tt] ucitan. Dosta je nakon [tt]scanf("%d", n);[/tt] staviti [tt]malloc()[/tt].

Ref. 3. da, zbog [tt]realloc()[/tt].[/quote]


E, radi sad, super. Hvala.
vsego (napisa):
Ovako nabrzinu, cini mi se da si u pravu i da treba ici i. Ovaj *n je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se n ne ucitava.

Takodjer, petlje bi trebale ici od 0 do <n. Isprobaj, pa javi je l' ok. Smile

Inace, ovdje ne treba realloc(), ako se oslanjamo na to da je n ucitan. Dosta je nakon scanf("%d", n); staviti malloc().

Ref. 3. da, zbog realloc().



E, radi sad, super. Hvala.


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


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 21:27 čet, 23. 5. 2013    Naslov: Citirajte i odgovorite

Definirajte tip podatka "razlomak" za pohranu jednog razlomka u listu (tako da bude moguce deklarirati varijablu razlomak r;) te napisite funkciju koja dodaje jedan razlomak (određen parametrima x, y ---->ja sam ih nazvala brojnik, nazivnik) na pocetak razlomka. Napisite i kako se funkcija poziva.

Da li je ovo rjesenje dobro?

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


typedef struct _razlomak* lista;

typedef struct _razlomak{

int brojnik;
int nazivnik;
lista next;

}razlomak;


lista ubaci_razlomak_na_pocetak(lista prvi, lista novi)
{
novi->next=prvi;
prvi=novi;

return prvi;
}

int main (void)
{
lista prvi=NULL;
lista novi, temp, pom, pom2;

while(1){
novi=(lista)malloc(sizeof(razlomak));
printf("Brojnik: ");
scanf("%d", &novi->brojnik);

printf("Nazivnik: \n");
scanf("%d", &novi->nazivnik);
if(novi->nazivnik==0) break;

temp=ubaci_razlomak_na_pocetak(prvi, novi);

printf("Brojnik/Nazivnik: %d/%d\n", temp->brojnik, temp->nazivnik);
}


for(pom=prvi; pom!=NULL; pom=pom2){
pom2=pom->next;
free(pom);
}


return 0;
}

[/code:1]

Imam rjesenje od prosle godine od jednog asistenta:

[code:1]

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

typedef struct __cvor
{
int br, naz;

struct __cvor *next;
} cvor;

typedef cvor razlomak;


cvor *dodaj( cvor *L, int x, int y )
{
cvor *novi;

novi = (cvor *) malloc( sizeof( cvor ) );
novi->br = x;
novi->naz = y;

novi->next = L;
L = novi;

return L;
}

int main( void )
{
cvor *L = NULL, *tren;

while( 1 )
{
int x, y;
scanf( "%d %d", &x, &y );
if( y == 0 )
break;

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

for( tren = L; tren != NULL; tren = tren->next )
printf( "%d/%d ", tren->br, tren->naz );

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


return 0;
}
[/code:1]

Da li programi rade isto?
Definirajte tip podatka "razlomak" za pohranu jednog razlomka u listu (tako da bude moguce deklarirati varijablu razlomak rWink te napisite funkciju koja dodaje jedan razlomak (određen parametrima x, y ---->ja sam ih nazvala brojnik, nazivnik) na pocetak razlomka. Napisite i kako se funkcija poziva.

Da li je ovo rjesenje dobro?

Kod:
#include<stdio.h>


typedef struct _razlomak* lista;

typedef struct _razlomak{

     int brojnik;
     int nazivnik;
     lista next;

}razlomak;


  lista ubaci_razlomak_na_pocetak(lista prvi, lista novi)
  {
     novi->next=prvi;
     prvi=novi;

     return prvi;
  }

  int main (void)
  {
     lista prvi=NULL;
     lista novi, temp, pom, pom2;

     while(1){
         novi=(lista)malloc(sizeof(razlomak));
         printf("Brojnik: ");
         scanf("%d", &novi->brojnik);

         printf("Nazivnik: \n");
         scanf("%d", &novi->nazivnik);
         if(novi->nazivnik==0) break;

         temp=ubaci_razlomak_na_pocetak(prvi, novi);

         printf("Brojnik/Nazivnik: %d/%d\n", temp->brojnik, temp->nazivnik);
     }


         for(pom=prvi; pom!=NULL; pom=pom2){
            pom2=pom->next;
            free(pom);
         }


     return 0;
  }



Imam rjesenje od prosle godine od jednog asistenta:

Kod:


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

typedef struct __cvor
{
   int br, naz;
   
   struct __cvor *next;
} cvor;

typedef cvor razlomak;


cvor *dodaj( cvor *L, int x, int y )
{
   cvor *novi;
   
   novi = (cvor *) malloc( sizeof( cvor ) );
   novi->br = x;
   novi->naz = y;
   
   novi->next = L;
   L = novi;
   
   return L;
}

int main( void )
{
   cvor *L = NULL, *tren;
   
   while( 1 )
   {
      int x, y;
      scanf( "%d %d", &x, &y );
      if( y == 0 )
         break;
      
      L = dodaj( L, x, y );
   }
   
   for( tren = L; tren != NULL; tren = tren->next )
      printf( "%d/%d ", tren->br, tren->naz );
   
   while( L != NULL )
   {
      cvor *temp = L;
      L = L->next;
      free( temp );
   }
   
   
   return 0;
}


Da li programi rade isto?


[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, 4, 5, 6, 7  Sljedeće
Stranica 5 / 7.

 
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