Aller au contenu

Conditions, QCM, boucle


mateus

Messages recommandés

Bonjour à tous et toutes , je souhaiterai traduite dans mon programme ceci :(trame)

 

 

(setq interrupteur 0

 

Poser la question : Est-ce que l'implantation des candélabres vous convient?

 

Si non

Que souhaitez vous modifier?

 

cas1 Alignement

cas2 Décalage

cas3 PremierCandelabre

cas4 Entraxe

cas5 Ecart

 

 

Si c'est le cas "1" on désactive l'intérupteur pour tous les cas sauf le cas "1"

Si c'est le cas "2" on désactive l'intérupteur pour tous les cas sauf le cas "2"

Si c'est le cas "3" on désactive l'intérupteur pour tous les cas sauf le cas "3"

Si c'est le cas "4" on désactive l'intérupteur pour tous les cas sauf le cas "4"

Si c'est le cas "5" on désactive l'intérupteur pour tous les cas sauf le cas "5"

 

 

 

 

 

Si oui

setq ( = interrupteur 1)

 

 

 

 

Tous mes cas sont des fonctions crées , je voudrais tous les lancer au démarrage de mon programme de façon à ce que le programme se déroule une première fois( d'où l'interrupteur à 0) Ensuite je souhaiterai poser ces questions (ci-dessous) et si jamais l'utilisateur indique qu'il souhaiterai modifier un des cas on reviendrai au cas voulu si l'utilisateur est satisfait alors interrupteur à 1 et on continue le programme.

 

Ps: Tous les cas seraient dans une boucle "while"

 

 

Voilà ce que j'ai pensé à faire, mais pour l'instant rien ne marche bien sur :/ :

 

 

(defun c:MAIN ();Début de la fonction principale

(setq interupteur 0)
(setq =  cas1 0
  cas1 0
  cas2 0
  cas3 0
  cas4 0
  cas5 0
 
)
 

(while(= interupteur 0)
  

 	if( = cas1 0)
  		( 
			  (setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable
			  
		)
  	if( = cas2 0)
	  	(	  
			  (c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours"
		)

  	if( = cas3 0)
  		(
			  (setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre "))	  
			  (setq projectionCandelabre (c:PROJECTION premierCandelabre))

		)
  
  	if( = cas4 0)
  		(
			  (setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres "))
		)
  
  	if( = cas5 0)
  		(
			  (setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut
		)

  
  	
  	


);fin de la fonction principal 



(setq question (strcase(getstring "\n L'implantation vous est t-elle satisfaisante ?  [Oui / Non] <Non> ")))


  (cond
      ((or(= choix "NON") (= choix "N") (= choix ""))

       
	      (progn
	       	(setq question2 (strcase(getstring "\n Que souhaitez vous modifier? [Alignement / Décalage / PremierCandélabre / Entraxe / Ecart] <Alignement> ")))
	      )
      )

      ((or(= choix "OUI") (= choix "O"))

(setq interrupteur 1)
	       
	       )

      )

  

   )





 

 

 

Voilà je souhaiterai avoir des explications si possible en deux temps. Les premières sur la boucle "while" qui ne fonctionne pas , et les autres sur mes questions ( la première question m'est posée et met en variable la réponse "oui" ou "non" mais ne poursuit pas avec les conditions...

 

 

Merci beaucoup :) et bon week end

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous je reviens à vous car j'ai réparé ma boucle ( voir ci-dessous)

 



(defun c:MAIN ();Fonction principale

(setq interupteur 0)
(setq cas1 0
     cas2 0
     cas3 0
     cas4 0
     cas5 0


)
 

(while(= interupteur 0)
  

 	(if(= cas1 0)
		(setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable
			  
	)
  
  	(if( = cas2 0)	  
		(c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours"
	)	

  
  	(if( = cas3 0)
		(setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre "))	  
		(setq projectionCandelabre (c:PROJECTION premierCandelabre))
	)

		
  
  	(if( = cas4 0)
		(setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres "))
		
        )

  
  	(if( = cas5 0)
	  	(setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut

	)
		

  
  	
 	
  	;(c:DROITE projectionCandelabre entraxeCandelabre decalageCandelabre ) ;Trace les droites pour l'assistance. stoker tout les nom des bloc inserer ds une liste.

)





)


 

Dans cette boucle il me reste deux choses à réaliser.

 

La première : les questions qui permettront de voir si l'utilisateur est satisfait ou pas

La deuxième : la fonction tracé du dessin (mis en suspens voir ci-dessus)

 

 

Je souhaiterai procéder une nouvelle fois par étape et commencer par résoudre le problème au niveau des questions. Si quelqu'un a une idée. En attendant je m'y remet :)

 

Merci et bon week end :)

Lien vers le commentaire
Partager sur d’autres sites

Voici mon dernier code pour mes questions mais ça ne fonctionne toujours pas :unsure:

 

 


(defun c:QUEST2 ()
 




	       (setq question2 (strcase(getstring "\n Que souhaitez vous modifier? [Alignement / Décalage / PremierCandélabre / Entraxe / Ecart] <Alignement> ")))
	      
      
  (cond


		       ((or(= choix "Alignement") (= choix "A") (= choix ""))

		       
				(setq cas1 1
				      cas2 0
				      cas3 0
				      cas4 0
				      cas5 0
				 
				)



			
		      )



		      ((or(= choix "Décalage") (= choix "D"))

		       
				(setq cas1 0
				      cas2 1
				      cas3 0
				      cas4 0
				      cas5 0
				 
				)



			
		      )


      		      ((or(= choix "PremierCandelabre") (= choix "P"))

		       
				(setq cas1 0
				      cas2 0
				      cas3 1
				      cas4 0
				      cas5 0
				 
				)



			
		      )



      		      ((or(= choix "Entraxe") (= choix "EN"))

		       
				(setq cas1 0
				      cas2 0
				      cas3 0
				      cas4 1
				      cas5 0
				 
				)



			
		      )




            	      ((or(= choix "Ecart") (= choix "EC"))

		       
				(setq cas1 0
				      cas2 0
				      cas3 0
				      cas4 0
				      cas5 1
				 
				)



			
		      )


      			


      



      

     		    ((or(= choix "OUI") (= choix "O"))


	     	    (setq interrupteur 1)
      		    )




    )

)	  









Lien vers le commentaire
Partager sur d’autres sites

coucou

 

dans un premier temps il faudrait revoir la mise en page pour faciliter la lecture

dans un deuxième temps, je pense que la solution est d'utiliser COND en lieu et place de IF

 

 

ensuite il faudra passer au DCL avec des boutons radio, c'est plus simple pour les utilisateurs, mais c'est une autre étape.

 

je ne suis pas bien certain d'avoir compris mais tu veux vérifier une condition donc COND ...

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Merci Didier pour ta réponse En fait mon objectif est de lancer le programme et une fois lancé, dans une boucle demander à l'utilisateur est ce que l'implantation te convient? Si oui on continue le programme si non à quelle étape veux tu revenir? A partir de là, plusieurs choix s'offre à lui les 5 étapes que l'on peut voir sur mon dernier post (qui sont des fonctions). Exemple :

 

 

Est ce que l'implantation vous convient?

 

Rép: Non

 

Sur qu'elle étape voulez vous revenir?

1- Alignement

2-Décalage

3-PremierCandélabre

4-Entraxe

5-Ecart

 

Rép: Décalage

 

Par conséquent revenir à la fonction 2 en effaçant le tracé du programme précédent.

 

Voilà j'esprèe que je suis assez clair. Pour les boites de dialogues effectivement, ça serait une étape intéressante pour l'utilisateur que je ferai après, je préfère m'attarder dans un premier temps à la réalisation du programe "brut".

 

 

Voici ci dessous : mon dernier code :

 

 



(defun c:questions ( / ans )
   (initget "Yes No")
   (if (/= "Yes" (getkword "\nEtes vous satisfait de l'implantation des luminaires? [Yes/No] <No>: "))
       (while
           (progn (initget "Alignement Décalage PremierCandélabre Entraxe Ecart")
               (setq ans (getkword "\nChange [Alignement/Décalage/PremierCandélabre/Entraxe/Ecart] <Accept>: "))
           )
           (cond
               (   (= ans "Alignement")
                   (ALIGN)
               )
	
               (   (= ans "Décalage")
                   (DECAL_RESEAU alignementEncours)
               )
	
               (   (= ans "PremierCandélabre")
                   ((setq premierCandelabre (getpoint"\n Cliquez sur le premier candélabre "))
	           projectionCandelabre (c:PROJECTION premierCandelabre))
               )


	
               (   (= ans "Entraxe")
                   ((setq entraxeCandelabre (getdist"\ Entraxe des candélabres? ")))

	)
	

	
               (  (= ans "Ecart")
                  ((setq decalageCandelabre(getdist"\ Indiquez le décalage des candélabres ")))
               )


  
           )
      )
  )
   (princ "\nPoursuite du programme...")
   (princ)

)





 

 

J'ai pas encore tester entièrement, mais d'après un premier aperçu, le programme se lance et une fois les étapes passées ( les questions sont bien posées puis redémarre à l'étape choisi par l'utilisateur

 

 

 

Bonne soirée à tous ! :)

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité