Une programmation du club sport sportif

Fermé
sigmaaaa Messages postés 7 Date d'inscription jeudi 13 décembre 2012 Statut Membre Dernière intervention 3 janvier 2013 - 13 déc. 2012 à 10:44
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 13 déc. 2012 à 20:47
Bonjour,

J'ai une exercice à l'école. Je suis bloqué à partir de la question 3. Vous pouvez m'aider, s'il vous plaît??

Le sujet:

On s'intéresse à la gestion des inscriptions à un club sportif. On va créer un tableau tab_insc[N][P] avec N: le numéro d'étudiant, et P: le numéro de sport. Après on va remplir par hasard le tableau avec deux numéros: 1 et 0 (1 càd l'étudiant est inscrite au sport et 0 sinon).

Question 1: Ecrivez la fonction: void remplir_tab(int tab_insc[N][P]) pour afficher le tableau.

Question 2: Ecrivez la fonction: int nb_sports(int p, int tab_insc[N][P]) qui renvoie le nombre de sports auxquels l'étudiant numéro p est inscrite.

Question 3: Ecrivez la fonction: void compter_inscrits(int tab_insc[N][P],int tab_nb_inscrits[P]) qui utilise les données contenues dans le tableau tab_insc et qui, pour chaque sport:
- compte le nombre d'inscrits,
- affiche le résultat: le numéro du sport et le nombre d'inscrits,
- affecte cette valeur à l'élément correspondant du tableau tab_nb_inscrits
...

J'ai fait les codes jusqu'à question 2 et elles fonctionnent bien, comme ça:

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

#define P 5
#define N 10

void remplir_tab(int tab_insc[N][P])
{
	int i,j;
	srand(time(0));
	printf ("Le Tableau est:\n");

	for(i=0;i<N;i++)
	{
		for(j=0;j<P;j++)
		{
			tab_insc[i][j]=rand()%2;
			printf ("%d ",tab_insc[i][j]);
		}
		printf ("\n");
	}
}

void nb_sports(int p,int tab_insc[N][P])
{
	int j,s=0;
	for (j=0;j<P;j++)
	{
		if (tab_insc[p-1][j]==1)
		{
			s++;
		}
	}
	printf ("Le nombre de sports que vous avez choisi est: %d\n",s);
}

int main(void)
{
	int p,tab_insc[N][P];
	remplir_tab(tab_insc);
	printf ("Veillez donner le numéro d'étudiant:\n");
	scanf ("%d",&p);
	nb_sports(p,tab_insc);
	return 0;
}


A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
13 déc. 2012 à 20:47
Bonjour,

Question 1/
srand(time(0)); ne le met pas dans cette fonction mais dans le main().

Question 2/
void nb_sports(int p,int tab_insc[N][P])
Ta fonction doit être de type int nb_sports(...); et non void nb_sports(...). Et plutôt qu'afficher le résultat dans la fonction, tu dois renvoyer le résultat (return); et déporter l'affichage dans le main().

if (tab_insc[p-1][j]==1)
D'ailleurs plutôt que faire if(...), t'avais juste à faire une somme de toute ligne (puisque 0 est un élément neutre pour l'addition). C'est plus performant (bien que négligeable).
Plutôt que p-1, j'aurais mis p tout court. Puisque dans le tableau tab_insc[N][P] N représente le numéro de l'étudiant (et non N+1)

Question 3/
Ecrivez la fonction: void compter_inscrits(int tab_insc[N][P],int tab_nb_inscrits[P]) qui utilise les données contenues dans le tableau tab_insc et qui, pour chaque sport:
C'est quoi qui te pose problème précisément ?
- compte le nombre d'inscrits,
Tu dois calculer le nombre de personnes inscrits au sport i. Une simple boucle for suffit.

- affiche le résultat: le numéro du sport et le nombre d'inscrits,
Il suffit d'afficher la précédente valeur calculée.

- affecte cette valeur à l'élément correspondant du tableau tab_nb_inscrits
Il suffit de stocker cette valeur dans tab_nb_insc[i].

J'ai juste préciser comment calculer tab_nb_insc[i]. Il faudra faire une autre boucle for pour remplir toutes les valeurs du tableau.

Cdlt,
0