je lutte... [nioubi inside]

je lutte... [nioubi inside] - C++ - Programmation

Marsh Posté le 23-10-2002 à 21:27:41    

Ca plante aux boucles "for".... :cry:  :sweat:  
 

Code :
  1. #include <stdio.h>
  2. float puis(float a,float x)
  3. { //fonction puissance
  4.   int i,r=1;
  5.   for(i=1,i<=x,i++)
  6.   {
  7.     r=r*a;
  8.   }
  9.   return r;
  10. }
  11. float fact(int x)
  12. { //fonction factorielle
  13.    int i,r=1;
  14.    for(i=1,i<x,i++)
  15.    {
  16.      r=r*i;
  17.    }
  18.    return r;
  19. }
  20. float comb(int n,int k)
  21. { //fonction combinaison
  22.   int r;
  23.   r=fact(n)/(fact(k)*fact(n-k));
  24.   return r;
  25. }
  26. main()
  27. { //fonction main
  28.   float a,b,n,k,R=0,i;
  29.   printf("(a+b)^n" );
  30.   scanf("%d %d %d",&a,&b,&n);
  31.   for(k=0,k<=n,k++)
  32.   {
  33.      R=R+comb(n,k)*puis(a,k)*puis(b,n-k);
  34.      printf("%d\n",R);
  35.   }
  36. }


 
merci :D

Reply

Marsh Posté le 23-10-2002 à 21:27:41   

Reply

Marsh Posté le 23-10-2002 à 21:49:05    

c pas des , mais des ; qu'il faut mettre

Reply

Marsh Posté le 23-10-2002 à 21:58:51    

Qq suggestions
 
float puis(float a, float x)
{//fonction puissance
    int i;
    float r = 1.0f;
    for(i = 1; i <= (int)x; i ++)  // points virgule dans boucle
    {                             // virgule possible mais pas ici  
        r=r*a;  // ou moins lisible r *= a;
    }
    return r;
  }
   
  long fact(int x)
  {//fonction factorielle
       int i;
       long r = 1;
       for(i = 1; i < x; i ++) // ; pr boucle , sert à séparer dans même "bloc"
       {
           r = r * i;
       }
       return r;
  }
   
  long comb(int n, int k)
  {//fonction combinaison
      long r;
      r = fact(n)/(fact(k) * fact(n-k));
      return r;
  }
   
  main()
  {//fonction main
      int a, b, k, n;
      long R = 0;  
      printf("(a+b)^n" );
      scanf("%d %d %d",&a, &b, &n);
      for(k = 0; k <= n; k ++)
      {
           R += comb(n, k) * puis(a, k) * puis(b, n-k);
           printf("%ld\n", R);
      }
  }
 
*Les float servent pas beaucoup ici.
*Si fact, un long est très utile.
*Si on a une variable int à retourner en float, on fait  
return (float)variable_int; (transtypage je crois)
*Dans les for (;;), on sépare les "blocs" par ;. On peut mettre aussi des , pour, par exemple faire incrémenter deux variables en même temps
int k, m;
for (k = 0; k < x; k++, m++) // k et m sont incrémentés en "même temps"

Reply

Marsh Posté le 23-10-2002 à 22:31:35    

merci a vous deux et surtout a carbon_14 qui s'est bien déchire pour sa reponse  :)  
j'ai encore kk problemes  :D :

Code :
  1. float r = 1.0f;
  2. //c'est quoi ce f ???


et a part ca tu connais pas un site avec des bons tutoriaux ???
@+


---------------
P@F deathlist
Reply

Marsh Posté le 23-10-2002 à 22:36:18    

Je l'ai appris y a peu...
Ca force le 1 en float. Je pensais que 1.0 suffisait (le point indiquant que c'est décimal, mais il paraît que 1.0 est double ... ...). 1.0f dit donc que c'est un 1 flottant.
On peut aussi faire (idiot ?) r = (float)1; // le 1 est int
 
Au début, on fait des tas de maladresses, je connais.... :ange:  
 
Copier/coller, c'est pratique !! :jap:  
 
NB : j'ai pas vérifié la fonction des modules, juste syntaxe.
 
J'ai rien sous le coude en tutoriel. Ca doit exister. Je suis pas pro => je bricole, rame, rame. Le ouèbe est une grande encyclopédie, le pb étant de trouver ce qu'on aimerait y voir..
 
Cf fonction Recherche, si y a qq chose à tutoriel.


Message édité par Carbon_14 le 23-10-2002 à 22:43:04
Reply

Marsh Posté le 23-10-2002 à 23:42:20    

Code :
  1. Ca force le 1 en float. Je pensais que 1.0 suffisait (le point indiquant que c'est décimal, mais il paraît que 1.0 est double ... ...). 1.0f dit donc que c'est un 1 flottant.
  2. On peut aussi faire (idiot ?) r = (float)1; // le 1 est int


lol le truc de psychopatz :D merci quand même...


---------------
P@F deathlist
Reply

Marsh Posté le 24-10-2002 à 03:38:28    

Code :
  1. //fonction puissance
  2. double puis(double base, unsigned int exp)
  3. {
  4. double val= 1;
  5. if(base==0f && exp==0) return 0;
  6. for( ; exp>0 ; --exp)
  7.  val*= base;
  8. return val;
  9. }

Le commentaire se met dessus.
Les noms devraient être plus explicites.
double au lieu de float. À moins que tu n'en alloues 10'000'000.
x/exp unsigned int car on ne fait que des puissances entières >=0. Les égalités sur flottants sont dangereuse.
r/val du même type que le retour de fonction.
puis(0,0), cas particulier.
 
Je te laisse corriger les autres...
 
main() n'est pas standard.
Seules ces deux formes sont standard:

Code :
  1. int main(void)
  2. int main(int, char**)

Chez toi tu fais comme tu veux, mais sur le forum c'est plus chez toi...
 
Regardes dans la rubrique Bibliolinks pour des liens intéressants.
http://forum.hardware.fr/forum2.php3?post=6305&cat=10


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 24-10-2002 à 09:00:53    

VignoS a écrit a écrit :

 
lol le truc de psychopatz :D merci quand même...




 
Y a eu un topic y a pas longtemps où un pro affirmait qu'on risquait de perdre en précision si on ne met que 1.0 (?).
 
NB : je me suis déja pas mal cassé les dents sur des problèmes de division par ex d'int par float, ou trucs du genre. On devient "parano".
 
Dans le futur, le titre du topic sera "je domine...[pro inside]" :D

Reply

Marsh Posté le 25-10-2002 à 01:20:09    

c quoi ca ?
 <= (int)x; i ++)
le int ?
 
 
vous pourriez pas me faire une liste des "int","long",etc
même question pour les "%ld%,"%f"
 
PS: j'ai un devoir d analyse mathématique a programmer en C demain matin repondez pas trop lentement... :)  
merci


---------------
P@F deathlist
Reply

Marsh Posté le 25-10-2002 à 01:24:11    

VignoS a écrit a écrit :

c quoi ca ?
 <= (int)x; i ++)
le int ?
 
 
vous pourriez pas me faire une liste des "int","long",etc
même question pour les "%ld%,"%f"
 
PS: j'ai un devoir d analyse mathématique a programmer en C demain matin repondez pas trop lentement... :)  
merci




 
c'est donc que tu dois etre suffisamment avancé pour savoir le faire ... les cours c pas fait pour les chiens, faut y aller !

Reply

Marsh Posté le 25-10-2002 à 01:24:11   

Reply

Marsh Posté le 25-10-2002 à 02:07:50    

erf j'en sais bien assez pour faire mon ds, ce que je vous demande c un peu comme du "bonus", pour avoir kk connaissances supplementaires sur des trucs qui sont pas tres clair dans ma tête :)


---------------
P@F deathlist
Reply

Marsh Posté le 25-10-2002 à 04:18:46    

Musaran a écrit a écrit :

Code :
  1. //fonction puissance
  2. double puis(double base, unsigned int exp)
  3. {
  4. double val= 1;
  5. if(base==0f && exp==0) return 0;
  6. for( ; exp>0 ; --exp)
  7.  val*= base;
  8. return val;
  9. }

Le commentaire se met dessus.
Les noms devraient être plus explicites.
double au lieu de float. À moins que tu n'en alloues 10'000'000.
x/exp unsigned int car on ne fait que des puissances entières >=0. Les égalités sur flottants sont dangereuse.
r/val du même type que le retour de fonction.
puis(0,0), cas particulier.
 
Je te laisse corriger les autres...
 
main() n'est pas standard.
Seules ces deux formes sont standard:

Code :
  1. int main(void)
  2. int main(int, char**)

Chez toi tu fais comme tu veux, mais sur le forum c'est plus chez toi...
 
Regardes dans la rubrique Bibliolinks pour des liens intéressants.
http://forum.hardware.fr/forum2.php3?post=6305&cat=10




 
heink?
skoi sdelire?
fo repondre koi?  
oui papa?

Reply

Marsh Posté le 27-10-2002 à 00:18:05    

J'ai peut-être fait trop court... Ce que je voulais dire:
Lorsqu'on garde du code uniquement pour soi, on est libre d'utiliser tous les trucs pas standards/indéfinis/périmés qu'on veux.
Lorsqu'on publie du code, la politesse veut qu'on respecte un minimum le standard, pour qu'il soit lisible et compilable au plus grand nombre.
 
Et le "int" implicite a été abandonné depuis longtemps quand même, avec raison.
 
Pourquoi aurait-on envie de déboguer du code qui foires avant même de compiler on d'entrer dans le main ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

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