Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - palacio29

#61
Hola

Tengo un ejercicio de parcial en el cual tengo que crear 2 listas. En una lista tengo que poner en cada nodo una palabra y la otra lista esta vacia.
Luego tengo que hacer una función que tome esas 2 listas y si la longitud de la palabra de cada nodo  de la lista1 es mayor que 4, tengo que agregar la palabra de forma ordenada a la otra lista.
Entonces Como ejemplo:

Como condición del ejercicio tengo que crear la funcion filtrar_palabras que reciba las 2 listas y el entero limite. Si el limite es 4, entonces tengo que incluir en la 2da lista, todas las palabras que tengan longitud 4 o superior.

Lista original: "A" , "La", "Grande", "Le", "Puse", "Cuca".

Limite: 4;

Lista Modificada: "Cuca", "Grande", "Puse".

He intentado hacerlo y me tira error de ejecucion y nada. Hice un par de cambios pero lo maximo que llegaba era a ejecutar la lista original y cuando queria filtrar, tiraba error de ejecucion, ahora tira error en todo .. :(

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

struct s_nodo
{
    char*txt;
    struct s_nodo*sig;
};
typedef struct s_nodo* t_nodo;

void AGREGAR(t_nodo*,char*);
void filtrar_palabras(t_nodo,t_nodo*,int);
void insertar_ordenado(t_nodo*,char*);
void imprimir(t_nodo);


int main()
{
    t_nodo original=NULL;
    t_nodo filtrado=NULL;
    int limite=4;
    AGREGAR(&original,"a");
    AGREGAR(&original,"la");
    AGREGAR(&original,"grande");
    AGREGAR(&original,"le");
    AGREGAR(&original,"puse");
    AGREGAR(&original,"Cuca");

    printf("\nLa lista original es: \n");
    imprimir(original);

    filtrar_palabras(original,&filtrado,limite);

    printf("\nLa lista filtrada es: \n");
    imprimir(filtrado);

    return 0;
}


void AGREGAR(t_nodo*nodo,char* palabra)
{
    if(*nodo==NULL)
    {
        *nodo=malloc(sizeof(struct s_nodo));
        strcpy((*nodo)->txt,palabra);
        (*nodo)->sig=NULL;
    }
    else
        AGREGAR(&(*nodo)->sig,palabra);
}


void filtrar_palabras(t_nodo original,t_nodo*filtrado,int longitud)
{

    while(original!=NULL)
    {
        if((strlen(original->txt))>=longitud)
        {
            insertar_ordenado(filtrado,original->txt);
        }
        original=original->sig;
    }
}


void insertar_ordenado(t_nodo*nodo,char* txt)
{
    t_nodo aux=NULL;
    if(*nodo==NULL || ((strcmp((*nodo)->txt,txt))>0))
    {
        aux=malloc(sizeof(struct s_nodo));
        if(aux==NULL)
        {
            printf("Memoria insuficiente");
        }
        strcpy(aux->txt,txt);
        aux->sig=*nodo;
        *nodo=aux;
    }
    else
    {
        insertar_ordenado(&(*nodo)->sig,txt);
    }
}

void imprimir(t_nodo nodo)
{
    while(nodo!=NULL)
    {
        printf(" - %s - ",nodo->txt);
        nodo=nodo->sig;
    }
}

#62
Hola

Tengo una pregunta con respecto al uso de bits. Tengo que hacer un programa en el cual forme un nuevo numero a partir de los 2 bits mas significativos del otro.

Es decir....Si me dan el numero 4921.
Tengo que fijarte en los 2 bits mas significativos(los ultimos dos de la izquierda) y formar un nuevo numero a partir de esto.
No tengo idea como hacerlo.
#63
Hola

Tengo un ejercicio en el cual tengo que almacenar palabras en una lista y luego recibir un valor entero. Si la palabra de la lista es mayor o igual que la longitud que ingrese anteriormente, esa palabra va a ser guardada en una nueva lista.
Estoy intentadolo hacer pero al momento de ejecutar el programa, me da un error de ejecucion en la carga y no le encuentro la falla.
Creo que es un error de carga.

Adjunto el codigo haber si me pueden dar una mano

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

struct s_nodo
{
    char*palabra;
    struct s_nodo*sig;
};
typedef struct s_nodo*t_nodo;

void agregar(t_nodo*nodo);
char* carga(void);
void filtrar_palabras(t_nodo,t_nodo*,int);
void imprimir(t_nodo);
int main()
{
    int limite;
    t_nodo lista=NULL;
    t_nodo filtrada=NULL;

    agregar(&lista);
    agregar(&lista);
    agregar(&lista);
    agregar(&lista);
    printf("Palabras Originales Cargadas: \n");
    imprimir(lista);
    printf("\nIngrese un limite:");
    scanf("%d",&limite);
    printf("\nLista Modificada es : \n");
    imprimir(filtrada);


    return 0;
}
void agregar(t_nodo*nodo)
{
    if(*nodo==NULL)
    {
        *nodo=malloc(sizeof(struct s_nodo));
        (*nodo)->palabra=carga();
        (*nodo)->sig=NULL;
    }
    else
    {
        agregar(&(*nodo)->sig);
    }
}

char*carga(void)
{
    char*texto=NULL;
    int i=0;
    char letra;
    printf("\nIngrese palabra: ");
    letra=getche();
    texto=malloc(sizeof(char));
    if(texto==NULL)
    {
        printf("\nError en memoria");
        return texto;
    }
    while(letra!='\r')
    {
        *(texto+i)=letra;
        texto=realloc(texto,(i+i)*sizeof(char));
        i++;
        letra=getche();
    }
    *(texto+i)='\0';
    return texto;
}

void filtrar_palabras(t_nodo nodo,t_nodo*nodo1,int longitud)
{
    if(*(nodo1)=NULL)
    {
        if((strlen(nodo->palabra))>=longitud)
        {
            (*nodo1)->palabra=nodo->palabra;
            (*nodo1)->sig=NULL;
            nodo=nodo->sig;
        }
    }
    else
    {
        filtrar_palabras(nodo,&(*nodo1)->sig,longitud);
    }
}
void imprimir(t_nodo nodo)
{

    while(nodo!=NULL)
    {
        printf(" %s - ",nodo->palabra);
        nodo=nodo->sig;
    }



}
#64
Cita de: AlbertoBSD en 25 Septiembre 2016, 21:58 PM
Puedes usar funciones como strtok o strstr?

Saludos

Hola

Disculpa la demora. Ya lo hice y me salio pero tengo una duda que quizas lo sabes.

Este es el codigo finalizado. Basicamente saque el documento con el fprintf y para el nombre y el pais use dos while, cada parte  la guardaba en un arreglo y sacaba cada caracter con fgetc.
El problema es que supongamos que tengo esta linea en el archivo txt

37481881,pablo,argentina.

Cuando debuggeo el programa, cuando llega a la letra "o" de pablo, en vez de pasar a la coma como el proximo caracter, aparece que en la variable letra se guarda un "\r" que no se de donde viene y me obliga a hacer un if en cada while para evitar que tome el \r.
Me fije el archivo y obviamente no tiene un \r en ese lugar. Asi que no se porque me pasa eso.

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

int main()
{
    FILE*arch;
    int doc;
    int i=0;
    int j=0;
    char nombre[50];
    char pais[50];
    char letra;
    arch=fopen("C:\\Users\\Pablo-PC\\Desktop\\personas.txt","r");
    if (arch==NULL)
    {
        printf("Error.");
    }

    printf("Documento\tNombre\t\tPais\n");
    fscanf(arch,"%d,",&doc);
    while(!feof(arch) && j<4)
    {
     letra=fgetc(arch);   ///Da la primera letra P
     while(letra!=',' && i<50)
     {
         if (letra!='\r')
         {
          nombre[i]=letra;
         i++;
         }

         letra=fgetc(arch);
     }
     nombre[i]='\0';
     i=0;

     letra=fgetc(arch);
     while(letra!='\n')
     {
         if (letra!='\r')
         {
           pais[i]=letra;
            i++;
         }

         letra=fgetc(arch);
     }
     pais[i]='\0';
     i=0;
     j++;
     printf("%d\t%s\t%s\n",doc,nombre,pais);
    fscanf(arch,"%d,",&doc);
    }

    fclose(arch);

    return 0;
}
#65
Hola

Tengo un problema con un ejercicio de informatica. Me resulta imposible.
Lo que tengo que hacer es leer de un archivo txt que tengo en mi computadora que tiene el siguiente formato

37785443,agustin,francia
377685532,Pablo Rodriguez,Nicaragua

Osea el formato viene siendo DNI,Nombre,Pais. Esos datos guardados en un txt, cada dato separado con una coma.

Lo que tengo que hacer es agarrar ese archivo y mostrarlo por pantalla.
Hasta ahora hice lo siguiente

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

int main()
{
    FILE*arch;
    arch=fopen("C:\\Users\\PC\\Desktop\\personas2.txt","r");
    int i=0,j=0,documento=0;
    char aux,l;
    char nombre[50]={0};
    char pais[50]={0};

    while (!feof(arch))
    {

        fscanf(arch,"%d",&documento);
        fgetc(arch);
        aux=fgetc(arch);
        l=aux;
        while (l!=',' && l!='\n' && i<50)
        {

              nombre[i]=l;


           aux=fgetc(arch);
           l=aux;
           i++;
        }
        nombre[i]='\0';
        i=0;
        aux=fgetc(arch);
        l=aux;

        while (l!=',' && l!='\n' && i<50)
        {

             pais[i]=l;


             aux=fgetc(arch);
             l=aux;
             i++;
        }
        pais[i]='\0';
        i=0;
        printf("%d\t%s\t%s\n",documento,nombre,pais);
    }
    fclose(arch);




    return 0;
}


El problema es que siempre me queda mal, o no me imprime un nombre, o imprime mal el país. Trato con varios valores y siempre la pifia
Lo que trato de hacer es que primero tome el documento y luego vaya tomando letra por letra hasta una coma y ahi poner \0.
Desde ayer que estoy con esto y no lo puedo sacar bien
#66
Hola

Tengo que crear una estructura con 4 variables int , cargar en esas variables 4 valores, mostrarlos por pantalla, y luego crear una funcion que modifique la posicion de  memoria de las variables de la estructura de manera que el numero mas bajo ingresado quede en la variable int "a".

Hasta ahora hice lo siguiente

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int a, b, c, d;
}
t_cuatro;

void MODIFICAR(t_cuatro *pa,t_cuatro *pb,t_cuatro *pc,t_cuatro *pd);
int main()
{
    t_cuatro datos;
    printf ("Ingrese 4 numeros: ");
    scanf("%d%d%d%d",&datos.a,&datos.b,&datos.c,&datos.d);
    printf("\nEl numero %d es %p\nEl numero %d es %p\nEl numero %d es %p\nEl numero %d es %p",datos.a,&datos.a,datos.b,&datos.b,datos.c,&datos.c,datos.d,&datos.d);
    MODIFICAR(&datos.a,&datos.b,&datos.c,&datos.d);
    printf("\n");
    printf("\nEl numero %d es %p\nEl numero %d es %p\nEl numero %d es %p\nEl numero %d es %p",datos.a,&datos.a,datos.b,&datos.b,datos.c,&datos.c,datos.d,&datos.d);

    return 0;
}

void MODIFICAR(t_cuatro *pa, t_cuatro *pb, t_cuatro *pc, t_cuatro *pd)
{
    t_cuatro aux;


    if(((*pb)< (*pc) ) && ((*pb)< (*pd)) && ((*pb) < (*pa)))
    {
        aux.a=(*pa);
        *pa=*pb;
        *pb=aux.a;
    }

    if((*pc)< (*pa) && (*pc)< (*pd) && (*pc) < (*pb))
    {
        aux.a=*pa;
        *pa=*pc;
        *pc=aux.a;
    }
       if((*pd)< (*pa) && (*pd)< (*pc) && (*pd) < (*pb))
    {
        aux.a=*pa;
        *pa=*pd;
        *pd=aux.a;
    }







}


