init
This commit is contained in:
50
exam-basedir06/subjects/rpn_calc/subject.en.txt
Normal file
50
exam-basedir06/subjects/rpn_calc/subject.en.txt
Normal file
@@ -0,0 +1,50 @@
|
||||
Assignment name : rpn_calc
|
||||
Expected files : *.c, *.h
|
||||
Allowed functions: atoi, printf, write, malloc, free
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Write a program that takes a string which contains an equation written in
|
||||
Reverse Polish notation (RPN) as its first argument, evaluates the equation, and
|
||||
prints the result on the standard output followed by a newline.
|
||||
|
||||
Reverse Polish Notation is a mathematical notation in which every operator
|
||||
follows all of its operands. In RPN, every operator encountered evaluates the
|
||||
previous 2 operands, and the result of this operation then becomes the first of
|
||||
the two operands for the subsequent operator. Operands and operators must be
|
||||
spaced by at least one space.
|
||||
|
||||
You must implement the following operators : "+", "-", "*", "/", and "%".
|
||||
|
||||
If the string isn't valid or there isn't exactly one argument, you must print
|
||||
"Error" on the standard output followed by a newline.
|
||||
|
||||
All the given operands must fit in a "int".
|
||||
|
||||
Examples of formulas converted in RPN:
|
||||
|
||||
3 + 4 >> 3 4 +
|
||||
((1 * 2) * 3) - 4 >> 1 2 * 3 * 4 - ou 3 1 2 * * 4 -
|
||||
50 * (5 - (10 / 9)) >> 5 10 9 / - 50 *
|
||||
|
||||
Here's how to evaluate a formula in RPN:
|
||||
|
||||
1 2 * 3 * 4 -
|
||||
2 3 * 4 -
|
||||
6 4 -
|
||||
2
|
||||
|
||||
Or:
|
||||
|
||||
3 1 2 * * 4 -
|
||||
3 2 * 4 -
|
||||
6 4 -
|
||||
2
|
||||
|
||||
Examples:
|
||||
|
||||
$> ./rpn_calc "1 2 * 3 * 4 +" | cat -e
|
||||
10$
|
||||
$> ./rpn_calc "1 2 3 4 +" | cat -e
|
||||
Error$
|
||||
$> ./rpn_calc |cat -e
|
||||
Error$
|
51
exam-basedir06/subjects/rpn_calc/subject.fr.txt
Normal file
51
exam-basedir06/subjects/rpn_calc/subject.fr.txt
Normal file
@@ -0,0 +1,51 @@
|
||||
Assignment name : rpn_calc
|
||||
Expected files : *.c, *.h
|
||||
Allowed functions: atoi, printf, write, malloc, free
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Ecrivez un programme qui prend en premier argument une chaine de caractères
|
||||
correspondant à une équation écrite en Notation Polonaise Inverse ou NPI,
|
||||
l'évalue et retourne le résultat sur la sortie standard suivi d'une newline.
|
||||
|
||||
La Notation Polonaise Inverse est un système d'écriture d'opérations arithméti-
|
||||
ques qui consiste à placer les opérandes avant les opérateurs de telle
|
||||
sorte que pour chaque opérateur rencontré, les 2 opérandes précédents soient
|
||||
évalués et le résultat placé en lieu et place dans l'ordre de calcul. Les
|
||||
opérandes et les opérateurs doivent avoir au moins un espace entre eux.
|
||||
|
||||
Vous devrez implémenter les opérateurs "+", "-", "*", "/" et "%".
|
||||
|
||||
Si la chaine de caractères n'est pas valide ou qu'il n'y a pas un seul argument,
|
||||
vous devrez afficher "Error" sur la sortie standard, suivie d'une newline.
|
||||
|
||||
Tous les opérandes de la chaine de caracteres doivent pouvoir etre contenus
|
||||
dans un int.
|
||||
|
||||
Exemple de formules converties en NPI :
|
||||
|
||||
3 + 4 >> 3 4 +
|
||||
((1 * 2) * 3) - 4 >> 1 2 * 3 * 4 - ou 3 1 2 * * 4 -
|
||||
50 * (5 - (10 / 9)) >> 5 10 9 / - 50 *
|
||||
|
||||
Décomposition d'un calcul en NPI :
|
||||
|
||||
1 2 * 3 * 4 - (On évalue "1 2 *" et on remplace l'ensemble par 2)
|
||||
2 3 * 4 - (On évalue "2 3 *" et on remplace l'ensemble par 6)
|
||||
6 4 - (On évalue "6 4 -" et on remplace l'ensemble par 2)
|
||||
2
|
||||
|
||||
ou
|
||||
|
||||
3 1 2 * * 4 - (On évalue "1 2 *" et on remplace l'ensemble par 2)
|
||||
3 2 * 4 - (On évalue "3 2 *" et on remplace l'ensemble par 6)
|
||||
6 4 - (On évalue "6 4 -" et on remplace l'ensemble par 2)
|
||||
2
|
||||
|
||||
Exemples :
|
||||
|
||||
$> ./rpn_calc "1 2 * 3 * 4 +" | cat -e
|
||||
10$
|
||||
$> ./rpn_calc "1 2 3 4 +" | cat -e
|
||||
Error$
|
||||
$> ./rpn_calc |cat -e
|
||||
Error$
|
Reference in New Issue
Block a user