[c] Syntax error

Pagina: 1
Acties:

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Ik ben nu al twee uur aan het knoeien om een syntax error uit mijn code te krijgen. Het lukt voor geen meter. Misschien zou iemand even met mij mee willen kijken.

De compiler zegt dat hij op regel 48 een ) mist :'( :?


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* INCLUDES: */
#include <stdio.h>
#include <math.h>

/* DEFINES: */
#define Tmax 400
#define Ymax 26
#define Xmax 50

/* FUNCTION DECLARATIONS: */
float input(void);
float berekenX(float,float,float,float);
float berekenY(float,float,float,float);

/* MAINPROGRAM: */
int main() {

    char lissajou[Ymax][Xmax];
    float stapGrote, t, p, q;

    printf("Geef de waarde van de stapgrote \n");
    stapGrote = input();

    printf("Geef de waarde van p \n");
    p = input();

    printf("Geef de waarde van q \n");
    q = input();

    for(t = 0; t <= Tmax; t = t + stapGrote){
        float X, Y;

        X = berekenX(Xmax, Tmax, p, t);
        Y = berekenY(Ymax, Tmax, q, t);

        lissajou[Y][X] = '*';
    }

    return 0;
}

float input(void) {
    float waarde;
    scanf("%f", &waarde);
    return waarde;
}

float berekenX(float Ymax, float Tmax, float p, float t){
    float w, x;

    w = (2 * M_PI) / Tmax;

    x = (Xmax / 2) * ( 1 + sin(p * w * t));

    return x;
}

