Besoin d'aide en Basic Locomotive

Discussions sur les anciens ordis souvent ludiques et familiaux (Amstrad, Atari, Amiga, ...).

Modérateurs : Membres WDA, Modérateurs complets

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 19 déc. 2013, 12:25

Bonjours à tous, c'est Cdbvs


Je suis nul, mais vraiment nul en programmation et je veux réaliser un petit tableur du style Office sur Amstrad CPC 464 en BASIC Locomotive 1.0. Je suis en train de réaliser un mini programme et je bloque dès que je demande à BASIC d'aditionner les valeures a$+b$+c$, etc comme détaillé ci-dessous en rouge.

Si vous pouvez m'aider à comprendre comment on fait pour dire à BASIC d'aditionner au lieu de mettre à la queue leuleu, comme mon programme qui par exemple me donne : a$=5000 + b$=2000 + c$=3000 = ça fait 10000 et bien BASIC me donne 500020003000.

Merci pour votre aide.

10 cls:mode 2
20 window 2,12,1,2: print"A":window 2,12,2,3: print"=========":window 2,12,3,4: print"B" REM Graphic
30 window 2,12,4,5: print"C":window 2,12,5,6: print"D":window 2,12,6,7: print"E":window 2,12,7,8: print"F":window 2,12,8,9: print"G" REM Graphic
46 window 2,12,20,21: print"_________":window 2,12,21,22: print"Total":window 2,12,22,23: print"_________":window 2,12,23,24: print"H" REM Graphic
50 window 60,80,1,25:line input"Texte A";a$:cls:line input"B";b$:cls:line input"C";c$:cls:line input"D";d$:cls:line input"E";e$:cls:line input"F";f$:cls:line input"G";g$:cls REM Qu'est ce que l'on veux comme nombre ou textes dans les windows
60 window 2,12,1,2: print a$:window 2,12,3,4: print b$:window 2,12,4,5: print c$:window 2,12,5,6: print d$:window 2,12,6,7: print e$:window 2,12,7,8: print f$:window 2,12,8,9: print g$:cls REM Basic inscrit les valeurs
70 window 60,80,1,25: print"Calculer les lignes: Oui, Passer tableau 2, Quitter"
80 z$=inkey$:if z$=""goto 80
90 if z$="o" then window 1,12,24,25: print a$+b$+c$+d$+e$+f$+g$ REM c'est là que ça déconne !
100 if z$="p" then goto 150:end
110 if z$="q" then stop:end
120 goto 70
150 window 14,24,1,2:line input"TexteB";aa$;cls REM à finir
160 window 14,24,1,2: print aa$ REM à finir
REM à finir

Merci
Cdbvs

Avatar du membre
Krapoutchik
Bureau WDA
Bureau WDA
Messages : 923
Enregistré le : 01 juil. 2009, 08:00
Collectionneur (-euse) ? : Oui
Localisation : Paris

Re: Besoin d'aide en Basic Locomotive

Message non lu par Krapoutchik » 19 déc. 2013, 13:49

Euh... 30 ans que je n'ai pas touché à du basic ... Tes variables ont des $ donc alphanumérique donc tu concatènes et tu n'additionnes pas, enlève le $ et ça ira mieux, du moins, c'est mon avis, après, je ne connais pas le basic locomotive ::oops:
Tektronix 454A, Atten ADS 1102CAL Powa !!
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes à microprocesseur
Ma petite collection...
Tutoriel pour insérer des photos...

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Re: Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 20 déc. 2013, 15:52

Ok Krapoutchik, j'ai retiré les $ et BASIC n'aime pas trop car il me retourne une erreur "type mismatch".


Donc ce n'est pas ça !


Merci.
Cdbvs
::(

Avatar du membre
Arkady
Messages : 4
Enregistré le : 13 oct. 2013, 16:27
Collectionneur (-euse) ? : Oui
Localisation : Île de la Réunion

Re: Besoin d'aide en Basic Locomotive

Message non lu par Arkady » 20 déc. 2013, 17:44

Salut,

Effectivement, tout ce qui est a$,.....g$ est alphanumérique, d'où pas de somme mathématique possible (à moins de passer par val$(...) si mes souvenirs sont bons).
Donc, tu dois impérativement virer les $ PARTOUT où tu veux utiliser des nombres réels, sans en oublier un seul (dans les input etc...)
Ensuite, à ta place, je rajouterais une ligne qui calcule le total et le stocke dans une variable intermédiaire, genre :

85 t=a+b+c+d+e+f+g
90 if z$="o" then window 1,12,24,25: print t

Mais tout comme Krapoutchik, la dernière fois que j'ai écrit une ligne en LOCOMOTIVE BASIC sur Amstrad CPC, c'était il y a 23 ans, à la louche...
Je ne suis même plus sûr de savoir si ce basic accepte des variables numériques à plusieurs lettres genre aab, total, gagne, etc...

Bon courage,
Arkady

Avatar du membre
Krapoutchik
Bureau WDA
Bureau WDA
Messages : 923
Enregistré le : 01 juil. 2009, 08:00
Collectionneur (-euse) ? : Oui
Localisation : Paris

Re: Besoin d'aide en Basic Locomotive

Message non lu par Krapoutchik » 20 déc. 2013, 22:27

Je viens de rechercher chez mon ami google qui me dit qu'une variable en basic Locomotive d'un nombre réel doit finir par !.

Comme dans tous les langages le typage des variables est le plus important; la majeure partie des erreurs viennent de là.

Le VAL$ d'Arkady une excellente solution si ta case peut contenir de l'alpha ou du numérique.
Tektronix 454A, Atten ADS 1102CAL Powa !!
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes à microprocesseur
Ma petite collection...
Tutoriel pour insérer des photos...

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Re: Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 21 déc. 2013, 23:05

Salut c'est Cdbvs


Ca ne fonctionne pas très bien, mais bon, y'a de l'amélioration.

- Quand j'enlève les $, j'ai invariablement toujours la même erreur : Type Mismatch
- Quand je mets les $ à la ligne 50 et les Val(x$) à la ligne 60, les $ à la ligne 85 et t$ à la ligne 90. Pour un calcul de 5000 + 2000 + 3000, j'obtiens = 500020003000
- Quand je mets les $ à la ligne 50 et les Val(x$) à la ligne 60, les $ à la ligne 85 et Val(t$) à la ligne 90. Pour un calcul de 5000 + 2000 + 3000, j'obtiens = 5.00020E+14
- Quand je mets les $ à la ligne 50 et les Val(x$) à la ligne 60, t seul à la ligne 85 et print t à la ligne 90. j'ai une erreur: Type Mismatch.

Par contre ce qui est sur, c'est dès que j'enlève un $, j'ai toujours une erreur Type Mismatch.


Donc pour le moment, ce qui va mieux c'est que Val(x$) me permet d'extraire les expressions numériques aux nombres alphanumériques, mais pas plus. Je vais faire des testes de mon côté, mais si vous avez une autre idée, je prends et je teste directement.

Merci et à bientôt
Cdbvs
::|

Avatar du membre
ritchy
Posteur habitué
Posteur habitué
Messages : 15
Enregistré le : 21 déc. 2013, 22:23
Collectionneur (-euse) ? : Oui
Localisation : Annecy
Contact :

Re: Besoin d'aide en Basic Locomotive

Message non lu par ritchy » 22 déc. 2013, 14:47

hello

bon moi aussi ça fait 30 ans que je n'ai pas fait de basic, mais voici mon analyse:

- déjà évite d'avoir plusieurs instructions par ligne, si tu as une erreur ça sera plus facile de trouver quelle instruction déconne. Je ne sais pas si le basic locomotive le supporte, mais la fonction "renum" permet de renuméroter tes lignes automatiquement (de 10 en 10 par défaut), ce qui peut aider quand tu as inséré plein de lignes et que tu n'as plus de "place".

- pour en revenir à l'erreur, effectivement les variables avec $ sont alphanumériques, donc du texte. Il faut utiliser VAL pour les transformer en valeurs:
print val(a$)+val(b$)+val(c$)+val(d$)+val(e$)+val(f$)+val(g$)

- on voit déjà qu'avec 7 cellules ça donne des lignes compliquées, et c'est pas évolutif du tout. Je te conseille d'utiliser un tableau. Exemple:

REM Declaration du tableau
DIM T$(5)

REM Initialisation des éléments
T$(1)="42"
T$(2)="17"
...

REM CALCUL DE LA SOMME
S = 0
FOR i = 1 TO 5
S = S + VAL(T$(i))
NEXT
PRINT "RESULTAT = "; S

Bon courage !
Ritchy.

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Re: Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 22 déc. 2013, 16:38

Salut à tous, c'est Cdbvs


Bon alors ça va mieux.
Hier soir j'ai essayé plein de combinaisons et j'ai aussi réfléchis car le problème ne pouvait pas être aussi compliqué que cela !

Donc, comme sa, ça fonctionne:

10 cls:mode 2
20 window 2,12,1,2: print"A":window 2,12,2,3: print"=========":window 2,12,3,4: print"B"
30 window 2,12,4,5: print"C":window 2,12,5,6: print"D":window 2,12,6,7: print"E":window 2,12,7,8: print"F":window 2,12,8,9: print"G" REM Graphic
46 window 2,12,20,21: print"_________":window 2,12,21,22: print"Total":window 2,12,22,23: print"_________":window 2,12,23,24: print"H"
50 window 60,80,1,25:line input"Texte A";a$:cls:input"B";b:cls:input"C";c:cls:input"D";d:cls:input"E";e:cls:linput"F";f:cls: input"G";g:cls REM Je laisse a$ pour les textes alphanumériques
60 window 2,12,1,2: print a$:window 2,12,3,4: print b:window 2,12,4,5: print c:window 2,12,5,6: print d:window 2,12,6,7: print e:window 2,12,7,8: print f:window 2,12,8,9: print g REM Print seul suivit d'une lettre alphanumérique fonctionne
70 window 60,80,1,25: print"Calculer les lignes: Oui, Passer tableau 2, Quitter"
75 z=b+c+d+e+f+g REM Si je mets à la 85ème ligne, ça retourne une erreur
80 z$=inkey$:if z$=""goto 80
90 if z$="o" then window 1,12,24,25: print z:window 24,80,24,25:goto 150
100 if z$="p" then goto 150:end
110 if z$="q" then stop:end
120 next:goto 70 REM Next pour remettre les valeurs à Zéro
150 window 14,24,1,2:line input"TexteB";a$;cls
160 window 14,24,1,2: print a$


Voilà.
J'améliore le programme et si j'ai le temps de l'écrire, je le mettrais en ligne.


Pour le moment, j'aimerais savoir comment faire pour enregistrer une capture d'écran ?
Je pense que ça doit être assez compliqué, étant donné que lorsque c'est écrit à l'écran, ça n'est plus en mémoire !
L'idée est de sauvegarder l'écran sur cassette pour ainsi avoir une sauvegarde étant donné que l'encre de l'imprimante est HS de chez HS !

Merci pour cette nouvelle aide et à bientôt.

Cdbvs.
:mrgreen:


PS: Pour Ritchy. T'en fais pas tu n'as pas travaillé pour rien, je vais me pencher sur ce que tu m'as dit.
Et merci à Krapoutchik et à Arkady.

Avatar du membre
ritchy
Posteur habitué
Posteur habitué
Messages : 15
Enregistré le : 21 déc. 2013, 22:23
Collectionneur (-euse) ? : Oui
Localisation : Annecy
Contact :

Re: Besoin d'aide en Basic Locomotive

Message non lu par ritchy » 22 déc. 2013, 17:38

Tu te trompes, ce qui est à l'écran EST en mémoire. Le CPC consulte justement cette mémoire pour afficher l'image.
De ce que j'ai lu rapidement, cette zone mémoire se trouve à l'adresse C000 (en héxadécimal), soit 49152 en décimal. Sa taille est de 16K.
Donc globalement, pour faire une capture d'écran il "suffit" de lire ces 16K de mémoire de les sauver sur disque.
Pour relire cette capture et l'afficher, il "suffit" de relire depuis le disque et de copier dans cette même zone mémoire.

Donc j'imagine que pour faire la capture tu devrais pouvoir faire ça en 1 ligne:

save "capture", &C000, 16384

et pour relire la capture:

load "capture", &C000

Il faudra bien faire attention à être dans le même mode graphique quand tu sauves et quand tu recharges, sinon ça affichera n'importe quoi ;-)

Tu me diras si ça marche, mais je suis confiant ;-)

