• Miércoles 6 de Noviembre de 2024, 02:29

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.


Temas - seti

Páginas: [1]
1
C/C++ / Re: lista doblemente enlazada
« en: Martes 17 de Junio de 2003, 00:26 »
est funcion supuestamente tendría que ordenaruna lista doblemente enlaxzada pero falla si alguien me puede ayudar


void ordenar(tiponodo *lista,int cont)
{
int i=1,j=0;
tiponodo *nodo,*anterior=NULL,*siguiente=NULL;

while(i)

{
nodo=lista;
i=0;
while(nodo)
{
                siguiente=nodo->siguiente;
                anterior=nodo->anterior;
                if(siguiente!=NULL && nodo->num > siguiente->num)
                 {

                        if(anterior!=NULL)
                        {
                        anterior->siguiente=siguiente;
                                   }
                        siguiente->anterior=anterior;

                         if(siguiente->siguiente!=NULL)
                        {
                        siguiente->siguiente->anterior=nodo;
                           }
                        nodo->siguiente=siguiente->siguiente;

                        nodo->anterior=siguiente;
                        siguiente->siguiente=nodo;
                        i=1;
                }
                else
                {
               nodo=nodo->siguiente;
               }
}

}
}

adjunto el resto del programa:

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

typedef struct nodolista{
int num;
struct nodolista *siguiente;
struct nodolista *anterior;
}tiponodo;


int insertar(tiponodo **);
void ordenar(tiponodo *,int);
void mostrar(tiponodo *);
tiponodo *crearnodo(void);

void main(void )
{
tiponodo *lista=NULL;
int cont;
cont=insertar(&lista);
clrscr();
printf("%d",cont);
printf("Antes de ordenar:nn");
mostrar(lista);
ordenar(lista,cont);
printf("nDespues de ordenar;nn");
mostrar(lista);
getch();
}

int insertar(tiponodo **lista)
{
tiponodo *nodo,*anterior,temp;
int sw=1,cont=0;
printf("nIntroduce una letra para salirn");
while(sw==1)
        {
        printf("nIntroduce un numero: ");
       
        sw=scanf("%d",&temp.num);
        if(sw)
        {
        nodo=crearnodo();
        nodo->num=temp.num;
                if(*lista==NULL)
                {

                *lista=nodo;
                nodo->anterior=nodo->siguiente=NULL;
                }
                else
                {
                anterior->siguiente=nodo;
                nodo->anterior=anterior;
                nodo->siguiente=NULL;
                cont++;
                }

        anterior=nodo;
        }
        }
return(cont);
}

void ordenar(tiponodo *lista,int cont)
{
int i=1,j=0;
tiponodo *nodo,*anterior=NULL,*siguiente=NULL;

while(i)

{
nodo=lista;
i=0;
while(nodo)
{
                siguiente=nodo->siguiente;
                anterior=nodo->anterior;
                if(siguiente!=NULL && nodo->num > siguiente->num)
                 {

                        if(anterior!=NULL)
                        {
                        anterior->siguiente=siguiente;
                                   }
                        siguiente->anterior=anterior;

                         if(siguiente->siguiente!=NULL)
                        {
                        siguiente->siguiente->anterior=nodo;
                           }
                        nodo->siguiente=siguiente->siguiente;

                        nodo->anterior=siguiente;
                        siguiente->siguiente=nodo;
                        i=1;
                }
                else
                {
               nodo=nodo->siguiente;
               }
}

}
}

void mostrar(tiponodo *lista)
{
tiponodo *nodo;
nodo=lista;
       while(nodo!=NULL)
        {
        printf("El numero %dn",nodo->num);
        nodo=nodo->siguiente;
        }
}



tiponodo *crearnodo(void)
{
tiponodo *nodo;
nodo=(tiponodo *)malloc(sizeof(tiponodo));
if(nodo==NULL)
{ printf(" no hay suficiente memeoria");}

return(nodo);
}

2
C/C++ / Re: error al escribir en un archivo
« en: Sábado 24 de Mayo de 2003, 20:45 »
haber si alguien me puede ayudar
en la siguiente funcion el compilador me detecta un falloen la linea de fread

[C++ Error] Project1.cpp(115): E2285 Could not find a match for 'fread(usuarios,unsigned int,int,FILE *)'.

función:
int login(usuarios *usuario,FILE *key)
{
 int
valido=0;
usuarios usutemp;
printf("nLogin: ");
gets(usuario->login);
printf("nPassword: ");
scanf("%ld",&usuario->password);
fread(usutemp,sizeof(usuario),1,key);
if(temp.login==(*usuario).login && temp.login==(*usuario).login)
{
valido=1;
}
return(valido);
}


gracias

Adjunto todo el odigo por si teneis alguna duda:
#include <stdio.h>
#include <conio.h>

typedef struct{
char login[10];
long int password;
int tipo;
}usuarios;
typedef struct{
int codigo;
char nombre[10];
long int telefono;
char propietario[8];
int borrado;
} registro;


int login(usuarios *,FILE *);
void abrir(char[8],FILE **);
void menu(void);
void ruta (char *);
void agregar(void);
void borrar(void);
void modificar(void);
void visualizar(void);
void reorganizar(void);
void recuperar(void);


main()
{
int aceptado,op=0,i;
char cruta[12];
FILE *archivo,*key;
usuarios usu, *usuario;

abrir("c:/system.tpp",&key);

usuario=&usu;
aceptado=login(usuario,key);
ruta(cruta);
abrir(cruta,&archivo);

for(i=1;i>0;i++)
{
menu();
scanf("%d",&op);
    switch(op)
        {
        case 1:agregar(); break;
        case 2:borrar(); break;
        case 3:visualizar(); break;
        case 4:modificar(); break;
        case 5:reorganizar(); break;
        case 6:recuperar(); break;
        case 7:return(0);
        }
}
printf("nnsaliendo");
getch();
fclose(archivo);
fclose(key);
}

void menu(void)
{
        textbackground(7);
        clrscr();
        textcolor(1);
        gotoxy(30,2);
        cprintf("Introduce");
        gotoxy(25,6);
        cprintf("1.Alta");
        gotoxy(25,8);
        cprintf("2.Borrar");
        gotoxy(25,10);
        cprintf("3.Visualizar");
        gotoxy(25,12);
        cprintf("4.Modificar");
        gotoxy(25,14);
        cprintf("5.Reorganizar");
        gotoxy(25,16);
        cprintf("6.Recuperar");
        gotoxy(25,18);
        cprintf("7.Salir");

        }
void abrir(char *nombre, FILE **fichero)
{
        *fichero=fopen(nombre,"rb+");
        if(!*fichero)
          {
           *fichero=fopen(nombre,"wb+");
          if(!*fichero)
          {
          printf("se fallo al abrir el archivo");
          }
          }
}






int login(usuarios *usuario,FILE *key)
{
 int
valido=0;
usuarios usutemp;
printf("nLogin: ");
gets(usuario->login);
printf("nPassword: ");
scanf("%ld",&usuario->password);
fread(usutemp,sizeof(usuario),1,key);
if(temp.login==(*usuario).login && temp.login==(*usuario).login)
{
valido=1;
}
return(valido);
}

void ruta(char *cruta)
{
clrscr();
fflush(stdin);
printf("Introduce la ruta del fichero que quiera abrirn");
gets(cruta);
}

void agregar(void)
{
textbackground(0);
clrscr();
registro registro1;
fflush(stdin);
printf("Introducir un registronnNombre: ");
gets("registro1.nombre");
printf("Telefono: ");
scanf("%ld",®istro1.telefono);

}

void visualizar(void)
{
textbackground(0);
clrscr();
int op;
printf("1.Visualizar ordeanado por:nn");
printf("2.Nombren");
printf("3.Numeros de telefonon");
printf("4.Orden de entrada en la base de datos primero el ultimon");
printf("5.Orden de entrada en la base de datos primero el mas viejon");
printf("6.Volver al menu principaln");
scanf("%d",&op);

}

void borrar(void)
{
textbackground(0);
clrscr();
printf("Introduxaca el nombre del registro que desea borrarn");

printf("Seguro que quiere borrar este registron");
getch();
}

void reorganizar(void)
{
textbackground(0);
clrscr();
printf("Se va a proceder al borrado fisico de los ficheros logicamente borradosn");


printf("Fichero reorganizado pulse cualquier tecla para volver al menu principaln");
getch();
}

void recuperar(void)
{
textbackground(0);
clrscr();
printf("Introduce el codigo del registro que deseas recuperarn");

printf("Escribe 0 para volver al menu");
}
void modificar(void)
{
clrscr();
textbackground(0);
printf("Introduce el codigo del registro que deseas recuperarn");
getch();
}

Páginas: [1]