elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Listas enlazadas (Eliminar nodos segun condicion de sus datos). en: 9 Octubre 2017, 00:38 am
hola, muchas gracias por responder, entendi esa forma y tambien otra que es mediante un bool.
 

bool borrar(){
if (inicial != nullptr){
 Articulo* auxiliar = inicial;
 if (inicial->Inventario == 0){
 inicial = inicial->sig;
 delete auxiliar;
 return true; //Se eliminó el elemento (estaba al principio)
 }
 else{
 while (auxiliar->sig != nullptr && auxiliar->sig->Inventario != 0)
 auxiliar = auxiliar->sig;
 if (auxiliar->sig == nullptr)
 return false; //No se encontró el elemento
 else{
 if (auxiliar->sig->Inventario == 0){
 Articulo* aEliminar = auxiliar->sig;
 auxiliar->sig = auxiliar->sig->sig;
 delete aEliminar;
return cout<<"Articulo borrado."<<endl; //Se eliminó el elemento (no estaba al principio)
 }
 }
 }
 }
 else
    cout << "Nada que eliminar."<<endl<<endl; //La lista está vacía

la verdad ese apunte me ayuda mucho para entender y comprenderlo mejor, gracias
2  Programación / Programación C/C++ / Listas enlazadas (Eliminar nodos segun condicion de sus datos). en: 6 Octubre 2017, 00:39 am
hola, estoy aprendiendo c++ y tengo una duda sobre un problema que me plantearon el cual debe borrar aquellos nodos los cuales tengan un campo (en este caso es el inventario o stock) de un articulo sean iguales a 0 (si no hay stock borrar el nodo). necesitaria una orientacion. dejare el codigo para ver si me pueden ayudar. Gracias


/*
 * File:   main.cpp
 * Author: Santy
 *
 * Created on 4 de octubre de 2017, 3:38
 */
/*
 * Generar una lista con la nómina de artículos de un supermercado. De cada artículo se conoce: código,
descripción, precio y stock. La carga finaliza con el código -1. Se solicita:
A. Leer de teclado un porcentaje e incrementar el precio de todos los artículos en esa cantidad.
B. Incrementar el stock de un artículo. Se lee de teclado el código y la cantidad con la que se debe
incrementar el stock. Si no existe el artículo en la lista se debe informar.
C. Eliminar de la lista los artículos que no tienen stock.

 */

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
#define nullptr NULL
using namespace std;
void ingreso();
void porcentaje();
void muestra();
void cambio();
void borrar();
void restastock();

struct Articulo{
    int Cod;
    float Precio;
    char Descripcion[50];
    int Inventario;
    struct Articulo *sig;
    }*inicial=NULL, *fin=NULL, *anterior=NULL,*auxiliar=NULL;
   

int Codigo;

   

int main() {
    int opc;
    do{
        system("cls");
        cout<<"EJERCICIO 22."<<endl;
        cout<<"MENU DE OPCIONES"<<endl;
        cout<<"1. Carga de productos"<<endl;
        cout<<"2. Incremento de los precios (en porcentaje)"<<endl;
        cout<<"3. Muestra de productos"<<endl;
        cout<<"4. Incremento de Inventario"<<endl;
        cout<<"5. Restar Inventario"<<endl;
        cout<<"6. Borrar articulos con stock 0"<<endl;
        cout<<"Para salir ingrese '-1'"<<endl<<endl;
        cout<<"Ingrese la opcion: ";
        cin>>opc;
        switch(opc){
            case 1:  ingreso();
            break;
            case 2: porcentaje();
            break;
            case 3: muestra();
            break;
            case 4: cambio();
            break;
            case 5: restastock();
            break;
            case 6: borrar();
            break;
            case -1: break;
           
            default: cout<<"La opcion no es correcta"<<endl;
        }
        system ("pause");
        }while (opc!=-1);

return EXIT_SUCCESS;
}

/*deficion de la funcion ingreso*/
void ingreso(){
    auxiliar= new Articulo;
    system("cls");
    if (auxiliar){
        cout<<"INGRESE ARTICULOS A LA LISTA"<<endl<<endl;
        cout<<"Escriba el codigo del producto: ";
        cin>>auxiliar->Cod;
        cout<<"Escriba el precio del producto: ";
        cin>>auxiliar->Precio;
        cout<<"Escriba la descripcion del producto: ";
        fflush(stdin);
        cin>>(auxiliar->Descripcion);
        cout<<"Escriba el stock del producto: ";
        cin>>(auxiliar->Inventario);   
        auxiliar->sig=nullptr;
        if (inicial==nullptr){
            inicial=auxiliar;
            fin=auxiliar;
        }
        else {
            fin->sig=auxiliar;
            fin=auxiliar;
           
        }
       
        }
    else {
            cout<<"error en la memoria"<<endl;
}
}
void porcentaje(){
   system("cls");
    int por;
    float tot;
    tot=0;
    if (inicial==nullptr){
        cout <<"No hay productos";
    }else{
       cout <<"Ingrese porcentaje: ";
    cin >> por;
        auxiliar=inicial;
        while (auxiliar!=nullptr){
            tot=(auxiliar->Precio*por)/100;
            auxiliar->Precio=(auxiliar->Precio+tot);
            auxiliar=auxiliar->sig;
        }
       
    }
   
}
void muestra(){
   system("cls");
    if (inicial==NULL){
        cout <<"No hay productos.";
    }else{
        auxiliar=inicial;
        while (auxiliar!=NULL){
            cout<<"Codigo de producto= "<<auxiliar->Cod<<endl;
            cout<<"Precio de producto= "<<auxiliar->Precio<<endl;
            cout<<"Descripcion de producto= "<<auxiliar->Descripcion<<endl;
            cout<<"Stock de producto= "<<auxiliar->Inventario<<endl;
            cout<<endl;
            auxiliar=auxiliar->sig;
        }
       
    }
   
}

void cambio(){
   system("cls");
   
   int invn;
   invn=0;
   if (inicial==NULL){
       cout<<"No hay productos.";
       return;
   }
   else{
         cout<<"Ingrese el codigo del producto";
         cin>>(Codigo);
       auxiliar=inicial;
       while (auxiliar!=NULL){
           if (Codigo==auxiliar->Cod){
               cout<<"Ingrese la cantidad de inventario a incrementar: ";
               cin>>invn;
               auxiliar->Inventario=auxiliar->Inventario+invn;
               return;
           }
           auxiliar=auxiliar->sig;
       }
       cout<<"Codigo de producto no encontrado."<<endl;
       return;
             
   }
   
   
}
void restastock(){
   system("cls");
   
   int invn;
   invn=0;
   if (inicial==NULL){
       cout<<"No hay productos."<<endl;
       return;
   }
   else{
         cout<<"Ingrese el codigo del producto";
         cin>>(Codigo);
        auxiliar=inicial;
        while (auxiliar!=NULL){
           if (Codigo==auxiliar->Cod){
               cout<<"Ingrese la cantidad de inventario a borrar: ";
               cin>>invn;
               auxiliar->Inventario=auxiliar->Inventario-invn;
               return;
           }
           auxiliar=auxiliar->sig;
       }
       cout<<"Codigo de producto no encontrado."<<endl;
       return;
             
   }
   
   
}
void borrar(){
   system("cls");
    auxiliar=inicial;
    while (auxiliar!=nullptr){
        if (auxiliar->Inventario!=0){
            anterior=auxiliar;
            auxiliar=auxiliar->sig;
        }
        else{
            if (auxiliar=inicial){//fijarse!!!!!!!!!!!!!!
                inicial=inicial->sig;
            }
            else if(auxiliar->sig==nullptr){
                anterior->sig==nullptr;
                fin=anterior;
                }
                else{
                anterior->sig=auxiliar->sig;
                }
           
            delete auxiliar;
            cout<<"Producto borrado exitosamente."<<endl;
        }
           
        auxiliar=auxiliar->sig;
    }
    cout<<"No Hay ningun producto para eliminar"<<endl;
}


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines