begin process at 2012 02 13 00:18:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

supprimer un element d'une matrice


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

supprimer un element d'une matrice

lundi 8 janvier 2007 à 01:26:32 | supprimer un element d'une matrice

hoijir

salut ,voila mon petit programme, j'ai un probleme avec la suppression en case 5, est ce quelqu'un peut m'aider?

#include<stdio.h>
#define dim 20

main()
{
int n, t[dim][4], i, choix, x, d, l=0, a, y, j, z, tmp,p;
 do
 {
 printf("\n\n\t\t\t Menu \n\n");
 printf("\t\t1-creation de la table\n");
 printf("\t\t2-inserer\n");
 printf("\t\t3-modifier\n");
 printf("\t\t4-afficher\n");
 printf("\t\t0-Quitter\n\n");


 printf("\t\tChoiix 1-->4 :");
 scanf("%d",&choix);

 switch(choix)
 {
  case 1:
   do
    {
    printf("\n\n\nEntrer le nombre des entregistrements:");
    scanf("%d",&n);
    }
   while (n>dim && n<=0);

  for (i=1; i<=n; i++)
   {
    printf("\n\nL'element %d:\n",i);
    do
    {
    printf("le num:");
    scanf("%d",&t[i][1]);
    }
    while(t[i][1]<0);
   do
    {
    printf("la 1er note:");
    scanf("%d",&t[i][2]);
    }
    while(t[i][2]>20 || t[i][2]<0);
    do
    {
    printf("la 2eme note:");
    scanf("%d",&t[i][3]);
    }
    while(t[i][3]>20 || t[i][3]<0);
    t[i][4]=i+1;
   }
        d=1;l=n+1;t[n][4]=0;
        for (i=l;i<=dim;i++)
        {t[i][4]=i+1;}
        t[dim][4]=0;
  break;

  case 2:
            do
    {
    printf("le num:");
    scanf("%d",&a);
    }
    while(a<0);
    if(a<t[d][1])
    {
                 t[l][1]=a;
                do
                 {
                 printf("la 1er note:");
                 scanf("%d",&t[l][2]);
                 }
                 while(t[l][2]>20 || t[l][2]<0);
                 do
                 {
                 printf("la 2eme note:");
                 scanf("%d",&t[l][3]);
                 }
                 while(t[l][3]>20 || t[l][3]<0);
                 y=l;
                 l=t[l][4];
                 t[y][4]=d;
                 d=y;
    }
    else
    {
        j=z;
        z=d;
        while(a>t[z][1] && z!=0)
        {
            j=z;
            z=t[z][4];
        }
        if(a==t[z][1])
        {
            printf("deja existe");
        }
        else
        {
        //if (z!=0)
        //{
            t[l][1]=a;
                    do
                     {
                     printf("la 1er note:");
                     scanf("%d",&t[l][2]);
                     }
                     while(t[l][2]>20 || t[l][2]<0);
                     do
                     {
                     printf("la 2eme note:");
                     scanf("%d",&t[l][3]);
                     }
                     while(t[l][3]>20 || t[l][3]<0);
                     y=l;
                     l=t[l][4];
                     t[y][4]=z;
                     t[j][4]=y;
                //}
        }
    }
  break;

  case 3:
   printf("\n\nEntrer l'element a modifie:");
   scanf("%d",&x);
            for (i=1;i<l;i++)
            {
                if (x==i)
    {
     printf("\n\nL'element %d:\n",i);
     do
      {
      printf("la 1er note:");
      scanf("%d",&t[i][2]);
      }
      while(t[i][2]>20 || t[i][2]<0);
      do
      {
      printf("la 2eme note:");
      scanf("%d",&t[i][3]);
      }
      while(t[i][3]>20 || t[i][3]<0);
                }
            }
  break;

  case 4:
  i=d;
        while(i!=0)
  {
                printf("\n\nL'element %d:\n",i);
                printf("le num est:%d\n",t[i][1]);
                printf("la 1er note est:%d\n",t[i][2]);
                printf("la 2eme note est:%d\n",t[i][3]);
                printf("l'adresse suivante est:%d\n\n",t[i][4]);
                i=t[i][4];
  }
  printf("\nle 1er element se trouve a l'indice:%d\n\n",d);
  printf("\nle 1e nouveau element sera ajouter a l'indice:%d\n\n",l);
  break;

  case 5:
  printf("\n\nentrer l'element a supprime:");
        scanf("%d",&x);
        for(i=1;i<l;i++)
            if(i==x)
            {
                while(i<l)
                {
                    t[x][1]=t[x+1][1];
                    t[x][2]=t[x+1][2];
                    t[x][3]=t[x+1][3];
                    t[x][4]=t[x+1][4];
                    i=i+1;
                }

            }

  break;
 }
 printf("\n\n\t\t***************************\n\n");
 }
 while (choix!=0);
}


 

 Merci bien

lundi 8 janvier 2007 à 19:24:21 | Re : supprimer un element d'une matrice

lacousine

Premièrement, je vois une erreur dans le traitement de ton tableau. Tu dépasses les bornes. Un tableau commence à 0 et fini à X-1

exemple un tableau : t[4] .... ca commence à 0 et fini à 3
et pour un tableau à 2 dimensions c'est la même chose.
4X4 =       t[4][4] .... ca commence à 0 et fini à 3 pour la ligne et 0 à 3 pour la colonne.

col 0, col 1, col 2, col 3
   0 ,    0 ,      0 ,     0        ===> ligne 0
   0 ,    0 ,      0 ,     0        ===> ligne 1
   0 ,    0 ,      0 ,     0        ===> ligne 2
   0 ,    0 ,      0 ,     0        ===> ligne 3


dans ton Case 5 , tu écris ceci :
 while(i<l)
                {
                    t[x][1]=t[x+1][1];
                    t[x][2]=t[x+1][2];
                    t[x][3]=t[x+1][3];
                    t[x][4]=t[x+1][4];
                    i=i+1;
                }
jespère que tu es conscient que cette ligne ci te cause des problèmes :   t[x][4]=t[x+1][4];

tu as débordement des bornes de ton tableau. Voici 2 facon correcte d'écrire le meme algo :

while(i<l)
                {
                    t[x][0]=t[x+1][0];
                    t[x][1]=t[x+1][1];
                    t[x][2]=t[x+1][2];
                    t[x][3]=t[x+1][3];
                    i=i+1;
                }

ou

while(i<l)
                {
                    t[x][1-1]=t[x+1][1-1];
                    t[x][2-1]=t[x+1][2-1];
                    t[x][3-1]=t[x+1][3-1];
                    t[x][4-1]=t[x+1][4-1];
                    i=i+1;
                }

De plus, la ligne suivante devrait etre changer : for(i=1;i<l;i++) pour for(i=0; i<0; i++), afin de débuter ta recherche à la première case de ton tableau qui est  : t[0][0] et non  t[1][1]. Pour une matrice 4X4, tu devrais avoir les cases suivantes :

t[0][0] , t[0][1], t[0][2], t[0][3]
t[1][0] , t[1][1], t[1][2], t[1][3]
t[2][0] , t[2][1], t[2][2], t[2][3]
t[3][0] , t[3][1], t[3][2], t[3][3]

Je ne sais pas c'est comment tu vois la suppression d'un élément dans ton tableau et le but de ton programme, mais il y a plusieurs facon de voir la destruction. Pour faire simple, tu pourrais mettre une valeur arbritraire dans ton tableau ex: -99 si tu prévois ne jamais avoir de donnée négative dans ton tableau. Tu pourrais faire : t[0][0] = -99 et lorsque tu affiches tes données tu fais une validation.. if t[0][0] > 0 alors affiche les données.

Parcontre si tu vois ton programme comme une file de donnée, exemple : t[80]
1- tu demandes quel élément à supprimer
2- tu parcours ton tableau jusqu'à l'élement X-1
3- tu copies l'élément X+1 dans X-1, tout en vérifiant pour ne pas dépasser ton tableau... donc X+1 doit être plus petit que 80. ( dans cette exemple )
4- il reste à penser ce que tu écris dans les cases qui doivent etre effacer. à moins que tu t'en fou et te garde un compteur qui indique combien d'élément tu dois avoir au total dans ta file. ( matrice ).

Il faudrait que tu expliques ce que tu veux faire et ou tu es rendu après avoir fait tes modifications de code. Ciaooooo amuse toi bien.









Mieux vaut être blonde et poser des questions que de rester ignorante !!!!
lundi 8 janvier 2007 à 21:35:45 | Re : supprimer un element d'une matrice

SAKingdom

Membre Club
"De plus, la ligne suivante devrait etre changer : for(i=1;i<l;i++) pour for(i=0; i<0; i++)"

Ne sera jamais vrai. i est initialisé à 0 mais la boucle quitte sitôt que i egal ou est supérieur à 0.

hoijir >> Il faudrait te replonger dans un livre de C. Plusieurs sections sont inutiles et d'autres à refaire complètement.
Essais de bien comprendre les sections du livre traitent des tableaux et des itérations.
C'est le meilleur conseil que je peux te donner.

Bonne continuation.

C++ (@++)

mardi 9 janvier 2007 à 01:15:10 | Re : supprimer un element d'une matrice

hoijir

merci bcp je vais essayer de le modifier.

 Merci bien



Cette discussion est classée dans : printf, do, while, scanf, note


Répondre à ce message

Sujets en rapport avec ce message

programme calculette [ par jeanphilippe37 ] [del]Bonjour[/del], Voila, j'ai réalisé une calculette mais je voudrais incorporer une lecteure de fichier qui contient les opérations et les résulta Passer de fonction void a des fonction qui prennent des pointeurs comme parametre [ par m2z ] Salut! j'ai du parvenir a réaliser un programme de gestion d'élèves les informations sont enregistré a travers un tableau de structure [^^clinoeil1] a Problème de code (tri et structure) [ par krolis ] Salut tout le monde, je rencontre un problème lors de l'exécution de ce code au niveau du tri par notes. Veuillez m'aidez s'il vous plaît. Merci d'ava Probleme avec l'affichage dans Strusture [ par m2z ] Salut Les Amis [^^clinoeil1] j'ai trouvé un probleme dans mon programme de gestion d'eleves plus exactement lors de l'affichage ou le programme m' J'AI CREE UN CODE EN LANGAGE C MAIS SA MARCHE PAS J4AI BESOIN DE L4AIDE S.V.P [ par aboutir ] Ce code c'est pour la gestion de candidature a un concoure aide moi svp #include #include struct condidat { int num,age; char nom[30] Probléme à créer un tableaux à partir des structures [ par wissouramos ] Bonjour à tous. J'ai un petit problème de syntax, après plusieurs recherche sur le net, je n'ai pu ni affirmer ou ni infirmer la validation de mon cod comment manipuler printf et scanf apartir des structures [ par wissouramos ] Bonjour,j'ai une grosse problème,et j'espère que je trouvera une solution grâce a vous: j'ai une structure par exemple: [color=red]typedef struct { scanf à la suite [ par svince ] Bonjour, J'ai un problème avec une fonction toute bête qui fait deux scanf à la suite. Le deuxième ne passe pas quand je lance mon prog en console. P trier un tableau de stucture en c [ par peli20 ] [^^happy13]salut, j ai un petit probleme en c ,j espere que vous m aidiez.. bon, j essaie d elaborer un programme faisant la gestion des contact, le r Probleme pour effectuer N traitements [ par le0duprogramme ] Bonjour à tous , J'ai fait un algo qui effectue le prix d'un patient pour un séjour en fonction des prestations qu'il à choisit. Mon problème est de l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,061 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales