Votre question

pb en langage C [résolu]

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
Anonyme
7 Décembre 2007 18:12:43

Bonjour,

j'ai un algo a faire pour un tp
J'ai un pb quand je passe mon programme dans un compilateur (CodeWarrior)

j'ai :

tab[1]=x1;

et il me dit lors de la compilation : opérande illégal
il souligne le crochet apres le i

Il m'affiche ca a chaque fois que j'utilise un tableau avec i

Si vous avez une idée ca m'aiderai bien
Merci

Djipss

Autres pages sur : langage resolu

a b L Programmation
7 Décembre 2007 21:49:53

comment as-tu déclaré tab ?
Anonyme
8 Décembre 2007 09:40:11

float tab[4][100];
Contenus similaires
a b L Programmation
8 Décembre 2007 13:54:51

Comment as-tu déclaré i et x1 ?
8 Décembre 2007 14:28:50

ca me parait louche comme erreur, ca m'étonnerait pas qu'il y ait une erreur de syntaxe en amont.
Anonyme
8 Décembre 2007 16:09:37

Le but du programme est : l'uilisateur entre des rectangles(des feuilles dans l'énoncé) avec la valeur en bas a gauche (x1,y1) et la valeur en haut a droite (x2,y2). Le but est de savoir la surface recouverte en ne comptant qu'une seule fois les cases recouverte plusieurs fois

J'ai fait 1 tableau pour enregistrer les valeurs (x1,y1,x2,y2), le second sert pour compter: je met 0 quand il n'y a rien et 1 quand il y a quelque chose, puis je fais la somme des 0 et des 1 pour avoir la surface.


Voila le programme:


// A minimal Win32 console app

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

void main (void)

{
float t[100][100],tab[4][100],N,x1,y1,x2,y2,i,A;

while (N>100)
{
printf("nombre de feuilles ?\n");
scanf("%f",&N);
}
i=0;
while (i<N)
{
while ((x2<x1<100) & (y2<y1<100))
{
random (x1,yi1);
random (x2,y2);
}
}
tab[1]=x1;
tab[2]=y1;
tab[3]=x2;
tab[4]=y2;
t[100][100]=0;

for (x1; x1<x2;x1++);
{
for (y1; y1<y2; y1++);
{
t[x1][y1]=1;
}
}
i++;


A=somme t[100][100];
printf("L'aire recouverte par les feuilles est de [%f]\n",A);
}

Si vous trouvez d'autres erreurs dites le moi :) 
Merci de m'aider
8 Décembre 2007 16:18:17

y en a bcp :) 
l'indice d'un tableau doit etre entier (int)
meme si syntaxiquement, c'est pas une erreur, le ";" après le for est une erreur, le bloc {} n'est plus rattaché au for.
"somme t" ne veut pas dire grand chose!

random ne prend pas d'argument et retourne le resultat:
long int random(void);
a b L Programmation
8 Décembre 2007 16:19:18

i est un float
dans un index de tableau il faut mettre une valeur entière, donc ne pas utiliser le flottant.
déclare par exemple:
int i;

EDIT: grillé :) 
8 Décembre 2007 16:28:36

d'ailleurs:
  1. i=0;
  2. while (i<N)
  3. {
  4. while ((x2<x1<100) & (y2<y1<100))
  5. {
  6. random (x1,yi1);
  7. random (x2,y2);
  8. }
  9. }

est une boucle infinie :p 
i n'est pas réactualisé
Anonyme
8 Décembre 2007 17:16:01

J'ai changé quelques trucs, qu'est ce que vous en pensez ?

{
float t[100][100],tab[4][100],N,x1,y1,x2,y2,A;
int i,j,k;

while (N>100)
{
printf("nombre de feuilles ?\n");
scanf("%f",&N);
}

i=0;
j=0;
k=0;
t[100][100]=0;

while (i<N)
{
while ((x2<x1<100) & (y2<y1<100))
{
x1= rand()%100;
y1= rand()%100;
x2= rand()%99;
y2= rand()%99;
tab[1]=x1;
tab[2]=y1;
tab[3]=x2;
tab[4]=y2;
i++;
}
}
for (tab[1][j]; tab[1][j]<tab[3][j];j++)
{
for (tab[2][k]; tab[2][k]<tab[4][k]; k++)
{
t[j][k]=1;
}
}

A=somme t[100][100];
printf("L'aire recouverte par les feuilles est de [%f]\n",A);
}
8 Décembre 2007 19:34:55

en C (et dans plein d'autres langage) on compte à partir de 0.
tab[4] n'existe pas
si tu utilises % (modulo) pourquoi tu déclares tes variables en float??

for (A; B; C)
A: l'instruction exécutée avant de commencer la boucle.
tab[1][j] est censé faire quoi?

le bloc de la boucle
while ((x2<x1<100) & (y2<y1<100))
est mal défini vu que tu peux très bien dépasser 100 pour i avant que la condition ne soit vraie.

de plus "ET" en C, c'est "&&"
etc... :p 
Anonyme
8 Décembre 2007 22:46:03

J'utilise le % car c'est ca que j'ai vu en cours :) 
Pour le tableau j'ai mis : tab[0]=x1;
j'ai modifié ma boucle while avec le i
j'ai fait une boucle for pour la somme

mais j'ai une erreur lors de la compilation avec Devc++, il me met " `main' must return `int' "sur le premier { et je ne trouve pas d'ou ca peut venir
8 Décembre 2007 23:23:13

tout simplement parce que le main retourne le code d'erreur du programme et doit donc etre déclaré avec un int en retour:
int main ()
{
/* .... */
return 0;
}
enfin pour etre plus précis, il faut aussi les parametres qui correpondent aux arguments de ligne de commande, mais bon, ca ne génére pas d'erreur.
Anonyme
8 Décembre 2007 23:39:12

c'est bon merci bien pour tout aide.
un dernier truc:
quelle est la différence entre int main () et void main()
9 Décembre 2007 00:54:53

une question... tu l'as fait au pif le programme? :D 

type_de_retour nom_de_la_fonction (arguments);
void indique souvent qu'il n'y a pas de retour
Anonyme
9 Décembre 2007 01:01:12

c pas au pif ;) 
on m'a dit en cours void pour le programme principal et int pour le sous programme

Merci encore :) 
9 Décembre 2007 01:06:14

tu peux dire à ton prof de retourner à l'école :) 
ou alors ce qui serait plus probable, soit plus attentif en cours

de rien
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS