Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/01/2013, 15h46   #1
mosael
Invité de passage
 
Homme samer mohamed
Étudiant
Inscription : décembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme samer mohamed
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : décembre 2012
Messages : 1
Points : 0
Points : 0
Par défaut Enregistrement en C

Bonjour.

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
51
52
53
54
55
#include<stdio.h>
typedef struct etudiant{
char nom[16];
char prenom[16];
int age;
float moyenne;
 
 
}Etudiant;
Etudiant T[10];
 
 
main(){
       int n,i,j,indice_min;
       Etudiant a;
       printf("Donner le nombre d'etudiants");
       scanf("%d",&n);
       for (i=0;i<n;i++){
 
 
       printf("Nom       :");
       scanf("%s",&T[i].nom);
       printf("Prenom    :");
       scanf("%s",&T[i].prenom);
       printf("Moyenne   :");
       scanf("%f",&T[i].moyenne);
 
 
 
           }
            for (i=0;i<(n-1);i++){
           for(j=(i+1);j<n;j++){
                                 if(T[i].moyenne>T[j].moyenne){
                                 a=T[i];
                                 T[i]=T[j];
                                 T[j]=a;
                                 }
                                 }
                                 }
         printf("\n\tLe Nouveau tableau est \n");                         /*Fin du Tri*/
           for(i=0;i<n;i++){
 
                              printf("\nNom %s",T[i].nom);
                              printf("\nPrenom %s",T[i].prenom);
                              printf("\nMoyenne %f",T[i].moyenne);
 
                             }
 
 
 
       getchar();
 
 
       getchar();
       }
J'ai cet enregistrement là et je veux ajouter une méthode de Recherche et Modification et Suppression. Qui peux m'aider ?

Merci d'avance.
mosael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 20h29   #2
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 495
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 495
Points : 6 601
Points : 6 601
Citation:
Envoyé par mosael Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
typedef struct etudiant{
char nom[16];
char prenom[16];
int age;
float moyenne;
 
 
}Etudiant;
Etudiant T[10];
j'ai cette enrigstrement la j veux ajouter une methode de Recherche et Modification et SUpression qui peu m aider
Bonjour
Comment envisages-tu la "suppression" d'un élément d'un tableau à taille fixe (donc avec son nombre d'éléments invariants) ???

Citation:
Envoyé par Julien Sanchez Voir le message
Par exemple, si on dispose du tableau suivant :

Code C :
1
2
3
4
5
6
char tab[5];
tab[0] = 'a';
tab[1] = 'e';
tab[2] = 'i';
tab[3] = 'o';
tab[4] = 'u';

Pour savoir si le caractère 'u' appartient au tableau, il faut faire quelque chose comme :

Code C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (tab[0] == 'u')
  printf("u est dans le tableau\n");
 
if (tab[1] == 'u')
  printf("u est dans le tableau\n");
 
if (tab[2] == 'u')
  printf("u est dans le tableau\n");
 
if (tab[3] == 'u')
  printf("u est dans le tableau\n");
 
if (tab[4] == 'u')
  printf("u est dans le tableau\n");
Mouais. J'ai l'impression qu'une boucle pourrait peut-être avoir ici son utilité non ?
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 20/01/2013, 16h08   #3
Ngork
Membre chevronné
 
Homme
Auditeur informatique
Inscription : avril 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Auditeur informatique
Secteur : Finance

Informations forums :
Inscription : avril 2009
Messages : 118
Points : 650
Points : 650
Par défaut codons, codons ...

Bon ... un code organisé, respectant la norme, bien indenté et commenté est plus agréable à lire, évite les alertes lors de la compilation et se maintient plus facilement !

Voici par exemple, ce que pourrait donner ton code (avec la correction d'une même erreur sur deux pointeurs) :

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
 
#include<stdio.h>
 
typedef struct etudiant
{
  char nom[16];
  char prenom[16];
  int age;
  float moyenne;
} Etudiant;
 
Etudiant T[10];
 
int main(int argc, char *argv[])
{
  int n,i,j;
  Etudiant a;
 
  /** entrée nombre d'étudiants à classer */
 
  printf("Donner le nombre d'etudiants");
  scanf("%d",&n);
 
  /** limiter ce nombre à la taille du tableau */
 
  if (n>10)
    n=10;
 
  /** entrée brute des résultats */
 
  for (i=0; i<n; i++)
    {
      printf("Nom       :");
      scanf("%s",T[i].nom);
      printf("Prenom    :");
      scanf("%s",T[i].prenom);
      printf("Moyenne   :");
      scanf("%f",&T[i].moyenne);
    }
 
  /** tri des résultats */
 
  for (i=0; i<(n-1); i++)
    {
      for(j=(i+1); j<n; j++)
        {
          if(T[i].moyenne>T[j].moyenne)
            {
              a=T[i];
              T[i]=T[j];
              T[j]=a;
            }
        }
    }
 
  /** affichage du tableau trié */
 
  for(i=0; i<n; i++)
    {
      printf("\nNom %s",T[i].nom);
      printf("\nPrenom %s",T[i].prenom);
      printf("\nMoyenne %f",T[i].moyenne);
    }
 
  /** attendre la frappe d'une touche */
 
  getchar();
 
  /** attendre la frappe d'une touche (encore !) */
 
  getchar();
 
  /** fin */
 
  return 0;
}
Ce n'est pas déjà plus sympa à lire ?
Ngork est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/01/2013, 16h27   #4
Ngork
Membre chevronné
 
Homme
Auditeur informatique
Inscription : avril 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Auditeur informatique
Secteur : Finance

Informations forums :
Inscription : avril 2009
Messages : 118
Points : 650
Points : 650
Par défaut codons et recodons ...

Avant de voir comment rechercher, modifier et supprimer, pourquoi ne pas utiliser la fonction de tri rapide offerte par la librairie standard , mmm ?

Cela donne le code modifié suivant :

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
 
 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct etudiant
{
  char nom[16];
  char prenom[16];
  int age;
  float moyenne;
} Etudiant;
 
Etudiant T[10];
 
 
/// fonction de comparaison de deux étudiants
 
int comparer(Etudiant *a, Etudiant *b)
{
  return (int) (a->moyenne*100-b->moyenne*100);
}
 
 
/// fonction principale
 
int main(int argc, char *argv[])
{
  int n,i;
 
  /** entrée nombre d'étudiants à classer */
 
  printf("Donner le nombre d'etudiants");
  scanf("%d",&n);
 
  /** limiter ce nombre à la taille du tableau */
 
  if (n>10)
    n=10;
 
  /** entrée brute des résultats */
 
  for (i=0; i<n; i++)
    {
      printf("Nom       :");
      scanf("%s",T[i].nom);
      printf("Prenom    :");
      scanf("%s",T[i].prenom);
      printf("Moyenne   :");
      scanf("%f",&T[i].moyenne);
    }
 
  /** tri rapide des résultats */
 
  qsort(T,n,sizeof(Etudiant),(void *) comparer);
 
  /** affichage du tableau trié */
 
  for(i=0; i<n; i++)
    {
      printf("\nNom %s",T[i].nom);
      printf("\nPrenom %s",T[i].prenom);
      printf("\nMoyenne %f",T[i].moyenne);
    }
 
  /** attendre la frappe d'une touche */
 
  getchar();
 
  /** attendre la frappe d'une touche (encore !) */
 
  getchar();
 
  /** fin */
 
  return 0;
}
Ngork est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2013, 17h08   #5
Ngork
Membre chevronné
 
Homme
Auditeur informatique
Inscription : avril 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Auditeur informatique
Secteur : Finance

Informations forums :
Inscription : avril 2009
Messages : 118
Points : 650
Points : 650
Par défaut codons et répondons ...

Alors, voici deux exemples, une fonction de recherche par le nom qui retourne l'index, et une fonction de suppression par l'index :

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 <string.h>
 
 
/** fonction de recherche d'un étudiant par son nom et son prénom parmi n étudiants
    retourne l'index (base 0) de l'étudiant s'il est trouvé
    sinon, retourne -1 */
 
int rechercher(char *nom, char *prenom, int n)
{
  int i;
 
  for (i=0; i<n; i++)
    if (!strncasecmp(nom,T[i].nom,16))
      if (!strncasecmp(prenom,T[i].prenom,16))
        break;
 
  if (i<n)
    return i;
 
  return -1;
}
 
 
/** fonction de suppression d'un étudiant par son index (base 0) parmi n étudiants */
 
void supprimer(int i, int n)
{
  if (n>=10)
    n=10;
 
  if (n<0)
    return;
 
  if (i>=n)
    return;
 
  if (i<0)
    return;
 
  for (; i<(n-1); i++)
    T[i]=T[i+1];
 
  /** RAZ facultatif */
 
  T[i].nom[0]=0;
  T[i].prenom[0]=0;
  T[i].moyenne=0;
}
Bien sûr, j'ai gardé tes déclarations, notamment ta déclaration globale du tableau et le nombre maximal de 10 codé en dur, mais je pense que tu devrais revoir ce point ...

A titre d'illustration, pour supprimer de ton tableau de n élèves tous les élèves nommés Jacques MARTIN, tu exécutes le code suivant dans ta fonction principale :

Code :
1
2
3
4
5
6
7
 
 
while ((i=rechercher("MARTIN","Jacques",n))!=-1)
  {
    supprimer(i,n);
    n--;
  }
En t'inspirant de ce code, tu peux facilement développer une fonction modifier() et compléter ton propre code ...
Ngork est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h25.


 
 
 
 
Partenaires

Hébergement Web