FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
SUPER MINI LOGO Emptypar jjn4 Aujourd'hui à 17:49

» select intégrés [résolu]
SUPER MINI LOGO Emptypar jjn4 Aujourd'hui à 17:00

» number_mouse_up
SUPER MINI LOGO Emptypar jjn4 Aujourd'hui à 11:59

» Aide de PANORAMIC
SUPER MINI LOGO Emptypar jjn4 Aujourd'hui à 11:16

» trop de fichiers en cours
SUPER MINI LOGO Emptypar lepetitmarocain Aujourd'hui à 10:43

» Je teste PANORAMIC V 1 beta 1
SUPER MINI LOGO Emptypar papydall Aujourd'hui à 4:17

» bouton dans autre form que 0
SUPER MINI LOGO Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
SUPER MINI LOGO Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
SUPER MINI LOGO Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
SUPER MINI LOGO Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
SUPER MINI LOGO Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
SUPER MINI LOGO Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
SUPER MINI LOGO Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
SUPER MINI LOGO Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
SUPER MINI LOGO Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
Voir le deal

 

 SUPER MINI LOGO

Aller en bas 
5 participants
AuteurMessage
papydall

papydall


Nombre de messages : 7006
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

SUPER MINI LOGO Empty
MessageSujet: SUPER MINI LOGO   SUPER MINI LOGO EmptyDim 10 Juin 2012 - 18:07

Panoramiciens de tous les continents, salut.

Le langage LOGO, vous connaissez ?
Sur le plan informatique, Logo est un langage de programmation orientée objet réflexif.
Plus lisible que le Lisp, il en est une adaptation, ce qui lui a valu le surnom de « Lisp sans parenthèses ».
Essentiellement connu pour la fameuse tortue graphique, mais est également capable de manipuler des listes, des fichiers et des entrées/sorties,... ce qui en fait un langage adapté à l'approche des concepts de l'algorithmique.

Je vous propose SUPER_MINI_LOGO : un petit interpréteur LOGO, entièrement écrit en PANORAMIC.
Il s'agit ici simplement d'instructions de dessin. Impossible donc, d'afficher du texte ou de créer des procédures récursives. Mais ça permet malgré tout de créer de petits programmes graphiques et d'initier les petits (et même les grands) à LOGO et de là à la programmation.

SUPER_MINI_LOGO m’a pris beaucoup de temps et il comporte encore quelques bugs mais je n’ai plus envi de m’y replonger.
Tel qu’il est, il permet de faire des belles choses. Le code est bien documenté par des lignes REM et il comporte une aide pour expliquer son utilisation.
Lisez donc l’aide avant d’essayer de programmer en logo.

Code:

' ******************************************************************************
'
'          S U P E R  M I N I  L O G O
'
'                    Par Papydall
'
' ******************************************************************************


' Pour démontrer les possibilités de ce programme, voici quelques exemples
' des procedures réalisables que vous pouvez  copier/coller et exécuter

' **************************************
' POUR MAISON
'    REPETE 4 [ AV 150 TD 90 ]
'    TD 90 AV 50 TG 90
'    REPETE 2 [ AV 70 TD 90 AV 50 TD 90 ]
'    TG 90 AV 50 TD 90 AV 150 TD 30
'    REPETE 3 [ AV 150 TD 120 ]
'    TD 60 AV 20  TG 90 AV 1 LC AV 35 BC
'    AV 55 TD 90 AV 20 TD 90 AV 20
' FIN
' ***********************************

' *************************************

' POUR SUPERCUBE
'  INIT LC
'  FPOS  -30 150  BC FPOS  -150 150  FPOS  -90 210  FPOS  30 210  FPOS  -30 150  FPOS  -30 -210
'  FPOS  30 -150  FPOS  30 -90  FPOS  -30 -90  FPOS  90 -90  FPOS  90 30  FPOS  -270 30  FPOS  -270  -90
'  FPOS  -210 -90  FPOS  -210 -30  FPOS  -90 -30  FPOS  -90 -150  FPOS  -210 -150  FPOS  -210 -30  FPOS  -150 30
'  FPOS  -30 30  FPOS  -90 -30  FPOS  90 150  FPOS  30 150  FPOS  30 210  FPOS  30 90  FPOS  90 90  FPOS  90 150
'  FPOS  90 90  FPOS  150 90  FPOS  150 -30  FPOS  90 -90  FPOS  90 30  FPOS  150 90  LC FPOS  -150 30  BC
'  FPOS  -150 150  FPOS  -150 90  FPOS  -210 90  FPOS  -270 30  LC FPOS  -90 -150  BC FPOS  -30 -90  LC
'  FPOS  -150 -150      BC FPOS  -150 -210  FPOS  -30 -210
' FIN
' *************************************

' *** routine principale
label labels : gosub labels
gosub variables
' gosub initialisations
gosub form0

gosub menu
gosub GUI
gosub initialisations
end

' ******************************************************************************
' *** définition de tous les labels
labels:
label variables,form0,menu,GUI,initialisations,init
label nouveau,ouvrir,enregistrer,enregistrer_sous,quitter
label aide,apropos,close_apropos
label executer,decoder,lire_commande,interpreter,proc
label couleur_crayon,couleur_fond,avance_recule,tourne_droite,tourne_gauche
label baisse_crayon,leve_crayon,repeter,decode_couleur,fixe_cap,ramene_centre
label apprends,exec_proc,fixe_position
label axex,axey,axexy
return

' ******************************************************************************
' *** définition de toutes les variables
variables:
dim no%,parent_1%,parent_2%,nom_fichier$,no_open%,no_save%,no_options%
dim no_apropos%,no_aide%
dim i%,j%,l%,s$
dim cr,cg,cb    : ' Couleurs R,G,B
dim ccr,ccg,ccb : ' couleurs R,G,B du crayon
dim fcr,fcg,fcb : ' Couleurs R,G,B du fond
dim nl$      : nl$ = chr$(13) + chr$(10)  : ' Nouvelle ligne
dim version$  : version$  = "V01.00"
dim creation$ : creation$ = "05 Mai 2012"
dim modif$    : modif$    = "10 Juin 2012"
dim form_graph%,commande$,saisie%,execution%,cmd$,long%,acmd$,res
dim x0,y0,xc,yc,cap,a,b,valeur%,xp,yp,pi,rad,sens,erreur,true,false,nbrepet%
dim al%,a$,acommande$,crep$,command$,nbproc%,sauv%,sauvx%,fich$,msg$
dim procedures$(99) : ' Tableau des procédures définies par l'utilisateur
dim proc$ ,long
dim k%,suite$
dim lx,ly ,x,y
return

' ******************************************************************************
' *** configuration de l'écran principal
form0:
width 0,800 : height 0,700
caption 0,"        S U P E R    M I N I    L O G O"
return

' ******************************************************************************
' *** création des menus
menu:
no% = no% + 1 : main_menu no% : parent_1% = no%
no% = no% + 1 : sub_menu no% : parent no%,parent_1%
  parent_2% = no% : caption no%,"Fichier"
no% = no% + 1 : sub_menu no% : parent no%,parent_2%
  caption no%,"Nouveau" : on_click no%,nouveau
no% = no% + 1 : sub_menu no% : parent no%,parent_2%
  caption no%,"Ouvrir..." : on_click no%,ouvrir
no% = no% + 1 : sub_menu no% : parent no%,parent_2% :  inactive no%
  sauv% = no%
  caption no%,"Enregistrer" : on_click no%,enregistrer
no% = no% + 1 : sub_menu no% : parent no%,parent_2% :  inactive no%
  sauvx% = no%
  caption no%,"Enregistrer sous.." : on_click no%,enregistrer_sous
no% = no% + 1 : sub_menu no% : parent no%,parent_2%
  caption no%,"Quitter" : on_click no%,quitter
' ***
no% = no% + 1 : memo no% : width no%,800 : height no%,600
  saisie% = no% : font_size no%,10 : font_color no%,255,255,255
  color no%,0,0,150 : font_bold no% :  inactive no%
no% = no% + 1 : button no% : top no%,600 : left no%,100
  width no%,150 : caption no%,"Exécuter" : on_click no%,executer
no% = no% + 1 : button no% : top no%,600 : left no%,400
  width no%,150 : caption no%,"Editeur"
no% = no% + 1 : form no% : width no%, 800 : height no%, 640
  caption no%, "SUPER MINI LOGO  GRAPH" : form_graph% = no% : inactive no%
no% = no% + 1 : form no% : width no%,300 : height no%,700
  left no%,800 : caption no%,"SUPER MINI LOGO EXECUTION"
  execution% = no% :  inactive no%
no% = no% + 1 : sub_menu no% : parent no%,parent_1%
  parent_2% = no% : caption no%,"Aide"
no% = no% + 1 : sub_menu no% : parent no%,parent_2%
  caption no%,"Aide" : on_click no%, aide
no% = no% + 1 : sub_menu no% : parent no%,parent_2%
  caption no%,"A-propos" : on_click no%, apropos
 
return
' ******************************************************************************
' création de tous les objets Panoramic
GUI:
' *** d'abord les objets invisibles

no% = no% + 1 : open_dialog no% : no_open% = no%
  filter no%,"Fichier texte|*.sml"
no% = no% + 1 : save_dialog no% : no_save% = no%
  filter no%,"Fichier texte|*.sml"

' *** la fenêtre a-propos avc ses champs
no% = no% + 1 : form no% : hide no% : no_apropos% = no% : parent_1% = no%
  caption no%,"A-propos"
  top no%, 200 : left no%,200 : height no%,150 : width no%,250
  on_close no%,close_apropos
no% = no% + 1 : alpha no% : parent no%,parent_1%
  top no%,20 : left no%,20
  s$ = "Application Panoramic " + nl$
  s$ = s$ + "Version          :  " + version$ + nl$
  s$ = s$ + "Date            :  " + creation$ + nl$
  s$ = s$ + "Dernière modif  :  " + modif$ + nl$
  s$ = s$ + "Auteur          :  Papydall" + nl$
  caption no%,s$

' *** la fenêtre d'aide avec ses champs
no% = no% + 1 : form no% : hide no% : no_aide% = no% : parent_1% = no%
  caption no%,"Aide"
  top no%, 0 : left no%,0 : height no%,700 : width no%,1030
  on_close no%,close_apropos
no% = no% + 1 : alpha no% : parent no%,parent_1%
  top no%,5 : left no%,5

   
s$ = string$(100," ")
s$ = s$ + "M o d e  d ' e m p l o i"+nl$
s$ = s$ + string$(100," ")
s$ = s$ + "*************************" +nl$+nl$
s$ = s$ + "SUPER_MINI_LOGO est une version très limitée du celèbre langage LOGO qui est lui-même dérivé du langage LISP" +nl$
s$ = s$ + " utilisé dans l'intelligence artificielle." +nl$+nl$
s$ = s$ + "Il s'agit ici simplement d'instructions de dessin. Impossible donc, d'afficher du texte ou de créer des"+nl$
s$ = s$ + "procédures récursives. Mais ça permet malgré tout de créer de petits programmes graphiques et d'initier"+nl$
s$ = s$ + "les petits (et même les grands) à LOGO et de là à la programmation."+nl$
s$ = s$ + string$(200,"-") +nl$
s$ = s$ + " Actuellement, SUPER_MINI_LOGO comprend 20 commandes et on peut en rajouter d'autres."+nl$
s$ = s$ + " Certaines commandes nécessitent un ou plusieurs paramètres, d'autres aucun paramètre."+nl$
s$ = s$ + " Le programme ne fait pas la différences entre caractères minuscules et majuscules"+nl$
s$ = s$ + " Listes des commandes: "+nl$
s$ = s$ + " INIT : permet d'initialiser le système; couleur du fond en noir,couleur du tracé en vert,"+nl$
s$ = s$ + "        origine de l'écran graphique au milieu de l'écran, cap de la tortue vers le Nord (90°),"+nl$
s$ = s$ + "        crayon baissé (la tortue laisse une trace en se déplaçant)"+nl$
s$ = s$ + " EEG  : Efface l'Ecran Graphique permet d'éffacer l'écran graphique, tous les paramètres de la tortue"+nl$
s$ = s$ + "        restent inchangés ( position, cap, couleur etc...)"+nl$
s$ = s$ + " FCC couleur : Fixe la Couleur du Crayon , permet de fixer la couleur du tracé.Cette commande nécessite"+nl$
s$ = s$ + "      un argument : couleur qui peut prendre l'une des 8 'valeurs' suivantes : "+nl$
s$ = s$ + "        ROUGE,VERT,BLEU,NOIR,BLANC,JAUNE,VIOLET,GRIS.Exemple : FCC JAUNE"+nl$
s$ = s$ + " FCF couleur : Fixe la Couleur du Fond. Exemple FCF NOIR"+nl$
s$ = s$ + " FCAP angle : Fixe le cap de la tortue. l'argument 'angle' doit être compris entre 0 et 360°"+nl$
s$ = s$ + "            0 vers l'Est (l'axe des X), 90 vers le Nord (axe des Y),180 vers l'ouest et 270 vers le Sud."+nl$
s$ = s$ + "            Exemple : FCAP 40,faire pointer la tortue vers 40° par rapport à l'axe des X (sens trigonométrique)"+nl$
s$ = s$ + " FPOS X Y  : deplace la tortue au point de coordonnées X Y (0 0 étant le centre de l'écran)"+nl$
s$ = s$ + "          Cette commande nécessite 2 arguments X et Y et ils doivent être separés par un espace"+nl$
s$ = s$ + "          Exemple: fpos 100 200  deplace la tortue au point de coordonnées X = 100 et Y = 200 par rapport au centre(0 0)"+nl$
s$ = s$ + " CENTRE  : Ramène la tortue au centre de l'écran et dirige la tortue vers le Nord(90°)"+nl$
s$ = s$ + " BC : Baisse Crayon , en se deplaçant la tortue laisse sa trace"+nl$
s$ = s$ + " LC : Lève Crayon , en se déplaçant, la tortue ne laisse pas de trace"+nl$
s$ = s$ + " AV n : Avance de n pas (n pixels) dans la direction de la tortue en laissant ou non une trace"+nl$
s$ = s$ + "        selon que le crayon est baissé(BC) ou levé (LC). Exemple : AV 100"+nl$
s$ = s$ + " RE n : Recule de n pas . Exemple RE 150"+nl$
s$ = s$ + " TD a : Tourne à Droite de a dégrés par rapport à la direction de la tortue. Exemple TD 90"+nl$
s$ = s$ + " TG a : Tourne à Gauche de a dégrés par rapport à la direction de la tortue. Exemple TG 120 "+nl$
s$ = s$ + " AXEX : Trace l'axe des X"+nl$
s$ = s$ + " AXEY : Trace l'axe des Y"+nl$
s$ = s$ + " AXEXY : Trace les 2 axes"+nl$
s$ = s$ + " REPETE n [ liste_d_instructions ] : Voici une commande très puissante qui permet de répeter n fois la liste d'instructions"+nl$
s$ = s$ + "      qui se trouvent entre crochets. Il doit y avoir un espace entre REPETE et n, entre n et [, entre [ et "+nl$
s$ = s$ + "      la liste des intructions et entre le dernier caractère de la liste d'instructions et ]."+nl$
s$ = s$ + "      La liste_d_instructions peut contenir n'importe quelle commande autorisée sauf la commande REPETE."+nl$
s$ = s$ + "      Il n'est pas possible d'imbriquer des commandes REPETE!"+nl$
s$ = s$ + "      Exemple : REPETE 4 [ av 200 td 90 ] dessine un carré de 200 pixels de côté  "+nl$ +nl$
s$ = s$ + " Toutes ces commandes peuvent être utilisées en mode direct, c-à-d , on peut écrire une commande ou plusieurs séparéés "+nl$
s$ = s$ + " par  des espaces ou des retours à la ligne(touche <enter> )"+nl$+nl$
s$ = s$ + " SUPER_MINI-LOGO vous permet également de définir des procédures( sorte de programes) que vous pouvez sauver sur"+nl$
s$ = s$ + " disque et recharger au besoin."+nl$
s$ = s$ + " Une procedure doit être comprise entre les 2 mots réservés POUR et FIN. Lorsque vous exécuter une procédure,"+nl$
s$ = s$ + " le système affiche ' vous avez défini....' les points de suspensions indiquent le nom de la procédure"+nl$
s$ = s$ + " A partir de là, vous pouvez exécuter cette procedure autant de fois que vous voulez (tant que vous n'êtes pas sorti du" +nl$
s$ = s$ + " programme ! Pour celà vous devez appeler la procédure par : @Nom_de_la_procédure, sans espace ente le signe @ et" +nl$
s$ = s$ + " Nom_de_la_procédure"+nl$ +nl$
s$ = s$ + " Exemple de définition d'une procédure"+nl$ +nl$
s$ = s$ + "  POUR MAISON "+nl$
s$ = s$ + "    REPETE 4 [ AV 150 TD 90 ] "+nl$
s$ = s$ + "    TD 90 AV 50 TG 90 "+nl$
s$ = s$ + "    REPETE 2 [ AV 70 TD 90 AV 50 TD 90 ]"+nl$
s$ = s$ + "    TG 90 AV 50 TD 90 AV 150 TD 30 "+nl$
s$ = s$ + "    REPETE 3 [ AV 150 TD 120 ] "+nl$
s$ = s$ + "    TD 60 AV 20  TG 90 AV 1 LC AV 35 BC "+nl$
s$ = s$ + "    AV 55 TD 90 AV 20 TD 90 AV 20 "+nl$
s$ = s$ + "  FIN "+nl$ +nl$
s$ = s$ + " Exécutez votre procédure. Si elle est correcte, le système vous indique que vous défini MAISON. Mais si votre"+nl$
s$ = s$ + " procédure contient des erreurs, le système affiche un message d'erreur et vous invite à retourner à l'éditeur"+nl$
s$ = s$ + " pour corriger."+nl$
s$ = s$ + " Pour sauvegarder votre procédure, choisissez un répertoire à votre convenance et donnez un nom à votre procédure "+nl$
s$ = s$ + " obligatoirement suivi de l'extension .SML"+nl$
s$ = s$ + " Vous pouvez charger des procédures déjà enregistées ou définir d'autres procédures. A partir de là, vous pouvez"+nl$
s$ = s$ + " exécuter vos procédures simplement en les appelant par @Non_Procedure. Exemple @MAISON, exécute la procédure"+nl$
s$ = s$ + " MAISON qui a été définie." +nl$+nl$




font_size no%,12 : color no% ,0,80,80 : font_color no%, 255,255,0 :font_bold no%
caption no%,s$


return

' ******************************************************************************
' *** Initialiser différentes variables
initialisations:

nbproc% = 0
procedures$(0) = str$(nbproc%):' procedures$(0)contient le nombre des procédures
pi = 4*atn(1) : rad = pi/180
true = 1      : false = 0
lx = 800      : ly = 640
xc = lx/2    : yc = ly/2 : ' Origine de l'écran graphique
cap = 90                  : ' Direction de la tortue (vers le nord)
acmd$ = ""
gosub init

return

' ******************************************************************************
' *** afficher la page d'aide

aide:

show no_aide% : to_foreground no_aide% : return

' ******************************************************************************
' *** afficher la page à-propos

apropos:

inactive 0 : show no_apropos% : return

' ******************************************************************************
' *** fermer la page a-propos

close_apropos:

hide no_apropos% : active 0 : to_foreground 0 : return

' ******************************************************************************
' *** On sort du programme

quitter:

terminate : return

' ******************************************************************************
' **** Nouveau fichier

nouveau:

nom_fichier$ = ""
active saisie% : clear saisie% : active sauv% : active sauvx%
set_focus saisie%
return

' ******************************************************************************
' **** Charger un fichier existant

ouvrir:

active saisie% : clear saisie% : set_focus saisie%
s$ = file_name$(no_open%) : if s$="_" then return
nom_fichier$ = s$ : file_open_read saisie%,nom_fichier$
' charger le fichier
print_target_is saisie%
while file_eof(saisie%) <> 1 : file_readln saisie%,a$:print a$ : end_while
file_close saisie% : active sauv% : active sauvx%
return

' ******************************************************************************
' **** Enregistrer le fichier

enregistrer:

msg$ = "Ce fichier existe déjà." + nl$ + "Voulez-vous le remplacer ?"
if nom_fichier$=""
  message "Il n'y a aucun nom de fichier connu"
  return
end_if
if file_exists(nom_fichier$)=1
    if message_confirmation_yes_no(msg$)<>1 then return
end_if
file_open_write saisie%,nom_fichier$
file_writeln saisie%,fich$
file_close saisie%
return

' ******************************************************************************
' **** Enregistrer le fichier sous un autre nom

enregistrer_sous:

s$ = file_name$(no_save%) : if s$="_" then return
if instr(right$(s$,5),".")=0 then s$ = s$ + ".sml"
nom_fichier$ = s$ : gosub enregistrer
return

' ******************************************************************************
' Interpréter et exécuter les differentes commandes de l'utilisateur

executer:

commande$ = "" : erreur = false
for l% = 1 to count(saisie%)
 commande$ = commande$ + " " + nl$ + " " + item_read$(saisie%,l%)+ " "
next l%
commande$ = upper$(trim$(commande$))+" #"

fich$ = left$(commande$,instr(commande$," #"))
gosub ramene_centre
print_target_is execution%  : cls
' **** Interpréter les différentes commandes
interpreter:
active execution% : to_foreground execution% : ' Zone d'info
if commande$ =  " #"                        : ' Ancune commande ?
  message " !!!    Il n'y a rien à interpréter    !!!" : ' Alors afficher
  print "  !!  ERREUR  !! "                            : ' le message et
  print " Retournez à l'éditeur pour corriger"        : ' sortir
  return
end_if
long% = 1

while long% < len(commande$) and erreur = false : ' Tant que la chaîne des
                                                  ' commandes n'est pas vide
                                                  ' et pas d'erreur
  gosub lire_commande : ' Extraire une commande de la chaîne des commandes
  if cmd$ <> "#"      : ' Une commande existe ?
      gosub decoder    : ' Alors décoder cette commande
  end_if
  if erreur = true    : ' Si erreur dans la commande, afficher un message
      print "  !!  ERREUR  !! "
      print " Retournez à l'éditeur pour corriger"
  end_if
end_while              : ' On a traité toutes les commandes

return

' ******************************************************************************
' Extraire une commande de la chaine COMMANDE$
lire_commande:
cmd$ = "" : l% = long%
while mid$(commande$,l%,1) = " " : l% = l% + 1: end_while
while mid$(commande$,l%,1) <> " "  and mid$(commande$,l%,1) <> "#"
    cmd$ = cmd$ + mid$(commande$,l%,1) : l% = l% + 1
end_while
long% =  l% + 1

return
' ******************************************************************************
' decoder les différentes commandes
decoder:
active form_graph% : to_foreground form_graph% : 2d_target_is form_graph%
if cmd$ = nl$ then return : ' Il n'y a rien, juste une nouvelle ligne <CR>+<LF>
if mid$(cmd$,1,1) = "@" then gosub exec_proc : return : ' Executer une procédure dejà définie
if cmd$ = "INIT" then gosub init          : return : ' Initialiser le mode graphique
if cmd$ = "POUR" then gosub proc          : return : ' Definition d'une procèdure
if cmd$ = "FIN"  then return                        : ' Fin de la procédure
if cmd$ = "EEG"  then cls                : return  : ' Efface écran graphique
if cmd$ = "FCC"  then gosub couleur_crayon : return : ' Fixe la couleur du crayon
if cmd$ = "FCF"  then gosub couleur_fond  : return : ' Fixe la couleur du fond
if cmd$ = "FPOS" then gosub fixe_position  : return : ' Fixe la nouvelle position de la tortue
if cmd$ = "BC"  then gosub baisse_crayon  : return : ' La tortue laisse sa trace
if cmd$ = "LC"  then gosub leve_crayon    : return : ' La tortue ne laisse pas de trace
if cmd$ = "REPETE" then gosub repeter      : return : ' Boucle de repétition
if cmd$ = "AV"
  sens = 1 : gosub avance_recule          : return : ' Avancer de n pas
end_if
if cmd$ = "RE"
  sens = -1 : gosub avance_recule        : return : ' Reculer de n pas
end_if
if cmd$ = "TD"  then gosub tourne_droite  : return : ' Tourner à droite
if cmd$ = "TG"  then gosub tourne_gauche  : return : ' Tourner à gauche
if cmd$ = "FCAP" then gosub fixe_cap      : return : ' Fixer le cap
if cmd$ = "CENTRE" then gosub ramene_centre: return : ' Ramène la tortue au
                                                      ' centre de l'écran
if cmd$ = "AXEX"  then gosub axex          : return : ' Tracer l'axe des X
if cmd$ = "AXEY"  then gosub axey          : return : ' Tracer l'axe des Y
if cmd$ = "AXEXY" then gosub axexy        : return : ' Tracer les 2 axes X et Y

erreur = true
res =  message_error_ok (" !!!! Je ne sais pas comment faire  !!!")
acmd$ = ""
return

' ******************************************************************************
' *** Initialisation du mode graphique
init:
2d_target_is form_graph%
color form_graph% ,0,0,0      : ' Couleur du fond (noir par défaut)
cr = 0 : cg = 255 : cb = 0    : ' Couleur verte
2d_pen_color cr,cg,cb          : ' Couleur du tracé (vert par défaut)
fcr = 0 : fcg = 0 : fcb = 0    : ' Sauvegarder la couleur du fond
ccr = cr : ccg = cg : ccb = cb : ' sauvegarder la couleur du crayon
2d_poly_from xc,yc            : ' Centre de l'écran graphique
x0 = xc : y0 = yc              : ' Origine au centre de l'écran graphique
2d_clear
return

' *** Commande FCC c ---> fixe couleur crayon
couleur_crayon:
gosub lire_commande :' print cmd$
 acmd$ = cmd$ : gosub decode_couleur
2d_pen_color cr,cg,cb
ccr = cr : ccg = cg : ccb = cb : ' Sauvegarder la couleur du crayon
return
' ******************************************************************************
' *** Commande FCF c ---> fixe couleur fond
couleur_fond:
gosub lire_commande :' print cmd$
 acmd$ = cmd$ : gosub decode_couleur
color form_graph%,cr,cg,cb
fcr = cr :fcg = cg : fcb = cb  : ' Sauvegarder la couleur du fond
return
' ******************************************************************************
' Commande AV n /RE n ---> avance/recule de n pas dans la direction de la tortue
avance_recule:

gosub lire_commande
acmd$ = cmd$

if numeric(cmd$) = 0
  erreur = true
  message " !!!  Valeur numérique attendue après AV / RE    !!!" : return
  else
  erreur = false
end_if

valeur% = val(cmd$)
if sens = 0 - 1 then cap = cap + 180
a = cos(cap*rad) : b = sin(cap*rad)
xp = x0 + a * valeur% : yp = y0 - b * valeur%
2d_line x0,y0, xp,yp  : x0 = xp : y0 = yp

return
' ******************************************************************************
' *** Commande TD a ---> tourne à droite (sens horaire) d'un angle a en degrés
tourne_droite:

gosub lire_commande
acmd$ = cmd$
if numeric(cmd$) = 0
  erreur = true
  message "!!!  Valeur numérique attendue après TD    !!!" : return
end_if

valeur% = val(cmd$)
cap = cap - valeur%
return
' ******************************************************************************
' *** Commande TG a ---> tourne à gauche (sens trigonométrique) d'un angle a en
'    degrés
tourne_gauche:

gosub lire_commande
acmd$ = cmd$
if numeric(cmd$) = 0
  erreur = true
  message "!!!  Valeur numérique attendue après TG    !!!" : return
end_if

valeur% = val(cmd$)
cap = cap + valeur%
return
' ******************************************************************************
' *** Commande FCAP a ---> Fixe cap : fixer le cap de la tortue à l'angle a en
'    degrés sens trigonométrique
fixe_cap:

gosub lire_commande
acmd$ = cmd$
if numeric(cmd$) = 0
  erreur = true
  message "!!!  Valeur numérique attendue après FC    !!!" : return
end_if

valeur% = val(cmd$)
cap =  valeur%
return
' ******************************************************************************
' Commande CENTRE ---> Ramène la tortue au centre de l'écran graphique,
' direction nord
ramene_centre:
x0 = xc : y0 = yc  : ' Origine de l'écran graphique
cap = 90            : ' Direction de la tortue (vers le nord)
' ******************************************************************************
' *** Commande BC ---> baisse crayon : le tracé se fait avec la couleur fixée
'    par FCC c
baisse_crayon:
2d_pen_color ccr,ccg,ccb :  ' Restituer la couleur du crayon
return
' ******************************************************************************
' *** Commande LC ---> lève crayon : le tracé se fait dans la couleur du fond,
'    donc invisible
leve_crayon:


2d_pen_color fcr,fcg,fcb  : ' Couleur du fond pour le crayon
return
' ******************************************************************************
' *** Commande REPETE n [ liste_d_instructions ] ---> boucle de repétitions

repeter:
gosub lire_commande
acmd$ = cmd$
if numeric(cmd$) = 0
  erreur = true
  message "!!!  Valeur numérique attendue après REPETE  !!!" : return
end_if

nbrepet% = val(cmd$) : gosub lire_commande
if cmd$ <> "["
  erreur = true
  message "!!!  [ attendu après REPETE  !!!" : return
end_if
cmd$ = acmd$ + " " + cmd$
l% = long% - 1 : al% = l%
crep$ = ""  : ' commande de repetition
while mid$(commande$,al%,1) <> "]"
    cmd$ = cmd$ + mid$(commande$,al%,1)
    crep$ = crep$ + mid$(commande$,al%,1)
    al% = al% + 1
end_while
cmd$ = cmd$ + mid$(commande$,al%,1)
if mid$(commande$,al%,1) <> "]"
  erreur = true
  message "!!!    ] attendu dans la boucle REPETE  !!!" : return
end_if
erreur = false
acommande$ = mid$(commande$,al% + 1,len(commande$)) : ' Sauvegarder les ...
                              ' ... commandes après la boucle de répetition
commande$ = crep$          : ' Traiter la boucle
for i% = 1 to nbrepet%
  gosub interpreter
next i%
commande$ = acommande$      : ' Continuer le traitement après la boucle
if commande$ <> " #" then gosub interpreter
return
' ******************************************************************************
' *** Commande de décodage des couleurs données par leurs noms de couleurs
decode_couleur:
if cmd$ = "ROUGE"
  cr = 255 : cg = 0 : cb = 0    : return
end_if
if cmd$ = "VERT"
  cr = 0 : cg = 255 : cb = 0    : return
end_if
if cmd$ = "BLEU"
  cr = 0 : cg = 0 : cb = 255    : return
end_if
if cmd$ = "NOIR"
  cr = 0 : cg = 0 : cb = 0      : return
end_if
if cmd$ = "BLANC"
  cr = 255 : cg = 255 : cb = 255 : return
end_if
if cmd$ = "JAUNE"
  cr = 255 : cg = 255 : cb = 0  : return
end_if
if cmd$ = "VIOLET"
  cr = 255 : cg = 0 : cb = 255  : return
end_if

if cmd$ = "GRIS"
  cr = 127 : cg = 127 : cb = 127 : return
end_if
erreur = true
message " !!! Un nom de couleur attendu  !!!"
return
' ******************************************************************************
' *** Ajouter une procédure au tableau des procédures
proc:
nbproc% = nbproc% + 1                : ' Incrémenter le nombre des procédures
procedures$(0) = str$(nbproc%)      : ' Contient le nombre des procédures
gosub lire_commande
proc$ = "@" + cmd$ + mid$(commande$,l%,len(commande$))

proc$ = mid$(proc$,1,len(proc$)-5)
gosub apprends
return

' ******************************************************************************
' *** Apprendre la procédure pour l'utiliser lors de l'appel par @xxx
apprends:
print "Vous avez défini ";cmd$
procedures$(nbproc%) = proc$ : ' Ajouter la procédure en cours au tableau
return
' ******************************************************************************
' *** Executer une procédure dejà definie
exec_proc:
k% = 1  : suite$ = mid$(commande$,l%,len(commande$))
 suite$ = left$(suite$,instr(suite$," #"))

erreur = false
repeat
  if cmd$ <> mid$(procedures$(k%),1,len(cmd$)) then k% = k% + 1
until cmd$ = mid$(procedures$(k%),1,len(cmd$)) or k% > val(procedures$(0))
if cmd$ = mid$(procedures$(k%),1,len(cmd$))
  commande$ = upper$(procedures$(k%))
  commande$ = mid$(commande$,len(cmd$)+1,len(commande$)-len(cmd$))
  gosub interpreter
  else
  erreur = true
  message " !!! " + cmd$ + " n'est pas défini !!!"
end_if
commande$ = suite$      : ' Continuer le traitement

gosub interpreter
return
' ******************************************************************************
' *** Commande FPOS X Y --> Fixer la position de la tortue en X et Y
'    l'origine 0 0 est au centre de l'écran et non le point supérieur gauche !
fixe_position:

gosub lire_commande
acmd$ = cmd$
if numeric(cmd$) = 0
  erreur = true
  message "!!!  Valeur numérique attendue après FPOS    !!!" : return
end_if

x = val(cmd$)
xp = xc + x

gosub lire_commande
acmd$ = cmd$
if numeric(cmd$) = 0
  erreur = true
  message "!!!  Valeur numérique attendue après FPOS    !!!" : return
end_if

y = val(cmd$)
yp = yc - y

 2d_poly_to xp,yp
 x0 = xp : y0 = yp

return
' ******************************************************************************
' *** Commande AXEX --> Tracer l'axe des X
axex:
2d_line 0,ly/2,lx,ly/2
return
' ******************************************************************************
' *** Commande AXEY --> Tracer l'axe des Y
axey:
2d_line lx/2,0,lx/2,ly
return
' ******************************************************************************
' *** Commande AXEXY --> Tracer les 2 axes X et Y
axexy:
2d_line 0,ly/2,lx,ly/2 : 2d_line lx/2,0,lx/2,ly
return
' ******************************

Voici quelques exemples de procédures que vous pouvez expérimenter.
Copier le code et faites Fichier, nouveau et coller ; puis bouton exécuter
Code:

POUR MAISON       
    REPETE 4 [ AV 150 TD 90 ]         
    TD 90 AV 50 TG 90         
    REPETE 2 [ AV 70 TD 90 AV 50 TD 90 ]         
    TG 90 AV 50 TD 90 AV 150 TD 30         
    REPETE 3 [ AV 150 TD 120 ]         
    TD 60 AV 20  TG 90 AV 1 LC AV 35 BC         
    AV 55 TD 90 AV 20 TD 90 AV 20                         
  FIN
Code:

POUR SUPERCUBE 
 INIT LC 
 FPOS  -30 150  BC FPOS  -150 150  FPOS  -90 210  FPOS  30 210  FPOS  -30 150  FPOS  -30 -210   
 FPOS  30 -150  FPOS  30 -90  FPOS  -30 -90  FPOS  90 -90  FPOS  90 30  FPOS  -270 30  FPOS  -270  -90 
 FPOS  -210 -90  FPOS  -210 -30  FPOS  -90 -30  FPOS  -90 -150  FPOS  -210 -150  FPOS  -210 -30  FPOS  -150 30   
 FPOS  -30 30  FPOS  -90 -30  FPOS  90 150  FPOS  30 150  FPOS  30 210  FPOS  30 90  FPOS  90 90  FPOS  90 150 
 FPOS  90 90  FPOS  150 90  FPOS  150 -30  FPOS  90 -90  FPOS  90 30  FPOS  150 90  LC FPOS  -150 30  BC 
 FPOS  -150 150  FPOS  -150 90  FPOS  -210 90  FPOS  -270 30  LC FPOS  -90 -150  BC FPOS  -30 -90  LC 
 FPOS  -150 -150      BC FPOS  -150 -210  FPOS  -30 -210 
  FIN
Code:

POUR ROSACE   
  REPETE 100 [ AV 200 TD 45 AV 50 TD 124 ]   
FIN

Code:

POUR ROSACE2 
  REPETE 180 [ AV 200 TD 45 AV 50 TD 136 ] 
FIN



J’espère que ce mini interpréteur vous donne satisfaction !

lol! lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyDim 10 Juin 2012 - 19:02

Merci pour ce programme "amusant" !
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyDim 10 Juin 2012 - 20:29

Bonsoir Papydall Smile
J'avais déjà pensé faire un LOGO, mais j'attendais encore de bien maîtroser certaines instructions de Panoramic. Hélas, tu m'as devancé. Ce n'est pas grave, j'ai d'autres projets en réserve! lol!
Ton programme est bien fait. Par contre, pour certaines instructions, comme BC j'aurais mis TRACE ou LC j'auraos mis LEVE; pour RE: RECULE, etc... pour la compréhension. Je pense surtout aux enfants qui peuvent aborder la programmation avec ce genre de langage somme toute assez simple.
Mais rien ne m'empêche de changer tes mots clés dans ton programme!
Merci pour cet excellent programme! Wink
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7006
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyDim 10 Juin 2012 - 21:52

Salut Bignono.

Tu peux toujours faire ton LOGO ; ça ne peut qu’être bénéfique pour tous.
Je, surtout, fais ce programme pour tester mes connaissances en PANORAMIC.
Je suis d’accord avec toi en ce qui concerne les noms des commandes :
AVANCE est plus parlant que AV par exemple.
Et la modification est très facile dans ce cas.
Je suis certain que tu peux faire un programme beaucoup mieux que moi.
Je suis un apprenti ; tu es un maitre.
Quand le cœur t’en dira alors fonce !

A+

lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyDim 10 Juin 2012 - 23:43

Merci Papydal, à nous les joies du dessin ...

Dis moi Papydal, je dois me tromper quelque part ou alors ce n'est pas possible

Je crois que normalement si je définit:
Code:
POUR QCERCLE 
  REPETE  45  [  AV  2  TD  2  ] 
 FIN
=> Je l'enregistre en Qcercle.sml

Ne devrais-je pas pouvoir l'utiliser ensuite dans
Code:
POUR PETALE   
      REPETE 2  [ @QCERCLE  TD  90 ]   
  FIN

Là si je lance PETALE, il ne fait qu'un QCERCLE, ce qui m'ennui, mais bon, je m'y prends peut être mal. Dis moi si je fais une erreur

Pareil, si je définit PETALE ainsi:
Code:

POUR PETALE 
  @QCERCLE 
  TD  90
  @QCERCLE   
FIN
=> Je trace mon pétale

Par contre, si je l'appelle par
Code:
POUR FLEUR
  REPETE  10  [  @PETALE TD 360/10  ]
FIN 
=> Seul la moitié d'un pétale est tracé. Je ne comprends pas, même si l'appel dans une boucle pause problème, il devrait au moins faire un pétale entier, non ?

Petit problème dans le code ou c'est moi qui utilise mal ?
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyLun 11 Juin 2012 - 0:53

Sinon, une autre étoile:
Code:
Pour Etoile5
  repete 5 [ av 50  td 144 ]
Fin

Code:
Pour Etoile7
  repete 7 [ av 50  td 102.8 ]
Fin
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7006
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyLun 11 Juin 2012 - 1:45

Salut Jicehel.

Ce n’est pas toi qui prends mal.
Si dans ta procédure pétale, tu remplace @qcercle par son code, tu t’aperçois qu’il y a une boucle REPETE dans une boucle REPETE.
Or, les REPETE imbriquées ne sont pas possibles.
J’ai essayé de les coder mais je n’y étais pas parvenu.
Autre bug : quand on appelle une procédure par @PROCEDURE, tout ce qui vient après n’est pas pris en charge !
Exemple : après avoir défini QCERCLE, si tu fais @QCERCLE AV 100 ….
Seul QCERCLE sera dessiné et AV 100… Ignoré.

Ceci est dû à ce que j’ai commis l’erreur que tout programmeur, même débutant, NE DOIT PAS commettre, à savoir commencer un programme sans avoir étudier, au préalable sa structure.
J’ai voulu testé mes acquis en PANORAMIC (sans penser à faire un programme utilisable) et petit à petit j’ai ajouté des bouts de codes pour essayer. Je me suis trouvé donc avec un programme décousu et mal pensé.
Par exemple, j’ai ajouté " #" comme marque de fin à la fin de chaque saisie (soit disant pour faciliter l’interprétation)
J’ai ajouté ensuite la définition, la sauvegarde et la réutilisation d’une procédure. Son interprétation était mal étudiée.

Bref, je n’aurai pas dû poster ce programme, mais ce qui est fait est fait.
Bignono a dit qu’il a envisagé de faire un programme de ce genre.
J’espère qu’il le fasse car avec un Big on ne fait pas les choses à moitié.

