Langages de programmation TP6 Prof. Maria-Iuliana Dascălu Assist. Iulia-Cristina Stănică iulia.stanica@gmail.com
Objectifs pour aujourd’hui La lecture du clavier Scanner BufferedReader Les fonctions récursives Les tableaux dynamiques (ArrayList)
Lire du clavier ~ La classe Scanner~ Utilise l'entrée standard System.in (pour l’affichage, on utilisait la sortie standard System.out) On doit créer un objet Scanner: Scanner sc = new Scanner(System.in); Vous devez importer le paquet nécessaire: import java.util.Scanner; Récupérez ce que vous tapez: System.out.println("Veuillez saisir un mot :"); String str = sc.nextLine(); System.out.println("Vous avez saisi : " + str);
Lire du clavier ~ La classe Scanner~ La classe Scanner fonctionne avec plusieurs types de variables: Scanner sc = new Scanner(System.in); int i = sc.nextInt(); double d = sc.nextDouble(); long l = sc.nextLong(); byte b = sc.nextByte(); //Etc.
Lire du clavier ~ BufferedReader~ Créer un objet de type BufferedReader pour lire de l'entrée standard System.in: BufferedReader bf=new BufferedReader (new InputStreamReader (System.in) ); Vous devez importer les paquets nécessaires: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; On doit gérer les exceptions possibles: public static void main(String[] args) throws IOException Obs: Les imports, l’action de gérer les exceptions peuvent être faits automatiquement par Netbeans.
Lire du clavier ~ BufferedReader~ On prend chaque ligne lu du BufferedReader: String t = bf.readLine(); int a; double d; a = Integer.parseInt(bf.readLine()); d = Double.parseDouble(bf.readLine());
Les fonctions récursives Def: une fonction qui s'appelle elle-même lors de son exécution. la fonction se répète plusieurs fois et renvoie le résultat à la fin de chaque itération Récursivité versus boucle itérative nous utilisons la récursivité lorsque notre problème peut être réduit à un autre problème, plus simple (qui peut être résolu après une réduction).
Les fonctions récursives Chaque récurrence doit avoir les caractéristiques suivantes: Un scénario de base pour lequel nous avons une solution et une valeur de retour. Une façon de rapprocher notre problème du cas de base. Un appel récursif
Exemple 1 La fonction “factoriel”:
Exemple 2 Les nombres de Fibonacci
Les tableaux dynamiques et hétérogènes- ArrayList Combinaison entre listes et tableaux => les avantages des deux. Def: liste dynamique – on peut modifier le nombre d’éléments ajoutés dans la liste Def: liste hétérogène – on peut avoir plusieurs types de données dans la liste
Les tableaux dynamiques et hétérogènes- ArrayList Declaration: ArrayList<Integer> list = new ArrayList<Integer>(); On doit importer le paquet: import java.util.ArrayList; Ajouter des éléments dans l’ArrayList: list.add(10); list.add(15); list.add(20); Obs: on peut aussi ajouter un élément en spécifiant aussi la position (l’index).
Les tableaux dynamiques et hétérogènes- ArrayList Fonctions utiles: Dimension: int count = list.size(); Parcours des elements: for (int i = 0; i < list.size(); i++) { int value = list.get(i); System.out.println("Element: " + value); }
Les tableaux dynamiques et hétérogènes- ArrayList Fonctions utiles: Trouver la position d’un element: int index = list.indexOf(100); //premier int lastIndex = list.lastIndexOf(100); //dernier Effacer: list.remove(0); //efface le premier element
Exercices 1) Utilisez une fonction récursive pour calculer les polynômes d’Hermite. 2) Inversez un String en utilisant une fonction récursive. Hints: Appliquer les pas récursifs pour un « substring » Ajouter a chaque pas le premier caractère du string utilisé dans l’appel
Exercices 3) Ecrivez un programme qui lit du clavier deux ArrayList avec certains mots. Créez un troisième ArrayList contenant les mots communs des deux listes précédentes. 4) Ecrivez une fonction qui accepte un ArrayList de nombres entiers comme paramètre et efface les paires adjacents de la liste si l’élément gauche de la liste est plus grand que l’élément droit. Chaque élément gauche a un indice pair, chaque élément droit a un indice impair. Ex: [3, 7, 9, 2, 5, 5, 8, 5, 6, 3, 4, 7, 3, 1] devient: [3, 7, 5, 5, 4, 7]
Devoir 1) Écrivez une fonction récursive qui calcule le n-ième élément d'une suite arithmétique. La fonction a deux paramètres: le premier élément de la suite et la raison r. Puis, dans la méthode main du programme, considérez le tableau v avec 5 éléments: v={2,4,6,8,10}. Vérifiez si les éléments du tableau sont en suite arithmétique et calculez le sixième élément de la suite, à l'aide de votre fonction. Rappel: ak = a1 + (k - 1)r, ak est le k-ième élément de la suite arithmétique a, a1 est le premier élément de la suite arithmétique et r est la raison.
Devoir 2) Écrivez une fonction récursive qui calcule combien de fois une lettre apparaît dans un texte. La fonction a deux paramètres: la lettre (char) et le texte (String). Hint: Pour obtenir la lettre d'une certaine position dans la chaîne S, utilisez la fonction charAt(i): Puis, dans la méthode main du programme, considérez la chaîne “Ana are mere” et affichez combien de fois la lettre “a” apparaît dans le texte.
Devoir 3) Lisez du clavier un ArrayList. Effacez tous les éléments dupliqués de la liste. Ex: (1,2,1,3,2,1,8,5) va devenir (1,2,3,8,5). 4) Ecrivez un programme qui lit du clavier un certain nombre de Strings et fait le tri dynamiquement, en insérant le String sur la position correcte a chaque pas dans l’ArrayList. Hint: Vous pouvez utiliser une méthode appelée compareTo. Exemple ->
Devoir 4) (suite) Par exemple: Shai Ralph Hillary Tom Barbara Fred vont produire le développement suivant de l’ArrayList: [Empty] [Shai] [Ralph, Shai] [Hillary, Ralph, Shai] [Hillary, Ralph, Shai, Tom] [Barbara, Hillary, Ralph, Shai, Tom] [Barbara, Fred, Hillary, Ralph, Shai, Tom]