online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
/****************************************************************************** Taller numero 4 Curso Estructura de Datos Desarrollado por: Bruce Alexander Varela Catalan. Version del compilador: OlineGDB Fecha de entrega: 10/06/2022 Enlace a video en youtube: *******************************************************************************/ #include <iostream> #include "Fraccion.h" #include "Funciones.h" //Se crean las funciones externas en un archivo aparte #include "stdlib.h" using namespace std; //system("clear"); Usar para limpiar pantalla en sistemas basados en Unix int main() { int menu, numerador, denominador, contarlista; Fraccion F; Nodo<Fraccion> *L = NULL; cout << "Este es el desarrollo del taller numero 4 del curso Estructura de datos." << endl; cout << "Trabajaremos con Lista Lineal Simple de objetos clase Fraccion" << endl; do { cout << endl; cout << endl; cout << "***************************************************" << endl; cout << "MENU: Seleccione la opcion que desee" << endl; cout << "***************************************************" << endl; cout << "1. Agregar un objeto a la Lista" << endl; cout << "2. Mostrar los elementos de la Lista" << endl; cout << "3. Contabilizar los elementos donde el numerador es menor que el denominador" << endl; cout << "4. Ver el MAYOR elemento de la Lista" << endl; cout << "5. Ver el PROMEDIO de los elementos con numerador primo" << endl; cout << "6. Salir del programa" << endl; cout << "***************************************************" << endl; cin >> menu; switch(menu) { case 1: cout << "******************************************************" << endl; cout << "A continuacion agregaremos una Fraccion a la lista" << endl; agregarfraccion(L); cout << endl << "Volviendo al menu..."; cout << endl << "Presione cualquier tecla para continuar...\n"; cin.get(); cin.get(); break; case 2: cout << "******************************************************" << endl; cout << "A continuacion se muestran las fracciones de la Lista" << endl; mostrar(L); cout << endl << "Volviendo al menu..."; cout << endl << "Presione cualquier tecla para continuar...\n"; cin.get(); cin.get(); break; case 3: cout << "******************************************************" << endl; cout << "La cantidad de elementos cuyo numerador es menor que el denominador es: " << endl; contarlista = contarcondicion(L); cout << contarlista << endl; cout << "******************************************************" << endl << endl; cout << endl << "Volviendo al menu..."; cout << endl << "Presione cualquier tecla para continuar...\n"; cin.get(); cin.get(); break; case 4: cout << "******************************************************" << endl; cout << "El mayor elemento de la lista es: " << endl; F = mayorfraccion(L); F.ver(); cout << "******************************************************" << endl; cout << endl << "Volviendo al menu..."; cout << endl << "Presione cualquier tecla para continuar...\n"; cin.get(); cin.get(); break; case 5: cout << "******************************************************" << endl; cout << "El PROMEDIO de las fracciones de la lista (con numerador PRIMO) es de: " << endl; cout << promediofraccion(L) << endl; cout << "******************************************************" << endl; cout << endl << "Volviendo al menu..."; cout << endl << "Presione cualquier tecla para continuar...\n"; cin.get(); cin.get(); break; case 6: cout << endl<<"Saliendo del programa...\n"; cout << "Presione cualquier tecla para continuar...\n"; cin.get(); cin.get(); break; default: cout << "Por favor ingrese el numero de la opcion que desea ejecutar 1, 2, 3, 4, 5 o 6" << endl; cout << "Pesione la tecla Enter para volver a intentarlo" << endl; cin.get(); cin.get(); break; } }while(menu != 6); return 0; }
#include "Fraccion.h" using namespace std; template <class T> //LLS con plantillas struct Nodo { T info; struct Nodo *link; }; int contarcondicion(Nodo<Fraccion> *L) //Funcion vista en clases 25-05-2022 { int c=0; Nodo<Fraccion> *P = L; while(P != NULL) { if((P->info.getNum()) < (P->info.getDen())) { c++; } P = P->link; } return c; } template <class T> void agregarfraccion(Nodo<T> *&L) //Al trabajar con plantillas se debe trabajar como Nodo puntero ya que no usamos typedef { int agregar, numerador, denominador; do { Nodo<T> *p = new(Nodo<T>); //Iniciamos una Lista aux que genera un nuevo nodo y lo agrega por la izquierda a L cout << "********************************************" << endl; cout << "Por favor ingrese el numerador de la Fraccion:" << endl; cin >> numerador; p->info.setNum(numerador); cout << "Por favor ingrese el denominador de la Fraccion:" << endl; cin >> denominador; while(denominador == 0) //Ciclo de validacion del denominador { cout << "No puede ingresar un denominador igual a 0, ingrese otro numero entero: " << endl; cin >> denominador; } p->info.setDen(denominador); p->link = L; L = p; cout << endl << "¿Desea ingresar otra fraccion?" << endl << "1. Si" << endl << "0. No" << endl; cin >> agregar; while(agregar != 1 && agregar != 0) { cout << "Por favor ingrese una opcion valida" << endl; cout << endl << "¿Desea ingresar otra fraccion?" << endl << "1. Si" << endl << "0. No" << endl; cin >> agregar; } }while(agregar == 1); } template <class T> void mostrar(Nodo<T> *L) { if(L == NULL) { cout << "*************La lista esta vacia*************" << endl; } while(L != NULL){ L->info.ver(); cout << endl; L = L->link; } } template <class T> int contar(Nodo<T> *L) //Funcion vista en clases 25-05-2022 { int c=0; while(L != NULL){ c++; L = L->link; } return c; } template <class T> Fraccion mayorfraccion(Nodo<T> *L) { Fraccion Mayor; float valor, valormayor = -33554431; //Un valor muy negativo en 4 byte 11111111111111111111111111111111 if(L == NULL) { cout << "********La lista esta vacia********" << endl; } while(L != NULL) { valor = (L->info.getNum() * 1.0)/ L->info.getDen(); if(valor >valormayor) { valormayor = valor; Mayor = L->info; } L = L->link; } return Mayor; } int esprimo(int a) //Funcion para validar si un numero es primo { int divisor; for(divisor = 2; divisor <= a/2 ; divisor++) { if(a%divisor == 0) { return 0; //Apenas encuentre un divisor retorna 0 y se acaba, el numero no es primo. } } return 1; } template <class T> float promediofraccion(Nodo<T> *L) { float prom = 0; Fraccion TotalFrac; //Suma todas las fracciones de la lista int contar = 0; if(L == NULL) { return 0; } while(L != NULL) { if(esprimo(L->info.getNum()) == 1 && L->info.getNum() != 1 && L->info.getNum() != 0) //Solo acumula fracciones y las cuenta si el la funcion esprimo(numerador) retorna 1 { TotalFrac.setNum((TotalFrac.getNum() * L->info.getDen()) + (L->info.getNum() * TotalFrac.getDen())); TotalFrac.setDen(TotalFrac.getDen() * L->info.getDen()); for(int i = 2; i < 10; i++) //SIMPLIFICAMOS LA FRACCION PARA QUE NO SE ACUMULE TAN GRANDE (solo si es posible) { while(TotalFrac.getNum()%i == 0 && TotalFrac.getDen()%i == 0) { TotalFrac.setNum(TotalFrac.getNum()/i); TotalFrac.setDen(TotalFrac.getDen()/i); } } contar++; } L = L->link; } prom = ((TotalFrac.getNum()*1.0)/(TotalFrac.getDen()*1.0)) / contar; //El resultado decimal de la FRACCION final es dividido por el contador de fracciones en la lista = PROMEDIO return prom; }
#ifndef FRACCION_H #define FRACCION_H class Fraccion{ public: Fraccion(); void ver(); void setNum(int); void setDen(int); int getNum(); int getDen(); Fraccion sumEsp(Fraccion); private: int num; int den; }; #endif // FRACCION_H
#include <iostream> #include"Fraccion.h" using namespace std; Fraccion::Fraccion() { num = 0; den = 1; } void Fraccion::ver() { cout << "Fraccion : " << num << "/" << den << endl; } void Fraccion::setNum(int a) { num = a; } void Fraccion::setDen(int a) { den = a; } int Fraccion::getNum() { return num; } int Fraccion::getDen() { return den; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue