Aide Réalisation d'un programme

Aide Réalisation d'un programme - C - Programmation

Marsh Posté le 27-02-2013 à 10:33:29    

Bonjour,  
 
Je souhaiterais avoir de l'aide pour la résolution du problème ci-dessous.  
 
A partir d'un tableau donné:  
 12,26,35,98,23,57,61,25.  
 il est demandé de réaliser une application qui va afficher un menu avec comme choix:  
 1- Affichage de la moyenne;  
 2-Affichage de la somme;  
 3- Affichage du plus petit nombre et de sa position;  
 4-Quitter.  
 
Pour cela, j'ai réalisé ce qui suit:  
#include "stdio.h"  
float moyenne( int *t, );  
int somme(int *t );  
void main()  
{  
int i;  
int t[8]={12,26,35,98,23,57,61,25};  
printf("\n1. Affichage de la moyenne" );  
printf("\n2. Affichage de la somme" );  
printf("\n3. Affichage du plus petit nombre et sa position" );  
printf("\n4. Quitter" );  
printf("\n" );  
 
scanf("%d",&i);  
switch(i)  
 {  
 case 1 : {printf("\nMoyenne = %3.3f",moyenne(t,8)); break;}  
 case 2 : {printf("\nSomme = %d",somme(t,8)); break;}  
 case 3 : { exit(1); break;}  
 default:;  
 }  
getch();  
exit(1);  
}  
 
int somme(int *t)  
 {  
 int i;  
 int s=0;  
 for(i=0;i<8;i++) s+=t[i];  
 return(s);  
 }  
 
float moyenne(int *t)  
 { return((float)somme(t,8)/8; }  
 
 
Ce code ne fonctionne pas. En plus, je n'arrive pas à formaliser le troisième choix.  
 
Je compte sur votre aide.[cpp][/cpp]

Reply

Marsh Posté le 27-02-2013 à 10:33:29   

Reply

Marsh Posté le 27-02-2013 à 10:42:28    

Ben déjà, tes fonctions somme / moyenne ne prennent qu'un argument, or tu les appelles avec deux arguments.
 
Faut que tu rajoutes cet argument :  
 

Code :
  1. int somme(int * T,int nb_case)


 
Simplement, il te dira combien de cases ton tableau a (donc tu t'en sers si tu parcours ton tableau).
 
Pour ce qui est du troisième choix, tu dois parcourir ton tableau pour retrouver la valeur la plus petite, et aussi le n° de la case qui lui correspond.
 
Et dernier truc, le main est signé sur un int, pas un void (même si le compilo tolère ça) :D


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 28-02-2013 à 08:17:38    

Salut
Quand on utilise un tableau d'éléments, il peut être intéressant (si c'est possible) d'ajouter un élément "à part" indiquant la fin du tableau. Ca t'évite alors d'avoir à passer la taille du tableau aux fonctions destinées à le manipuler.
 
Exemple: tu veux afficher ton tableau
Méthode 1: on passe la taille du tableau (ce que tu fais)

Code :
  1. void affiche(int *t, int nb)
  2. {
  3.    int i;
  4.    for (i=0; i < 8; i++) printf("%d\n", t[i]);
  5. }
  6.  
  7. int main()  
  8. {  
  9.    int t[]={12,26,35,98,23,57,61,25};
  10.    affiche(t, 8);
  11. }


 
Méthode 2: on utilise une valeur "sentinelle"

Code :
  1. void affiche(int *t)
  2. {
  3.    int *p;
  4.    for (p=t; *p != -1; p++) printf("%d\n", *p);
  5. }
  6.  
  7. int main()  
  8. {  
  9.    int t[]={12,26,35,98,23,57,61,25, -1};
  10.    affiche(t);
  11. }


 
L'avantage de cette seconde méthode c'est que si le tableau change de taille, tu n'as qu'une seule modif à faire. L'inconvénient c'est qu'il faut avoir à disposition une valeur n'ayant aucune signification réelle pour ton algo. Ici c'est possible car il s'agit de notes réelles donc on peut utiliser -1 (note impossible) mais parfois on n'a pas de possibilité...
 

akonoly a écrit :

En plus, je n'arrive pas à formaliser le troisième choix.


Tu crées 2 variables: une position et une valeur
Tu mets la position à 0 et la valeur à t[0]
Tu boucles sur ton tableau en partant de 1 (ce détail n'est pas obligatoire mais ça optimise)
A chaque itération, si l'élément [i] est plus petit que la valeur alors
    tu copies l'élément[i] dans la valeur
    tu copies i dans la position
A la fin de la boucle, tu affiches la valeur et la position...


Message édité par Sve@r le 28-02-2013 à 08:25:58

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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