Faust Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Détaille le projet... histoire qu'on voit si on a les épaules pour... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Faust Posté(e) le 24 janvier 2004 Auteur Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 pour les 6premières question, c'est pas difficile mais j'ai pas le temps jusqu'à vendredi matin inclus Lien vers le commentaire Partager sur d’autres sites More sharing options...
Faust Posté(e) le 24 janvier 2004 Auteur Partager Posté(e) le 24 janvier 2004 j'ai jusqu'au 6 février pour ce travail mais sachant que j'ai passé plus de 40h et que j'ai pas 4 lignes d'écrites.... enfin... tout aide sera la bienvenu... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 et en C ANSI, c'est /*blabla*/ instead of //blabla Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Arf on m'excusera de ne pas me souvenir que les commentaires // ne sont pas pur ANSI 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Arf on m'excusera de ne pas me souvenir que les commentaires // ne sont pas pur ANSI 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 ? 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Grrr ça garde pas les tabulations... enfin bon. Au passage, je viesn de relire le thread, il va de soi que tu peux garder ton cisco et tes $$, un simple merci suffira, on est là pour s'aider hein Lien vers le commentaire Partager sur d’autres sites More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 EFREI OK, je comprend comment tu as ce niveau en progra... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Merci Pourquoi, tu as fait quoi toi ? Et puis tu sais, algorithmique un jour, algorithmique toujours Dans ce cas le langage importe peu, ce ne sont que des boucles et des tests... Aucun problème lié à une spécificité du langage en lui-même. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 ENSICAEN, filière Matériaux et Chimie Fine (anciennement ISMRA) (On a une filière info rézo...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Oh un chimiste ! J'avais horreur de la chimie... C'set comme l'électronique, on te fait tout calculer à 10-4 près, alors que chacun des réactifs ou composants a une marge de 5% les bons jours... Enfin chacun son truc hein Lien vers le commentaire Partager sur d’autres sites More sharing options...
Faust Posté(e) le 24 janvier 2004 Auteur Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Ouch, 10'000 fois trop compliqué ton programme 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 More sharing options...
Neo_13 Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 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 More sharing options...
Sentinel Posté(e) le 24 janvier 2004 Partager Posté(e) le 24 janvier 2004 Humm j'ai commencé à regarder... Ton bout de programme n'effectue pas les bonnes opérations, en plus... Il te donne le nombre de diviseurs au lieu de t'en donner la somme comme demandé dans l'énoncé ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.