Voilà, maintenant tu dispose du code. Si tu as envi, corriges-le, modifies-le, ou fais de lui ce qui te plaira.

A+
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyLun 11 Juin 2012 - 7:25

Je ne pense pas que tu as mal fait Papydall. Regarde mon jeu de dames, il était plein de bugs et la communauté m'a aider pour le débuggage en me disant les problèmes trouvés. Tu as essayé de faire quelque chose et ce n'est pas parfait. Soit tu t’arrêtes là et ton programme peut servir de base pour quelqu'un pour faire un interpréteur de commande ou syntaxique simple. (L’interpréteur syntaxique fonctionne très bien).
Sois tu cherches à résoudre le problème de l'appel des procédure (par exemple en passant par une DLIST pour stocker le code en attente comme une pile (voir le programme de Nardo26 sur les arbres par exemple).
(Genre lors de l'appel d'une procédure => Tu empiles l'état du compteur pour une boucle, le code en cours et la poisiton de retour dans le code par exemple, c'est l'idée la plus simple qui me vienne). Quand tu rencontre le mot fin, tu vérifie si tu as quelque chose dans ta dlist (en commençant par le dernier élément ajouté) et tu restaure le contexte comme ça tu peux avoir des appels imbriqués)

Après comme ajout possible et pratique, il y a les paramètres de procédures, mais ça complique encore.

Programmer un LOGO complet ne s'est pas fait en un jour. Tu t'es attaqué à un beau morceau Personnellement, j'espère que tu persévérera car le programme est bien parti et je te remerci d'avoir partagé ce code. Il y a pleins d'idées à récupérer dedans Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyLun 11 Juin 2012 - 14:04

En plus de la DLIST lors des appels, je te conseille de remplacer procédures$(99) par une autre DLIST, ça te permet d'avoir plus de souplesse d'utilisation (notamment de ne pas avoir à limiter ton tableau. Tu ajoutes dedans au fur et à mesure si besoin.

Sinon, dans la routine quitter, tu peux supprimer le "return" qui n'est pas utile

Sinon, le programme est très joliment fait au niveau du source (no d'objet, appels de sous programme et commentaires, il manque juste peut-être quelques commentaires sur les déclarations de varaibles, mais je te rassure, perso, je ne le fais pas non plus Very Happy )
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyLun 11 Juin 2012 - 15:28

Bonjour,
Juste un petit détail... (mais vraiment c'est pour chipoter Wink )

un truc aussi que je fais, par exemple sur la procédure tourne_droite:
Code:
tourne_droite:
  gosub lire_commande
  acmd$ = cmd$
  if numeric(cmd$) = 0
    erreur = true
    message "!!!  Valeur numérique attendue après TD    !!!"
  else
    valeur% = val(cmd$)
    cap = cap - valeur%
  end_if
return

J'essaye, dans la mesure du possible, de n'avoir qu'un seul return pour les procédures et de tout indenter entre le label et l'instruction return.
Ce n'est pas obligatoire, mais je trouve que cela améliore la lisibilité du code.
Wink

Une chose aussi:
Il n'y pas de test sur l'existence du fichier dans la procédure "ouvrir"
Code:
ouvrir:
  ACTIVE saisie% : CLEAR saisie% : SET_FOCUS saisie%
  s$ = FILE_NAME$(no_open%) :
  IF s$<>"_"
    IF FILE_EXISTS(s$)=1
      nom_fichier$ = s$
      FILE_OPEN_READ saisie%,nom_fichier$
      ' charger le fichier
      PRINT_TARGET_IS saisie%
      WHILE FILE_EOF(saisie%) <> 1 : FILE_READLN saisie%,a$:PRINT a$ : END_WHILE
      FILE_CLOSE saisie%
      ACTIVE sauv% : ACTIVE sauvx%
    ELSE
      MESSAGE "Fichier inexistant !"
    END_IF
  END_IF
RETURN

Revenir en haut Aller en bas
http://nardo26.lescigales.org
papydall

papydall


Nombre de messages : 7006
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO EmptyLun 11 Juin 2012 - 23:35

Salut tout le monde.

Ambroise, Bignono, Jicehel, Nardo26, merci à vous tous pour vos interventions et conseils.
Comme je l’ai dis dans un précédent post, le programme a été ‘cousu’ de toutes pièces !
Je voulais expérimenter ce que j’ai pu récolter comme informations (à partir des réponses données par tous à des questions posées par certains, …)
J’ai pioché un peu et même assez dans le ‘squelette’ donné par Klaus (merci Klaus).
Et puis, (l’appétit vient en mangeant) je me trouve en train de fabriquer un mosaïque de programme !

@TOUS
Je vous propose ceci :
Du programme SUPER_MINI_LOGO, prenez les parties intéressantes, modifiez certaines parties, ajoutez d’autres fonctions.
Chacun peut apporter sa contribution pour, au final, aboutir à un petit interpréteur LOGO, entièrement écrit en PANORAMIC !
Vos enfants ou vos petits-enfants peuvent s’initier à la programmation et apprendre plusieurs choses (la notion d’orientation, les rotations, la notion de polygones et la relation entre le nombre de répétitions et la valeur de l’angle pour tourner à droite ou à gauche, etc.…)
Le programme sera modulaire et chacun (selon ses compétences) peut ajouter une nouvelle commande….
Ensuite, lorsque le programme sera finalisé, il peut être mis (comme exemple, avec d’autres programmes) dans la documentation de PANORAMIC.

Si cette proposition vous intéresse, allez-y pour la concrétiser.


lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





SUPER MINI LOGO Empty
MessageSujet: Re: SUPER MINI LOGO   SUPER MINI LOGO Empty

Revenir en haut Aller en bas
 
SUPER MINI LOGO
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» DuplicateIcon :  Créer un double du logo Windows
» Animation 3D 2 faces avec le logo de Panoramic
» Animation 3D 4 faces avec le logo de Panoramic
» Éditeur de texte : Mini Word
» mini systeme d exploitation

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: