Posez votre question Signaler

Petit programme en langage C [Résolu]

Imzil - Dernière réponse le 17 déc. 2007 à 22:13
Bonjour,
Etantdonné débutant en langage C, permettez moi S.V.P de vous adresser mon petit probléme que je n'arrive à comprendre la réponse:
l'ennoncé de l'exercie:
Écrire une fonction qui ne renvoie aucune valeur et qui détermine la valeur maximale et la valeur minimale d’un tableau d’entiers (à un indice) de taille quelconque. Il faudra donc prévoir 4 arguments : le tableau, sa dimension, le maximum et le minimum. Écrire un petit programme d’essai.
Réponse ( que je n'arrive pas à comprendre):
void maxmin (int[], int n, int * admax, int * admin)
{
int i, max, min;
max = t[0];
min = t[0];
for (i = 1; i < n; i++)
{ if (t[i] > max) max = t[i];
if (t[i] < min) min = t[i];
}
*admax = max;
*admin = min;
}
#include <stdio.h>
int main (void)
{
void maxmin (int t[], int n, int * a, int * b);
int t[8] = {2, 5, 7, 2, 9, 3, 9, 4};
int max, min;
maxmin (t, 8, &max, &min);
printf ("valeur maxi : %d\n", max);
printf ("valeur mini : %d", min);
return 0;
}
Lire la suite 

Petit programme en langage C »

10 réponses
Réponse
+2
moins plus
yep mais ca sert à rien de passer min et max en paramètre parce qu'il seront de toute façon inutilisable. En plus il faut faire attention à la manière dont sont initialisées ton min et ton max (donc là c'est le cas tout va bien :p), parce que si tu as des uniquement des valeurs négatives dans ton tableau il va retourner min = max = 0.
void maxmin (long *t,long n){
  long min=t[0],long max=t[0],i;
  for (i = 0; i < n; ++i){
      if (t[i] > max) max = t[i];
      if (t[i] < min) min = t[i];
  }
  printf ("min = %ld et max = %ld\n", min, max);
}

lami20j- 29 mars 2007 à 05:11
Re,

l'ennoncé de l'exercie:
Écrire une fonction qui ne renvoie aucune valeur et qui détermine la valeur maximale et la valeur minimale d’un tableau d’entiers (à un indice) de taille quelconque. Il faudra donc prévoir 4 arguments : le tableau, sa dimension, le maximum et le minimum. Écrire un petit programme d’essai.


yep mais ca sert à rien de passer min et max en paramètre parce qu'il seront de toute façon inutilisable.

Pour encore une fois je suis d'accord avec toi :-))
Cependant c'est l'enoncé de l'exercice qui le demande.
lami20j- 29 mars 2007 à 09:18
D'ailleurs de début j'ai considéré que les min et max sont inutiles.

Ma 1ère approche c'était une fonction de genre

tri tableau
affichage de 1er (la valeur min) et dernier élément(la valeur max)


void tri (int *t, int n){
  /* algo de tri */
  printf("min = %d ; max = %d\n",t[0],t[n-1]);
}
--
lami20j
Ajouter un commentaire
Réponse
+2
moins plus
Ajouter un commentaire
Réponse
+1
moins plus
void minmax(long tab[], int lgti, long *mi, long *ma);

int main(int argc, char *argv[])
{
long t[]={650,2,52,5548};
int lgtab = 4;
long max=0,min=0,i=0;
minmax(t,lgtab,&min,&max);
printf("%ld\n",min);
printf("%ld\n",max);



system("PAUSE");
return 0;
}

void minmax(long tab[], int lgtab, long *mi, long *ma)
{
*mi=tab[i];
*ma=tab[i];
for (i=0;i<lgtab;i++)
{
if (*mi>tab[i])
{
*mi=tab[i];
}
if (*ma<tab[i])
{
*ma=tab[i];
}

}



}
Ajouter un commentaire
Réponse
+1
moins plus
salut a tous
vs pouvez m'aider en ça
"créer un programme :
-qui saisit deux matrices de réels
-qui verifie s'elles sont different
qui calcuke et affiche leur produit
qui retourne le maximum de la matrice produit.
Ajouter un commentaire
Réponse
+0
moins plus
void minmax(long tab[], long i, long *mi, long *ma);

int main(int argc, char *argv[])
{
long t[]={650,2,52,5548};
long max=0,min=0,i=0;
minmax(t,i,&min,&max);
printf("%ld\n",min);
printf("%ld\n",max);



system("PAUSE");
return 0;
}

void minmax(long tab[], long i, long *mi, long *ma)
{
*mi=tab[i];
*ma=tab[i];
for (i=0;i<4;i++)
{
if (*mi>tab[i])
{
*mi=tab[i];
}
if (*ma<tab[i])
{
*ma=tab[i];
}

}



}


voici un code qui j'espere va t'aider je suis aussi debutant en c
si j'utilise des long c'est plus par habitude ;-) ne fais pas comme moi :-)
je crois que le variables min et max que t'a mis ne servent pas a grand chose tu devrais renvoyer la valeur directement au pointeur
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

les long sont des entiers, donc pas de problèmes
pas besoin de pointer vers min et max puisqu'on n'a pas besoin de modifier leur valeur mais seulement de l'utiliser pour l'affichage vu que la fonction ne retourne rien, donc on s'en sers juste pour l'affichage et une fois sorti de la fonction min et max gardent leur valeur d'origine

comme le tableau doit être d'une taille quelconque, je demande au début la taille de tableau et ensuite je saisie les éléments- à modifier selon besoin
#include<stdio.h>
#include<stdlib.h>

void maxmin (long *t, long n, long max, long min);

int main ()
{
  long i, n;
  long *t;
  /* on initialise max à la valeur plus petite
   * et min à la valeur plus grande           */
  long max = -(long) ((unsigned long) ~0 >> 1) - 1;
  long min =  (long) ((unsigned long) ~0 >> 1);

  printf ("Entrez le nombre d'éléments : ");
  scanf ("%ld", &n);

  t = (long *) malloc (sizeof (long) * n);


  for (i = 0; i < n; ++i){
      printf ("Elément %ld : ", i + 1);
      scanf ("%ld", &t[i]);
    }
  maxmin (t, n, min, max);
  return 0;
}

void maxmin (long *t, long n, long min, long max)
{
  long i;
  for (i = 0; i < n; ++i){
      if (t[i] > max)
        max = t[i];
      if (t[i] < min)
        min = t[i];
    }
  printf ("min = %ld et max = %ld\n", min, max);
}
Ajouter un commentaire
Réponse
-2
moins plus
Seul petit problème lami20j c'est que si min et max sont passé en int (long) au lieu de int * (long *) la valeur de min et max ne sera pas corrigé dans le main (en C les paramètres sont des recopies) et c'est pour ça qu'on passe par un pointeur.

De plus un int et un long ce n'est pas la même chose. Ca ne prend pas la même place et pour passer de l'un à l'autre on passe par un opérateur de cast (appelé explicitement ou implicitement mais bien présent).

Bonne chance
lami20j- 28 mars 2007 à 22:21
Salut Miss :-)

la valeur de min et max ne sera pas corrigé dans le main (en C les paramètres sont des recopies) et c'est pour ça qu'on passe par un pointeur.

Exactement, je suis tout à fait d'accord et même si je ne serais pas d'accord tu as raison :-)
Toutefois dans ce cas on n'a pas besoin de modifier les min et max dans main, mais seulement d'afficher le min et le max de tableau, et c'est pour ça que je n'ai pas utilisé des pointeurs.

De plus un int et un long ce n'est pas la même chose.
Ce n'est pas aussi l'opinion de Kernighan & Ritchie

" le but de short et long est d'offrir des entiers de différentes longueurs selon les besoins; les entiers de type int prennent normalement la taille naturelle des nombres entiers sur le processeur utilisé. Les entiers de type short sont souvent codés sur 16 bits, ceux de type long sur 32 bits..."

Ajouter un commentaire
Ce document intitulé « petit programme en langage C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?