• Lunes 6 de Mayo de 2024, 09:36

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - LamKros

Páginas: [1]
1
Otras Bases de Datos / Re: Modificar Tablas Usando Sentencias Sql
« en: Viernes 28 de Mayo de 2004, 22:34 »
hola, he probado esa instruccion en oracle 9i y no me funciona. Porque no funciona?, un saludo.

Código: Text
  1.  
  2. create table prueba(
  3.    nombre varchar2(10)
  4. );
  5.  
  6. alter table prueba
  7.    add nombre2 varchar2(10);
  8.  
  9. alter table prueba
  10.    add anterior varchar2(10) after nombre;
  11.  
  12.  

Código: Text
  1.  
  2.  
  3.    add anterior varchar2(10) after nombre
  4.                              *
  5. ERROR en línea 2:
  6. ORA-01735: opción ALTER TABLE no válida
  7.  
  8.  
  9.  

2
Dudas informáticas / Re: Windows Nt 2000 Bios?
« en: Jueves 20 de Mayo de 2004, 18:30 »
Creo que la version de windows que tenga la computadora no influye en el arranque, que es anterior a la carga del sistema operativo. Asi que lo unico que se me ocurre es que en la otra computadora inicialmente aparezca el bloque numerico activado y por eso toma la tecla . que dices como . y no como Supr. Intenta pulsar la tecla Supr o Del que normalmente se situa por donde estan las teclas Ins,Inicio,Fin ... o Home,End.., Suerte ;)

3
C/C++ / imagenes bmp en c++
« en: Viernes 30 de Mayo de 2003, 23:52 »
aqui hay un ejercicio donde te explican el formato de los bmp.

http://polaris.lcc.uma.es/~ccottap/docencia/LP/prac10/

si necesitas ayuda , preguntame. Para leerlo usa lectura y escritura de ficheros binarios.

4
C/C++ / leer ficheros bmp en lenguaje C
« en: Viernes 30 de Mayo de 2003, 16:18 »
Aqui teneis un enunciado de una practica de programacion en c++ que explica el formato BMP. Creo q es mas claro, el link:

http://polaris.lcc.uma.es/~ccottap/docencia/LP/prac10/

:adios:

5
C/C++ / evaluador de expresiones en c++
« en: Jueves 22 de Mayo de 2003, 21:12 »
Juank tiene razon, piensalo tu, si quieres te doy una idea, usando una estructura de arboles o usando recursividad lo puedes hacer.

6
C/C++ / Conversion de tipos con char*
« en: Miércoles 30 de Abril de 2003, 21:08 »
Muchas gracias juank, ya e resuelto el problema, lo q estaba haciendo era valido, el problema que hacia q mi programa diese error en tiempo de ejecucion era q no manejaba bien los argumentos de la funcion main. Yo pensaba que era por que no hacia bien la conversion de cadena de caracteres de un argv[n] , y el problema real es q accedia a un n fuera de rango, de todas formas tu comentario me a ayudado a clarificar mis ideas al respecto del manejo de cadenas, muchas gracias. Un saludo.:gracias:

7
C/C++ / Re: Conversion de tipos con char*
« en: Miércoles 30 de Abril de 2003, 18:54 »
Hola, estoy usando la libreria string.h para manejar cadenas de caracteres y quiero pasar una cadena de caracteres del tipo char *cad    a  una cadena de caracteres del tipo char cadena[MAXCAD].
El problema q tengo es q tengo definidas una serie de funciones con sus parametros formales de la segunda forma y cuando le paso a la funcion como parametro una cadena con un puntero char* no funciona, asi q estoy buscando la forma de pasar un char* a char cadena[MAXCAD]. He probado con la strcpy(cadena,ptr_a_char)  y no me va. Ni tampoco me funciona el siguiente procedimiento:

const int MAXCAD = 20;
typedef char TCadena[MAXCAD];

void Charptr_TCadena(TCadena & s1,char *s2)
{
   int i = 0;
   while (( i < MAXCAD)&&(s2 [ i ] ! = FINCAD))
   {
      s1 [ i ]=s2 [ i ];
      + + i;
   }
   s1 [i ] = FINCAD;
}


Ej.

char *s2 = "hola";
TCadena s1;

Charptr_TCadena(s1,s2);

lo que quiero es q en s1 quede "hola";
Ayuda, :think::question:

8
C/C++ / Re: 45481
« en: Martes 17 de Diciembre de 2002, 22:10 »
//Aqui esta el programa que funciona

// Programa que pasa un numero < 1000 a cadena
// de caracteres.

/*
El proceso que haría  este programa
para el ejemplo del numero 832:

NUMERO MENOR QUE 1000?
 |
SI
 |
 832 : 10 = 83.2 -> numero[3] = 2 (ascii 48 + 2)
 83  : 10 = 8.3  -> numero[2] = 3 (ascii 48 + 3)
 8   : 10 = 0.8  -> numero[1] = 8 (ascii 48 + 8)
 0   : 10 = 0    -> numero[0] = 0 (ascii 48)

 por lo que  nos queda un array con:
 
 --------------------------
 | 0 | 8 | 3 | 2 | char(0) |
 --------------------------
*/



#include <iostream.h>
#include <stdlib.h>

int main()
{ int i;
char numero[5]; // longitud de la cadena + 1

int num; // aqui recogemos el numero
cout << "Introduce el numero menor de 1000: ";
cin >> num;

if (num <1000)
{

/* descuartizamos el numero
y metemos cada digito en una
posicion del array
*/  
i=3 ;
while (i >= 0)
{  
numero = char(48 + (num % 10));
num = num / 10;
i = i-1;
}
numero[4]=char(0); // colocamos el fin de cadena

cout <<"El numero introducido es " << numero <<endl;
}
else
{
cout <<endl << " He dicho menor de 1000 " <<endl;
}

system("PAUSE");
return 0;
}

9
C/C++ / Ayuda para este programa LamKros!
« en: Miércoles 11 de Diciembre de 2002, 00:51 »
no he podido ponerme a hacerlo, por lo que te dejo esta direccion donde te explica como funciona, esta en ingles.

http://www.mkssoftware.com/docs/man3/ctime.3.asp

10
C/C++ / color en matriz / vector
« en: Jueves 31 de Octubre de 2002, 20:32 »
#include <stdlib.h>
#include <iostream.h>
#include <conio.c>

void cambia_color (int COLOR)
{
HANDLE h; //manejador
h = GetStdHandle(STD_OUTPUT_HANDLE); //lo cargamos como manejador estandar de salida
SetConsoleTextAttribute (h,COLOR); //cambiamos el color de la pantalla
}

const int FONDO_VERDE_LETRA_BLANCA = 0x2F; //numero constante representado en HEX
/*
0x2F
esto es un numero compuesto por dos numeros hexadecimales:
0x significa que el numero es hexadecimal
2 es el 0010 que para el ordenador en esa posicion es FONDO verde,
F es el 1111 que en esa posicion, es LETRA en blanco
*/

const int FONDO_BLANCO_LETRA_VERDE = 0xF2; //otro numero representado en HEX
/*
0xF2
en este caso, el F esta en la posicion del FONDO por lo que el fondo es blanco
y el 2 es para LETRA verde.

Los colores van desde el
0 que es el negro  hasta el
F que es el blanco
*/

int main()
{
cambia_color( FONDO_VERDE_LETRA_BLANCA );//le da el valor 0x2F a COLOR
/*
por lo que
SetConsoleTextAttribute (h,COLOR);
será:
SetConsoleTextAttribute (h,0x2F);
en este caso
*/
cout <<"Hola Mundo" <<endl;

//si quieres restaurar el color normal:
cambia_color( 0x0F );
      system("PAUSE");
      return 0;
}

11
C/C++ / Datos aleatorios
« en: Jueves 31 de Octubre de 2002, 20:15 »
/*
Para 4 numeros aleatorios
*/

#include <iostream.h>
//Necesarias para numeros aleatorios
#include <ctime> //para usar time()
#include <cstdlib> //para usar srand() y rand()

const int MAX= 100; //el numero maximo que quieres que pueda salir
const int NUM= 4; //¿cuantos numeros quieres que salgan?
int main()
{
int azar;
srand(time(0));
for(int i=0; i<NUM; ++i)
{
azar= (rand()%MAX)+1;
cout <<"Numero "<<i <<" : "<<azar <<endl ;
}
system ("PAUSE") ;
return 0 ;
}

12
C/C++ / Re: color en matriz / vector
« en: Domingo 1 de Septiembre de 2002, 17:07 »
puedes usar la libreria conio.c para cambiar los colores. Crea una funcion que se encargue de cambiar el color.

seria algo asi como:

#include <conio.c>

void cambia_color (int COLOR)
{
HANDLE h;
h =  GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute (h,COLOR);
}

y puedes usar los colores standares como BLUE, RED y demas al modo de cambia_color(BLUE); o puedes definirlos al estilo const int VERDE = 0x0A; donde 0 es donde va el valor hexadecimal del color del fondo y la A el color de la letra.

dentro del bucle puedes  poner q si se cumple cambie a un color, imprima lo que sea y despues cambie al color normal. con esto creo q ya esta solucionado. si quieres q explique algo con mas detalle aqui estoy;)

13
Metodologías de Programación / Re: Informacion de metodologias de programacion
« en: Miércoles 3 de Julio de 2002, 21:40 »
Prueba en la pagina de este profesor:
http://www.lcc.uma.es/~pastrana

14
C/C++ / Codigo Morse a Letras
« en: Martes 2 de Julio de 2002, 12:35 »
/*Pues eso, que despues de leer tu curiosidad, me he animado a realizarlo y este es el resultado*/

/*
Programa Decodificador Morse LK
Realizado por LamKros.
lamkros@mixmail.com

Descripcion: Dado un signo morse lo traduce a caracteres.
Funciona para el abecedario y los numeros, si el signo es menor de 6 digitos
y si no se introducen caracteres no deseados.

El autor da su consentimiento para que el codigo
sea modificado, ampliado o mejorado por cualquier persona

He utilizadado como estructura para la decodificacion un arbol binario,
en el cual la rama izquierda es el punto y la rama derecha la raya.

Asi, la W es .--, porque en el arbol nos desplazamos al nodo de la izquierda,
despues hacia la derecha y otra vez a la derecha.

Bueno, que lo disfruteis;)
*/

         //Realizado por Lamkros

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>


        //Realizado por Lamkros

const int MAXMORSE = 5;
const char FINCAD = char(0);
const char ESPACIO = ' ';
const char PUNTO = '.';
const char RAYA = '-';
const char SIN_CARACTER = 'x';


typedef struct TNodo *TMorse;
struct TNodo
       {
       char valor;
       TMorse punto;
       TMorse raya;
       };

typedef char TDato [MAXMORSE+1];
       //Realizado por Lamkros

void CrearMorse(TMorse &m);
void CrearNodosVacios(TMorse &m,int i);
void RellenarValores (TMorse &m);
void MostrarCaracteres(TMorse &m);
void DestruirMorse(TMorse &m);
char BuscarMorse(TMorse &m,TDato dato,int i);


       //De Lamkros para todos

int main()
    {
    TMorse m;
    TDato dato;
    m=NULL;
    //int i=0,j=0;
    char car;
    CrearMorse(m);
    bool fin=false;
    cout << "t Decodificador Morse LK"<<endl<<endl;
    cout << "t Funciona correctamente hasta 5 digitos"<<endl ;
    cout << "t Pulsar Q para salir"<<endl <<endl;
    while (!(fin))
    {
    cout << "t Insertar signo: ";
    cin >> dato;
    if (toupper(dato[0])=='Q')
    {fin = true;}
    else
    {
    car = BuscarMorse(m,dato,0);
    if (car=='x')
    {
    cout << "SIGNO NO VALIDO"<<endl;
    }
    else
    {cout <<car <<" "<<endl;}
    }
    }
    system("PAUSE");
    DestruirMorse(m);
    return 0;
    }

       //Realizado por Lamkros
void CrearMorse(TMorse &m)
     {
     int i=0;
     CrearNodosVacios(m,i);
     RellenarValores (m);
     }
      //Resuelto por Lamkros

void CrearNodosVacios(TMorse &m,int i)
     {
     if (i==(MAXMORSE+1))
     {m=NULL;}
     else
     {
     m=new(TNodo);
     CrearNodosVacios(m->punto,i+1);
     CrearNodosVacios(m->raya ,i+1);
     }
     }
     //Ideado por Lamkros
     
void RellenarValores (TMorse &m)
     {TMorse ptr;
     ptr=m;
     if (ptr!=NULL)
     {
     /*
     ptr
     punto->
     raya->
     valor
     */
     
     ptr->valor                                     = SIN_CARACTER;
     ptr->punto->valor                              = 'E';
     
     ptr->punto->punto->valor                       = 'I';
     ptr->punto->punto->punto->valor                = 'S';
     ptr->punto->punto->punto->punto->valor         = 'H';
     ptr->punto->punto->punto->punto->punto->valor  = '5';
     ptr->punto->punto->punto->punto->raya->valor   = '4';
     ptr->punto->punto->punto->raya->valor          = 'V';
     ptr->punto->punto->punto->raya->punto->valor   = SIN_CARACTER;
     ptr->punto->punto->punto->raya->raya->valor    = '3';
     
     ptr->punto->punto->raya->valor                 = 'U';
     ptr->punto->punto->raya->punto->valor          = 'F';
     ptr->punto->punto->raya->punto->punto->valor   = SIN_CARACTER;
     ptr->punto->punto->raya->punto->raya->valor    = SIN_CARACTER;
     ptr->punto->punto->raya->raya->valor           = SIN_CARACTER;
     ptr->punto->punto->raya->raya->punto->valor    = SIN_CARACTER;
     ptr->punto->punto->raya->raya->raya->valor     = '2';
     
     
     ptr->punto->raya->valor                        = 'A';
     ptr->punto->raya->punto->valor                 = 'R';
     ptr->punto->raya->punto->punto->valor          = 'L';
     ptr->punto->raya->punto->punto->punto->valor   = SIN_CARACTER;
     ptr->punto->raya->punto->punto->raya->valor    = SIN_CARACTER;
     ptr->punto->raya->punto->raya->valor           = SIN_CARACTER;
     ptr->punto->raya->punto->raya->punto->valor    = SIN_CARACTER;
     ptr->punto->raya->punto->raya->raya->valor     = SIN_CARACTER;
     
     ptr->punto->raya->raya->valor                  = 'W';
     ptr->punto->raya->raya->punto->valor           = 'P';
     ptr->punto->raya->raya->punto->punto->valor    = SIN_CARACTER;
     ptr->punto->raya->raya->punto->raya->valor     = SIN_CARACTER;
     ptr->punto->raya->raya->raya->valor            = 'J';
     ptr->punto->raya->raya->raya->punto->valor     = SIN_CARACTER;
     ptr->punto->raya->raya->raya->raya->valor      = '1';
     
     
     ptr->raya->valor                               = 'T';
     
     ptr->raya->punto->valor                        = 'N';
     ptr->raya->punto->punto->valor                 = 'D';
     ptr->raya->punto->punto->punto->valor          = 'B';
     ptr->raya->punto->punto->punto->punto->valor   = '6';
     ptr->raya->punto->punto->punto->raya->valor    = SIN_CARACTER;
     ptr->raya->punto->punto->raya->valor           = 'X';
     ptr->raya->punto->punto->raya->punto->valor    = SIN_CARACTER;
     ptr->raya->punto->punto->raya->raya->valor     = SIN_CARACTER;
     
     ptr->raya->punto->raya->valor                  = 'K';
     ptr->raya->punto->raya->punto->valor           = 'C';
     ptr->raya->punto->raya->punto->punto->valor    = SIN_CARACTER;
     ptr->raya->punto->raya->punto->raya->valor     = SIN_CARACTER;
     ptr->raya->punto->raya->raya->valor            = 'Y';
     ptr->raya->punto->raya->raya->punto->valor     = SIN_CARACTER;
     ptr->raya->punto->raya->raya->raya->valor      = SIN_CARACTER;
     
     
     ptr->raya->raya->valor                         = 'M';
     ptr->raya->raya->punto->valor                  = 'G';
     ptr->raya->raya->punto->punto->valor           = 'Z';
     ptr->raya->raya->punto->punto->punto->valor    = '7';
     ptr->raya->raya->punto->punto->raya->valor     = SIN_CARACTER;
     ptr->raya->raya->punto->raya->valor            = 'Q';
     ptr->raya->raya->punto->raya->punto->valor     = SIN_CARACTER;
     ptr->raya->raya->punto->raya->raya->valor      = SIN_CARACTER;
     
     ptr->raya->raya->raya->valor                   = 'O';
     ptr->raya->raya->raya->punto->valor            = SIN_CARACTER;
     ptr->raya->raya->raya->punto->punto->valor     = '8';
     ptr->raya->raya->raya->punto->raya->valor      = SIN_CARACTER;
     ptr->raya->raya->raya->raya->valor             = SIN_CARACTER;
     ptr->raya->raya->raya->raya->punto->valor      = '9';
     ptr->raya->raya->raya->raya->raya->valor       = '0';
     
     }
     }
     //Pensado por Lamkros

void MostrarCaracteres(TMorse &m)
     {
     if (m!=NULL)
     {
     cout <<m->valor;
     MostrarCaracteres(m->punto);
     MostrarCaracteres(m->raya);
     }
     }
     //Diseñado por Lamkros


char BuscarMorse(TMorse &m,TDato dato,int i)
     {
     if (m!=NULL)
     {
     if (dato ==FINCAD)
     {return m->valor;}
     else
     {
     if (dato ==PUNTO)
     {BuscarMorse(m->punto,dato,i+1);}
     else  if (dato==RAYA)
     {BuscarMorse(m->raya,dato,i+1);}
     else
     {return SIN_CARACTER;}
     }
     }
     }


void DestruirMorse(TMorse &m)
     {
     if (m!=NULL)
     {
     DestruirMorse(m->punto);
     DestruirMorse(m->raya);
     delete(m);
     }
     }
     //Hecho por Lamkros

15
C/C++ / Re: 45481
« en: Lunes 1 de Julio de 2002, 14:18 »
#include <iostream.h>
#include <stdlib.h>

int main()
{int i;
char numero[4];
numero[4]=char(0);
int num;
cout <<"Introduce el numero menor de 1000: ";
cin >> num;
if (num <1000)
{
i=3;
while (i>=0)
{
numero=char(48 + (num % 10));
num = num / 10;
--i;
}
cout <<"El numero introducido es " <<numero <<endl; //no se porque imprime caracteres raros
}
else
{
cout <<endl <<" He dicho menor de 1000 >:("<<endl;
}


      system("PAUSE");
      return 0;
}

16
C/C++ / case
« en: Lunes 1 de Julio de 2002, 13:56 »
#include <iostream.h>
#include <stdlib.h>

int main()
{
int opc;
system("CLS");
cout <<endl <<"Quien descubrio America?: ";
cout <<endl <<"1. Felipe Gonzalez";
cout <<endl <<"2. El Fari";
cout <<endl <<"3. Penelope Cruz";
cout <<endl <<"4. Colon";
cout <<endl <<"Introduzca una opcion: ";
cin >>opc;

switch (opc)
       {
       case 1:
       cout <<endl <<"Si claro, jejeje";
       break;
       case 2://como este case no tiene break sigue y hace tambien case 3 hasta el break
       case 3:
       cout <<endl <<"Tu ves mucho la tele";
       break;
       case 4:
       cout <<endl <<"Acertastes;)";
       break;
       default: //en otro caso
       cout <<endl<<" Opcion incorrecta ";
       break;
       }
      cout <<endl;
      system("PAUSE");
      return 0;
}

17
C/C++ / LISTA DOBLEMENTE ENLAZADA
« en: Lunes 1 de Julio de 2002, 13:42 »
/*
La forma que en trabajas con punteros es dsitinta a como lo hago yo, pero creo que la he entendido y esta es la solucion que he encontrado. Si no funciona, quedate con la idea
*/

void intercambiar(tipodatos *arg1, tipodatos *arg2)
{
tipodatos temp;
temp.tllegada = arg1->tllegada;
temp.tdemandado = arg1->tdemandado;
arg1->tllegada = arg2->tllegada;
arg1->tdemandado = arg2->tdemandado;
arg2->tllegada = temp.tllegada;
arg2->tdemandado = temp.tdemandado;
}

18
C/C++ / Vector con N° aleatorio sin repetirse
« en: Lunes 1 de Julio de 2002, 13:29 »
/*
Aqui tienes un mini-programa como una solucion
Espero que te sirva
*/

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

/*Realizado por Lamkros*/

int main()
{int i,j,t;
bool ok=true;
int vector[21];
i=0;
srand(time(0));  //inicializa el rand

while (i<=20)
{ok=true;
t=(rand()%75)+1; //Calculo en num aleatorio
j=0;
while ((ok)&&(j<i)) //Compruebo que no esta ya
{
if (vector[j]==t)
{ok = false;}
else
{++j;}
}
if (ok)  // Si no está incremento i y le doy al vector su valor t
{vector=t;
++i;}

}

//Imprime todos los valores
for (i=0;i<=20;++i)
{cout <<endl<<vector<<", ";}
 
system("PAUSE");
return 0;
}

//Suerte;)

19
C/C++ / problemas de espacio
« en: Lunes 1 de Julio de 2002, 12:49 »
A que te refieres con, "me quedo sin espacio"? a que te quedas sin memoria en tiempo de ejecucion?  Si este es tu problema, una solucion seria guardar cada cierta cantidad de memoria dinamica usada todo en un fichero , y trabajar leyendo y guardando en los ficheros la estructura dinamica. Puedes organizar los ficheros con claves para tener una referencia y no tener que cargar todo el archivo. Suerte;)

20
C/C++ / Re: problemas de espacio
« en: Lunes 1 de Julio de 2002, 12:43 »
A q

21
C/C++ / Re: Datos aleatorios
« en: Lunes 1 de Julio de 2002, 12:41 »
/*
Aqui tienes otro ejemplo,
este funciona.
*/

#include <iostream.h>
//Necesarias para numeros aleatorios
#include <ctime> //para usar time()
#include <cstdlib> //para usar srand() y rand()


int main()
{
int azar;
srand(time(0));
azar=(rand()%2)+1;
cout <<"Numero: "<<azar <<endl;
      system("PAUSE");
      return 0;
}

//Esta es solo una forma mas

22
C/C++ / base de datos en C
« en: Lunes 1 de Julio de 2002, 12:09 »
/*
Aqui tienes un ejemplo de como haria una base de datos
si cierto es que no es la forma optima, es una alternativa
relativamente sencilla y nunca va estar llena a no ser que
te quedes sin memoria
*/

#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>

//Estructura de Datos

/*Esta es una base de datos con lista enlazada*/

const int MAXCAD = 20;

typedef char TCadena [MAXCAD+1];


typedef struct TDato
        {
       int codigo;
       TCadena nombre;
       TCadena apellidos;
       };

typedef struct TNodo *TBD;

struct TNodo //
       {
       TDato dato;
       TBD sig;
       };

TBD CrearBDVacia();
void DestruirBD(TBD &l);

void InsertarDato(TBD &l,TDato dato);
void BorrarDato(TBD &l,int codigo);
void LeerDato (TBD &l,int codigo,TDato &dato,bool &ok);
void GuardarFichero (TCadena nombreFichero,TBD &l);
void CargarFichero (TCadena nombreFichero,TBD &l);

int main()
    {
    TBD l;
    l=CrearBDVacia();
    //Aqui iria el programa

    /*No se debe olvidar liberar los datos que hemos creado de forma dinamica
    y que solo nosotros estamos autorizados a eliminar de la memoria
    y que en caso de no eliminarlos se quedaran en la RAM como basura
    hasta que se libere esta.
    */
    DestruirBD(l);
    system("PAUSE");
    return 0;
    }


void GuardarFichero (TCadena nombreFichero,TBD &l)
     {
     TBD ptr;
     ptr=l;
     fstream f;
     f.open(nombreFichero,ios::out|ios::binary);
     while (ptr!=NULL)
           {
           f.write(ptr,sizeof(TNodo));
           ptr=ptr->sig;
           }
     f.close();
     }

void CargarFichero (TCadena nombreFichero,TBD &l)
     {
     TBD ptr;
     fstream f;
     ptr=l;
     f.open (nombreFichero,ios::in | ios::binary);
     if (!(f.bad()))
     {
     while (!(f.eof()))
     {
     f.read (&ptr,sizeof(TNodo));
     ptr=ptr->sig;
     }
     }
     f.close();
     }


TBD CrearBDVacia()
    {return NULL;}

