un programme m'echappe

Voir le sujet précédent Voir le sujet suivant Aller en bas

un programme m'echappe

Message  pascal le 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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: un programme m'echappe

Message  -ed- le 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;
}

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: un programme m'echappe

Message  pascal le 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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: un programme m'echappe

Message  -ed- le 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

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: un programme m'echappe

Message  pascal le Sam 12 Sep 2009 - 12:39

Merci beaucoup , c'est parfait!

pascal
Bavard
Bavard

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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: un programme m'echappe

Message  Contenu sponsorisé Aujourd'hui à 15:25


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum