Fonction en C

Fermé
Marie032 - 12 mai 2008 à 00:04
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 18 mai 2008 à 20:02
Bonjour,


J'ai du mal avec le C et je dois écrire la fonction int chercheCandidatCacheLigne(Grille g, int ligne, int val) qui pour la ligne ligne retourne le numéro de la colonne où se trouve le candidat caché val, ou -1 si il n'y en a pas.

quelqun a une idée ?

4 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
12 mai 2008 à 00:16
Bonsoir,
Peux-tu expliciter ta structure (ou ton type défini) Grille s'il te plait?
J'aimerais notamment connaître le nombre de colonnes de ta grille (c'est pratique pour faire une boucle ;).

Merci
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
12 mai 2008 à 00:39
tu fais une boucle for pour parcourir la ligne quand la valeur de val est égale a la valeur de la case dans laquelle tu te trouves tu renvoies la valeur de l'indice qui te permet de parcourir la ligne

bonne chance ;)
0
Exact j'ai oublié de préciser que cété une grille de sudoku

j'ai pensé à


int cherchecandidatcacheligne ( grille g , int ligne , int val ) {

while ( j< 9 ) {

if grille [ligne][j] == val

return (j)

j++

}

return -1

}


par contre j'ai du mal à faire cette fonction :

Ecrire la fonction int candidatsCachesLigne(Grille g) qui trouve et note les candidats cachés sur les lignes
puis retourne le nombre de candidat cachés notés.

j'avais pensé a faire une boucle avec un compteur mais je sais pas sais comment faire pour savoir si le candidats est caché ( c'est à dire qu'il n'est pas dans la grille de sudoku initial )


merci d'avance pour vos réponse ( et pour ceux qui m'ont répondu avant )
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329 > Marie032
12 mai 2008 à 21:22
Bonjour,
Pour ton code, tu y es presque ! Quelques commentaires toutefois:
- ici une boucle for est préférable car tu connais exactement le nombre d'itérations maximales (mais bon, un while fonctionnera aussi, c'est un détail :)
- ta variable j doit être initialisée et déclarée
- enfin, si ton nombre de lignes et de colonnes de ta grille est fixe, il est préférable d'utiliser un #define plutôt que la valeur directement dans le code (non seulement tu auras un gain à l'exécution, et en plus tu pourras modifier beaucoup plus facilement ton programme si un jour tu dois modifier ces variables).

Je te propose donc le code suivant:
#define NB_COLONNES 9
#define NB_LIGNES 9

int cherchecandidatcacheligne ( grille g , int ligne , int val ) {
for( int colonne_courante=0; colonne_courante<NB_COLONNES; colonne_courante++) {
if (grille[ligne][colonne_courante] == val)
return colonne_courante;
}
return -1;
} 


J'ai tapé ce code à l'arrache sans le tester donc il ne compile peut-être pas, mais l'idée est là ;)
0
ok merci marco

sinon j'avias une autre fonctino à écrrie

Ecrire la fonction int candidatsCachesLigne(Grille g) qui trouve et note les candidats cachés sur les lignes
puis retourne le nombre de candidat cachés notés.

je sais pas trop comment l'écrire , quelqun a une idée ? c'est toujorus un sudoku et les canddiats caché sont les candidats qui n'aparaisse pas dnas la grille initiale ( le sudoku quand il est pas remplei quoi )
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
13 mai 2008 à 20:13
Bonsoir,
Qu'entends tu par "la fonction note les candidats cachés sur les lignes" ?
Comment notes-tu les candidats ?
0
Je pense qu'il faut retourner les candidats cachés ( c'est à dire qui n'apparaisse pas dans la grille iniale
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
13 mai 2008 à 20:55
Ta question n'est vraiment pas claire.
Que doit exactement faire ta fonction : retourner le nombre de candidats cachés de ta grille, ou retourner la liste des candidats cachés?
Connais-tu la valeur des candidats cachés ou est-ce qu'au final le but de ton exercice est de les trouver? (d'après ta question initiale, je pense que tu ne les connais pas vu qu'on faisait un test si val==null).
0
Marie032 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
17 mai 2008 à 12:55
oui c'est de les trouver et de retourner le nombre de candidat caché
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329 > Marie032
18 mai 2008 à 20:02
Hello,
Toujours avec nos deux macros:
#define NB_COLONNES 9
#define NB_LIGNES 9

int candidatsCachesLigne(Grille g) {
 int compteur;
 for(int i=0; i<NB_LIGNES; i++) {
  for(int j=0; j<NB_COLONNES; j++) {
   if (/*ICI IL FAUT METTRE TA CONDITION QUI T'AFFIRME SI UN CANDIDAT EST CACHE OU PAS*/)
    compteur++;
  }
 }
 return compteur;
}


Comme tu peux le voir, je ne sais pas comment tu sais si un candidat est caché ou pas (ta structure grille est de type int** donc je ne sais pas comment tu stockes cette information). A toi de compléter la condition donc !
0