IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Exercices (niveau débutante)


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut Exercices (niveau débutante)
    Bonjour, bonsoir,

    Je suis en L1 de maths et je suis débutante en info (initiation à la programmation).
    J'ai plusieurs exercices et je viens chercher de l'aide et des explications à ceux que je ne comprends pas...

    On a le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int borne = 5;
    int somme = 0;
    for(int i=0; i<=borne; i++){
    somme=somme+i;
    }
    (Donc là, suivant les valeurs de i : 0, 1, 2, 3, 4, 5, somme sera égale à 0, 1, 3, 6, 10 et 15, c'est bien ça ?)

    Questions :
    1/ Modifier le code précédent pour calculer la somme des entiers de 10 à 100.
    2/ Ecrire une fonction int sumIntegers (int n) qui retourne la somme des entiers de 0 à n.

    Pour la 1/, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    somme=0;
    for(int i=10, i<=100; i++){
    somme=i+somme;
    }
    Parce que j'essaye de visualiser...
    Quand i=10 : somme = 10+0=10
    Quand i=11 : somme = 11+10=21
    Quand i=12 : somme = 12+11+10=33
    Etc
    C'est bien cela ?

    Et pour la 2/, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int n;
    somme=0;
    for (i=0; i<=n; i++){
    somme=somme+i;
    Return(somme);
    }
    C'est bien cela ?

    Je vous remercie d'avance !
    Bonne journée/soirée.

  2. #2
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Oups, j'ai posté trop vite.

    La dernière question est :
    Ecrire une boucle permettant de calculer la somme des cubes des entiers de 1 à 100.

    Pour celui j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sommecarre=0;
    for (int i=1; i<=100; i++){
    sommecarre=(i+sommecarre)^3;
    }
    Mais ça me paraît incohérent et pas du tout juste lorsque j'essaye de "résoudre" ma boucle toute seule...
    Pouvez-vous m'aider ?

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Ennydra Voir le message

    (Donc là, suivant les valeurs de i : 0, 1, 2, 3, 4, 5, somme sera égale à 0, 1, 3, 6, 10 et 15, c'est bien ça ?)
    Oui.

    Citation Envoyé par Ennydra Voir le message
    Pour la 1/, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    somme=0;
    for(int i=10, i<=100; i++){
    somme=i+somme;
    }
    C'est bien cela ?
    oui (si somme est bien déclaré ailleurs comme int, sinon il faut int somme=0;.

    Citation Envoyé par Ennydra Voir le message
    Et pour la 2/, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int n;
    somme=0;
    for (i=0; i<=n; i++){
    somme=somme+i;
    Return(somme);
    }
    C'est bien cela ?
    non (enfin presque), on te demande de faire une méthode qui s'appelle int sumIntegers (int n), donc il faut quelque chose comme ça au moins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int sumIntegers (int n) {
       ...
    }
    Il faut enlever la déclaration de n (int n).

    Ensuite, il y a un problème d'accolade dans ton code : si tu mettais ton code tel quel dans la méthode ci-dessus (à la place des ...), tu n'aurais jamais comme résultat que la somme de la première itération, donc 0.

    Dans le for, il manque le type de la variable i :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i=0; i<=n; i++)
    Et, comme dans le cas précédent, la variable somme n'a pas de type :

    En plus, c'est return, par Return (tous les mots clefs Java sont toujours en minuscules).



    A noter, qu'on pourrait éviter l'itération où i vaut 0, vu que c'est l'élément neutre de l'addition (faire for(int i=1; i<=n; i++) )
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Ennydra Voir le message
    Pour celui j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sommecarre=0;
    for (int i=1; i<=100; i++){
    sommecarre=(i+sommecarre)^3;
    }
    Mais ça me paraît incohérent et pas du tout juste lorsque j'essaye de "résoudre" ma boucle toute seule...
    Alors là déja tu essaie de faire systématiquement le cube du résultat précédent, genre 1 => (1+2) au cube =9 => (9+3) au cube = 1728 => (1728+4) au cube ~= 5 milliards
    alors qu'on te demande de juste faire le cube de i.

    Ensuite, la notation ^ en java, ce n'est pas le cube, c'est le XOR bit à bit
    Le cube, faut le calculer à la main, pas bien dur

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ensuite, la notation ^ en java, ce n'est pas le cube, c'est le XOR bit à bit
    le vilain pratiquement jamais utilisé d'ailleurs, je l'avais même oublilé

    Citation Envoyé par tchize_ Voir le message
    Le cube, faut le calculer à la main, pas bien dur
    à la main == Math.pow(i, 3), bien sûr
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    à la main == Math.pow(i, 3), bien sûr
    Euh, moi j'aurais dit i*i*i. Déjà c'est plus facile à trouver tout seul, et ça évite de partir dans les calculs flottants.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Coucou à tous,
    Je vous remercie pour vos réponses.

    joel.drigo, le code sera donc (pour la question 2/) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int sumIntegers (int n) {
       int somme=0;
       for (int i=0; i<=n;i++){
          somme=somme+i;
       }
       return(somme);
    }
    J'oublie toujours de déclarer le type de ma variable, alors que pourtant je le sais, c'est dingue !
    Sinon merci de m'avoir corrigée pas à pas, j'ai bien vu où se trouvaient mes erreurs

    Pour la question 3/, c'est une autre histoire...
    Déjà je ne suis pas sûre de bien comprendre la question. Est-t-il bien demandé de calculer la somme des cubes de 1 à 100 donc :
    Pour i=1, 1^3...
    Pour i=2, 1^3 + 2^3...
    Pour i=3, 1^3 + 2^3 + 3^3...
    ...
    Pour i=100, 1^3 + 2^3 + 3^3 + ... + 100^3 ?
    C'est bien la question ?

  8. #8
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 2 155
    Points
    2 155
    Par défaut
    2- OK

    3 - C'est bien le résultat souhaité, mais la solution proposée précédemment ne correspond pas.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé de faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int somme = 0;
    for (int i = 1; i<=100; i++){
    somme = (i*i*i)+somme;
    }
    J'ai essayé de résoudre "à la main" les trois premiers i et ça m'a l'air juste... A savoir :
    i=1 : 1*1*1+0=1
    i=2 : 2*2*2+1=9
    i=3 : 3*3*3+9=36

    Ai-je juste ?

    Et autre petite question, j'ai d'autres exercices (je révise mon partiel et tente donc de faire chacun des exercices pour être prête pour la pratique samedi !), mieux vaut les poster ici ou ouvrir un autre topic ?

  10. #10
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 2 155
    Points
    2 155
    Par défaut
    C'est juste.

    Et poste ici c'est plus simple.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci bien !

    Je suis désolée de répondre tard tous les jours, je suis en cours... Voilà pour les exercices. Ils ne sont pas à faire mais je veux les faire pour bien m'entraîner et être préparée !

    a)
    Ecrire une condition permettant de tester si le tiers de l'entier x appartient à l'intervalle [2;8].

    b)
    Ecrire une condition permettant de tester si les entiers a, b et h peuvent correspondre aux longueurs des côtés d'un triangle rectangle, où h serait la longueur de l'hyothénuse.

    c) très dur...
    1. Ecrivez une fonction qui prend en paramètre un entier n et qui affiche une ligne d’astérisques « * » de longueur n puis va à la ligne. Par exemple, si n vaut 7, votre fonction affichera : *******
    2. Modifier votre fonction pour qu'elle affiche une ligne pointillée alternant astérisques et espaces. Par exemple, si n vaut 7, votre fonction affichera : * * * *
    Qu'affiche-votre fonction qui n est pair ?

    Donc pour la a), j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int x;
    x=x/3;
    if (x>=2){
    if (x<=8){
    return true;
    PrintString(+x+ "appartient à [2;8].");
    }else{
    return false;
    PrintString(+x+ "est simplement supérieur ou égal à 2.");
    }else{
    return false;
    PrintString(+x+ "n'appartient pas à l'intervalle [2;8]");
    }
    }
    J'avais vu le "return true", "return false" sur des corrections en ligne mais je ne suis pas sûre que ça se fasse (je n'ai pas la possibilité de vérifier sur un compilateur chez moi !), à moins que l'on fasse une fonction de type : static boolean. C'est bien ça ?

    Pour la b), alors là je commence à être plantée...

    J'ai pensé à utiliser Pythagore, et dire que si h²=a²+b² alors a, b et h peuvent correspondre aux côtés d'un triangle rectangle. Suis-je sur la bonne voie ?

    Je vous remercie pour toute aide. Avez-vous des pistes pour m'aider, des "indices" ?

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    1) quelques remarques:

    indente ton code, ce sera plus facile à lire.
    On te demande d'écrire une condition, là tu a écrit tout un bloc de code, ce n'est donc pas correct, mais tu es sur la voie. On condition c'est ce que tu peux mettre dans un if (condition)
    Indice: tu peux regrouper tes deux tests existant avec un && et ça devrait tomber bon. On ne te demande pas d'afficher quoi que ce soit
    Effectivement, quand tu fais un return (mais c'est hors sujet de l'exercice), la valeur que tu retourne doit correspondre à la déclaration sur le type de valeur que retourne ta méthode. Autrement dit, pour un return false, il faut être dans une méthode qui retourne un boolean.

    2) Oui, voilà, tu tiens ta condition à tester avec ça. Plus qu'à traduire ça en code

    3) Commence pas essayer, tu va voir ça viendra tout seul le code

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    1) quelques remarques:

    indente ton code, ce sera plus facile à lire.
    On te demande d'écrire une condition, là tu a écrit tout un bloc de code, ce n'est donc pas correct, mais tu es sur la voie. On condition c'est ce que tu peux mettre dans un if (condition)
    Indice: tu peux regrouper tes deux tests existant avec un && et ça devrait tomber bon. On ne te demande pas d'afficher quoi que ce soit
    Effectivement, quand tu fais un return (mais c'est hors sujet de l'exercice), la valeur que tu retourne doit correspondre à la déclaration sur le type de valeur que retourne ta méthode. Autrement dit, pour un return false, il faut être dans une méthode qui retourne un boolean.

    2) Oui, voilà, tu tiens ta condition à tester avec ça. Plus qu'à traduire ça en code

    3) Commence pas essayer, tu va voir ça viendra tout seul le code
    Je réessaye (j'ai du mal car je ne vois pas comment je peux faire cet exercice sans rien faire afficher par la fonction, on est bien obligé d'utiliser soit PrintString soit system.out.println ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int x;
    x=x/3;
     if( (x>=2) && (x<=8) ) {
         System.out.println(+x "est compris dans l'intervalle [2;8].");
     } else {
         System.out.println(+x "n'est pas compris dans l'intervalle [2;8].");
     }
    Sinon, autre solution...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    static boolean intervalle (int x) {
      x=x/3;
      if( (x>=2) && (x<=8) ) {
         return true;
      } else {
         return false;
      }
    }
    J'essaye de me lancer dans l'exo b et c en attendant vos réponses !

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Pour la b (mais ça me paraît vraiment trop simpliste !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int a;
    int b;
    int h;
      if (h*h == a*a + b*b) {
         System.out.println(+a "," +b+ "et" +h+ "peuvent correspondre aux longueurs des côtés d'un triangle rectangle où h est l'hypothénuse.");
      } else {
         System.out.println(+a "," +b+ "et" +h+ "ne peuvent pas correspondre aux longueurs des côtés d'un triangle rectangle où h est l'hypothénuse.");
      }
    Ou encore une fois, l'autre solution trouvée pour ne rien afficher...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static boolean trirectangle (int a, int b, int h) {
       if (h*h == a*a + b*b) {
          return true;
       } else {
          return false;
       }
    }

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, c'est en gros ça l'idée (les versions avec return true/false). Pour le test d'appartenance à l'intervalle, comme pour le test si ce sont bien les longueurs des segments d'un triangle rectangle, que tu pourrais appeler testTriangleRectangle plutôt que trirectangle. Il est important d'avoir des noms de méthodes qui ont un sens direct, ce qui permet dans les gros programmes d'estimer rapidement ce qu'est censé théoriquement faire une méthode. Pareil, pour les variables, sauf, si, comme dans ton cas, tu as un énoncé qui t'indique précisément des noms de variables.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Cool, merci !

    D'accord pour les noms de fonction, donc pour la a/ "testIntervalle" serait plus adapté !

    Maintenant pour la 17), ça va quasiment faire 1H que je suis dessus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static void ligneAsterisques (int n) {
      String s = "";
      for (int i=1; i<=n; i++) {
         s = s+"*";
      }
      PrintString(s);
    }
    Je n'ai pas initialisé ma variable i à 0 car je ne vois pas comment faire...

    Pour la partie 2 (alternant astérisques et espaces), je suis réellement perdue.
    i=1 : *
    i=2 : *
    i=3 : * *
    etc

    _ signifie "espace" pour que ce soit plus compréhensible :

    Je me lance...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static void ligneAsterisquesEtEspaces (int n) {
      String s = "";
      for (int i=1; i<=n/2; i++) {
         s=s + "*_";
      }
      PrintString(s);
    }
    Mais ça n'ira pas...
    Puisque quand i vaut 1, s sera égal à *_. Quand i vaut 2, s *_*_.
    Mais je ne vois vraiment pas comment faire... Avez-vous des pistes ?

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bon, pour la première question, la ligne avec n "*", c'est une solution. Je ne sais pas exactement le cadre de l'exercice, si tu dois obligatoirement utiliser printString() ou pas (et surtout ce que ça fait exactement), mais tu verras, plus tard, qu'on peut faire différemment (en consommant moins de mémoire, en allant plus vite, etc...). Mais ta solution fonctionne.

    Maintenant, pour la deuxième question, tu peux partir de la première. La différence entre les deux, c'est qu'une fois sur 2, on veut une astérisque, ou une espace. Lorsqu'on a ce genre de chose (1 truc sur 2), et qu'on parcourt des entiers, un moyen assez simple d'alterner 2 choses et de considérer que des entiers peuvent être pairs ou impairs, et, ce qui tombe bien pour ce genre de cas, c'est qu'on a un entier pair sur 2 et un entier impair sur 2 (un entier pair, suivi d'un impair, suivi d'un pair, etc...).

    Comment peut-on tester qu'un entier est pair (ou impair) : s'il est divisible par 2, c'est qu'il est pair. Autrement dit, si le reste de la division entière par 2 est 0, il est pair. Le signe de la division entière en Java, appelé modulo, est %.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = 10%2; // i vaut 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = 11%2; // i vaut 1
    A partir de là tu peux imaginer comment ajouter une condition qui permet de déterminer si on doit faire s=s+"*", ou s=s+" ".

    Supposons que tu n'aies pas le droit au modulo (car l'énoncé te l'interdit, ou que tu n'es pas censé l'avoir vu en cours, ou autre...) : dans ce cas, on peut considérer qu'a chaque étape on ait besoin de faire 2 choses : s=s+"*", et s=s+" ".

    On peut écrire une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0; i<n; n+=2) {
     
    }
    Ainsi, on boucle entre 0 et n, mais i prend les valeur 0, 2, 4...

    Maintenant, effectivement lorsqu'on a n=7, on devrait avoir au final "* * * *" : il n'y a donc pas d'espace à la fin. On a un cas où on ne doit pas faire les 2 choses (s=s+"*", et s=s+" ") successivement, mais que la première.

    On peut, par exemple, tester si i+1 est <n, pour savoir si la chaîne est censé encore continuer après, et, ainsi, déterminer si on doit ou pas ajouter encore une espace...

    Tu devrais maintenant pouvoir élaborer une solution.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Re !

    Merci beaucoup pour cette réponse très détaillée.

    Pour la première partie, non, je ne suis pas obligée d'utiliser PrintString, l'énoncé ne dit rien là-dessus. Il est simplement dit que la fonction doit afficher une ligne d'astérisques de longueur n correspondant à l'entier n... J'ai fait ce qui me semblait le plus simple !

    Pour la deuxième partie, j'ai commencé à utiliser le modulo en cours. La technique du modulo me paraît plus simple mais j'essaierai les deux.
    J'ai donc fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static void ligneAsterisquesEtEspaces (int n) {
       String s="";
       for (int i=1; i<=n; i++) {
            if (i%2==0) {
                 s=s+" ";
            } else {
                 s=s+"*";
            }
       }
       PrintString(s);
    }
    Ça me paraît juste mais peut-être y a-t-il quelques erreurs ?

    En tous cas merci encore joel.drigo pour cette très claire explication !

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Cette solution fonctionne.


    Pour te donner les solutions (à la question 1) auxquelles je pensais :

    Qui écrit directement dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void ligneAsterisques (int n) {
      for (int i=0; i<n; i++) {
         System.out.print('*');
      }
      System.out.println();
    }
    ou encore, avec une variable intermédiaire pour construire la chaîne (ceci évite de créer une instance de String à chaque fois que tu fais s = s + "*" : la différence est mineure avec n=7, mais avec n=1000 par exemple, elle pourra être plus conséquente) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void ligneAsterisques (int n) {
      StringBuilder s = new StringBuilder(n);
      for (int i=0; i<n; i++) {
         s.append('*');
      }
      PrintString(s.toString());
    }
    Il existe d'autres solutions, un peu plus bidouille à mon avis, comme, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void ligneAsterisquesEtEspaces (int n) {
     
        char[] tab = new char[n];
        Arrays.fill(tab, '*');
        String s=new String(tab);
        PrintString(s);
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Ah oui effectivement, c'est beaucoup plus simple...
    Je suis allée me compliquer la vie pour rien... Le premier code est tellement plus simple...!

    Par contre je n'ai pas encore bien vu les tableaux (pour le dernier code), j'ai juste eu une petite initiation !

    Mais ayant commencé l'info (et la programmation) cette année seulement il y a un point que je ne comprends pas encore... Quelle est la différence entre System.out.print("...") et PrintString("..."). Y en a-t-il une ou ça a strictement le même "sens" du point de vue de la machine ?

    En tous cas merci infiniment à toi, au moins j'ai parfaitement compris. Je vais recommencer à m'entraîner et faire beaucoup d'exos. D'autant plus qu'après ce partiel je vais commencer la pratique (donc sur la machine et pas sur le papier) et je voudrais être au point.
    Ayant mon partiel samedi, je vais probablement revenir demander de l'aide lorsque je bloquerai sur un exercice (ça m'évitera de créer un nouveau topic !).

    Merci également à tous les autres !

Discussions similaires

  1. [Tableaux] Exercice de débutant
    Par kazane dans le forum Langage
    Réponses: 10
    Dernier message: 15/09/2006, 03h19
  2. [Conseil] Livre Algo-maths niveau débutant
    Par spilliaert dans le forum Débuter
    Réponses: 11
    Dernier message: 21/04/2006, 20h57
  3. [MFC] Lire une string (niveau débutant)
    Par Korskarn dans le forum MFC
    Réponses: 10
    Dernier message: 24/08/2005, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo