Introduction
Dans ce laboratoire (lab), vous apprendrez à vérifier si un nombre donné est un nombre de Fibonacci en Java. Nous explorerons trois approches différentes pour y parvenir.
Tout d'abord, vous apprendrez à générer la suite de Fibonacci jusqu'à un nombre spécifié de termes. Ensuite, vous implémenterez une méthode pour vérifier si un nombre donné existe dans la suite générée. Enfin, nous optimiserons le processus de vérification en utilisant une formule mathématique qui peut déterminer efficacement si un nombre est un nombre de Fibonacci sans générer toute la suite.
Générer la suite de Fibonacci
Dans cette étape, nous allons écrire un programme Java pour générer la suite de Fibonacci jusqu'à un certain nombre de termes. La suite de Fibonacci est une série de nombres où chaque nombre est la somme des deux précédents, généralement commençant par 0 et 1. La suite ressemble à ceci : 0, 1, 1, 2, 3, 5, 8, 13, 21, etc.
Nous allons créer un nouveau fichier Java et écrire le code pour générer cette suite.
Ouvrez le WebIDE s'il n'est pas déjà ouvert. Vous devriez être dans le répertoire
~/projectpar défaut. Sinon, ouvrez le Terminal en bas et tapez :cd ~/projectCréez un nouveau fichier nommé
Fibonacci.javadans le répertoire~/project. Vous pouvez le faire en cliquant avec le bouton droit dans l'Explorateur de fichiers à gauche et en sélectionnant "Nouveau fichier", puis en tapantFibonacci.java.Ouvrez le fichier
Fibonacci.javadans l'éditeur et copiez-collez le code Java suivant :import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of terms for Fibonacci sequence: "); int n = scanner.nextInt(); if (n <= 0) { System.out.println("Please enter a positive integer."); } else if (n == 1) { System.out.println("Fibonacci sequence up to 1 term:"); System.out.println("0"); } else { System.out.println("Fibonacci sequence up to " + n + " terms:"); int firstTerm = 0; int secondTerm = 1; System.out.print(firstTerm + ", " + secondTerm); for (int i = 3; i <= n; ++i) { int nextTerm = firstTerm + secondTerm; System.out.print(", " + nextTerm); firstTerm = secondTerm; secondTerm = nextTerm; } System.out.println(); // Print a newline at the end } scanner.close(); } }Comprenons rapidement les parties clés de ce code :
import java.util.Scanner;: Importe la classeScannerpour lire l'entrée utilisateur.public class Fibonacci: Déclare la classe principale nomméeFibonacci.public static void main(String[] args): La méthode principale où l'exécution du programme commence.Scanner scanner = new Scanner(System.in);: Crée un objetScannerpour lire l'entrée depuis la console.System.out.print("Enter the number of terms... ");: Invite l'utilisateur à entrer le nombre de termes.int n = scanner.nextInt();: Lit l'entrée entière de l'utilisateur et la stocke dans la variablen.- Le bloc
if-else if-elsegère différents cas pour le nombre de termes (n). int firstTerm = 0; int secondTerm = 1;: Initialise les deux premiers termes de la suite.System.out.print(firstTerm + ", " + secondTerm);: Affiche les deux premiers termes.- La boucle
forcalcule et affiche les termes suivants. int nextTerm = firstTerm + secondTerm;: Calcule le terme suivant en additionnant les deux précédents.firstTerm = secondTerm; secondTerm = nextTerm;: Met à jourfirstTermetsecondTermpour l'itération suivante.scanner.close();: Ferme l'objetScanner.
Enregistrez le fichier
Fibonacci.java(Ctrl+S ou Cmd+S).Maintenant, compilez le programme Java en utilisant la commande
javacdans le Terminal :javac Fibonacci.javaS'il n'y a pas d'erreurs, cette commande créera un fichier
Fibonacci.classdans le répertoire~/project.Enfin, exécutez le programme compilé en utilisant la commande
java:java FibonacciLe programme vous invitera à entrer le nombre de termes. Entrez un nombre (par exemple, 10) et appuyez sur Entrée pour voir la suite de Fibonacci.
Enter the number of terms for Fibonacci sequence: 10 Fibonacci sequence up to 10 terms: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
Vous avez réussi à écrire, compiler et exécuter un programme Java pour générer la suite de Fibonacci !
Vérifier si un nombre existe dans la suite
Dans cette étape, nous allons modifier notre programme Java pour vérifier si un nombre donné existe dans la suite de Fibonacci générée. Cela implique d'ajouter une logique pour comparer le nombre saisi par l'utilisateur avec les termes de la suite au fur et à mesure de leur génération.
Ouvrez le fichier
Fibonacci.javadans l'éditeur du WebIDE.Modifiez la méthode
mainpour inclure la logique de vérification de l'existence d'un nombre dans la suite. Remplacez la méthodemainexistante par le code suivant :import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of terms for Fibonacci sequence: "); int n = scanner.nextInt(); if (n <= 0) { System.out.println("Please enter a positive integer for the number of terms."); scanner.close(); return; // Exit the program } System.out.print("Enter the number to check if it exists in the sequence: "); int checkNum = scanner.nextInt(); System.out.println("Fibonacci sequence up to " + n + " terms:"); int firstTerm = 0; int secondTerm = 1; boolean found = false; // Check the first two terms if (checkNum == firstTerm) { found = true; } System.out.print(firstTerm); if (n > 1) { if (checkNum == secondTerm) { found = true; } System.out.print(", " + secondTerm); } // Generate and check subsequent terms for (int i = 3; i <= n; ++i) { int nextTerm = firstTerm + secondTerm; if (checkNum == nextTerm) { found = true; } System.out.print(", " + nextTerm); firstTerm = secondTerm; secondTerm = nextTerm; } System.out.println(); // Print a newline at the end if (found) { System.out.println(checkNum + " exists in the Fibonacci sequence."); } else { System.out.println(checkNum + " does not exist in the Fibonacci sequence."); } scanner.close(); } }Voici un détail des modifications :
- Nous avons ajouté une invite pour demander à l'utilisateur le nombre qu'il souhaite vérifier (
System.out.print("Enter the number to check...")). - Nous lisons ce nombre dans une nouvelle variable
checkNum(int checkNum = scanner.nextInt();). - Une variable booléenne
foundest initialisée àfalse. Cette variable suivra si le nombre est trouvé dans la suite. - Nous vérifions si
checkNumest égal aufirstTermou ausecondTermavant la boucle. - À l'intérieur de la boucle
for, après avoir calculénextTerm, nous vérifions sicheckNumest égal ànextTerm. Si c'est le cas, nous définissonsfoundsurtrue. - Après la fin de la boucle, nous utilisons une instruction
if-elsepour afficher si le nombre a été trouvé en fonction de la valeur de la variablefound.
- Nous avons ajouté une invite pour demander à l'utilisateur le nombre qu'il souhaite vérifier (
Enregistrez le fichier
Fibonacci.java.Compilez le programme modifié dans le Terminal :
javac Fibonacci.javaExécutez le programme compilé :
java FibonacciLe programme demandera maintenant le nombre de termes, puis le nombre à vérifier.
Exemple 1 (Le nombre existe) :
Enter the number of terms for Fibonacci sequence: 10 Enter the number to check if it exists in the sequence: 8 Fibonacci sequence up to 10 terms: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 8 exists in the Fibonacci sequence.Exemple 2 (Le nombre n'existe pas) :
Enter the number of terms for Fibonacci sequence: 10 Enter the number to check if it exists in the sequence: 10 Fibonacci sequence up to 10 terms: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 10 does not exist in the Fibonacci sequence.
Vous avez réussi à modifier votre programme pour vérifier si un nombre fait partie de la suite de Fibonacci générée.
Optimiser avec une formule mathématique
Dans les étapes précédentes, nous avons généré la suite de Fibonacci de manière itérative et vérifié si un nombre existe en le comparant avec chaque terme. Pour des nombres très grands, générer toute la suite peut être inefficace. Dans cette étape, nous allons explorer une propriété mathématique des nombres de Fibonacci qui nous permet de vérifier si un nombre est un nombre de Fibonacci sans générer la suite.
Un entier positif x est un nombre de Fibonacci si et seulement si soit 5*x^2 + 4 soit 5*x^2 - 4 est un carré parfait. Un carré parfait est un entier qui est le carré d'un entier (par exemple, 4 est un carré parfait car c'est 2*2).
Nous allons créer un nouveau programme Java qui utilise cette formule pour vérifier si un nombre est un nombre de Fibonacci.
Créez un nouveau fichier nommé
CheckFibonacci.javadans le répertoire~/project.Ouvrez
CheckFibonacci.javaet copiez-collez le code Java suivant :import java.util.Scanner; public class CheckFibonacci { // Function to check if a number is a perfect square public static boolean isPerfectSquare(int n) { if (n < 0) { return false; } int sqrt = (int) Math.sqrt(n); return (sqrt * sqrt == n); } // Function to check if a number is a Fibonacci number public static boolean isFibonacci(int n) { // n is Fibonacci if 5*n^2 + 4 or 5*n^2 - 4 is a perfect square return isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter a number to check if it is a Fibonacci number: "); int num = scanner.nextInt(); if (isFibonacci(num)) { System.out.println(num + " is a Fibonacci number."); } else { System.out.println(num + " is not a Fibonacci number."); } scanner.close(); } }Examinons les nouvelles parties de ce code :
public static boolean isPerfectSquare(int n): Il s'agit d'une fonction auxiliaire qui prend un entiernet renvoietruesinest un carré parfait, etfalsesinon. Elle calcule la racine carrée entière et vérifie si son carré donne le nombre original.public static boolean isFibonacci(int n): Cette fonction implémente la formule mathématique. Elle calcule5*n*n + 4et5*n*n - 4et utilise la fonctionisPerfectSquarepour vérifier si l'un des résultats est un carré parfait. L'opérateur||signifie "ou".- La méthode
maininvite maintenant l'utilisateur à saisir un nombre, appelle la fonctionisFibonacciet affiche le résultat.
Enregistrez le fichier
CheckFibonacci.java.Compilez le nouveau programme dans le Terminal :
javac CheckFibonacci.javaExécutez le programme compilé :
java CheckFibonacciLe programme vous demandera d'entrer un nombre. Entrez un nombre (par exemple, 13) et appuyez sur Entrée.
Exemple 1 (Nombre de Fibonacci) :
Enter a number to check if it is a Fibonacci number: 13 13 is a Fibonacci number.Exemple 2 (Pas un nombre de Fibonacci) :
Enter a number to check if it is a Fibonacci number: 10 10 is not a Fibonacci number.
Cette méthode est beaucoup plus efficace pour vérifier si un seul grand nombre est un nombre de Fibonacci par rapport à la génération de la suite jusqu'à ce nombre.
Résumé
Dans ce laboratoire (lab), nous avons appris à vérifier si un nombre est un nombre de Fibonacci en Java. Nous avons commencé par générer la suite de Fibonacci jusqu'à un certain nombre de termes en utilisant une approche itérative simple. Cela impliquait de comprendre la définition de la suite de Fibonacci et de mettre en œuvre la logique pour calculer et afficher les termes.
Ensuite, nous avons exploré comment vérifier si un nombre donné existe dans la suite de Fibonacci générée. Enfin, nous avons appris une approche optimisée utilisant une formule mathématique pour déterminer efficacement si un nombre est un nombre de Fibonacci sans générer explicitement toute la suite. Cela impliquait de comprendre les propriétés des nombres de Fibonacci et d'appliquer la formule pour effectuer la vérification.