El tema es que en la funcion "MODIFICAR" me marca muchisimos errores y no se en que estoy fallando.
#67
Hola

Estoy haciendo un ejercicio de punteros. El ejercicio consta en el que tengamos un struct con el numero de una carta, su valor y el tipo de carta (espada,copa,oro,basto,etc). Lo que tengo que hacer es cargar 3 variables de este tipo y con punteros, ordenarlas de manera que si una carta es de mayor valor, tiene que mostrarse primero y el espacio de memoria debe ser intercambiado por la carta que tiene un valor menor. No se si me explico.

En el struct va ordenado  ( numero de la carta (Ejemplo 1), valor de la carta (Si es un ancho de espadas va un 10 por ejemplo), y el palo de la carta (e = espada, c= copa, o = oro , b = basto)
Hasta ahora hice lo siguiente

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int numero;
int valor;
char palo;
}
t_carta;

void INTERCAMBIO(t_carta *,t_carta *  ,t_carta * );
int main()
{
    t_carta c1,c2,c3;
    c1.numero=3;
    c1.palo='c';            ///Cargo las 3 Cartas
    c1.valor=6;
    c2.numero=1;
    c2.valor=10;
    c2.palo='e';
    c3.numero=3;
    c3.valor=6;
    c3.palo='c';

    printf ("Cartas Sin Ordenar\n");
    printf ("%d - %d - %c",c1.numero,c1.valor,c1.palo);
    printf ("%d - %d - %c",c2.numero,c2.valor,c2.palo);  ///Imprimo las 3 CARTAS SIN ORDENARLAS
    printf ("%d - %d - %c\n",c3.numero,c3.valor,c3.palo);

    INTERCAMBIO(&c1,&c2,&c3);   /// Le paso la direccion de memoria de las 3 cartas a la funcion!

    printf ("Ordenado:\n");
    printf ("%d - %d - %c",c1.numero,c1.valor,c1.palo);
    printf ("%d - %d - %c",c2.numero,c2.valor,c2.palo);
    printf ("%d - %d - %c\n",c3.numero,c3.valor,c3.palo);

    return 0;
}
void INTERCAMBIO(t_carta *pa,t_carta *pb  ,t_carta *pc)   ///Y ACA SALE TODO ERROR!!! T_T
{
    t_carta aux;

    if ((*pa->valor)<(*pb->valor))
    {
        aux=*pb.valor;
        *pb.valor=*pa.valor;
        *pa.valor=aux;
    }
    if (*pb.valor<*pc.valor)
    {
        aux=*pc.valor;
        *pc.valor=*pb.valor;
        *pb.valor=aux;
    }
    if (*pa.valor<*pc.valor)
    {
        aux=*pc.valor;
        *pc.valor=*pa.valor;
        *pa.valor=aux;
    }





}
#68
Hola

Tengo que hacer un ejercicio en el cual tengo que ingresar los valores de 3 cartas del juego de mesa "Truco", para eso me dan un struct predefinido y a partir de ahi tengo que hacer la carga. Luego con punteros, tengo que modificar todas las variables para que queden ordenadas.

La cuestion es que todavia no llegue a la parte de punteros y me quede solo en la parte de carga porque no me funciona.
Lo que hace la carga es obtener el numero de la carta, el valor y el palo.
Si encuentran algun error se los agradeceria.

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

typedef struct
{
int numero,valor;
char palo;
}
t_carta;


void CARGA(t_carta carta);

int main()
{
    t_carta carta1,carta2,carta3;
    CARGA(carta1);
    printf ("\nEl numero es %d  -  El Valor es %d  -  El Palo es %c",(carta1.numero),(carta1.valor),(carta1.palo));


    return 0;
}
void CARGA(t_carta carta)
{
    printf ("Ingrese el numero de la carta: \n");
    scanf("%d",&carta.numero);
    printf ("\nIngrese el palo:  E = ESPADA  || O = ORO || C = COPA || B = BASTO \n");
    carta.palo=getche();
    printf("\nIngrese el valor de la carta: \n 1 de espada = 10\n1 de Basto = 9\n7 Espada = 8\n7 Oro = 7\n3 = 6\n2=5\n1=4\nFiguras=3\n7 Otro = 2\nLo Demas=1\n");
    scanf("%d",&carta.valor);
}



#69
Hola

Tengo que hacer un programa en el cual el usuario ingrese el documento, el nombre, y la nacionalidad. Como es una practica de structs, decidi poner las variables en un nuevo tipo de dato. Lo que tengo que hacer es crear un archivo de texto .txt y guardar todo el contenido en ese archivo.
Lo vengo haciendo pero quizas no estoy entendiendo bien del todo la funcion fprintf y al momento de ejecutar el codigo no guarda en el txt.

#include <stdio.h>
#include <stdlib.h>
#define N 5
struct s_datos
{
    int doc;
    char nombre[50];
    char pais[70];
};
typedef struct s_datos t_dato;


int main()
{
    FILE*arch=NULL;
    int i=0;
    char letraa,letrab;
    t_dato persona[N];
    arch=fopen("C:\\Users\\PC\\Desktop\\datos.txt","w");
    if(arch==NULL)
        return 0;
    for(i=0;i<N;i++)
    {
        printf ("Ingrese el numero de documento: ");
        scanf("%d",&(persona[i].doc));
        letraa=getchar();
        printf ("Ingrese el nombre: \n");
        gets(persona[i].nombre);
        printf ("Ingrese nacionalidad: \n");
        gets(persona[i].pais);
        letrab=getchar();
        fprintf(arch,"%d,%s,%s\n",persona[i].doc,persona[i].nombre,persona[i].pais);
        printf ("Llegue");
    }

fclose(arch);
    return 0;
}
#70
Hola

Gracias a todos, el problema era el archivo csv que lo habia hecho en celdas separadas en excel, al final iba cada punto en una unica celda separada por comas.