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;
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.
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.
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.
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