Solution du TD d'informatique No. 1 :
Quelques programmes simples

Patrick Gros -- Patrick.Gros@irisa.fr
Didier Le Botlan -- didier.le_botlan@inria.fr

Lundi 13 novembre 2000

1   Permutation aléatoire d'un tableau

import java.io.* ;
import java.lang.* ;
import java.util.* ;

class tableau_aleatoire {
    public static void main(String[] arg) {
 // On verifie que les arguments sont corrects
 if (arg.length != 1) {
     System.out.println("Utilisation : java tableau_aleatoire n") ;
     System.exit(0) ;
 }

 // Creation du tableau
 int n = Integer.parseInt(arg[0]) ;
 int[] tableau = new int[n] ;

 // Initialisation du tableau
 for (int i = 0 ; i < n ; ++i)
     tableau[i] = i ;

 // Permutation aleatoire du tableau
 for (int i = n - 1 ; i > 0 ; --i) {
     int a = (int)(Math.random() * i) ;
     int x = tableau[a] ;
     tableau[a] = tableau[i] ;
     tableau[i] = x ;
 }

 // Affichage du tableau
 for (int i = 0 ; i < n ; ++i)
     System.out.println("tableau[" + i + "] = " + tableau[i]) ;
    }
}

2   Recherche de palindromes

import java.io.* ;
import java.lang.* ;
import java.util.* ;

public class palindrome {
    // Interaction avec l'utilisateur
    /////////////////////////////////
    // Demander une chaine de caracteres a l'utilisateur
    static String Lire_Chaine(String question) {
        System.out.println(question) ;
        String texte = "" ;
        try {
            BufferedReader entree = new BufferedReader(new InputStreamReader(System.in)) ;
            StringTokenizer st = new StringTokenizer(entree.readLine()) ;
            texte = st.nextToken() ;
        }
        catch(java.io.IOException e) {
            System.out.println("Erreur de lecture") ;
            System.exit(0) ;
        }
        return texte ;
    }

    // Fonction simple de recherche de palindrome
    /////////////////////////////////////////////
    static boolean Palindrome1(String chaine)
    {
 int lc = chaine.length() ;
 for (int i = 0 ; i < lc / 2 ; i++)
     if (chaine.charAt(i) != chaine.charAt(lc - i - 1))
  return false ;
 return true ;
    }
    
    // Recherche plus compliquee de palindrome
    //////////////////////////////////////////
    static boolean Est_Separateur(char c)
    {
 int NSMAX = 12 ;
 char[] separateurs = {',', ':', ' ', '.', '-', '(', ')', '{', '}', '\n', ''', ';'} ;
        for (int i = 0 ; i < NSMAX ; i++)
        if (c == separateurs[i])
            return true ;
        return false ;
    }

    static boolean Palindrome2(String chaine)
    {
       int lc = chaine.length(), d = 0, f = lc - 1 ;
       while (d < f) {
           while (d < lc && Est_Separateur(chaine.charAt(d))) d++ ;
           while (f >= 0 && Est_Separateur(chaine.charAt(f))) f-- ;
           if (d == lc || f < 0)
               return true ;
           if (chaine.charAt(d) != chaine.charAt(f))
               return false ;
           d++ ; f-- ;
       }
       return true ;
    }

    // Programme principal
    //////////////////////
    public static void main(String[] args) {
        String chaine = Lire_Chaine("Entrer une chaine de caracteres :") ;
        if (Palindrome1(chaine))
            System.out.println("La chaine " + chaine + " est un palindrome de type 1.") ;
        else
            System.out.println("La chaine " + chaine + " n'est pas un palindrome de type 1.") ;
        if (Palindrome2(chaine))
            System.out.println("La chaine " + chaine + " est un palindrome de type 2.") ;
        else
            System.out.println("La chaine " + chaine + " n'est pas un palindrome de type 2.") ;
    }
}

This document was translated from LATEX by HEVEA.