Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

un programme m'echappe

2 participants

Aller en bas

un programme m'echappe Empty un programme m'echappe

Message  pascal Ven 11 Sep 2009 - 0:52

Salut,

Ce petit programme ne se compile pas de tout avec visual c++ alors qu'il s'exécute correctement avec codeblocks. Je n'ai pas pu corriger les bugs affichés.Pourriez vous m'aider?
Merci d'avance.
Voici le code
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


typedef int (*compfn)(const void*, const void*);

struct tache
{
    int release_date;
    int duree;
    int due_date;
    int id_tache;
};

typedef struct
{
    int date_disponibilite;
} machine;

struct tache job[] =
{
    { 3, 0, 4, 1 }, {5, 3, 5,2}, {1,4,12,3}, {2,7,10,4}, {4,8,11,5}
};
/*fonction tri par ordre croissant de sa date de fin*/
int compare(struct tache *elem1, struct tache *elem2)
{
    if (elem1->due_date < elem2->due_date)
        return -1;
    else if (elem1->due_date > elem2->due_date)
        return 1;
    else
        return 0;
}

void printarray(void)
{
    int i;

    for (i = 0; i < 5; i++)
        printf("  %d " , job[i].id_tache);

}

int main(void)
{


    float temps;
    clock_t t1, t2;
    t1 = clock();
    machine Machines[3];
    int id_machineDispo;
    int retardsTotaux = 0;
    int retards, j, k;

    qsort((void *) &job,5, sizeof(struct tache), (compfn)compare);
    printf("\n due_date tache par ordre croissant\n");
    printarray();
    printf("\n");

        for (j = 0; j < 3; j++)
    {
        Machines[j].date_disponibilite = 0;
    }
    /* pour toute les taches */
    for (k = 0; k <5 ; k++)
    {

        id_machineDispo = 0;

        /* trouver la machine disponible plus tot*/
        for (j = 0;j < 3; j++)
        {
            if (Machines[j].date_disponibilite < Machines[id_machineDispo].date_disponibilite)


                id_machineDispo = j;

        }

          /* calculer date fin tache sur machine */
            if (k<3)

            Machines[id_machineDispo].date_disponibilite += job[k].duree + job[k].release_date;

            if(k>=3)

            Machines[id_machineDispo].date_disponibilite += job[k].duree;

            /* affichage affectation*/
            printf("\n date disponibilite  machine %d egale : %d ",id_machineDispo, Machines[id_machineDispo].date_disponibilite);
            printf("\n placer tache %d sur machine %d", job[k].id_tache, id_machineDispo);
            printf("\n");
            /* calcul retard et retards totaux */
            retards = Machines[id_machineDispo].date_disponibilite-job[k].due_date;
            printf("\n retards : %d", retards);
            printf("\n");
            if (retards > 0)
            retardsTotaux += retards;


        /* affichage retards totaux */
    printf("\n retards totaux : %d\n",retardsTotaux);
   }
    t2 = clock();
    temps = (float)(t2-t1)/CLOCKS_PER_SEC;
    /* temps exécution application */
    printf("temps = %f\n", temps);

    return 0;
}
Les bugs :
1>------ Début de la génération*: Projet*: code_c_EDD, Configuration*: Debug Win32 ------
1>Compilation en cours...
1>main.c
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(52) : error C2275: 'machine'*: utilisation non conforme de ce type comme expression
1> c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(19)*: voir la déclaration de 'machine'
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(52) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'Machines'
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(52) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(52) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(53) : error C2143: erreur de syntaxe*: absence de ';' avant 'type'
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(54) : error C2143: erreur de syntaxe*: absence de ';' avant 'type'
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(55) : error C2143: erreur de syntaxe*: absence de ';' avant 'type'
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(62) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(62) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(62) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(64) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(64) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(64) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(67) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(67) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(67) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(70) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(73) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(73) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(73) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(75) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(75) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(75) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(75) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(75) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(75) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(78) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(78) : error C2065: 'j'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(83) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(85) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(85) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(85) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(85) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(85) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(87) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(89) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(89) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(89) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(89) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(92) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(92) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(92) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(92) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(93) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(93) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(96) : error C2065: 'retards'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(96) : error C2065: 'Machines'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(96) : error C2065: 'id_machineDispo'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(96) : error C2109: un indice requiert un type tableau ou pointeur
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(96) : error C2065: 'k'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(97) : error C2065: 'retards'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(99) : error C2065: 'retards'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(100) : error C2065: 'retardsTotaux'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(100) : error C2065: 'retards'*: identificateur non déclaré
1>c:\users\documents\visual studio 2008\projects\code_c_edd\code_c_edd\main.c(104) : error C2065: 'retardsTotaux'*: identificateur non déclaré
1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\Documents\Visual Studio 2008\Projects\code_c_EDD\code_c_EDD\Debug\BuildLog.htm"
1>code_c_EDD - 55 erreur(s), 0 avertissement(s)
========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

pascal
Bavard
Bavard

Messages : 20
Date d'inscription : 20/08/2009

Revenir en haut Aller en bas

un programme m'echappe Empty Re: un programme m'echappe

