Aller au contenu

besoin d'un sérieux coup de pouce en C


Faust

Messages recommandés

Bon, je pète sérieusement ma coche....

J'ai beau avoir toute la volontée de la terre, je comprend pas grand chose...

Je ne sais pas où je bloque, mais ca veut pas rentrer....

alors,

Est-ce qu'il y aurait qq'un d'assez avancé en langage C (pas C++, juste C) qui pourrait me donner un sérieux coup de main?

Ca presse, les semaines défilent....

En échange, ca peut être un peu d'argent, ou j'ai un lab Cisco de qq milliers de $$, si qq'un en a besoin, ou autre...on verra...

merci...

:pleure:

Lien vers le commentaire
Partager sur d’autres sites

Je donne les énoncés du problèmes?

Écrire un programme en langage C (suffixe .c) qui :


1)	comporte une fonction avec return. Cette fonction permet de calculer        et          de retourner
la somme des diviseurs propres d’un entier donné.

2)	affiche la somme des diviseurs propres en utilisant la fonction écrite dans 1)
-de 6
       -de 28
       -de 2004

3)	comporte une fonction de type void. Cette fonction permet de calculer et de transmettre
via pointeur la somme des diviseurs propres d’un entier donné.

4)	affiche la somme des diviseurs propres en utilisant la fonction écrite dans 3)
       -de 6
       -de 28
       -de 2004
5)	comporte une fonction permettant de retourner 1 (vrai) ou 0 (faux) selon
qu’un entier donné est parfait ou non

6)	permet de déterminer et d’afficher tous les nombres parfaits entre 5 et 10 000 avec leurs 
       rangs selon le modèle suivant :

Les nombres parfaits entre 5 et 10000 :

1)	6  =  1 + 2 + 3
2)      28  =  1 + 2 + 4 + 7 + 14
3)      etc ….

---------------------------------------------------------------------
AVEC LE FICHIER MESURES.DTA
---------------------------------------------------------------------
7)  ajoutez une seule fonction avec return et ses 4 appels pour 
       afficher les 4 résultats suivants :
       - la taille moyenne des hommes
  - la taille moyenne des femmes
  - le poids moyen des hommes
  - le poids moyen des femmes

8)  ajoutez une seule fonction de type void utilisant la transmission
     	des résultats via pointeurs. On écrit ses appels puis on affiche
     	les résultats suivants :
     	- la taille la plus grande et le nombre de personnes
    dont la taille dépasse 1.77 mètre
 - le poids le plus lourd et le nombre de personnes
    dont le poids dépasse 70.0 kgs

----------------------------------------------------------------------

fichier mesures.dta:

F 1107   1.70  60.1
F 1405   1.55  55.3
F 1406   1.80  65.4
F 1005   1.67  65.8
M 1101   1.55  61.2
F 1504   1.66  55.8
M 1506   1.76  66.2
M 1103   1.78  70.2
M 1104   1.55  69.8
F 1407   1.62  58.7
F 1503   1.54  62.9
F 1707   1.72  64.5

Lien vers le commentaire
Partager sur d’autres sites

Question 1:

// QUESTION 1
// Cette fonction calcule et renvoie la somme des diviseurs propres 
// d'un entier passé en paramètre.
int sommeDiviseursPropres1(int nb)
{
int somme = 0;	// Somme des diviseurs

int i;  	// Pour la boucle
for (i=1; i<nb; i++)
{
 if (nb%i == 0) somme+=i;
}
return somme;
}

Question 2 :

// Programme principal
int main()
{
// QUESTION 2
// calcul de la somme des diviseurs propres de 6,28 et 2004
printf("Somme des diviseurs propres de 6 : %d\n",sommeDiviseursPropres1(6));
printf("Somme des diviseurs propres de 28 : %d\n",sommeDiviseursPropres1(28));
printf("Somme des diviseurs propres de 2004 : %d\n",sommeDiviseursPropres1(2004));
}

J'attaque la suite...

Lien vers le commentaire
Partager sur d’autres sites

Question 3 :

// QUESTION 3
// Cette fonction calcule et renvoie par pointeur la somme des diviseurs propres 
// d'un entier passé en paramètre.
void sommeDiviseursPropres2(int nb, int* sommeFinale)
{
int somme = 0;	// Somme des diviseurs

int i;  	// Pour la boucle
for (i=1; i<nb; i++)
{
 if (nb%i == 0) somme+=i;
}

*sommeFinale = somme;
}

Question 4 :

// Programme principal
int main()
{  
// QUESTION 4
// calcul de la somme des diviseurs propres de 6,28 et 2004
int somme;
sommeDiviseursPropres2(6, &somme); 
printf("Somme des diviseurs propres de 6 : %d\n", somme);
sommeDiviseursPropres2(28, &somme);
printf("Somme des diviseurs propres de 28 : %d\n", somme);
sommeDiviseursPropres2(2004, &somme);
printf("Somme des diviseurs propres de 2004 : %d\n", somme);
}

Lien vers le commentaire
Partager sur d’autres sites

Question 4 :

// Programme principal
int main()
{  
// QUESTION 4
// calcul de la somme des diviseurs propres de 6,28 et 2004
int somme;
sommeDiviseursPropres2(6, somme); 
printf("Somme des diviseurs propres de 6 : %d\n", somme);
sommeDiviseursPropres2(28, somme);
printf("Somme des diviseurs propres de 28 : %d\n", somme);
sommeDiviseursPropres2(2004, somme);
printf("Somme des diviseurs propres de 2004 : %d\n", somme);
}

Pour moi, en tout cas...

Lien vers le commentaire
Partager sur d’autres sites

Question 5 :

// QUESTION 5
// Un entier est parfait s'il est égal à la somme de ses diviseurs propres
// On appelle une fonction de calcul de la somme des diviseurs propres
int entierParfait(int nb)
{
if (nb == sommeDiviseursPropres1(nb)) return 1;
else return 0;
}

Avec un petit test dans le programme principal :

// Programme principal
int main()
{	
// QUESTION 5
// On teste la fonction de la question 5
printf("Test : 6 entier parfait ? %d\n", entierParfait(6));	
}

Lien vers le commentaire
Partager sur d’autres sites

Arf on m'excusera de ne pas me souvenir que les commentaires // ne sont pas pur ANSI :chinois:

Ca fait 4 ans que j'ai pas touché au C alors bon...

En tout cas là ça compile avec gcc 2.95, et ça devrait le dépanner je pense.

Non ? :D

oui impecc...

Mais GCC 2.95 est compatible avec tellement de norme... y compris C++ et Objective C... (G++ renvoie vers GCC)

Et pour la suppression des &... c'est vrai que la passage par adresse semble plus logique... mais ca marche aussi sans... je les mets pas d'hab... (d'ailleurs, &somme est une adresse... *somme est la valeur, mais somme envoie quoi????)

Lien vers le commentaire
Partager sur d’autres sites

ben dans les params je demande une adresse d'un entier (int * somme)

donc dans la fonction, :

somme est l'adresse de l'int

*somme est la valeur de l'int

et pour appeler la fonction j'ai besoin de trouver l'adresse de la variable qui servira pour le retour, j'appelle donc avec &somme.

C'est la base ça, tu me déçois Neo :D

:chinois:

Lien vers le commentaire
Partager sur d’autres sites

Question 6 :

// QUESTION 6
// Pour chacun des nombres entre mini et maxi je détermine s'il est parfait
// à l'aide de la fonction de la question 5
// Puis je fais une boucle d'affichage.
void entiersParfaits(int mini, int maxi)
{
int entier;  // Pour la boucle entre mini et maxi (inclus)
int diviseur;  // Pour la recherche des diviseurs
int premier;  // Pour améliorer l'affichage des diviseurs...

for (entier=mini; entier<=maxi; entier++)
{
 // Pas entier parfait : on essaie avec le suivant
 if (!entierParfait(entier)) continue;
 
 // Entier parfait. On l'affiche et on cherche ses diviseurs
 printf("\n %d = ",entier);
 premier = 1;
 for (diviseur=1; diviseur<entier; diviseur++)
 {
 	// On n'affiche pas de "+" si c'est le premier diviseur
 	if (entier%diviseur == 0)
 	{
   if (premier == 1) premier = 0;
   else printf(" + ");
   printf("%d",diviseur);    
 	}
 }  
}
}

Question 6 toujours, programme principal :

// Programme principal
int main()
{	
// QUESTION 6
// Affichage des entiers parfaits entre 6 et 10000
entiersParfaits(6,10000);	
}

Lien vers le commentaire
Partager sur d’autres sites

Bon, partie 1 terminée...

Rha ça fait drôle de se remettre au C...

Ca me rappelle quand j'étais président et formateur dans notre assoc' de programmation, à l'EFREI...

Au fait Faust tu fais quoi dans la vie ?

Parce que ça, c'est du niveau de première année de prépa, environ.

Faudrait aussi que tu expliques à quoi correspondent les nombres dans le fichier .dta

La colonne 1 c'est le sexe

La colonne 3 c'est la taille je présume

La colonne 4 le poids

Mais la 2° ???

Lien vers le commentaire
Partager sur d’autres sites

Bon allez je fais un petit récapitulatif avant de poursuivre.


// QUESTION 1
// Cette fonction calcule et renvoie la somme des diviseurs propres 
// d'un entier passé en paramètre.
int sommeDiviseursPropres1(int nb)
{
int somme = 0;	// Somme des diviseurs

int i;  	// Pour la boucle
for (i=1; i<nb; i++)
{
 if (nb%i == 0) somme+=i;
}
return somme;
}


// QUESTION 3
// Cette fonction calcule et renvoie par pointeur la somme des diviseurs propres 
// d'un entier passé en paramètre.
void sommeDiviseursPropres2(int nb, int* sommeFinale)
{
int somme = 0;	// Somme des diviseurs

int i;  	// Pour la boucle
for (i=1; i<nb; i++)
{
 if (nb%i == 0) somme+=i;
}

*sommeFinale = somme;
}


// QUESTION 5
// Un entier est parfait s'il est égal à la somme de ses diviseurs propres
// On appelle une fonction de calcul de la somme des diviseurs propres
int entierParfait(int nb)
{
if (nb == sommeDiviseursPropres1(nb)) return 1;
else return 0;
}


// QUESTION 6
// Pour chacun des nombres entre mini et maxi je détermine s'il est parfait
// à l'aide de la fonction de la question 5
// Puis je fais une boucle d'affichage.
void entiersParfaits(int mini, int maxi)
{
int entier;  // Pour la boucle entre mini et maxi (inclus)
int diviseur;  // Pour la recherche des diviseurs
int premier;  // Pour améliorer l'affichage des diviseurs...

for (entier=mini; entier<=maxi; entier++)
{
 // Pas entier parfait : on essaie avec le suivant
 if (!entierParfait(entier)) continue;
 
 // Entier parfait. On l'affiche et on cherche ses diviseurs
 printf("\n %d = ",entier);
 premier = 1;
 for (diviseur=1; diviseur<entier; diviseur++)
 {
 	// On n'affiche pas de "+" si c'est le premier diviseur
 	if (entier%diviseur == 0)
 	{
   if (premier == 1) premier = 0;
   else printf(" + ");
   printf("%d",diviseur);    
 	}
 }  
}
}




// Programme principal
int main()
{
// QUESTION 2
// calcul et renvoi par return de la somme des diviseurs propres de 6,28 et 2004
printf("Somme des diviseurs propres de 6 : %d\n",sommeDiviseursPropres1(6));
printf("Somme des diviseurs propres de 28 : %d\n",sommeDiviseursPropres1(28));
printf("Somme des diviseurs propres de 2004: %d\n",sommeDiviseursPropres1(2004));

// QUESTION 4
// calcul de la somme des diviseurs propres de 6,28 et 2004
int somme;
sommeDiviseursPropres2(6, &somme); 
printf("Somme des diviseurs propres de 6 : %d\n", somme);
sommeDiviseursPropres2(28, &somme);
printf("Somme des diviseurs propres de 28 : %d\n", somme);
sommeDiviseursPropres2(2004, &somme);
printf("Somme des diviseurs propres de 2004 : %d\n", somme);

// QUESTION 5
// On teste la fonction de la question 5
printf("Test : 6 entier parfait ? %d\n", entierParfait(6));

// QUESTION 6
// Affichage des entiers parfaits entre 6 et 10000
entiersParfaits(6,10000);

}

Lien vers le commentaire
Partager sur d’autres sites

wow, 100 000 fois merci!!!

bon, j'ai pas essayer parce que j'ai vraiment trop mal à la tête, mais je fais ca demain à la première heure et je vous en donne des nouvelles...

ce que je fait dans la vie, je suis administrateur systèmes (rézo), 2 ans d'expérience, à temps partiel. Ma formation initiale est plus orienté sur le génie électrique, les télécoms et surtout le réseau....mais au niveau collégial (je suis au Québec, je ne sais pas pour vous ca représente quoi....je crois que c'est bac+2 ou 3)

