Je souhaiterais faire un questionnaire à choix multiples, dont j'aimerais qu'il affiche la bonne réponse + 2 mauvaises, mais qu'il ne sorte jamais les 2 ou 3 mêmes réponses et qu'en plus je souhaiterais qu'il ne pose pas plusieurs fois la même question.
J'espère avoir été concis dans mes désidératas et je vous remercie tous d'avance.
[Resolu] QCM
[Resolu] QCM
Dernière modification par Micoute le sam. 22/juin/2013 19:00, modifié 3 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: QCM
Je partirais d'une structure de ce style
Code : Tout sélectionner
Structure Question
Actif.b ;Déja posé oui ou non
Question.s ;La question
Reponse.s[3] ;Trois reponses prossible
Indice.i ;Numéro de la réponse correcte
ReponseUtilisateur.i ;Réponse donnée par l'utilisateur
EndStructure
Global NewList QCM.Question()
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: QCM
Merci falsam, je ne m'attendais pas à une réponse aussi rapide et en plus on peut comparer les questions et les réponses !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: QCM
Voici mon code et j'aimerais l'améliorer, j'aimerais qu'il ne pause pas plusieurs fois la même question.
Je remercie d'avance chacun d'entre vous qui voudra bien m'aider.
Code : Tout sélectionner
Enumeration
#Fenetre_Question
#Fenetre_Resultat
EndEnumeration
Enumeration
#Police
#Police2
EndEnumeration
Enumeration
#Texte
#tNumero
#tReponse
#Bonne_Reponse
#Mauvaise_Reponse_1
#Mauvaise_Reponse_2
#Region
EndEnumeration
#NbDep = 95
#Nb_Questions = 40
Structure Question
Actif.b ;Déja posée oui ou non
Question.i ;La question
Reponse.i[3] ;Trois reponses prossiblee
Indice.i ;Numéro de la réponse correcte
ReponseUtilisateur.i ;Réponse donnée par l'utilisateur
EndStructure
Global NewList QCM.Question()
Global NewList Message$()
Global Dim Departement.s(2,#NbDep)
Global x, Compteur, Points, rep1$
Global Hasard, X1, X2, X3
Global Police = LoadFont(#Police, "Verdana", 11, #PB_Font_Bold)
Global Police2= LoadFont(#Police2, "Agnes" , 20, #PB_Font_Bold)
Procedure Lire_les_donnees()
For i = 1 To #NbDep
Read.s Departement(0,i)
Read.s Departement(1,i)
Read.s Departement(2,i)
Next
EndProcedure
Procedure Aide()
#fenetre_Aide = 0
#Image = 2
#Bouton_Aide_Ok = 3
UsePNGImageDecoder()
AddElement(Message$()) : Message$() = "Voici le principe:"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "Tu as une série de 40 questions."
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "On te propose 3 réponses possibles, pour trouver celle"
AddElement(Message$()) : Message$() = "qui correspond au département proposé, tu dois donc "
AddElement(Message$()) : Message$() = "cliquer sur le bon numéro pour donner la bonne réponse"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "On ne peut pas faire plus simple"
AddElement(Message$()) : Message$() = ""
AddElement(Message$()) : Message$() = "Je te souhaite un bon divertissement"
OpenWindow(#fenetre_Aide, 0, 0, 530, 350, "Aide", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
FirstElement(Message$())
For Index = 0 To ListSize(Message$())-1
TextGadget(100+index,60,10+Index*24,520,24,Message$())
SetGadgetFont(100+Index, FontID(#Police))
NextElement(Message$())
Next
CatchImage(#Image, ?iconeQuestion)
ImageGadget(#Image, 5,5,40,40, ImageID(#Image))
ButtonGadget(#Bouton_Aide_Ok, 245, 300, 40, 30, "Ok")
SetGadgetFont(#Bouton_Aide_Ok, FontID(#Police))
SetActiveGadget(#Bouton_Aide_Ok)
;- Boucle d'évenements Aide
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Bouton_Aide_Ok
CloseWindow(#fenetre_Aide)
Sortir = 1
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #fenetre_Aide
CloseWindow(#fenetre_Aide)
Sortir = 1
Break
EndSelect
EndSelect
Until Sortir = 1
EndProcedure
Procedure Bonne_reponse()
MessageRequester("Cool", "Trop bien !", #MB_OK)
EndProcedure
Procedure Mauvaise_reponse()
MessageRequester("Désolé", "la réponse, c'était le "+Str(Val(Departement(0,QCM()\Reponse[0])))+Chr(10)+"Retiens-le pour la pochaine fois !", #MB_OK)
EndProcedure
Procedure.s Notation()
Protected Texte.s
Points/2
Select Points
Case 0
Texte = "Tu n'as répondu à aucune question"
Case 1 To 3
Texte = " nul"
Case 4 To 8
Texte = " médiocre"
Case 9 To 12
Texte = " moyen"
Case 13 To 15
Texte = " assez bien"
Case 16 To 18
Texte = " très bien"
Case 19 To 20
Texte = " excellent"
EndSelect
;Mon MessageRequester
OpenWindow(#Fenetre_Resultat, 0, 0, 300, 120, "Bilan", #PB_Window3D_Borderless | #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
TextGadget(#tReponse, 10,10, 280, 280, "Ta note est de "+Str(Points)+"/20"+Chr(10)+Chr(10)+ "Résultat : "+Texte, #PB_Text_Center)
SetGadgetFont(#tReponse, FontID(#Police2))
CloseWindow(#Fenetre_Question)
Repeat
Until WaitWindowEvent()= #PB_Event_CloseWindow
EndProcedure
Procedure placerBoutons()
Hasard = Random(3, 1)
Select Hasard
Case 1
X1 = 10
X2 = 140
X3 = 280
Case 2
X1 = 140
X2 = 280
X3 = 10
Case 3
X1 = 280
X2 = 140
X3 = 10
EndSelect
EndProcedure
Procedure Questionnaire()
OpenWindow(#Fenetre_Question, 30,30, 340, 150, "Question "+Str(Compteur), #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget )
StickyWindow(#Fenetre_Question, 1)
SetWindowColor(#Fenetre_Question,$D0FFD0)
TextGadget(#Texte, 10, 10, 300, 20, "Quel est le numéro du département ", #PB_Text_Center)
TextGadget(#tNumero, 10, 40, 300, 20, Left(Departement(1,QCM()\Question),1)+LCase(Mid(Departement(1,QCM()\Question),2)), #PB_Text_Center)
ButtonGadget(#Bonne_Reponse, X1, 70, 40, 30, Departement(0, QCM()\Reponse[0]))
ButtonGadget(#Mauvaise_Reponse_1, X2, 70, 40, 30, Departement(0, QCM()\Reponse[1]))
ButtonGadget(#Mauvaise_Reponse_2, X3, 70, 40, 30, Departement(0, QCM()\Reponse[2]))
TextGadget(#Region, 10, 110, 300, 20, "Région : " + Departement(2, QCM()\Reponse[0]), #PB_Text_Center)
;Définir les couleurs des gadgets
SetGadgetColor(#Texte, #PB_Gadget_BackColor, $D0FFD0)
SetGadgetColor(#tNumero, #PB_Gadget_BackColor, $D0FFD0)
SetGadgetColor(#Region, #PB_Gadget_BackColor, $D0FFD0)
;Définir les polices
SetGadgetFont(#Texte, FontID(#Police))
SetGadgetFont(#tNumero, FontID(#Police))
SetGadgetFont(#Bonne_Reponse, FontID(#Police2))
SetGadgetFont(#Mauvaise_Reponse_1, FontID(#Police2))
SetGadgetFont(#Mauvaise_Reponse_2, FontID(#Police2))
SetGadgetFont(#Region, FontID(#Police))
;{- Boucle d'évenements
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Bonne_Reponse
grepondu$="bien"
QCM()\ReponseUtilisateur = QCM()\Reponse[0]
Case #Mauvaise_Reponse_1
grepondu$ = "faux"
QCM()\ReponseUtilisateur = QCM()\Reponse[1]
Case #Mauvaise_Reponse_2
grepondu$ = "faux"
QCM()\ReponseUtilisateur = QCM()\Reponse[2]
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_Question
CloseWindow(#Fenetre_Question)
End
EndSelect
EndSelect
Until grepondu$="bien" Or grepondu$ = "faux"
;}
If grepondu$ = "bien"
rep1$=GetGadgetText(#Bonne_Reponse)
If Val(rep1$)=Val(Departement(0, QCM()\Reponse[0]))
Bonne_reponse()
Points+1
EndIf
EndIf
If grepondu$ = "faux"
Mauvaise_reponse()
EndIf
If Points=0
MessageRequester("Pfff...", "Essaie de faire mieux." + Chr(10) + "Ce n'est quand même pas si dur.", #MB_ICONQUESTION)
Else
If Points < 2
Texte$ = Str(Points)+" bonne réponse"
Else
Texte$ = Str(Points)+" bonnes réponses"
EndIf
EndIf
EndProcedure
;Début du programme
Select MessageRequester("Question", "Veux-tu tester tes capacités dans ce questionnaire ?", #PB_MessageRequester_YesNo)
Case #IDYES
Resultat = MessageRequester("","Désires-tu le mode d'emploi ?", #MB_YESNO)
If Resultat = 6
Aide()
EndIf
Lire_les_donnees()
;-debut du Questionnaire
For Compteur = 1 To #Nb_Questions
AddElement(QCM())
QCM()\Reponse[0] = Random(#NbDep,1)
QCM()\Reponse[1] = Random(#NbDep,1)
If QCM()\Reponse[1] = QCM()\Reponse[0]
QCM()\Reponse[1] = Random(#NbDep,1)
EndIf
QCM()\Reponse[2] = Random(#NbDep,1)
If QCM()\Reponse[2] = QCM()\Reponse[0] Or QCM()\Reponse[2] = QCM()\Reponse[1]
QCM()\Reponse[2] = Random(#NbDep,1)
EndIf
QCM()\Question = QCM()\Reponse[0]
placerBoutons()
Questionnaire()
Next
Notation()
Case #IDNO
MessageRequester("A bientôt","Reviens quand même tester tes compétences plus tard!")
End
EndSelect
Repeat
Evenement = WaitWindowEvent ()
Until Evenement = #PB_Event_CloseWindow ; si on appuie sur la croix, on ferme le programme
End ; Fin du programme
DataSection
iconeQuestion:
IncludeBinary "D:\Programmation\Prg perso\Gfx\Icones_MRP\iconeQuestion.png"
Data.s "01", "AIN", "Rhône-Alpes", "02", "AISNE", "Picardie", "03", "ALLIER", "Auvergne", "04", "ALPES DE HAUTE PROVENCE ", "Provence-Alpes-Côte-d'Azur"
Data.s "05", "HAUTES ALPES", "Provence-Alpes-Côte-d'Azur", "06", "ALPES MARITIMES", "Provence-Alpes-Côte-d'Azur", "07", "ARDECHE", "Rhône-Alpes"
Data.s "08", "ARDENNES", "Champagne-Ardenne", "09", "ARIEGE", "Midi-Pyrénées", "10", "AUBE", "Champagne-Ardenne" , "11", "AUDE", "Languedoc-Roussillon"
Data.s "12", "AVEYRON", "Midi-Pyrénées", "13", "BOUCHES DU RHONE", "Provence-Alpes-Côte-d'Azur", "14", "CALVADOS", "Basse-Normandie"
Data.s "15", "CANTAL", "Auvergne", "16", "CHARENTE", "Poitou-Charentes", "17", "CHARENTE MARITIME", "Poitou-Charentes", "18", "CHER", "Centre"
Data.s "19", "CORREZE", "Limousin", "20", "CORSE", "Corse" , "21", "COTE D'OR", "Bourgogne", "22", "COTES D'ARMOR", "Bretagne"
Data.s "23", "CREUSE", "Limousin", "24", "DORDOGNE", "Aquitaine", "25", "DOUBS", "Franche-Comté", "26", "DROME", "Rhône-Alpes"
Data.s "27", "EURE", "Haute-Normandie", "28", "EURE ET LOIR", "Centre", "29", "FINISTERE", "Bretagne", "30", "GARD", "Languedoc-Roussillon"
Data.s "31", "HAUTE GARONNE", "Midi-Pyrénées", "32", "GERS", "Midi-Pyrénées", "33", "GIRONDE", "Aquitaine", "34", "HERAULT", "Languedoc-Roussillon"
Data.s"35", "ILLE ET VILAINE", "Bretagne", "36", "INDRE", "Centre", "37", "INDRE ET LOIRE", "Centre", "38", "ISERE", "Rhône-Alpes"
Data.s "39", "JURA", "Franche-Comté", "40", "LANDES", "Aquitaine", "41", "LOIR ET CHER", "Centre", "42", "LOIRE", "Rhône-Alpes"
Data.s "43", "HAUTE LOIRE", "Auvergne", "44", "LOIRE ATLANTIQUE", "Pays-de-la-Loire", "45", "LOIRET", "Centre", "46", "LOT", "Midi-Pyrénées"
Data.s "47", "LOT ET GARONNE", "Aquitaine", "48", "LOZERE", "Languedoc-Roussillon", "49", "MAINE ET LOIRE", "Pays-de-la-Loire"
Data.s "50", "MANCHE", "Basse-Normandie", "51", "MARNE", "Champagne-Ardenne", "52", "HAUTE MARNE", "Champagne-Ardenne"
Data.s "53", "MAYENNE", "Pays-de-la-Loire", "54", "MEURTHE ET MOSELLE", "Lorraine", "55", "MEUSE", "Lorraine", "56", "MORBIHAN", "Bretagne"
Data.s "57", "MOSELLE", "Lorraine", "58", "NIEVRE", "Bourgogne", "59", "NORD", "Nord-Pas-de-Calais", "60", "OISE", "Picardie"
Data.s "61", "ORNE", "Basse-Normandie", "62", "PAS DE CALAIS", "Nord-Pas-de-Calais", "63", "PUY DE DOME", "Auvergne"
Data.s "64", "PYRENEES ATLANTIQUES", "Aquitaine", "65", "HAUTES PYRENEES", "Midi-Pyrénées", "66","PYRENEES ORIENTALES", "Languedoc-Roussillon"
Data.s "67", "BAS RHIN", "Alsace", "68", "HAUT RHIN", "Alsace", "69", "RHONE", "Rhône-Alpes", "70", "HAUTE SAONE", "Franche-Comté"
Data.s "71", "SAONE ET LOIRE", "Bourgogne", "72", "SARTHE", "Pays-de-la-Loire", "73", "SAVOIE", "Rhône-Alpes", "74", "HAUTE SAVOIE", "Rhône-Alpes"
Data.s "75", "PARIS", "Île-de-France", "76", "SEINE MARITIME", "Haute-Normandie", "77", "SEINE ET MARNE", "Île-de-France", "78", "YVELINES", "Île-de-France"
Data.s "79", "DEUX SEVRES", "Poitou-Charentes", "80", "SOMME", "Picardie", "81", "TARN", "Midi-Pyrénées", "82", "TARN ET GARONNE", "Midi-Pyrénées"
Data.s "83", "VAR", "Provence-Alpes-Côte-d'Azur", "84", "VAUCLUSE", "Provence-Alpes-Côte-d'Azur", "85", "VENDEE", "Pays-de-la-Loire"
Data.s "86", "VIENNE", "Poitou-Charentes", "87", "HAUTE VIENNE", "Limousin", "88", "VOSGES", "Lorraine", "89", "YONNE", "Bourgogne"
Data.s "90", "TERRITOIRE DE BELFORT", "Franche-Comté", "91", "ESSONNE", "Île-de-France", "92", "HAUTS DE SEINE", "Île-de-France"
Data.s "93", "SEINE SAINT DENIS", "Île-de-France", "94", "VAL DE MARNE", "Île-de-France", "95", "VAL D'OISE", "Île-de-France"
EndDataSection
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: QCM
Code : Tout sélectionner
DeleteElement(Liste() [, Options])
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: QCM
Pourquoi tu n'utilises pas le boolean que tu as mis en place ?Structure Question
[b]Actif.b ;Déja posée oui ou non[/b]
Question.i ;La question
Reponse.i[3] ;Trois reponses prossiblee
Indice.i ;Numéro de la réponse correcte
ReponseUtilisateur.i ;Réponse donnée par l'utilisateur
EndStructure

Re: QCM
OK, c'est bon, merci à tous !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !