SVP Un aide dans un exercice Java ??

Résolu/Fermé
Lambnlm Messages postés 4 Date d'inscription jeudi 15 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 - 15 déc. 2022 à 01:46
Lambnlm Messages postés 4 Date d'inscription jeudi 15 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 - 15 déc. 2022 à 23:16

Exercice d'itérations et boucles :

Considérons les opérations suivantes applicables à un nombre entier : — si ce nombre est divisible par 3, on lui ajoute 4; — s’il n’est pas divisible par 3 mais divisible par 4, on le divise par 2; — s’il n’est divisible ni par 3, ni par 4, on lui soustrait 1. On répète ces opérations successivement jusqu’à arriver à 0. Concrètement, partant d’un entier n0, on applique les opérations à n0 pour obtenir n1, puis si n1 n’est pas nul, on lui applique à nouveau les opérations précédentes, et ainsi de suite jusqu’à obtenir un nombre nk valant 0. Par exemple, si on part de 7, on trouve successivement les valeurs : 6, 10, 9, 13, 12, 16, 8, 4, 2, 1 et0. Le nombre k de répétitions des opérations décrites ci-dessus est alors 11. Par contre, si on part de 1, on tombe tout de suite sur 0, et le nombre de répétitions est alors de k = 1. On vous demande d’écrire un programme qui affiche le nombre de répétitions des opérations précédentes nécessaires pour tomber à 0, en partant tour à tour de chacun des entiers compris entre deux entiers saisis au clavier. Par exemple si l’on demande ce nombre de répétitions pour chaque entier entre 1 et 7, l’affichage produit par votre programme devra être : 1 -> 1 2 -> 2 3 -> 12 4 -> 3 5 -> 4 6 -> 10 7 -> 11 1 Ici, 1 et 7 (dans la 1re colonne) sont les bornes entrées au clavier, et la seconde colonne correspond au nombre de répétitions nécessaires pour arriver à 0 en partant de chacun des nombres de la 1re colonne, par exemple 11 répétitions pour 7. Si l’on demande ce nombre de répétitions pour les entiers entre 99 et 100, l’affichage du programme devra être : 99 -> 18 100 -> 17 Note : pour tester si un nombre n est divisible par p, il suffit de tester si n % p vaut zéro.

Voila Mon code : 

Je sais que j'ai des erreurs et je veux les savoir , je suis débutante en programmation ..

import java.util.Scanner;

class Suite {

	public static void main(String[] args) {

		Scanner clavier = new Scanner(System.in);

		int debut;
		do {
			System.out.print("de (>= 1) ? ");
			debut = clavier.nextInt();
		} while (debut < 1);

		int fin;
		do {
			System.out.print("a (>= " + debut + ") ? ");
			fin = clavier.nextInt();
		} while (fin < debut);

		/*******************************************
		 * Completez le programme a partir d'ici.
		 *******************************************/

		int nombre;
		for (int i = 0; i <= fin; ++i) {
			int k = 0;
			nombre = debut;

			do {
				if (nombre % 3 == 0) {
					nombre += 4;
				} else if (nombre % 4 == 0) {
					nombre /= 2;
				} else {
					nombre -= 1;
				}
				++k;

			} while (nombre != 0);
			System.out.println(debut + " -> " + k);

		}

		/*******************************************
		 * Ne rien modifier apres cette ligne.
		 *******************************************/
		clavier.close();
	}
}
A voir également:

2 réponses

Whismeril Messages postés 18963 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 3 mars 2024 921
15 déc. 2022 à 07:19

Bonjour 

on te demande, par exemple d'afficher les résultats de 1 à 7, combien cela fait il de boucle? Et combien de boucle va faire ton programme?

Mêmes questions si on te demandais de 8 à 10? 
 

Dans quelle est la valeur de départ de nombre à la 3eme itération? Qu'elle devrait elle être ?

Si tu n'arrives pas à répondre ces questions en lisant le code, tu peux l'exécuter en pas à pas et espionner le contenu des variables à chaque ligne pour voir comment elles évoluent.


0
Lambnlm Messages postés 4 Date d'inscription jeudi 15 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022
15 déc. 2022 à 15:47

J'ai compris ça , Je vaux savoir mes erreurs spécifiquement et les corriger 

0
Whismeril Messages postés 18963 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 3 mars 2024 921 > Lambnlm Messages postés 4 Date d'inscription jeudi 15 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022
15 déc. 2022 à 21:34

Ben en fait, les questions que je t'ai posées pointent directement sur les erreurs.

L'idée était de te montrai où chercher.

Mais bon KX, t'as donné la solution.

1
Lambnlm Messages postés 4 Date d'inscription jeudi 15 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022 > Whismeril Messages postés 18963 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 3 mars 2024
15 déc. 2022 à 23:14

Merci pour votre aide vraiment 

0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 013
15 déc. 2022 à 16:11

Bonjour,

Globalement le programme est bon si on fait le calcul une fois, mais sur la partie boucle tu as inversé le rôle de "i" et de "debut", ce qui ne change rien aux résultats des calculs effectués, à part que ce n'est pas ceux qu'on veut.

Au lieu de ceci :

for (int i = 0; i <= fin; ++i) {
    int k = 0;
    nombre = debut;
...
    System.out.println(debut + " -> " + k);

Il faudrait écrire :

for (int i = debut; i <= fin; ++i) { // debut au lieu de 0
    int k = 0;
    nombre = i; // i au lieu de debut
...
    System.out.println(i + " -> " + k); // i au lieu de debut

0
Lambnlm Messages postés 4 Date d'inscription jeudi 15 décembre 2022 Statut Membre Dernière intervention 15 décembre 2022
15 déc. 2022 à 23:16

Merci beaucoup pour votre aide , le problème est résolu grâce a vous ..

0