/// Regresa true si al recorrer el vector "V" hacia /// adelante sus valores forman una colina o un valle. /// - Una hilera es una colina o un valle si los valores /// de sus letras crecen y luego decrecen, o viceversa. /// - Por ejemplo, las hileras "35764321" es una colina, /// mientras que "9864125" es un valle. bool Colina_Valle(const char V[]); bool Colina_Valle(const char V[]) { if ( Es_Colina(V) ) { return true; } if ( Es_Valle(V) ) { return true; } return false; } bool Es_Colina(const char V[]) { // +---+---+---+ // | a | b | c | V[i-1] < V[i] <==> V[i] > V[i-1] // +---+---+---+ // | c | b | a | V[i-1] > V[i] <==> V[i] < V[i-1] // +---+---+---+ // [0] [1] [2] int i; // V[i] <= V[i+1] // V[i-1] <= V[i] if ( V[0] == 0 ) { return false; } if ( V[0] > V[1] ) { // comenzó bajando return false; } // Voy subiendo for (i=1; V[i]!=0; i++) { if ( V[i-1] < V[i] ) { // siga subiendo } else { break; // para } } // Voy vajando for ( ; V[i]!=0; i++) { if ( V[i-1] > V[i] ) { // siga bajando } else { return false; // zig-zag } } return true; } /// Retorna en R[] la resta vectoria V1-V2. /// - El valor anterior de R[] se pierde void Resta_Vector( int N, double V1[], double V2[], double R[] ) { for (int i=0; i> n; suma += n; } return 0; }