PROBLEME
La syntaxe du langage C est en elle-même récursive. Ainsi, un bloc d'instructions encadré par des accolades '{' et '}', peut lui-même contenir un bloc d'instructions, encadré par des accolades, etc.
Pour bien mettre en évidence les différents niveaux d'imbrications d'un programme, une bonne habitude consiste à indenter son code, c'est à dire à ajouter plus ou moins d'espaces devant chaque ligne, suivant le niveau d'imbrication du bloc qui la contient. De plus, il peut être une bonne idée de mettre chaque accolade seule sur sa ligne, pour bien la mettre en évidence, et avoir un code aéré.
Dans cet exercice, vous allez écrire un programme qui s'occupe d'indenter automatiquement des blocs d'instructions. On ne vous demande cependant pas de travailler sur un programme C complet, mais simplement sur les accolades.
On vous donne une ligne de texte, composée uniquement d'accolades ouvrantes et fermantes, sans espaces. Les accolades sont structurées correctement, comme des blocs d'un programme C valide.
Vous devez afficher ces accolades en les plaçant une par ligne, et en les indentant. Vous devez placer devant chaque accolade, 3 espaces par niveau d'imbrication de cette accolade.
Votre programme doit impérativement être basé sur une fonction récursive, et non sur une boucle..
CONTRAINTES
2 <= N <= 100, où N est le nombre de caractères (accolades ouvrantes ou fermantes) de la chaîne.
ENTREE
L'entrée contient une chaîne composée d'accolades ouvrantes et fermantes, sans espaces, suivie d'un retour à la ligne.
CODE SOURCE
Code: C++ #include <cstdio> bool indenter(unsigned int n = 0) { while (true) { char c = getchar(); if (c == '\n') { putchar('\n'); return true; } if (c == '{') { for (unsigned int i=0; i<n*3; i++) putchar(' '); printf("{\n"); if (indenter(n + 1)) return true; } else if (c == '}') { if (n > 0) for (unsigned int i=0; i<(n-1)*3; i++) putchar(' '); printf("}\n"); if (n > 0) return false; } } } int main(int argc, char* argv[]) { indenter(); return 0; }
|