Forum > C et C++ > Indenter son code >

Indenter son code

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Auteur Message
jeremya Posté le 21 avr 2009 16:29:45

Administrateur
Administrateur

Auteur
Auteur

Modérateur
Modérateur

Inscrit le : 08 nov 2008
Localisation : Nord-Pas-de-Calais
Emploi :
Loisirs :

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++
  1. #include <cstdio>
  2.  
  3. bool indenter(unsigned int n = 0)
  4. {
  5. while (true) {
  6. char c = getchar();
  7. if (c == '\n') {
  8. putchar('\n');
  9. return true;
  10. }
  11. if (c == '{') {
  12. for (unsigned int i=0; i<n*3; i++)
  13. putchar(' ');
  14. printf("{\n");
  15. if (indenter(n + 1))
  16. return true;
  17. } else if (c == '}') {
  18. if (n > 0)
  19. for (unsigned int i=0; i<(n-1)*3; i++)
  20. putchar(' ');
  21. printf("}\n");
  22. if (n > 0)
  23. return false;
  24. }
  25. }
  26. }
  27.  
  28. int main(int argc, char* argv[])
  29. {
  30. indenter();
  31.  
  32. return 0;
  33. }
  34.  
Messages : 284 http://www.jeremya.ironie.org citer

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Forum > C et C++ > Indenter son code >


Cette page a été générée le 18 mar 2010 02:43:57.
page d'accueil Jeremya's Web Site
jeremya.ironie.org

s'identifier

Nom d'utilisateur :
Mot de passe :

outils

qui est en ligne ?

3 visiteurs en ligne