float berekenY(float Ymax, float Tmax, float q, float t){
    float w, y;

    w = (2 * M_PI) / Tmax;

    y = (Ymax / 2) * (1 + sin(q * w * t));

    return y;
}

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Nogal wiedes; je hebt Ymax en Tmax opnieuw gedefinieerd, dus regel 49 komt er voor de compiler zo uit te zien:
code:
1
float berekenX(float 26, float 400, float p, float t){

En dat compileert niet!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Soultaker schreef op 26 oktober 2004 @ 01:09:
Nogal wiedes; je hebt Ymax en Tmax opnieuw gedefinieerd, dus regel 49 komt er voor de compiler zo uit te zien:
code:
1
float berekenX(float 26, float 400, float p, float t){

En dat compileert niet!
Kijk aan jou opmerking had ik net genoeg om het probleem op te lossen. Het is eigenlijk ook wel logisch. Maar goed, eigenlijk ben ik ook een java man.

Code is geworden

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* INCLUDES: */
#include <stdio.h>
#include <math.h>

/* DEFINES: */
#define Tmax 400
#define Ymax 26
#define Xmax 50

/* FUNCTION DECLARATIONS: */
float input(void);
float berekenX(float,float);
float berekenY(float,float);

/* MAINPROGRAM: */
int main() {

    char lissajou[Ymax][Xmax];
    float stapGrote, t, p, q;

    printf("Geef de waarde van de stapgrote \n");
    stapGrote = input();

    printf("Geef de waarde van p \n");
    p = input();

    printf("Geef de waarde van q \n");
    q = input();

    for(t = 0; t <= Tmax; t = t + stapGrote){
        float X, Y;

        X = berekenX(p, t);
        Y = berekenY(q, t);

        lissajou[Y][X] = '*';
    }

    return 0;
}

float input(void) {
    float waarde;
    scanf("%f", &waarde);
    return waarde;
}

float berekenX(float p, float t){
    float w, x;

    w = (2 * M_PI) / Tmax;

    x = (Xmax / 2) * ( 1 + sin(p * w * t));

    return x;
}

float berekenY(float q, float t){
    float w, y;

    w = (2 * M_PI) / Tmax;

    y = (Ymax / 2) * (1 + sin(q * w * t));

    return y;
}

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ik snap niet waarom je Ymax ed in een define gooit en door de preprocessor laat afhandelen, als je ook gewoon een constante in C kunt introduceren.
[edit] Ok, dank u :)

[ Voor 7% gewijzigd door Glimi op 26-10-2004 10:23 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Omdat C, in tegenstelling tot C++, iets minder efficient met constantes omgaat. Voor embedded systemen kan dat nog relevant zijn.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Om het moment heb ik een totaal anders probleem. C wordt me wel steeds duidelijk maar toch kom ik niet uit het volgende probleem.

De onderstaande code zal een figuur moeten weergeven met *. Maar tussen de * staan in de uitvoer allemaal rare tekens. Volgens mij maar ik ergens een fout bij het casten van verschillende typen. Zouden jullie eens willen mee kijken wat voor fout ik maar, want ik heb echt geen idee.

mij test uitvoer. De eerste tot en met de laatste invoer waarde gewoon 1, 1, 1 gebruiken.

Volgens mij staat er al zooi in de array die er niet thuis hoort of ik maar een andere domme fout.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* INCLUDES: */
#include <stdio.h>
#include <math.h>

/* DEFINES: */
#define Tmax 400
#define w (2 * M_PI) / Tmax
#define Ymax 26
#define Xmax 50

/* FUNCTION DECLARATIONS: */
double input(void);
double berekenX(double,double);
double berekenY(double,double);

/* MAINPROGRAM: */
int main() {

    char lissajou[Ymax][Xmax];
    double stapGrote, t, p, q;
    int X, Y;

    printf("Geef de waarde van de stapgrote \n");
    stapGrote = input();
    //printf ("stapGrote is: %f\n", stapGrote);

    printf("Geef de waarde van p \n");
    p = input();
    //printf ("p is: %f\n", p);

    printf("Geef de waarde van q \n");
    q = input();
    //printf ("q is: %f\n", q);


    for(t = 0; t <= Tmax; t += stapGrote){
        int Xwaarde, Ywaarde;

        Xwaarde = (int)berekenX(p, t);
        printf ("Xwaarde is: %d\n", Xwaarde);

        Ywaarde = (int)berekenY(q, t);
        printf ("Ywaarde is: %d\n", Ywaarde);

        lissajou[Ywaarde][Xwaarde] = '*';
    }

    for(Y = 0; Y <= Ymax; Y += stapGrote) {
        for(X = 0; X <= Xmax; X += stapGrote) {
            printf("%c", lissajou[Y][X]);
        }
    }

    return 0;
}

double input(void) {
    double waarde = 0;
    scanf("%lf", &waarde);
    return waarde;
}

double berekenX(double p, double t){
    double x;

    x = (Xmax / 2) * ( 1 + sin(p * w * t));

    return x;
}

double berekenY(double q, double t){
    double y;

    y = (Ymax / 2) * (1 + sin(q * w * t));

    return y;
}

[ Voor 64% gewijzigd door Neptunus op 26-10-2004 20:51 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:59

.oisyn

Moderator Devschuur®

Demotivational Speaker

Neptunus schreef op 26 oktober 2004 @ 20:49:
Maar tussen de * staan in de uitvoer allemaal rare tekens.
Je initialiseert je array ook helemaal niet

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Euh.. misschien stom hoor, maar waar en hoe moet ik dat doen.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Neptunus schreef op 26 oktober 2004 @ 20:55:
Euh.. misschien stom hoor, maar waar en hoe moet ik dat doen.
Je moet feitelijk iedere mogelijke positie in je array op het juiste character zetten (ik vermoed een spatie). Dat kan met een geneste for-lus, zoals je ook de weergave doet.

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Shit krijg het niet voor elkaar. Weet het echt niet meer. Hoe mee rik mijn best doe om er uit te komen hoe minder ik er een goede scherm uitvoer van krijg.

na de invoer van de variablen heb ik de volgende code geplaatst.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* INCLUDES: */
#include <stdio.h>
#include <math.h>

/* DEFINES: */
#define Tmax 400
#define w (2 * M_PI) / Tmax
#define Ymax 26
#define Xmax 50

/* FUNCTION DECLARATIONS: */
double input(void);
double berekenX(double,double);
double berekenY(double,double);

/* MAINPROGRAM: */
int main() {

    char lissajou[Xmax][Ymax];
    double stapGrote, t, p, q;
    double X, Y;

    printf("Geef de waarde van de stapgrote \n");
    stapGrote = input();
    //printf ("stapGrote is: %f\n", stapGrote);

    printf("Geef de waarde van p \n");
    p = input();
    //printf ("p is: %f\n", p);

    printf("Geef de waarde van q \n");
    q = input();
    //printf ("q is: %f\n", q);


    for(Y = 0; Y <= Ymax; Y += stapGrote) {
        for(X = 0; X <= Xmax; X += stapGrote) {
            lissajou[Y][X] = ' ';
        }
    }

    for(Y = 0; Y <= Ymax; Y += stapGrote) {
            for(X = 0; X <= Xmax; X += stapGrote) {
                printf("%c", lissajou[X][Y]);
            }
    }

    for(t = 0; t <= Tmax; t += stapGrote){
        double Xwaarde, Ywaarde;

        Xwaarde = (double)berekenX(p, t);
        //printf ("Xwaarde is: %d\n", Xwaarde);

        Ywaarde = (double)berekenY(q, t);
        //printf ("Ywaarde is: %d\n", Ywaarde);

        lissajou[Xwaarde][Ywaarde] = '*';
    }

    for(Y = 0; Y <= Ymax; Y += stapGrote) {
        for(X = 0; X <= Xmax; X += stapGrote) {
            printf("%c", lissajou[X][Y]);
        }
    }

    return 0;
}

double input(void) {
    double waarde;
    scanf("%lf", &waarde);
    return waarde;
}

double berekenX(double p, double t){
    double x;

    x = (Xmax / 2) * ( 1 + sin(p * w * t));

    return x;
}

double berekenY(double q, double t){
    double y;

    y = (Ymax / 2) * (1 + sin(q * w * t));

    return y;
}

[ Voor 114% gewijzigd door Neptunus op 26-10-2004 21:41 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:59

.oisyn

Moderator Devschuur®

Demotivational Speaker

Euh ja, niet echt handig he. Nadat je de sterretjes op de juiste plek hebt gezet maak je de array weer helemaal leeg. Waarom denk je dat het initialiseren heet? Omdat dat het eerste is wat je moet doen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
.oisyn schreef op 26 oktober 2004 @ 21:32:
Euh ja, niet echt handig he. Nadat je de sterretjes op de juiste plek hebt gezet maak je de array weer helemaal leeg. Waarom denk je dat het initialiseren heet? Omdat dat het eerste is wat je moet doen
Heb even de hele code op in de vorige post gezet. Volgens mij maak ik eerste de array schoon met spaties. En vul ik hem daarna pas op met * op de juiste plaatsen. Alleen na het schoonmaken van de array print ik hem en staat hij nog vol met zooi.

Verwijderd

Neptunus schreef op 26 oktober 2004 @ 20:55:
Euh.. misschien stom hoor, maar waar en hoe moet ik dat doen.
C:
1
memset(lissajou, 0x0, sizeof(lissajou));

Hoewel sizeof(lissajou) niet in elke situatie werkt, anders moetje zelf de grootte van je array meegeven. (Ymax*Xmax)

[ Voor 23% gewijzigd door Verwijderd op 26-10-2004 21:45 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:59

.oisyn

Moderator Devschuur®

Demotivational Speaker

Neptunus schreef op 26 oktober 2004 @ 21:41:
[...]


Heb even de hele code op in de vorige post gezet. Volgens mij maak ik eerste de array schoon met spaties. En vul ik hem daarna pas op met * op de juiste plaatsen. Alleen na het schoonmaken van de array print ik hem en staat hij nog vol met zooi.
wellicht omdat je Y en X omdraait bij het schoonmaken?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Verwijderd schreef op 26 oktober 2004 @ 21:41:
[...]
C:
1
memset(lissajou, 0x0, sizeof(lissajou));
Hoewel sizeof(lissajou) niet in elke situatie werkt, anders moetje zelf de grootte van je array meegeven. (Ymax*Xmax)
Hoe kan het dat ik een array aanmaak en via memset alles op null zet, er nog steeds dingen in de array staan. Lang niet zo veel als ik memset niet gebruik hoor. Of kan het ook nog aan de compiler liggen. Ik gebruik bcc5.5 van borland.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* INCLUDES: */
#include <stdio.h>
#include <math.h>
#include <mem.h>

/* DEFINES: */
#define Ymax 20
#define Xmax 20

/* FUNCTION DECLARATIONS: */


/* MAINPROGRAM: */
int main() {

    char lissajou[Xmax][Ymax];
    int stapGrote = 1;
    int X, Y;

    memset(lissajou, 0x0, sizeof(lissajou));

    for(Y = 0; Y <= Ymax; Y += stapGrote) {
            for(X = 0; X <= Xmax; X += stapGrote) {
                printf("%c", lissajou[X][Y]);
            }
    }

    return 0;
}
Dit geeft hier een scherm uitvoer met verschillende char's in de array. Dit kan naar mijn mening nooit goed zijn.

[ Voor 37% gewijzigd door Neptunus op 26-10-2004 21:56 ]


Verwijderd

Neptunus schreef op 26 oktober 2004 @ 21:50:
[...]


Hoe kan het dat ik een array aanmaak en via memset alles op null zet, er nog steeds dingen in de array staan. Lang niet zo veel als ik memset niet gebruik hoor. Of kan het ook nog aan de compiler liggen. Ik gebruik bcc5.5 van borland.

Dit geeft hier een scherm uitvoer met verschillende char's in de array. Dit kan naar mijn mening nooit goed zijn.
Probeer is zelf de size mee te geven. Misschien dat de borland compiler sizeof(array) niet snapt.

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Ik moet natuurlijk wel in de for loops de <= weg halen en veranderen in < omdat je dan altijd er 1 char naast zit.

  • hannos
  • Registratie: Juli 2003
  • Laatst online: 10-02 13:54

hannos

pardon me

Lukt het ook niet als je dmv een geneste for-lus (zoals hierboven al genoemd) de array initialiseerd? Doordat er nog 'vage' waarden in de array zitten kun je toch gewoon concluderen dat de array niet goed is geinitialiseerd?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20-05 20:29

Robtimus

me Robtimus no like you

.oisyn schreef op 26 oktober 2004 @ 21:43:
[...]


wellicht omdat je Y en X omdraait bij het schoonmaken?
*kuch*

.oisyn heeft gelijk: je matrix is gedeclareerd met Xmax rijen en Ymax kolommen in je laatste stuk code, maar je spreekt hem net andersom aan.

[ Voor 30% gewijzigd door Robtimus op 27-10-2004 11:47 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1