Resoudre un algorithme(lisez le SVP)

mina_cherou -  
 youp -
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

  1. youp
     
    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
  2. p.legal Messages postés 89 Statut Membre 24
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. mina_chero
       
      merci pour votre aide
      0
  4. Valus
     
    Super l'idée du recours aux tableau d'entiers !
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. enzito Messages postés 52 Statut Membre 13
     
    Dans quel language dois-tu faire cet algo?
    Peut-être que l'on pourra te donner un petit coup de main...
    0
    1. mina_cherou
       
      je veux resoudre cet algorithme dans le language C
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > mina_cherou
         
        Regarde le poste N°5
        0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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