[C] fonction et retour de structure | tomik recentré sur le rand()

fonction et retour de structure | tomik recentré sur le rand() [C] - C++ - Programmation

Marsh Posté le 02-12-2002 à 21:37:11    

bon voilà mon pb,  
je voudrais faire en sorte que ma fonction retourne une structure, ou modifie une structure existante dans main ...  
 
le prob, c'est que quand je def une fonction qui renvoie une structure, ca chie à la compil (trop d'arguments, ...)  
-> struct ma_structure ma_fonction(int n, ... )  
 
et quand je veux faire passer un pointeur de structure (si c'est possible, je me tapppe des pointeurs non compatibles ...  
du genre  
-> void ma_fonction( int n, struct *pt)  
bah non  
 
et vu que les pointeurs et les structures c'est complètement mystique pour moi ...  
 
 
merci d'avance  :hello:  
 
ps: j'aurais aimé ne pas utiliser de structure pour retourner 3 variables, mais on me demande de faire comme ca :/


Message édité par Profil supprimé le 03-12-2002 à 09:57:35
Reply

Marsh Posté le 02-12-2002 à 21:37:11   

Reply

Marsh Posté le 02-12-2002 à 21:41:16    

Code :
  1. typedef struct {
  2. int toto;
  3. int tata;
  4. int titi;
  5. } maStruct;
  6. maStruct * maFonction(int i, int j, int k)
  7. {
  8.   maStruct * ret = (maStruct*)malloc(sizeof(maStruct*));
  9.   ret->toto = i;
  10.   ret->tata = j;
  11.   ret->titi = k;
  12.   return ret;
  13. }
  14. void maDeuxieme(int n, maStruct * pt)
  15. {
  16.   pt->toto = n;
  17. }


Message édité par lorill le 02-12-2002 à 21:41:34
Reply

Marsh Posté le 02-12-2002 à 21:43:24    

vas y balance du code...
 
parce que "struct Foo MyDummyFx()" ca fonction parfaitement


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:43:52    

[:wam]  [:wam]  
 
ouahh j'étais  loin
 
 
merci  :hello:  :)

Reply

Marsh Posté le 02-12-2002 à 21:45:03    

et ca marche aussi sans typedef


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:45:31    

pour la def de fonction
 
void axesim(int dimension, int pas, struct pt);
 
 
pour la fonction
 
 
void axesim(int dimension, int pas) {
 int axe[dimension], i, temp;
    //struct resultat pt;
 
 for(i=0;i<dimension;i++)
  axe[i]=0;
 axe[0]=1;
 
    pt.fin=0;
    pt.max=0;
    pt.retour=0;
 
 for(i=0;i<=pas;i++) {
  temp = hasard(2);
        temp=1;
  if ((temp==0)&&(pt.fin>0)) {
   axe[pt.fin--]=0;
   axe[pt.fin]=1;
  }
  else if ((temp==1)&&(pt.fin<(dimension-1))) {
   axe[pt.fin++]=0;
   axe[pt.fin]=1;
  }
        if (pt.max<pt.fin)
           pt.max=pt.fin;
        if (pt.fin==0)
           pt.retour++;
 }
    return pt;
}

Reply

Marsh Posté le 02-12-2002 à 21:47:03    

Taz@PPC a écrit a écrit :

et ca marche aussi sans typedef



certes, mais c'est mois beau :o

Reply

Marsh Posté le 02-12-2002 à 21:47:34    

euh le nom de ta structure c'est quoi?
 

Code :
  1. void fx(struct NomStruct NomParam)
  2. {
  3.   struct NomStruct NomVariable;
  4. }


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:49:11    

lorill a écrit a écrit :

certes, mais c'est mois beau :o



ben des fois, ca denote une volonté de limiter l'utilisation d'un type de données en se passant de typedef. Pour mes types "privés" je laisse le qualificatif struct.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:49:41    

ah, j'avais oublié
 
 

Code :
  1. struct resultat {
  2.        int fin;  //position de fin
  3.        int max;  //max atteint
  4.        int retour;  //nb de retours à l'origine
  5. }

Reply

Marsh Posté le 02-12-2002 à 21:49:41   

Reply

Marsh Posté le 02-12-2002 à 21:50:50    

Code :
  1. void axesim(int dimension, int pas, struct resultat pt);
  2. /* ou mieux */
  3. void axesim(int, int, struct resultat);


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:53:28    

Taz@PPC a écrit a écrit :

Code :
  1. void axesim(int dimension, int pas, struct resultat pt);
  2. /* ou mieux */
  3. void axesim(int, int, struct resultat);





[:ripeer] ca ne marche pas justement :D

Reply

Marsh Posté le 02-12-2002 à 21:55:11    

quelle version?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:55:50    

ca fait
49 d:\temp\willi.c
 conflicting types for `axesim'

Reply

Marsh Posté le 02-12-2002 à 21:56:25    

Taz@PPC a écrit a écrit :

quelle version?



dev-cpp 4 :/
g pas mieux pour le moment
 
 
et le rand() me renvoie des valeurs  :pt1cable:

Reply

Marsh Posté le 02-12-2002 à 21:57:36    

SirJeannot a écrit a écrit :

dev-cpp 4 :/
g pas mieux pour le moment
 
 
et le rand() me renvoie des valeurs  :pt1cable:  




 
ah oui, effectivement
[cpp]void axesim(int, int, struct resultat);[/cpp)
marche po  :heink:. je vais chercher pourquoi...
 
 
et c'est peut etre bien le but que rand() renvoie des trucs :pt1cable:


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:58:21    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h> /* pour srand, rand et RAND_MAX */
  3. #include <time.h> /* pour time */
  4. unsigned myrand1(unsigned N)
  5. {
  6.   /**
  7.    * les bits de poids faibles ont une dsitribution tres peu alétoire
  8.    * d'ou des sequences 0 1 0 1 0 1 0 1 0
  9.    * ce n'est donc aps une bonne methode
  10.    */
  11.   return rand()%N;
  12. }
  13. unsigned myrand2(unsigned N)
  14. {
  15.   /**
  16.    * beaucoup plus aléatoire
  17.    * (la je te fais pas l'explication)
  18.    */
  19.   return (unsigned)((double)rand()/((double)RAND_MAX+1)*N);
  20. }
  21. int main()
  22. {
  23.   /**
  24.    * initialisation du générateur de nombres pseudos-aleatoires
  25.    * on iutilise généralement le temps courant (nombre de secondes ecoulees
  26.    * depuis xx/xx/1970
  27.    * srand => seed == 'graine'
  28.    */
  29.   srand(time(NULL));
  30.   unsigned n;
  31.   scanf("%u", &n);
  32.   int i;
  33.   for(i=0; i<10; ++i)
  34.     {
  35.       printf("%u\t%u\n", myrand1(n), myrand2(n));
  36.     }
  37.   return EXIT_SUCCESS;
  38. }


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 21:58:31    

Taz@PPC a écrit a écrit :

 
 
et c'est peut etre bien le but que rand() renvoie des trucs :pt1cable:  



entre 1 et 30000 et des bananes? [:dawa]  :whistle:

Reply

Marsh Posté le 02-12-2002 à 22:00:29    

SirJeannot a écrit a écrit :

entre 1 et 30000 et des bananes? [:dawa]  :whistle:  




c'est absolument normal, rand() renvoie un entier entre 0 et RAND_MAX qui peut vaut sur ton systeme 32767 soit le maximum d'un short int codé sur 16bits


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 22:02:22    

Taz@PPC a écrit a écrit :

 
c'est absolument normal, rand() renvoie un entier entre 0 et RAND_MAX qui peut vaut sur ton systeme 32767 soit le maximum d'un short int codé sur 16bits



ah [:dawa] j'en ai appris une aujourd'hui :D
 
paskeu sur freebsd ca renvoie qqc entre 0 et 1 (réel)

Reply

Marsh Posté le 02-12-2002 à 22:03:10    

SirJeannot a écrit a écrit :

ah [:dawa] j'en ai appris une aujourd'hui :D
 
paskeu sur freebsd ca renvoie qqc entre 0 et 1 (réel)



ca m'etonnerait, c'est on ne peut plus standard (ANSI)


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 22:07:12    

Taz@PPC a écrit a écrit :

ca m'etonnerait, c'est on ne peut plus standard (ANSI)



bah aux dernieres nouvelles (c a dire ya 2 semaines ca marchait :D )

Reply

Marsh Posté le 02-12-2002 à 22:08:47    

:heink:, ouais ben je t'invite à vérifier quand meme


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 22:12:52    

voilà, un tit typedef tout propre au début et c nickel
 
comme quoi c'était vraiment con  :D  
 
merci :)

Reply

Marsh Posté le 02-12-2002 à 22:13:26    

Taz@PPC a écrit a écrit :

 :heink:, ouais ben je t'invite à vérifier quand meme



je retest demain matin  :)

Reply

Marsh Posté le 02-12-2002 à 22:15:09    

SirJeannot a écrit a écrit :

je retest demain matin  :)  



ouais, et si ca te donne un réel je veux le code que t'as compilé et l'email de ton root pour lui péter la gueule (si K&R étaient morts ils se retourneraient dans leurs tombes)


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 22:22:38    

Taz@PPC a écrit a écrit :

ouais, et si ca te donne un réel je veux le code que t'as compilé et l'email de ton root pour lui péter la gueule (si K&R étaient morts ils se retourneraient dans leurs tombes)



je lui ai écrit plein de fois (pour mettre les paths des librairies gdk) et jamais de réponse, ... alors pour le pétage de gueule c mort :D

Reply

Marsh Posté le 02-12-2002 à 22:23:28    

[:totoz]


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 02-12-2002 à 22:27:26    

admin de merde, oui on peut le dire :/

Reply

Marsh Posté le 03-12-2002 à 08:37:28    

#include <stdio.h>  
 
main() {  
 printf("%f\n", rand() );  
}  
 
ca renvoie 0  
 
et %d ca renvoie  
1103527590  
 
 
 :D

Reply

Marsh Posté le 03-12-2002 à 08:40:41    

SirJeannot a écrit a écrit :

#include <stdio.h>
 
 
 
main() {
 
 printf("%f\n", rand() );
 
}
 
 
 
ca renvoie 0
 
 
 
et %d ca renvoie
 
1103527590
 
 
 
 
 
 :D  




 
 
tu peux essayer de compiler le code ANSI que je t'ai donné plus haut et donner la version de ton compilateur?


Message édité par Taz@PPC le 03-12-2002 à 08:41:01

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 03-12-2002 à 08:42:14    

et ca renvoie toujours la meme valeur  :o

Reply

Marsh Posté le 03-12-2002 à 08:42:48    

les deux fonctions?
 
ben si j'étais toi, je m'abstiendrais de faire du C sur ta plateforme. C'est pas que ton compilo soit buggé, c'est que ta librairie est meme pas standard


Message édité par Taz@PPC le 03-12-2002 à 08:46:17

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 03-12-2002 à 08:48:41    

bah ... en fait le copier coller de opera à nedit fout des caractères qui font chier le compliteur :/

Reply

Marsh Posté le 03-12-2002 à 08:51:59    

http://dejean.benoit.free.fr/rand.c


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 03-12-2002 à 09:25:28    

chez moi ça compile par pcq c'est soit du C++ soit du C99, mais pas du "vieux" C en tout cas :D
 
  srand(time(NULL));
  unsigned n;
  scanf("%u", &n);
 
-> il me dit que la déclaration d'unsigned n est pas autorisée ici :D (Borland C++ 5.0)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 03-12-2002 à 09:35:20    

il me sort des erreurs
 
rand.c: In function `main':
rand.c:40: syntax error before `unsigned'
rand.c:41: `n' undeclared (first use in this function)
rand.c:41: (Each undeclared identifier is reported only once
rand.c:41: for each function it appears in.)
rand.c:43: syntax error before `int'
rand.c:44: `i' undeclared (first use in this function)

Reply

Marsh Posté le 03-12-2002 à 09:36:47    

dans ton .c il m'a suffit de mettre les déclarations de variables avant les appels de fonction


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 03-12-2002 à 09:45:59    

ya des ^M partout dans le .c  :o  
spa reconno comme un caractère de contr^ole  :o

Reply

Marsh Posté le 03-12-2002 à 09:46:38    

heu j'ai pas ce prob de ^M moi :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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