comme mon diplôme n'ouvre pas assez de porte, j'ai décidé de m'inscrire à l'université...mais voilà, comme il n,y a rien au Qc en réseautique, je fais un peu par obligation de l'informatique pure....

Autrement dit, je fais du C par obligation (même si tout le monde me dit que c'est indispensable) pour aller chercher un diplôme universitaire....

mais vraiment, je ne serai jamais un programmeur, et encore moin un demi-programmeur...dans un certain sens, je me fou un peu de pas comprendre...

alors Cisco, tcp/ip, ca va...mais le C...ouf...

voilà moi ce que j'ai trouvé (écrit et coller avec d,autre exemple....) c'est jolie mais ca marche pas...

#include <stdio.h> /* inclusion de la librairie standard */

#define TRUE  1
#define FALSE 0

/* Affichage du menu principal */

void AfficheMenu()
{

printf("<----Menu Principal---->\n\n");
printf("1. Calculer la somme des diviseurs d'un entier donné.\n");
printf("2. Afficher la somme des diviseurs propres de 6, 28 et 2004\n");
printf("3. Calculer la somme des diviseurs d'un entier donné (via pointeur).\n");
printf("4. Afficher la somme des diviseurs propres de 6, 28 et 2004 (via pointeur)\n");
printf("5. Verifier si un entier est un nombre parfait en retournant VRAI ou FAUX.\n");
printf("6. Afficher les nombre parfaits de 5 a 10 000 avec leur rang.\n");
printf("7. Afficher la moyenne de la taille et du poid des hommes et femmes.\n");
printf("8. Afficher la taille la plus grand et ceux qui dépasse 1.77m et le poid le plus lourd et ceux qui dépasse 70kg.\n");
printf("9. Quitter\n");
printf("Choix : ");
}

/* Fin de l'affichage du menu principal */


/* Cette fonction compte et retourne le nombre de diviseurs d'un nombre donné */

int calcSommeDiviseurs( int nombre)
{
int sommeDiviseurs = 0;
int	compteur;

for ( compteur = 1; compteur <= nombre; compteur++)
if (nombre % compteur == 0)
sommeDiviseurs++;

return sommeDiviseurs;
}

/* Fin de la fonction compte et retourne le nombre de diviseurs d'un nombre donné */


/* Fonction affiche ......*/


void afficherDiviseurs(int nombre)  {

int rang = 0;
int	candidat;

/* compter + afficher tous les diviseurs du nombre: */
printf("Liste des %d diviseurs de %d :\n", calcSommeDiviseurs(nombre), nombre);
printf("Rang      Diviseur\n");

for ( candidat = 1; candidat <= nombre; candidat++)
if (nombre % candidat == 0)
printf("%3d) %10d\n", ++rang, candidat);

printf("\n");
}

/* Fin affichage */

/* Fonction des nombres parfait */

int nbrParfait(int n)
{
int i, j;
i = 0;

printf ("Entrez un nombre N\n");
scanf ("%d", &n);

for (j=2;j<=n/2;j=j+1)
{
if (n%j==0)
{
i = i + j;
}
}

if (i==n)
{
printf ("%d est un nombre parfait.\n", n);
}
else
{
printf ("%d n'est pas un nombre parfait.\n", n);
}

return n;
}

/* Fin fonction nombre parfait */

/* Debut de la fonction principale */

int main()
{
int chiffre_diviseur = 0;
int resultat = 0;
int continuer = TRUE;  // Variable pour la boucle du programme
int choix;    	// Variable pour le menu
const int NOMBRE1 =  6;
const int NOMBRE2 =  28;
const int NOMBRE3 =  2004;
int achanger1 = 1;

while(continuer == TRUE) {
AfficheMenu();

scanf("%d",&choix);

switch(choix) {
case 1:          	/* Calculer la somme des diviseurs d'un entier donné */
printf("test\n", calcSommeDiviseurs(achanger1));
continuer = TRUE;
break;

case 2:          	/* Afficher la somme des diviseurs propres de 6, 28 et 2004 */
afficherDiviseurs(NOMBRE1);
afficherDiviseurs(NOMBRE2);
afficherDiviseurs(NOMBRE3);
break;

case 3:          	/* Calculer la somme des diviseurs d'un entier donné (via pointeur) */
/*	afficherDiviseurs(nombre);
break;

case 4:          	/* Afficher la somme des diviseurs propres de 6, 28 et 2004 (via pointeur)
nbrParfait();
break;

case 5:          	/* Verifier si un entier est un nombre parfait en retournant VRAI ou FAUX.
nbrParfait();
break;

case 6:          	/* Afficher les nombre parfaits de 5 a 10000.
nbrParfait();
break;

case 7:          	/* Afficher la moyenne de la taille et du poid des hommes et femmes.
nbrParfait();
break;

case 8:          	/* Afficher la taille la plus grand et ceux qui dépasse 1.77m et le poid le plus lourd et ceux qui dépasse 70kg.
nbrParfait();
break;


case 9:
continuer = FALSE;
break;          	*/

default:  	// 0 ou autre
continuer = FALSE;
break;

}

}

return 0;
}


/* Fin de la fonction principale */

pour la deuxième colonne, je vais vérifier car moi même je ne sais même pas c'est quoi...

Lien vers le commentaire
Partager sur d’autres sites

Ouch, 10'000 fois trop compliqué ton programme :fou:

Prends le mien, ça compile tout seul, et j'ai abondamment commenté pour que tu puisses comprendre et éventuellement réexpliquer à un examinateur...

Et au moins, il fait pile ce qui est demandé, ni trop, ni trop peu. (le tien essaie de proposer un menu interactif, tout ça... bref, plein de trucs inutiles)

Sinon c'est vrai, si tu est dans l'administration réseaux, je comprends parfaitement que ça t'em ;) de de te taper du C... qui n'est d'ailleurs pas le meilleur langage pour apprendre à programmer. Enfin bon.

Bon, je vais essayer d'analyser un peu plus en détail ton prog, il y a peut-être dedans des indices pour comprendre à quoi sert cette 2° colonne.

Je te tiens au courant :)

Lien vers le commentaire
Partager sur d’autres sites

Sinon c'est vrai, si tu est dans l'administration réseaux, je comprends parfaitement que ça t'em ;) de de te taper du C... qui n'est d'ailleurs pas le meilleur langage pour apprendre à programmer. Enfin bon.

Pas d'accord... Apprend une forme de rigueur dans la progra... Je trouve que c'est un bon point de départ... vu qu'on fait se qu'on veut, on fait des conneries... C'est comme ça qu'on apprend...

Genre 3 plantages de E3000 (bi pro ultra sparc III + 2Go de ram) à cause d'un malloc sur 3Go sur un des TX...

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...