Sources:
http://cpcrulez.fr/codingBOOK_nouvelles ... ns_014.htm
http://www.cpcwiki.eu/index.php/Locomot ... ameter3.5D

Ritchy.

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Re: Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 23 déc. 2013, 00:04

Salut c'est Cdbvs


Ha ! Bah, ok :mrgreen:

Merci Ritchy, je vais voir.
Je précise toute fois que je suis en mode 2 dans mon projet.

Merci pour les liens. Je teste et je te tiens informé... ainsi que les autres, bien sur :icon_smile:


A+
Cdbvs
:mrgreen:

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Re: Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 23 déc. 2013, 11:28

Salut Ritchy, c'est Cdbvs


J'ai fais des testes avec les lignes de codes que tu m'a donné avec les Mode 1 et Mode 2.
Le résultat est toujours le même, il retourne une erreur: Overflow Syntax Error


Donc cette solution ne donne rien.
Je regarderais plus attentivement sur le lien BASIC Locomotive que tu m'as donné, malheureusement en Anglais, mais qu'est ce qui est encore aujourd'hui écrit en Français ! Finalement...

Merci et à très vite.

Cdbvs
:icon_smile:

cdbvs
Posteur habitué
Posteur habitué
Messages : 18
Enregistré le : 02 mars 2013, 16:48
Collectionneur (-euse) ? : Oui

Re: Besoin d'aide en Basic Locomotive

Message non lu par cdbvs » 25 déc. 2013, 23:38

Salut c'est Cdbvs


J'ai des problèmes en Normandie avec le chauffage du voisin qui est dans la cours et qui fait un maximum de bruit. Je ne serais pas pris en Janvier pour le boulot que je souhaitais faire et comme le CPC 464 restera ici, je ne pourrais pas continuer mon projet de Tableur style Office d'ici mai ou juin. En été il n'y aura plus de problème avec les voisins et si j'ai trouvé un poste, je ne serais pas de retour avant au moins aout.

Donc, pour le moment, je stop le projet.


Merci donc pour tous ce que vous m'avez apportés et à bientôt.

Cdbvs
::wink:

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité