Question:programmation C++

Fermé
Anna - 3 avril 2006 à 14:22
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 3 avril 2006 à 22:11
Bonjour, je suis débutante en C++ et j'ai un problème avec l'un de mes programmes (il ne fonctionne pas correctement). Voici l'énoncé de l'exercice:
Écrire un programme C++ qui permet de saisir tableau de taille dim, le maximum des éléments du tableau, le rang du maximum, le minimum et le rang du minimum (à l'aide des fonctions).
Voici ce que j'ai fait :
#include <iostream>

using std::cout;
using std::cin;
using std::endl;


int MAXIMUM (int T[]) {

int dim ;
int i ;
int Max = T[0];

for (i=0 ; i<dim ; i++){
if (Max < T[i]) {
Max = T[i];
}}
return Max;
}



int MAXRANG (int T[]) {

int dim ;
int i ;
int Max ;
int rangmax ;

for (i=0 ; i<dim ; i++) {
if (Max == T[i]) {
rangmax = i ;
}}
return rangmax ;
}



int MINIMUM (int T[]) {

int dim ;
int i ;
int Min = T[0] ;

for (i=0 ; i<dim ; i++){
if (Min > T[i]) {
Min = T[i];
}}
return Min ;
}



int MINRANG (int T[]) {

int dim ;
int i ;
int Min ;
int rangmin ;

for (i=0 ; i<dim ; i++) {
if (Min == T[i]) {
rangmin = i ;
}}
return rangmin ;
}



int main (){

int dim , i , T[100] ;
int Max, Min, rangmax, rangmin ;

cout << "Entrer une valeur pour la taille du tableau\n";
cin >> dim;

for (i=0 ; i<dim ; i++) {
cout << "Entrer un entier\n";
cin >> T[i];
}

Max = MAXIMUM (T);
cout << "Le maximum des elements est : " << Max << endl;

rangmax = MAXRANG (T) ;
cout << "Le rang du maximum est : " << rangmax << endl ;

Min = MINIMUM (T) ;
cout << "Le minimum des elements est : " << Min << endl ;

rangmin = MINRANG (T) ;
cout << "Le rang du minimum est : " << rangmin << endl ;

return 0;
}



Veuillez m'aider s'il vous plaît! Merci beaucoup!

4 réponses

Salut Anna, Quelle erreur renvoie ton compilo ?

je pense que ton problème vient du fait que dans ta fonction MAXIMUM, la variable dim est inconnue (idem pour la fonction MINIMUM)

==> solution : passer la variable dim en argument de ta fonction

Sinon, tu peux faire d'une pierre deux coups entre ta fonction MAXIMUM et MAXRANG

double MAXIMUM(int T[],int dim,int * rang)
{
/*
T : tableau d'entiers
dim  : dimension du tableau
rang : indice du max
*/

int max=T[0];
rang=0;

for(int i=1;i<dim;++i)
  if(T[i]>max)
    {
      max=T[i];
      rang=i;
    }


code non testé mais je pense qu'il devrait fonctionner.
0
j'ai oublié, dans ma fonction il faut rajouter à la fin : return max
0
En fait, mon compilo ne m'envoie pas d'erreur... c'est juste quand j'éxécute mon programme, le maximum et le minimum retournés sont toujours les premières valeurs du tableau...
Merci pour votre aide!
0
J'ai fait une erreur... En fait mon programme ne donne que le maximum, mais il ne fait que retourner la première valeur du tableau... Puis après ça, c'est écrit: «Sgementation fault»... Qu'est-ce que cela veut dire? Et où sont passés les autres fonctions?
0
ouh là là, je recommence ma fonction car il y a encore une faute

double MAXIMUM(int T[],int dim,int & rang)
{
/*
T : tableau d'entiers
dim  : dimension du tableau
rang : indice du max
*/

int max=T[0];
rang=0;

for(int i=1;i<dim;++i)
  if(T[i]>max)
    {
      max=T[i];
      rang=i;
    }

return max;


0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
3 avril 2006 à 22:11
Salut.
L'erreeur dans ton programme Ana c'est que dans ta fonction, tu déclare dim mais tu ne l'initialise pas :
"int dim;" est équivalent à "int dim=0;"
donc ta boucle ne fait qu'un tour d'où lobtention du premier argument.
Pom, à ta place je mettrai "int MAXIMUM..." plutot que 'double'
de plus pour eviter les segmentaztion fault, je conseil :
int *T;
cin>>dim;
T=new int[dim];
ce qui necessite peut être de remplacer "int MAXIMUM(int T[]..." par
"int MAXIMUM(int*T.." mais c'est plus propre!
Bonne continuation
0