Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#51 20 Jun 2004 10:52:59

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

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...  :?

Code:

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.


Pensez à surveiller mes releases wink

Hors ligne

 

#52 20 Jun 2004 11:24:55

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

Code:

/*********************************************
**  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'?)


john_lenfr

Hors ligne

 

#53 20 Jun 2004 11:47:00

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

Code:

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 wink

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  roll

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.


Pensez à surveiller mes releases wink

Hors ligne

 

#54 20 Jun 2004 12:02:42

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

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:

Code:

/* 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':

Code:

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:

Code:

printf ("2 eme chiffre:%cn",chaine[1]);

Mais alors ça veu dire quoi '%s' ?


john_lenfr

Hors ligne

 

#55 20 Jun 2004 12:31:14

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

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?:

Code:

char tableau [200][4]

où 200 est le nombre de points et
     4    regroupe 'point+X+Y+Z'


john_lenfr

Hors ligne

 

#56 20 Jun 2004 12:35:57

Bija
Membre Communauté Graph100
Lieu: Nord de la France
Date d'inscription: 20 Apr 2004
Messages: 240
Site web

Re: Projet toponoff

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

Code:

printf("%s",chaine);

et ca affiche la chaine entiere
sinon pour un seul caractere c'est bien %c


" Ignorer l'impossiblité de ce que l'on tente reste l'un des ingrédients essentiels de la réussite "

Hors ligne

 

#57 20 Jun 2004 12:43:06

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

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?  yikes
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" )


Pensez à surveiller mes releases wink

Hors ligne

 

#58 20 Jun 2004 12:45:10

Bija
Membre Communauté Graph100
Lieu: Nord de la France
Date d'inscription: 20 Apr 2004
Messages: 240
Site web

Re: Projet toponoff

ben je vais tester ca alors !!


" Ignorer l'impossiblité de ce que l'on tente reste l'un des ingrédients essentiels de la réussite "

Hors ligne

 

#59 20 Jun 2004 12:45:57

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

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?


Pensez à surveiller mes releases wink

Hors ligne

 

#60 20 Jun 2004 12:51:36

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

Code:

         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
   

Code:

         if(x || y) 
            { 
               x--;
               a--; 
               if(x<0) { x=20; y--; } 
            } 

Pensez à surveiller mes releases wink

Hors ligne

 

#61 20 Jun 2004 13:02:54

Bija
Membre Communauté Graph100
Lieu: Nord de la France
Date d'inscription: 20 Apr 2004
Messages: 240
Site web

Re: Projet toponoff

ca a pas l'air de marcher enfin je vais regarder de plus pres ou sont les bugs

en plus

Code:

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)


" Ignorer l'impossiblité de ce que l'on tente reste l'un des ingrédients essentiels de la réussite "

Hors ligne

 

#62 20 Jun 2004 13:04:24

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

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:


john_lenfr

Hors ligne

 

#63 20 Jun 2004 13:10:15

Bija
Membre Communauté Graph100
Lieu: Nord de la France
Date d'inscription: 20 Apr 2004
Messages: 240
Site web

Re: Projet toponoff

pour mettre 2 chaines bout à bout il existe la fonction strcat de string.h

Code:

strcat(nom,nom1);

met la chaine nom suivie de la chaine nom1 dans nom


" Ignorer l'impossiblité de ce que l'on tente reste l'un des ingrédients essentiels de la réussite "

Hors ligne

 

#64 20 Jun 2004 13:45:40

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: Projet toponoff

euh si c'etait possible de bouger ce sujet dans le forum techniques...

Hors ligne

 

#65 20 Jun 2004 14:50:59

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

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?  yikes

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...


Pensez à surveiller mes releases wink

Hors ligne

 

#66 20 Jun 2004 14:54:42

Guest
Invité

Re: Projet toponoff

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?  yikes

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)

 

#67 20 Jun 2004 14:55:15

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

c malin :P


Pensez à surveiller mes releases wink

Hors ligne

 

#68 20 Jun 2004 15:53:48

Guest
Invité

Re: Projet toponoff

Code:

#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):

Code:

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?

 

#69 20 Jun 2004 16:48:54

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

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 ':

Code:

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 !


john_lenfr

Hors ligne

 

#70 20 Jun 2004 18:54:39

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

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:

Code:

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 wink


Pensez à surveiller mes releases wink

Hors ligne

 

#71 20 Jun 2004 19:42:36

Guest
Invité

Re: Projet toponoff

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?

 

#72 20 Jun 2004 19:44:55

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

8O Merci pour la trame. C'est super !! big_smile

J'espère qu'un jour j'atteindrai le meme niveau de programmation! roll


john_lenfr

Hors ligne

 

#73 21 Jun 2004 04:07:12

john_lenfr
Membre
Lieu: france
Date d'inscription: 14 Jan 2003
Messages: 56

Re: Projet toponoff

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)


john_lenfr

Hors ligne

 

#74 21 Jun 2004 04:17:35

[neo]f4kill
Programmeur Graph100
Lieu: montauban
Date d'inscription: 05 Oct 2003
Messages: 678
Site web

Re: Projet toponoff

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)


=> Auteur de : Code, Hot-dog (v alpha), Aspirin v1.2, Memory v1.0, Slider v1.0 + 2 ou 3 progs à la noi wink


http://www.danasoft.com/sig-fre.jpg

Hors ligne

 

#75 21 Jun 2004 04:53:00

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet toponoff

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  lol
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 lol), 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 wink

NB: les fonctins create_mem_zone et search_mem_zone permettent de manipuler tous les types de zone (basic, matrices, listes, autres...)


Pensez à surveiller mes releases wink

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr