Forum Liberty Basic France

Le 11/03/2011 à 18h52

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/03/2011
Messages: 3
Bonjour à tous, :lu

Ayant pas mal pratiqué le Basic Amstrad CPC dans ma jeunesse (nostalgie... :\'( ), puis leTurbo Pascal Borland pendant mes études, je me remets doucement à la programmation sur mon PC.
Je cherchais un Basic performant, facile à prendre en main, si possible gratuit et je suis tombé sur Just Basic ! :|
Quel plaisir de voir un forum français consacré à ce langage et merci pour les excellents tutos qui me sont d'une grande utilité :clap

Au plaisir de vous lire,
Vincent

Web    
Le 11/03/2011 à 19h22

Administrateur

Groupe: Administrateur

Inscrit le: 24/09/2010
Messages: 238
Bonjour,

C'est un plaisir de te voir sur ce forum ! Nous sommes ravis que tu aimes les tutos, d'ailleurs s'il y a des parties obscures où les explications ne sont pas claires, ou si selon toi il manque quelque chose au tuto, dis le nous ;)

Bonne soirée,
--Nephthys
____________________

MSN Yahoo Web    
Le 12/03/2011 à 11h19

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/03/2011
Messages: 3
Merci pour ton accueil !
Les tutos sont très clairs et progressifs et sont une bonne préparation à comprendre l'aide de JB en anglais :top
J'ai quelques petites remarques concernant les tableaux (je les ai beaucoup manipulé en Pascal et peu en Basic..) à me confirmer éventuellement !
_ Ils doivent toujours être manipulés avec leur indice; si A et X sont deux tableaux d'entiers par exemple de même dimension, X est plein, A est vide. On ne pourra pas remplir A apparemment en écrivant A = X.
_ Ils sont toujours considérés comme des variables globales et j'ai cru comprendre que la transmission par adresse d'un élément du tableau à une Sub, call MaSubTableaux A(1) par exemple, était sans effet: A(1) ne sera pas modifié par la sub.



Edité par Murphy Le 12/03/2011 à 11h22

Web    
Le 12/03/2011 à 12h49

Administrateur

Groupe: Administrateur

Inscrit le: 24/09/2010
Messages: 238
Murphy:

_ Ils doivent toujours être manipulés avec leur indice; si A et X sont deux tableaux d'entiers par exemple de même dimension, X est plein, A est vide. On ne pourra pas remplir A apparemment en écrivant A = X.


Effectivement on ne pourra pas faire A=X. Il faudra faire X(n)=A(n). Voilà un petit exemple :
Code VB :
dim tableau(10,10)
dim tableauI(10,10)
 
print "tableauI(2,2) = ";tableauI(2,2)
 
tableau(2,2)=8
print "tableau(2,2) = ";tableau(2,2)
 
tableauI(2,2)=tableau(2,2)
print "tableauI(2,2) = ";tableauI(2,2)
 
end
 


Donc pour faire correspondre A et X il faudra faire X(n) = A(n) et ce pour chaque valeur de X. Donc le moyen le plus simple de faire cela est d'utiliser une boucle ;)

EDIT : Code pour faire copier un tableau dans un autre
Code VB :
k = 9
n = 9
' N'oubliez pas qu'un tableau commence à 0 donc pour avoir 100 cases il faut faire du 9*9

dim tableau(k,n)
dim tableauI(k,n)
 
print "---0-1-2-3-4-5-6-7-8-9--//Tableau d'origine tableau(x,x)"
print "------------------------"
for passageK = 0 to k 'On entre dans la boucle pour les colonnes
    print passageK;"| ";
    for passageN = 0 to n 'maintenant dans celle des lignes
       tableau(passageK, passageN) = rand(1,9) 'On attribut un chiffre aléatoire au couple colonne/ligne
       print tableau(passageK, passageN); " "; 'On affiche
    next
    print "|"
next
 
print
print
print
 
print "---0-1-2-3-4-5-6-7-8-9--//Tableau tableauI(x,x) vide car on a pas fait correspondre les deux"
print "------------------------"
for passageK = 0 to k
print passageK;"| ";
    for passageN = 0 to n
            print tableauI(passageK, passageN); " ";
    next
    print "|"
next
 
print
print
print
 
print "---0-1-2-3-4-5-6-7-8-9--//tableauI(x,x)=tableau(x,x) car à une boucle"
print "------------------------"
for passageK = 0 to k
print passageK;"| ";
    for passageN = 0 to n
            tableauI(passageK, passageN) = tableau(passageK, passageN)
            print tableauI(passageK, passageN); " ";
    next
    print "|"
next
 
 
end 'Fin du programme

 
'---------------------------------
'------------ FONCTIONS ----------
'---------------------------------

'Renvoie un nombre aléatoire compris entre min et max
function rand(min,max)
    rand = int(rnd(1)*(max-min+1))+min
end function
 
 


Murphy:

_ Ils sont toujours considérés comme des variables globales et j'ai cru comprendre que la transmission par adresse d'un élément du tableau à une Sub, call MaSubTableaux A(1) par exemple, était sans effet: A(1) ne sera pas modifié par la sub.


Si si, il est tout à fait possible de modifier la valeur que contient une adresse grace à une sub sans problème :

Code VB :
dim tableau(10,10)
 
tableau(2,2)=8
print tableau(2,2)
call MySub tableau(2,2)
print tableau(2,2)
 
end
 
Sub MySub tab
    tableau(2,2)=258969
End Sub


En espérant t'avoir aidé :)
____________________

MSN Yahoo Web    
Le 12/03/2011 à 15h31

Administrateur

Groupe: Administrateur

Inscrit le: 25/09/2010
Messages: 361
Non, ce que Murphy veut dire (comme j'ai compris) c'est que ceci ne fonctionne pas comme on le veux :
Code VB :
dim tbl(5)
 
tbl(2) = 1
 
print tbl(2)
call tableau tbl(2)
print tbl(2)
 
end
 
 
Sub tableau byref value
    value = 35
End Sub
 
 

Ça affiche
Code TEXT :
1
1

Donc ça ne change pas la valeur dans le tableau.

Merci Murphy, ça faut toujours plaisir d'avoir des retours positifs.
Par contre, je ne suis pas sûr que je vais ajouter ces détails dans le tuto, je pense que ça fera trop.

As-tu d'autre commentaire à faire ?

Cordialement
Jagang
____________________
J'ai toujours raison ! Sauf quand j'ai tort ...

Web    
Le 12/03/2011 à 16h32

Libertynaute Débutant

Groupe: Membre

Inscrit le: 11/03/2011
Messages: 3
Merci pour vos réponses !

Jagang:
Non, ce que Murphy veut dire (comme j'ai compris) c'est que ceci ne fonctionne pas comme on le veux :
Code VB :
dim tbl(5)
 
tbl(2) = 1
 
print tbl(2)
call tableau tbl(2)
print tbl(2)
 
end
 
 
Sub tableau byref value
    value = 35
End Sub
 
 

Ça affiche
Code TEXT :
1
1

Donc ça ne change pas la valeur dans le tableau.

oui, c'est cela. En fait je voulais créer une sub qui travaille sur un tableau (une sub de saisie de données par exemple) qui aurait pu être passé par adresse; mais j'ai contourné le problème

Code VB :
' ************ Saisie de deux ensembles d'entiers A et B  ************

dim A(10), B(10), X(10), X$(10)
 
longA = 0 : longB = 0
 
 
   '********************** Saisie *********************************

call Saisie "A", longA
if longA > 0 then
    for j = 1 to longA
        A(j) = X(j)
    next j
end if
call Saisie "B", longB
if longB > 0 then
    for j = 1 to longB
        B(j) = X(j)
    next j
end if
end
' **************************************************************************************************
 ' *********** Sous-Programme de saisie *****************

sub Saisie Nom$, byref long
print"Saisie des éléments de "; Nom$
print"Saisissez 10 entiers au maximum, tous distincts. Taper * pour finir la saisie."
i = 0
do
   i = i + 1
   input "Nombre "; i ; "_>"; X$(i)
   if X$( i ) <> "*" then
                                    k = 0
                                   do
                                        k = k + 1
                                   loop until X$(k) = X$(i)
                                   if k < i then i = i - 1 : print "déjà entré !" else  X ( i ) = val(X$( i ))
    end if
loop until ( X$( i ) = "*")  or ( i = 10 )
if X$(i) = "*" then long = i - 1 else long = 10
end sub


Web    

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie