DeadManWalking Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Last opp filen du kompilerer? Lenke til kommentar
endrebjo Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 (endret) Jada. Bare gni det inn! endre@endre:~$ cat sine.c #include <math.h> int main (void) { float a; a = sinf(1.00); return(0); } endre@endre:~$ gcc sine.c /tmp/ccQ5S3tl.o: In function `main': sine.c:(.text+0x1a): undefined reference to `sinf' collect2: ld returned 1 exit status endre@endre:~$ Er det rart jeg aldri kommer skikkelig i gang med C?!?! At det skal være så forbanna klønete å få disse kompilatorene å kjøre skikkelig. Tror jeg kjører kompilasjon mot filserveren over SSH snart (Debian 4.0). Edit: data_jepp: Så ikke posten din. Forumet takler ikke *.c, så jeg kjørte cp til *.c.txt: sine.c.txt Endret 15. juni 2008 av endrebjo Lenke til kommentar
endrebjo Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Hmm... gcc -lm ser ut til å fungere. Lenke til kommentar
x871kx6167ss7 Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Fant det her: http://aplawrence.com/Linux/c_compiling_linux.html Kanskje det er andre nyttige ting som er nevnt der. Lenke til kommentar
endrebjo Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 (endret) Så jeg må altså linke inn mattebiblioteket med både #include <math.h> og -lm. Makan til bedritent opplegg. Er det sånn for alle bibliotekene? Edit: Jeg må forøvrig bruke -lm på filserveren også. Debian er visst minst like hjerneskadet som Ubuntu. Endret 15. juni 2008 av endrebjo Lenke til kommentar
endrebjo Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Jeg skjønner ikke hensikten med dette eksempelet: #include <math.h> float cosf(float x); /* C99 */ float sinf(float x); /* C99 */ float tanf(float x); /* C99 */ double cos(double x); double sin(double x); double tan(double x); long double cosl(long double x); /* C99 */ long double sinl(long double x); /* C99 */ long double tanl(long double x); /* C99 */ Hva er det de vil frem til? Lenke til kommentar
endrebjo Skrevet 16. juni 2008 Del Skrevet 16. juni 2008 Noen tips til fine trenings-utfordringer på linje med brøkregningen i Wikibooken? Lenke til kommentar
Jaffe Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 Du kan jo lage eit bibliotek for å rekne med vektorar? Med funksjonar for vektoraddisjon, skalarprodukt, kryssprodukt, vinkel mellom to vektorar, osv. Lenke til kommentar
endrebjo Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 (endret) Den blir fryktelig lik, men greit nok. Tenkte mer på samme vanskelighetsgrad. Går det ikke an å bruke strcmp() med variabler i case-statement? F.eks #include <stdio.h> #include <string.h> int main (void) { char string[3] = "foo"; switch (0) { case strcmp(string, "bar"): printf("tull\n"); break; case strcmp(string, "foo"): printf("ja\n"); break; } return(0); } Får beskjed om at: "case label does not reduce to an integer constant". Endret 17. juni 2008 av endrebjo Lenke til kommentar
GeirGrusom Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 Nei, det går ikke. Du må bruke if og else if. Lenke til kommentar
endrebjo Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 Møkka-case. Verdens mest ubrukelige konstruksjon. Lenke til kommentar
GeirGrusom Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 (endret) Pøh. du vet bare ikke hvor du skal bruke den. if(strcmp(string, "foo") == 0) std::cout << "Foo!"; // Case 1 else if(strcmp(string, "hai") == 0) std::cout << "Hello World!"; // Case 2 else std::cout << "Wtf?"; // Default case Dette gjør akkurat samme oppgaven som en switch, eneste praktiske forskjellen er at du ikke kan hoppe mellom cases eller passere igjennom. Endret 17. juni 2008 av GeirGrusom Lenke til kommentar
endrebjo Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 (endret) Jeg har fått det til for lenge siden med if, men jeg tenkte å bruke switch for å se om den konstruksjonen kunne brukes til noe fornuftig, men det kan den tydeligvis ikke. Jeg har enda ikke funnet én eneste reell situasjon der switch-konstruksjonen er enklere/mer praktisk enn if-konstruksjonen. BTW: En vektorgreie var skit-lett å få til etter at jeg gjennomgikk brøk-greien i forgårs. Straight-ahead uten å se på brøk-eksempelet engang. Klikk for å se/fjerne innholdet nedenfor #include <stdio.h> #include <math.h> #include <string.h> typedef struct { int x; int y; int z; } vektor; vektor add(vektor a, vektor b); vektor sub(vektor a, vektor b); int mup(vektor a, vektor b); // Prikkprodukt vektor muk(vektor a, vektor b); // Kryssprodukt float vinkel(vektor a, vektor b); // Vinkel mellom to vektorer float v_abs(vektor a); // Absoluttverdien av en vektor float rad_to_deg(float rad); // Idioter foretrekker vinkelsvar i grader int main(void) { vektor a; vektor b; char metode[3]; vektor svar = {0, 0, 0}; float skalar = 0; printf("Vektor a (pa formen x,y,z): "); scanf("%d,%d,%d", &a.x, &a.y, &a.z); printf("Vektor b (pa formen x,y,z): "); scanf("%d,%d,%d", &b.x, &b.y, &b.z); printf("add|sub|mup|muk|vin|abs "); scanf("%s", metode); if (strcmp(metode, "add") == 0) svar = add(a, b); else if (strcmp(metode, "sub") == 0) svar = sub(a, b); else if (strcmp(metode, "muk") == 0) svar = muk(a, b); skalar = v_abs(svar); if (strcmp(metode, "mup") == 0) skalar = mup(a, b); else if (strcmp(metode, "vin") == 0) skalar = vinkel(a, b); else if (strcmp(metode, "abs") == 0) skalar = v_abs(a); printf("Vektor: [%d, %d, %d]\n", svar.x, svar.y, svar.z); printf("Skalar: %.2f\n", skalar); return(0); } vektor add(vektor a, vektor b) { vektor resultat; resultat.x = a.x + b.x; resultat.y = a.y + b.y; resultat.z = a.z + b.z; return resultat; } vektor sub(vektor a, vektor b) { vektor resultat; resultat.x = a.x - b.x; resultat.y = a.y - b.y; resultat.z = a.z - b.z; return resultat; } int mup(vektor a, vektor b) { int resultat = a.x * b.x + a.y * b.y + a.z * b.z; return resultat; } vektor muk(vektor a, vektor b) { vektor resultat; resultat.x = a.y * b.z - a.z * b.y; resultat.y = a.z * b.x - a.x * b.z; resultat.z = a.x * b.y - a.y * b.x; return resultat; } float vinkel(vektor a, vektor b) { float resultat = rad_to_deg(acosf(mup(a, b) / (v_abs(a) * v_abs(b)))); return resultat; } float v_abs(vektor a) { float resultat = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z); return resultat; } float rad_to_deg(float rad) { float pi = 3.141592653; float deg = (rad / (2*pi)) * 360; return deg; } Endret 17. juni 2008 av endrebjo Lenke til kommentar
GeirGrusom Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 Bruker du C? Hvis du bruker C++, skriv en klasse, og prøv deg på operator overloading. anyways: switch struct chunk3ds { short id; int size; }; int read3ds(char* fn) { FILE *fp; chunk3ds chunk; if(!(fp = fopen(fn, "br"))) return FILE3DS_IO_ERROR; chunk.id = readShort(fp); chunk.size = readInt(fp); switch(chunk.id) { case CHUNK_3DS: // blablablabla break; case ETC: } ... etc... } det finnes områder der den er nyttig. dette var bare et veldig overfladisk eksempel, men jeg hr brukt dette til å lese .3ds filer både i C++ og C#, og da er switch ganske kjekt å ha, fordi den er litt mer oversiktelig. Lenke til kommentar
bkf_94 Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 Jeg vil installere Microsoft Visual C++ 2008 Express edition men den stopper hele tiden på .NET Framework 3.5 og slår seg selv av og gir en sånn ''send rapport'' melding Hvordan fikser jeg dette problemet? Blir evig takknemelig for et svar som kan hjelpe meg Lenke til kommentar
Giddion Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 Vel du kan jo alltids prøve en god gammel reinstall Lenke til kommentar
endrebjo Skrevet 17. juni 2008 Del Skrevet 17. juni 2008 (endret) Bruker du C? Ja. Tenkte jeg måtte begynne en eller annen plass.Har ikke vært skikkelig borti OOP enda, så jeg tenkte det kunne bli litt for hardt å både venne seg til OOP-tenkemåten og lære et lavnivå-språk. Endret 17. juni 2008 av endrebjo Lenke til kommentar
endrebjo Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 Noen guide oppretten en peker ved å skrive: int *p; Mens andre oppretter en peker ved å skrive: int* p Finnes det noen forskjeller/regler på de to? Lenke til kommentar
Arne Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 Jeg tror det er slik at hvis man skriver: int *p, a, c; ,så oppretter man en peker, nemlig *p og to int, nemlig a og c. Med dette: int* p, a c; oppretter vi tre integer-pointers, nemlig p, a og c. Det jeg ressonerer meg frem til da, er at man ved å sette * rett etter int, kan deklarere alle variablene som pointere. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå