Vous n'êtes pas identifié.
8O
:beurk: (désolé Bija :oops: )
mets au moins des "else" devant chaque if a partir du deuxieme dans cette longue liste, ca ira deja bcp plus vite... :?
if (i==30 && mode==1) {nom[a]='a'; gotoxy(x,y); printf("a");test++;} else if (i==30 && mode==2) {nom[a]='A'; gotoxy(x,y); printf("A");test++;} else if (i==48 && mode==1) {nom[a]='b'; gotoxy(x,y); printf("b");test++;} else ...
Tu dois utiliser la lib "memzone" de 2072... Je ne sais pas ce qu'il y a comme doc à son sujet, mais le readme qui l'accompagne est normalement assez complet.
Hors ligne
/********************************************* ** memory_zone_libraries release 1.04 ** ** ** ** Copyright (c) John Wellesz 2001 - 2004 ** ** All rights Reserved. ** *********************************************/ #include <stddef.h> /* * You must include this file in your source code and add mem_zones.c to your makefile or project file. * #include "mem_zones.h" */ /* * This structure is used by all the functions * to have information about the memory zone. * you have to define one and init it with the * function search_mem_zone. */ struct memory_zone { int b_ztype; // indicates the zone id unsigned int b_offset; // --| unsigned int b_segment; // --| point on the size of the zone (3 bytes before the name). unsigned int b_inner_offset;//point on the offset where it cans start to write/read data. unsigned int b_size; //total zone size. unsigned int b_real_size; //the real size available for data (used to prevent overflow). unsigned char b_name[10]; //name of the zone. unsigned char b_password[10];//password (for basic files only). }; // MACRO FOR COMPATIBILITY WITH OLDER VERSONS OF THIS LIB #define search_basic_file(a,b) search_mem_zone(1,a,b) #define BASICfile memory_zone #define read_toBfile read_mem_zone #define write_toBfile write_mem_zone #define clear_basfile clear_mem_zone // Flags for the function create_mem_zone #define CREATE_ZONE 0// Create a memory zone, if zone already exists it returns -1 #define RESIZE_ZONE 2// create or change the size of an existing zone. #define DELETE_ZONE 3// can delete a memory zone. // ######## internal use only ######### struct zone_info { unsigned int offset; unsigned char seg; }; struct zone_info_num { unsigned int num; }; // #################################### #if __cplusplus extern "C" { #endif /* ----------- create_mem_zone ----------- * Creates a memory zone specified which type is given by "id" with the name "zonename", and a size of "size" bytes. * (size >= 14 and >=24 for a basic file) * it returns -1 in case of failure (already exist...) and -2 if not enough memory to create the file * or not enough memory for the function itself. * flag can be one of these values: CREATE_ZONE RESIZE_ZONE DELETE_ZONE */ int create_mem_zone(unsigned char zone_id, unsigned char *zonename, unsigned int size, int flag); /* ----------- search_mem_zone ----------- * This function must be used one time before functions read_mem_zone, write_mem_zone or change_password * to init the memory_zone structure * then you will have to send the ====> ADDRESS <==== of this structure to the other functions. * (you will have problems if you don't correctly understand the meaning od "address") * * zonename is the name of the memory zone * zone_id is the id type of the memory zone you want to find * bf is the name of a memory_zone structure * * this function returns the size of the memory zone if found and -1 if not. */ long search_mem_zone(int zone_id, unsigned char *zone_name, struct memory_zone *bf); /* ----------- write_mem_zone ----------- * * This function works like the write function for real files, * src can be everything, an int, a string, a structure... * offset is the location in the memory zone where to write. * length is the length in byte of src to write, if length > b_size then only b_size -24 are written. * So your calculator memory is protected it CAN only write within the memory zone pointed by bf. */ unsigned int write_mem_zone (struct memory_zone *bf, const void *src, unsigned offset, unsigned length); /* ----------- read_mem_zone ----------- * works like the write one, dest can be everything an int, a string... */ unsigned read_mem_zone (struct memory_zone *bf, void *dest, unsigned offset, unsigned length); /* ----------- clear_mem_zone ----------- * This fill a memory zone with NULLs. */ void clear_mem_zone (const struct memory_zone *bf); /* ----------- change_password ----------- * Well this change the password of a basic prog, password is the new one. * */ void change_password (struct memory_zone *bf, unsigned char *password); /* ----------- afxleft ----------- * This return the available memory for user's data in the afx memory. * */ unsigned long afxleft (void); /*############### The functions below are used by other function of this lib ###############*/ /* ----------- tell_mem_zone_seg ----------- * This function returns a pointer to the first zone which type is id (0<=id<0xF). */ char far *tell_mem_zone_seg( unsigned char id ); /* -------- huge_movedata -------- * Can move till 0xFFFFFFFF bytes of memory! */ void huge_movedata(unsigned int src_seg, unsigned int src_off, unsigned int des_seg, unsigned int des_off, unsigned long num); void my_movedata(unsigned int src_seg, unsigned int src_off, unsigned int des_seg, unsigned int des_off, size_t size_to_copy, int direction); /* -------- init_area -------- * clear an area of "size" (<65536) bytes of memory since("direction"==0) or till(direction==1) b_segment:b_offset with the * two bytes contained in "value" */ void init_area(unsigned int b_segment, unsigned int b_offset, unsigned int msize, unsigned int value, int direction); unsigned long give_absolute_add(void far *pointer); void far *give_far_pointer(unsigned long abs_add); #if __cplusplus } #endif #define GIVE_SEG_ABSADD(a) ((u_int)((a)>> 4)) #define GIVE_OFF_ABSADD(a) ((u_int)((a) & 0xF))
:oops: Voici la lib memzone mais je comprend rien.(C'est de l'anglais!)
Quelqu'un peu m'aider. Déja que quand les fonctions sont en fr je compren pa alors en anglais la je sui largué! :oops:
ps: c'est quoi la différence entre 'printf' et 'sprintf' (quelle est la syntaxe de 'sprintf'?)
Hors ligne
void bscan (char* nom, int longueur) { int i,x,y,test; int mode=2; int a=0; char c; char lettres[3][] = { "**1234567890****************************************.", "**uvwpqrmnoz******e*ty*i******asdfghjkl******xc*b*** ", "**UVWPQRMNOZ******E*TY*I******ASDFGHJKL******XC*B*** " }; x=1; y=2; gotoxy(1,8); printf("MODE :"); do { gotoxy(x,y); printf("_"); test=0; i=getkb(); if(i>52) { if(i==56) // chang de mode { mode = (mode+1)%3; gotoxy(8,8); printf("%c", (mode==0? '0' : lettres[mode][30]) ); } else if(i==83 || i==75) // retour arriere { if(x || y) { gotoxy(x--,y); printf(" "); a--; if(x<0) { x=20; y--; } } } c='*'; } else c=lettres[mode][i]; if(c != '*') // lettre valide { nom[a++]=c; gotoxy(x++,y); printf("%c",&c); if(x==21) { y++; x=0; } } } while(i!=28); nom[a] = ' '; }
fonction de Bija retravaillée (mais non testée!). Essaie pour voir
Lol t'étais pas obligé de poster le fichier memzone.h, on l'a aussi...
Il me semblait qu'il devait y avoir une aide en francais qq part
edit: sprintf: idem que printf mais pour écrire dans une chaine de caracteres et non directement à l'écran. Le premier argument est la chaine en question dans laquelle on écrit, la suite est comme printf.
re-edit: il manquait la déclaration du caractere 'c' dans ma fonction.
Hors ligne
Je te remercie Julien, le problème c'est que la fonction de Bija ne me fait affficher que des caractère.
Mais moi en meme temps que je les afffichent il fau que je les mémorisent.
C'est pourquoi j'ai commencé à faire ça:
/* fonction de saisie avec enregistrement */ #include <stdio.h> #include <stdlib.h> #include <conio.h> void saisie (int x,int y, char *chaine, int max_car) { char car= ' '; int nb_car=0; gotoxy (x,y); car=getch(); while ((car!= 28) && (nb_car<max_car)) { /* Ajout du caractere ds le tableau */ chaine [nb_car]=car; /* Affichage a l ecran */ printf ("%c",chaine [nb_car]); /* Mise a jour de la position dans le tableau */ nb_car ++; /* Mise a jour de la position a l ecran */ x++; gotoxy (x,y); /* Saisie d un nouveau caractere */ car= getch(); } chaine [nb_car]=0; } #include <casio3.h> #include <saisie.h> #include <stab.h> main() { char chaine[11]; /*saisie de 11 caractères*/ char message [] = "Votre saisie:"; clrscr(); gotoxy(1,3); printf ("%s", message); /* Laisse la place pour le 0 binaire de fin de chaine */ saisie(1,4,chaine,10); /* affichage du resultat */ gotoxy(1,5); clrscr(); printf ("Votre saisie: %sn",chaine); /* attente pour visualisation */ wait(50); getch(); /* retour menu */ return(0); }
Dis moi ce que tu en penses?
Après j'ai essayer d''afficher par exemple le 2eme caractère saisi en tapant ça dans 'main':
printf ("2 eme chiffre:%sn",chaine[3]);
Mais ça n'affiche rien sur l'écran graph 100 !?!
[edit] : j'ai pas essayé la fonction de Bija remaniée mais lui en aura peu etre besoin. En tout cas merci de me consacrer du temps.
C'est bon j'ai mis:
printf ("2 eme chiffre:%cn",chaine[1]);
Mais alors ça veu dire quoi '%s' ?
Hors ligne
Maintenant que j'ai trouvé ça (la saisie) il me faut organiser au mieux mes tabeaux pour pouvoir rappeler les données.
Il me faut un truc comme ça:
Tableau:
------------Colonne 1 l Colonne 2 l Colonne 3 l Colonne 4
______________________________________________________
Lignes......matricule l coordonnée l coordonnée l coordonnée
..............du point.....l........ X.........l........Y...........l........Z
Je déclare mon tableau comme ça?:
char tableau [200][4]
où 200 est le nombre de points et
4 regroupe 'point+X+Y+Z'
Hors ligne
merci pour avoir rmaniée ma fonction ca allégera et simplifiera un peu mon code !!
quand à rajouter des else pour chaque ligne je trouve que ca complique inutilement vu que la fonction est deja tres rapide donc pas les accélérations ne semblent pas indispensables sauf si bien sur elles simplifient le code
en tout cas je vais tester ca !!
john_lenfr %s ca veut dire chaine de caracteres donc il faut faire par exemple
printf("%s",chaine);
et ca affiche la chaine entiere
sinon pour un seul caractere c'est bien %c
Hors ligne
Je te remercie Julien, le problème c'est que la fonction de Bija ne me fait affficher que des caractère.
Mais moi en meme temps que je les afffichent il fau que je les mémorisent.
Pourquoi faire?
En fait ils sont mémorisés (ils sont dans la chaine "nom" de la fonction), mais ca n'a pas de sens d'utiliser le contenu de cette chaine avant qu'elle ne soit complète (enfin, c'est rarement utile)...
Et puis, qd un programme dois sauvegarder des données pour qu'elles restent en mémoire par la suite, ça se fait toujours au moment de la fermeture du prog, ou lorsqu'on demande une sauvegarde...
Un prog qui manipule un fichier par exemple, en supposant qu'il puisse l'éditer, ne va jamais travailler directement avec le fichier... On charge d'abord toutes les données, on les manipule et puis quand le traitement est fini, on réenregistre le tout: on va rarement aller modifier "en live" les données situées "en dehors du prog" lui-même!
Donc aller enregistrer dans une memzone le contenu d'une chaine de caractere en cours de saisie, ca n'a pas de sens... :?
ps: (je rappelle que je n'ai rien testé, c fait "à l'oeil" )
Hors ligne
Au fait, ta fonction saisie() a le meme comportement que celle de Bija, je vois pas ou est la différence concernant la sauvegarde des caracteres entrés?
Hors ligne
if(x || y) { gotoxy(x--,y); printf(" "); a--; if(x<0) { x=20; y--; } }
Ce morceau-là dans ma fonction va poser problème... Essayez en remplacant par
if(x || y) { x--; a--; if(x<0) { x=20; y--; } }
Hors ligne
ca a pas l'air de marcher enfin je vais regarder de plus pres ou sont les bugs
en plus
char lettres[3][];
n'est pas accepté
c'est pas grave je l'ai remplacé les crochets vides par [60] mais j'aimerais comprendre pourquoi c'est refusé (compilé avec TC)
Hors ligne
En fait ils sont mémorisés (ils sont dans la chaine "nom" de la fonction), mais ca n'a pas de sens d'utiliser le contenu de cette chaine avant qu'elle ne soit complète (enfin, c'est rarement utile)...
Et puis, qd un programme dois sauvegarder des données pour qu'elles restent en mémoire par la suite, ça se fait toujours au moment de la fermeture du prog, ou lorsqu'on demande une sauvegarde...
Un prog qui manipule un fichier par exemple, en supposant qu'il puisse l'éditer, ne va jamais travailler directement avec le fichier... On charge d'abord toutes les données, on les manipule et puis quand le traitement est fini, on réenregistre le tout: on va rarement aller modifier "en live" les données situées "en dehors du prog" lui-même!
Donc aller enregistrer dans une memzone le contenu d'une chaine de caractere en cours de saisie, ca n'a pas de sens... :?
Ok. Merci pour tes conseils. Je sai maintenant ce que je vais faire.
Je vai appeler plusieurs fois la fonction bscan de Bija et à chaque fin de saisie je vai sauvegarder 'nom' dans matricule puis 'nom' ds 'X' puis nom dans 'Y' et enfin 'nom' dans 'Z'.
Je mettrai tous ça au final dans le tablo, maintenant je sai pa commen je vai faire.(pa assez de connaissances pour l'instant pour imbriquer tt ça correctement)
:arrow:
Hors ligne
pour mettre 2 chaines bout à bout il existe la fonction strcat de string.h
strcat(nom,nom1);
met la chaine nom suivie de la chaine nom1 dans nom
Hors ligne
euh si c'etait possible de bouger ce sujet dans le forum techniques...
Hors ligne
char lettres[3][] = { "**1234567890****************************************.", "**uvwpqrmnoz******e*ty*i******asdfghjkl******xc*b*** ", "**UVWPQRMNOZ******E*TY*I******ASDFGHJKL******XC*B*** " };
où est-ce que tu as vu un ";" toi?
C'est normal que ca soit pas accepté, tu peux pas déclarer un tableau sans donner sa taille... si tu écris juste "char lettres[3][];" alors évidemment ca n'ira pas, par contre si tu précises le contenu après il n'y a pas de problèmes...
Hors ligne
Code:
char lettres[3][] = { "**1234567890****************************************.", "**uvwpqrmnoz******e*ty*i******asdfghjkl******xc*b*** ", "**UVWPQRMNOZ******E*TY*I******ASDFGHJKL******XC*B*** " };où est-ce que tu as vu un ";" toi?
![]()
C'est normal que ca soit pas accepté, tu peux pas déclarer un tableau sans donner sa taille... si tu écris juste "char lettres[3][];" alors évidemment ca n'ira pas, par contre si tu précises le contenu après il n'y a pas de problèmes...
tout à la fin, après l'accolade (si ça peu aider)
Hors ligne
#include <lib de Bija> main() { /* declarations */ char chaine[11]; //char tablo[200][4]; char X[15]; char Y[15]; char Z[15]; char matricule[15]; clrscr(); gotoxy(1,1); printf("matricule?"); bscan (chaine,15); sprintf (matricule,"%s",chaine); wait(50); clrscr(); printf ("X=?"); bscan (chaine,15); wait(50); sprintf (X,"%s",chaine); clrscr(); printf ("Y=?"); bscan (chaine,15); wait(50); sprintf (Y,"%s",chaine); clrscr(); printf ("Z=?"); bscan (chaine,15); wait(50); sprintf (Z,"%s",chaine); /* affichage du resultat */ clrscr(); printf ("matricule: %sn",matricule); printf (" X= %sn",X); printf (" Y= %sn",Y); printf (" Z= %sn",Z); printf (" fin nn"); /* attente pour visualisation */ while(getkb()!=28); /* retour menu */ return(0); }
Alors voila finalement ça me donne ça.
Comment faire pour organiser ça dans un tableau pour pouvoir récupérer mes données et les rentrer au fur et à mesure (cad la ou ya de la place):
Tableau: ------------Colonne 1 l Colonne 2 l Colonne 3 l Colonne 4 ______________________________________________________ Lignes......matricule l coordonnée l coordonnée l coordonnée ..............du point.....l........ X.........l........Y...........l........Z
Il faut initialiser le tableau puis lui rentrer dans l'ordre le matricule(colonne 1, ligne 1) la coordonnée en X(colonne 2, ligne 1) la coordonnée en Y (colonne3,ligne1) la coordonnée en Z (colonne 4, ligne 1)
Puisn il faut que je rentre le point suivant sur la ligne 2.
Comment organiser la saisie de telle façon que tout aille à la suite?
Comment faire pour énumérer(ressortir) ce qu'il y a dans un tableau?
Je n'ai pas trouvé comment initialiser un tableau sachant que je veux mettre la valeur -3.14 dans toutes les cases, pour pouvoir les comparées et ainsi pouvoir rentrer mes coordonnées au fur et à mesure.
Sachant que: ' tablo1 [200][4]; '
Comment faire rentrer la valeur -3.14 dans chaque case et après afficher toutes les valeurs pour vérifier que le tableau a bien été initialisé?
Sinon Julien dans ce code à quoi sert le ' %3 ':
if(i==56) // chang de mode { mode = (mode+1)%3; gotoxy(8,8); printf("%c", (mode==0? '0' : lettres[mode][30]) ); } else if(i==83 || i==75) // retour arriere {...
Merci !
Hors ligne
Bon déjà tu veux entrer des nombres à virgule, donc des char ca n'ira pas, il te faut des float (un char est un entier compris entre -128 et 127). Cependant pour lire une chaine de caractere tu dois bien sur utiliser des char: ce qu'il te faudrait à ce moment-là c'est une fonction "str2float" qui va recevoir une chaine de caracteres (du genre "-3.14") et qui va te renvoyer la valeur représentée (ici un float valant -3.14).
Par contre, je ne sais pas quelle forme tu veux donner au "matricule"... c'est un mot, un entier, ou un réel? (un réel j'imagine vu qu'il doit etre placé dans le meme tab que x,y et z)
Pour traiter tous les points voulus, tu peux envisager qq chose comme ca:
void main() { /* declarations */ char chaine[25]; // vaut mieux la faire trop grande que trop petite float tablo[200][4]; // tes valeurs sont des floats int i, j, nbrePts = 100; // valeur a ajuster selon les besoins char* demandes[] = { "matricule?", "X=?", "Y=?", "Z=?" }; for(i=0; i<nbrePoints; i++) // pour chaque point { for(j=0; j<4; j++) // pour chacune des 4 valeurs caractérisant le point { clrscr(); gotoxy(1,1); printf("%s", demandes[j]); //"matricule?" ou "X=?" ou "Y=?" ou "Z=?" bscan (chaine,15); // saisie de la valeur tablo[i][j] = str2float(chaine); // enregistre la valeur saisie, apres "traduction" wait(50); } /* affichage du resultat */ clrscr(); printf ("matricule: %fn", tablo[i][0]); printf (" X= %fn", tablo[i][1]); printf (" Y= %fn", tablo[i][2]); printf (" Z= %fn", tablo[i][3]); printf (" fin nn"); /* attente pour visualisation */ while(getkb()!=28); } // passe au point suivant /* retour menu */ }
"x%3" ( x 'modulo' 3 ) donne le reste de la division de x par 3, qui sera tjs une valeur entiere parmi 0,1 et 2. J'ai mis ca pour que le mode ne puisse pas valoir 3 par exemple et revienne à 0 directement
Hors ligne
Par contre, je ne sais pas quelle forme tu veux donner au "matricule"... c'est un mot, un entier, ou un réel? (un réel j'imagine vu qu'il doit etre placé dans le meme tab que x,y et z)
Les matricules sont soit des nombres entiers(100,200,300..) soit des lettres (A,B,C,D,....) soit des 'composé des deux' (ST1000,ST2000,ST3000)
ça va changer le type de saisie... comment réadapter le programme?
8O Merci pour la trame. C'est super !!
J'espère qu'un jour j'atteindrai le meme niveau de programmation!
Hors ligne
Je vien de me rendre compte, en étudiant ton prog qu'ill me faut quelque chose de beaucoup plus complexe que ça.
Déjà, je ne connai pa le nombre de points que je vais rentrer.(si la personne commence à compter ses points avant de les rentrer et s'il y en a par exemple 152 elle a pas fini son boulo!)
C'est poukoi je ve initialiser un tableau en metant la valeur -3.141592654 (moins pi:valeur quasiment improbable à obtenir comme coordonnée) dans chaque case(parce que si je l'initialise à zéro, je ne peu pa avoir de points de coordonnées X=0,Y=0,Z=0 !!).
Ensuite, je fait un test:
-s'il y a la valeur -3.141592654 ça veu dire que la case est libre. Je peu donc saisir la valeur et l'enregistrer dans le tablo.
-s'il y a une valeur différente de -3.141592654 ça veu dire qu'il y a déja un point d'enregistrer. Je doi donc mettre mon point à la suite, c'est à dire dès que je rencontre la valeur -3.141592654.
Ensuite, dans mes calculs, il me fodra une fonction qui me permettra de resortir les coordonnées d'un point, seulement en rentrant son matricule(évite de rentrer les coordonnées des point à chaque calcul),et pour m'y retrouver en programmant.
Puis, une fois les nouveau points calculés, il fodra les mettre eux aussi à la suite de ceux déja saisis.
On a alors dans l'ordre: les points saisis, puis les points calculés.
TOUS ces points peuvent resservir pour un autre travail (complètement différent parfois). Il faut donc les sauvegarder avec le maximum de précision cad avec le maximum de chiffres après la virgule.
Il faut aussi sauvegarder le tablo: si je sor du programme et que j'y retourne, TOUS mes points doivent encore être la!
Voila, j'espère que c'est clair Julien et que tu pouras m'aider.
Pour les zones mémoires de memzone, ça ne parle que des fichiers Basics(création, mot de passe, suppression) qu'elles sont les fonctions qui me permettent de faire une sauvegarde de mon travail?(mon tablo)
Hors ligne
je pense que ce n'est pas une bonne idée ton système avec pi ...
d'ailleur tu n'en a pas besoin ..;
si tu met tes points les un à la suites des autres par exemple et que tu a une variable pour savoir combien il y a de points ... tu n'a pas besoin de te casser pour savoir si c'est un point ou pas (chaque case de ton tableau)
si tu compte en suprimer tu peux simplement décaler ceux qui sont à la suite..
tu peux également faire des tableaux dynamiques .. mais je c plus trop comment sa marche (julien devrait le savoir nan?)
sa complique un peu la chose mais tu n'est plus limité en nombre de points que par la taille de la mémoire!
(alors qu'avec ton système tu est limité par la taille de ton tableau...)
pour les memzones je peu pas trop t'aider vu que j'y é jamais touché (mais sa va pas tarder)
Hors ligne
Je confirme ce qu'a dit neo... le système avec pi me semble assez peu pratique.
En fait il faudrait presque envisager deux tableaux, l'un pour les valeurs saisies, l'autre pour les résultats de calculs par exemple... Mettre tous les points dans un tableau unique n'est pas une bonne idée selon moi.
J'espère qu'un jour j'atteindrai le meme niveau de programmation!
Oui sauf que ça c du genre hyper basique
Le "problème" c'est qu'en fait cette gestion des points n'est pas compliquée à faire pour qqn qui est "habitué" à ce genre de trucs... Personnellement moi je créerais direct une classe ou une structure pour définir ce qu'est un "Point" (ici une chaine de char + 3 float), et j'utiliserais des listes chainées pour pouvoir facilement récupérer des points dans l'ensemble, les changer de place etc... Seulement ça fait appel à des notions qu'on n'apprend pas directement en commençant le C (en fait ça ça serait même du C++), donc il faut essayer de trouver des solutions plus basiques et nettement moins performantes... :?
Ou alors il faudrait que quelqu'un te crée tous les objets utiles pour ton prog (un "point", un "ensemble de points", ...) en leur donnant toutes les fonctionnalités que tu souhaites (un point peut faire en sorte d'etre saisi au clavier, un ensemble de points peut s'enregistrer en memzone etc), et par la suite tu pourras utiliser ces objets meme sans trop savoir comment ils fonctionnent, il suffit juste de savoir ce qu'ils "savent faire"... (c'est le principe d'encapsulation du c++)
Evidemment il vaut mieux que tu saches quand même +/- comment ça marche, mais dans un premier temps tu pourras créer un prog correct (je sais pas si tu es pressé de pouvoir l'utiliser ou quoi ), et ca évitera de trop se casser la tête à vouloir faire qq chose de complexe avec juste des notions de base... Faut voir ce que t'en penses
NB: les fonctins create_mem_zone et search_mem_zone permettent de manipuler tous les types de zone (basic, matrices, listes, autres...)
Hors ligne