alguien me puede ayudar con este codigo porfavor.

Iniciado por MrC4RL4NG4S, 3 Octubre 2010, 05:16 AM

0 Miembros y 1 Visitante están viendo este tema.

MrC4RL4NG4S

/*Ejercicios
Implementar una función que recibe una lista de enteros L y un número entero n de forma que modifique la lista mediante
el borrado de todos los elementos de la lista que tengan este valor: Ejemplo: sea N={1,2,4,5,6,2,7,2}
y el número a buscar sea 2, entonces la lista quedará así; N={1,4,5,6,7}*/

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string>
using namespace std;

int lista[8];
int auxiliar[8],x,y;
void llenar(),listar(),buscar();
int tope;
int pos, val,opc,b,v,valor,num,i;


int main ()
{

int opcion;
while(1){
//system("CLS");// LImpiar pantalla
 cout<<endl<<"1. ingresar numero"<<endl;
 cout<<endl<<"2. listar numero"<<endl;
 cout<<endl<<"3. buscar"<<endl;
 cout<<endl<<"4. salir"<<endl;
 cout<<endl<<endl<<"INGRESE LA OPCION: ";
 cin>>opcion;
 cout<<endl<<endl;
 
 switch(opcion){
  case 1:  llenar();
  break;
 
  case 2: listar();
  break;
 
 
  case 3: buscar();
  break;
 
  case 4: exit(0);
  break;
 
  default: cout<<"Opcion no valida";
  break;
  }
  }
  }


void llenar()  {
         if(tope+1>8){
 cout<<"La pila esta llena";
 cout<<endl;
 getch ();
 }
   else{
   for (int i=0;i<8;i++)  {
     cout<<" Digite el numero: ";
     cin>>num;
     cout<<endl;
     lista[i]=num;
     tope++;
   }
   }
}      
         
         
void listar()  {
  for(int t=0;t<tope;t++)  {
  cout<<endl<<"La posicion ["<<t<<"] contiene: "<<lista[t]<<endl;
}
}


 void buscar(){
    cout<<" El numero  a buscar:  ";
    cin>>val;
    cout<<endl;
    b=0;
       for (int s=0;s<8;s++) {
           
         if (lista[s]==val) {
            b=1;
            v=s;
            valor=lista[s];
            }//fin if
            }//fin for
           
     if (b==1)
     {
        cout<<"El numero ha sido encontrado "<<endl<<endl<<endl;
        cout<<"       en la posicion:          "<<v<<" "<<endl<<endl;
        cout<<"       Con el valor:            "<<valor<<" "<<endl<<endl;  
        cout<<" Para retirar marque 1 "<<endl;
        cout<<" Seleccione la Opcion:  ";
        cin>>opc;
        cout<<endl<<endl;
             
             if (opc==1){
             for (int z=0;z<tope;z++) {
             for (x=0;x<=tope-valor;x++) {
               auxiliar[x]=lista[tope];
               tope--;                  
               y++;                    
              }//fin for
               }//fin for
               tope=valor-1;
                 for (int j=0;j<y;j++) {
                   lista[tope]=auxiliar[j];  
                   tope++;  
                   y--;
                   }//fin for
                   }//fin if

                         else {
                           if (b!=1) {
                           cout<<"             El numero No ha sido encontrado "<<endl<<endl;
                           getch ();
                           exit (0);
                           }//fin if
                           }//fin else
                           }//fin
                           }


Al realizar la busqueda del numero a eliminar o sustituir lo hace bien el problema es en el momento de eliminarlo, tengo probles al pasar los datos a la lista auxiliar, cualquier ayuda se los agradeceria.

[L]ord [R]NA


MrC4RL4NG4S

buenas a todos, les pido colaboracion con este programa que para muchos puede ser sencillo pero para mi q apenas empiezo se me hace un poco dificil a la hora de recorrer las lista, detectar si el valor ingrasado esta repetido y retirarlos, de antemano les agradezco por la ayuda que me puedan brindar.

Shell Root

Soy nuevo en C, pero hice algo que puede suplir tus necesidades. Por ejemplo,
main,
int main(int argc, char *argv[]){
   int sArray[] = {3,2,3,4,3};
   eliminar(sArray, 3);

   return 0;
}


eliminar, puede que exista la manera de ver, cual es la longitud que tiene el vector, además, de que se pueda eliminar los elementos del vector, sin usar uno nuevo.
int eliminar(int pArray[], int pEliminar){
   int    i            = 0;
   int    sContador    = 0;

   for(i=0;i<5;i++){
       if(pArray[i] == pEliminar){
           sContador++;
       }
   }

   int sNewArray[sContador];
   sContador = 0;

   for(i=0;i<5;i++){
       if(pArray[i] != 0){
           sNewArray[sContador] = pArray[i];
           sContador++;
       }
   }

   for(i=0;i<3;i++){
       printf("%d\n", sNewArray[i]);
   }

   return 0;
}

Algo es algo. :p
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

cbug

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int eliminar(int [], int &, int);

int main()
{
   int miTAM = 9;
   int lista [9] = {1,2,1,1,3,5,1,4,1};
   eliminar(lista, miTAM, 1);
   for(int i = 0; i < miTAM; i++)
   {
       cout<<lista[i]<<" | ";
   }
   return 0;
}

int eliminar(int l[], int &TAM, int bus)
{
   int i = 0;
   while(i < TAM)
   {
       if(l[i] == bus)
       {
           for(int j = i; j < TAM - 1; j++)
               l[j] = l[j + 1];
           TAM--;
       }
       else
           i++;

   }
   return 0;
}


MrC4RL4NG4S

Muchas gracias por la ayuda el problema es que el programa me debe pedir el ingreso de los valores enteros de la lista, para ingresarlos uno por uno, tener la opcion de listar, una busqueda como trate de implementarlo en el programa y luego de la opcion de eliminar el numero que ya hemos buscado anteriormente y que sabemos que esta en la lista, su ayuda me es muy valiosa, pero si  me pueden ayudar a que cumpla con estas caracteristicas.

Lunfardo

Cita de: MrC4RL4NG4S en  4 Octubre 2010, 04:32 AM
No que pena si les ocasione alguna molestia es solo que llevo muchas horas embotellado en este problema.

ya te dieron la funcion para eliminar el valor (lo mas dificil del problema), hace otra funcion para imprimirlos en pantalla y organiza ambas funciones dentro de un switch


no deberia complicarte mucho =/, agarra los libros sino

cbug

El problema es demasiado sencillo.

Deberías por lo menos ponerte a analizar el código... En mi función tienes la búsqueda lineal, y la eliminación que consiste en superposición o corrimiento de elementos... Falta la muestra...

Como te dijeron si es que te falta la búsqueda y muestra, no es la gran cosa, en los problemas para principiantes lo lioso es la eliminación que ya la tienes resuelta.