Resoudre un algorithme(lisez le SVP)

Fermé
mina_cherou - 3 déc. 2005 à 18:38
 youp - 29 sept. 2009 à 22:43
Salut tout le monde ; je suis une nouvelle inscrite dans ce site et j’espère que je vais pas le regretter, je suis une étudiante à l’université de Blida;je suis en premiére année de specialité d'informatique. J’ai un algorithme a résoudre pour cette semaine et je suis vraiment perdus je vous en prix fêtes le moi je doit le rendre. Voila mon algorithme :

Ecrire un algorithme qui demande successivement N nombre à l’utilisateur,et qui lui dise ensuite quel était le plus grand nombre différent de 0 et le pus petit ombre différent de 0, et doit retrouver la position du plus grand et du plus petit nombre.

Exemple d’exécution :
Si N=5
Enter le nombre1 :15
Enter le nombre2 :456
Enter le nombre3 :42
Enter le nombre4 :0
Enter le nombre5 :9
Le lus rand nombre : 456 sa position : 2
Le plus petit nombre : 9 sa position : 5
aidez moi s'il vous plait et merci d'avence.

7 réponses

Var N1, N2,G,p,posG, posp,compteur
Sortir "Entrer un nombre"
Entrer N1
G=N1
p=N1
Compteur=1
posG=1
posp=1
Pour compteur=1 jusqua x-1 'x étant le nombre de nombres entrés
Sortir "Entrer N2"
Entrer N2
Si N2>=G et N2<>0 alors
G=N2
posG=compteur+1
Sinon N2<=p et N2<>0 alors
p=N2
posp=compteur+1
Fin SI
Fin pour
Sortir G,p,posG,posp
3
p.legal Messages postés 88 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 21 mars 2008 24
4 déc. 2005 à 03:49
je me demande si ce post resistera !
y'a un modal qui m'en veux et qui efface mes posts, alors j'espere que t'auras le temps de le lire !

for i=1 to 5
    print "entrez le nombre ";i;" ";
    input n
    nb(i)=n
next i
for i=1 to 5
    if i=1 then mini=nb(i)+1
    if nb(i)=mini and nb(i)<>0 then pmini$=pmini$+","+str$(i)
    if nb(i)<mini and nb(i)<>0 then mini=nb(i) :pmini$=str$(i)
    if nb(i)=maxi and nb(i)<>0 then pmaxi$=pmaxi$+","+str$(i)
    if nb(i)>maxi and nb(i)<>0 then maxi=nb(i) :pmaxi$=str$(i)
next i

print mini;" est le plus petit nombre different de zero."
print "il se trouve en position :";pmini$
print maxi;" est le plus grand nombre."
print "il se trouve en position :";pmaxi$
wait


c'est un peu plus court et c'est ecrit en liberty basic ! (mais faut pas le dire, le modal fou effaceur de post rôde dans le coin !)

@++
--
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
4 déc. 2005 à 10:27
Salut,

la même chose en C.

La saisie des nombres se fait sur la même ligne avec des espaces entre les nombres (tu peux modifier).

Ce n'est que pour les entiers, si besoin il faut modifier.

Il ne vérifie pas les doublons (à toi de modifier)

Exécution :
[lamitest@localhost bin]$ ./nb_min_max
Entrez les 5 nombres (separés par espace)  : 15 456 42 0 9
Le nombre plus grand est : 456 dans la position 2
Le nombre plus petit est : 9 dans la position 5
[lamitest@localhost bin]$

Le code
/* --------------------- */
    /* nb_min_max.c */
/* --------------------- */
#include <stdio.h>

main()
{ /* declarations */
  int i,tab_nb[5],plus_grand,plus_petit;
  int pos_max,pos_min;

  /* --- SAISIE des nombre --- */
  printf("Entrez les 5 nombres (separés par espace)  : ");
  for (i=0 ; i<5 ; i++)
    scanf("%d",&tab_nb[i]);

  /* === Recherche le nombre le plus petit et le plus grand === */
  /* initialisation a une valeur petite et grande */
  /* ..(il faut adapter en fonction de type de variable)..ici on utilise int */
  plus_petit= 2147483647;
  plus_grand=-2147483647;
  /* boucle de recherche nb plus grand et plus petit */
  for (i=0 ; i < 5 ; i++)
  {
     if (tab_nb[i] > plus_grand && tab_nb[i] != 0)
     {
       /* on memorise le nombre le plus grand */
       plus_grand=tab_nb[i] ;
       pos_max=i+1; /* la position du plus grand*/
     }
     else if (tab_nb[i] < plus_petit && tab_nb[i] != 0)
     {
       /* on memorise le nombre le plus petit */
       plus_petit=tab_nb[i] ;
       pos_min=i+1; /* la position la position du plus petit*/
     }
  }
 printf("Le nombre plus grand est : %d dans la position %d\n",plus_grand,pos_max);
 printf("Le nombre plus petit est : %d dans la position %d\n",plus_petit,pos_min);
}
1
merci pour votre aide
0
Super l'idée du recours aux tableau d'entiers !
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
enzito Messages postés 52 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006 13
3 déc. 2005 à 20:39
Dans quel language dois-tu faire cet algo?
Peut-être que l'on pourra te donner un petit coup de main...
0
je veux resoudre cet algorithme dans le language C
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > mina_cherou
4 déc. 2005 à 15:36
Regarde le poste N°5
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 déc. 2005 à 21:55
Salut,

Voila ton algo en Perl. J'ai apporté quelques modifications.

1. Le nombre N tu peux le choisir, j'ai laissé 5 par défaut.

2. Le cas où un numéro est saisie plusieurs fois. Le programme il te dit combien des fois et les positions.

Que fait le script?

1. Stocke les nombres entrés au clavier.
2. Les fonction min est max trouve les valeur min et max.
3. Une boucle while trouve la/les position(s) du/des min et max

Exemple 1 (ton exemple)
[lamitest@localhost my_perl_script]$ perl algo_nombre_ccm_03122005.pl
Fixez le nombre N, 5 par défaut:
Entrez le nombre 1 : 15
Entrez le nombre 2 : 456
Entrez le nombre 3 : 42
Entrez le nombre 4 : 0
Entrez le nombre 5 : 9

Vous avez entrez les nombres suivantes : 15 456 42 0 9
Le plus grand nombre est : 456 et se trouve dans la position 2
Le plus petit nombre différent de 0 est : 9 et se trouve dans la position 5

Exemple 2 ( 456 deux fois )
[lamitest@localhost my_perl_script]$ perl algo_nombre_ccm_03122005.pl
Fixez le nombre N, 5 par défaut:
Entrez le nombre 1 : 15
Entrez le nombre 2 : 456
Entrez le nombre 3 : 0
Entrez le nombre 4 : 9
Entrez le nombre 5 : 456

Vous avez entrez les nombres suivantes : 15 456 0 9 456
Le plus grand nombre est : 456. Saisie 2 fois. Trouvé dans les positions 2 5.
Le plus petit nombre différent de 0 est : 9 et se trouve dans la position 4
[lamitest@localhost my_perl_script]$

Le script
#! /usr/bin/perl -w

use strict;
$"=", ";
my @nb;
my @position_max;
my @position_min;
my %max;
my %min;
my $pos_max=1;
my $pos_min=1;
=head1 NAME

file_decouper - couper les fichiers texte selon un nombre de lignes.

=head1 SYNOPSIS

[user@localhost ~]$ perl algo.pl

head1 DESCRIPTION

 Ecrire un algorithme qui demande successivement N nombre à l’utilisateur,
 et qui lui dise ensuite quel était le plus grand nombre différent de 0 
 et le pus petit ombre différent de 0, et doit retrouver la position du plus grand et du plus petit nombre.

 Exemple d’exécution :
 Si N=5
 Enter le nombre1 :15
 Enter le nombre2 :456
 Enter le nombre3 :42
 Enter le nombre4 :0
 Enter le nombre5 :9
 Le lus rand nombre : 456 sa position : 2
 Le plus petit nombre : 9 sa position : 5 

=cut

# On saisi le nombre N, par défaut 5

print "Fixez le nombre N, 5 par défaut: ";
chomp(my $nombre=<STDIN>);
$nombre ||= 5;
my $compteur=1;
while ($compteur <= $nombre){
	print "Entrez le nombre $compteur : ";
	chomp(my $nb=<STDIN>);
	push @nb,$nb; # stocker les nombres dans un tableau
	$compteur++;
}

print "\nVous avez entrez les nombres suivantes : @nb\n";

# trouver le max
sub max {
	my $max = shift @_;
	foreach(@_){
		if ($_>$max){
			$max=$_;
		}
	}
	return $max;
}

my $maxim=max(@nb);

# trouver le min
sub min {
	my $min = shift @_;
	foreach(@_){
		if ($_<$min and $_<=>0){
			$min=$_;
		}
	}
	return $min;
}

my $minim=min(@nb);

my $elem_nb=join " ", @nb;
# trouver la positon de max et min et/ou les nombres d'occurences
while (@nb){
	$_ = shift @nb;
	if ($_ =~/$maxim/){
		$max{$_}++;
		$pos_max=$nombre - @nb;
		push @position_max,$pos_max;
	}elsif ($_=~/$minim/){
		$min{$_}++;
		$pos_min=$nombre - @nb;
		push @position_min,$pos_min;
	}
}

# affichage du/des nombre(s) max
if ($max{$maxim}==1){
	print "Le plus grand nombre est : $maxim et se trouve dans la position $pos_max\n";
}else{
	print "Le plus grand nombre est : $maxim. Saisie $max{$maxim} fois. Trouvé dans les positions @position_max.\n";
}

# affichage du/des nombre(s) min
if ($min{$minim}==1){
	print "Le plus petit nombre différent de 0 est : $minim et se trouve dans la position $pos_min\n";
}else{
	print "Le plus petit nombre différent de 0 est : $minim. Saisie $min{$minim} fois. Trouvé dans les positions @position_min.\n";
}


0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 déc. 2005 à 22:17
Désolé il y quelques petites erreurs concernant les commentaires.
Voilà le script avec les corréctions.
#! /usr/bin/perl -w

=head1 NAME

Trouver le max et le min de nombres saisies.

=head1 SYNOPSIS

[user@localhost ~]$ perl algo.pl

=head1 DESCRIPTION

 Ecrire un algorithme qui demande successivement N nombre à l’utilisateur,
 et qui lui dise ensuite quel était le plus grand nombre différent de 0
 et le pus petit ombre différent de 0, et doit retrouver la position du plus grand et du plus petit nombre.

 Exemple d’exécution :
 Si N=5
 Enter le nombre1 :15
 Enter le nombre2 :456
 Enter le nombre3 :42
 Enter le nombre4 :0
 Enter le nombre5 :9
 Le lus rand nombre : 456 sa position : 2
 Le plus petit nombre : 9 sa position : 5

=cut

use strict;
$"=", ";
my @nb;
my @position_max;
my @position_min;
my %max;
my %min;
my $pos_max=1;
my $pos_min=1;

# On saisi le nombre N, par défaut 5

print "Fixez le nombre N, 5 par défaut: ";
chomp(my $nombre=<STDIN>);
$nombre ||= 5;
my $compteur=1;
while ($compteur <= $nombre){
	print "Entrez le nombre $compteur : ";
	chomp(my $nb=<STDIN>);
	push @nb,$nb; # stocker les nombres dans un tableau
	$compteur++;
}

print "\nVous avez entrez les nombres suivantes : @nb\n";

# trouver le max
sub max {
	my $max = shift @_;
	foreach(@_){
		if ($_>$max){
			$max=$_;
		}
	}
	return $max;
}

my $maxim=max(@nb);

# trouver le min
sub min {
	my $min = shift @_;
	foreach(@_){
		if ($_<$min and $_<=>0){
			$min=$_;
		}
	}
	return $min;
}

my $minim=min(@nb);

my $elem_nb=join " ", @nb;
# trouver la positon de max et min et/ou les nombres d'occurences
while (@nb){
	$_ = shift @nb;
	if ($_ =~/$maxim/){
		$max{$_}++;
		$pos_max=$nombre - @nb;
		push @position_max,$pos_max;
	}elsif ($_=~/$minim/){
		$min{$_}++;
		$pos_min=$nombre - @nb;
		push @position_min,$pos_min;
	}
}

# affichage
if ($max{$maxim}==1){
	print "Le plus grand nombre est : $maxim et se trouve dans la position $pos_max\n";
}else{
	print "Le plus grand nombre est : $maxim. Saisie $max{$maxim} fois. Trouvé dans les positions @position_max.\n";
}

if ($min{$minim}==1){
	print "Le plus petit nombre différent de 0 est : $minim et se trouve dans la position $pos_min\n";
}else{
	print "Le plus petit nombre différent de 0 est : $minim. Saisie $min{$minim} fois. Trouvé dans les positions @position_min.\n";
}

0