begin process at 2012 05 29 18:58:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

pb en c urgenttttttttttttttttt


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

pb en c urgenttttttttttttttttt

samedi 5 février 2005 à 14:40:54 | pb en c urgenttttttttttttttttt

natacha86

bonjour, j'ai un probleme avec mon programme,
il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.
le code est assez long, je vous conseil si vous voulez m'aider de le copier de regarde ce que ca fait (lancer un tri de 1 à 5 et essayer de sortir avec 7 vous verrez ce que ca fait, le 6 marche je ne sais pas pkoi non plus il est comme les autres)
merci d'avance...

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

#define MAX 1000000

/****************************tri bulle*********************************/

void tri_bulle()
{
    int nb,i,j,v,tab[MAX];             /* déclarations */

    srand(time(NULL));      /* Initialisation du générateur aléatoire avec la fontion time */
    printf("\n\n Nombre de valeurs a trier (du tableau)  : ");
    scanf("%d", &nb);       /* Demande le nombre d'éléments à trier */
    printf("\n");

    for(i=0;i<nb;i++)
        tab[i]=rand();

    printf("Les valeurs avant le tri :     ");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

    for (i=0; i<nb; i++)
        for (j=nb-1; j>i; j--)
            if (tab[j-1]>tab[j])
            {
    v=tab[j-1];
                tab[j-1]=tab[j];
                tab[j]=v;
             }
    printf("\n\nLes valeurs apres le tri :");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);
    system("PAUSE");
    main();
}

/****************************tri par insertion ****************************/

void tri_ins()
{
    int nb,i,j,v,tab[MAX];    /* déclarations */

    srand(time(NULL));      /* Initialisation du générateur aléatoire avec la fontion time */
    printf("\n\n Nombre de valeurs a trier (du tableau)  : ");
    scanf("%d", &nb);       /* Demande le nombre d'éléments à trier */
    printf("\n");

    for(i=0;i<nb;i++)
        tab[i]=rand();

    printf("Les valeurs avant le tri :     ");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

    for (i=0; i<nb; i++)
    {
        v=tab[i];
        j=i;
        while (tab[j-1]>v)
        {
            tab[j]=tab[j-1];
            j--;
        }
        tab[j]=v;
     }

    printf("\n\nLes valeurs apres le tri :");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);
    system("PAUSE");
    main();
}

/****************************tri par extraction ****************************/

void tri_ext()
{
    int nb,i,j,v,min,tab[MAX];    /* déclarations */

    srand(time(NULL));      /* Initialisation du générateur aléatoire avec la fontion time */
    printf("\n\n Nombre de valeurs a trier (du tableau)  : ");
    scanf("%d", &nb);       /* Demande le nombre d'éléments à trier */
    printf("\n");

    for(i=0;i<nb;i++)
        tab[i]=rand();

    printf("Les valeurs avant le tri :     ");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

    for (i=0; i<nb; i++)
    {
        min=i;
        for(j=i;j<nb;j++)
             if (tab[j]<tab[min])
                min=j;
        v=tab[min];
        tab[min]=tab[i];
        tab[i]=v;
     }

    printf("\n\nLes valeurs apres le tri :");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);
    system("PAUSE");
    main();
}

/****************************tri shell ****************************/
void tri_shell ()
{
    int i,j,k,l,p,n,nb,tab[MAX];
    int b;

    srand(time(NULL));      /* Initialisation du générateur aléatoire avec la fontion time */
    printf("\n\n Nombre de valeurs a trier (du tableau)  : ");
    scanf("%d", &nb);       /* Demande le nombre d'éléments à trier */
    printf("\n");

    for(i=0;i<nb;i++)
        tab[i]=rand();
        n=nb;
    printf("Les valeurs avant le tri :     ");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

      for ( k=1 ; k<=n/9; k=3*k+1);
      for ( ; k>0 ; k /=3)
      for ( i=k ; i<n ; i++ )
          {
           l = tab[i] ;
           j = i ;
           while (j>k && tab[j-k]>l)
                 {
                  tab[j] = tab[j-k] ;
                  j -= k ;
                 }
                 tab[j] = l ;
          }


    printf("\n\nLes valeurs apres le tri :");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);
    system("PAUSE");
    main();
}
 
/****************************tri fusion ****************************/

void interclasse(int tab[], int inf, int mid, int sup)
{
  int tab_aux[sup];   /*  Tableau auxiliaire  */

  int i=inf,j=mid+1,k=inf;

  /*  Fusion dans le tableau auxiliaire  */
  while(i<=mid && j<=sup)
  {
    if (tab[i]<tab[j])
     tab_aux[k++]=tab[i++];
    else
     tab_aux[k++]=tab[j++];
  }

  if (i>mid) 
    while(j<=sup)
      tab_aux[k++]=tab[j++];
  else
    while(i<=mid)
      tab_aux[k++]=tab[i++];

  /*  Recopie du tableau auxiliaire dans tab  */
  for(i=inf;i<=sup;i++)
    tab[i]=tab_aux[i];

 

}

void fusion(int T[], int a, int b) {
 int i,m;
 
 if (a < b) {
  m = (a+b)/2;
  fusion(T, a, m); // m tjs < b
  fusion(T, m+1, b); // m+1 tjs > a donc pas de bouclage possible

  interclasse(T, a, m, b);
  }
}

void tri_fusion() {

    int i,nb,tab[MAX];


    srand(time(NULL));      /* Initialisation du générateur aléatoire avec la fontion time */
    printf("\n\n Nombre de valeurs a trier (du tableau)  : ");
    scanf("%d", &nb);       /* Demande le nombre d'éléments à trier */
    printf("\n");

    for(i=0;i<nb;i++)
        tab[i]=rand();

    printf("Les valeurs avant le tri :     ");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);


 fusion(tab, 0, nb-1);

    printf("\n\nLes valeurs apres le tri :");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

    system("PAUSE");
    main();
}

 

