demande d'aide en programmation en c - C - Programmation
Marsh Posté le 29-01-2012 à 13:28:37
Montres nous le code que tu as produit, et on t'aidera à le corriger, mais pas question qu'on fasse tes exercices à ta place.
Surtout que la, c'est du B.A. BA.
A+,
Marsh Posté le 29-01-2012 à 14:19:44
voici ce que j'ai essaigné de faire
Code :
|
merci d'avance en faite je suis en 1er année miage je ne veux qu'apprendre plus c'est parce qu’on n'a pas encore commencé les structures.j'utilise comme IDE le dev c++.
Marsh Posté le 29-01-2012 à 16:17:51
Déjà, il faut formatter correctement ton code, sinon celui ci devient illisible, et c'est source d'erreurs.
Ton texte, non corrigé, mais reformaté pour plus de lisibilité:
Code :
|
C'est pas parfait ici, parce que le forum et son formatage bouffe les tabulations, mais c'est déjà plus lisible.
A+,
Marsh Posté le 29-01-2012 à 17:19:52
Bon ensuite regardons la logique de ta fonction main:
Ton programme veut pouvoir exécuter une succession de commandes choisies à partir d'un menu.
La logique ici est donc la suivante:
tant qu'on ne quitte pas
demander la commande à executer à l'utilisateur
executer la commande
fin tant que
C'est le genre de chose qui s'implémente très vite:
Code :
|
Bon en ajoutant ce qui manque, on obtient un cadre de base qui gère la saisie du menu, fait tourner la boucle principale et tient compte des erreurs:
Code :
|
A ce stade la, tu peux passer a la partie principale de ton programme:
La structure de données et sa gestion.
Note: il y a moyen de faire des menus un peu plus intelligents, avec une structure contenant pour chaque item le texte et la commande, mais je n'ai pas voulu compliquer les choses.
La chose importante a comprendre ici, c'est qu'on ne mélange pas les torchons avec les serviettes, et donc on ne mélange pas le dialogue avec l'utilisateur et le traitement des structures internes à ton programme, comme ta procédure menu faisait.
Pour ta structure de donnée principale, si tu veux passer par une table de structures, je suggère:
typedef struct {
int matricule;
int age;
char nom[10];
char prenom[10];
char filiere[10];
}t_etudiant;
#define MAX_ETUDIANTS 8
static t_etudiant etudiants[MAX_ETUDIANTS];
static unsigned short num_etudiants = 0;
A+,
Marsh Posté le 30-01-2012 à 10:12:53
merci pour le coup de main je ferai tout pour comprendre et executer le programme
Marsh Posté le 30-01-2012 à 19:03:53
void suppressionetudiant()
{int i,x,trouve,k;
printf("taper matricule:" );
scanf("%d",x);
for(i=1;i<=3;i++)
{
if(x==etudiant[i].matricule)
{j=i;}
}
for(k=j;k<=2;i++)
{
etudiant[k].matricule=etudiant[i+1].matricule;
etudiant[k].nom=etudiant[k+1].nom;
etudiant[k].prenom=etudiant[k+1].prenom;
etudiant[k].age=etudiant[k+1].age;
etudiant[k].filiere=etudiant[k+1].filiere;
}
etudiant[3].matricule="";
etudiant[3].nom="";
etudiant[3].prenom="";
etudiant[3].age="";
etudiant[3].filiere="";
}
VOICI MON CODE POUR LA SUPPRESSION MAIS J'AI TOUJOURS PAS TROUVER DE SOLUTION PUIS-JE AVOIR UN P'TIT COUP DE MAIN,
Marsh Posté le 30-01-2012 à 20:59:18
Taper du code, tout le monde peut le faire, expliquer de manière claire quel algorithme tu veux mettre en place pour la suppression serait bien plus utile. Ça permet de savoir ce qu'on va coder au lieu de se mettre a coder au jugé.
A+,
Marsh Posté le 31-01-2012 à 08:49:52
en faite c'est une procédure du programme d'en haut je voulais juste avoir une autre méthode et faire une confrontation.
Marsh Posté le 31-01-2012 à 12:03:03
Bon alors on va te donner une indication une manière la plus efficace de gérer cela quand on travaille avec un tableau de taille fixe:
Plutôt que de passer du temps a recopier les cases les unes dans les autres, autant avoir un flag "entrée utilisée" que tu met a faux 0 partout au départ, a 1 quand tu utilises l'entrée pour une opération de saisie d'un étudiant, et a 0 de nouveau quand tu supprime l'étudiant dont c'est l'entrée.
Quand tu saisis un étudiant, tu utilises la première case inutilisée trouvée.
A+,
Marsh Posté le 01-02-2012 à 15:10:31
peux tu être plus clair en faisant un exemple par un code j'espère que je ne te dérange pas trop.
Marsh Posté le 01-02-2012 à 22:32:21
Pas de pb, je t'ai tapé vite fait un petit exemple.
Ne te préoccupes pas de la gestion des menus, elle est probablement trop compliquée pour ton niveau, mais par contre, en regardant les fonctions elementaires de gestion de la table, et comment elles sont employées par les fonctions déclenchées par le chois du menu, cela te donnera une idée sur la manière dont cela fonctionne.
Code :
|
Testé et compilé avec gcc (sous windows, mais ça devrait passer sur n'importe quelle plateforme).
Je t'ai rajouté une option "changer de mode".
En mode par défaut, en faisant lister, tu ne vois que la partie de la table qui est non vide
En mode pédagogique, tu vois ce qui se passe dans toute la table.
A+,
Marsh Posté le 11-02-2012 à 16:32:28
pouvez vous m'aider à resoudre une procedure insertion et une procedure de trie.voici mes codes mais sa ne marche pas trop.
//procedure insertion
void insertion()
{int j,i;
printf("taper le rang au quel vous voulez inserer" );
scanf("%d",&j);
printf("taper un matricule:" );
scanf("%d",&etudiant[n+1].matricule);
printf("taper un nom:" );
scanf("%s",&etudiant[n+1].nom);
printf("taper un prenom:" );
scanf("%s",&etudiant[n+1].prenom);
printf("taper un age:" );
scanf("%d",&etudiant[n+1].age);
printf("taper une filiere:" );
scanf("%s",&etudiant[n+1].filiere);
while (i>j)
{etudiant[i+1]=etudiant[i];
i++;}
for(i=1;i<=n+1;i++)
{
if(j==i)
{etudiant[j]=etudiant[n+1];}
}
}
//procedure trie
void trie()
{int i,j;
do
{j=0;
for(i=1;i<=n;i++)
{
if(etudiant[i].matricule<etudiant[i+1].matricule)
{j++;}
etudiant[0]=etudiant[i];
etudiant[i]=etudiant[i+1];
etudiant[i+1]=etudiant[0];
}
}
while(j=0);
printf("trier!!!!!!!!!!!!" );
}
Marsh Posté le 12-02-2012 à 17:36:52
christyleblack a écrit : pouvez vous m'aider à resoudre une procedure insertion et une procedure de trie.voici mes codes mais sa ne marche pas trop. |
Salut
Déjà on t'a dit de formater proprement ton code. On se demande pourquoi Gilou s'est fendu d'un exemple complet et professionnel quand on voit ce que tu ressors (surtout après t'y être désintéressé pendant 10 jours). Ah pour sortir un "merci mon pote" tu es champion mais pour montrer que tu sais apprécier et tirer profit du travail des autres pour t'améliorer efficacement là il n'y a plus personne. "partager" ne signifie pas "je fais sous-traiter mon TP par des pros pendant que je joue à CODWAW"...
Donc déjà pour la forme pas de "&" pour la saisies des chaines (de plus utiliser scanf() pour un nombre et ensuite pour une chaine est source de problèmes à cause du caractère <return> resté dans le clavier lors de la saisie du nombre et qui est récupéré au scanf() suivant). De plus je ne vois pas trop pourquoi tu fais saisir "j" pour remplir [n+1] (avec n non initialisé en plus).
Ensuite une structure n'étant pas un élément manipulable, tu n'as pas le droit d'utiliser "=" pour la recopier d'un endroit à l'autre. Te faut soit recopier ses membres un par un, soit passer par memcpy(). De même tu n'as pas le droit d'utiliser les opérateurs de comparaison <> pour l'évaluer. Te faut soit évaluer les membres soit passer par une fonction dédiée (qui, elle, évaluera les membres pour détecter quel élément est plus petit ou plus grand que tel autre).
Et pour le fond c'est dommage de sacrifier l'élément [0] d'un tableau pour l'utiliser comme élément temporaire de tri...
Marsh Posté le 12-02-2012 à 18:36:07
Citation : Déjà on t'a dit de formater proprement ton code. On se demande pourquoi Gilou s'est fendu d'un exemple complet et professionnel quand on voit ce que tu ressors (surtout après t'y être désintéressé pendant 10 jours). |
Tu as tout à fait compris pourquoi je n'ai plus l'intention d'aller plus loin dans mon aide sur ce topic.
Tout au plus je signalerai que trier réellement le tableau est inutile et coûteux, et qu'il vaut bien mieux trier un tableau de pointeurs pointant sur les fiches elles mêmes.
A+,
Marsh Posté le 29-01-2012 à 12:45:20
Bonjours pouvez-vous m'aider à résoudre cet exercice d'algorithme en .
structure étudiant
matricule:entier
chaines de caractère
prénom: chaîne
age:entier
filière: chaîne
1 procédure enregistrement
2 procédure affichage étudiant
3 procédure recherche étudiant
4 procédure supprimé étudiant
5 procedure inserer étudiant
6 procedure trier
et faire le void menu de ces procédures
Message édité par christyleblack le 11-02-2012 à 16:46:17