IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Transformation de PASCAL en C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut Transformation de PASCAL en C
    SALUT A TOUS!
    svp, aidez moi a transformer ce programme écris en PASCAL en C
    ____________________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    program serie2exo8;
    uses crt;
    {declaration des types et variables}
    type liste=^element;
         element=record
         pri:integer;
         val:string;
         suiv:liste;
         end;
    	 var l,lp:liste;
    choix:char;
    prio,dp:integer;
    vale,dv:string;
    {creation delement pour ajouter}
    procedure creation(var e:liste;pri:integer;val:string);
    begin
    new(e);
    e^.pri:=pri;
    e^.val:=val;
    end;
    {affichage de liste}
    procedure affichage(l:liste);
    var q:liste;
    begin
    q:=l;
    while(q<>nil) do begin
    writeln('Priorite:> ',q^.pri);
    writeln('Valeur => ',q^.val);
    q:=q^.suiv;
    end;
    end;
    {emfiler insert en queu}
    procedure emfiler(var l:liste;var pe:integer;var ve:string);
    var e,q:liste;
    begin
    creation(e,pe,ve);
    if (l=nil) then l:=e
    else begin
    q:=l;
    while(q^.suiv<>nil)do q:=q^.suiv;
    q^.suiv:=e;
    end;
    end;
    {defiler sup de la tete}
    procedure defiler(var l:liste;var pd:integer;var vd:string);
    var q:liste;
    begin
    q:=l;
    l:=l^.suiv;
    q^.suiv:=nil;
    pd:=q^.pri;
    vd:=q^.val;
    dispose(q);
    end;
    {empiler insertion en tete}
    procedure empiler(var l:liste;var pe:integer;var ve:string);
    var e,q:liste;
    begin
    creation(e,pe,ve);
    if (l=nil) then l:=e
    else begin
    e^.suiv:=l;
    l:=e;
    end;
    end;
    {depiler sup de la tete}
    procedure depiler(var l:liste;var pd:integer;var vd:string);
    var q:liste;
    begin
    q:=l;
    l:=l^.suiv;
    q^.suiv:=nil;
    pd:=q^.pri;
    vd:=q^.val;
    dispose(q);
    end;
     
    {maxpri}
    procedure maxpri(l:liste;var pm:integer;var vm:string);
    var q,x:liste;
    begin
    q:=l;
    x:=l;
    while(q<>nil) do begin
    if((q^.pri)>(x^.pri))then x:=q;
    q:=q^.suiv;
    end;
    pm:=x^.pri;
    vm:=x^.val;
    end;
     
    {defiler par prioriteX XX}
    procedure defilerpri(var l:liste;var pd:integer;var vd:string);
    var q,ls,t:liste;
    vs:string;
    ps:integer;
    begin
    ls:=nil;
    maxpri(l,pd,vd);
    while((l^.pri<>pd)and(l^.val<>vd)) do begin
    defiler(l,ps,vs);
    empiler(ls,ps,vs);
    end;
    if((l^.val=vd)and(l^.pri=pd)) then defiler(l,pd,vd);
    if (ls<>nil) then repeat
    depiler(ls,ps,vs);
    empiler(l,ps,vs);
    until(ls=nil);
    end;
     
    {program principal}
     
    begin
    clrscr;
    l:=nil;
    lp:=nil;
    choix:='y';
    writeln('>L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<');
    writeln;
    while(choix<>'n')do begin;
    writeln('Entrer la valeur(un caractere):');
    readln(vale);
    writeln('Entrer la priorite(un entier):');
    readln(prio);
    emfiler(l,prio,vale);
    writeln('Voulez vous ajoutez un element?: (y/n)');
    readln(choix);
    end;
    writeln;
    writeln('LA LISTE DES ELEMENTS CREES');
    affichage(l);
    writeln;
    writeln('LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE');
    repeat
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    until (l=nil);
    affichage(lp);
    readln;
    end.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    On va travailler en équipe pour que ça soit rapide et pour qu'on soit super efficaces :

    1. Tu essaies de le convertir ce code en C comme tu peux (tu remplaces déjà ce que tu sais remplacer) :

    - les { commentaires pascal } par des /* commentaires C */
    - les type alias = type_original; par typedef type_original alias;
    - les type_name = record ... end; par struct type_name { ... };
    - les var_name : type_pascal par type_C var_name (par exemple, pri:integer; => int pri;)
    - les begin et end par { et }
    - etc.

    2. Tu postes ce que ça t'as donné.

    3. On corrige s'il y a des fautes.

    4. On reprend l'étape 1, jusqu'à ce qu'il n'y ait plus de faute.

    Bon travail.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Qua,

    +1

    Avec une première étape que j'estime nécessaire : mettre le code Pascal en forme (indentation, séparation des fonctions par une ligne vide, ...).

    Tout le monde sait bien que ça facilite la lecture/compréhension du code, et donc le travail.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 121
    Points
    28 121
    Par défaut
    Bonjour,

    As-tu regarde si des convertisseurs existaient (oui, je sais, je donne la solution) ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est surtout que mon expértience avec les convertisseurs m'a appris qu'ils ne donnent jamais du code qui ressemble à ce qu'un humain aurait effectivement écrit. Mais si c'est juste pour avoir un programme qui compile et qui marche, c'est en effet une solution.

  6. #6
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    En jetant un coup d'œil au code, les fonctions depiler et defiler sont identiques. Je pense qu'il doit y avoir une erreur. Si les paires de fonctions empiler et depiler doivent respectivement ajouter et supprimer sur le haut de liste, j'en conclu que les fonctions emfiler et defiler doivent ajouter et supprimer par le bas de liste.

    Bonne continuation.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    voila ce que j'ai pu faire , corriger moi svp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    #inculde<studio.h>
    #include <stdlib.h>
    typedef struct element element;
    struct element
    {int pri;
    char val;
    struct element *suiv;
    };
    typedef element* llist;
     
     
    /*creation delement pour lajouter*/
    void creation(liste *e;int pri;char val);
    {
    e=(liste*)malloc(sizeof(liste));
    e->pri=pri;
    e->val=val;
    }
    /*affichage dune liste*/
    void affichage(l:liste);
    liste q;
    {
    q=l;
    while(q!=nil) do {
    printf("Priorite:> %d",q->pri);
    printf("Valeur => %s",q->val);
    q=q->suiv;
    }
    }
    /*insert en queu */
    void emfiler(liste *l;int pe;char ve);
    liste e,q;
    {
    creation(e,pe,ve);
    if (l==nil) then l=e
    else {
    q=l;
    while(q->suiv!=nil)do q=q->suiv;
    q->suiv=e;
    }
    }
    /*supression de la tete*/
    void defiler(liste *l;int *pd;char *vd);
    liste q;
    {
    q=l;
    l=l->suiv;
    q->suiv=nil;
    pd=q->pri;
    vd=q->val;
    free(q);
    }
    /*insertion en tete*/
    void empiler(liste *l;int pe;char ve);
    liste e,q;
    {
    creation(e,pe,ve);
    if (l=nil) then l=e
    else {
    e->suiv=l;
    l=e;
    }
    }
    /*suppression de la tete*/
    void depiler(liste *l;int *pd;char *vd);
    liste q;
    {
    q=l;
    l=l->suiv;
    q->suiv=nil;
    pd=q->pri;
    vd=q->val;
    free(q);
    }
    /*max pri*/
    void maxpri(liste l;int *pm;char *vm);
    liste q,x;
    {
    q=l;
    x=l;
    while(q!=nil) do {
    if((q->pri)>(x->pri))then x=q;
    q=q->suiv;
    }
    pm=x->pri;
    vm=x->val;
    }
    /*defiler par priorite*/
    void defilerpri(liste *l;int *pd;char *vd);
    liste q,ls,t;
    char vs;
    int ps;
    {
    ls=nil;
    maxpri(l,pd,vd);
    while((l->pri!=pd)and(l->val!=vd)) do {
    defiler(l,ps,vs);
    empiler(ls,ps,vs);
    }
    if((l->val=vd)and(l->pri=pd)) then defiler(l,pd,vd);
    if (ls!=nil) then repeat
    depiler(ls,ps,vs);
    empiler(l,ps,vs);
    until(ls=nil);
    }
    int main()
    {
    /*declaration des types et viables*/
     
    	 liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
    {
    l=nil;
    lp=nil;
    choix='y';
    printfln(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
    while(choix!='n')do {
    printf("Entrer la valeur(un caractere):");
    scanfln(vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
    }
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREES");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE");
    printf("\n");
    repeat{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }until (l==nil);
    affichage(lp);
    getchar();
    }

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    1. C'est stdio.h (standard i/o) et non studio.h.

    2. La fonction creation se définit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* Virgule et non point-virgule pour separer les arguments */
    void creation(liste *e, int pri, char val) /* Pas de point-virgule ici, comme avec les struct ... */
    {
        /* Ici tout me semblait correct. */
    }
    Revois du coup toutes tes définitions de fonctions. Des fautes que tu ne commets pas ailleurs subsistent dans certaines définitions.

    3. Les variables locales d'une fonction se déclarent dans le corps de la fonction, c'est-à-dire entre les accolades. La fonction affichage par exemple devient du coup ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void affichage(liste l)
    {
    liste q;
    q=l;
    while(q!=NULL) do { /* nil (Pascal) => NULL (C) */
    printf("Priorite:> %d",q->pri);
    printf("Valeur => %c",q->val); /* %c et non %s pour afficher un char */
    q=q->suiv;
    }
    }
    4. Pas de then en C, et on met toujours la point-virgule quand il la faut, même devant else.

    En appliquant ces remarques à l'ensemble du code, tu ne devrais plus avoir d'erreur. Il faut par contre que tu te décides entre llist et liste comme nom du type liste, et toujours utiliser liste et non liste * dans les déclarations d'une liste car liste est déjà de type element *.

    En tout cas t'as fait du bon boulot, et on sera aussi toujours là pour la suite.

    A+.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    et voila, j'attends vos critiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    #inculde<stdio.h>
    #include <stdlib.h>
    typedef struct element element;
    struct element
    {int pri;
    char val;
    struct element *suiv;
    };
    typedef element *liste;
     
     
    /*creation delement pour lajouter*/
    void creation(liste *e,int pri,char val);
    {
    e=(liste*)malloc(sizeof(liste));
    e->pri=pri;
    e->val=val;
    }
    /*affichage dune liste*/
    void affichage(liste l)
    {
    liste q;
    q=l;
    while(q!=NULL) do {
    printf("Priorite:> %d",q->pri);
    printf("Valeur => %c",q->val); 
    q=q->suiv;
    }
    }
    /*insert en queu */
    void emfiler(liste *l,int pe,char ve);
    {liste e,q;
    creation(e,pe,ve);
    if (l==null)  l=e;
    ;else {
    q=l;
    while(q->suiv!=null)do q=q->suiv;
    q->suiv=e;
    }
    }
    /*supression de la tete*/
    void defiler(liste *l,int *pd,char *vd);
    {
    liste q;
    q=l;
    l=l->suiv;
    q->suiv=null;
    pd=q->pri;
    vd=q->val;
    free(q);
    }
    /*insertion en tete*/
    void empiler(liste *l,int pe,char ve);
    {
    liste e,q;
    creation(e,pe,ve);
    if (l=null)  l=e
    ;else {
    e->suiv=l;
    l=e;
    }
    }
    /*suppression de la tete*/
    void depiler(liste *l,int *pd,char *vd);
    {liste q;
    q=l;
    l=l->suiv;
    q->suiv=null;
    pd=q->pri;
    vd=q->val;
    free(q);
    }
    /*max pri*/
    void maxpri(liste l,int *pm,char *vm);
    {
    liste q,x;
    q=l;
    x=l;
    while(q!=null) do {
    if((q->pri)>(x->pri)) x=q;
    q=q->suiv;
    }
    pm=x->pri;
    vm=x->val;
    }
    /*defiler par priorite*/
    void defilerpri(liste *l,int *pd,char *vd);
    {liste q,ls,t;
    char vs;
    int ps;
    ls=null;
    maxpri(l,pd,vd);
    while((l->pri!=pd)and(l->val!=vd)) do {
    defiler(l,ps,vs);
    empiler(ls,ps,vs);
    }
    if((l->val=vd)and(l->pri=pd))  defiler(l,pd,vd);
    if (ls!=null)  repeat
    depiler(ls,ps,vs);
    empiler(l,ps,vs);
    until(ls=null);
    }
    int main()
    {
    /*declaration des types et viables*/
    liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
    {
    l=null;
    lp=null;
    choix='y';
    printfln(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
    while(choix!='n')do {
    printf("Entrer la valeur(un caractere):");
    scanfln(vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
    }
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREES");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE");
    printf("\n");
    repeat{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }until (l==null);
    affichage(lp);
    getchar();
    }

  10. #10
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    Un petit détail, essaye d'indenter ton code pour que cela puisse être plus lisible. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Création d'un nouvel élément */
    void creation(liste *e, int pri, char val)
    {
        e = (liste*)malloc(sizeof(liste)) ;
        e->pri = pri ;
        e->val = val ;
    }
    Déclarations "Chaine de caractères"
    En Pascal, string correspond à une chaine de caractères (par défaut de 255 caractères). Le premier caractère d'indice 0 est égale au nombre de caractères dans la chaine.
    Pascal ( val:string; )
    val := 'Test' ; { val[0] = 4, val[1] = 'T' etc..}
    writeln(val) ; { Affiche à l'écran Test (avec un retour chariot) }
    En C, il faut déclarer un tableau de caractères. Une chaine commence à l'indice 0 et doit impérativement ce terminer par un caractère égale à 0.
    C ( char val[255]; )
    strcpy(val, "Test") ; // val[0] = 'T', val[1] = 'e' .... val[4] = 0
    printf("%s\n", val) ; // Affiche à l'écran Test (avec un retour chariot)
    Donc pour ton champ val de ta structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct element {
        int pri ;
        char val[255] ;		// Equivalent à val: string;
        struct element *suiv ;
    } ;
    Les boucles while - do :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    { En Pascal }
    while condition do instructions ;
    ou
    while condition do
    begin
        instructions ;
        instructions ;
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // En C
    while (condition) instructions ;
    ou
    while (condition)
    {
        instructions ;
        instructions ;
    }
    Les boucles repeat - until :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    { En Pascal }
    repeat
        instructions ;
        instructions ;
    until condition ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // En C
    do
    {
        instructions ;
        instructions ;
    }
    while (condition) ;
    Voila pour l'instant. Essaye de corriger ton code et de le compiler.
    N'hésite pas à poser des questions sur des points précis et les membres de la communauté auront plaisir à te répondre
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  11. #11
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Illisible.
    Effectuer une indentation correcte et se tenir à un positionnement des marqueurs de blocs { et } de façon stable (et des ; ) sont des choses indispensables.

    Et il y a encore du travail à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (l==null)  l=e;
    ;else {
    ...
    
    if (ls!=null)  repeat
    depiler(ls,ps,vs);
    empiler(l,ps,vs);
    until(ls=null);
    .....
    //etc.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    voila , mais quand je le compile sa m'affiche toujours une erreur au niveau
    de la procedure creation !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    #inculde<stdio.h>
    #include <stdlib.h>
    typedef struct element element;
    struct element
    {int pri;
    char val;
    struct element *suiv;
    };
    typedef element *liste;
     
     
    /*creation delement pour lajouter*/
    void creation(liste *e,int pri,char val);
    {
    e=(liste*)malloc(sizeof(liste));
    e->pri=pri;
    e->val=val;
    }
    /*affichage dune liste*/
    void affichage(liste l)
    {
    liste q;
    q=l;
    while(q!=NULL) do {
    printf("Priorite:> %d",q->pri);
    printf("Valeur => %c",q->val); 
    q=q->suiv;
    }
    }
    /*insert en queu */
    void emfiler(liste *l,int pe,char ve);
    {liste e,q;
    creation(e,pe,ve);
    if (l==null)  l=e;
    else {
    q=l;
    while(q->suiv!=null)do q=q->suiv;
    q->suiv=e;
    }
    }
    /*supression de la tete*/
    void defiler(liste *l,int *pd,char *vd);
    {
    liste q;
    q=l;
    l=l->suiv;
    q->suiv=null;
    pd=q->pri;
    vd=q->val;
    free(q);
    }
    /*insertion en tete*/
    void empiler(liste *l,int pe,char ve);
    {
    liste e,q;
    creation(e,pe,ve);
    if (l=null)  l=e;
    else {
    e->suiv=l;
    l=e;
    }
    }
    /*suppression de la tete*/
    void depiler(liste *l,int *pd,char *vd);
    {liste q;
    q=l;
    l=l->suiv;
    q->suiv=null;
    pd=q->pri;
    vd=q->val;
    free(q);
    }
    /*max pri*/
    void maxpri(liste l,int *pm,char *vm);
    {
    liste q,x;
    q=l;
    x=l;
    while(q!=null) do {
    if((q->pri)>(x->pri)) x=q;
    q=q->suiv;
    }
    pm=x->pri;
    vm=x->val;
    }
    /*defiler par priorite*/
    void defilerpri(liste *l,int *pd,char *vd);
    {liste q,ls,t;
    char vs;
    int ps;
    ls=null;
    maxpri(l,pd,vd);
    while((l->pri!=pd)and(l->val!=vd)) do {
    defiler(l,ps,vs);
    empiler(ls,ps,vs);
    }
    if((l->val=vd)and(l->pri=pd))  defiler(l,pd,vd);
    if (ls!=null)  do
    {
    depiler(ls,ps,vs);
    empiler(l,ps,vs);}
    while(ls!=null);
    }
    int main()
    {
    /*declaration des types et viables*/
    liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
    {
    l=null;
    lp=null;
    choix='y';
    printfln(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
    while(choix!='n')do {
    printf("Entrer la valeur(un caractere):");
    scanfln(vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
    }
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREES");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE");
    printf("\n");
    repeat{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }until (l==null);
    affichage(lp);
    getchar();
    }

  13. #13
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    voila , mais quand je le compile sa m'affiche toujours une erreur au niveau de la procedure creation !
    C'est normal car tu as mis un ; derrière ta déclaration de fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*creation delement pour lajouter*/
    void creation(liste *e,int pri,char val) ;
    {
    e=(liste*)malloc(sizeof(liste));
    e->pri=pri;
    e->val=val;
    }
    Ta fonction doit être comme cela (avec l'indentation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Création d'un nouvel élément */
    void creation(liste *e, int pri, char val)
    {
        e = (liste*)malloc(sizeof(liste)) ;
        e->pri = pri ;
        e->val = val ;
    }
    Je me répète, mais essaye d'indenter ton code.
    Indenter le code source, c'est d'aligner (par des espaces ou des tabulations) les instructions dans un bloc (en général un bloc commence par { et se termine par }). Cela sera plus lisible par toi pour commencer et les autres qui liront ton code.

    A toi de jouer pour les autres fonctions.

    Attention, tu n'as pas corrigé les boucles while. Regarde mon précédent message.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    voila, mais ça marche toujours pas avec creation !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #inculde<stdio.h>
    #include <stdlib.h>
    typedef struct element element;
    struct element
    {      int pri;
           char val;
           struct element *suiv;
    };
    typedef element *liste;
     
     
    /* Création d'un nouvel élément */
    void creation(liste *e, int pri, char val)
    {
        e = (liste*)malloc(sizeof(liste)) ;
        e->pri = pri ;
        e->val = val ;
    }
    /*affichage dune liste*/
    void affichage(liste l)
    {
     liste q;
     q=l;
     while(q!=NULL) {
     printf("Priorite:> %d",q->pri);
     printf("Valeur => %c",q->val); 
     q=q->suiv;
                       }
    }
    /*insert en queu */
    void emfiler(liste *l,int pe,char ve)
    {    liste e,q;
         creation(e,pe,ve);
         if (l==null)  l=e;
         else {
         q=l;
         while(q->suiv!=null) q=q->suiv;
         q->suiv=e;
                   }
    }
    /*supression de la tete*/
    void defiler(liste *l,int *pd,char *vd)
    {
     liste q;
     q=l;
     l=l->suiv;
     q->suiv=null;
     pd=q->pri;
     vd=q->val;
     free(q);
    }
    /*insertion en tete*/
    void empiler(liste *l,int pe,char ve)
    {
     liste e,q;
     creation(e,pe,ve);
     if (l=null)  l=e;
     else {
     e->suiv=l;
     l=e;
         }
    }
    /*suppression de la tete*/
    void depiler(liste *l,int *pd,char *vd)
    {    
         liste q;
         q=l;
         l=l->suiv;
         q->suiv=null;
         pd=q->pri;
         vd=q->val;
         free(q);
    }
    /*max pri*/
    void maxpri(liste l,int *pm,char *vm)
    {
     liste q,x;
     q=l;
     x=l;
     while(q!=null)  {
     if((q->pri)>(x->pri)) x=q;
     q=q->suiv;
               }
               pm=x->pri;
               vm=x->val;
     }
    /*defiler par priorite*/
    void defilerpri(liste *l,int *pd,char *vd)
    {    
         liste q,ls,t;
         char vs;
         int ps;
         ls=null;
         maxpri(l,pd,vd);
         while((l->pri!=pd)and(l->val!=vd)) {
         defiler(l,ps,vs);
         empiler(ls,ps,vs);
                                            }
    if((l->val=vd)and(l->pri=pd))  defiler(l,pd,vd);
    if (ls!=null) do  
    {
     depiler(ls,ps,vs);
     empiler(l,ps,vs);}
     while(ls!=null);
    }
    int main()
    {
    /*declaration des types et viables*/
    liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
    {
    l=null;
    lp=null;
    choix='y';
    printfln(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
    while(choix!='n')do {
    printf("Entrer la valeur(un caractere):");
    scanfln(vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
    }
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREES");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE");
    printf("\n");
    repeat{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }until (l==null);
    affichage(lp);
    getchar();
    }

  15. #15
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 121
    Points
    28 121
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    voila, mais ça marche toujours pas avec creation !!
    Le probleme n'est probablement pas creation, mais ton appel a cette fonction dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    int main()
    {
    /*declaration des types et viables*/
    liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
     { // Pourquoi un bloc ici ?
    l=null;
    lp=null;
    choix='y';
    printfln(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
     while(choix!='n')do { /* ERREUR */
    printf("Entrer la valeur(un caractere):");
    scanfln(vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
     } /* La fin de ton while est ici ! */
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREES");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE");
    printf("\n");
    repeat{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
     }until (l==null); /* Pas de until en C */
    affichage(lp);
    getchar();
    }
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    le compelateur m'affiche toujours une erreur au niveau de creation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #inculde<stdio.h>
    #include <stdlib.h>
    typedef struct element element;
    struct element
    {      int pri;
           char val;
           struct element *suiv;
    };
    typedef element *liste;
     
     
    /* Création d'un nouvel élément */
    void creation(liste *e, int pri, char val)
    {
        e = (liste*)malloc(sizeof(liste)) ;
        e->pri = pri ;
        e->val = val ;
    }
    /*affichage dune liste*/
    void affichage(liste l)
    {
     liste q;
     q=l;
     while(q!=NULL) {
     printf("Priorite:> %d",q->pri);
     printf("Valeur => %c",q->val); 
     q=q->suiv;
                       }
    }
    /*insert en queu */
    void emfiler(liste *l,int pe,char ve)
    {    liste e,q;
         creation(e,pe,ve);
         if (l==null)  l=e;
         else {
         q=l;
         while(q->suiv!=null) q=q->suiv;
         q->suiv=e;
                   }
    }
    /*supression de la tete*/
    void defiler(liste *l,int *pd,char *vd)
    {
     liste q;
     q=l;
     l=l->suiv;
     q->suiv=null;
     pd=q->pri;
     vd=q->val;
     free(q);
    }
    /*insertion en tete*/
    void empiler(liste *l,int pe,char ve)
    {
     liste e,q;
     creation(e,pe,ve);
     if (l=null)  l=e;
     else {
     e->suiv=l;
     l=e;
         }
    }
    /*suppression de la tete*/
    void depiler(liste *l,int *pd,char *vd)
    {    
         liste q;
         q=l;
         l=l->suiv;
         q->suiv=null;
         pd=q->pri;
         vd=q->val;
         free(q);
    }
    /*max pri*/
    void maxpri(liste l,int *pm,char *vm)
    {
     liste q,x;
     q=l;
     x=l;
     while(q!=null)  {
     if((q->pri)>(x->pri)) x=q;
     q=q->suiv;
               }
               pm=x->pri;
               vm=x->val;
     }
    /*defiler par priorite*/
    void defilerpri(liste *l,int *pd,char *vd)
    {    
         liste q,ls,t;
         char vs;
         int ps;
         ls=null;
         maxpri(l,pd,vd);
         while((l->pri!=pd)and(l->val!=vd)) {
         defiler(l,ps,vs);
         empiler(ls,ps,vs);
                                            }
    if((l->val=vd)and(l->pri=pd))  defiler(l,pd,vd);
    if (ls!=null) do  
    {
     depiler(ls,ps,vs);
     empiler(l,ps,vs);}
     while(ls!=null);
    }
    int main()
    {
    /*declaration des types et viables*/
    liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
     
    l=null;
    lp=null;
    choix='y';
    printfln(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
    while(choix!='n') {
    printf("Entrer la valeur(un caractere):");
    scanfln(vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
    }
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREES");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE");
    printf("\n");
    do{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }while(l<>null);
    affichage(lp);
    getchar();
    }

  17. #17
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonsoir,

    Alors:
    1./ Ligne 1, c'est #include et pas #inculde
    2./ Lignes 34, 37, 47, 57, 69, 80, 93, 100, 104, 115, 116, 140, c'est NULL et pas null.
    3./ Lignes 95 et 99, le mot clef and n'est pas reconnu, en C, c'est &&.
    4./ Ligne 100, le mot clef do n'a rien à faire après un if.
    5./ Ligne 104, boucle infinie si ls!=NULL (le programme risque de bloquer sur cette ligne).
    6./ Ligne 118, l'instruction printfln n'existe pas. printf("\n") ;
    7./ Ligne 122, l'instruction scanfln n'existe pas. scanf(&vale) ;
    8./ Ligne 140, le test <> n'est pas reconnu. Pour tester différent c'est !=.

    Dans les printf il y a possibilité d'ajouter le retour chariot à la fin de ta chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE\n") ;
    Corrige les erreurs, et donne nous les erreurs retournées par le compilateur.

    Bon week-end.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    j'ai corrigé quelques fautes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    #include<stdio.h>
    #include <stdlib.h>
    typedef struct element element;
    struct element
    {      int pri;
           char val;
           struct element *suiv;
    };
    typedef element *liste;
     
     
    /* Création d'un nouvel élément */
    void creation(liste *e, int pri, char val)
    {
        e = (liste*)malloc(sizeof(liste)) ;
        e->pri=pri ;
        e->val=val ;
    }
    /*affichage dune liste*/
    void affichage(liste l)
    {
     liste q;
     q=l;
     while(q!=NULL) {
     printf("Priorite:> %d",q->pri);
     printf("Valeur => %c",q->val); 
     q=q->suiv;
                       }
    }
    /*insert en queu */
    void emfiler(liste *l,int pe,char ve)
    {    liste e,q;
         creation(e,pe,ve);
         if (l==NULL)  l=e;
         else {
         q=l;
         while(q->suiv!=NULL) q=q->suiv;
         q->suiv=e;
                   }
    }
    /*supression de la tete*/
    void defiler(liste *l,int *pd,char *vd)
    {
     liste q;
     q=l;
     l=l->suiv;
     q->suiv=NULL;
     pd=q->pri;
     vd=q->val;
     free(q);
    }
    /*insertion en tete*/
    void empiler(liste *l,int pe,char ve)
    {
     liste e,q;
     creation(e,pe,ve);
     if (l=NULL)  l=e;
     else {
     e->suiv=l;
     l=e;
         }
    }
    /*suppression de la tete*/
    void depiler(liste *l,int *pd,char *vd)
    {    
         liste q;
         q=l;
         l=l->suiv;
         q->suiv=NULL;
         pd=q->pri;
         vd=q->val;
         free(q);
    }
    /*max pri*/
    void maxpri(liste l,int *pm,char *vm)
    {
     liste q,x;
     q=l;
     x=l;
     while(q!=NULL)  {
     if((q->pri)>(x->pri)) x=q;
     q=q->suiv;
               }
               pm=x->pri;
               vm=x->val;
     }
    /*defiler par priorite*/
    void defilerpri(liste *l,int *pd,char *vd)
    {    
         liste q,ls,t;
         char vs;
         int ps;
         ls=NULL;
         maxpri(l,pd,vd);
         while((l->pri!=pd)&&(l->val!=vd)) {
         defiler(l,ps,vs);
         empiler(ls,ps,vs);
                                            }
    if((l->val=vd)&&(l->pri=pd))  defiler(l,pd,vd);
    if (ls!=NULL){ 
    	do 
    	{
    	depiler(ls,ps,vs);
    	empiler(l,ps,vs);}
    	while(ls!=NULL);
    	}
    			}
    int main()
    {
    /*declaration des types et viables*/
    liste l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
     
    l=NULL;
    lp=NULL;
    choix='y';
    printf(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<");
    printf("\n");
    while(choix!='n') {
    printf("Entrer la valeur(un caractere):");
    scanf(&vale);
    printf("\n");
    printf("Entrer la priorite(un entier):");
    scanf(prio);
    emfiler(l,prio,vale);
    printf("\n");
    printf("Voulez vous ajoutez un element?: (y/n)");
    scanf(choix);
    }
    printf("\n");
    printf("LA LISTE DES ELEMENTS CREE\n");
    affichage(l);
    printf("\n");
    printf("LISTE DES ELEMENTS AVEC LA PRIORITE CROISSANTE\n");
     
    do{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }while(l!=NULL);
    affichage(lp);
    getchar();
    }
    et voila ce que le compelateur m'affiche comme erreurs
    ___________________________________________________
    Compilateur: Default compiler
    Exécution de gcc.exe...
    gcc.exe "C:\Users\2011\Desktop\test.c" -o "C:\Users\2011\Desktop\test.exe" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
    C:\Users\2011\Desktop\test.c: In function `creation':
    C:\Users\2011\Desktop\test.c:16: error: request for member `pri' in something not a structure or union
    C:\Users\2011\Desktop\test.c:17: error: request for member `val' in something not a structure or union

    C:\Users\2011\Desktop\test.c: In function `emfiler':
    C:\Users\2011\Desktop\test.c:33: warning: passing arg 1 of `creation' from incompatible pointer type
    C:\Users\2011\Desktop\test.c:34: warning: assignment from incompatible pointer type
    C:\Users\2011\Desktop\test.c:36: warning: assignment from incompatible pointer type
    C:\Users\2011\Desktop\test.c: In function `defiler':
    C:\Users\2011\Desktop\test.c:45: warning: assignment from incompatible pointer type
    C:\Users\2011\Desktop\test.c:46: error: request for member `suiv' in something not a structure or union
    C:\Users\2011\Desktop\test.c:48: warning: assignment makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:49: warning: assignment makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c: In function `empiler':

    C:\Users\2011\Desktop\test.c:56: warning: passing arg 1 of `creation' from incompatible pointer type
    C:\Users\2011\Desktop\test.c:57: warning: assignment from incompatible pointer type
    C:\Users\2011\Desktop\test.c:59: warning: assignment from incompatible pointer type

    C:\Users\2011\Desktop\test.c:60: warning: assignment from incompatible pointer type
    C:\Users\2011\Desktop\test.c: In function `depiler':
    C:\Users\2011\Desktop\test.c:67: warning: assignment from incompatible pointer type

    C:\Users\2011\Desktop\test.c:68: error: request for member `suiv' in something not a structure or union
    C:\Users\2011\Desktop\test.c:70: warning: assignment makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:71: warning: assignment makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c: In function `maxpri':
    C:\Users\2011\Desktop\test.c:84: warning: assignment makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:85: warning: assignment makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c: In function `defilerpri':
    C:\Users\2011\Desktop\test.c:94: warning: passing arg 1 of `maxpri' from incompatible pointer type
    C:\Users\2011\Desktop\test.c:95: error: request for member `pri' in something not a structure or union
    C:\Users\2011\Desktop\test.c:95: error: request for member `val' in something not a structure or union
    C:\Users\2011\Desktop\test.c:96: warning: passing arg 2 of `defiler' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:96: warning: passing arg 3 of `defiler' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:97: warning: passing arg 1 of `empiler' from incompatible pointer type

    C:\Users\2011\Desktop\test.c:99: error: request for member `val' in something not a structure or union
    C:\Users\2011\Desktop\test.c:99: error: request for member `pri' in something not a structure or union

    C:\Users\2011\Desktop\test.c:103: warning: passing arg 1 of `depiler' from incompatible pointer type
    C:\Users\2011\Desktop\test.c:103: warning: passing arg 2 of `depiler' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:103: warning: passing arg 3 of `depiler' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c: In function `main':
    C:\Users\2011\Desktop\test.c:127: warning: passing arg 1 of `scanf' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:128: warning: passing arg 1 of `emfiler' from incompatible pointer type

    C:\Users\2011\Desktop\test.c:131: warning: passing arg 1 of `scanf' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:140: warning: passing arg 1 of `defilerpri' from incompatible pointer type
    C:\Users\2011\Desktop\test.c:140: warning: passing arg 2 of `defilerpri' makes pointer from integer without a cast
    C:\Users\2011\Desktop\test.c:140: warning: passing arg 3 of `defilerpri' makes pointer from integer without a cast

    C:\Users\2011\Desktop\test.c:141: warning: passing arg 1 of `empiler' from incompatible pointer type

    Exécution terminée

  19. #19
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonsoir,

    Problème dans ta déclaration de ta structure. Il faut déclarer ta structure et ensuite définir ton typedef.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct element {
        int pri ;
        char val ;
        struct element *suiv ;
    } ;
     
    typedef struct element liste ;
    ou directement lors de la déclaration de la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct element {
        int pri ;
        char val ;
        struct element *suiv ;
    } liste ;
    Cette correction devrait t'enlever quelques erreurs.

    Bonne continuation.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    voila ,il y'on a plus d'erreurs dans le programme ..mais il y'a juste un petit problème au niveau de la boucle while que j'ai utilisé pour enfiler les éléments que et savoir s'il ya un autre élément a enfiler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    #include<stdio.h>
    #include <stdlib.h>
     
    struct element
    {      int pri;
           char val;
           struct element *suiv;
    };
    typedef struct element *filed;
     
     
    /* Création d'un nouvel élément */
    void creation(filed *e,int pri, char val)
    {
        *e=(filed)malloc(sizeof(filed)) ;
        filed t=*e;
        t->pri=pri;
        t->val=val;
        t->suiv=NULL;
    }
    /*afficher dune filed*/
    void afficher(filed l)
    {
     filed q;
     q=l;
     while(q!=NULL) {
     printf("Priorite:> %d",q->pri);
     printf("Valeur => %c",q->val); 
     q=q->suiv;
                       }
    }
    /*insert en queu */
    void emfiler(filed *l,int pe,char ve)
    {    filed e,q;
         creation(&e,pe,ve);
         if (*l==NULL)  *l=e;
         else {
         q=*l;
         while(q->suiv!=NULL) q=q->suiv;
         q->suiv=e;
                   }
    }
    /*supression de la tete*/
    void defiler(filed *l,int *pd,char *vd)
    {
     filed q,p;
     q=*l;
     p=*l;
     p=p->suiv;
     q->suiv=NULL;
     *pd=q->pri;
     *vd=q->val;
     free(q);
    }
    /*insertion en tete*/
    void empiler(filed *l,int pe,char ve)
    {
     filed e,q;
     creation(&e,pe,ve);
     if (l=NULL)  *l=e;
     else {
     e->suiv=*l;
     *l=e;
         }
    }
    /*suppression de la tete*/
    void depiler(filed *l,int *pd,char *vd)
    {
     filed q,p;
     q=*l;
     p=*l;
     p=p->suiv;
     q->suiv=NULL;
     *pd=q->pri;
     *vd=q->val;
     free(q);
    }
    /*max pri*/
    void maxpri(filed l,int *pm,char *vm)
    {
     filed q,x;
     q=l;
     x=l;
     while(q!=NULL)  {
     if((q->pri)>(x->pri)) x=q;
     q=q->suiv;
               }
               *pm=x->pri;
               *vm=x->val;
     }
    /*defiler par priorite*/
    void defilerpri(filed *l,int *pd,char *vd)
    {    
         filed q,ls,t,p,r;
         char vs;
         int ps;
         ls=NULL;
         p=*l;
         maxpri(*l,pd,vd);
         while((p->pri!=*pd)&&(p->val!=*vd)) {
         defiler(l,&ps,&vs);
         empiler(&ls,ps,vs);
         r=*l;                                   }
    if((r->val=vd)&&(r->pri=pd))  defiler(l,pd,vd);
    if (ls!=NULL){ 
    	do 
    	{
    	depiler(ls,ps,vs);
    	empiler(l,ps,vs);}
    	while(ls!=NULL);
    	}
    			}
    int main()
    {
    /*declaration des types et viables*/
    filed l,lp;
    char choix;
    int prio,dp;
    char vale,dv;
    /*programme principal*/
     
    l=NULL;
    lp=NULL;
    choix='y';
    printf(">L ELEMENT LE PLUS PRIORITAIRE EST CELUI QUI A LA PRIORITE LA PLUS SUPERIEUR<\n");
    printf("\n");
    while(choix!='n') {
    printf("Entrer la valeur(un caractere):\n");
    scanf("%c",&vale);
    printf("Entrer la priorite(un entier):\n");
    scanf("%d",&prio);
    emfiler(&l,prio,vale);
    printf("Voulez vous ajoutez un element?  (y/n)\n");
    scanf("%c",&choix);
    }
    printf("\n");
    printf("LA FILE DES ELEMENTS CREE\n");
    afficher(l);
    printf("\n");
    printf("LA FILE DES ELEMENTS AVEC LA PRIORITE CROISSANTE\n");
     
    do{
    defilerpri(l,dp,dv);
    empiler(lp,dp,dv);
    }while(l!=NULL);
    afficher(lp);
    getchar();
    }

Discussions similaires

  1. Transformer un code Pascal en algorithme simple et explication de la simulation
    Par nadirmabed dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 01/01/2015, 21h16
  2. Passer du Pascal à Delphi
    Par poppels dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2002, 21h07
  3. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo