[C] questions diverses

questions diverses [C] - C++ - Programmation

Marsh Posté le 09-04-2002 à 18:12:42    

Je rencontre un petit pb en ce moment, je cherche a avoir dans mon programme autant de variable que l'utilisateur l'aura specifie.
En fait ça serait un truc en boucle du type for pour que les variable s'appellent par exemple a1, a2, a3... Le chiffre etant modifie selon l'utilisateur.
Le probleme c'est que je ne sait pas du tout comment faire.

 

[jfdsdjhfuetppo]--Message édité par Nodus--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 09-04-2002 à 18:12:42   

Reply

Marsh Posté le 09-04-2002 à 18:16:07    

Un tableau, ce ne serait pas plus simple ?


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 09-04-2002 à 18:16:18    

liste chainée.
 
struct mastruct
{
float val;
mastruct *suivant;
}
 
comment l'utiliser ca serai long a expliquer mais il doit y avoir des cours sur le web.

 

[jfdsdjhfuetppo]--Message édité par mr_mat--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 09-04-2002 à 18:17:32    

mr_mat a écrit a écrit :

liste chainée.


Une liste chaînée pour ça ?
 
Hmmmm... C'est pas se compliquer la vie ?


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 09-04-2002 à 18:19:51    

quoique le tableau ça serait plus simple a utiliser, merci pour l'idee  :hello:

Reply

Marsh Posté le 10-04-2002 à 09:11:36    

Jar Jar a écrit a écrit :

Une liste chaînée pour ça ?
 
Hmmmm... C'est pas se compliquer la vie ?  




 
ca depend si il veut une taille fixe

Reply

Marsh Posté le 10-04-2002 à 09:38:39    

Nodus a écrit a écrit :

quoique le tableau ça serait plus simple a utiliser, merci pour l'idee  :hello:  




 
Ou si tu veux n'avoir aucune limite dans le nombre (ou presque). Du moins, si tu veux pas un nombre maximum fixé: allocation dynamique de mémoire, tableau dynamique quoi.
Un truc genre:

Code :
  1. float* lpfTabDeFloats = (float*)malloc (TAILLE_DE_DEPART * sizeof (float)); 
  2. // où TAILLE_DE_DEPART est une constante, par exemple #define TAILLE_DE_DEPART 256


 
 
pour accèder aux éléments du tableau:
 
*(lpfTabDeFloats + I) doit logiquement être le Ième élément de ton tableau dynamique
 
pour agrandire ton tableau (si nbElements > nbMaxElements):

Code :
  1. lpfTabDeFloats = realloc (lpfTabDeFloats, TAILLE_DE_REALLOC * sizeof (float));
  2. // où TAILLE_DE_DEPART est une constante, par exemple #define TAILLE_DE_DEPART 64


 
voila. Si tu t'en sent le courage...

 

[jfdsdjhfuetppo]--Message édité par El_Gringo--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 10-04-2002 à 09:51:02    

"Le probleme c'est que je ne sait pas du tout comment faire."
Ce n'est pas possible. Une fois compilé, ton programme n'utilise plus les noms de tes variables.
Tes variables ne sont que des emplacements mémoires.
Pour toi c'est plus lisible d'avoir a1, a2, a3 ...
Mais ton ordi il sait pas quoi en faire de ca.
Le compilateur remplace donc tout ca par une adresse mémoire (un nombre).
C'est pour cela que tu es obligé de passer par un tableau ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 10-04-2002 à 09:51:34    

Code :
  1. double sommef(va_alist)
  2. va_dcl
  3. {
  4. va_list parametres;
  5. int nb=0;
  6. int i=0;
  7. double somme;
  8. double nombre;
  9. va_start(params);
  10. nb=(int)va_arg(paramtres);
  11. for (i=0;i<nb;i++)
  12.   {
  13.    nombre=(double)va_arg(parametres);
  14.    somme+=nombre;
  15.   }
  16. return somme;
  17. }


 
Voila normalement ca marche mais le nombre de parametre est variable mais doit être connu à la compilation.
 
somme(nb_valeur,d1,d2,d3,...,dn);

 

[jfdsdjhfuetppo]--Message édité par DarkOli--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 10-04-2002 à 10:14:13    

mr_mat a écrit a écrit :

ca depend si il veut une taille fixe


Taille fixe ou variable, un tableau est bien plus pratique. Imagine qu'il en ait 200, avec un tableau il y accède instantanément, alors qu'avec une liste chaînée il faut 200 appels...
 
Les listes chaînées, ça date d'une époque où il fallait économiser chaque octet superflu. On ne les utilise plus guère que dans certaines conditions critiques, quand on a uniquement besoin d'accéder à l'élement qui précède ou qui suit celui sur lequel on est.

 

[jfdsdjhfuetppo]--Message édité par Jar Jar--[/jfdsdjhfuetppo]


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 10-04-2002 à 10:14:13   

Reply

Marsh Posté le 10-04-2002 à 10:15:10    

en fait pour l'instant g ecris un truc du genre
 
int tabt
 
float tab[6][tabt]
 
en fait ce serait un tableau a 6 colonnes horizontales mais pour ce qui est des verticales qui serait au choix, c possible de faire ça ?
 
Sinon je voulais vous demander, comment integrer des fonction cosinus et sinus ?
Sinon toujours pour les maths, il n'existe pas une fonction de resolution d'equations ??? un truc qui gere les equations a plusieurs inconnus au mieux....
 
Je sais que mes questions vont vous paraitre un peu bizarre mais disons que je commence totalement et que malgre mes recherches je n'ai pas trouve de reponse.
Sinon si vous connaissez un bon site ou il y a une mine d'explications, je serais content de le decouvrir.
 
Merci a tous  :hello:

Reply

Marsh Posté le 10-04-2002 à 10:21:33    

int tabt
 
float tab[6][tabt]
 
en fait ce serait un tableau a 6 colonnes horizontales mais pour ce qui est des verticales qui serait au choix, c possible de faire ça ?

 
Ça n'a pas la moindre chance de marcher.
 
#define LONGUEUR 6
 
int tabt;
float * tab[LONGUEUR];
 
(...) (où tabt se fait assigner une valeur)
 
for(j=0;j<LONGUEUR;j++)
     tab[j] = (float *) malloc(tabt*sizeof(float));
 
 
Sinon je voulais vous demander, comment integrer des fonction cosinus et sinus ?
 
#include <math.h>
 
 
Sinon toujours pour les maths, il n'existe pas une fonction de resolution d'equations ??? un truc qui gere les equations a plusieurs inconnus au mieux....
 
Là, c'est plus compliqué. Regarde du côté de la bibliothèque GSL, par exemple.

 

[jfdsdjhfuetppo]--Message édité par Jar Jar--[/jfdsdjhfuetppo]


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 10-04-2002 à 10:29:51    

Ma question va paraitre bete mais c quoi exactement les librairies GSL ?

Reply

Marsh Posté le 10-04-2002 à 10:31:07    

Jar Jar a écrit a écrit :

Taille fixe ou variable, un tableau est bien plus pratique. Imagine qu'il en ait 200, avec un tableau il y accède instantanément, alors qu'avec une liste chaînée il faut 200 appels...
 
Les listes chaînées, ça date d'une époque où il fallait économiser chaque octet superflu. On ne les utilise plus guère que dans certaines conditions critiques, quand on a uniquement besoin d'accéder à l'élement qui précède ou qui suit celui sur lequel on est.  




 
Bah non, ça garde le même avantage qu'avant les listes chainées. y a des cas ou c 100 fois + performant que des tableaux:
pour de bonnes performances pour du tri de données par exemple. Ou, plus généralement, quand on à besoin de beaucoup changer l'ordre des données (passer l'élémt n°15 en 10° place, ...). ça permet de changer l'odre en modifiant juste un pointeur. Sans déplace effectivement l'élément en mémoire, d'ou de meilleurs performance.

Reply

Marsh Posté le 10-04-2002 à 10:32:24    

Nodus a écrit a écrit :

Ma question va paraitre bete mais c quoi exactement les librairies GSL ?  




 
y faut que tu acquière le réflex Google avant de poser des questions mon enfant :D :
http://www.google.fr/search?q=GSL& [...] ogle&meta=

Reply

Marsh Posté le 10-04-2002 à 10:42:51    

El_Gringo a écrit a écrit :

Bah non, ça garde le même avantage qu'avant les listes chainées. y a des cas ou c 100 fois + performant que des tableaux:
pour de bonnes performances pour du tri de données par exemple. Ou, plus généralement, quand on à besoin de beaucoup changer l'ordre des données (passer l'élémt n°15 en 10° place, ...). ça permet de changer l'odre en modifiant juste un pointeur. Sans déplace effectivement l'élément en mémoire, d'ou de meilleurs performance.


Tout à fait, il y a plein de cas où ça reste le top, d'ailleurs le noyau Linux par exemple est bourré de listes chaînées.
Cela dit, ça ne sert pas tous les jours (heureusement, je trouve que c'est la galère à implémenter).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 10-04-2002 à 10:47:06    

Jar Jar a écrit a écrit :

Tout à fait, il y a plein de cas où ça reste le top, d'ailleurs le noyau Linux par exemple est bourré de listes chaînées.




 
je l'sais bien, c'est moi qui l'ai écrit ! :D  
 

Jar Jar a écrit a écrit :

 
Cela dit, ça ne sert pas tous les jours (heureusement, je trouve que c'est la galère à implémenter).




 
par rapport à un bête tableau, forcément ! Ms y a + compliqué qd même !

Reply

Marsh Posté le 10-04-2002 à 10:50:39    

C vrai que c assez dur pour se decider comment faire mon tableau, en fait je cherche a faire un programme de resolution torsorielle pour ceux qui connaissent. Le programme comporte beaucoup de math, j'agis beaucoup sur les valeurs. J'ai pense a cree un deuxieme tableau avec les valeurs modifies pour avoir une plage de calcul.
Pour tout vous avouez on peut dire que c'est mon premier programme dans l'impitoyable monde du C.

Reply

Marsh Posté le 10-04-2002 à 11:20:34    

Jar Jar a écrit a écrit :

[i]int tabt
float * tab[LONGUEUR];
 
(...) (où tabt se fait assigner une valeur)
 
for(j=0;j<LONGUEUR;j++)
     tab[j] = (float *) malloc(tabt*sizeof(float));
 




 
je ne comprends tres bien les trucs en rouge, pourquoi mettre un " * " dans le premier ?
 
que fait on exactement dans le deuxieme ?

Reply

Marsh Posté le 10-04-2002 à 13:27:06    

J'alloue un tableau de 6 pointeurs vers des float.
Ensuite, avec malloc, j'alloue un tableau, dynamique cette fois, de longueur tabt, pour chacun de ces pointeurs.
 
Ensuite, en appelant tab[j][k], tu accèdes aux éléments du tableau final.
 
Documente-toi sur les fonctions malloc et free, c'est très important de comprendre comment ça fonctionne.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 10-04-2002 à 13:52:11    

merci de ton aide :hello:

Reply

Marsh Posté le 10-04-2002 à 17:12:13    

Je voulais savoir l'ensemble de librairies gsl je fais comment pour l'integrer dans visual c++ 6.0 ?

Reply

Marsh Posté le 10-04-2002 à 17:19:45    

Nodus a écrit a écrit :

Je voulais savoir l'ensemble de librairies gsl je fais comment pour l'integrer dans visual c++ 6.0 ?  




 
t'as téléchargé quoi ?
dans ce que t'as téléchargé, y a (au moins) un fichier.lib
et (au moins) un fichier.h, non ?

Reply

Marsh Posté le 10-04-2002 à 17:32:28    

c'est tout un dossier avec une trenteine de sous dossiers, des fichiers *.h, *.c, *.in... les sous dossiers sont composes des memes fichiers avec une majorite de fichiers *.c.

Reply

Marsh Posté le 10-04-2002 à 17:37:11    

Nodus a écrit a écrit :

c'est tout un dossier avec une trenteine de sous dossiers, des fichiers *.h, *.c, *.in... les sous dossiers sont composes des memes fichiers avec une majorite de fichiers *.c.  




 
ha, ça doit être parce que cette librairie est open source (tout le monde peut y ajouter son petit grain de sable ou son moellon).
à mon avis t'as pas téléchargé le bon truc. essaye de cherche si t'as pas une version binaire (compilée; Binary en anglais).
Après, quand t'auras ta (ou tes) dll, ton (ou tes .h), et ton (ou tes) .lib, reviens !:D

Reply

Marsh Posté le 10-04-2002 à 18:16:10    

Euh, la GSL, je ne sais pas si elle compile avec Visual C++, par contre...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 10-04-2002 à 23:22:58    

Sisi j'ai trouve une autre archive avec une installation pour vc++6 ça marche nikel.
 
Par contre je cherche a faire un truc du type:
 
appuyer sur une touche pour quitter
 
je pense qu'il faut utiliser getchar mais je ne sais pas comment.
Personne ne pourrait m'aider sur ça ?
Merci :hello:

Reply

Marsh Posté le 11-04-2002 à 09:56:18    

up

Reply

Marsh Posté le 11-04-2002 à 20:16:52    

:bounce:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed