Mostrando las entradas con la etiqueta ejercicio. Mostrar todas las entradas
Mostrando las entradas con la etiqueta ejercicio. Mostrar todas las entradas

jueves, 2 de julio de 2015

Listas palindromas

20.11 Escriba un programa que utilice un objeto pila para determinar si una cadena es una palíndroma (es decir, que la cadena se deletree en forma idéntica, tanto al revés como al derecho). El programa debe ignorar espacios y puntuación.

#include <iostream>
using namespace std;
struct nodo
{
 char dato;
 struct nodo *sig;
};

void inicializar(nodo **cab)
{
 *cab = NULL;
}

void push(nodo **cab , char nuv)
{
 nodo *q;
 q = new nodo;
 q->dato = nuv;
 if(*cab == NULL)
 {
  q->sig = *cab;
  *cab = q;
 }
 else
 {
  q->sig = *cab;
  *cab = q;
 }
}

char pop(nodo **cab)
{
 nodo *aux;
 char num;
 aux = *cab;
 if(aux)
 {
  num = aux->dato;
  *cab = (*cab)->sig;
  delete aux;
  return num;
 }
 else
 {
  return 0;
 }
}

int comparar(nodo *cab, nodo *cab2 , int n)
{
     int b = 1; 
     for(int i=0;i<n;i++)
     {
         if(cab->dato == cab2->dato)
         {
             cab = cab->sig;
             cab2 = cab2->sig;
         }
         else
             b = 0;
     }
     return b;
}

void mostrar(nodo *cab)
{
 while(cab)
 {
  cout<<cab->dato;
  cab = cab->sig;
 }
 cout<<"\n\n\n";
}

int main()
{
 nodo *cab , *cab2;
 inicializar(&cab);
 inicializar(&cab2);
    string palabra ="anita lava la.. tina";
 //cout<<" ingresa palabra:  ";
 //cin>>palabra;
 int cont=0;
 for(int i=(palabra.length()-1);i>=0;i--)
 {
            if(palabra[i] != ' ')
            {     if(palabra[i] != '.')
                    push(&cab , palabra[i]);
                  else
                      cont++;  }
            else
                cont++;
    }
    for(int i=0;i<palabra.length();i++)
 {
            if(palabra[i] != ' ')
            {     if(palabra[i] != '.')
                    push(&cab2 , palabra[i]);
                  else
                      cont++;  }
            else
                cont++;
    }
 cout<<comparar(cab , cab2, palabra.length()-cont)<<" '1 iguales , 0 diferentes'  \n";
    mostrar(cab2);
 mostrar(cab);
 
 system("pause");
 return 0;
}


Suma y promedio de una lista

20.8 Escriba un programa para insertar 25 enteros aleatorios de 0 a 100 en orden, en un objeto lista enlazada. El programa deberá calcular la suma de los elementos y el promedio de punto f lotante de los elementos.
 

/*
* C++ Suma y promedio de una lista simple
*
*/
 
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
struct nodo{
       int nro;        // en este caso es un numero entero
       struct nodo *sgte;
};
 
typedef struct nodo *Tlista,*Tlista2;
 
Tlista inicio, fin;
Tlista2 inicio2,fin2;
 
void generarLista( Tlista &inicio, Tlista &fin, int n ) 
{
     Tlista q, t;
     Tlista r, s;
     
     for(int i=0; i<n; i++)
     {
         q = new(struct nodo);
         q->nro = rand()%100;
         
         r = new(struct nodo);
         r->nro = q->nro;
         
         if(inicio==NULL)
         {
              q->sgte = inicio;
              inicio  = q;
              fin     = q; 
         }
         else
         {
              q->sgte   = fin->sgte;
              fin->sgte = q;
              fin       = q;
         }
     }
     
     cout<<"\n\n\tLista de numeros generados... "<<endl;
}
  
 
void reportarLista(Tlista inicio)
{
     
     while(inicio != NULL)
     {
          cout << inicio->nro<<"  " ;
          inicio = inicio->sgte;
     }
 
}
 
void ordenarLista(Tlista lista)
{
     Tlista actual , siguiente;
     int t;
     
     actual = lista;
     while(actual->sgte != NULL)
     {
          siguiente = actual->sgte;
          
          while(siguiente!=NULL)
          {
               if(actual->nro > siguiente->nro)
               {
                    t = siguiente->nro;
                    siguiente->nro = actual->nro;
                    actual->nro = t;          
               }
               siguiente = siguiente->sgte;                    
          }    
          actual = actual->sgte;
          siguiente = actual->sgte;
           
     }
}
 
int suma( Tlista inicio )
{
    int suma = 0;
    while( inicio )
    {
        suma = suma + inicio->nro;
        inicio = inicio->sgte;
    }
    return suma;
}

/*                        Funcion Principal
------------------------------------------------------------------*/
 
int main()
{
    inicio = NULL;
    fin    = NULL;
    float sumar;
 
    system("color 0b");
    
    generarLista( inicio, fin, 25 );
    ordenarLista( inicio );
    cout<<"\n\n LISTA:\n\n";
    reportarLista( inicio );  
    sumar = suma( inicio ); 
    cout<<"\n\nsuma= "<<sumar<<"  promedio= "<<sumar/25<<"\n\n\n";      
    
 
   system("pause");
   
   return 0;
}