Inscription / Connexion Nouveau Sujet
Niveau Licence-pas de math
Partager :

Arrangement en langage C

Posté par
liberusalain
30-07-19 à 21:11

Salut a vous, je suis en train d'essayer faire un programme en langage c sur l'arrangement. maintenant je commence, alors je peux pas terminer. J'aimerais savoir si une personne peut m'aider stp.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n,p,num,deno,F;
    printf("Donner n: \n");
    scanf("%d",&n);
    printf("Donner p: \n");
    scanf("%d",&p);
    num=1;
    for(i=1; i<=n; i++)
    {
        num=num*i;
    }
    deno=1;
    for(i=1; i<=(n-p); i++)
    {
        deno=deno*i;
    }
     printf("L'arrangement est: %d/%d \n",n/p,F);

    return 0;
}

Posté par
cocolaricotte
re : Arrangement en langage C 30-07-19 à 21:37

bonjour

connaissant la définition de l'arrangement de  objets parmi n , il serait bien vu de définir une fonction "factorielle"

Posté par
Louistomtom
re : Arrangement en langage C 30-07-19 à 22:03

Bonsoir,

Loin d'être un expert en C ( pour ne pas dire totalement incompétent ) mais il me semble néanmoins que nulle part tu affectes de valeur à F d'une part.

D'autre par il semblerait que ce que tu affiches à la fin est le ratio :

\dfrac{\dfrac{n}{p}}{F}=\dfrac{n\cdot F}{p}

Sachant que F n'est affecté nulle part ...

Finalement dans mes souvenirs ( mais je dis certainement n'importe quoi ), si tu "return 0" tu n'auras pas le résultat attendu?

Posté par
verdurin
re : Arrangement en langage C 31-07-19 à 09:05

Bonjour,
ton algorithme me semble très maladroit.

Après vérification des valeurs de n et p je verrais qqc du genre

a=1
pour i allant de n-p+1 à n par pas de 1
     a=a*i
à la fin de la boucle a contient le nombre d'arrangements de p objets pris parmi n.

De plus il faut sans doute contrôler les dépassements de capacité ( et utiliser des entiers long ).

Posté par
flight
re : Arrangement en langage C 31-07-19 à 15:29

salut

je ne connais pas trop le c++ mais sous excel voila quelque chose de similaire que j'ai pu faire

Citation :
Function factorielle(k As Double) As Double
If k = 1 Or k = 0 Then
  factorielle = 1
Else
  
  c = 1
  i = 2
    Do
    Z = 0
    n = 0
      Do
        Z = Z + i
        n = n + 1
      Loop Until n = c
     c = Z
     i = i + 1
   Loop Until i = Val(k) + 1
factorielle = c
End If
End Function

Sub Arrangements()

a = InputBox("saisir la valeur de n")
b = InputBox("saisir la valeur de p")
If Val(b) <= Val(a) Then
msgbox "le nombre d'arrangements de " & b & " elements pris parmi" & a & " élements vaut : " & (factorielle(CDbl(a)) / factorielle(CDbl(a) - CDbl(b)))
Else
msgbox "p doit etre inferieur ou égale à n"
End If
End Sub

Posté par
verdurin
re : Arrangement en langage C 02-08-19 à 00:37

Bonsoir,
je suis désolé de voir proposer des algorithmes faisant 199 multiplications pour calculer A_{100}^1.
Le mien en fait une.

Posté par
liberusalain
re : Arrangement en langage C 02-08-19 à 11:45

** C'est verifier pour les petit chiffres a savoir pour 1 a 10. Ex. Arrangement de 3 dans 5. Mais non pas pour arrangement de 5 dans 20. comment faire?

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int i,j,n,p,num,den,arr;
    printf("Donner le nombre n:\n");
    scanf("%d",&n);
    printf("Donner le nombre p:\n");
    scanf("%d",&p);
    num=1;
    for(i=1;i<=n;i++)
    {
        num=num*i;
    }
    den=1;
    for (j=1;j<=(n-p);j++)
    {
        den=den*j;
    }
    {
        arr=num/den;
    }
    printf("L'arrangement p dans n est: %d",arr);
}

Posté par Profil amethystere : Arrangement en langage C 02-08-19 à 12:06

Bonjour

ma très modeste contribution

il y a des trucs dangereux (en dehors de ce que tu veux réaliser)

tu utilise la fonction scanf (moi à ta place je me méfierai d'elle )

(n'oublie pas non plus ce que te dit Verdurin gérer intlong mais bon c'est pas ça qui va faire planter ton ordi )

créer la fonction  

void f_buffer (void)
{
int c
while ((c=getchar())!=EOF&&c!='\n');
}

celle là va te vider le buffer

bon après je te conseillerais un  autre truc

mais c'est pas le genre de chose que je dirais comme ça

c'est discutable (moi ça marche mais j'ai déjà vu des spécialistes faire autrement quand ils n'utilise nt pas scanf)

en tout cas stp fait ta fonction vide buffer

et créer ta factorielle  

Posté par Profil amethystere : Arrangement en langage C 02-08-19 à 12:14

amethyste @ 02-08-2019 à 12:06

Bonjour

faute de frappe oublie d'un point virgule

void f_buffer (void)
{
int c;
while ((c=getchar())!=EOF&&c!='\n');
}

celle là va te vider le buffer

bon après je te conseillerais un  autre truc

mais c'est pas le genre de chose que je dirais comme ça

c'est discutable (moi ça marche mais j'ai déjà vu des spécialistes faire autrement quand ils n'utilise nt pas scanf)

en tout cas stp fait ta fonction vide buffer

et créer ta factorielle  

Posté par
verdurin
re : Arrangement en langage C 03-08-19 à 22:43

Bonsoir,
si n et p sont des entiers positifs tels que np alors

\large \text{A}_n^p=\frac{n!}{(n-p)!}=\prod_{k=n-p+1}^nk

sinon on peut se demander quel est le sens de \text{A}_n^p.

Il me semble particulièrement stupide de calculer les factorielles et d'utiliser la formule \frac{n!}{(n-p)!}.

On sait que le résultat est un entier, et on peut simplifier avant de faire le calcul.

Par exemple \text{A}_{17}^2=17\times 16 me semble plus manipulable que \text{A}_{17}^2=\dfrac{ 355\,687\,428\,096\,000}{1\,307\,674\,368\,000}



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !