Tots els directoris tenen un cert fitxer Y54250


Statement
 

pdf   zip   tar

Farem servir la classe ArbreGen (exactament igual a ArbreGen<T> si T és el tipus string) per representar una jerarquia de carpetes i fitxers. Els nodes sense fills són fitxers, i els nodes amb un o més fills són les carpetes. Per tant no hi ha carpetes buides. El valor dels nodes, un string, és el nom del fitxer o carpeta corresponent. Per exemple, l’arbre següent representa una jerarquia de fitxers:

src
|-- main.cc
'-- dist
    |-- main.cc
    |-- tree.cc
    |-- build
    |   '-- program.exe
    |-- Makefile
    '-- geometry.hh

Implementa un mètode públic de la classe ArbreGen que determini si totes les carpetes d’un arbre, a qualsevol nivell, contenen almenys un fitxer file. La declaració és la següent:

/**
 * @brief Determina si l'arbre té `file` a totes les carpetes. 
 * És a dir, si l'arbre té almenys un node sense fills 
 * (un fitxer) amb valor `file` a tots els nodes que sí tenen 
 * fills (les carpetes)
 * 
 * @param  file  Nom del fitxer a cercar
 */
bool all_dirs_contain(std::string file) const;

Observació

Per poder avaluar l’ús de punters, no feu servir altres mètodes, ni públics ni privats, de la classe per resoldre el problema.

Els fitxers públics (icona del gatet) contenen:

ArbreG.hh la classe ArbreGen
ArbreG-io.hh la entrada/sortida per ArbreGen
main.cc el programa principal (gestiona l’entrada i sortida)
Makefile per compilar amb make al terminal
.vscode per compilar i debuggar amb F5

Per entregar només cal enviar el fitxer Arbre.hh modificat.

Entrada

De l’entrada se n’encarrega ja el programa principal. L’entrada està formada per diferents cassos seguits. Cada cas té un nom de fitxer (file) i un arbre. Cada arbre és la representació gràfica, com l’exemple anterior, d’un arbre de carpetes i fitxers.

Sortida

De la sortida també se n’encarrega el programa principal. La sortida mostra "si" quan l’arbre compleix que totes les carpetes i subcarpetes contenen un fitxer de nom file i "no" en cas contrari.

Public test cases
  • Input

    .gitignore
    etc
    |-- .gitignore
    '-- init.d
        |-- .gitignore
        '-- text.md
    
    package.json
    node_modules
    |-- pkg1
    |   |-- package.json
    |   '-- package-lock.json
    |-- pkg2
    |   |-- package.json
    |   '-- package-lock.json
    |-- pkg3
    |   |-- package.json
    |   '-- package-lock.json
    '-- index.ts
    
    x
    D1
    |-- x
    '-- D2
        |-- x
        '-- D3
            |-- x
            '-- D4
                '-- x
    
    main.cc
    src
    |-- main.cc
    '-- dist
        |-- main.cc
        |-- tree.cc
        |-- build
        |   '-- program.exe
        |-- Makefile
        '-- geometry.hh
    
    

    Output

    si
    no
    si
    no
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Official solutions
    Unknown.
    User solutions
    C++