Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » recuperer les elements d'une liste (30 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 18:32 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

Comment faire en C :

for a,1,dim(maliste)
disp maliste[a]
endfor


sachant que maliste est une liste enregistrée dans la TI.

je pense que ca va plus vite comme ca a expliquer.
-Edité le Lundi 29 août 2005 à 18:32 par k@z00-
    
./Post n°1   Marquer comme non lu.
Jfg Ecrit le: Lundi 29 août 2005 à 18:37 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


fffpppggg ?
Kill Mario
    
./Post n°2   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 29 août 2005 à 18:59 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Notre FAQ dit comment faire pour les matrices: http://tigcc.ticalc.org/doc/faq.html#63. Pour les listes, c'est encore plus simple (les matrices sont des listes de listes).

Pour commencer, tu peux utiliser la propriété de push_disp de pouvoir afficher plusieurs expressions à la fois: push_disp(top_estack-1); fait l'équivalent de toute la boucle TI-BASIC pour toi! Mais bien sûr, si tu veux utiliser autre chose que Disp, ça ne va plus passer.

Donc voici comment on traverse une liste:
  • Traversement séquentiel (le plus rapide vu l'organisation interne):
    top_estack--; // skip LIST_TAG
    while (*top_estack != END_TAG) {
    affiche(top_estack);
    }

  • Random access (utilisation de la liste comme un tableau comme on le ferait en TI-BASIC):
    top_estack--; // skip LIST_TAG
    int a;
    for (a=0; a<remaining_element_count(top_estack); a++) {
    affiche(EX_getArg(a));
    }

    Soit dit en passant qu'en C comme en TI-BASIC; il est conseillable d'appeler remaining_element_count (dim en BASIC) une seule fois et de garder le résultat dans une variable. Appeler remaining_element_count à chaque étape de la boucle comme tu le fais dans ton code BASIC et comme je l'ai fait dans ma traduction C est une perte de temps.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°3   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 19:06 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

mais ce que je veux, c'est lire une liste du var-link, et enregistrer chaque element dans une variable differente

exemple : {1,2,3,4}->maliste

et en C :

maliste[1]->az
maliste[2]->er
maliste[3]->ty
...
    
./Post n°4   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 29 août 2005 à 19:09 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Ben, à la manipulation avec estack.h, tu devras rajouter celle de la VAT avec vat.h. :)

Tu "ouvres" le fichier avec SymFindPtr, tu vérifies que le pointeur et le handle sont non-nuls, tu fais top_estack=HToESI(symentry->handle); et c'est parti. (Sauvegarde l'ancien top_estack pour le remettre à la fin.)

Pour créer les fichiers, tu utilises soit VarStore, soit SymAdd et HeapAlloc.

Toutes ces fonctions sont documentées dans la documentation de TIGCC.
-Edité le Lundi 29 août 2005 à 19:09 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°5   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 19:24 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

j'y arrive pas

j'ai ce bout de code :

SYM_ENTRY *sym_entry = SymFindPtr ("protsave", 0);
if (peek (HToESI (sym_entry->handle)) == LIST_TAG)
  {


  }


mais je ne sais pas quoi mettre dedans, j'ai eu le droit a des "internal error".
    
./Post n°6   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 29 août 2005 à 19:40 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


C'est parce que tu n'as pas bien lu la doc:
SYM_ENTRY *sym_entry = SymFindPtr (SYMSTR("protsave"), 0);

Et je me demande pourquoi je t'ai dit de tester si le sym_entry est non-nul. #roll# Et le handle aussi, d'ailleurs.
-Edité le Lundi 29 août 2005 à 19:41 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°7   Marquer comme non lu.
andoh_wilfried Ecrit le: Lundi 29 août 2005 à 20:05 Déconnecté(e)    Voir le profil de andoh_wilfried Envoyer un email à andoh_wilfried Envoyer un message privé à andoh_wilfried  

C'est l'imanquable debut. Si tu veux bien aprendre va vraiment falloir lire correctement la Doc sur l'estack et la recherche de fichier comme l'a precise K.K.


- top_estack
- next_expression_index
-GetIntArg
-GetStrinArg



De toute facon cela va te servir a chaque fois que tu codera un truc sur Ti.
pour la recherche et l'ecriture dans les fichiers, tu trouvera un article sur ce site.
    
./Post n°8   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 20:10 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

SYM_ENTRY *sym_entry = SymFindPtr (SYMSTR("protsave"), 0);
if (!sym_entry) break;
if (peek (HToESI (sym_entry->handle)) == LIST_TAG)
  {


  }


Je precise que le break sert pour sortir d'un switch.

Mon soucis est de trouver le bout de code a mettre a l'interieur des acolades...
-Edité le Lundi 29 août 2005 à 22:19 par k@z00-
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 29 août 2005 à 21:57 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Tu n'as toujours pas corrigé ton erreur. #roll# SymFindPtr prend un SYM_STR, pas une chaîne C.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 22:19 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

c'est quand j'ai recopié, dans la source j'ai corrigé ce pb. mais c'est pour "extraire" les elements de la liste que je bloc.
    
./Post n°11   Marquer comme non lu.
RHJPP Ecrit le: Lundi 29 août 2005 à 22:43 Déconnecté(e)    Voir le profil de RHJPP Envoyer un email à RHJPP Envoyer un message privé à RHJPP  


Comme ça, peut-être :

ESI element=HToESI (sym_entry->handle);
if (GetArgType(element)== LIST_TAG)
{
  element--;
  while(GetArgType(element)==POSINT_TAG)
  {
    printf("%d\n",GetIntArg (element));
  }
}
    
./Post n°12   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 23:09 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

ton code marche bien, mais il ne m'affiche que des 0.
alors que j'ai dans ma liste 0, 321, 40, 50


-Edité le Lundi 29 août 2005 à 23:13 par k@z00-
    
./Post n°13   Marquer comme non lu.
limmt Ecrit le: Lundi 29 août 2005 à 23:20 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


ESI element=HToESI (sym_entry->handle);
if (GetArgType(element)== LIST_TAG)
{
  element--;
  while(GetArgType(element)==POSINT_TAG)
  {
    printf("%d\n",GetIntArg (element));
    element--;
  }
}


peut-etre? ;)
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°14   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 23:27 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

format %d excepts type 'int', but argument 2 has type 'long unsigned int'

pour vos deux codes
    
./Post n°15   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 23:44 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

dans ma liste j'ai
{0,21,336,48}
et avec :
printf("%u%u",GetIntArg (element));
j'ai a l'ecran

000,210,336,048
    
./Post n°16   Marquer comme non lu.
RHJPP Ecrit le: Lundi 29 août 2005 à 23:49 Déconnecté(e)    Voir le profil de RHJPP Envoyer un email à RHJPP Envoyer un message privé à RHJPP  


Et avec :
printf("%u\n",(unsigned int)GetIntArg (element));
    
./Post n°17   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 23:49 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

j'ai trouvé :
printf("%lu",GetIntArg (element));
    
./Post n°18   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 23:50 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

il ne me reste plus qu'a enregistrer ces valeurs dans des variables C.
    
./Post n°19   Marquer comme non lu.
kaz00 Ecrit le: Lundi 29 août 2005 à 23:52 Déconnecté(e)    Voir le profil de kaz00 Envoyer un email à kaz00 Envoyer un message privé à kaz00  

le code final est donc :

SYM_ENTRY *sym_entry = SymFindPtr (SYMSTR("protsave"), 0);
    ESI element=HToESI (sym_entry->handle);
if (GetArgType(element)== LIST_TAG)
{
  element--;
  while(GetArgType(element)==POSINT_TAG)
  {
    
    printf("%lu\n",GetIntArg (element));
    
  }
  ngetchx();
}
    
  :: Index » Forum Ti68K » Programmation C » recuperer les elements d'une liste (30 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 47.51ms avec 18 requetes