bonjour à tous et merci d'etre venu visiter cette page et tenter de m'aider. ;)
j'aurais besoin de vous pour m'aider dans la programmation. il s'agit d'exercices sur les ensembles à programmer en langage C :
j'ai besoin d'aide que pour le premier exercice (j'en ai 8 à faire) car si je comprends tout au premier je pourrais faire les autres plus facilement. j'ai donc fais des recherches et fais quelques trucs mais j'étais pas sur donc j'ai pas mis grand chose, mais s'il vous plait j'aimerais pouvoir programmer ceci :
- l'ensemble sera une structure contenant :
le nombre d'éléments de l'ensemble
le tableau contenant les éléments
donc :
# include<stdio.h>
struct ensemble {
int nb;
int tab [N];
} ;
typedef struct ensemble ensemble ;
1./* lire les éléments d'un ensemble */
ensemble lire ()
{
int i ;
(je ne sais pas quoi mettre dans ma boucle for).
}
2./* afficher les éléments d'un ensemble */
void afficher ( ensemble E)
{
int i;
for (i=0; i < N; i++)
{
(je ne vois pas quoi mettre dans la boucle, E.tab[i] peut etre ? )
}
3./* un élément appartient-il à l'ensemble E ?*/
int appartient ( int elt, ensemble E)
{
return E[elt] ;
}
( est ce que c'est ca ou non ?)
4./* Union de deux ensembles */
ensemble unnion ( ensemble A, ensemble B)
{ int i;
for (i=0; i<N; i++)
{ A[i] || B[i] ;
}
}
( est ce que ca se fait de cette manière ?)
5./*Intersection de deux ensembles */
ensemble inter (ensemble A, ensemble B)
{
int i;
for (i=0; i<N; i++)
{ A[i] && B[i] ;
}
}
( je ne pense pas que ca se fasse comme ca ? )
/* LE PROGRAMME PRINCIPAL POUR TESTER LES FONCTIONS */
int main (void)
{
ensemble A,B ;
A = lire()
B = lire()
printf("A="); afficher (A) ;
printf("B="); afficher (B) ;
printf("AUB="); afficher (unnion(A,B)) ;
printf("AinterB="); afficher (inter(A,B) ;
}
merci vraiment pour ceux qui pourront m'aider rapidement.
personne n'aurait d'idée pour m'aider là, c'est un peu urgent en plus, j'ai demandé à certains qui en avait déjà fait mais ils veulent pas en dire plus
1- je pense que "lire" signifie "remplir" la structure tu aura donc besoin de scanf
2- E.tab[i] désigne l'élément i dans le tableau tab de la structure E. L'affichage se fait avec printf. en soit c'est quasi la même chose quela question 1
3- non il faut parcourir ta structure pour tester l'égalité
4 et 5 - non pas du tout, il faut créer une nouvelle structure et éventuellement te servir de la question 3
Ah oui et j'oubliais, utilise nb plutôt que N pour tes boucles même si pour ce cas précis nb et N sont égaux
donc dans la 1 ce serait :
{
int i, int a, int b ;
printf("entrez des valeurs dans la structure pour lire ses éléments\n")
for (i=0; i<nb; i++)
{
printf(" entrez a") ;
scanf ("%d\n", &a) ;
printf ("entrez b")
scanf ("%d\n", &b) ;
}
return 0 ;
}
est ce que c'est ca ? si c'est non je vois pas comment faire d'une autre façon et les autres questions non plus, si tu as le temps pourrais tu me montrer un exemple ?
merci.
Du tout, et c'est pas en te donnant la réponse que tu vas mieux comprendre je pense
tu as le prototype de ta fonction :
ensemble lire ();
ce qui signifie que tu vas devoir retourner un ensemble donc ta fonction va surement se décomposer en 3 étapes :
étape 1: créer une structure ensemble
étape 2: remplir cette structure ensemble
étape 3: retourner cette structure
ok bon l'étape 1 c'est déja fait avec struct ensemble et le typedef
pour l'étape 2.
{ int i;
for (i=0, i< nb , i++)
{
tab[i] = tab[i] + 1 ;
}
et pour l'étape 3.
return E.tab[i] ;
}
}
non, si tu donnais la réponse si j'ai compris je dirais rien à part merci , si j'avais pas compris je t'aurais demandé pourquoi tu as fais ca / pourquoi ca marche que dans cette expression des questions comme ca pour etre sur de la réponse
je pense que tu devrais reprendre un peu les bases parce que non t'a pas assimilé la notion de prototype d'une fonction déjà.
si ta fonction c'est
ensemble lire();
ça veut dire que tu dois retourner un ensemble cad :
ensemble lire()
{
ensemble e;
//...
return e;
}
http://pastebin.com/W3SFKeb8
Tu peux sécurisée un minimum la saisie en vérifiant si e.nb ne dépasse pas N [en ce qui concerne le problème liè à la saisie de caractère, inutile que tu le fasses si tu l'as pas encore appris]
^ je vois pas l'intérêt de lui macher le travail hein, la programmation c'est pas du recopiage en se disant "ah oui fallait faire ça"
Il y en a pas: j'avais juste rien à faire....
merci pour ce début de réponse, et oui tu as raison ce n'est pas que du recopiage mais dans les faits que je dois faire 8 exercices ( j'ai posté que 1 seul ) que je fais depuis un moment et qui sont à rendre le lendemain, j'ai un petit besoin d'aide rapide pour au moins faire un exercice , revoir les fonctions de bases en même temps et suivre la logique pour faire les autres exercices
et oui je vais donc revoir les fonctions et leur typage aussi ![]()
pour la question 2 c'est ca ? :
VOID AFFICHER (ENSEMBLE E)
{
int i;
printf("affichons le nombre d'element ");
for (i = 0; i < e.nb; i++)
{
printf("%d\n", &(e.tab[i])) ;
}
return e ;
}
(ou bien il manque un paramètre au début ?)
et pour la question 3 ?
il me faut utiliser des pointeurs ?
2- printf("%d\n", &(e.tab[i])) ;
tu ne dois pas metre le '&', car il correspond à l'adresse de la variable e.tab[i] (cela doit être marqué dans ton cours)
3-tu cherches à savoir si elt est dans e.tab, donc tu parcours e.tab, et si e.tab[i] == elt, alors tu renvoie true, sinon, alors tu as parcouru tout ton tableau; dans ce cas tu renvoie false
oui bien sur, j'avais fais un peu trop vite la fonction et le printf
merci
donc c'est plutôt :
2.
void afficher (ensemble e)
{
int i;
printf("affichons le nombre d'element\n");
for (i = 0 ; i < e.nb ; i++)
{
printf("%d\n",(e.tab[i])) ;
}
return e ;
}
3.
int appartient ( int elt, ensemble e)
{
int i;
printf("cet element est-il dans l'ensemble e ?\n");
for (i = 0 ; i < e.nb ; i++)
{
printf("%d\n",(e.tab[i])) ;
if (e.tab[i] == elt )
{
return true ; }
else
{
return false ; }
et si on mettait return E[elt] ? ca pourrait marcher ?
Alors
2- 2 problèmes
void afficher (ensemble e) {
...
printf("affichons le nombre d'element\n");
...
return e;
}
3- 3 problèmes
-> Si tu veux marqué ça, alors tu dois au moins mettre la valeur de l'élément cherché
'printf("%d\n",(e.tab[i])) ; '
-> Pourquoi tu affiches les éléments de l'ensemble?
+> exemple:
ta fonction (en enlevant les printf, et en paranthésant correctement[je parle des accolades]) est:
int appartient ( int elt, ensemble e)
{
int i;
for (i = 0 ; i < e.nb ; i++)
{
if (e.tab[i] == elt )
return true;
else
return false;
}
}
tu as l'ensemble e={1,2,3,4,5} et tu cherches l'élément 3, si j'en suis ton programme, alors, une fois dans la boucle for:
-i=0, e.tab[i]=1, elt=3
=> if: e.tab[i]!= elt car 1!=3
=>on va dans le else: on retourne false
-fin
Il y a donc un problème.
Aussi, je ne sais pas si tu as vu les booléens en C, mais pour les utiliser, tu dois inclure stdbool.h. (ou sinon, tu retourne un nombre positif pour true et 0 pour false)
=> return e[elt] retourne l'entier à l'indice elt du tableau e.tab, donc cela ne va pas.
==>> Tu ferais mieux de tout reprendre à 0, en lisant un tuto sur les bases du C (google); car sinon, tu ne pourras jamais finir tes exos...
oui là je ne sais pas quoi faire je vais voir
mais vous dites de revoir les bases de fonctions , de typage et autres mais ça là, c'est pas censé etre des trucs de base ?
parce que je vois comment le truc fonctionne mais pour l'écrire avec des ensembles, des fois c'est pas clair