You are on page 1of 3

Donat un poema, dissenyar un algorisme que comprovi si est format per estrofes que rimin Ak, Bk, Ak,

Bk Ak,.
En el poema, sn separadors els carcters: blanc, coma, punt, gui i apstrof. Els versos estan separats
entre si pel carcter salt de lnea i el poema acaba amb un vers virtual que no cont cap lletra, s a dir,
dos carcter salts de lnea entre els quals no hi ha cap carcter. Es considera que dos versos rimen si les
seves ltimes paraules tenen idntiques lletres a partir de la vocal tnica, aquesta incluida. Per a poder
reconixer les vocals tniques shan escrit amb majscules, i la resta de las lletres shan escrit en
minscules.

Especificaci. Lalgorisme t com entrada una sequncia de carcters estructurada com indica
lenunciat. La sortida s si si el poema de entrada rima segons lenunciat i no en cas contrari.

Per exemple, donat el segent poema Carles Riba (extret de Estances) lalgorisme escriuria si.

Si tengelosia el camI.
que em prengus com una estimAda
fidel a mon flanc i de mI
peixent-se per mos ulls en la flama abrivAda
del pensament, que vora della es sap ms divI,
pobla, amor, el cam que em mEna
dun dol desig, com dun constAnt
oreig que duu el sol i asserEna
lespectacle profs i viatja amb linstAnt
i esventa al cor distant la vagabunda pEna.

Soluci:

Primer nivell

typedef estrofa;

int main(){
estrofa e;
e= LlegirEstrofa()
while (!EstrofaFinal(e) && RimaEstrofa(e) ){
e = LlegirEstrofa();
}
if ( RimaEstrofa(e) )
cout<<Si segueix la rima donada;
else
cout<<No segueix la rima donada;
} // fi main
Segon nivell

typedef struct {
bool ef, rb ;
} estrofa;

typedef vers tvers[5];

bool EstrofaFinal (estrofa e) {


return e.ef;
}
bool RimaEstrofa ( estrofa e) {
return e.rb;
}
estrofa LlegirEstrofa (){
estrofa e;
int j;
tvers v;
vers n;

j = 0;
n = LlegirVers();
while ( j < 4 && !VersFinal(n)) {
v[j] = n;
n = LlegirVers();
j = j+ 1;
}
if ( VersFinal(n)){
e.ef = true;
e.rb = (j == 0);
} else {
v[j] = n;
e.rb= RimaVers(v[0],v[2])&&RimaVers(v[1],v[3])&&RimaVers(v[0],v[4]);
e.ef = fals;
}
return e;
}

Tercer nivell

typedef struct {
int long:
string v;
} vers;

vers LlegirVers (){


vers ve;
int j; char c;
cin.get(c);
j= 0;
while (!Majuscula(c) && !CarFinal(c)){
cin.get(c);
}
while(!Separador(c) && !CarFinal(c)){
ve.v[j] = c;
j++;
cin.get(c);
}
while (!CarFinal(c)){
cin .get(c);
}
ve.v[j] = NUL;
ve.lon = j;
return ve;
}

bool RimaVers(ver v1,vers v2) {


return v1.v == v2.v;
}

bool VersFinal(vers v) {
return v.lon == 0;
}

Quart nivell

bool CarFinal(char c) {
return c== saltlinea;
}

bool Majuscula(char c) {
return (c>= A && c<= Z);
}

bool Separador( char c) {


return (c== . || c== || c== ! || c== - || c== );
}

You might also like