Java

silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010 - 17 oct. 2010 à 18:31
silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010 - 21 oct. 2010 à 19:53
Bonjour,
Je suis débutant en java et un petit probleme se pose a moi au niveau de l'algorithme de cet exercice.

ex..
On considère en données des suites non vides d'entiers strictement positifs.
Chaque suite est déterminée par le marqueur 0 et la suite globale par le marqueur -1
exemple de suite :
1 2 4 5 0 9 6 3 1 8 0 7 0 0 67 14 0 -1
Ecrire un algorithme qui détermine et affiche le maximum de chaque sous suite partielle et le maximum de la suite globale. On remarquera qu'une suite partielle peut etre vide de même que la suite globale

Je vous remercie...

9 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
18 oct. 2010 à 09:39
Salut,

Je suis certain que beaucoup de gens sur ce forum sont capables de résoudre ce simple exercice, mais pour en revenir à ta question, quel est ton petit problème? Qu'est-ce qui ne fonctionne pas dans ta solution actuelle?
0
silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010
18 oct. 2010 à 18:25
Bonjour,

Bin en fait ce simple exercice s'avère très difficile pour moi car je n'ai aucune base en java . Donc j'aimerais qu'on m'explique un peu l'algorithme avec quels outils ... je préfère commencer petit pour m'attaquer pt etre a un plus gros probleme . Mais pour l'instant , je suis incapable d'écrire une ligne de code
0
silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010
18 oct. 2010 à 23:47
Bonsoir,
J'ai a peu près ca,ce n'est pas fameux et ca ne fonctionne pas très bien :

int enter_value=0;
int i=0,b;
int compteur=0,maxcompteur=0;
Scanner sc=new Scanner(System.in);//on entre au clavier

do{

System.out.print("Entrez des nombres \n");
enter_value = sc.nextInt();//on récupère valeur actuelle entrée au clavier
if(enter_value==-1){break;}
compteur++;
//if(enter_value==0){compteur=1;}
if(enter_value==0){
if(maxcompteur<compteur){maxcompteur=compteur;}
compteur=0;
}
i++;
}

while(enter_value!=-1);

b=i-compteur;
int c=maxcompteur-1;

System.out.print("il y a " +i +" valeur dans la chaine\n");
//System.out.print("il y a " +b +" valeur\n");
if(maxcompteur>compteur)
{
System.out.print("le maximum de la suite partielle est " +maxcompteur +" valeur\n");
}
else
if(maxcompteur<compteur){System.out.print("le maximum de la suite partielle est " +/*compteur*/c +" valeur\n");}
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 oct. 2010 à 13:16
Re,

Je vais plutôt te proposer un algo de mon cru, mais avec des trous que je te laisserai compléter :

Scanner scanner = new Scanner(System.in);

        int nombreEntre;

        boolean maximumSuitePartielleInitialise = false;
        boolean maximumSuiteGlobaleInitialise = false;

        /*
         * initialisation arbitraire pour permettre la compilation
         */

        int maximumSuitePartielle = 0;
        int maximumSuiteGlobale = 0;

        do {

            System.out
                    .println("Entrer un nombre (0 pour terminer la suite partielle, -1 pour terminer la suite) : ");

            nombreEntre = scanner.nextInt();

            if (nombreEntre == 0) {

                /*
                 * la suite partielle est terminee, on affiche le maximum de la
                 * suite partielle puis on met a jour le maximum de la suite
                 * globale
                 */

                if (maximumSuitePartielleInitialise) {
                    
                    System.out
                            .println("Le maximum de la suite partielle est : "
                                    + maximumSuitePartielle + ".");

                    if (!maximumSuiteGlobaleInitialise
                            || maximumSuitePartielle > maximumSuiteGlobale) {

                        maximumSuiteGlobale = ???;
                        maximumSuiteGlobaleInitialise = ???;

                    }

                    maximumSuitePartielleInitialise = ???;

                } else {

                    System.out
                            .println("La suite partielle est vide (pas de maximum).");

                }

            } else if (nombreEntre != -1) {

                /*
                 * on met a jour on on initialise le maximum de la suite
                 * partielle
                 */

                if (maximumSuitePartielleInitialise) {

                    if (nombreEntre > maximumSuitePartielle) {
                        maximumSuitePartielle = ???;
                    }

                } else {

                    maximumSuitePartielle = ???;
                    maximumSuitePartielleInitialise = ???;

                }

            }

        } while (nombreEntre != -1);

        if (maximumSuiteGlobaleInitialise) {

            System.out.println("Le maximum de la suite globale est : "
                    + maximumSuiteGlobale + ".");

        } else {

            System.out.println("La suite globale est vide (pas de maximum).");

        }
0

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

Posez votre question
silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010
19 oct. 2010 à 19:12
Bonjour,
Tout d'abord merci pour l'aide que tu m'apportes .
Cependant,je suis obligé de tout mettre a true sinon ca me met que les 2 suites sont vides.
Et je ne comprend pas a quel moment il faut incrémenter masuitepartielle car qnd je mets ca ,ca n'incrémente pas :

import java.util.Scanner;
public class exo6 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub



Scanner scanner = new Scanner(System.in);

int nombreEntre;

boolean maximumSuitePartielleInitialise = false;
boolean maximumSuiteGlobaleInitialise = false;

/*
* initialisation arbitraire pour permettre la compilation
*/

int maximumSuitePartielle = 0;
int maximumSuiteGlobale = 0;

do {

System.out
.println("Entrer un nombre (0 pour terminer la suite partielle, -1 pour terminer la suite) : ");

nombreEntre = scanner.nextInt();

if (nombreEntre == 0)
{

/*
* la suite partielle est terminee, on affiche le maximum de la
* suite partielle puis on met a jour le maximum de la suite
* globale
*/

if (maximumSuitePartielleInitialise)
{

System.out
.println("Le maximum de la suite partielle est : "
+ maximumSuitePartielle + ".");

if (!maximumSuiteGlobaleInitialise
|| maximumSuitePartielle > maximumSuiteGlobale)
{

maximumSuiteGlobale = maximumSuitePartielle;//
maximumSuiteGlobaleInitialise = true;//

}

maximumSuitePartielleInitialise = true;

}
else {

System.out
.println("La suite partielle est vide (pas de maximum).");

}

}

else if (nombreEntre != -1) {

/*
* on met a jour on on initialise le maximum de la suite
* partielle
*/

if (maximumSuitePartielleInitialise)
{

if (nombreEntre > maximumSuitePartielle)
{
maximumSuitePartielle = 0;
}

}
else {

maximumSuitePartielle = maximumSuitePartielle+1;
maximumSuitePartielleInitialise = true;

}

maximumSuiteGlobale++; }

}
while (nombreEntre != -1);

if (maximumSuiteGlobaleInitialise)
{

System.out.println("Le maximum de la suite globale est : "
+ maximumSuiteGlobale + ".");

}
else {

System.out.println("La suite globale est vide (pas de maximum).");

}



}

}
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
20 oct. 2010 à 13:27
Re,

Mes remarques en rouge :

import java.util.Scanner;
public class exo6 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub



Scanner scanner = new Scanner(System.in);

int nombreEntre;

boolean maximumSuitePartielleInitialise = false;
boolean maximumSuiteGlobaleInitialise = false;

/*
* initialisation arbitraire pour permettre la compilation
*/

int maximumSuitePartielle = 0;
int maximumSuiteGlobale = 0;

do {

System.out
.println("Entrer un nombre (0 pour terminer la suite partielle, -1 pour terminer la suite) : ");

nombreEntre = scanner.nextInt();

if (nombreEntre == 0)
{

/*
* la suite partielle est terminee, on affiche le maximum de la
* suite partielle puis on met a jour le maximum de la suite
* globale
*/

if (maximumSuitePartielleInitialise)
{

System.out
.println("Le maximum de la suite partielle est : "
+ maximumSuitePartielle + ".");

if (!maximumSuiteGlobaleInitialise
|| maximumSuitePartielle > maximumSuiteGlobale)
{

maximumSuiteGlobale = maximumSuitePartielle;//
maximumSuiteGlobaleInitialise = true;//

}

maximumSuitePartielleInitialise = true; // faux : après la fin d'une suite partielle, on démarre une nouvelle suite partielle il faut donc repasser l'indicateur à false

}
else {

System.out
.println("La suite partielle est vide (pas de maximum).");

}

}

else if (nombreEntre != -1) {

/*
* on met a jour ou on initialise le maximum de la suite
* partielle
*/

if (maximumSuitePartielleInitialise)
{

if (nombreEntre > maximumSuitePartielle)
{
maximumSuitePartielle = 0; // faux : si le nombre entré est supérieur au maximum de la suite partielle, on doit mettre à jour le maximum de la suite partielle avec le nombre entré (et pas 0)
}

}
else {

maximumSuitePartielle = maximumSuitePartielle+1; // faux : si le maximum de la suite partielle n'est pas encore initialisé, le nombre entré est le premier de la suite partielle, on doit donc initialiser le maximum de la suite partielle avec le nombre entré
maximumSuitePartielleInitialise = true;

}

maximumSuiteGlobale++; // faux : pourquoi as-tu rajouté cette ligne? }

}
while (nombreEntre != -1);

if (maximumSuiteGlobaleInitialise)
{

System.out.println("Le maximum de la suite globale est : "
+ maximumSuiteGlobale + ".");

}
else {

System.out.println("La suite globale est vide (pas de maximum).");

}



}

}
0
silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010
20 oct. 2010 à 20:30
Bonjour,

j'ai corrigé mes erreurs et testé le programme .


Mais en fait je n'ai pas bien compris l'exercice .
Le maximum de la suite partielle ,c'est le chiffre le plus grand de cette suite? ou le nombre de chiffres maximum entré dans celle-ci ?
C'est pour ca que j'avais mis une ligne de commande en plus .
(maximumSuiteGlobale++;)
Donc je pensais incrémenter un compteur pour compter le nombre de chiffres entrés ds la suite globale .


merci
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
21 oct. 2010 à 09:21
Bonjour,

ah, je comprends mieux tes erreurs maintenant!

Oui, le maximum de la suite partielle est le plus grand nombre (et pas chiffre au passage) de la suite partielle.
0
silverchien Messages postés 6 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 21 octobre 2010
21 oct. 2010 à 19:53
Salut,
ok je comprends mieux l'exercice maintenant.
0
Rejoignez-nous