Langage C, fonction avec tableaux
Fermé
Pineau
-
4 avril 2008 à 15:18
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 9 avril 2008 à 15:35
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 9 avril 2008 à 15:35
A voir également:
- Langage C, fonction avec tableaux
- Fonction si et - Guide
- Langage ascii - Guide
- Tableaux croisés dynamiques - Guide
- Langage binaire - Guide
- Fonction moyenne excel - Guide
6 réponses
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
4 avril 2008 à 15:58
4 avril 2008 à 15:58
Bonjour,
Rien de grave :
//Tableaux
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
initableau(TAB1, TAB2) ;
____________________________________
Rien de grave :
//Tableaux
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
initableau(TAB1, TAB2) ;
____________________________________
/Passation des adresses de pointeurs. void initableau(int (*I), int (*P)) { //tu n'as pas initialisé i. Ca plantait d'entrée au scanf("%d", &I[i]); int i = 0; do { printf("Numero d intervention : "); scanf("%d", &I[i]); if (I[i]!=-1) { printf("Indice de priorite : "); scanf("%d", &P[i]); printf("\n\n\n"); } i++; } while (I[i-1]!= -1); }
Decidément je ne suis pas très doué :)
La fonction fonctionne pour le debut, mais pour l'utiliser dans mon switch je dois pouvoir changer la valeur de i.
Vous me l'avez fait initialiser a 0 dans la fonction, mais est il possible d'utiliser cette fonction en ayant un i different ?
Je m'explique : lorsque je sors de ma boucle j'utilise une variable que j'initialise à var=i-2. Cette variable me sert à trier mon tableau en fonction des valeurs des indices. Cependant par la suite l'utilisateur doit etre en mesure de pouvoir ajouter des interventions à la suite des tableaux déjà existants.
Pour ce faire j'ai besoin qu'en entrant dans ma fonction, i soit initialisé a i=var+1.
Est il possible lors de l'appel de fonction de faire en sorte que i prenne cette valeur ?
Merci beaucoup et désolé du dérangement.
La fonction fonctionne pour le debut, mais pour l'utiliser dans mon switch je dois pouvoir changer la valeur de i.
Vous me l'avez fait initialiser a 0 dans la fonction, mais est il possible d'utiliser cette fonction en ayant un i different ?
Je m'explique : lorsque je sors de ma boucle j'utilise une variable que j'initialise à var=i-2. Cette variable me sert à trier mon tableau en fonction des valeurs des indices. Cependant par la suite l'utilisateur doit etre en mesure de pouvoir ajouter des interventions à la suite des tableaux déjà existants.
Pour ce faire j'ai besoin qu'en entrant dans ma fonction, i soit initialisé a i=var+1.
Est il possible lors de l'appel de fonction de faire en sorte que i prenne cette valeur ?
Merci beaucoup et désolé du dérangement.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
4 avril 2008 à 17:21
4 avril 2008 à 17:21
Bonjour,
Attention à bien "gérer" la variable i.
void initableau(int (*I), int (*P), int &i)
Eliminer l'initialisation de i.
//int i = 0;
int i = 0;
i = n....................;
initableau(TAB1, TAB2, i) ;
Ta manière de procéder pour passer les tableaux est tout aussi recevable que celle que j'ai codée. Elle est cependant déconseillée pour des questions de lisibilité qui peuvent induire une confusion quant à la nature execte de ce qui est effectivement passé (tableau ou pointeur).
P.S. J'ai défini i en tant que variable pointée &i de manière à ce que tu puisses récupérer sa valeur modifiée en sortie de initableau.
Cordialement.
Cchristian.
Attention à bien "gérer" la variable i.
void initableau(int (*I), int (*P), int &i)
Eliminer l'initialisation de i.
//int i = 0;
int i = 0;
i = n....................;
initableau(TAB1, TAB2, i) ;
Ta manière de procéder pour passer les tableaux est tout aussi recevable que celle que j'ai codée. Elle est cependant déconseillée pour des questions de lisibilité qui peuvent induire une confusion quant à la nature execte de ce qui est effectivement passé (tableau ou pointeur).
P.S. J'ai défini i en tant que variable pointée &i de manière à ce que tu puisses récupérer sa valeur modifiée en sortie de initableau.
Cordialement.
Cchristian.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
4 avril 2008 à 18:02
4 avril 2008 à 18:02
Bonjour,
Je viens d'apprendre quelque chose que (forcément) j'ignorais, cette manière de procéder (int &i) est spécifique au C++. et tu es en C, alors si tu souhaites que j'essaie de mon côté de mettre en place l'équivalent (en C) dis-le moi.
Je viens d'apprendre quelque chose que (forcément) j'ignorais, cette manière de procéder (int &i) est spécifique au C++. et tu es en C, alors si tu souhaites que j'essaie de mon côté de mettre en place l'équivalent (en C) dis-le moi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
5 avril 2008 à 14:42
5 avril 2008 à 14:42
Bonjour,
Fais un test chez toi, dis-moi si ça tourne, chez moi ça tourne mais je me méfie maintenant des incompatibilités C <=> C++;
____________________________________________
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
i = n ..................;
initableau(TAB1, TAB2, &i) ;
Fais un test chez toi, dis-moi si ça tourne, chez moi ça tourne mais je me méfie maintenant des incompatibilités C <=> C++;
void initableau(int (*I), int (*P), signed int *i) ; //Passation des adresses (pointeurs). void initableau(int (*I), int (*P), signed int *i) { //Pour des raisons que j'ignore il est préférable de ne pas utiliser // *i directement en tant qu'indice (résultats incohérents). int j = *i; do { printf("Numero d intervention : "); scanf("%d", &I[j]); if (I[j]!=-1) { printf("Indice de priorite : "); scanf("%d", &P[j]); printf("\n\n\n"); } j++; } while (I[j-1]!= -1); //restauration de *i avec la valeur de j pour utilisation dans la fonction appelante. *i = j; return ; }
____________________________________________
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
i = n ..................;
initableau(TAB1, TAB2, &i) ;
J'ai verifié ca marche. Merci beaucoup de votre aide.
J'espere ne pas vour avoir trop deranger.
Merci encore.
J'espere ne pas vour avoir trop deranger.
Merci encore.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
9 avril 2008 à 15:35
9 avril 2008 à 15:35
Bonjour,
Merci pour ce retour d'information, ça ne m'a pas du tout dérangé, bon courage !
Merci pour ce retour d'information, ça ne m'a pas du tout dérangé, bon courage !
4 avril 2008 à 16:44
Par contre petit truc que je n'ai pas compris ...
Pourquoi doit on utiliser les pointeurs des tableaux dans la declaration des variables de la fonction ?
Merci encore.