questions diverses [C] - C++ - Programmation
Marsh Posté le 09-04-2002 à 18:16:07
Un tableau, ce ne serait pas plus simple ?
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]
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 ?
Marsh Posté le 09-04-2002 à 18:19:51
quoique le tableau ça serait plus simple a utiliser, merci pour l'idee
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
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 |
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 :
|
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 :
|
voila. Si tu t'en sent le courage...
[jfdsdjhfuetppo]--Message édité par El_Gringo--[/jfdsdjhfuetppo]
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 ...
Marsh Posté le 10-04-2002 à 09:51:34
Code :
|
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]
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]
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
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]
Marsh Posté le 10-04-2002 à 10:29:51
Ma question va paraitre bete mais c quoi exactement les librairies GSL ?
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.
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 :
http://www.google.fr/search?q=GSL& [...] ogle&meta=
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).
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 !
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 !
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.
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 ?
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.
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 ?
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 ?
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.
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 !
Marsh Posté le 10-04-2002 à 18:16:10
Euh, la GSL, je ne sais pas si elle compile avec Visual C++, par contre...
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
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]