Message  -ed- Ven 11 Sep 2009 - 20:45

pascal a écrit:Salut,

Ce petit programme ne se compile pas de tout avec visual c++ alors qu'il s'exécute correctement avec codeblocks. Je n'ai pas pu corriger les bugs affichés.Pourriez vous m'aider?
C'est normal. Il n'est pas conforme à C90 :
Code:


-------------- Build: Debug in hello ---------------

Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c: In function `main':
C:\dev\hello\main.c:52: warning: ISO C90 forbids mixed declarations and code
Output size is 21.31 KB
Process terminated with status 0 (0 minutes, 3 seconds)
0 errors, 1 warnings
Ceci fonctionne :
Code:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef int (*compfn) (const void *, const void *);

struct tache
{
  int release_date;
  int duree;
  int due_date;
  int id_tache;
};

typedef struct
{
  int date_disponibilite;
}
machine;

struct tache job[] = {
  {3, 0, 4, 1}, {5, 3, 5, 2}, {1, 4, 12, 3}, {2, 7, 10, 4}, {4, 8, 11, 5}
};
/*fonction tri par ordre croissant de sa date de fin*/
int compare (struct tache *elem1, struct tache *elem2)
{
  if (elem1->due_date < elem2->due_date)
      return -1;
  else if (elem1->due_date > elem2->due_date)
      return 1;
  else
      return 0;
}

void printarray (void)
{
  int i;

  for (i = 0; i < 5; i++)
      printf ("  %d ", job[i].id_tache);

}

int main (void)
{
  float temps;
  clock_t t1 = clock (), t2;
  machine Machines[3];
  int id_machineDispo;
  int retardsTotaux = 0;
  int retards, j, k;

  qsort ((void *) &job, 5, sizeof (struct tache), (compfn) compare);
  printf ("\n due_date tache par ordre croissant\n");
  printarray ();
  printf ("\n");

  for (j = 0; j < 3; j++)
  {
      Machines[j].date_disponibilite = 0;
  }
  /* pour toute les taches */
  for (k = 0; k < 5; k++)
  {

      id_machineDispo = 0;

      /* trouver la machine disponible plus tot */
      for (j = 0; j < 3; j++)
      {
        if (Machines[j].date_disponibilite <
            Machines[id_machineDispo].date_disponibilite)

            id_machineDispo = j;

      }

      /* calculer date fin tache sur machine */
      if (k < 3)

        Machines[id_machineDispo].date_disponibilite +=
            job[k].duree + job[k].release_date;

      if (k >= 3)

        Machines[id_machineDispo].date_disponibilite += job[k].duree;

      /* affichage affectation */
      printf ("\n date disponibilite  machine %d egale : %d ",
              id_machineDispo, Machines[id_machineDispo].date_disponibilite);
      printf ("\n placer tache %d sur machine %d", job[k].id_tache,
              id_machineDispo);
      printf ("\n");
      /* calcul retard et retards totaux */
      retards =
        Machines[id_machineDispo].date_disponibilite - job[k].due_date;
      printf ("\n retards : %d", retards);
      printf ("\n");
      if (retards > 0)
        retardsTotaux += retards;

      /* affichage retards totaux */
      printf ("\n retards totaux : %d\n", retardsTotaux);
  }
  t2 = clock ();
  temps = (float) (t2 - t1) / CLOCKS_PER_SEC;
  /* temps exécution application */
  printf ("temps = %f\n", temps);

  return 0;
}
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

un programme m'echappe Empty Re: un programme m'echappe

Message  pascal Sam 12 Sep 2009 - 0:04

Merci pour votre réponse.
C'est formidable!
Par contre je n'ai pas vu la différence avec le code que j'ai posté dans mon premier message?
Avec mes remerciements

pascal
Bavard
Bavard

Messages : 20
Date d'inscription : 20/08/2009

Revenir en haut Aller en bas

un programme m'echappe Empty Re: un programme m'echappe

Message  -ed- Sam 12 Sep 2009 - 3:20

L'erreur était ici :
Code:

int main(void)
{
    float temps;
    clock_t t1, t2;
    t1 = clock();
    machine Machines[3];
<...>
on a pas le droit de définir une variable après une instruction.

2 solutions :
ajouter un bloc :
Code:

int main(void)
{
    float temps;
    clock_t t1, t2;
    t1 = clock();
    {
      machine Machines[3];
<...>
  }
ou placer l'appel de fonction dans l'initialisation (ça, c'est autorisé) :
Code:

int main(void)
{
    float temps;
    clock_t t1  = clock(), t2;
    machine Machines[3];
<...>
ce que j'ai fait ...


Dernière édition par -ed- le Sam 12 Sep 2009 - 14:31, édité 1 fois
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

un programme m'echappe Empty Re: un programme m'echappe

Message  pascal Sam 12 Sep 2009 - 12:39

Merci beaucoup , c'est parfait!

pascal
Bavard
Bavard

Messages : 20
Date d'inscription : 20/08/2009

Revenir en haut Aller en bas

un programme m'echappe Empty Re: un programme m'echappe

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser