course: Programación Orientada a Objetos II
unit: 6
cmake project: poo2_unit6_adaptadores_poo_v2021_2
Elaborar un template de función merge_stacks
, que dado 2 stacks genere la unión con valores intercalados como se muestra en el diagrama.
stack<T> merge_stacks(stack<T> a, stack<T> b);
Casos de uso
stack<int> stack_a;
stack<int> stack_b;
int n {};
cin >> n;
while (n-- > 0) {
int value {};
cin >> value;
stack_a.push(value);
}
cin >> n;
while (n-- > 0) {
int value {};
cin >> value;
stack_b.push(value);
}
auto stack_result = merge_stacks(stack_a, stack_b);
while (!stack_result.empty()) {
cout << stack_result.top() << " ";
stack_result.pop();
}
Elaborar un template de función join_stacks
, donde
dada 2 stacks genere la unión como se muestra en el
diagrama.
stack<T> join_stacks(stack<T> a, stack<T> b);
Casos de uso
stack<int> stack_a;
stack<int> stack_b;
int n {};
cin >> n;
while (n-- > 0) {
int value {};
cin >> value;
stack_a.push(value);
}
cin >> n;
while (n-- > 0) {
int value {};
cin >> value;
stack_b.push(value);
}
auto stack_result = join_stacks(stack_a, stack_b);
while (!stack_result.empty()) {
cout << stack_result.top() << " ";
stack_result.pop();
}
Elaborar una función que utilizando stack cumpla con las siguientes reglas:
Una letra significa un push
y un * significa un pop
. Dada una secuencia de
caracteres el programa deberá retornar la secuencia de caracteres extraídos por el
pop
.
Ejemplos:
EAS*Y*QUE***ST***IO*N*** SYEUQTSAONIE
UN*IV*ERS*IDADDEINGENIE*RIAYTECN***OLOGIA NVSENCE
COMPUTER*****S**CIEN**CE RETUPSMNE
string process_text_by_stack(string source);
Casos de uso
string text;
getline(cin, text);
cout << process_text_by_stack(text);
Elaborar una función que utilizando queue cumpla con las siguientes reglas:
Una letra significa un push
y un * significa un pop
. Dada una secuencia de
caracteres el programa deberá retornar la secuencia de caracteres extraídos por el
pop
.
Ejemplos:
EAS*Y*QUE***ST***IO*N*** EASYQUESTION
UN*IV*ERS*IDAD** UNIVE
COMPUTER*****S**CIEN**CE COMPUTERS
string process_text_by_queue(const& string source);
Casos de uso
string text;
getline(cin, text);
cout << process_text_by_queue(text);
Dada una ecuación, realizar una función basada en stack que determine si el balance de separadores es correcto.
Ejemplo:
((10 + 20) + 30) Balanceado
((10 +(30 * 1 + 2)) No Balanceado
(10 + (15 + 4/2 - 5))) No Balanceado
{ (6 + 20} + 4) No Balanceado
{ [ (4 - 5) * 3] + 14} Balanceado
bool is_equation_balanced(string source);
Casos de uso
string text;
getline(cin, text);
cout << boolalpha << is_equation_balanced(text);
Utilizando la clase alumno_t que incluya los atributos nombre, apellido y nota (int)
, se genere iterativamente.
Elaborar un template de función find_in_stack
que permita ubicar un valor basado en cualquier criterio.
T find_in_stack(stack<T> s, function<bool(T)> cmpr);
// Crear un stack basado en alumnos
auto a1 = find_in_stack (stack, [](alumno_t a) { return a.apellido == "Perez"; });
Casos de uso
stack<alumno_t> s1;
int n{};
cin >> n;
string nombre;
string apellido;
double nota;
while (n-- > 0) {
getline(cin, nombre);
getline(cin, apellido);
cin >> nota;
s1.push_back(alumno_t{nombre, apellido, nota});
}
string name_tobe_found;
get_line(cin, name_tobe_found);
a1 = find_in_stack (s1, [=](auto a) { return a.get_nombre() == name_tobe_found; });
cout << a1.get_nombre() << " " << a1.get_apellido() << " " << a1.get_nota() << endl;
Elaborar una función basada en stack que tome un expresión sin el paréntesis izquierdo y que retorne la expresión infijo con los paréntesis completos.
Ejemplo:
10 + 20) * 5 + 3) (10 + 20) * (5 + 3)
10 +30) * 30) (10 + 30) * (30)
10 + 15) * 2 - 5)) ((10 + 15) * (2 - 5))
string complete_equation( string source);
Casos de uso
string text;
getline(cin, text);
cout << boolalpha << complete_equation(text);