Traitement sur les vecteurs
cerobertgomy
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
YCN- Messages postés 116 Date d'inscription Statut Membre Dernière intervention -
YCN- Messages postés 116 Date d'inscription Statut Membre Dernière intervention -
salut mes chers, s'il vous plait j'ai un exercice en C dans lequel je n'arrive pas à me retrouver.L’exercice est le suivant:
1) Saisir les éléments dans un vecteur .
2) Afficher les éléments dans un vecteur.
3) Rechercher un élément dans un vecteur.
4) Ajouter un élément dans un vecteur.
5) Supprimer un élément dans un vecteur.
6) Insérer un élément dans un vecteur.
7) Modifier un élément dans un vecteur.
Le tous le tout dans un même exercice.
1) Saisir les éléments dans un vecteur .
2) Afficher les éléments dans un vecteur.
3) Rechercher un élément dans un vecteur.
4) Ajouter un élément dans un vecteur.
5) Supprimer un élément dans un vecteur.
6) Insérer un élément dans un vecteur.
7) Modifier un élément dans un vecteur.
Le tous le tout dans un même exercice.
A voir également:
- Traitement sur les vecteurs
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Ce logiciel gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Traitement de texte gratuit open office - Télécharger - Suite bureautique
- Dictionnaire des maladies et traitement - Télécharger - Bureautique
2 réponses
Salut cerobertgomy,
La notion de "vecteur" n'existe pas en C. La première question à te poser est de décider de la structure de données C qui va représenter ton "vecteur".
S'il s'agit de pouvoir stocker une série de nombres entiers, par exemple, tu peux créer ton "vecteur" sous la forme d'un tableau en C.
Il te faudra donc créer un tableau de données du type requis, et avec une dimension donnée.
Sur la question de la dimension, tu peux :
1- créer un tableau statique avec une dimension maximale fixée à l'avance que l'on ne pourra pas excéder,
2- ou créer un tableau dynamique, en allouant la mémoire nécessaire sur un pointeur avec malloc, et en redimensionnant avec realloc si on veut faire varier la taille (en particulier l'augmenter).
Je ne sais pas ce que votre enseignant attend de vous. L'option 2 est, bien sûr, plus compliquée à mettre en place.
Une fois que tu as décidé de ta structure de données, tu dois réaliser les fonctionnalités 1 à 7. Pour rendre ton code plus compréhensible, crée des fonctions.
Dal
La notion de "vecteur" n'existe pas en C. La première question à te poser est de décider de la structure de données C qui va représenter ton "vecteur".
S'il s'agit de pouvoir stocker une série de nombres entiers, par exemple, tu peux créer ton "vecteur" sous la forme d'un tableau en C.
Il te faudra donc créer un tableau de données du type requis, et avec une dimension donnée.
Sur la question de la dimension, tu peux :
1- créer un tableau statique avec une dimension maximale fixée à l'avance que l'on ne pourra pas excéder,
2- ou créer un tableau dynamique, en allouant la mémoire nécessaire sur un pointeur avec malloc, et en redimensionnant avec realloc si on veut faire varier la taille (en particulier l'augmenter).
Je ne sais pas ce que votre enseignant attend de vous. L'option 2 est, bien sûr, plus compliquée à mettre en place.
Une fois que tu as décidé de ta structure de données, tu dois réaliser les fonctionnalités 1 à 7. Pour rendre ton code plus compréhensible, crée des fonctions.
Dal
Bon c'est un peu frankensteinesc.
L'informatique c'est la science de l'abstraction, c'est la science de comment est ce que tu rends concrets des donnée et des informations.
Pour ton sujet je pense qu'il faut d'abord que tu définisse bien la façon dont tu vas décrire tes vecteurs. Et garder dans l'idée de garder tout ça modulaire.
Si ce sont des vecteurs 2D tu vas pouvoir donc les stocké de la façon suivante :
Maintenant si tu veux une structure vecteur un peu plus flexible on va pouvoir allé un peu plus loin en faisant ça :
avec ça tu vas pouvoir créer des fonctions qui auront certainement un peu plus de sens par exemple :
Si tu veux ajouter un élément à un vecteur à une position donnée:
Je te donne aussi la fonction d'initialisation d'un vecteur :
/!\ je n'ai pas compilé ces codes c'est simplement pour te donner une idée de ce que tu pourrais faire. /!\
L'idée du menu c'est bien par contre rappeler le main c'est un peu bizarre, normalement on va plutôt faire un while(1) dans le main qui va "gérer" les appels de fonctions et la façon dont tu interagis avec l'utilisateur.
En écrivant ma réponse je me rend compte que c'est peut être un peu compliqué à votre niveau d'utiliser des pointeurs sur structure. Cependant tu peux très bien conservé la même structure mais en statique, cad que tu gèrerais tout dans le main.
L'informatique c'est la science de l'abstraction, c'est la science de comment est ce que tu rends concrets des donnée et des informations.
Pour ton sujet je pense qu'il faut d'abord que tu définisse bien la façon dont tu vas décrire tes vecteurs. Et garder dans l'idée de garder tout ça modulaire.
Si ce sont des vecteurs 2D tu vas pouvoir donc les stocké de la façon suivante :
struct vecteurs {
float x;
float y;
};
Maintenant si tu veux une structure vecteur un peu plus flexible on va pouvoir allé un peu plus loin en faisant ça :
struct vecteurs {
float * coord ;
int dimension;
};
avec ça tu vas pouvoir créer des fonctions qui auront certainement un peu plus de sens par exemple :
void afficher_vecteur ( struct vecteurs my_vect){
int i;
printf("[");
for (i=0;i<my_vect.dimension;i++){
printf(" %f ,",my_vect.coord[i]);
}
printf("] \n");
}
Si tu veux ajouter un élément à un vecteur à une position donnée:
void ajouter_elem ( int pos , int elem , struct vecteurs * my_vect ){
if ( pos < my_vect->dimension){
my_vect->data[pos] = elem;
}
}
Je te donne aussi la fonction d'initialisation d'un vecteur :
void init_vect ( struct vecteurs * my_vect , int dimension ){
my_vect->coord = (float *) dimension * sizeof ( float);
my_vect->dimension = dimension;
}
/!\ je n'ai pas compilé ces codes c'est simplement pour te donner une idée de ce que tu pourrais faire. /!\
L'idée du menu c'est bien par contre rappeler le main c'est un peu bizarre, normalement on va plutôt faire un while(1) dans le main qui va "gérer" les appels de fonctions et la façon dont tu interagis avec l'utilisateur.
En écrivant ma réponse je me rend compte que c'est peut être un peu compliqué à votre niveau d'utiliser des pointeurs sur structure. Cependant tu peux très bien conservé la même structure mais en statique, cad que tu gèrerais tout dans le main.
#include <stdio.h>
#include <stdlib.h>
int v[99999],t,i,r,a,s,si,m,m1,selecteur;
vecteur()
{
puts("................Cr\202ation d'un vecteur....................");
printf("saisie la taille de votre vecteur: ");scanf("%i",&t);
}
saisie()
{ puts("............................La saisie des elements.......................");
for(i=0;i<t;i++)
{
printf("Saisie la valeur de la ligne %i : ",i+1);scanf("%i",&v[i]);
}
}
afficher()
{ puts("............................Affichage du contenu........................");
for(i=0;i<t;i++)
{
printf("La valeur de la ligne %i est : %i\n",i+1,v[i]);
}
}
recherche()
{
puts("............................Recherche..........................");
printf("Saisie le nom de l'element a cherche: ");scanf("%i",&r);
for(i=0;i<t;i++)
{
if (v[i]==r)
{
printf("L'element %i est a la ligne %i \n",r,i+1);
}
}
}
ajouter()
{
puts("............................Augumentation de nombre de lignes..........................");
t++;
printf("Saisie le nom de l'element a ajoute: ",i+1);scanf("%i",&a);
v[t-1]=a;
puts(" L'element est ajoute");
}
supprimer()
{
puts("............................Suppression d'un element..........................");
printf("Saisie le nom de l'element a supprime: ",i+1);scanf("%i",&s);
for(i=0;i<t;i++)
{
if(v[i]==s)
{
si=i;
}
}
for(i=si;i<t;i++)
{
v[i]=v[i+1];t--;
}
}
modifier()
{
puts("............................Modification d'un element...........................");
printf("Saisie la valeur a modifie : ");scanf("%i",&m);
for(i=0;i<t;i++)
{
if (m==v[i])
{
printf("Saisie la valeur remplacante: ");scanf("%i",&m1);
v[i]=m1;
}
}
}
int main()
{
puts("..........................MENU VECTEUR..................................");
puts("\t 1: Cr\202er votre vecteur" );
puts("\t 2: Saisie les elements" );
puts("\t 3: Afficher les elements" );
puts("\t 4: Rechercher un element " );
puts("\t 5: Ajouter un element" );
puts("\t 6: Supprimer un element" );
puts("\t 7: Modifier" );
puts("\t 8: Inserer un element" );
puts("\t 9: Quitter" );
printf("votre choix: ");scanf("%i",&selecteur);
switch(selecteur)
{
case 1: system("cls");vecteur();system("pause");system("cls"); main();
case 2: system("cls");saisie();system("pause");system("cls"); main();
case 3: system("cls");afficher();system("pause");system("cls"); main();
}
return 0;
}
Vos impression s'il vous plait!
Quand tu postes du code, fais le entre balises de code, s'il te plaît, afin que ton code reste indenté et avec une coloration syntaxique, cela sera plus lisible pour les lecteur du forum.
Comme cela :
<code c>
ton code ici
</code>
sinon, sur ton code, voilà ce que gcc a à dire en le compilant avec les warnings (option de compilation -Wall) :
De façon générale :
- compile toujours avec les warnings, comprend pourquoi ils se manifestent car dans la quasi totalité des cas ils révèlent une erreur ou une pratique non conforme au standard, et corrige le code afin qu'il compile proprement.
- tu as trop de variables globales, tu devrais définir les variables dont tu as besoin dans le scope de la fonction où elle est utilisée. Pour simplifier ton programme, le tableau, sa taille maximale et le compteur du nombre d'éléments pourraient être des variables globales (et encore, on pourrait faire autrement en les passant en arguments aux fonctions), mais pas les autres
- tes variables n'ont pas des noms explicites, renomme en , cela rendra les choses plus compréhensibles
- initialise tes variables avec des valeurs par défaut ayant du sens, déclare une variable par ligne et met un commentaire expliquant son usage, par exemple :
- tu dois conserver la taille maximale du tableau, pour vérifier que tu ne dépasses pas les limites de mémoire en ajoutant des éléments
- tu dois déclarer tes fonctions avec un type si elles ne retournent rien, et mettre void entre parenthèses si elles n'ont pas d'arguments, comme cela :
- la fonction vecteur() ne crée pas un vecteur, elle permet seulement la saisie de la taille souhaitée, et sans contrôler un dépassement de taille, de plus ce n'est pas une des fonctionnalités mentionnées dans ta liste. Tu devrais demander cette saisie initiale avant de présenter ton menu, et ne pas mettre ce choix dans le menu, sinon tu vas avoir des comportements inattendus
- dans certains printf, comme ici : tu dois supprimer car cela ne sert à rien dans le printf
- si tu demandes la saisie de nombres entiers, dis le, plutôt que de parler de "nom de l'element a ajoute"
- dans ton scanf, tu devrais utilise %d plutôt que %i, pour cette raison, et, tant qu'à faire, l'utiliser aussi dans tes printf pour être cohérent
- un vecteur ne se représente pas habituellement en "lignes"
- la fonction de suppression (qui n'est appelée dans le switch) ne fonctionne pas, de plus je pense qu'on te demande de supprimer un élément par son numéro (supprimer l'élément 2 du vecteur, et non pas supprimer tous les 2 qui se trouvent dans le vecteur), c'est sans doutes pareil pour la recherche et la modification
- un prototype correct de main est , si, comme dans ton programme, tu n'utilises pas des arguments de ligne de commande
- dans ton switch / case, termine tes case par des break; et non pas en appelant main(), et met ton code dans une boucle while qui teste le choix 9
- met un dans ton switch / case avec un message informatif
- met des et en dehors du case / switch, cela t'évite de répéter du code
- aère ton code, met des espaces, il faut que cela respire :-)
Ouf !
Dal