Procédure en c
Résolu/Fermé
A voir également:
- Procédure en c
- Le point d'entrée de procédure setdefaultdlldirectories est introuvable ✓ - Forum Windows 7
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Logiciels
- Procedure remplir tableau algorithme - Forum Programmation
- Procédure héritage bara ✓ - Forum Vos droits sur internet
- Le point d'entree de procedure est introuvable kernel32 dll ✓ - Forum Windows
8 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
1 avril 2013 à 22:02
1 avril 2013 à 22:02
Bonjour,
Pas de return tab; puisque tes fonctions (procédures n'existent pas en C) ne retournent rien (void fonction()).
int colonne = 8;
int ligne = 7;
char grille[colonne][ligne];
En C, il faut initialiser statiquement (ou dynamiquement avec les matrices, il existe une troisième méthode mais je ne préfère pas compliquer les choses). Il faut donc passer par :
Ton tableau est une matrice, il faut donc passer les deux dimensions. Exemple : void remplirTab(char tab[][NBCOL],int i,int j)
while (cpt_j < j){
while (cpt_i < i){
C'est correct, mais inhabituel. Usuellement, on fait plutôt :
Ou tout simplement : memset(tab, 'O', sizeof tab); à mettre dans le main().
puts("");
Parfaitement bon, mais autant faire : putchar('\n'); c'est plus "parlant".
Pas de return tab; puisque tes fonctions (procédures n'existent pas en C) ne retournent rien (void fonction()).
int colonne = 8;
int ligne = 7;
char grille[colonne][ligne];
En C, il faut initialiser statiquement (ou dynamiquement avec les matrices, il existe une troisième méthode mais je ne préfère pas compliquer les choses). Il faut donc passer par :
/*à mettre après les #define*/ #define NBCOL 8 #define NBLIG 7 /*dans le code*/ char grille[NBLIG][NBCOL]; /*pour appeler la fonction*/ RemplirTab(tab, NBLIG, NBCOL);
Ton tableau est une matrice, il faut donc passer les deux dimensions. Exemple : void remplirTab(char tab[][NBCOL],int i,int j)
while (cpt_j < j){
while (cpt_i < i){
C'est correct, mais inhabituel. Usuellement, on fait plutôt :
void remplirTab(char tab[][NB_COL], int nbLig, int nbCol) { int i; for(i=0, i < nbLig; i++) { int j; for (j=0; j < nbCol; j++) tab[i][j]='O'; } }
Ou tout simplement : memset(tab, 'O', sizeof tab); à mettre dans le main().
puts("");
Parfaitement bon, mais autant faire : putchar('\n'); c'est plus "parlant".
Merci de ta réponse :)
J'ai améliorer la structure de mon code avec des for comme tu me l'as montrer mais j'ai un problème il me disent j undeclared..
J'ai bien sure un int j avant le for (j'ai essayer le code que tu m'a proposer pour voir et j'ai aussi le même problème..) Si tu as une idées ..; ^^
J'ai améliorer la structure de mon code avec des for comme tu me l'as montrer mais j'ai un problème il me disent j undeclared..
J'ai bien sure un int j avant le for (j'ai essayer le code que tu m'a proposer pour voir et j'ai aussi le même problème..) Si tu as une idées ..; ^^
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
1 avril 2013 à 22:57
1 avril 2013 à 22:57
T'as dû oublier un j quelque part.
Montre ton code qu'on voit les changements :-).
Montre ton code qu'on voit les changements :-).
Voila:
#include <stdio.h> #include <stdlib.h> #include <string.h> /* Remplire un tableau de dimension x,y */ void remplirTab(char tab[][], int x, int y) { int i; for(i=0, i < x; i++) { int j; for (j=0; j < y; j++){ tab[i][j]='O'; } } } /* Lire le tableau de dimension x,y */ void LireTab (char tab[][],int x,int y){ int i; for(i=0, i < x; i++) { int j; for (j=0; j < y; j++) { printf("%c",tab[i][j]); } puts(""); } } int main(void) { int colonne = 8; int ligne = 7; char grille[colonne][ligne]; RemplirTab(grille,colonne,ligne); LireTab(grille,colonne,ligne); return 0; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
1 avril 2013 à 23:04
1 avril 2013 à 23:04
T'as pas tenu compte de toutes mes remarques.
int colonne = 8;
int ligne = 7;
char grille[colonne][ligne];
Ce n'est pas bon ça.
void remplirTab(char tab[][], int x, int y) {
Ce n'est pas bon ça. Il faut faire comme j'ai dit : void remplirTab(char tab[][8], int x, int y) ou tu remplaces le 8 par NBCOL (#define NBCOL 8)
int colonne = 8;
int ligne = 7;
char grille[colonne][ligne];
Ce n'est pas bon ça.
void remplirTab(char tab[][], int x, int y) {
Ce n'est pas bon ça. Il faut faire comme j'ai dit : void remplirTab(char tab[][8], int x, int y) ou tu remplaces le 8 par NBCOL (#define NBCOL 8)
Vraiment désoler mais je n'y arrive pas..
J'avais créé des tableau certe inserer directement dans le main mais jamais avec des #define
Voici ce que sa donne :
J'avais créé des tableau certe inserer directement dans le main mais jamais avec des #define
Voici ce que sa donne :
#include <stdio.h> #include <stdlib.h> #include <string.h> #define nb_colonne 8 #define nb_ligne 7 /* Remplire un tableau de dimension x,y */ void remplirTab(char tab[][nb_colonne], int colonne, int ligne) { int i; for(i=0, i < colonne; i++) { int j; for (j=0; j < ligne; j++){ tab[i][j]='O'; } } } /* Lire le tableau de dimension x,y */ void LireTab (char tab[][],int colonne,int ligne){ int i; for(i=0, i < colonne; i++) { int j; for (j=0; j < ligne; j++) { printf("%c",tab[i][j]); } puts(""); } } int main(void) { int colonne = 8; int ligne = 7; char grille[nb_colonne][nb_ligne]; RemplirTab(grille,nb_colonne,nb_ligne); LireTab(grille,colonne,ligne); return 0; }
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 816
2 avril 2013 à 00:06
2 avril 2013 à 00:06
for(i=0, i < colonne; i++) {
T'as recopié mon code (mais il contenait une erreur ^^).
Un for, c'est : for(i=0;i<colonne;i++)
Il faut le corriger pour l'autre for dans la fonction LireTab()
void LireTab (char tab[][],int colonne,int ligne){
Toutes les remarques faites sur la fonction remplirTab() s'applique pour LireTab(). Je te laisse corriger.
Cdlt,
T'as recopié mon code (mais il contenait une erreur ^^).
Un for, c'est : for(i=0;i<colonne;i++)
Il faut le corriger pour l'autre for dans la fonction LireTab()
void LireTab (char tab[][],int colonne,int ligne){
Toutes les remarques faites sur la fonction remplirTab() s'applique pour LireTab(). Je te laisse corriger.
Cdlt,
rebonjour, j'ai remodifier mais encore une erreur inconnue ..
J'ai tenter de faire passer les tableau en pointeur mais sans succès..
De plus je ne vois pas ce que je fait passer qui n'est pas identique..
Merci d'avance..
puissance4.c: In function 'main': puissance4.c:49: warning: passing arg 1 of 'RemplirTab' from incompatible pointer type puissance4.c:50: warning: passing arg 1 of 'LireTab' from incompatible pointer type
J'ai tenter de faire passer les tableau en pointeur mais sans succès..
De plus je ne vois pas ce que je fait passer qui n'est pas identique..
RemplirTab(grille,nb_colonne,nb_ligne); LireTab(grille,nb_colonne,nb_ligne); void RemplirTab(char tab[][nb_colonne], int colonne, int ligne) void LireTab (char tab[][nb_colonne],int colonne,int ligne)
Merci d'avance..
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
2 avril 2013 à 21:03
2 avril 2013 à 21:03
Sans code, je suis aveugle. Montre ton code :-).
Oups désoler ^^"
#include <stdio.h> #include <stdlib.h> #include <string.h> #define nb_colonne 8 #define nb_ligne 7 /* Remplire un tableau de dimension x,y */ void RemplirTab(char tab[][nb_colonne], int colonne, int ligne) { int i; for(i=0; i < colonne; i++) { int j; for (j=0; j < ligne; j++){ tab[i][j]='O'; } } } /* Lire le tableau de dimension x,y */ void LireTab (char tab[][nb_colonne],int colonne,int ligne){ int i; for(i=0; i < colonne; i++) { int j; for (j=0; j < ligne; j++) { printf("%c",tab[i][j]); } puts(""); } } int main(void) { int colonne = 8; int ligne = 7; char grille[nb_colonne][nb_ligne]; RemplirTab(grille,nb_colonne,nb_ligne); LireTab(grille,nb_colonne,nb_ligne); return 0; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
2 avril 2013 à 21:41
2 avril 2013 à 21:41
Erf, la stupide erreur que j'ai pas vue (mais que t'aurais pu voir ;-)) :
char grille[nb_colonne][nb_ligne];
C'est : char grille[nb_ligne][nb_colonne];
Et tout devrait rentrer dans l'ordre. D'ailleurs, tu peux supprimer : int colonne=8; int ligne=7; c'est inutile maintenant :-).
char grille[nb_colonne][nb_ligne];
C'est : char grille[nb_ligne][nb_colonne];
Et tout devrait rentrer dans l'ordre. D'ailleurs, tu peux supprimer : int colonne=8; int ligne=7; c'est inutile maintenant :-).
ben en fait j'avais prévu de m'en servir pour la suite du code.. les #define je n'ai jamais utiliser..
Bien que j'avais déjà vu une fois y a t'il moyen d'envoyer les tableau sans redonner la taille a chaque fois? Car je vais devoir appeler ce tableau la mainte et mainte fois dans la suite..
Sinon oui je vais corriger de ce pas :)
Merci beaucoup
Bien que j'avais déjà vu une fois y a t'il moyen d'envoyer les tableau sans redonner la taille a chaque fois? Car je vais devoir appeler ce tableau la mainte et mainte fois dans la suite..
Sinon oui je vais corriger de ce pas :)
Merci beaucoup
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
2 avril 2013 à 22:19
2 avril 2013 à 22:19
Beh oui, c'est possible. Tu changes le prototype :
Par exemple : void fct(char tab[][NB_COLONNE]) comme ça pour l'appeler : fct(grille); tout simplement.
Par exemple : void fct(char tab[][NB_COLONNE]) comme ça pour l'appeler : fct(grille); tout simplement.
J'avance dans le programme, mais j'ai dans une fonction un endroit ou je ne fais que tourner en rond..
Comme vous-pouvez le voir j'ai sortis tout mon arsenal des moyen d'impression de caractère.. j'ai tout mixer dans tous les sens mais rien n'y fait je retombe toujours à devoir entrer 2 chiffres pour passer par puts("3");
Le: while (numero=getchar ()!= '\n' && numero!= EOF); c'est moche mais ces tout ce que j'ai trouver pour empêcher de boucler ><'
ce morceau de code est dans une fonction non paramétré qui retourne numero mais le problème se trouve surement dans ce petit morceau de code ...
puts("Entrez le numero de la colonne: "); while(numero<1 || numero>8){ while (numero=getchar ()!= '\n' && numero!= EOF); scanf("%[^\n]d",&numero); // scanf("%d",&numero); //numero = getchar(); puts("3"); }
Comme vous-pouvez le voir j'ai sortis tout mon arsenal des moyen d'impression de caractère.. j'ai tout mixer dans tous les sens mais rien n'y fait je retombe toujours à devoir entrer 2 chiffres pour passer par puts("3");
Le: while (numero=getchar ()!= '\n' && numero!= EOF); c'est moche mais ces tout ce que j'ai trouver pour empêcher de boucler ><'
ce morceau de code est dans une fonction non paramétré qui retourne numero mais le problème se trouve surement dans ce petit morceau de code ...
up*
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
3 avril 2013 à 20:56
3 avril 2013 à 20:56
A travers ce code, je sens que t'as pas compris ce que tu as fait ^^.
Je décompose
while(numero<1 || numero>8){
Attention, numero n'est pas initialisé. Il faut qu'il soit initialisé avant de le comparer.
while (numero=getchar ()!= '\n' && numero!= EOF);
Attention, à bien mettre : (numero=getchar()) entre parenthèse.
Cette ligne permet de vider le buffer clavier. Mais, il ne faut surtout pas au moyen de la variable numero. Sinon getchar() vaut '\n'. Même si tu as refait un scanf() derrière, ce n'est pas clair.
Je te donne une façon plus claire :
Cdlt,
Je décompose
while(numero<1 || numero>8){
Attention, numero n'est pas initialisé. Il faut qu'il soit initialisé avant de le comparer.
while (numero=getchar ()!= '\n' && numero!= EOF);
Attention, à bien mettre : (numero=getchar()) entre parenthèse.
Cette ligne permet de vider le buffer clavier. Mais, il ne faut surtout pas au moyen de la variable numero. Sinon getchar() vaut '\n'. Même si tu as refait un scanf() derrière, ce n'est pas clair.
Je te donne une façon plus claire :
int numero=0; while (numero<1 || numero >8) { int c; puts("Entrez le numero de la colonne: "); scanf("%d",&numero); while ((c=getchar ())!= '\n' && c!= EOF); }
Cdlt,
Encore une fois merci :)
Je n'avais pas du tout penser a cette manière de mettre les parenthèse. J'avais bien évidemment initialisé numero mais je ne l'avais pas copier. Désoler de mon nombre incroyable de question mais j'avais revu tout mon syllabus et fait des recherches sur internet sans succès.
Le point positif est que pour le moment tout mon pseudo code est bon :)
Je n'avais pas du tout penser a cette manière de mettre les parenthèse. J'avais bien évidemment initialisé numero mais je ne l'avais pas copier. Désoler de mon nombre incroyable de question mais j'avais revu tout mon syllabus et fait des recherches sur internet sans succès.
Le point positif est que pour le moment tout mon pseudo code est bon :)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
3 avril 2013 à 21:24
3 avril 2013 à 21:24
Ne sois pas désolé, le forum est là pour ça ! :-)
et j'en suis bien heureux ^^
J'ai déjà créé plein de tableau mais je n'avais jamais utiliser les #define colonne 8 tout comme j'ai déjà utiliser pas mal de fois getchar sans rajouter les parenthèses. J'ai l'impression que les procédures complique tout le code.. mais bon j'ai assimiler le principe. Le but final est de créé un puissance 4 et je compte bien faire étape par étape pour ne pas avoir un foutoir à la fin comme à mon dernier labo de java ou toute mes méthode était fonctionnelle mais une nuit entière ne m'as pas suffi à les imbriquées correctement .. résultat j'ai pas hâte de voir ma note..
J'ai déjà créé plein de tableau mais je n'avais jamais utiliser les #define colonne 8 tout comme j'ai déjà utiliser pas mal de fois getchar sans rajouter les parenthèses. J'ai l'impression que les procédures complique tout le code.. mais bon j'ai assimiler le principe. Le but final est de créé un puissance 4 et je compte bien faire étape par étape pour ne pas avoir un foutoir à la fin comme à mon dernier labo de java ou toute mes méthode était fonctionnelle mais une nuit entière ne m'as pas suffi à les imbriquées correctement .. résultat j'ai pas hâte de voir ma note..
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
3 avril 2013 à 21:58
3 avril 2013 à 21:58
Quand on débute, on ne voit pas toujours l'intérêt des fonctions.
Tu peux te dire que cela permet la réutilisation du code dans la suite du programme sans faire un copier coller. Cela facilite par la suite le maintien du programme et la mise à jour. Imagine si tu travailles sur un projet avec d'autres collègues :-).
Et un autre conseil, pendant que tu fais tes fonctions, n'oublie pas de les commenter petit à petit. C'est long, c'est fastidieux, mais indispensable (pour la note aussi ;-))
Bon courage.
Tu peux te dire que cela permet la réutilisation du code dans la suite du programme sans faire un copier coller. Cela facilite par la suite le maintien du programme et la mise à jour. Imagine si tu travailles sur un projet avec d'autres collègues :-).
Et un autre conseil, pendant que tu fais tes fonctions, n'oublie pas de les commenter petit à petit. C'est long, c'est fastidieux, mais indispensable (pour la note aussi ;-))
Bon courage.