Bonjour je suis débutant en C j'aimerai compléter le programme en bac et j'ai besoin d'un coup de pouce de mes aînés dans ce langage.
a)Vérification des entrées
compléter le programme suivant afin de permettre un tri alphabétique ou décroissant. (plusieurs solutions possibles) Comment faire pour n'avoir à définir qu'une seule fonction de tri ? (on pourra par exemple s'inspirer de la technique utilisée par la fonction standard qsort() en regardant le manuel interactif de cette fonction).
b) Vérification des entrées
Vérifier la taille du nom et du prenom entrés (tronquer si trop de caractères)
Vérifier que l'age est bien numérique (lire l'age sous forme alphabétique puis le tranformer en entier en utilisant la fonction atoi())
c) Mémoire dynamique
Généraliser le programme pour un nombre quelconque d'items : utiliser des pointeurs et les fonctions malloc(), realloc() et free().
d) Sauvegarde et relecture
Permettre de sauvergarder les données et de les relire dans un fichier./* ===================================================================== *
*
* fichier tri.c
*
* ===================================================================== */
#include <stdio.h>
#include <string.h>
#include "tri.h"
#include "donnees.h"
/* ===================================================================== */
void Trier(ITEM items[], int nb_items)
{
int i, j;
ITEM swap;
for (i = 0; i < nb_items; i++)
for (j = i + 1; j < nb_items; j++)
if (items[i].age > items[j].age) {
swap = items[j];
items[j] = items[i];
items[i] = swap;
}
}
/* ===================================================================== */
void Choix(ITEM items[], int nb_items)
{
char cas[10];
while (TRUE) {
printf("*** Tri :\n");
printf("- 1 ou A - numerique selon l'Age (croissant)\n");
printf("- 2 ou D - numerique selon l'age (Decroissant)\n");
printf("- 3 ou N - alphabetique sur le Nom\n");
printf("- 4 ou P - alphabetique sur le Prenom\n");
scanf("%s", cas);
switch (cas[0]) {
case '1': case 'A': case 'a':
Trier(items, nb_items);
return;
default:
printf("! Choix incorrect [%s] : entrer une autre valeur\n\n", cas);
}
}
}
/* ===================================================================== */
int main(int argc, char *argv[])
{
ITEM items[MAX_ITEM];
int nb_items;
Lire(items, &nb_items);
Choix(items, nb_items);
Afficher(items, nb_items);
exit(0);
}
/* ====================================================== The End ====== */
Ah mais alors des indications pour les 2 prochaines étapes.
1. Écrire une fonction "test_affichage" qui
réserve et initialise un tableau d'Items
le fait afficher
2. Écrire une fonction "test_tri_noms croissants" qui
réserve et initialise un tableau d'Items
le fait afficher (en appelant la fonction précédente)
l'ordonne par age croissant (en appelant la fonction de tri)
le fait afficher (en appelant la fonction précédente)
Le dialogue avec l'utilisateur pour remplir le tableau, c'est pas urgent. Et les tests qui obligent à saisir des données, on les fait jamais, et quand on les fait on ne vérifie jamais les résultats. A garder pour la fin, quand il ne restera plus qu'à assembler des fonctions qui ont été bien testées.
- Edité par michelbillaud 22 novembre 2020 à 16:45:29
Suis bien les conseils de michelbillaud. Ton tri n'est pas un quicksort, loin de là. Mais ce n'est sûrement pas ce qu'on te demande. C'est un tri par sélection. Essaies de trouver une façon de l'optimiser. Tu ne changeras pas le nombre de comparaisons, mais à la rigueur tu réduiras le nombre d'échanges. On trouve partout sur le web des algo pour ce tri. L'idée est de comparer le courant avec le "meilleur" et de le changer si requis (changement d'indice). Et tu fais l'échange seulement à la fin de la boucle intérieure.
Le Tout est souvent plus grand que la somme de ses parties.
@labrave: Peux-tu comprendre facilement le code et les explications de michelbillaud? As-tu du code qui fonctionne? Peux-tu donner ce que tu as déjà? Il faudrait qu'on saisisse mieux ce que tu connais bien, et ce que tu ne sais pas comment faire. Je crois avoir la même impression que Michel, ça ne semble pas correspondre à ton niveau d'apprentissage.
Le Tout est souvent plus grand que la somme de ses parties.
Bonjour oui tout à fait c'est ce que j'ai compris je suis entrain d'y travailler je suis nouveau dans ce domaine. je ne tarderai pas à uploder ce que j'ai fais en cas de blocage. Merci à tous.
Compléter un le programme tri.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.