Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Blah Forumaš(ica)
Pridružen/a: 11. 09. 2006. (18:07:56) Postovi: (C1)16
Spol:
|
Postano: 11:47 pon, 30. 6. 2008 Naslov: |
|
|
Jel mi netko može pojasniti kako da sortiram učitane sate i minute oblika 00:45 npr, bune me ove nule ispred -zadatak iz popravnog[http://degiorgi.math.hr/prog2/kolokviji.php][/url]
[size=9][color=#999999]Added after 54 minutes:[/color][/size]
i još nekaj kaj mi ne radi pa ako može tko pojasniti
[code:1]struct tocka{
double x;
double y;
}t;
void sort (tocka niz[],int n){
int i,j;
double temp;
for (i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(((1-niz[i])*(1-niz[i])+(2-niz[i+1])*(2-niz[i+1]))<((1-niz[j])*(1-niz[j])+(2-niz[j+1])*(2-niz[j+1]))){
temp=niz[i];
niz[i]=niz[j];
niz[j]=temp;
}
for (i=0;i<n;i++)
printf("%lf",niz[i]);
}
int main(void){
int i;
tocka t={3,4,5,6};
for(i=0;i<3;i++)
printf("%lf",t[i]);
}[/code:1]
Jel mi netko može pojasniti kako da sortiram učitane sate i minute oblika 00:45 npr, bune me ove nule ispred -zadatak iz popravnog[http://degiorgi.math.hr/prog2/kolokviji.php][/url]
Added after 54 minutes:
i još nekaj kaj mi ne radi pa ako može tko pojasniti
Kod: | struct tocka{
double x;
double y;
}t;
void sort (tocka niz[],int n){
int i,j;
double temp;
for (i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(((1-niz[i])*(1-niz[i])+(2-niz[i+1])*(2-niz[i+1]))<((1-niz[j])*(1-niz[j])+(2-niz[j+1])*(2-niz[j+1]))){
temp=niz[i];
niz[i]=niz[j];
niz[j]=temp;
}
for (i=0;i<n;i++)
printf("%lf",niz[i]);
}
int main(void){
int i;
tocka t={3,4,5,6};
for(i=0;i<3;i++)
printf("%lf",t[i]);
} |
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 11:53 pon, 30. 6. 2008 Naslov: |
|
|
Mislim da te nule ne smetaju...
moja je ideja radit strukturu koja u sebi sadrži 2 int-a, koji predstavljaju sate i minute (.sat i .minuta ).
ako je učitavanje oblika "%d:%d", i spremaš to u .sat i .minuta , neće bit problema, tj 00 će spremit kao 0 i sl. (valjda)
Svaku strukturu spremiš u polje, koje dinamički alociraš (i realociraš po potrebi, recimo da alociraš blok od 10, pa kad se popuni još 10 itd). Kad si sve pročitao iz satovi.in, radiš sort, najprije po satima, ako imaju iste sate, onda gledaš minute. Tamo gdje je jednoznamenkast broj, samo u ispisu staviš da stavi dodatnu nulu ispred.
Moguće da može jednostavnije... vsego? :D
[size=9][color=#999999]Added after 2 minutes:[/color][/size]
[quote="Blah"]
tocka t={3,4,5,6};
[/quote]
Ne, ne, ne, ne, ne... To ne može tak... točka je struktura koja ima 2 člana, a ovo bi trebalo bit polje točaka, ili? Ovak izgleda kao polje int ova, a nit to čak, jer ne piše *t={...}
edit: u gornjem programu nema ni returna u mainu...
Mislim da te nule ne smetaju...
moja je ideja radit strukturu koja u sebi sadrži 2 int-a, koji predstavljaju sate i minute (.sat i .minuta ).
ako je učitavanje oblika "%d:%d", i spremaš to u .sat i .minuta , neće bit problema, tj 00 će spremit kao 0 i sl. (valjda)
Svaku strukturu spremiš u polje, koje dinamički alociraš (i realociraš po potrebi, recimo da alociraš blok od 10, pa kad se popuni još 10 itd). Kad si sve pročitao iz satovi.in, radiš sort, najprije po satima, ako imaju iste sate, onda gledaš minute. Tamo gdje je jednoznamenkast broj, samo u ispisu staviš da stavi dodatnu nulu ispred.
Moguće da može jednostavnije... vsego?
Added after 2 minutes:
Blah (napisa): |
tocka t={3,4,5,6};
|
Ne, ne, ne, ne, ne... To ne može tak... točka je struktura koja ima 2 člana, a ovo bi trebalo bit polje točaka, ili? Ovak izgleda kao polje int ova, a nit to čak, jer ne piše *t={...}
edit: u gornjem programu nema ni returna u mainu...
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy
|
|
[Vrh] |
|
Blah Forumaš(ica)
Pridružen/a: 11. 09. 2006. (18:07:56) Postovi: (C1)16
Spol:
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 13:13 pon, 30. 6. 2008 Naslov: |
|
|
Sto je [tt]1-niz[i][/tt] (i slicne konstrukcije) ako je [tt]niz[i][/tt] tipa [tt]tocka[/tt]? :-k Kako se to racuna? :-k
Ovo s predavanja je [b]jedna[/b] tocka, a ne niz tocaka! :tso: Ti imas cetiri tocke (vidljivo iz [tt]for()[/tt]-petlje) s ukupno 4 koordinate... je l' to samo meni cudno? :-k
[tt]tocka niz[] = {{1,2}, {3,4}, {5,6}, {7,8}};[/tt]
8)
Sto je 1-niz[i] (i slicne konstrukcije) ako je niz[i] tipa tocka? Kako se to racuna?
Ovo s predavanja je jedna tocka, a ne niz tocaka! Ti imas cetiri tocke (vidljivo iz for()-petlje) s ukupno 4 koordinate... je l' to samo meni cudno?
tocka niz[] = {{1,2}, {3,4}, {5,6}, {7,8}};
_________________ 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.
|
|
[Vrh] |
|
Blah Forumaš(ica)
Pridružen/a: 11. 09. 2006. (18:07:56) Postovi: (C1)16
Spol:
|
Postano: 13:45 pon, 30. 6. 2008 Naslov: |
|
|
Ma da bedasta,uopće nisam čitala zad kak spada.
ovo sad valja(treba doradit po zadatku) al to je to. Hvala!
# include <stdio.h>
typedef struct{
double x;
double y;
}tocka;
void sort (tocka niz[],int n){
int i,j;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (niz [i].x < niz [j].x) {
tocka temp = niz [i] ;
niz [i] =niz[j] ;
niz [j] = temp ;
}
for (i=0;i<n;i++)
printf("%lf %lf\n",niz[i].x,niz[i].y);
}
int main(void){
tocka niz[] = {{1,2}, {3,4}, {5,6}, {7,8}}; ;
sort(niz,4);
}
Ma da bedasta,uopće nisam čitala zad kak spada.
ovo sad valja(treba doradit po zadatku) al to je to. Hvala!
# include <stdio.h>
typedef struct{
double x;
double y;
}tocka;
void sort (tocka niz[],int n){
int i,j;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (niz [i].x < niz [j].x) {
tocka temp = niz [i] ;
niz [i] =niz[j] ;
niz [j] = temp ;
}
for (i=0;i<n;i++)
printf("%lf %lf\n",niz[i].x,niz[i].y);
}
int main(void){
tocka niz[] = {{1,2}, {3,4}, {5,6}, {7,8}}; ;
sort(niz,4);
}
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
Blah Forumaš(ica)
Pridružen/a: 11. 09. 2006. (18:07:56) Postovi: (C1)16
Spol:
|
Postano: 9:56 uto, 1. 7. 2008 Naslov: |
|
|
Zašto mi ovdje ne radi dobro realokacija mem?[code:1]
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
int main (void){
FILE *f;
int satn=0,minn=0,i=0,j,k,temp;
int *niz;
if ((f=fopen("satoviin.txt","r"))==NULL){
printf("Error");
exit(0);
}
niz=(int*) malloc (sizeof (int));
while (fscanf(f,"%d:%d\n", &satn, &minn)==2){
minn+=satn*60;
niz[i]=minn;
niz= (int*) realloc (niz, ++i * sizeof (int));
minn=0;
}
fclose(f);
for(j=0;j<i;j++)
printf("%d\n",niz[j]); TU NEĆE ISPISATI NIZ KAKO SPADA
}...[/code:1]
Zašto mi ovdje ne radi dobro realokacija mem? Kod: |
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
int main (void){
FILE *f;
int satn=0,minn=0,i=0,j,k,temp;
int *niz;
if ((f=fopen("satoviin.txt","r"))==NULL){
printf("Error");
exit(0);
}
niz=(int*) malloc (sizeof (int));
while (fscanf(f,"%d:%d\n", &satn, &minn)==2){
minn+=satn*60;
niz[i]=minn;
niz= (int*) realloc (niz, ++i * sizeof (int));
minn=0;
}
fclose(f);
for(j=0;j<i;j++)
printf("%d\n",niz[j]); TU NEĆE ISPISATI NIZ KAKO SPADA
}... |
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 15:12 uto, 1. 7. 2008 Naslov: |
|
|
Zato sto prvo pises po memoriji, a tek onda ju (re)alociras:
[code:1] niz[i]=minn;
niz= (int*) realloc (niz, ++i * sizeof (int));[/code:1]
Dakle, ako [tt]realloc()[/tt] ne uspije prosiriti zauzetu memoriju, on ce sve skupa negdje preseliti (pogledaj objasnjenje u vjezbama i/ili predavanjima) i tada nece pokupiti ovo sto je zapisano iza alocirane memorije. :(
Preporuka:
[code:1] niz = NULL;
while (fscanf(f, " %d:%d", &satn, &minn) == 2) {
niz = (int*)realloc(niz, ++i * sizeof(int));
niz[i-1] = 60 * satn + minn;
}[/code:1]
P.S. Onaj [tt]minn=0;[/tt] na kraju prve petlje je cisti tehnoloski visak. ;)
Zato sto prvo pises po memoriji, a tek onda ju (re)alociras:
Kod: | niz[i]=minn;
niz= (int*) realloc (niz, ++i * sizeof (int)); |
Dakle, ako realloc() ne uspije prosiriti zauzetu memoriju, on ce sve skupa negdje preseliti (pogledaj objasnjenje u vjezbama i/ili predavanjima) i tada nece pokupiti ovo sto je zapisano iza alocirane memorije.
Preporuka:
Kod: | niz = NULL;
while (fscanf(f, " %d:%d", &satn, &minn) == 2) {
niz = (int*)realloc(niz, ++i * sizeof(int));
niz[i-1] = 60 * satn + minn;
} |
P.S. Onaj minn=0; na kraju prve petlje je cisti tehnoloski visak.
_________________ 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.
|
|
[Vrh] |
|
Blah Forumaš(ica)
Pridružen/a: 11. 09. 2006. (18:07:56) Postovi: (C1)16
Spol:
|
|
[Vrh] |
|
|