Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de boucle infinie [ Divers / Général ] (darkwhite)

lundi 11 juin 2007 à 07:11:18 | Probleme de boucle infinie

darkwhite

Salut à tous,
abcrésultat
0000
0010
0101
0111
1000
1011
1101
1111


Je veux ecrire une table de verité dans un tableau dont l'equation m'est incconuue (car j'ai la fleme de la calculer ). Ensuite le but du programme est qu'a partir de 3 nombres entré il me donne le resultat de la ligne corespondante.
J'ecris donc le code ;
#include <stdio.h>

int main()
{printf("test");
  int table[4][8],i=0,j=0,k=4;
  int a,b,c;

  //Mise a zero du tableau
  printf("test2");
  for(i=0;i<4;i++)
    {
      for(j=0;j<8;j++)
    {
      table[i][j]=0; }
    }

  //Remplissage de la table
  for (i=0;i<4;i++)
    {
      for(j=0;j<8;j+=k)
    {
      table[i][j]=1;
   
      }  
      //Pour la colonne suivante l'etat change deux fois plus frequement
      k/=2;
    }

  //Ecriture des resultats
  // On pourrai le faire avec des operateurs logiques mais je ne suis pas arrivé a calculer l'equation
  table[3][2]=1;
  table[3][3]=1;
  table[3][5]=1;
  table[3][6]=1;
  table[3][7]=1;
  j=0;

  scanf("%d",&a);
  scanf("%d",&b);
  scanf("%d",&c);

  //Recherche de la ligne correspondante
  while(table[0][j]!=a && table[1][j]!=b && table[2][j]!=c)
    {
      j++;
    }
  printf("%d",table[3][j]);

  return 0;
}

Bon bien sur sa ne march pas, mais ce qui m'étonne le plus, c'est que j'ai mis un printf a la premiere ligne du code et qu'a l'execution aucun texte n'apparait.
En lançant la commande top j'ai remarqué que mon prog partait en espece de boucle infinie  (il prenait 90% du proc)

Donc pourquoi il part en sucette comme ça dejà ?

lundi 11 juin 2007 à 08:05:45 | Re : Probleme de boucle infinie

omnia

Réponse acceptée !
Salut,

Bon pour commencer un printf si tu veux qu'il t'affiche la ligne il faut ajouter un \n a la fin de la chaine:

printf("test\n");

il reste bloqué dans ta boulce while:

dans le cas ou a b ou c n"existe pas il ne sort jamais de la boucle ...



lundi 11 juin 2007 à 08:12:08 | Re : Probleme de boucle infinie

thomwebster

Réponse acceptée !
Salut a toi!
Bon alors chez moi tes deux printf de test s'affiche bien.
En fait si tu veux faire des affichage test de debug utilise fprintf(stderr,"test"); car cette fonction écrit dans la sortie standard et n'est pas bufferisée. C'est à dire qu'elle écrit a l'écran tout de suite alors que printf attend que le buffer soit plein... printf à été ocnçu ainsi car a chaque écriture il y a un appel system et ton programme perd le processeur (cf ordonnanceur ou scheduleur pour + de détails), ainsi en utilisant un buffer il stock plusieurs choses a écrire avant de faire l'appel system, pour en faire le moins possible. L'avantage de printf est qu'il est plus rapide que fprintf mais son inconvénient et que si le programme plante il est possible qu'il n'écrive pas ce que tu lui a dit d'écrire car le buffer n'est pas plein (ou qu'il n'y a pas eu d'autre appel system)... fprintf lui crache tout ce que tu lui donne... Cela peut donc vraiment ralentir un programme qui à chaque affichage perd le processeur mais qui par contre "doit" être utilisé en phase de debug.
Pour ta boucle infini, elle vient de là:
//Remplissage de la table
  for (i=0;i<4;i++)
    {
      for(j=0;j<8;j+=k)
    {
      table[i][j]=1;
   
      }  
      //Pour la colonne suivante l'etat change deux fois plus frequement
      k/=2;
    }
En fait j'ai un peu de mal à voir comment tu veux remplir ta table... C'est la première table que tu a mis au début de ton poste que tu veux obtenir? Si tel est le cas, autant ne pas la calculer mais la rentrer en dur comme ceci:
int table[4][8]={0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1};

C'est une initialisation à la définition, ça marche comme ça:
type Nom_du_tableau [Taille1][Taille2]...[TailleN] = {elem1, elem2, ... elemX};

Les valeurs sont attribuées aux éléments successifs en incrémentant d'abord les indices de droite, c'est-à-dire pour un tableau à 2 dimensions : [0][0], [0][1], [0][2] ... puis [1][0] etc.
Tiens moi au courrant de l'avancement de ton programme et n'hésite pas à me demander si tu a des questions...
Bonne continuation.
Thom

