papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Pour RMont Mar 19 Mar 2013 - 5:05 | |
| Dans un autre topic - RMont a écrit:
- pour ma part, je consulte tout les jours les codes postés dans l'espoir de voir comment faire fonctionner un tableau a 2 dimensions sans que systematiquement il faille passer par une case validation.
Franchement je n’ai pas compris ce que tu demandes au juste et je t’invite à poser des questions : il y aura toujours quelqu’un pour apporter la réponse. Ceci dit, voici quelques informations qui pourront t’être utiles. Un tableau, c’est quoi ?Un tableau est une variable constituée de plusieurs cases d'un type donné, chacune capable de mémoriser une information du type en question. Un tableau à une dimension est constitué d'une seule ligne et de plusieurs colonnes. Un tableau à deux dimensions est constitué de plusieurs lignes et de plusieurs colonnes. Le terme de liste ou vecteur est souvent utilisé pour désigner un tableau à une dimension. Le terme de matrice est parfois utilisé, comme en mathématiques, pour désigner un tableau à plus de une dimension. Il est assez fréquent d'avoir à utiliser de nombreuses données d'un même type... et il n'est pas vraiment pratique d'utiliser un grand nombre de variables différentes : premièrement, il faut trouver des noms pour toutes ces variables, mais, en plus, avoir des variables différentes ne permet pas de toutes les traiter dans une boucle. Un tableau permet de remédier à ces deux problèmes : plutôt que d'utiliser de nombreuses variables nommées a1, a2, a3, ..., a150, autant utiliser une seule variable, nommée, par exemple, 'a', qui contienne les 150 données. - Code:
-
DIM a(150) En réalité dans cette déclaration, la variable a contient 151 éléments puisque le 1er indice commence à 0 (zéro). Exemple 1 Nous allons remplir un tableau avec des nombres entiers générés aléatoirement, puis nous afficherons le contenu. - Code:
-
DIM tableau(9) : ' déclaration de la variable tableau à 10 éléments (de 0 à 9) dim i : ' variable compteur ' On remplit le tableau avec des valeurs aléatoires entre 1 et 100 for i = 0 to 9 : tableau(i) = int(rnd(100)+1) : next i ' On affiche les valeurs du tableau for i = 0 to 9 : print "case ";i ; " ---> "; tableau(i): next i Panoramic permet aussi de déclarer des tableaux à 2 dimensions. - Code:
-
DIM tab(10,20) permet de déclarer un tableau de 11 lignes (de 0 à 10) et de 21 colonnes ( de 0 à 20) Exemple 2 : Dans cet exemple, on mémorise dans un tableau à 2 dimensions (une matrice) les tables de multiplications de 6, 7 et 8. Remarque : on aurait pu nous dispenser d’utiliser un tableau pour ce genre de programme - Code:
-
DIM tab(10,3) DIM i,j
for j = 0 to 3 for i = 0 to 10 tab(i,j) = (i+1)*(j+5) next i next j
for i = 0 to 9 print "6 * ";i+1;" = "; tab(i,1) ; " "; print "7 * ";i+1;" = "; tab(i,2) ; " " ; print "8 * ";i+1;" = ";tab(i,3) next i
Voici un programme qui affiche la table de multiplication de 2 à 9 en n’utilisant pas les variables du type tableau. - Code:
-
' ****************************************************************************** ' ' Table_Multiplication.bas ' par Papydall ' ' ******************************************************************************
' Exemple d'appel des procédures
' ============================================================================== ' Ici débute le module principal du programme ' Il se limite à la seule procédure 'Demarrer' qui fait appel aux autres procédures Demarrer() end : ' Fin du programme ' ****************************************************************************** SUB Demarrer() Init() : ' Appel de la procédure d'initialisation Affiche("T A B L E D E M U L T I P L I C A T I O N",240,10) : ' Appel de la procédure d'affichage Affiche(string$(48,"*"),240,40) : ' 2ème appel de la procédure d'affichage avec d'autres paramètres for m% = 2 to 9 : ' Boucle d'appels de la procédure table avec passage de table(m%) : ' paramètre par valeur next m% END_SUB
' ============================================================================== ' ******** INITIALISATION ' Procédure INIT() sans paramètres d'appel mais les parenthèses sont obligatoires SUB init() dim m% : ' Seule cette variable est globale width 0,800 : height 0,700 : ' Dimension de la fénêtre d'affichage color 0,0,0,0 : font_color 0,0,255,0 : ' Fond noir, texte en vert font_size 0,12 : font_bold 0 : ' Taille de la police et affichage en gras caption 0,"Table de multiplication" : ' Titre de la page principale du programme END_SUB ' ==============================================================================
' ******** Afficher un texte à l'écran ' Le texte ainsi que la position de l'affichage sont passés comme paramètres ' formels par le module appelant ' Procédure Affiche : les 3 paramètres d'appel sont locaux SUB Affiche(texte$,colonne%,ligne%) print_locate colonne%,ligne% : print texte$ END_SUB ' ============================================================================== ' ******** Afficher la table ' Affiche une table de multiplication : le multiplicande(m%) est passé comme ' paramètre formel par le module appelant. ' Le multiplicateur i% est déclaré dans la procédure comme variable locale SUB table(m%) DIM_LOCAL i%,s$,lig%,col% : ' variables locales : à la sortie de la procédure ' elles seront automatiquement éliminées. affiche(string$(54,"_"),150,50): ' Une procédure peut appeler une autre col% = 150*(m%-1): lig% = 70 if col% > 600 col% = col%-600 : lig% = 320 end_if for i% = 1 to 9 s$ = str$(i%*m%) if i%*m% < 10 then s$ = " "+s$ print_locate col%,lig% : print str$(i%)+" X "+str$(m%)+" = "+s$ lig% = lig%+20 next i% affiche(string$(54,"_"),150,270) affiche(string$(54,"_"),150,500) END_SUB ' ==============================================================================
Et pour terminer je reprends ( en le mettant à la mode SUB) un programme de calcul des carrés magiques que j’ai posté à mes débuts. Ce programme utilise un tableau à 2 dimmensions. - Code:
-
' ****************************************************************************** ' * CARRE MAGIQUE PAR PAPYDALL ' * ' ****************************************************************************** dim n : ' ordre du carré magique doit être impair dim somme : ' Somme des toutes les lignes, des toutes les colonnes et des 2 diagonales principales dim titre$ : titre$ = "C A R R E M A G I Q U E D ' O R D R E " ordre() : caption 0,"Papydall vous présente " + titre$ +str$(n) dim matrice(n,n) : ' déclaration de la matrice (ou tableau) à 2 dimensions full_space 0 : color 0,0,0,0 : font_color 0,255,255,0: font_name 0,"consolas" magic() : ' Appel à la procédure du calcul du carré magique end ' ============================================================================== ' Saisie de l'ordre n du carré SUB ordre() dim_local r$, nmax nmax = 37 : ' Ordre max du carré à adapter selon la résolution de votre écran repeat : ' Cette boucle assure que l'ordre soit impair et compris entre 3 et nmax repeat : ' Cette boucle assure que le coefficient soit numérique r$ = message_input$("Entrer l'ordre du carré magique", "( impair et compris entre 3 et "+str$(nmax)+" )"+chr$(13)+"N = ",str$(nmax)) until numeric(r$) = 1 until val(r$) > 3 and val(r$) <= nmax and odd(val(r$)) = 1 N = val(r$) END_SUB ' ============================================================================== ' affichage du carré SUB affichage() dim_local i,j,a$ for i = 1 to n print : print "ligne" ; : a$ = str$ (i) : formatage(a$) : print ": " ; for j = 1 to n : a$ = str$ (matrice (i,j)) : formatage(a$) : next j next i print : print : print string$(50," "); print "La somme de toutes les lignes,toutes les colonnes et les 2 diagonales principales est : " ; somme END_SUB ' ============================================================================== ' calcul de la matrice SUB magic() dim_local i,j,n2,nombre n2 = n * n j = int(n / 2) : i = j + 1 for nombre = 1 to n2 if i < n : i = i + 1 : else : i = 1 : end_if if j < n : j = j + 1 : else : j = 1 : end_if while matrice(i,j) > 0 if i < n : i = i + 1 : else : i = 1 : end_if if j > 1 : j = j - 1 : else : j = n : end_if end_while matrice(i,j) = nombre next nombre somme = n * (n2 + 1) / 2 affichage() END_SUB ' ============================================================================== ' On ajoute les espaces necessaires pour la justification à gauche SUB formatage(s$) dim_local i,l,a$ l = len (s$): a$ = s$ a$ = string$(5-l," ") + a$ print a$ ;" "; END_SUB ' =============================== FIN ==========================================
Puisse ma prose te soit utile ! Et surtout pose toutes les questions sur lesquelles tu désires avoir des éclaircissements. On te repondra. | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 19 Mar 2013 - 5:09 | |
| Amen ... | |
|
RMont
Nombre de messages : 233 Age : 82 Localisation : charente maritime Date d'inscription : 29/12/2008
| Sujet: Re: Pour RMont Mer 20 Mar 2013 - 19:13 | |
| bonjour a tous. pour papydall. désolé papydall,je n'ai pu te dire merci (hier) pour ce tuto car j'ai procédé à une grosse maintenance de mon ordi (elimination des coockies , traces suspectes )etc etc. je vais étudier ces codes des que je peux.. [/left] | |
|