cs_mana
Messages postés22Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention12 avril 2012
-
3 juil. 2009 à 21:21
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
7 juil. 2009 à 00:10
j'ai besoin d'un tuto sur les structures mais expliqué le plus simplement possible.
j'ai quelques livres et j'ai fait des recherches sur internet mais j'y comprend
toujours rien.
j'utilise des tableaux actuellement et je voudrais les remplacer par une structure
---------------------------------------------
pointeur[99];
donnee[99];
int ajout_donnee(int val){
for (i=0;i<99;i++){
if (pointeur(i)==0){
pointeur(i)=1;
donnee(i)=val;
return i;
}
}
return 0;
}
int lire_donnee(int val){
if (poiteur(val)==0)return 0;
return donnee(val);
}
int ajout_donnee(int val){
//struct structure{
//donnee=val; //ici comment fait on pour que 'donnee'=val ?
//val= ;//et comment faire pour que 'val' pointe sur 'donnee'
//};
return val;
}
int lire_donnee(val){
//struct structure{
//val=donnee;
//};
return val;
}
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 4 juil. 2009 à 00:10
Tu es sur d'avoir aussi compris les tableaux ? Tu les utilises mal.
if (pointeur(i)= =0) devrait être if (pointeur[i]==0)
De plus, énormément d'erreur sont présentes dans ton code. Par exemple, dans ta première fonction, tu mets un return dans ta boucle for mais celui-ci étant débranchant, tu ne feras qu'un seul tour.
Tu sembles avoir des lacunes sur des choses bien plus basique que les tableaux ou les structures. Néanmoins, voici une explication simplifiée de ce qu'est une structure:
Pour vulgariser, un tableau permet de ranger plusieurs données au sein d'une même variable. Chaque donnée est récupérable grâce à un numéro (de 0 à la taille - 1).
Exemple: int tab[3] = {14, 454, 90};
On ne peut pas mélanger les types de donnés. C'est à dire que pour chaque case, si on a un tableau d'entier, seul des entiers seront présents dans le tableau.
Maintenant, une structure est un type personnalisé, crée à partir de types existants. Tout comme le tableau, on peut stocker à l'intérieur plusieurs donnés au sein d'une variable. La petite différence vient du fait que l'on récupère les donnés, non pas par un numéro, mais par un nom d'étiquette. De plus, il est possible de mélanger différent type de données.
Exemple:
// Crééons un nouveau type, que l'on appelera Personne.
struct Personne
{
int age;
float taille;
int poids;
};
// Ce nouveau type peux maintenant être utilisé.
int main(void)
{
// On déclare une variable p, de type Personne
struct Personne p;
p.age = 18;
p.taille = 13.9;
p.poids= 34.4;
// Vu que Personne est un type, rien ne nous empêche d'en déclarer plusieurs:
struct Personne p2;
p2.age = 13;
p2.taille = 4.1;
p2.poids= 83.5;
if (p == p2)
printf("Identique !");
}
Si on veut s'affranchir du "struct", on peut déclarer la structure comme ceci:
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 4 juil. 2009 à 10:27
Si tu es en C++, et non en C, alors j'ai quelques remarques.
cstdlib, n'est pas nécessaire. Utilise new et delete, et non malloc et free.
Evite les using namespace std;
N'utilise pas de variable globale.
Pour tes tableaux, tu peux te servir de la STL, qui est une bibliothèque inclue dans C++, et qui fournit des conteneurs (dont des tableaux, des listes, etc...).
Enfin, pour le nom, utilise une chaîne de caractère, plutôt qu'un entier.
#include <vector>
#include
// Struct et Class, c'est pareil a part
// le niveau de visibilite par defaut qui differe
struct Personne
{
std::string nom;
int age;
};
// On fait un alias du type, pour en ecrire moins
typedef std::vector::iterator iterator;
magicienap
Messages postés3Date d'inscriptionsamedi 4 juillet 2009StatutMembreDernière intervention 4 juillet 2009 4 juil. 2009 à 17:57
Si tu as besoin d'un tutoriel qui récapitule toutes ces notions (structures, tableaux, etc.), je te recommande de visiter le Site du Zér0. Les tutoriels ici et là t'expliqueront (ou te ré-expliqueront) tout cela de la base, respectivement le C, puis le C++. Ça vaut le détour !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 4 juil. 2009 à 18:29
Le site du zéro est un très bon site. Le seul défaut, est qu'ils "mentent" temporairement (dixit l'auteur du site) sur certaines choses afin de ne pas assommer le lecteur de trop d'information. C'est une très bonne chose, mais le lecteur qui ne va pas jusqu'au bout prendra malheureusement de mauvaise habitude. Le meilleur exemple est sans doute la mauvaise utilisation des : using namespace std;, qui pullulent d'ailleurs sur le net.
Donc il est important de lire l'ensemble des tutoriaux dans leur intégralité, afin de suivre une certaine cohérence, et d'éviter, dans ce cas, d'en piocher à droite et à gauche.
cs_gael12
Messages postés1Date d'inscriptionmardi 9 juin 2009StatutMembreDernière intervention 5 juillet 2009 5 juil. 2009 à 14:12
> Le site du zéro est un très bon site.
C'est une blague sans doute ?
Mélanger C, C++, QT, SDL, etc, il faut le faire !
Pour les moins de 12 ans, et encore.
J'ai reçu des candidats qui m'ont sorti qu'ils "maitrisaient" le C .
En insistant , ils m'ont dit qu'il l'avaient appris sur le sdz et d'autres "tutoriaux", écrits par des ados.
Je leur ai soumis un test : le meilleur a eu... 2 /20 !!!!
Pour apprendre le C, la seule référence valable est de lire le K&R.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 5 juil. 2009 à 20:31
>> Le site du zéro est un très bon site.
> C'est une blague sans doute ?
Non, mais ton post doit en être un !
Le tutoriaux ne sont pas écrit pas des gamins de 12 ans, mais par un ingénieur de l'EFFREI (je ne cherche pas à faire de la pub, je vient d'une école concurrente). Ses travaux seront d'ailleurs prochainement édités.
De plus, les tutoriaux sont relus par la communauté et sont très bien fait. Ce n'est pas parce que tu es tombé sur des gens mauvais, qui ont été une fois dans leur vie sur le sdz, que le sdz est un mauvais site. C'est un excellent tremplin pour qui veut débuter dans ces technologies. Reste ensuite à ceux-ci, de faire la démarche d'aller plus loin. (Modern C++, lire du andrei alexandrescu, etc...). Tes candidats n'ont visiblement pas fait cette démarche, ta déduction est bien trop hâtive et injustifiée, ce qui n'est pas respectueux pour le travail effectué par l'auteur du sdz.
> Pour apprendre le C, la seule référence valable est de lire le K&R.
Paie ton extrêmisme ! Je n'ai pas lu le K&R, ce qui ne m'empêche pas d'avoir un "bon" niveau (cf mes sources).
cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 20111 5 juil. 2009 à 22:32
Bonjour,
Je ne suis jamais allé sur le SdZ, alors je ne donnerai pas mon opinion à ce sujet.
Quant au K&R, je l'ai lu alors que je croyais avoir un « bon » niveau en C, et j'y ai appris plein de choses ; je vous le conseille vivement !
Pour en revenir au sujet, je trouve ta façon de faire, mana, assez élégante. Et rassure-toi, il n'y a pas tant d'erreurs que cela dans ton code. La seule remarque que je pourrais faire (mis à part les crochets pour les index des tableaux), c'est que l'on ne peut pas savoir, lorsque la fonction ajout_donnee renvoie 0, si la valeur a été insérée à l'emplacement zéro ou s'il n'y a plus de place. Peut-être pourrais-tu renvoyer -1 en cas d'erreur... (Pour CptPingu: le nombre d'itérations dans la boucle for est judicieusement calculé...)
Si je comprends ce que tu veux faire, tu as des valeurs qui identifient des données, et tu souhaites ranger ces données dans un grand sac et les retrouver en utilisant leur identité. Au lieu d'identité, on parle plutôt de clef.
Si j'ai bien compris, ce qu'il te faut est un cours sur les structures de données (pas sur les struct du C). Selon ce que tu vas faire de ces données, certaines structures vont être plus adaptées que d'autres.
Il y a évidemment la solution triviale de la liste, mais un arbre binaire équilibré peut être bien plus efficace !
Après, tu peux vouloir programmer toi-même la structure de donnée. Dans ce cas chercher « arbre » sur ce site (ou ailleurs) devrait te fournir d'intéressants exemples.
Sinon tu peux utiliser des bibliothèques déjà existantes, comme la STL, et aller voir cet exemple de Map ou encore la référence.
cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 20111 5 juil. 2009 à 22:49
Re, pour donner un lien.
Un site plein d’algorithmes ; la rubrique « Binary Search Tree » a une mise en œuvre simple, en C, des arbres binaires de recherche ; la rubrique « AVL Tree » montre du C++ plus compliqué (pour les arbres AVL).
cs_mana
Messages postés22Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention12 avril 2012 6 juil. 2009 à 19:35
1. merci pour votre aide
2. je fais surtout du basic et j'essaie de migrer vers le c (ou c++)
donc je débute en c et pour le moment je suis incapable de faire
la différence entre le c et le c++ (dsl)
#include <cstdlib> ,#include ,using namespace std; , se n'ai pas
moi qui ai écrit ses commandes , elles y sont par défaut quant on crée
une application dos
dans le basic que j'utilise il y a une instruction que j'utilise souvent
pour stoker des variables et j'ai cru comprendre que sa ressemblait
a une "structure" en c.
actuellement j'utilise des tableaux car je ne comprends rien aux structures
voici en exemble en basic
// declaration des variables
// les varialbes peuvent etre de type int,float ou/et char
type joueur
field position_x
field position_y
...
end type
// creation des joueurs
j.joueurs=new joueurs
j\position_x=rnd(0,640)
j\position_y=rnd(0,400)
joueur1=Handle(j)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 7 juil. 2009 à 00:10
On ne dit pas librairie, mais bibliothèque. La STL n'est pas une bibliothèque externe, mais fait partie intégrante du C++. Donc ce code est tout à fait portable, et ne nécessite pas de dépendance externe.
Ce que tu décris en basic à pour équivalent en C++, soit des structures, soit des classes.