Probleme avec les tableaux en c
Fermé
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
-
22 oct. 2010 à 15:55
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 - 24 oct. 2010 à 23:57
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 - 24 oct. 2010 à 23:57
A voir également:
- À l’aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 61 64 6d 69 73 73 69 6f 6e
- À l'aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 61 64 6d 69 73 73 69 6f 6e - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Winrar 64 bits windows 10 - Télécharger - Compression & Décompression
- Le mode suivi des modifications - Guide
14 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
22 oct. 2010 à 16:12
22 oct. 2010 à 16:12
Bonjour,
while (&tableau[i]!= 0)
Attention, l'esperluette (&) permet de récupérer l'adresse. Ici on compare la valeur donc, il ne faut pas mettre l'esperluette => while (tableau[i]!=0) fera amplement l'affaire.
(&tab[j]==&tableau[i]);
Pourquoi des parenthèses ? Elles sont inutiles. De plus toujours le même problème d'esperluette. Et enfin, pour faire une affectation, il faut mettre un simple signe égal (=).
Ton algorithme ne correspond avec ton énoncé. Ici tu obliges ton utilisateur à choisir des valeurs différentes de 0 alors qu'il doit pouvoir en mettre tant que c'est différent de 0. Donc, tu dois revoir ce point.
Ensuite la recopie du tableau dans le for est une mauvaise idée. Non seulement tu fais des itérations pour rien car tu recopies le début du tableau à chaque itération et en plus c'est diminue la lisibilité.
Ensuite, initialiser les variables p et j à 0 dans la boucle for n'est pas très clair puisque ce ne sont pas les compteurs. Vaut mieux les initialiser à l'extérieur.
Et enfin je te conseille dans un premier temps de ne pas faire sur les float mais sur des int. Car sinon ça sera un peu plus dur et comme ton code contient beaucoup d'erreur, autant simplifier pour l'instant ;-)).
Corrige le tout et reposte ton programme sans oublier de mettre des balises code autour (à droite du bouton souligné).
Cdlt,
while (&tableau[i]!= 0)
Attention, l'esperluette (&) permet de récupérer l'adresse. Ici on compare la valeur donc, il ne faut pas mettre l'esperluette => while (tableau[i]!=0) fera amplement l'affaire.
(&tab[j]==&tableau[i]);
Pourquoi des parenthèses ? Elles sont inutiles. De plus toujours le même problème d'esperluette. Et enfin, pour faire une affectation, il faut mettre un simple signe égal (=).
Ton algorithme ne correspond avec ton énoncé. Ici tu obliges ton utilisateur à choisir des valeurs différentes de 0 alors qu'il doit pouvoir en mettre tant que c'est différent de 0. Donc, tu dois revoir ce point.
Ensuite la recopie du tableau dans le for est une mauvaise idée. Non seulement tu fais des itérations pour rien car tu recopies le début du tableau à chaque itération et en plus c'est diminue la lisibilité.
Ensuite, initialiser les variables p et j à 0 dans la boucle for n'est pas très clair puisque ce ne sont pas les compteurs. Vaut mieux les initialiser à l'extérieur.
Et enfin je te conseille dans un premier temps de ne pas faire sur les float mais sur des int. Car sinon ça sera un peu plus dur et comme ton code contient beaucoup d'erreur, autant simplifier pour l'instant ;-)).
Corrige le tout et reposte ton programme sans oublier de mettre des balises code autour (à droite du bouton souligné).
Cdlt,
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
22 oct. 2010 à 16:25
22 oct. 2010 à 16:25
j'ai modifié le code mais ça ne marche encore pas :(((
je veux remplir mon premier tableau tant que le réel entré n'est pas un zéro et dés qu'il y a un zéro la copie s'effectue .voici le nouveau code
je veux remplir mon premier tableau tant que le réel entré n'est pas un zéro et dés qu'il y a un zéro la copie s'effectue .voici le nouveau code
#include <stdio.h> #include <stdlib.h> void copie(float*tableau,float*tab,int p); int main() { int j,i,p; float tableau[100]; float tab[100]; for (i=0,j=0,p=0;i<100;i++) { while (tableau[i]!= 0) { printf("donner la valeur %d : ",i+1); scanf("%f",&tableau[i]); } } if (tableau[i]=0) p=i; copie(tableau,tab,p); system("pause"); return 0; } void copie(float*tableau,float*tab,int p) { int j,i; for(j=0;j<p;i++) { tab[j]=tableau[i]; printf("val du tab est: %f\n",tab[j]); } }
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
22 oct. 2010 à 16:37
22 oct. 2010 à 16:37
en fait dans la fonction copie c'est j++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
22 oct. 2010 à 16:44
22 oct. 2010 à 16:44
Relis mes commentaires car t'as pas tenu compte de tous...
De plus, tu as rajouté des erreurs : if (tableau[i]=0)
J'ai jamais dit de mettre un simple égal dans les if. Il faut remettre le double égal.
De plus, tu as rajouté des erreurs : if (tableau[i]=0)
J'ai jamais dit de mettre un simple égal dans les if. Il faut remettre le double égal.
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
22 oct. 2010 à 16:53
22 oct. 2010 à 16:53
j'ai modifié (encore une fois) le code,la saisie fonctionne mais le probleme réside maintenant à la saisie du zéro,ça ne marche pas
if (tableau[i]==0) { p=i; copie(tableau,tab,p); } system("pause"); return 0; } void copie(float*tableau,float*tab,int p) { int j,i; for(j=0,i=0;j<p;j++,i++) { tab[j]=tableau[i]; printf("val du tab est: %f\n",tab[j]); } }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
22 oct. 2010 à 16:58
22 oct. 2010 à 16:58
L'algorithme n'est toujours pas bon.
Tu obliges l'utilisateur à choisir des nombres différents de 0. Il faudrait faire intervenir dans la boucle initial le fait que dès qu'un nombre tapé par l'utilisateur est différent de 0 la boucle s'arrête.
Tu obliges l'utilisateur à choisir des nombres différents de 0. Il faudrait faire intervenir dans la boucle initial le fait que dès qu'un nombre tapé par l'utilisateur est différent de 0 la boucle s'arrête.
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
22 oct. 2010 à 17:01
22 oct. 2010 à 17:01
non,je veux que l'utilisateur tape des nombres différent de zéro,le zéro c'est le signal de la fin de la boucle
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
22 oct. 2010 à 17:10
22 oct. 2010 à 17:10
Je remets l'énoncé du départ que tu as mis : j'ai écris un code qui me permet de remplir un premier tableau tant que l'utilisateur ne saisi pas zéro et dés que cette condition n'est plus valable
Je comprends que l'utilisateur tape tous les nombres qu'il veut et lorsqu'il choisit 0, la boucle s'arrête.
Si c'est le cas, ton programme ne fait pas ça.
Actuellement ton programme oblige l'utilisateur à choisir des nombres différents de 0 jusqu'à ce qu'il atteint la fin du tableau...
Alors soit ton algorithme est faux, soit ton énoncé n'est pas clair...
Je comprends que l'utilisateur tape tous les nombres qu'il veut et lorsqu'il choisit 0, la boucle s'arrête.
Si c'est le cas, ton programme ne fait pas ça.
Actuellement ton programme oblige l'utilisateur à choisir des nombres différents de 0 jusqu'à ce qu'il atteint la fin du tableau...
Alors soit ton algorithme est faux, soit ton énoncé n'est pas clair...
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
22 oct. 2010 à 22:45
22 oct. 2010 à 22:45
comment pourrai-je mettre la saisie à condition??en d'autre terme comment mettre une condition sur la valeur lue par scanf pour le remplissage du tableau??
ydurce
Messages postés
78
Date d'inscription
samedi 9 octobre 2010
Statut
Membre
Dernière intervention
12 décembre 2010
18
23 oct. 2010 à 00:01
23 oct. 2010 à 00:01
attention à ne pas confondre l'adresse d'une donnée avec la donnée !
l'opérateur & retourne une adresse (ou un pointeur sur ..).
et une adresse ne sera jamais égale à 0 (du moins sur un PC)
Si scanf réclame une adresse , c'est du fait que le C travaille en passage par valeurs des paramètres de fonctions et non en passage par référence (comme pascal par ex ). Donc, pour changer la valeur de la variable, il nécessite l'adresse, d'où la nécessité du &.
Par contre, les valeurs de tableau sont accédées directement par tab[n] (&tab[n] donnant l'adresse de la valeur et non la valeur).
bon courage.
l'opérateur & retourne une adresse (ou un pointeur sur ..).
et une adresse ne sera jamais égale à 0 (du moins sur un PC)
Si scanf réclame une adresse , c'est du fait que le C travaille en passage par valeurs des paramètres de fonctions et non en passage par référence (comme pascal par ex ). Donc, pour changer la valeur de la variable, il nécessite l'adresse, d'où la nécessité du &.
Par contre, les valeurs de tableau sont accédées directement par tab[n] (&tab[n] donnant l'adresse de la valeur et non la valeur).
bon courage.
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
23 oct. 2010 à 21:01
23 oct. 2010 à 21:01
voici le code modifié mais ça ne marche encore pas
l'execution donne une saisie infini des chiffres que ce soit un zero ou pas
alors que je veux que la saisie s'arrete en tapant zero et enregistrer l'indice de la case de zero pour l'utiliser aprés.
l'execution donne une saisie infini des chiffres que ce soit un zero ou pas
alors que je veux que la saisie s'arrete en tapant zero et enregistrer l'indice de la case de zero pour l'utiliser aprés.
#include <stdio.h> #include <stdlib.h> int main() { int i; float tableau[100]; float c='\0'; i=0; do { printf("entrer un chiffre :\n "); scanf("%f",&c); tableau[i]=c; i++; } while(c='0'); if (c=='0') { p=i; } return(p); system("pause"); return 0; }
marooh
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
23 oct. 2010 à 21:28
23 oct. 2010 à 21:28
oooooppps j'ai fais quelques erreurs que j'ai corrigé
#include <stdio.h> #include <stdlib.h> int main() { int i,p; float tableau[100]; float c; i=0; p=0; do { printf("entrer un chiffre :\n "); scanf("%f",&c); tableau[i]=c; i++; } while(c=0); if (c=0) p=i; return(p); system("pause"); return 0; }
ydurce
Messages postés
78
Date d'inscription
samedi 9 octobre 2010
Statut
Membre
Dernière intervention
12 décembre 2010
18
24 oct. 2010 à 23:57
24 oct. 2010 à 23:57
while (c==0) et if (c==0)
je ne vois pas trop ce que fait le return(p) dans le contexte à moins que le code ne soit dans une fonction ?
je ne vois pas trop ce que fait le return(p) dans le contexte à moins que le code ne soit dans une fonction ?