Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 17:25 čet, 12. 3. 2009 Naslov: |
|
|
[quote="Milojko"]u tome ne može biti greška jer je niz postavljen na duljinu b. taj dio sa inicijalizacijom niza je u redu. ne smiješ napisati kod tipa [tt]int n, b, znam[b][/tt] jer tu [tt]b[/tt] još uvijek nema vrijednost. nakon što mu dodijeliš vrijednost, onda je sve u redu :)[/quote]
Evo ovako:
[tt]proba.c[/tt][code:1]
#include <stdio.h>
int main() {
int n, b;
printf("Unesite n: "); scanf("%d", &n);
printf("\nUnesite b: "); scanf("%d", &b);
int znam[b], i, pandigitalan = 7;
for (i = 0; i < b; ++i) znam[i] = i;
while (n > 0) {
int ost = n % b;
for (i = 0; i < b; ++i) {
if (ost == i) znam[i] = -1;
}
n /= b;
}
for (i = 0; i < b; ++i) printf("%d ", znam[i]);
for (i = 0; i < b; ++i) {
if (znam[i] != -1) pandigitalan = 0;
}
if (pandigitalan) printf("\nDA\n");
else printf("\nNE\n");
scanf("%%");
return 0;
}
[/code:1]
[tt]compiler output[/tt][code:1]
$ gcc -std=c89 -pedantic-errors proba.c
proba.c: In function ‘main’:
proba.c:8: error: ISO C90 forbids variable-size array ‘znam’
proba.c:8: error: ISO C90 forbids mixed declarations and code
[/code:1]
Da rijesimo ovo jednom za svagda: [color=red]ISO C90 [u]zabranjuje[/u] deklaraciju nizova varijabilne duljine[/color].
Milojko (napisa): | u tome ne može biti greška jer je niz postavljen na duljinu b. taj dio sa inicijalizacijom niza je u redu. ne smiješ napisati kod tipa int n, b, znam[b] jer tu b još uvijek nema vrijednost. nakon što mu dodijeliš vrijednost, onda je sve u redu  |
Evo ovako:
proba.c Kod: |
#include <stdio.h>
int main() {
int n, b;
printf("Unesite n: "); scanf("%d", &n);
printf("\nUnesite b: "); scanf("%d", &b);
int znam[b], i, pandigitalan = 7;
for (i = 0; i < b; ++i) znam[i] = i;
while (n > 0) {
int ost = n % b;
for (i = 0; i < b; ++i) {
if (ost == i) znam[i] = -1;
}
n /= b;
}
for (i = 0; i < b; ++i) printf("%d ", znam[i]);
for (i = 0; i < b; ++i) {
if (znam[i] != -1) pandigitalan = 0;
}
if (pandigitalan) printf("\nDA\n");
else printf("\nNE\n");
scanf("%%");
return 0;
}
|
compiler output Kod: |
$ gcc -std=c89 -pedantic-errors proba.c
proba.c: In function ‘main’:
proba.c:8: error: ISO C90 forbids variable-size array ‘znam’
proba.c:8: error: ISO C90 forbids mixed declarations and code
|
Da rijesimo ovo jednom za svagda: ISO C90 zabranjuje deklaraciju nizova varijabilne duljine.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
Milojko Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol: 
Lokacija: Hilbertov hotel
|
Postano: 17:37 čet, 12. 3. 2009 Naslov: |
|
|
ma sve je to super, al, nit mi compiler išta pokazuje ikakva upozorenja, nit mi se programi bune protiv varijabilne duljine nizova :? više me brine ovo što compiler nema apsolutno ništa protiv ovoga, ni upozorenje, ni error, ništa......
[size=9][color=#999999]Added after 1 minutes:[/color][/size]
e da, hvala na brzim odgovorima :cjg:
ma sve je to super, al, nit mi compiler išta pokazuje ikakva upozorenja, nit mi se programi bune protiv varijabilne duljine nizova više me brine ovo što compiler nema apsolutno ništa protiv ovoga, ni upozorenje, ni error, ništa......
Added after 1 minutes:
e da, hvala na brzim odgovorima
_________________ Sedam je prost broj
Bolonja je smeće i to pod hitno treba mijenjat
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 18:30 čet, 12. 3. 2009 Naslov: |
|
|
[quote="Milojko"]ma sve je to super, al, nit mi compiler išta pokazuje ikakva upozorenja, nit mi se programi bune protiv varijabilne duljine nizova :? više me brine ovo što compiler nema apsolutno ništa protiv ovoga, ni upozorenje, ni error, ništa...... [/quote]
Problem je u tome sto Dev-Cpp (pretpostavljam da to koristis) poziva gcc s defaultnim opcijama, a tada se ukljucuju GNU ekstenzije standarda (kao sto su polja varijabilne duljine).
Primijeti dvije opcije ([tt]-std=c89[/tt] i [tt]-pedandic-errors[/tt]) kojima sam objasnio kompajleru da se ima ponasati po standardu, a ne po ekstenzijama.
Trenutacno se bavim time da natjeram Dev-Cpp da radi kako treba kada se ukljuce te dvije opcije, ali nailazim na problem s tim sto MinGW headeri koji se koriste na Windowsima nisu u skladu sa standardom, pa se onda kompajler rusi radi losih headera. Nadalje stvar ide sporo, jer na kompjuteru nemam instalirane Windowse, pa sve sto napravim testiram na Wine-u, a onda moram umolit ljude koji koriste Windowse da to testiraju.
Milojko (napisa): | ma sve je to super, al, nit mi compiler išta pokazuje ikakva upozorenja, nit mi se programi bune protiv varijabilne duljine nizova više me brine ovo što compiler nema apsolutno ništa protiv ovoga, ni upozorenje, ni error, ništa...... |
Problem je u tome sto Dev-Cpp (pretpostavljam da to koristis) poziva gcc s defaultnim opcijama, a tada se ukljucuju GNU ekstenzije standarda (kao sto su polja varijabilne duljine).
Primijeti dvije opcije (-std=c89 i -pedandic-errors) kojima sam objasnio kompajleru da se ima ponasati po standardu, a ne po ekstenzijama.
Trenutacno se bavim time da natjeram Dev-Cpp da radi kako treba kada se ukljuce te dvije opcije, ali nailazim na problem s tim sto MinGW headeri koji se koriste na Windowsima nisu u skladu sa standardom, pa se onda kompajler rusi radi losih headera. Nadalje stvar ide sporo, jer na kompjuteru nemam instalirane Windowse, pa sve sto napravim testiram na Wine-u, a onda moram umolit ljude koji koriste Windowse da to testiraju.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
Milojko Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol: 
Lokacija: Hilbertov hotel
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 18:55 čet, 12. 3. 2009 Naslov: |
|
|
[quote="Milojko"]hrpa studenata su na Windowsima, tak da, i mi možemo uskočit ak treba :)[/quote]
Da, ali hrpa studenata ne zna kakav ja tocno output zelim, a osim toga za testirati ovo, ne smije se imati instaliran Dev-Cpp, jer ce testiranje rezultirati kompromitiranjem postojece instalacije.
Milojko (napisa): | hrpa studenata su na Windowsima, tak da, i mi možemo uskočit ak treba  |
Da, ali hrpa studenata ne zna kakav ja tocno output zelim, a osim toga za testirati ovo, ne smije se imati instaliran Dev-Cpp, jer ce testiranje rezultirati kompromitiranjem postojece instalacije.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
Milojko Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol: 
Lokacija: Hilbertov hotel
|
|
[Vrh] |
|
Gino Forumaš(ica)

Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Cobs Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol: 
Lokacija: Geto
|
Postano: 21:31 čet, 12. 3. 2009 Naslov: |
|
|
racunalo prihvaca te brojeve u bazi 10, a ti ih sam preinacis u neku drugu bazu s unosom baze b, ti ih zatim shvacas kao brojeve u bazi b, a racunalo je jos uvijek u bazi 10..... pa kada uzimas
[code:1] ost = n%b [/code:1]
u biti grjesis, trebo bi imati ovo:
[code:1] ost = n%10;
if ( ost > b )
exit(1); // neki izlaz jer dolazi do nečeg nemogučeg
[/code:1]
i sad gledas ono
[code:1]...
if( ost == i )
...
[/code:1]
i zatim sve djelis s 10 jer gledas sljedecu znamenku
[b][u] a ne djelis bazom jer onda ko zna kaj si dobio [/u][/b]
ako je baza > 10 onda trebalo djeliti s b da bi se rjesio jedne znamenke, ali mislim da to i nije bas u domeni zadatka.
Nadam se da mi je rjesenje tocno...
mogu poslati kod, ako zelis koji mi radi za sve baze od 2 do 10... a o slovima u kombinaciji s brojkama mi se neda niti razmisljat
racunalo prihvaca te brojeve u bazi 10, a ti ih sam preinacis u neku drugu bazu s unosom baze b, ti ih zatim shvacas kao brojeve u bazi b, a racunalo je jos uvijek u bazi 10..... pa kada uzimas
u biti grjesis, trebo bi imati ovo:
Kod: | ost = n%10;
if ( ost > b )
exit(1); // neki izlaz jer dolazi do nečeg nemogučeg
|
i sad gledas ono
Kod: | ...
if( ost == i )
...
|
i zatim sve djelis s 10 jer gledas sljedecu znamenku
a ne djelis bazom jer onda ko zna kaj si dobio
ako je baza > 10 onda trebalo djeliti s b da bi se rjesio jedne znamenke, ali mislim da to i nije bas u domeni zadatka.
Nadam se da mi je rjesenje tocno...
mogu poslati kod, ako zelis koji mi radi za sve baze od 2 do 10... a o slovima u kombinaciji s brojkama mi se neda niti razmisljat
|
|
[Vrh] |
|
Milojko Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol: 
Lokacija: Hilbertov hotel
|
|
[Vrh] |
|
Gino Forumaš(ica)

Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Spectre Forumaš(ica)


Pridružen/a: 02. 10. 2006. (16:58:05) Postovi: (167)16
Spol: 
|
|
[Vrh] |
|
Gino Forumaš(ica)

Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
Postano: 22:13 čet, 12. 3. 2009 Naslov: |
|
|
ma znao sam da neznam brojat...
al nema veze
nego ne kuzim di sam je fulao pa ako neko moze pomoc
(n=9012345678, b=10 vrati NE-???)
[code:1]int pandigitalan(int n, int b){
int i,pandig,tmp;
for(i=0;i<b;i++){
tmp=n;
while(tmp){
if(tmp%b==i) {pandig=1; break;}
if(tmp%b!=i) pandig=0;
tmp/=b;
}
if(pandig==0) return 0;
}
return 1;
}
int main(){
int n,b;
scanf("%d %d",&n,&b);
if(pandigitalan(n,b)) printf("DA");
else printf("NE");
scanf("%%");
return 0;
}[/code:1]
ma znao sam da neznam brojat...
al nema veze
nego ne kuzim di sam je fulao pa ako neko moze pomoc
(n=9012345678, b=10 vrati NE-???)
Kod: | int pandigitalan(int n, int b){
int i,pandig,tmp;
for(i=0;i<b;i++){
tmp=n;
while(tmp){
if(tmp%b==i) {pandig=1; break;}
if(tmp%b!=i) pandig=0;
tmp/=b;
}
if(pandig==0) return 0;
}
return 1;
}
int main(){
int n,b;
scanf("%d %d",&n,&b);
if(pandigitalan(n,b)) printf("DA");
else printf("NE");
scanf("%%");
return 0;
} |
_________________ Mario Berljafa
|
|
[Vrh] |
|
Milojko Forumaš(ica)


Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol: 
Lokacija: Hilbertov hotel
|
|
[Vrh] |
|
Cobs Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol: 
Lokacija: Geto
|
Postano: 12:58 pet, 13. 3. 2009 Naslov: |
|
|
Upiso si neki broj n i reko si on mi je u bazi b, sto znaci ako si ako si upiso broj 1234567 i reko on mi je u bazi 2, automatski si pogrjesio jer taj broj moze bit u bazi > 7, a ako si i recimo stavio da ti je u bazi > 7 npr. 8 onda svaku sljedecu znamenku gledas tako da djelis s deset, a ne sa 8
Edit: U biti, vase rjesenje je tocno, eh kad se pravim pametan... mogo sam prvo procitat zadatak... nije bitno
Upiso si neki broj n i reko si on mi je u bazi b, sto znaci ako si ako si upiso broj 1234567 i reko on mi je u bazi 2, automatski si pogrjesio jer taj broj moze bit u bazi > 7, a ako si i recimo stavio da ti je u bazi > 7 npr. 8 onda svaku sljedecu znamenku gledas tako da djelis s deset, a ne sa 8
Edit: U biti, vase rjesenje je tocno, eh kad se pravim pametan... mogo sam prvo procitat zadatak... nije bitno
|
|
[Vrh] |
|
|