Ascur Le 15/11/2002 à 08:55 Est-ce qu'on peut utiliser des listes en C ?
Si oui, comment ?
Ascur Le 15/11/2002 à 11:50 Heu...
En fait je parlai des listes comme en TI-Basic avec { qqch , " autre chose ", etc}
Va lire un tuto sur le C avant de poser ce genre de questions !
Le C permet d'utiliser des listes (plutôt appelées tableaux à une dimension).
Mais ces listes sont différentes de celles que tu as l'habitude d'utiliser en BASIC.
Je te conseille d'aller sur www.codeur.org et de chercher des tutoriaux sur le C.
On peut aussi utiliser les listes TI-BASIC en C sur TI-89/92+/V200. Ascur, tu veux en faire quoi? Les lire? Les modifier? Rajouter/supprimer des éléments?
Ascur Le 16/11/2002 à 12:29 En fait, je voudrais créer une liste, mettre des valeurs dans celle-ci, modifier ces valeurs, agrandir la liste, afficher les valeurs de celle-ci.
Merci
Zeph Le 16/11/2002 à 12:39 He bien alors la réponse de Jackiechan convient parfaitement. Ce genre de question porte sur les bases du C, et ça a sa réponse dans n'importe quelle documentation digne de ce nom.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
* créer un tableau en C: int *l=malloc(12*sizeof(int));
* mettre des valeurs dans le tableau en C: [i]int i; for(i=0;i<12;i++) l=i;
* agrandir le tableau: l=realloc(l,123);
* afficher les valeurs: [i]for(i=0;i<123;i++) {printf("%d",l);ngetchx();}
* Avant de quitter le programme, il faudra détruire le tableau: free(l);.
Tu peux aussi faire ces mêmes opérations sur une liste TI-BASIC, mais c'est plus compliqué (et plus lent).
Ascur Le 18/11/2002 à 13:32 Comment récupérer une liste passée en argument et utiliser celle-ci ?
Ascur Le 18/11/2002 à 16:48 ...et quel est l'équivalent en C de dim(liste) du TI-Basic ?
Zeph Le 18/11/2002 à 17:44 Y'a pas, tu peux utiliser l'astuce "sizeof(liste)/sizeof(liste[0])", c'est à dire diviser la taille de la liste par la taille d'un element.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
il veut la ongueur d'une liste TI-basic, non ?
parce que la longeur d'une liste C, tu la connais forcément, vu que c toi qui la fixe...
Zeph Le 18/11/2002 à 18:47 Bah non, si tu la malloc, dans certains cas tu ne connais pas sa taille. Je me suis déjà retrouvé dans ce cas.
Et puis de toute façon sa liste Ti-Basic il va la stoquer dans un tableau en C, donc il aura besoin de calculer la taille de CE tableau.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Link Le 18/11/2002 à 19:00 Hé, dans une liste TI-Basic, les éléments n'ont pas tous la même taille!
Ils sont stockes dans la EStack comme des paramètres, juste entourés d'un LIST_TAG et d'un END_TAG!

Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.
Non.
Ça va lui donner la taille réservée pour le tableau si c'est un tableau de taille fixe, ou alors n'importe quoi si c'est un tableau alloué dynamiquement avec malloc, mais en tout cas pas le vrai nombre d'éléments. Ce qu'il veut, c'est probablement top_estack--; (pour sauter le LIST_TAG), suivi de ArgCount().
Ascur Le 19/11/2002 à 08:58 Pourqui cette fonction renvoie - t - elle une liste de chiffres et pas les noms des répertoires ??
void _main(void)
{
ESI argptr;
SYM_ENTRY *sym;
ESI argument;
char *ptr;
int *liste = malloc(sizeof(int));
short i;
unsigned short arg;
SYM_ENTRY *SymPtr = SymFindFirst(NULL,4);// début de la recherche des repertoires de la TI
push_END_TAG();
while(SymPtr)
{
push_ANSI_string(SymPtr->name);
SymPtr = SymFindNext();
}
push_LIST_TAG();// renvoie la liste contenant les repertoires de la TI
argptr = top_estack;
arg = remaining_element_count(argptr);
*liste = realloc(liste,arg*sizeof(int));
liste[1] = top_estack;
for(i=2;i<arg;i++)
{
liste[i] = next_expression_index((ESI*)liste[i-1]);
}
clrscr();
for(i=0;i<123;i++)
{
printf("%d",liste[i]);
}
ngetchx();
}
Kevin Kofler Le 19/11/2002 à 13:04Edité par Kevin Kofler le 19/11/2002 à 13:06 Parce que ton tableau C est un tableau d'entiers. Il te faut un tableau de chaînes de caractères:
[i]char **liste = malloc(sizeof(char *));
...
liste /* pas *liste !!! */ = realloc(liste,arg*sizeof(char *));
...
for(i=0;i<arg;i++)
{
printf("%s",liste);
}
Ascur Le 19/11/2002 à 17:33 Compile ca
ESI argptr;
SYM_ENTRY *sym;
ESI argument;
char *ptr;
int *liste = malloc(sizeof(char *));
short i;
unsigned short arg;
SYM_ENTRY *SymPtr = SymFindFirst(NULL,4);// début de la recherche des repertoires de la TI
push_END_TAG();
while(SymPtr)
{
push_ANSI_string(SymPtr->name);
SymPtr = SymFindNext();
}
push_LIST_TAG();// renvoie la liste contenant les repertoires de la TI
argptr = top_estack;
arg = remaining_element_count(argptr);
liste = realloc(liste,arg*sizeof(char *));
liste[1] = top_estack;
for(i=2;i<arg;i++)
{
liste[i] = next_expression_index((ESI*)liste[i-1]);
}
clrscr();
for(i=0;i<123;i++)
{
printf("%s",(char*)liste[i]);
}
ngetchx();
et essaye plusieurs fois...
ca ne fait pas ce que je veux c'et à dire afficher la liste des repertoires ???