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 :

Traduction script Python vers du langage C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Traduction script Python vers du langage C
    Bonjour actuellement en L1 Info j'aurais besoin d'aide sur un projet en cours mais je ne comprend pas du tout ce que le prof attend de nous , il s'agit de programmez le jeu rush hour en C.Pouvez-vous m'aidez s'il vous plait.J'ai un code en python qui me sert de modèle mais je n'arrive pas a le traduire en C.
    Voici l'enoncé:

    Il arrive que les carrefours soient saturés. Dans ce cas il faut réussir à débloquer la situation. Le principe du jeu est simple : des véhicules sont bloqués à un carrefour, ils ne peuvent que avancer ou reculer d'une case (plusieurs fois si nécessaire). L'un de ces véhicules doit traverser.
    Exemple de situation initiale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ---------------------------
    |            EE     DDDD  |
    |            EE     DDDD  |
    |            EE   BBBBBBBB|
    |            EE   BBBBBBBB|
    |VVVV                   CC S
    |VVVV                   CC S
    |            FF         CC|
    |            FF         CC|
    |            FF   AAAAAAAA|
    |            FF   AAAAAAAA|
    ---------------------------
    Notons que les véhicules V, D, B et A avancent horizontalement, les autres verticalement.
    Il faut que le véhicule V sorte par la sortie S. Que devons-nous faire ?

    Deuxième exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ---------------------------
    |              EE   DDDD  |
    |              EE   DDDD  |
    |              EE BBBBBBBB|
    |              EE BBBBBBBB|
    |VVVV                   CC S
    |VVVV                   CC S
    |      IIIIIIIIIII      CC|
    |GG HH IIIIIIIIIII      CC|
    |GG HH        FF  AAAAAAAA|
    |GG HH        FF  AAAAAAAA|
    ---------------------------
    Il faut que le véhicule V sorte par la sortie S. Que devons-nous faire ?

    Votre programme doit pouvoir lire une position initiale et trouver la suite de mouvements à faire pour résoudre le problème. La position initiale doit pouvoir être donnée dans un fichier.


    voici le code en python:

    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
     
    import sys
    sys.setrecursionlimit(500)
    import copy
    CF=[]
    position=[]
    SOL=[]
    Tab=[]
    print("Nombre de vehicules, rouge compris:")
    N=int(input())
    print("Nombre de vehicules verticaux:")
    n=int(input())
    print("position et longueur(x,y,l) des vehicules horizontaux, rouge en premier")
    for i in range(N-n):
        print(i+1)
        x=int(input("x: "))
        y=int(input("y: "))
        l=int(input("l: "))
        CF.append((True,y,l))
        position.append(x)
        print("position et longueur(x,y,l) des vehicules verticaux")
        for i in range(n):
            print(i+N-n+1)
            x=int(input("x: "))
            y=int(input("y: "))
            l=int(input("l: "))
            CF.append((False,x,l))
            position.append(y)
            print("nombre de coups:")
            maxirec=int(input())
            lm=1
            C=[]
            for i in range(len(CF)):
                lm=lm*(7-CF[i][2])
                C.append(6-CF[i][2])
                Tab=[0]*lm
                Tab[f2(pos)]=1
                rec(position,N,[],1)
                H=p(SOL)
                H=[position]+H
                print(len(H),"mouvements")
                for i in range(len(H)-1):
                    for j in range(N):
                        a= H[i][j]
                        b= H[i+1][j]
                        if a!=b:
                            sens = "y"
                            c,d=CF[j][1],a
                            if CF[j][0]:
                                sens = "x"
                                c,d=d,c
                                print("vehicule n.",j+1,(c,d),":",sens,"=",a,"->",b)
                                print("vehicule n.",1,(H[len(H)-1][0],2),":","x","=",H[len(H)-1][0],"->","sortie")
     
                                def fonction ( n, position):
                                    vehicule = CF[n]
                                    x=vehicule[1]
                                    y= position[n]
                                    l=vehicule[2]
                                    sens = vehicule[0]
                                    bornes=[0,6-l]
                                    for i in range(len(position)):
                                        W=CF[i]
                                        z=position[i]
                                        if i!=n and sens==W[0] and x==W[1]:
                                            if z<y:
                                                bornes[0]=max(bornes[0],W[2]+z)
                                                if z>y:
                                                    bornes[1]=min(bornes[1],z-l)
                                                    if sens!=W[0] and z<=x and x<=z+W[2]-1:
                                                        if W[1]<y:
                                                            bornes[0]=max(bornes[0],W[1]+1)
                                                            if W[1]>y:
                                                                bornes[1]=min(bornes[1],W[1]-l)
                                                                return [i for i in range(bornes[0],bornes[1]+1) if i!=y]
     
                                                            def f2(pos):
                                                                S=0
                                                                p=1
                                                                for i in range(len(pos)):
                                                                    S+=pos[i]*p
                                                                    p=p*(C[i]+1)
                                                                    return S
     
                                                                def rec(pos,lng,mvts,k):
                                                                    H=fonction(0,pos)
                                                                    if 4 in H :
                                                                        SOL.append(mvts)
                                                                    else:
                                                                        for n in range(lng):
                                                                            K=fonction(n,pos)
                                                                            for i in K:
                                                                                J=copy.copy(pos)
                                                                                J[n]=i
                                                                                d=f2(J)
                                                                                ncoup=Tab[d]
                                                                                if (ncoup==0 or k<ncoup) and k<maxirec :
                                                                                    Tab[d]=k
                                                                                    M=copy.copy(mvts)
                                                                                    M.append(J)
                                                                                    rec(J,lng,M,k+1)
     
                                                                                    def p(L):
                                                                                        G=L[0]
                                                                                        m=len(G)
                                                                                        for h in L:
                                                                                            if len(h)<m:
                                                                                                m=len(h)
                                                                                                G=h
                                                                                                return G

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Etant donné qu'on ne fait pas les devoirs, où en es-tu rendu et où bloques-tu ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Etant donné qu'on ne fait pas les devoirs, où en es-tu rendu et où bloques-tu ?
    Je suis bloqué dans la compréhension du sujet même , car je pensais juste a mettre une bonne série de printf un peu partout mais je ne pense pas que sa va répondre au sujet, et j'ai essayé de traduire le code en C mais je ne connais pas encore tout le langage ,on ne l'a entamé que depuis 1 mois et encore. C'est pour cela j'aurais besoin d'aide,d'avis pour savoir dans quel direction avancé et éviter du hors sujet.

  4. #4
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Spartakus_09 Voir le message
    Notons que les véhicules V, D, B et A avancent horizontalement, les autres verticalement.
    Et les véhicules C ; ils avancent comment ?
    Non parce que là tout est bloqué ....
    Est ce que les I sont aussi des véhicules ?
    Que sont les véhicules rouges ??

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    C'est quoi ce code Python ???

    @Spartakus_09 : on te l'a donné comme ça ? Indenté et organisé comme ça ? En l'état, le code ne fonctionne pas. Autour de la ligne 40, il y a des appels à des fonctions qui sont définies plus bas. Et comme elles sont indentées de toute façon rien ne va...

    Inutile de vouloir traduire un code comme ceci. Il faut d'abord le mettre au clair.... Ou le jeter et utiliser uniquement l'énoncé.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 629
    Points : 30 859
    Points
    30 859
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Bktero Voir le message
    Et comme elles sont indentées de toute façon rien ne va...
    Accessoirement, en Python, il est autorisé de définir une fonction dans une autre. Donc fatalement la sous-fonction sera indentée.
    Mais effectivement la sous-fonction soit avoir été définie avant son appel.

    Citation Envoyé par Bktero Voir le message
    Inutile de vouloir traduire un code comme ceci. Il faut d'abord le mettre au clair.... Ou le jeter et utiliser uniquement l'énoncé.
    Déjà moi je pige pas un truc: le PO nous propose un code Python sensé répondre au problème (je l'ai pas exécuté) tout en indiquant qu'il doit être traduit en C (pourquoi faire si le code Python répond au problème ?) et en indiquant aussi qu'il ne connait pas ce langage. Fatalement il y a un certain blocage dans toutes ces directives...

    De plus, autant convertir du C en Python est relativement aisé, autant faire l'inverse devient vite assez complexe. Rien que pour traduire a=range(10); a.extend(range(11, 20)) il faut écrire 50 lignes de C...

    PS: c'est vrai que ce code Python est assez pourri. Au fur et à mesure que je le faisais défiler, il se décalait de plus en plus vers la droite et je me demandais "mais quand est-ce qu'on finit ces blocs intermédiaires et qu'on revient au principal"... Et tout d'un coup plus rien.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Traduction de Python vers PhP
    Par rambc dans le forum Général Python
    Réponses: 0
    Dernier message: 08/06/2009, 20h47
  2. Réponses: 7
    Dernier message: 18/04/2008, 21h07
  3. Sauter vers le mode interactif depuis un script Python
    Par bahamut00 dans le forum Général Python
    Réponses: 5
    Dernier message: 21/07/2006, 17h33
  4. Débutant : s'orienter vers quel langage ?
    Par easyman dans le forum Débuter
    Réponses: 41
    Dernier message: 14/11/2005, 20h14
  5. Réponses: 3
    Dernier message: 05/04/2005, 15h26

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