slt tous SVP qui peut m'aider à saisir une série de 100 ensembles d'identifiants au plus appelée base en language C?
Version imprimable
slt tous SVP qui peut m'aider à saisir une série de 100 ensembles d'identifiants au plus appelée base en language C?
SVP aidez moi :'(
Je n'ai pas trop compris ce que tu souhaite...
Est-ce que tu pourrais donner plus de détails?
C'est gentil de faire remonter ton poste mais si tu n'ajoute pas de précision, que tu ne montres aucune recherche personnelle au bout d'heure et que tu attends en gobant les mouches ! On ne pourra pas t'aider !
En Clair cela veut dire quoi ?
Cela ne veut rien dire, c'est imprécis au possible :
une série d'un TChart ?
un Ensemble sous la forme d'un Set<> ?
Je l'interprète de multiple façon
une serie de 100 identifiants ?
une série de 100 ensembles contenant une liste d'identifiant ?
un ensemble de 100 identifiants ?
Quoi ?
Identifiants de Base de Données ?
Identifants dont le type est Base ?
Ici, c'est le Forum C++ Builder, c'est très spécifique à cet IDE !
Peu probable que l'on te fournisse un code C strict mais un code C ou C++ avec les aménagements proposés par Borland !
PS : Si c'est pour un exercice scolaire, passe ton chemin, change de cursus, un étudiant ne devrait jamais venir ici ! il doit chercher par lui même !
PS2 : Si tu es pro ou amateur, utilise les termes adéquats, propose nous un code que tu as commencé que l'on puisse le corriger si nécessaire
PS3 : Tu auras chaud pour l'Hiver avec tout ça !
dsl mais je vous demande juste de m'aider car je suis bloquée et je n'ai pas compri meme l'enoncé pour savoir quel outil dois je utiliser SVP pouvez vous juste me donner une idée pour que je puisse etre dans le bon chemin voila l'énoncé réel :
1)saisir une emsemble d'identifiants dont la valeur maximale est égale à 31 et de générer la representation en tableau de bits de cet ensemble dans une variable de taille 4 octets en mémoire appelée Itemset (à developper en language C)
2) saisir une série de 100 ensembles d'identifiants au plus,respectant la contrainte mentionnée dans (1).Cette série sera nommée par la suit "Base".Cette fonction doit etre developée en language C
bon pour la 1ere question c'est deja fait mais pour la 2eme je n'arrive meme pas a la commencer ou de quel outil doit je l'utiliser pour la résoudre j'ai charché sur le net et je n'ai rien trouvé pouvez vous me mettre dans le bon chemin SVP
L'énoncé d'un devoir scolaire ?
Normalement, tu ne devrais pas avoir besoin de venir ici !
Si tu n'y arrives pas ! Eh bien tu n'y arrives pas !
Un Diplome cela se mérite !
Rappel toi bien un truc : Inutile de chercher la solution d'un Exercice sur le Net, en général, la solution combine les éléménts du cours !
Un Prof, en général, c'est pas trop idiot, l'exercice ne fait qu'appliquer le cours avec une utilisation plus subtile !
Si tu as réussi le premier, je ne vois pas en quoi le second est difficile ?
Fournis ton code SVP, que l'on puisse parler de la même chose
Etrange formulation, piège du 32 Valeurs de 0 à 31 ?Citation:
la valeur maximale est égale à 31
un "unsigned long int" et les fonctions assembleurs BT et BTS, c'est très vite coder !
ensuite une boucle de 0 à 99 qui appele la fonction SaisirSet qui remplit un ItemSetCode:ItemSet Base[100];
En C++, j'utilisera un "typedef std::bitset<32> ItemSet"
En C++ Builder, j'utileserais un "typedef Set<TEnumNane, Enum1, Enum32> ItemSet" le type Set C++ est vraiment moins interessant que celui de Delphi !
voici mon code mais j'ai un probleme lors de l'affichage de B[l] juste il m'affiche la 1ère valeur juste les autres sont fausses
pouvez vous m'aider?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include<stdio.h> #include<stdlib.h> char*gets(char*s) { int i; for(i=0;(*(s+i)=getchar())!='\n';i++) ; *(s+i)='\0'; return(s); } main() { char s; long p=1; int i=0; int k=0; char t[32]={0}; int l,n; char B[100]; int m; do { printf("donner la longueur de la base\n\n "); scanf("%d",&m); } while (m>100); for(l=0,B[l]=1;l<m; l++,B[l]++) { printf("l'ensemble numero : %d\n",l); for(k=1;k<32;t[k]=0,k++); do { printf("donnez le nombre d'identifiant\n\n "); scanf("%d",&n); } while(n>33); printf("veuillez entrer l'ensemble d'identifiants\n\n "); for(i=0;i<=n;i++) gets(&s); printf("l'element de la base est %d\n",B[l]); } system("pause"); return(0); }
Du C !
Ici, c'est C++ Builder, perso, faire du C tout court, je n'en ai pas fait depuis 10 ans !
gets existe en standard dans mon stdio.h
ce qui me choque c'estcela écrit où dans la mémoire ??? je me le demande !Code:
1
2
3 char s; ... gets(&s);
Dans ton code je ne vois pas pas le rapport entre le "char t[32]" et Base !
d'ailleurs, l'astuce voudrait que tu utilise un "unsigned long int" à la place de t[32] et les décalages de bit pour stocker les valeurs de 0 à 31 !
D'ailleurs B selon ton code va être initialisé avec 1 à 100
normalement il faut tester le résultat de gets !
Et tu ne stocke même pas une copy du tampon de gets dans un char**
Mes cours de C sont loin mais c'est un peu n'importe quoi ce code !
Tu ne sais pas allouer une chaine ! Relit un peu tes cours !
Je pense que ton professeur souhaitait le découpage du code en fonction réutilisable
Je pense aussi que récemment tu as appris le décalage binaire ! non ?
Va sur le forum C standard, tu auras plus de chance que dans un forum C++Builder plutôt orienté Win32 et application fenêtrée qu'un mode console !
j'aurais fait
ouCode:char s[256]
Code:
1
2
3
4
5
6 char* s; ... s = (char*)malloc(256); gets(s); ... free(s);
Quand je pense que j'ai fait cet exercice en Assembleur ! :mouarf:
Tiens, je suis trop sympa, j'espère que c'est pas trop mauvais, je l'ai tapé à l'aveugle sur notepad !
Tu seras gentil de me dire combien j'ai eu à ton devoir ! Bon courage pour ton diplome !
suffit de faire une fonction SaisirBase qui appelle 100 fois SaisirSerieCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 typedef unsigned long int SerieItem; int SaisirSerie(SerieItem *Serie, int *SerieCount) // * ou &, c'est des paramètres de Sortie ! { printf("Longueur de la Série (1 à 32) ?\n"); scanf("%d", SerieCount); *Serie = 0; if ((0 < *SerieCount) && (*SerieCount <= 32)) { char s[256]; int tmp; for (int SerieCpt = 1; SerieCpt <= *SerieCount; SerieCpt++) { printf("donnez l'identifiant n° %d / SerieCount \nValeur Autorisée de 1 à 31 : ", SerieCpt); if (gets(s)) // gets a remplacer par scanf ou fgets { tmp = atoi(s); // stdlib.h dans C++ Builder ou voir strtol if ((1 <= tmp) && (tmp <= 31)) { *Serie |= 1 << (tmp - 1); // là moi j'utilise BTS en ASM ! } else { printf("Valeur non autorisée ! Recommencez !"); SerieCpt--; } } else { // Idée : Gérer (S == "QUIT") printf("Erreur de Saisie ! Recommencez !"); SerieCpt--; } } } return *SerieCount; }
Après va savoir si il faut gérer de 1 à 31 ou de 0 à 31, car en fait, on pourrait stocker de 1 à 32
Après pour afficher, suffit de faire une Fonction AfficheBase qui appelle 100 fois AfficheSerie qui fait une boucle de 1 à 31 pour tester chaque bit par &