/************************ tri rapide ****************************/

// réordonne le tableau et rend l'indice de séparation
int permutation(int T[], int a, int b) {
 int i, j, pivot, bi = a, bs = b, r, TI[b];
 
 // choix du pivot
 pivot = T[a];
 
 for(i=a;i <= b;i++) {
         if (T[i] < pivot) { TI[bi] = T[i]; bi++; }
         if (T[i] > pivot) { TI[bs] = T[i]; bs--; }
  }

  /* On place le ou les pivots */

  for(i=bi;i<=bs;i++) { TI[i] = pivot; }

  /* recopie de TI */

  for(i=a;i <= b;i++) {
         T[i] = TI[i];
         if (T[i] == pivot) { r = i; }
  }
    return r;
}

void rapide(int T[], int a, int b) {
 
  int separe;

  if (a < b) {
 separe = permutation(T, a, b);
 rapide(T, a, separe-1);
 rapide(T, separe+1, b);
  }
}

void tri_rapide() {

    int i,nb,tab[MAX];


    srand(time(NULL));      /* Initialisation du générateur aléatoire avec la fontion time */
    printf("\n\n Nombre de valeurs a trier (du tableau)  : ");
    scanf("%d", &nb);       /* Demande le nombre d'éléments à trier */
    printf("\n");

    for(i=0;i<nb;i++)
        tab[i]=rand();

    printf("Les valeurs avant le tri :     ");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

    rapide(tab, 0, nb-1);

    printf("\n\nLes valeurs apres le tri :");
    for(i=0; i<nb;i++)
        printf("\n%d       ",tab[i]);

    system("PAUSE");
    main();

}


/************************ programme principal ****************************/

int main()
{
    /* déclarations */
     int choix=0;

     printf("\n\n\t\t\t     ****************\n");
     printf("\t\t\t     *MENU PRINCIPAL*\n");
     printf("\t\t\t     ****************\n\n\n\n");
     printf("\t   TAPEZ :\n\n\n\n");
     printf("\t\t1\t   Pour :\t    Lancer le prog de tri a bulle\n\n");
     printf("\t\t2\t   Pour :\t    Lancer le prog de tri par insertion\n\n");
     printf("\t\t3\t   Pour :\t    Lancer le prog de tri par ext\n\n");
     printf("\t\t4\t   Pour :\t    Lancer le prog de tri shell\n\n");
     printf("\t\t5\t   Pour :\t    Lancer le prog de tri fusion\n\n");
     printf("\t\t6\t   Pour :\t    Lancer le prog de tri rapide\n\n");
     printf("\t\t7\t   Pour :\t    Quitter le programme\n\n\n");
     printf("\t   CHOIX : ");
     scanf("%d",&choix);

     switch(choix)
     {
        case 1 : tri_bulle();

        case 2 : tri_ins();

        case 3 : tri_ext();

        case 4 : tri_shell();

        case 5 : tri_fusion();

        case 6 : tri_rapide();

        case 7 : break;

     }

}

samedi 5 février 2005 à 16:49:28 | Re : pb en c urgenttttttttttttttttt

ShareVB

salut,

pour chaque case, il faut finir par un break; , sinon tu executes tous les cases qui suivent celui sélectionné...

ShareVB
lundi 7 février 2005 à 15:08:51 | Re : pb en c urgenttttttttttttttttt

ymca2003

Et ca t'évitera d'appeler main à la fin de chaque fonction car c'est pas terrible comme méthode....

Parce en fait quand tu fait 7, tu sort bien du main, mais comme il est appelé récursivement, et bah sortir du main sort de la dernière fonction qui l'a appelé, puis continu dans le main précédent à la suite du switch...

en gros si au premier choix tu tape 1 et 7 au 2ème, il va s'exécuter :
- entrée du prog -> main
- choix = 1 => tri_bulle();
- fin de tri_bulle() => tu retourne dans main.
- 2ème main imbriqué
- choix = 7 => tu sort bien du switch et du main mais tu ressort à la fin de tri_bulle.
- à la fin de tri_bulle, tu retombe dans le switch du premier main mais comme il n'y a pas de break, tu continue ce qu'il y a après


Cette discussion est classée dans : int, tri, printf, tab, for


Répondre à ce message

Sujets en rapport avec ce message

help une fonction qui a besoin de vous [ par natacha86 ] Re bonjour a tout le monde, voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi ell encore un pb en c svp....... [ par natacha86 ] j'ai essayer de séparer les fonctions mais ca ne marche pas...#include #include #include #include #include #define MAX 1000000 compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le Programme Tri à Bulle [ par tivanbelle ] Bonjour,J'ai fait ce programme en cours, c'est un tri a bullequi tri des valeur donc 2à2, mais le programme ne fonctionne pas. Pouvez vous me dire ce HELP [ par alex64100 ] BONOURje doit réaliser un   prog de tri de caractèresvoici mon code#include #include #include #include int main (int argc,  char ar algorithme de tri [ par chegue02 ] Bonjour, svp vous pouvez mé corrigé ce code concernant l'algorithme de tri merci d'avance #include #include // fonction qui permet de trier tab en Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C besoin d'aide dans programme en c [ par houda986 ] salut; je suis un débutante en programmation et j'ai besoin d'aide pour la résolution d'un programme en C,c'est un programme de tri par base ... j'ai Programme en c++ [ par noussa44 ] Bonjour tout le monde, j'ai besoin svp de vore aide sur un programme que j'ai fait qui permet de trier des réels dans un tableau.Mais j'ai un problèm


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,669 sec (3)

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