Débutant en Ruby - Besoin d'aide !

Fermé
Mo0oN Messages postés 59 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 26 janvier 2012 - 8 déc. 2008 à 17:52
Mo0oN Messages postés 59 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 26 janvier 2012 - 9 déc. 2008 à 12:33
Bonjour,

Je débute en Ruby, et j'essaie de "traduire" un programme Java en Ruby. Je tiens à signalier que je ne suis pas non plus une foudre de guerre en Java ...

Le programme crée un tableau de conversion entre Fahrenheit et Celsius (on sélectionne une température de début, une température de fin, un pas, et on obtient un tableau de conversion).

Bref, rien d'exceptionnel, mais je rencontre des problèmes tout simples ...

La seule aide que j'ai est des tutoriels sur le net. Et dans aucun, je n'ai pu trouver le moyen (sûrement tout bête) de mettre plusieurs expressions conditionnelles dans un if ... En d'autres termes, je ne sais pas comment faire le || du Java.

Tant qu'à faire, je vais vous donner tout le code Java (que j'ai trouvé dans un tutoriel) et tout mon code Ruby. Si vous pouviez m'indiquer mes erreurs, ce serait cool :) Merci d'avance !


PROGRAMME JAVA :

class Sdz1 {
    public static void main(String[] args) {
       //Notre objet Scanner
Scanner sc = new Scanner(System.in);
 
//initialisation des variables
        double c, f=0;
int i,j=0;
char reponse=' ';
 
System.out.println(" ------------------------------------------------------------------------");
System.out.println("|             CONVERSION DEGRES CELSIUS ET DEGRES FARENHEIT                |");
System.out.println(" ------------------------------------------------------------------------");
 
do{//tant que reponse = O//boucle principale
        
    do{//tant que l'imprimante n'est pas prête//boucle de test pour savoir si l'utilisateur est prêt
        
        do {// tant que valeur impossible rentrée
 
//saisie des valeurs
            System.out.println("A partir de :");//affichage des directives et récupération des données
            c = sc.nextDouble();
 
            System.out.println("jusqu' à:");
            i = sc.nextInt();
 
            System.out.println("Par pas de :");
            j = sc.nextInt();
 
            if (c > i || j > i || j == 0)
                System.out.println("Traitement impossible");
 
        }while(c > i || j > i || j == 0);
 
        do {//tant que la reponse n'est pas O ou N
                
            System.out.println("Assurez-vous que l'imprimante est prête");
            System.out.println("Si vous êtes prêt, tapez O, sinon tapez N");
            //sc.reset();
            reponse = sc.next().charAt(0);
            
        }while (reponse != 'O' && reponse != 'N');
        
    }while (reponse == 'N');
 
//                                                                    Traitement des valeurs
    System.out.println("TABLE DE CONVERSION CELSIUS / FARENHEIT");
    System.out.println("---------------------------------------------");
    System.out.println("       Celsius      |       Farenheit       ");
    System.out.println("---------------------------------------------");
    
    do{//tant que l'affichage n'est pas fini, on boucle les données et les calculs
        
        f = ((9.0/5.0) * c) + 32.0;
        if (c < 10)//si le Celsius n'a qu'un chiffre, on affiche un certain nombre d'espaces
            System.out.println("         "+c+"        |         "+arrondi(f,1));
        
        else
        {
            if(c < 100)//S'il y a un chiffre en plus, on enlève un espace blanc...
                System.out.println("        "+c+"        |         "+arrondi(f,1));
            else
                System.out.println("        "+c+"       |         "+arrondi(f,1));
        }
 
        c = c + j;//On incrémente le degré Celsius avec le pas
        
    }while (c <= i);
 
    do{
        
        System.out.println("Souhaitez-vous éditer une autre table ?(O/N)");
        reponse = sc.next().charAt(0);
        
    }while(reponse != 'O' && reponse != 'N');
    
}while(reponse == 'O');
 
System.out.println("Au revoir !");
 
//Fin de programme
}
        
public static double arrondi(double A, int B) {
        return (double) ( (int) (A * Math.pow(10, B) + .5)) / Math.pow(10, B);
}
 
 
 
}




PROGRAMME RUBY :


class Celfar
  conversion = Celfar.new
  
  puts "Tableau de conversion Fahrenheit - Celsius"
  
  begin
  
    begin
  
      begin

        puts "A partir de :"
        c = gets.chomp.to_i
        puts c
        
        puts "Jusqu'à :"
        i = gets.chomp.to_i
        puts i
  
        puts "Par pas de :"
        j = gets.chomp.to_i
        puts j
  
        if (c>i & j>i & j == 0)
          puts "Traitement impossible"
        end
      
      end while (c>i & j>i & j == 0)
      
      begin
    
        puts "Si vous êtes prêts, tapez O, sinon tapez N"
        reponse = gets.chomp.to_s
    
      end while (reponse != O & reponse != N)
  
    end while (reponse == N)

  puts "Tableau de conversion"
  puts "Celsius | Fahrenheit"
  
  begin
    
    f = ((9.0/5.0) * c) + 32.0
    puts c + " | " + f
    c=c+j
    
  end while (c<=i)
  
  begin
    
    puts "Souhaitez-vous éditer une autre table ?"
    reponse = gets.chomp.to_s
    
  end while (reponse != O & reponse != N)
  
end while (reponse == O)

puts "Au revoir !"

  
end




Je précise que mes begin ... end while *** sont le seul moyen que j'ai trouvé pour faire des do ... while (et non pas des while ... do)

1 réponse

Mo0oN Messages postés 59 Date d'inscription samedi 8 novembre 2008 Statut Membre Dernière intervention 26 janvier 2012 2
9 déc. 2008 à 12:33
up
0