-
Notifications
You must be signed in to change notification settings - Fork 0
/
practica_59.cpp
138 lines (118 loc) · 3.83 KB
/
practica_59.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <string>
using namespace std;
struct NodoTarea {
string descripcion;
NodoTarea* sgte;
};
struct ListaPorTipo {
NodoTarea pilaDeTareas;
int codigoTipo;
NodoTarea* sgte;
};
//-----1-------
ListaPorTipo* AgregarNuevaListaPorTipo(ListaPorTipo* lista, int codigoTipo) {
ListaPorTipo* nodo = new ListaPorTipo;
nodo->codigoTipo = codigoTipo;
nodo->sgte = nullptr;
nodo->pilaDeTareas = nullptr;
//agrega la nueva lista al final
ListoPorTipo* anterior = nullptr;
ListaPorTipo* aux = lista;
if(lista == nullptr) {
lista = nodo;
} else {
while(aux != nullptr) {
anterior = aux;
aux = aux-> sgte;
}
}
return nodo;
}
//-----2-------
void AgregarTarea(ListaPorTipo* lista, int codigoTipo, string descripcion) {
ListaPorTipo* aux = lista;
ListaPorTipo* anterior = nullptr;
//encuentra la lista
while(aux !=nullptr && aux->codigoTipo != codigoTipo) {
anterior = aux;
aux = aux->sgte;
}
//en caso de no encontrarla
if(lista == nullptr) {
ListaPortipo* nuevaLista = AgregarNuevaListaPorTipo(lista, codigoTipo);
}
//agregar la tarea
NodoTarea* nuevaTarea = new NodoTarea;
nuevaTarea->descripcion = descripcion;
nuevaTarea->sgte = aux-> pilaDeTareas;
aux->pilaDeTareas = nuevaTarea;
}
//-----3-------
string dameProximaTarea(ListaPorTipo* lista, int codigoTipo) {
ListaPorTipo* aux = lista;
while(aux != nullptr) {
if(aux->codigoTipo == codigoTipo) {
return aux->pilaDeTareas->descripcion;
}
aux = aux->sgte;
}
return nullptr;
}
//-----4-------
int dameCantidadDePilasConTareasPendientes(ListaPorTipo* lista) {
int cantidad = 0;
ListaPorTipo* aux = lista;
while(aux != nullptr) {
if(aux->pilaDeTareas != nullptr) {
cantidad++; // cantidad = cantidad + 1
}
aux = aux->sgte;
}
return cantidad;
}
int main() {
while(true) {
cout << "Bienvenidao al sistema de tareas Practica Parcial" << endl;
cout << "1. Agregar tarea" << endl;
cout << "2. Dame proxima tarea" << endl;
cout << "3. Dame cantidad de pilas con tareas pendientes" << endl;
cout << "4. Agregar lista por tipo" << endl; //agregado para probar el punto "1
cout << "5. Salir" << endl;
cout << "Ingrese una opcion: ";
int opcion;
cin >> opcion;
if(opcion == 1) {
cout << "Ingrese el codigo de tipo de tarea: ";
int codigoTipo;
cin >> codigoTipo;
cout << "Ingrese la descripcion de la tarea: ";
string descripcion;
getline(cin, descripcion);
AgregarTarea(lista, codigoTipo, descripcion);
} else if (opcion == 2) {
cout << "Ingrese el codigo de tipo de tarea: ";
int codigoTipo;
cin >> codigoTipo;
string descripcion = dameProximaTarea(lista, codigoTipo);
if(descripcion == nullptr) {
cout << "No hay tareas pendientes para el tipo de tarea ingresado" << endl;
} else {
cout << "La proxima tarea es: " << descripcion << endl;
}
} else if (opcion == 3) {
int cantidad = dameCantidadDePilasConTareasPendientes(lista);
cout << "La cantidad de pilas con tareas pendientes es: " << cantidad << endl;
} else if (opcion == 4) {
cout << "Ingrese el codigo de tipo de tarea: ";
int codigoTipo;
cin >> codigoTipo;
AgregarNuevaListaPorTipo(lista, codigoTipo);
} else if (opcion == 5) {
cout << "Gracias por utilizar el sistema" << endl;
break;
} else {
cout << "Opcion incorrecta" << endl;
}
}
}