Rechercher : dans
Par :

Petit programme en langage C

Dernière réponse le 17 déc 2007 à 22:13:53 Imzil, le 28 mar 2007 à 01:53:42 
 Signaler ce message aux modérateurs

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;

}

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « petit programme en langage C » dans :
Introduction au langage C VoirPetite histoire du C Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage qui permettrait d'obtenir un système d'exploitation de type UNIX portable. D.Ritchie...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...

1

amine, le 28 mar 2007 à 04:13:53
  • +1

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

Répondre à amine

2

lami20j, le 28 mar 2007 à 20:33:18
  • +1

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);
}
lami20j

Répondre à lami20j

3

mamiemando, le 28 mar 2007 à 22:13:23

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

Répondre à mamiemando

4

lami20j, le 28 mar 2007 à 22:21:17

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..."

lami20j

Répondre à lami20j

5

mamiemando, le 29 mar 2007 à 01:25:18

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);
}

Répondre à mamiemando

7

lami20j, le 29 mar 2007 à 05:11:27

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

Répondre à lami20j

8

lami20j, le 29 mar 2007 à 09:18:39

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

Répondre à lami20j

6

tahar, le 29 mar 2007 à 05:01:59

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];
}

}



}

Répondre à tahar

9

assia, le 3 avr 2007 à 22:22:49

Répondre à assia

10

 gyhane, le 17 déc 2007 à 22:13:53

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.

Répondre à gyhane