lundi 11 juin 2007 à 12:23:54 | Re : Probleme de boucle infinie

Loki6

Membre Club
Réponse acceptée !
si je ne me trompe pas, l'équation est :     B   OU   (A ET C)

Loki

lundi 11 juin 2007 à 12:26:30 | Re : Probleme de boucle infinie

darkwhite

Merci Beaucoup pour vos reponsses, apres le bac je m'y repanche

lundi 11 juin 2007 à 20:43:43 | Re : Probleme de boucle infinie

mogwai93

Je rajouterais aussi un test sur j dans le while pour éviter un débordement de tableau

samedi 18 août 2007 à 20:54:17 | Re : Probleme de boucle infinie

darkwhite

Bon mon en est là :

#include <stdio.h>

int main()
{
  int table[4][8]={0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1};
int  i=0,j=0,k=4;
  int a,b,c;

  //Mise a zero du tableau

  for(i=0;i<4;i++)
    {
      for(j=0;j<8;j++)
    {
      table[i][j]=0;
    }
    }

 
  table[3][2]=1;
  table[3][3]=1;
  table[3][5]=1;
  table[3][6]=1;
  table[3][7]=1;
  j=0;
  printf("remplie\n");
  scanf("%d",&a);
  scanf("%d",&b);
  scanf("%d",&c);

  //Recherche de la ligne correspondante
  while(table[0][j]!=a && table[1][j]!=b && table[2][j]!=c)
    {
      j++;printf("x\n");
    }
  printf("%d\n",table[3][j]);

  return 0;
}

A l'execution il scanf mes trois variables. Or il ne reagit pas et ne renvoie rien et se termine.
Je ne comprends pas car je pensse que les conditions sont bonnes ? (la preuve que non mais bon)

http://montagne-liberte.homedns.org

lundi 3 septembre 2007 à 17:57:00 | Re : Probleme de boucle infinie

darkwhite

Loki6 pourrait tu me dire comment tu trouve l'equation ? car je galere la

lundi 3 septembre 2007 à 18:22:24 | Re : Probleme de boucle infinie

omnia

B   OU   (A ET C) :

if (B |  (A & C) )



lundi 3 septembre 2007 à 18:23:24 | Re : Probleme de boucle infinie

omnia

lol

euh plutot

B || A && C;

mdr


1 2

Cette discussion est classé dans : boucle, table, printf, for, infinie


Répondre à ce message

Sujets en rapport avec ce message

boucle qui ne fonctionne pas [ par florian1121 ] Bonjour!!J'ai un probleme au niveau de mon programme, lorsque je le lance la boucle for dans les case ,ca empeche la boucle de switch de recommencer, probleme de compilation sur dev c++ [ par mino1001 ] bonjour tout le monde svp aidez moi je n'arrive pas a comprendre pq mon prog ne marche pas apres validation de la compilation?j'ai crée ce prog pour  MasterMind en C [ par igor012 ] Salut a tous,j'ai un problème en C. j'essaie de faire un jeu de masterMind mais il y a un problème au niveau de la decouverte des pions blancs je ne s boucle for bizzard [ par dark_naruto25 ] Salut les amis ! Bon voilà mon problème. J'ai une boucle for tiré d'une programme qui fonctionne correctement. Ce n'est pas moi qui l'ai fait. Pourtan Travail en arrière-plan [ par Ziman ] Bonjour,je fais une petite application pour copier des fichiers et euh, un moment il y a une boucle for qui s'exécute un grand nombre de fois et le so probleme dans l'algorithme de jacobi [ par mino1001 ] voila mon programme ,et je ne c pas pourquoi il ne calcule pas les solutions du systeme Ax=b telles que:        5   -1 -1 -1                  -4       besion d' aide [ par ccfacile ] j'ai  fais un programme sur devc++ pour resoudre l'equation matricielle : A*X=B ,  je vois pas ou est elle euruer ? est ce que vous pouvez aidez SVP, random et printf avec for :( [ par sokotanic ] salutj'ai besoin d'aide#include #include #include //Abdou chez les Almohadesusing namespace std;int main(){    srand(time(NULL));int j,i;i boucle plus rapide que simple déclaration [ par zozizozu ] Bonjour, et excusez la sotise de ma question, mais est-ce qu'une boucle est plus rapide qu'une simple déclaration successive de ses items?En gros, est Trie bulle [ par afrikanoo ] #include #include void main(){ clrscr(); int n; <font color="#d3d3d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.