void DestruirBD(TBD &l)
     {
     TBD ptr;
     ptr=l;
     while (ptr!=NULL)
     {
     l=l->sig;
     delete (ptr);
     ptr=l;
     }
     }

void InsertarDato(TBD &l,TDato dato)
     {
     /*Esto depende de como quieras ordenar los datos
     Si quieres ordenarlo de  A-Z se me ocurre que puedes
     ir metiendo el dato despues del ultimo dato que empiece por la misma vocal
     o algo asi  

     */
     TBD ptr,nuevonodo;
     nuevonodo=NULL;
     ptr=l;
     while ((ptr->dato.nombre[0]<dato.nombre[0])&&(ptr!=NULL))
     {
     ptr=ptr->sig;
     }
     nuevonodo=new(TNodo);
     nuevonodo->dato=dato;
     if (ptr!=NULL)
     {nuevonodo->sig=ptr->sig;}
     else
     {nuevonodo->sig = NULL;}
     ptr->sig = nuevonodo;
     }

void BorrarDato(TBD &l,int codigo)
{}


void LeerDato (TBD &l,int codigo,TDato &dato,bool &ok)
     {
     TBD ptr;
     ptr=l;
     while ((ptr!=NULL)&&(ptr->dato.codigo!=codigo))
     {
     ptr=ptr->sig;
     }
     if(ptr!=NULL)
     {
     dato=ptr->dato;
     ok=true;
     }
     else
     {ok=false;}
     }

     /*
     Esto es todo, si he cometido algun error,
     por favor, decirlo por aqui,
     espero que te sea util,

     lamkros@mixmail.com
   ;)
 */texto Green

23
C/C++ / Principitante
« en: Lunes 1 de Julio de 2002, 09:51 »
/*
Aqui tienes un ejemplo de C++,
espero que te sirva aunque no sea C puro y duro.
Si tienes dudas pregunta lo que sea;
*/

/*Realizado por LamKros*/

#include <iostream.h>
#include <stdlib.h>
#include <fstream.h> //libreria para usar ficheros de esta forma


int main()
{
bool ok=false;
int var1, var2, var3;
fstream fichero;                    // descriptor del fichero
fichero.open("datos.txt",ios::in); // (ios::in) abre en modo lectura
if (!(fichero.bad()))              //comprueba que el fichero existe
{fichero >> var1;                  //lee la variable 1
if (!(fichero.eof()))             //comprueba que el fichero no esta vacio
{
fichero >> var2;                  //lee la variable 2
fichero >> var3;                  //lee la variable 3
ok=true;                          //indica que se han leido bien las variables
}
}
fichero.close();                  //cierra el fichero
if (ok)               //solo muestra las variables si se han leido bien
{
cout <<"Variable 1: "  <<var1 <<endl;
cout <<"Variable 2: "  <<var2 <<endl;
cout <<"Variable 3: "  <<var3 <<endl;
}
else
{cout <<"Los datos no han sido leidos correctamente" <<endl;}
      system("PAUSE");
      return 0;
}

/*
el formato del fichero deberá ser

var1 var2 var3

Para probar el ejemplo no se te olvide crear el fichero datos.txt.
Las variables son enteros, pero igual pueden ser cadenas y demas.
*/

24
C/C++ / elegir opcion
« en: Sábado 29 de Junio de 2002, 21:25 »
/* Visto el anterior ejemplo, aqui tienes una alternativa, a falta de uno, dos :D */

/*Realizado por LamKros*/

#include <iostream.h>
#include <stdlib.h>
#include <ctype.h> //Para utilizar toupper()

/*toupper pone a mayusculas un caracter*/


char Menu();
bool Confirmar_Salida();

int main()
{char opc;
bool fin = false;
do
{
system("CLS"); //Limpia la pantalla
opc = Menu();
switch (opc)
       {
       case 'A':
       // Aqui poner lo que quieres que haga la opcion A
       cout <<endl <<"Seleccionada la Opcion A" <<endl;
       break;
       case 'B':
       //Lo mismo con la opcion B
       cout <<endl <<"Seleccionada la Opcion B" <<endl;
       break;
       case 'C':
       //Con la C
       cout <<endl <<"Seleccionada la Opcion C" <<endl;
       break;
       case 'D':
       //Y asi todas las que quieras
       cout <<endl <<"Seleccionada la Opcion D" <<endl;
       break;
       case 'X'://Y la X por ejemplo para salir
       fin = Confirmar_Salida();
       break;
       }
      system("PAUSE");
}while (!(fin));
      return 0;
}

char Menu()
{char opc;
cout           << " <Titulo del Programa> " << endl <<endl;
cout           << "t A. Opcion A" << endl; //la t es para tabular
cout           << "t B. Opcion B" << endl;
cout           << "t C. Opcion C" << endl;
cout           << "t D. Opcion D" << endl;
cout           << "t X. Salir"    << endl;

cout    <<endl << "Introduce una opcion: " <<endl;
cin >> opc;
return toupper(opc);
}

bool Confirmar_Salida()
{char opc;
cout <<endl <<"Confirma que desea salir(S/N): ";
cin >> opc;
return (toupper(opc)=='S');
}

25
C/C++ / Validar entrada de datos
« en: Sábado 29 de Junio de 2002, 20:52 »
/*Hola a todos, leyendo el mensaje de este amigo
me he puesto manos  a la obra en lo que podria ser una solucion.
El problema es que te dice  si es o no un float
 pero la funcion que te convierte el tipo cadena de caracteres a un float no funciona no se porqué,
 asi que expongo a continuacion el codigo fuente
 y espero que te sirva de ayuda aunque no es una sola funcion predefinida.
 Y tb os invito a descubrir que es lo que falla en la conversion TCadena a float.
Suerte;)

*/

/*Realizado por LamKros*/

#include <iostream.h>
#include <stdlib.h>

const int MAXCAD = 20;
const char FINCAD = char(0);
const char CERO = '0';
const char NUEVE = '9';
const char PUNTO = '.';

typedef char TCadena[MAXCAD+1];

//Comprueba que la cadena de caracteres corresponde a un nº en coma flotante
bool esComaFlotante(TCadena d);
//Convierte a numero en coma flotante (CONVertir To(2) Coma Flotante)
float Conv2CF(TCadena d);
//Realiza la potencia de un numero
float Potencia(int num, int indice);

int main()
    {TCadena dato;
    bool fin=false;
    int sal;
    float resultado;
   
    while (!(fin))
    {
    system("cls");
    cout << "Introduce un numero en coma flotante: ";
    cin >> dato;
    if (esComaFlotante(dato))
    {
    cout <<endl <<"Numero en coma flotante"<<endl;
    //resultado = Conv2CF(dato);
    //cout << "El numero es" <<resultado;
    }
    else
    {cout <<endl <<"Numero incorrecto"<<endl;}
    system("PAUSE");    
    cout <<endl<< " Pulsa 1 para continuar. ";
    cin >> sal;
    if(sal!=1)
    {fin = true;}
    }
      return 0;

    }

bool esComaFlotante(TCadena d)
     {bool r1=false,r2=false;
     int i=0;
     while ((d>=CERO)&&(d<=NUEVE)&&(i<MAXCAD))
     {++i;}
     if ((d==PUNTO)&&(d[i+1]!=FINCAD)&&(i>0))
     {r1=true;}
     else
     {r1=false;}
     ++i;
     while ((d>=CERO)&&(d<=NUEVE)&&(i<MAXCAD))
     {++i;}
     if ((i>=MAXCAD)||(d==FINCAD))
     {r2=true;}
     else
     {r2=false;}
     return (r1 && r2);
     }
     
float Conv2CF(TCadena d)
      {
      int i=0,j=0;
      float num=0;
      if (esComaFlotante(d))
      {
      while ((d[j]!=PUNTO)&&(j<MAXCAD))
      {++j;}
      while ((d!=FINCAD)&&(i<MAXCAD))
      {
      num = num + (int(d[j])-int(CERO))* Potencia(10,j); }
      i=i+1;
      j=j-1;
      }
      return num;
      }

float Potencia(int num, int indice)
    {int i;
    float res=1;
    if (indice>=0)
    {
    for(i=0;i<=indice;++i)
    {res = res * num;}
    }
    else
    {
    for(i=0;i>indice;--i)
    {res = res / num;}
    }
    return res;
    }      
     
//Esto es todo, animo;)

Páginas: [1]