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ú

Temas - palacio29

#1
Buenas Noches

Tengo un problema. Estoy copiando un código de un login form. El problema de este código es que asigna para todos los elementos button y los inputs un estilo particular. El problema es que tengo otros botones en mi css y que no quiero que me los cambie.
He intentado varias formas como poner una clase a los botones y los inputs nuevos, pero de alguna manera no me esta funcionando..
En definitiva el código que asigna a todo la misma clase es el siguiente.

Código (css) [Seleccionar]
/* Full-width input fields */
input[type=text], input[type=password] {
  width: 100%;
  padding: 12px 20px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  box-sizing: border-box;
}

/* Set a style for all buttons */
button {
  background-color: #4CAF50;
  color: white;
  padding: 14px 20px;
  border: none;
  cursor: pointer;
  width: 100%;
}

button:hover {
  opacity: 0.8;
}


He intentado hacer lo siguiente, poner una clase a el elemento button

Código (css) [Seleccionar]
<button class="botoncito" onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Login</button>

y luego en el css poner

Código (css) [Seleccionar]
.botoncito button {
  background-color: #4CAF50;
  color: white;
  padding: 14px 20px;
  border: none;
  cursor: pointer;
  width: 100%;
}


Pero no sirve. Soy nuevo en esto, y lo que es que evite que ese estilo se propague por todo los botones e inputs de mi pagina.
#2
Buenos Dias

Tengo el siguiente problema.
Quiero leer un archivo de texto con el siguiente contenido:

Lopez,95128428,Chile
Lee,148284,China
Wondrio,95182,Brasil
Goku,591281,Japon

El primer contenido es el apellido, luego el DNI y por ultimo el pais.

Luego esto tengo que meterlo en una estructura y luego pasar cada uno de los datos de esa estructura a una lista.
Pude solucionar la mayoria de los problemas que tenia dividiendo la carga del archivo en funciones mas chicas y con eso se me hizo un poco más legible y el resultado es el esperado, pero el problema es que no se como hacer para hacer un ciclo while que me lea todas las lineas, ya que no puedo modificar el archivo y de la forma que hice la captura de datos, no encuentro forma

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

struct s_datos
{
    char*apellido;
    int dni;
    char*pais;
};
typedef struct s_datos t_dato;

struct s_nodo
{
    t_dato dato;
    struct s_nodo*sig;
};
typedef struct s_nodo*t_nodo;

char* sacoapellido(FILE*arch);
int sacodocumento(FILE*arch);
char*sacopais(FILE*arch);
void agregar(t_nodo*,t_dato);
void imprimir(t_nodo);

int main()
{
    t_nodo lista=NULL;
    t_dato aux;
    char*txt=NULL;
    char*txt2=NULL;
    int r,i=0,doc;

    FILE*arch=NULL;
    arch=fopen("personas.txt","r");
    txt=sacoapellido(arch);
    doc=sacodocumento(arch);
    txt2=sacopais(arch);

    aux.apellido=txt;
    aux.dni=doc;
    aux.pais=txt2;

    agregar(&lista,aux);
    txt=sacoapellido(arch);
    doc=sacodocumento(arch);
    txt2=sacopais(arch);
    aux.apellido=txt;
    aux.dni=doc;
    aux.pais=txt2;
    agregar(&lista,aux);
   // printf("\nLos datos son: Apellido : %s - DNI: %d  - Pais: %s",aux.apellido,aux.dni,aux.pais);
    imprimir(lista);


}
char*sacoapellido(FILE*arch)
{
    int i=0,r;
    char*aux=NULL;
    aux=malloc(sizeof(char));
    r=fgetc(arch);
    while(r!=',')
    {
        *(aux+i)=r;
        i++;
        aux=realloc(aux,(i+1)*sizeof(char));
        r=fgetc(arch);
    }
    *(aux+i)='\0';
    return aux;
}
int sacodocumento(FILE*arch)
{
    int documento;
    fscanf(arch,"%d,",&documento);
    return documento;

}
char*sacopais(FILE*arch)
{
    int i=0,r;
    char*aux=NULL;
    aux=malloc(sizeof(char));
    r=fgetc(arch);
    while(r!='\n' && r!=EOF)
    {
        *(aux+i)=r;
        i++;
        aux=realloc(aux,(i+1)*sizeof(char));
        r=fgetc(arch);
    }
    *(aux+i)='\0';
    return aux;
}
void agregar(t_nodo*nodo,t_dato dato)
{
    if(*nodo==NULL)
    {
        *nodo=(t_nodo)malloc(sizeof(struct s_nodo));
        (*nodo)->dato=dato;
        (*nodo)->sig=NULL;
    }
    else
    {
        agregar(&(*nodo)->sig,dato);
    }
}
void imprimir(t_nodo lista)
{
    while(lista!=NULL)
    {
        printf("Apellido: %s - DNI: %d - Pais: %s\n",lista->dato.apellido,lista->dato.dni,lista->dato.pais);
        lista=lista->sig;
    }
}
#3
Buenos Dias
Tengo un problema intentando pasar datos de un archivo a una lista.
El archivo tiene el siguiente formato: %s,%d,%s (Nombre,DNI,Apellido).
La cuestion es que al utilizar la función imprimir, solo me imprime el apellido del ultimo nodo de la lista, mientras que los demas valores los imprime bien
Lo raro es que en la función agregar tambíen imprimo para ver que es lo que estoy pasando a los nodos y esta todo bien, asi que no se que puede estar pasando.

#include <stdio.h>
#include <stdlib.h>
struct s_datos
{
    char*apellido;
    int dni;
    char*pais;

};
typedef struct s_datos t_dato;

struct s_nodo
{
    t_dato dato;
    struct s_nodo*sig;
};
typedef struct s_nodo*t_nodo;
void cargalista(t_nodo*);
void agregar(t_nodo*,t_dato);
void imprimir(t_nodo);
int main()
{
    t_nodo lista=NULL;
    cargalista(&lista);
    imprimir(lista);
    return 0;
}
void cargalista(t_nodo*lista)
{
    FILE*arch=NULL;
    t_dato datito;
    int i=0,r;
    char*aux;
    aux=malloc(sizeof(char));
    arch=fopen("personas.txt","r");
    r=fgetc(arch);
    while(r!=EOF)
    {
        while(r!=',')
        {
            *(aux+i)=r;
            i++;
            aux=realloc(aux,(i+1)*sizeof(char));
            r=fgetc(arch);
        }
        *(aux+i)='\0';
        datito.apellido=aux;
        char*txt2=NULL;
        txt2=malloc(sizeof(char));
        i=0;
        r=fscanf(arch,"%d,",&datito.dni);
        r=fgetc(arch);
        while(r!='\n' && r!=EOF)
        {
            *(txt2+i)=r;
            i++;
            txt2=realloc(txt2,(i+1)*sizeof(char));
            r=fgetc(arch);
        }
        *(txt2+i)='\0';
        datito.pais=txt2;
        i=0;
        r=fgetc(arch);
        printf("\nApellido: %s - DNI: %d - Pais : %s",datito.apellido,datito.dni,datito.pais);
        agregar(lista,datito);
    }

}
void agregar(t_nodo*nodo,t_dato datito)
{
    if(*nodo==NULL)
    {
        *nodo=(t_nodo)malloc(sizeof(struct s_nodo));
        (*nodo)->dato=datito;
        (*nodo)->sig=NULL;
    }
    else
    {
        agregar(&(*nodo)->sig,datito);

    }
}
void imprimir(t_nodo lista)
{
    printf("\nFuncion Imprimir\n");
    if(lista!=NULL)
    {
        printf("\nApellido: %s - DNI: %d - Pais: %s",lista->dato.apellido,lista->dato.dni,lista->dato.pais);
        imprimir(lista->sig);
    }


}
}
#4
Buenos Dias.
Queria consultar como podia hacer para eliminar todos los elementos repetidos de una lista.
En este caso lo que hice fue crear una lista que contenga a una estructura y lo que tengo que hacer es que elimine todos los nodos cuyo apellido sea "Lopez".
Lo intento hacer y elimina algunos elementos pero no todos,  el problema esta en la función eliminar pero no se como modificarla para que elimine todos y no algunos.

#include <stdio.h>
#include <stdlib.h>
struct s_datos
{
    char*nombre;
    char*apellido;
    int dni;
};
typedef struct s_datos t_dato;
struct s_nodo
{
    t_dato dato;
    struct s_nodo*sig;
};
typedef struct s_nodo*t_nodo;
void agregar(t_nodo*,t_dato);
void imprimir(t_nodo);
void eliminar(t_nodo*,char*);
t_dato cargarstruct();
char*cargatexto();
int main()
{
    t_nodo lista=NULL;
    agregar(&lista,cargarstruct());
    agregar(&lista,cargarstruct());
    agregar(&lista,cargarstruct());
    agregar(&lista,cargarstruct());
    agregar(&lista,cargarstruct());
    imprimir(lista);
    eliminar(&lista,"Lopez");
    printf("\nLista con eliminados\n");
    imprimir(lista);

    return 0;
}
t_dato cargarstruct()
{
    t_dato datito;
    ///CARGAR ESTRUCTURA
    printf("\nIngrese Nombre:\n");
    datito.nombre=cargatexto();
    printf("\nIngrese Apellido:\n");
    datito.apellido=cargatexto();
    printf("\nIngrese DNI:\n");
    scanf("%d",&datito.dni);
    return datito;
}
void agregar(t_nodo*nodo,t_dato datito)
{
    if(*nodo==NULL)
    {
        *nodo=(t_nodo)malloc (sizeof(struct s_nodo));
        (*nodo)->dato=datito;
        (*nodo)->sig=NULL;
    }
    else
    {
        agregar(&(*nodo)->sig,datito);
    }
}
void imprimir(t_nodo lista)
{
    if(lista!=NULL)
    {
        printf("\nNombre: %s - Apellido: %s - DNI: %d",lista->dato.nombre,lista->dato.apellido,lista->dato.dni);
        imprimir(lista->sig);
    }
}
void eliminar(t_nodo*nodo,char*texto)
{
    t_nodo aux=NULL;
    if(*nodo==NULL)
    {
        return;
    }
    else if((strcmp((*nodo)->dato.apellido,texto))==0)
    {
        aux=(*nodo);
        *nodo=(*nodo)->sig;
        free(aux);
        eliminar(&(*nodo)->sig,texto);
    }
    else
    {
          eliminar(&(*nodo)->sig,texto);
    }
}
char*cargatexto()
{
    char letra;
    int i=0;
    char*txt=NULL;
    txt=malloc(sizeof(char));
    letra=getche();
    while(letra!='\r')
    {
        *(txt+i)=letra;
        i++;
        txt=realloc(txt,(i+1)*sizeof(char));
        letra=getche();
    }
    *(txt+i)='\0';
    return txt;

}


Muchas gracias.
#5
Buenos Dias

Tengo que hacer un DIV creado dinamicamente, para eso pongo un createtextnode y luego uso el appendchild y sale todo bien, el tema es que estoy agregando nombres, apellidos, dni y yo necesito que haya más de un espacio de separación entre las variables que vaya a agregar.
Con BR puedo hacer el salto de linea pero si quiero agregar un &nbsp se rompe el codigo y si pongo más espacios en un string tampoco funciona, solo toma 1.
Como puedo arreglarlo?
#6
Hola.
Tengo un problema con una función en javascript.
La idea es que al apretar un botón se muestre un elemento que en el css estaba como display:none.
En el anterior tema que cree gracias a ustedes,  logre hacer esto a través de un ejemplo muy sencillo.
Pero cuando paso a mi proyecto, al apretar el botón lo que hace es apenas aparece lo que estaba oculto, es como que la pagina hace un F5 y borra todo y vuelve al estado original, es inmediato casi, pero se ve que hace eso. ¿Que puede estar causando este comportamiento?.

La función javascript es la siguiente:

Código (javascript) [Seleccionar]
<script>
function continuar()
{
alert("Hola esto funciona, osea entra en la funcion");
var div = document.getElementsByClassName("nuevaconsulta")[0];
div.style.display="block";
}
</script>


La clase nuevaconsulta tiene adentro un display: none; y es la clase que le puse al DIV que tiene que aparecer por pantalla.

#7
Hola.
Tengo un problema. Lo que necesito hacer es un boton que al darle click, haga aparecer o desaparecer un DIV o algun elemento en particular. Algo que parece simple, pero me esta dando problemas (soy nuevo en esto).
En mi proyecto no esta funcionando, asi que traje un ejemplo y si me pueden hacer el favor de decirme en que estoy fallando porque no le encuentro la vuelta.

Este es el codigo, es un HTML que consta de un titulo y quiero que modifique su estilo

Código (html4strict) [Seleccionar]
<html>
<head>
<link type="text/css" href="estilo.css" rel="stylesheet"></link>

</head>
<body>
<H1 class="titulo">Hola</H1>
<button onclick="continuar()">Borrar el titulo</button>
</body>

<script>
function continuar()
{
alert("Hola esto funciona, osea entra en la funcion");
var div = document.getElementByClass("titulo");
div.style.display="none";
}
</script>
</html>


El CSS lo unico que tiene es la clase titulo que tiene la linea: display:block;
#8
Tengo un problema con el siguiente codigo.
Basicamente.
1) Leo desde un archivo cierta información y la guardo en un arreglo de char.
2) Lo imprimo en pantalla (Hasta aca todo joya)
3) Cuando llamo a la funcion auxiliares lo que hace es abrir otro archivo y guardar esa informacion en otro arreglo de char.
4) No se porque cuando llamo a esta ultima funcion (auxiliares), al hacer un printf del contenido en la posicion 0 del primer arreglo, se borra.
Adjunto informacion de los 2 archivos al final
Espero que alguien pueda ayudarme porque no encuentro el error.

#include <stdio.h>
#include <stdlib.h>
#define F 10
#define C 50
void lectura(char arreglo[F][C]);
void imprimir(char arreglo[F][C]);
void auxiliares(char arreglo[2][C]);
int main()
{
    char arreglo[F][C];
    char aux[2][C];
    lectura(arreglo);
    printf("Imprimir:\n \n");
    imprimir(arreglo);
    printf("El valor 0 del arreglo es: %s\n",arreglo[0]);  ///Aca imprime perfecto el contenido
    auxiliares(aux);
    printf("El valor 0 del arreglo es: %s\n",arreglo[0]);  ///Aca el mismo contenido ya no lo imprime, aparece vacio
    printf("El valor 0 del arreglo es: %s",arreglo[1]);    ///Aca los demas elementos si los tiene, pero no el de la posicion 0
    return 0;
}
void lectura(char arreglo[F][C])
{
    int i=0,j=0,r;
    char letra;

    FILE*arch=NULL;
    arch=fopen("nomina.txt","r");
    letra=fgetc(arch);
    while(letra!=EOF && i<F)
    {
        while(letra!='\n' && j<C)
        {
            arreglo[i][j]=letra;
            j++;
            letra=fgetc(arch);
        }
        arreglo[i][j]='\0';
        j=0;
        i++;
        letra=fgetc(arch);
    }
    arreglo[i][0]=0;
}

void imprimir(char arreglo[F][C])
{
    int i=0;
    while(arreglo[i][0]!=0)
    {
        printf("%s\n",arreglo[i]);
        i++;
    }
}
void auxiliares(char aux[2][C])
{
    int i=0,j=0;
    char letra;
    FILE*arch=NULL;
    arch=fopen("actualizaciones.txt","r");
    letra=fgetc(arch);
    while(letra!=EOF)
    {
        while(letra!='\n' && j<C)
        {
            aux[i][j]=letra;
            j++;
            letra=fgetc(arch);
        }
        aux[i][j]='\0';
        i++;
        j=0;
        letra=fgetc(arch);
    }
    aux[i][j]='\0';
}



Archivo "nomina.txt" --->Contenido:
Juan Perez
Marta Saldiva
Juana Dorrego
Juan Perez
Susana Rodriguez
Pilar Santoro   
Juan Perez

Archivo "actualizaciones.txt" --->Contenido:
Juan Perez
Graciela Arpe
#9
Hola.

Tengo el siguiente problema, al intentar usar el strcpy me marca error, dice "Incompatible type for argument 1 of strcpy".
No subi todo el codigo, solo esta función porque mi problema esta solo ahi en el strcpy, creo que tengo algun error conceptual.

void ordenado1(t_persona datos [N])
{
    int i=0,j=0;
    t_persona aux;
    for (i=0;datos[i].documento!=0;i++)
    {
        for(j=i+1;datos[i].documento!=0;j++)
        {
            if(datos[i].documento>datos[j].documento)
            {
                strcpy(aux,datos[i]);
                strcpy(datos[i],datos[j]);
                strcpy(datos[j],aux);
            }
        }
    }
}
#10
Desarrollo Web / Ayuda con este codigo?
14 Noviembre 2019, 16:34 PM
Tengo el siguiente codigo de un formulario (creo q es html) y necesito cambiar el boton que dice "Comprar" que aparece todo gris y feo, por una imagen o un icono para que quede mas bien.
Como se puede hacer esto?.
Basicamente quiero dejarlo mas lindo.

Código (html4strict) [Seleccionar]
<FORM target=_blank action="https://www.cuentadigital.com/api.php" METHOD="get">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="100%" id="table1">
<input type="hidden" value="5029392" name="id">
<input type="hidden" value="7" name="venc">
<tr>
<td width="180">Nombre y Apellido:</td>
<td><input type="text" name="codigo"></td>
</tr>

<tr>
<td width="180">Precio:</td>
<td><input type="text" name="precio"></td>
</tr>
<tr>
<td width="180">E-Mail:</td>
<td><input type="text" name="hacia"></td>
</tr>
<tr>
<td width="180">Concepto:</td>
<td><input type="text" name="concepto"></td>
</tr>
<tr>
<td width="180">
<input type="submit" value="Comprar"></td>
<td> </td>
</tr>
</table>
</form>
#11
Tengo que hacer un programa en el cual recibo por funcion un arreglo estatico de estructura y una letra.
Luego, tengo que crear un arreglo dinamico de estructura en el cual tengo que guardar los datos del arreglo estatico en el cual el codigo que tenga sea igual al pasado por parametro.
Luego, tengo que guardarlo en orden ascendente e imprimirlo por pantalla.
El problema es que en un momento del programa, creo que el problema esta en el while que esta entre la linea 51 y 64.

#include <stdio.h>
#include <stdlib.h>
#define T 3
struct s_alumno
{
    int leg;
    char*nombre;
    unsigned char cod_car
};
typedef struct s_alumno t_alumno;
t_alumno*filtrar(t_alumno[T],char cod_car);
int main()
{
    t_alumno arreglo[T];
    t_alumno*lista=NULL;
    int i=0;
    arreglo[0].leg=3;
    arreglo[1].leg=4;
    arreglo[2].leg=5;
    arreglo[0].nombre="Claudio";
    arreglo[1].nombre="Hernan";
    arreglo[2].nombre="Pablo";
    arreglo[0].cod_car='A';
    arreglo[1].cod_car='B';
    arreglo[2].cod_car='C';

    printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",arreglo[0].leg,arreglo[0].nombre,arreglo[0].cod_car);
    printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",arreglo[1].leg,arreglo[1].nombre,arreglo[1].cod_car);
    printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",arreglo[2].leg,arreglo[2].nombre,arreglo[2].cod_car);

    lista=filtrar(arreglo,'B');

    while((lista+i)->leg!=0)
    {
        printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",(lista+i)->leg,(lista+i)->nombre,(lista+i)->cod_car);
        i++;
    }

    return 0;
}
t_alumno*filtrar(t_alumno arreglo[T],char cod_car)
{

    t_alumno*nuevo=NULL;
    t_alumno aux;
    nuevo=malloc(sizeof(struct s_alumno));
    int i=0,j=0,k=0,maximo=0;
    char codigo;


    while(i<T)
    {
        if(arreglo[i].cod_car==cod_car)
        {
            (nuevo+k)->leg=arreglo[i].leg;
            (nuevo+k)->cod_car=arreglo[i].cod_car;
            strcpy((nuevo+k)->nombre,arreglo[i].nombre);
            printf("Legajo: %d  - Nombre: %s - Codigo Carrera: %c\n",(nuevo+k)->leg,(nuevo+k)->nombre,(nuevo+k)->cod_car);
            k++;
            nuevo=realloc(nuevo,(1+k)*sizeof(struct s_alumno));
        }
        i++;
    }
    (nuevo+k)->leg=0;
    printf("El legajo en el ultimo es %d",(nuevo+k)->leg);

            /// ORDENAR///
            for(maximo=0;(nuevo+maximo)->leg!=0;maximo++);
            printf("Maximo es %d",maximo);
            for(i=1;i<maximo;i++)
            {
                for(j=0;j<maximo-1;j++)
                {
                    aux=*(nuevo+j);
                    *(nuevo+j)=*(nuevo+j+1);
                    *(nuevo+j+1)=aux;
                }
            }


            return nuevo;

}
#12
Tengo 2 arreglos de estructuras estaticos y tengo que crear un tercer arreglo de estructura de manera dinamica, que contenga los valores que no estan en ambos arreglos estaticos.
El problema me esta saliendo, el problema viene cuando quiero verificar para que no me pase ningun repetido.
Por eso cree la funcion esta que es una booleana, pero al poner esta funcion el programa se rompe.
No se en que le estoy pifiando.

#include <stdio.h>
#include <stdlib.h>
#define T 4
#define N 5
struct s_alumno
{
    int numero;
};
typedef struct s_alumno t_alumno;

t_alumno* CARGA (t_alumno arreglo1[T],t_alumno arreglo2[N]);
int esta(t_alumno*,int);

int main()
{
    int i=0;
    t_alumno*liston=NULL;
    t_alumno arreglo1[T];
    t_alumno arreglo2[N];
    arreglo1[0].numero=1;
    arreglo1[1].numero=7;
    arreglo1[2].numero=3;
    arreglo1[3].numero=5;

    arreglo2[0].numero=2;
    arreglo2[1].numero=8;
    arreglo2[2].numero=5;
    arreglo2[3].numero=9;
    arreglo2[4].numero=7;

    printf("Conjunto A : %d - %d - %d - %d\n", arreglo1[0].numero,arreglo1[1].numero,arreglo1[2].numero,arreglo1[3].numero);
    printf("Conjunto B : %d - %d - %d - %d - %d \n",arreglo2[0].numero,arreglo2[1].numero,arreglo2[2].numero,arreglo2[3].numero,arreglo2[4].numero);
    liston=CARGA(arreglo1,arreglo2);
    printf ("\nImprimimos Lista:\n");
    while((liston+i)->numero!=0)
    {
        printf(" %d -",(liston+i)->numero);

        i++;
    }


    return 0;
}
t_alumno* CARGA(t_alumno arreglo1[T],t_alumno arreglo2[N])
{
    int i=0,j=0,k=0,maximo=0,bandera=1;

    t_alumno* lista=NULL;
    lista=malloc(sizeof(struct s_alumno));

    for(i=0;i<T;i++)
    {

        for(j=0;j<N;j++)
        {
            if(arreglo1[i].numero==arreglo2[j].numero)
            {
                bandera=0;
            }
        }
        if(bandera==1)

        {
                if(!esta(lista,arreglo1[i].numero))
                {
                    (lista+k)->numero=arreglo1[i].numero;
                k++;
                lista=realloc(lista,(1+k)*sizeof(struct s_alumno));
                }



        }
        bandera=1;
    }

    /// Proceso Inverso


    for(i=0;i<N;i++)
    {
        for (j=0;j<T;j++)
        {
            if(arreglo2[i].numero==arreglo1[j].numero)
            {
                bandera=0;
            }
        }
            if(bandera==1)
            {
                (lista+k)->numero=arreglo2[i].numero;
                k++;
                lista=realloc(lista,(1+k)*sizeof(struct s_alumno));
            }
            bandera=1;
    }

    (lista+k)->numero=0;
return lista;
}

int esta (t_alumno*lista ,int numero)
{


    int k=0;
    while((lista+k)!=NULL)
    {
        if((lista+k)->numero==numero)
        {
            printf("%d - ",(lista+k)->numero);
            return 1;
        }
        k++;

    }
    return 0;
}
#13
Hola

Tengo que hacer un ejercicio en el cual tengo que ir recorriendo un arreglo dinamico de caracteres en forma recursiva para saber si es palindromo o no.
La funcion recibe el arreglo dinamico y la longitud de la palabra.
Mi problema creo que es el IF, voy printeando lo que sucede y nose porque la funcion sigue mas alla de lo que yo querria...es decir..la idea es que corte cuando la longitud sea mayor a cero, y voy viendo que llega hasta el -5 y no se porque...hice el recorrido de la funcion en  papel, y tampoco encuentro el error..es como que sigue y no se porque


#include <stdio.h>
#include <stdlib.h>
int palindromo(char*arreglo,unsigned int longitud);
int main()
{
    char*arreglo=NULL;
    int r;
    arreglo=malloc(sizeof(500));
    arreglo="ana";
    printf("%s",arreglo);
    r=palindromo(arreglo,3);
    printf("\nEl valor es %d",r);
    return 0;
}

int palindromo(char*arreglo,unsigned int longitud)
{
    printf("Longitud: %d",longitud);
    if(longitud>0)
    {
        printf("La letra del arreglo es: %c - La letra a comparar al final es: %c - La longitud es: %d \n",*(arreglo),*(arreglo+longitud-1),longitud);
        if((*arreglo)==(*(arreglo+longitud-1)))
        {

            return palindromo(arreglo+1,longitud-2);
        }
        else
        {
            return 0;
        }
    }
    else
    {
     return 1;
    }

}
#14
Tengo el siguiente ejercicio que no se que es lo que esta fallando.  :huh:
Tengo una estructura  en la cual tengo:

- Una variable int que carga el legajo de un alumno (un numero cualquiera)
- Un puntero char, en donde se va a guardar el nombre del alumno (Ejemplo Juan)
- Un unsigned char en donde se guarda el codigo de una materia. (Ejemplo CATEGORIA B).

En el main lo que hago es cargar un arreglo estatico de esta estructura.
Lo que tengo que hacer con la funcion filtrar es crear un arreglo dinamico que cree e incluya los valores del arreglo estatico que tengan la categoria B.
No se cual es el error, pensaba que era algo de memoria dinamica que estaba fallando, pero puse una memoria grande e igualmente el programa falla.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define T 3
struct s_alumno
{
    unsigned int leg;
    char*nombre;
    unsigned char cod_car;
};
typedef struct s_alumno t_alumno;
t_alumno* filtrar(t_alumno arr[T],char cod_car);
void IMPRIMIR(t_alumno*);

int main()
{
    t_alumno arr[T];
    int i=0;
    char letra;
    t_alumno* listado=NULL;
    arr[0].nombre="Fabian";
    arr[1].nombre="Pablo";
    arr[2].nombre="Manuel";
    while(i<T)
    {
        printf("\nCARGAR NUMERO LEGAJO:\n ");
        scanf("%d",&arr[i].leg);
        printf("CARGAR CODIGO CARRERA\n");
        letra=getche();
        arr[i].cod_car=letra;
        i++;
    }
    printf("\n");
    printf("El nombre cargado es %s - CODIGO DE CARRERA: %c\n",arr[0].nombre,arr[0].cod_car);
    printf("El nombre cargado es %s - CODIGO DE CARRERA: %c\n",arr[1].nombre,arr[1].cod_car);
    printf("El nombre cargado es %s - CODIGO DE CARRERA: %c\n",arr[2].nombre,arr[2].cod_car);
    listado=filtrar(arr,'B');
    IMPRIMIR(listado);

    return 0;
}


t_alumno* filtrar(t_alumno arr[T],char cod_car)
{
    int i=0,j=0,fin=0;
    t_alumno*lista=NULL;
    lista=malloc(sizeof(struct s_alumno));
    while(i<T)
    {
        if((cod_car)==arr[i].cod_car)
        {
            (lista+j)->leg=arr[i].leg;
            strcpy((lista+j)->nombre,arr[i].nombre);
            (lista+j)->cod_car=arr[i].cod_car;
            j++;
           lista=realloc(lista,(j+1)*sizeof(struct s_alumno));
        }
        i++;
    }
    (lista+j)->leg=0;
    printf("\nTERMINO EL FILTRADO\n");
    return lista;

}

void IMPRIMIR(t_alumno* listado)

{
int i=0;
printf ("\nIMPRESION DEL ARREGLO\n");
while(listado[i].leg!=0)
{
     printf("NOMBRE: %s - CODIGO DE CARREA: %c\n",(listado+i)->nombre,(listado+i)->cod_car);
     i++;
}
}
#15
Hola.
Tengo el siguiente codigo para que me de el minimo de un arreglo dinamico.
Mi consulta es, si hay alguna forma mas simple de hacerlo, ya que para usar esto, tendria que mandarle desde el main 2 veces el arreglo para que compare...


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int * minArrHeap(int *, int *);

int main()
{
    int * arrHeap, i;
    arrHeap=malloc(N*sizeof(int));
    srand(time(NULL));
    for(i=0; i<N-1; i++)
    {
        arrHeap[i]=rand()%9+1;
    }
    arrHeap[i]=0;
    printf("Arreglo al azar: \n");
    for(i=0; i<N; i++)
    {
        printf("%d ", arrHeap[i]);
    }
    printf("\n\nMinimo: %d direccion:%p \n\n", *minArrHeap(arrHeap, arrHeap),  dirMinArrHeap(arrHeap, arrHeap));

    return 0;
}

int * minArrHeap(int * ptr, int *min)
{
    if(*ptr==0)
    return min;
    if(*ptr<*min)
    minArrHeap(ptr+1, ptr);
    else
    minArrHeap(ptr+1, min);
}
#16
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_texto
{
    char*txt;
    unsigned int longitud;

};
typedef struct s_texto t_texto;

t_texto* CARGARTEXTO();
char* CARGASTRING();
void escribirarch(const char* nomArch,t_texto*);

int main()
{
escribirarch("frases_con_longitud.csv",CARGARTEXTO());


    return 0;
}
t_texto* CARGARTEXTO()
{

    t_texto kiko;
    kiko.txt=CARGASTRING();
    printf("\n%s\n",kiko.txt);
    return &kiko;
}
char*CARGASTRING()
{

    char*texto=NULL;
    char letra;
    int i=0;
    texto=malloc(sizeof(char));
    letra=getche();
    while(letra!='\r')
    {
        *(texto+i)=letra;
        i++;
        texto=realloc(texto,((i+1)*sizeof(char)));
        letra=getche();
    }
    *(texto+i)='\0';
    return texto;
}

void escribirarch(const char* nomArch,t_texto* kiko)
{

    FILE*arch=NULL;
    printf("Llegue");
    printf("%s",kiko.txt);
    arch=fopen(nomArch,"w");
    fprintf(arch,"%d",5);
    printf("%d",longitud(kiko));
    fclose(arch);
}


Lo que tengo que hacer es cargar la estructura con un texto y la longitud de un texto y eso mandarlo a un archivo de texto
Dentro de la estructura hay un puntero.
Mi problema es en la linea 55. No se como hacer que imprima la frase.
Al intentar mandarlo por archivo, no manda nada...justamente porque hay intentar llamar a la frase para que se ponga ahi, me da error.
#17
Tengo una consulta con el siguiente codigo:

Entiendo que cuando pongo char*Str=NULL lo que estoy declarando es un puntero cuyo contenido es NULL.
Lo que no entiendo es cuando str= CARGA().
No entiendo muy bien es  como funciona la siguiente linea "str=CARGA();".
Que es lo que hace esta funcion?.
Entiendo que hace que str= direccion de memoria del otro puntero.
Pero si estoy haciendo eso...no deberia poner *str=CARGA() para que el contenido de mi puntero str sea la direccion de esa memoria?.
Osea que es lo que se guarda en el contenido de STR? y porque con un simple %s sale la frase cuando deberia poner un asterisco?..

#include <stdio.h>
#include <stdlib.h>
char*CARGA();
void CARGA2(char**);
int main()
{
    char *str=NULL;
    str=CARGA();
    CARGA2(&str);
    printf("\n%s",str);
    return 0;
}
char*CARGA()
{
    char*texto=NULL;
    int i=0;
    char letra;
    texto=malloc(sizeof(char));
    letra=getche();
    while(letra!='\r')
    {

        *(texto+i)=letra;
        i++;
        texto=realloc(texto,(i+1)*sizeof(char));
        letra=getche();
    }
    *(texto+i)='\0';
    return texto;
}

#18
[LENGUAJE C] Tengo la siguiente sentencia y nose como interpretarla.

Char * Arreglo = NULL;

Que significa esto?.
Que el contenido de este arreglo es vacio  y como es la direccion de memoria de esa variable?.Porque hago un %p y salen todos ceros...
#19
Tengo el siguiente codigo

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    int n,o,p;
    char p1[26],p2[50];
    double a,b,c;

}
t_varios;
void CARGA(t_varios* a,t_varios* b);
int main()
{
    t_varios a,b;
    CARGA(&a,&b);

    return 0;
}

void CARGA(t_varios* a,t_varios* b)
{
    scanf("%d%d%d",a.n,a.p,a.o);
   
}


Basicamente lo que hago es declarar dos variables de mi estructura en el main, pasarlas como puntero a la funcion y desde esa funcion quiero cargar esas estructuras.
El problema es que no se como usar el scanf...si estoy recibiendo punteros, no seria necesario que ponga el & en el scanf pero igual me da error, pongo entonces el & y da error...ya por poner algo puse * tambien y tampoco...nose como cargarla.
Alguna ayudita?
#20
Tengo el siguiente codigo

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

int main()
{

char d='7';


printf("%d%d",(((d-'0')*2)/10),(((d-'0')*2)%10));

    return 0;
}



Lo que no entiendo es porque es posible realizar operaciones matematicas si es que el 7 ingresado no es un numero, si no que es el caracter 7 y esta ingresado como char...Creo que me falta algo de concepto para entenderlo.
#21
Hola

Tengo este codigo que tengo que analizar:


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

int main()
{
int a;
scanf("%d",&a);
if(a=0)
{
    printf("Verdadero");
}
else
{
    printf("Falso");
}


    return 0;
}


No entiendo que significa que el if tenga un solo igual en vez de 2.
Osea se que evidentemente no es una comparacion pero nose que hace para que siempre el programa me tome falso.
#22
Hola

Estoy analizando el siguiente codigo

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

int main()
{
    int a=5,b=6,c=8;

    if((a || (b&&c)) == ((a&&b) || (a&&c)))
    {
        printf("Verdadero");
    }
    else
    {
        printf("Falso");
    }


    return 0;
}


Basicamente lo que no entiendo es que si tengo dos variables

A=5 y B=6

Y hago A&&B ...El resultado siempre da 1.
y si hago A || b ....El resultado siempre da 1.

El mismo resultado sucede si a y b son iguales.
#23
Hola

Tengo el siguiente código

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

int main()
{
double num=123456789.56;
int x,r;
x=num;

r=x%100000/1000/7;

printf("%d",r);

    return 0;
}


La idea el ejercicio es que sepamos que operacion hay que ejecutar primero...Estuve leyendo sobre precedencia de operadores y se dice que de izquierda a derecha viene la multiplicacion, luego la division y luego el %.

El tema es que intento hacer todas las divisiones posibles ... osea 100000/1000 y luego ese resultado / 7 y luego hago el %....y me da cualquier cosa.
El resultado tiene que ser 8 pero no llego a ese resultado...algo estoy haciendo mal o nose porque operacion empezar..
#24
Hola

Tengo un ejercicio en el cual tengo que validar el ingreso de un caracter permitiendo que solo guarde letras mayusculas o el asterisco.
Lo hago y solo valida el asterisco y si pongo mayus o minus o cualquier otro caracter sigue pidiendo.
int main()
{
char car;

do
{
    printf("Ingrese un caracter: \n");
    car=getche();

}
while((car<'A' && car>'Z') || car!='*');

printf("\nLa letra ingreada es %c",car);

    return 0;
}


Basicamente es eso, en las condiciones del while la estoy pifiando y no entiendo.
#25
Tengo la siguiente expresion a la que le aplico varios negados.

!((3>x) || (x>7))

No entiendo como afecta el negado a :

- Los signos && y ||  (Osea si le aplico un negado a una expresion que tenga

(!(letra>='A' && letra<='Z'))

No se si hay algunos casos donde el negado transforma el && a un || o viceversa.

Tampoco entiendo como afecta el negado a los signos de mayor y menor.
Si los cambia o les pone mayor o igual o menor o igual.

He leido sobre leyes de demorgan pero no entiendo aun sobre en como afecta.
#26
Hola

Tengo una consulta con un problema de una guia de informatica I.

El codigo es el siguiente

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

int main()
{
unsigned char c=5;
double b=12;
int a=346,r;
r=a/b%c;
printf("%d",r);
    return 0;
}


Segun la precedencia, primero viene * , luego la / y por ultimo %.
Hice los calculos y me da 3.
El tema es que la respuesta correcta, al probarlo en el compilador es un error de compilacion que dice "invalid operand to binary % (have "double and "int").
El tema es que si yo saco el "%c" me permite compilar y ejecutar el programa con normalidad.
Ahora si yo pongo el %c da el error de compilacion pero no entiendo ya que a/b es un entero/double...basicamente no entiendo de donde sale ese error de compilacion.
#27
Hola.

Tengo un ejercicio en el cual tengo 2 arreglos y tengo que crear un tercer arreglo que contenga los dos arreglos anteriores de manera ordenada.
No puedo usar arreglos auxiliares, tampoco puedo usar burbujeo.
Lo hago y el codigo tiene logica, pero no logro que funcione correctamente.

Ejemplo:

Arreglo 1: 1,2,3,6
Arreglo 2. 4,5,8,9.
Resultado: 1,2,3,4,5,6,8,9.
Resultado Que Me Da a mi (Horrible) :  1,2,3,6


#include <stdio.h>
#include <stdlib.h>
void CARGA(int arreglo[10]);
void imprimir(int arreglo[20]);
void unir(int arreglo1[10],int arreglo2[10],int resultante[20]);
int main()
{
    int arreglo1[10]={0};
    int arreglo2[10]={0};
    int resultante[20]={0};
    printf("Ingrese arreglo 1: \n ");
    CARGA(arreglo1);
    printf("\nIngrese arreglo 2:  \n ");
    CARGA(arreglo2);

    printf("\n");
    printf("\nEl arreglo resultante es: \n");
    unir(arreglo1,arreglo2,resultante);
    imprimir(resultante);
    return 0;
}
void CARGA(int arreglo[10])
{
    int i=0;
    int numero;

    scanf("%d",&numero);
    while(numero!=0)
    {
        arreglo[i]=numero;
        i++;
        scanf("%d",&numero);
    }
    arreglo[i]=0;

}
void imprimir(int arreglo[20])
{
    int i=0;

    for(i=0;i<10;i++)
    {
        if(arreglo[i]!=0)
        {
            printf(" %d - ",arreglo[i]);
        }
    }

}

void unir(int arreglo1[10],int arreglo2[10],int resultante[20])
{
    int i=0,j=0,k=0;

    while(arreglo1[i]!=0)
    {
        while(arreglo2[j]!=0)
        {
            if(arreglo1[i]<arreglo2[j])
            {

                resultante[k]=arreglo1[i];
            }
            else
            {

                resultante[k]=arreglo2[j];
            }
            j++;
        }
        j=0;
        k++;
        i++;
    }

resultante[k]=0;



}
#28
Hola

Tengo este programa y no logro entender que es lo que hace un doble uppersand en ambas variables.
Les paso el codigo

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


int main()
{

int n1=4;
int n2=5;

if(n1&&n2)
{
    printf("Entre");
}
else
{
    printf("\nNo entre");
}


return 0;
}


Asi sea poniendo los mismos valores o distintos, siempre pone "Entre", no logro entender que significa if (var1&&var2)
#29
Hola

Tengo que hacer un ejercicio en el cual el usuario ingrese un texto, el texto se va a guardar en un arreglo de tipo char. Lo que tengo que hacer es quitar del arreglo aquellos caracteres que sean la letra "o".
Lo tengo que hacer de manera que si yo ingreso la frase "Hola Mundo"...Tiene que quedar
"Hla Mund".
Es decir, me va a quedar un arreglo mas chico..
Es importante destacar que NO PUEDO USAR ARREGLOS AUXILIARES.

Si fuera con auxiliares es muy sencillo. Lo estoy intentando hacer haciendo que cuando encuentre una letra "o",se mueva todo el arreglo una posicion hacia la izquierda, pero no logre hacerlo. Les dejo mi codigo haber si me pueden ayudar plz.

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

int main()
{
    char texto[500];
    int i=0,j=0;
    printf("Ingrese el texto:");
    gets(texto);
    printf("\nLo ingresado es %s",texto);
    while(texto[i]!='\0')
    {
        if(texto[i]=='o')
        {
                if(texto[i+1]!='\0')
                {
                    while(texto[j]!='\0')
                    {
                        if(texto[j]!='\0')
                        {
                            texto[j]=texto[j+1];
                        }
                        else
                        {
                            texto[j]='\0';
                        }
                        j++;
                    }
                    texto[j]='\0';
                }
                else
                {
                    texto[i]='\0';
                }
                j=0;


        }

            i++;

    }
    printf("\nLo ingresado modificado es\n %s",texto);
    return 0;
}


Lo pense en el momento, pero si ustedes tienen una mejor logica de hacer esto mejor, porque lo mio son muchas lineas y medio complicado.
#30
Hola

Estoy haciendo un programa en el cual tengo que agregar elementos a una lista, luego imprimir la lista y luego crear otra lista en el cual se rellene con los valores de la lista anterior de manera invertida.
El ejercicio parece simple. El problema es que yo uso la funcion pop, que tengo entendido que retorna el ultimo valor de la lista y no me esta retornando el ultimo elemento, sino que primero retorna el primero, luego el segundo y asi...
Dejo mi codigo, supongo que sera algo muy facil pero no le encuentro el defecto a las funciones que programe.

/*Ejercicio 5.6
Programar una función que invierta una lista de enteros. Considere que la lista puede estar vacía*/

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

struct s_nodo
{
    int valor;
    struct s_nodo*sig;
};
typedef struct s_nodo *t_nodo;

void agregar(t_nodo*,int);
void imprimirLista(t_nodo);
void invertirLista(t_nodo*,t_nodo*);
int pop(t_nodo*);

int main()
{
    t_nodo lista=NULL;
    t_nodo inversa=NULL;
    agregar(&lista,1);
    agregar(&lista,3);
    agregar(&lista,5);
    agregar(&lista,7);
    printf("\nLista impresa = ");
    imprimirLista(lista);
    invertirLista(&lista,&inversa);
    printf("\nLista inversa = ");
    imprimirLista(inversa);
    return 0;
}

void agregar(t_nodo* nodo,int valor)
{
    if(*nodo==NULL)
    {
        *nodo=(t_nodo)malloc(sizeof(struct s_nodo));
        if(*nodo==NULL)
            return;
        (*nodo)->valor=valor;
        (*nodo)->sig=NULL;
    }
    else
        agregar(&((*nodo)->sig),valor);
}

void imprimirLista(t_nodo lista)
{
    while(lista!=NULL)
    {
        printf(" %d  ",lista->valor);
        lista=lista->sig;
    }
}

void invertirLista(t_nodo *lista,t_nodo* inversa)
{
    int valor;
    while(*lista!=NULL)
    {
        valor=pop(lista);
        agregar(inversa,valor);
    }
}

int pop(t_nodo* nodo)
{
    t_nodo aux=*nodo;
    int valor=aux->valor;
    *nodo=aux->sig;
    free(aux);
    return valor;
}
#31
Hola


Tengo una duda con respecto al tratamiento de estructuras en pilas en C.
Si tengo las siguientes estructuras declaradas

struct s_persona
{
    char nombre[25];
    int edad;
    int fnacimiento;
};
typedef struct s_persona tPers;

struct s_nodo
{
    struct s_persona prs;
    struct s_nodo *sig;
};
typedef struct s_nodo *t_nodo;



Si yo quiero insertar en una pila elementos de tipo tPers

Cual seria la opcion correcta... Esta

void push(t_nodo* pila,tPers persona)
{
    t_nodo aux=NULL;
    aux=(t_nodo)malloc(sizeof(struct s_nodo));
    if(aux==NULL)
        return;
    aux->prs=persona;
    aux->sig=*pila;
    *pila=aux;
}



Osea asignando directamente toda la estructura o pasando cada dato de la estructura de manera individual como en el siguiente codigo

void push(t_nodo* pila,tPers persona)
{
    t_nodo aux=NULL;
    aux=(t_nodo)malloc(sizeof(struct s_nodo));
    if(aux==NULL)
        return;
    strcpy(((*pila)->prs).nombre,persona.nombre);
    aux->prs.edad=persona.edad;
    aux->prs.fnacimiento=persona.fnacimiento;
    aux->sig=*pila;
    *pila=aux;
}
#32
Hola

Tengo el siguiente ejercicio:

Desarrollar una funcion ordenarArr que reciba como parámetro un arreglo dinámico del tipo t_persona.
La función deberá ordenar el arreglo por número de categoría en forma descendente. El números de categoría
se encuentra dentro del unsigned char cat en los cuatro bit mas significativos (los de la izquierda).
El prototipo de la función que deberá utilizar es:

void ordenarArr(t_persona* arr);


Lo que hice fue lo siguiente

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

///Estructura

struct s_persona
{
    long int dni;
    unsigned char cat;
    char *nombre;
};
typedef struct s_persona t_persona;

void ordenarArr(t_persona* arr);
int categoria(unsigned char);
void imprimirArr(t_persona*);

int main()
{
    t_persona *arreglo=NULL;

    arreglo=malloc(4*sizeof(t_persona));

    (arreglo)->dni=746;
    (arreglo)->cat='j';
    (arreglo)->nombre="Marisol";

    (arreglo+1)->dni=159;
    (arreglo+1)->cat='f';
    (arreglo+1)->nombre="Juan Martin";

    (arreglo+2)->dni=691;
    (arreglo+2)->cat='z';
    (arreglo+2)->nombre="Griselda";

    (arreglo+3)->dni=489;
    (arreglo+3)->cat='e';
    (arreglo+3)->nombre="Romeo";

    imprimirArr(arreglo);

    ordenarArr(arreglo);

    imprimirArr(arreglo);

    return 0;
}

void imprimirArr(t_persona* arreglo)
{
    int i;
    printf("\nImpresion:\n");
    for(i=0;i<4;i++)
    {
        printf("\nDNI = %li",(arreglo+i)->dni);
        printf("\nCat = %c - %d",(arreglo+i)->cat,(arreglo+i)->cat);
        printf("\nNombre = %s",(arreglo+i)->nombre);
        printf("\n\n");
    }
}

///FUNCION QUE ME PIDEN


void ordenarArr(t_persona* arr)
{
    int i,j;
    t_persona aux;
    for(i=0;(arr+i)->dni!=0;i++)
    {
        for(j=i+1;(arr+j)->dni!=0;j++)
        {
            if(((((arr+i)->cat)>>4)&15)<((((arr+j)->cat)>>4)&15))
            {
                aux=*(arr+i);
                *(arr+i)=*(arr+j);
                *(arr+j)=aux;
            }
        }
    }
}



El problema es que hace cualquier cosa menos ordenar y tira error de ejecucion. Nose que hacer.
#33
Hola

Tengo una duda con respecto a bits en C.

Me piden que haga un programa en donde cada persona ingresada tenga un numero de categoria.

Es decir..

Persona 1 = Horacio
Categoria= W

El problema es que la categoria no me la dan con numeros y me piden que halle la categorai, copio textual "El numero de categoria se encuentra dentro del unsigned char en los cuatro bits mas significativos(los de la izquierda). Entonces me piden que a traves de la letra que ingresaron, que con operaciones de bits, halle la categoria.

Entonces yo hago esto

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

int main()
{
    char letra='w';
    int numero;

    numero=letra&(15<<4);

    printf("\nEl numero es %d",numero);



    return 0;
}


Osea, agarro la letra, uso una mascara de 15 y la corro cuatro lugares y me evalua en esos 4 bits si estan prendidos o no.
El resultado de "w" seria 112, seria la categoria.

El problema es que no se si esa es la categoria correcta.
Porque yo puedo hacer que esos 4 bits mas significativos ponerlos los 4 en la posicion menos significativa y aplicar la mascara de 15, y dejarlos ahi y me daria una categoria 7.

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

int main()
{
    char letra='w';
    int numero;

    numero=(letra>>4)&15;

    printf("\nEl numero es %d",numero);



    return 0;
}




Entonces esa es mi duda, cual seria la respuesta correcta?
#34
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;
    }
}

#35
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.
#36
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;
    }



}
#37
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
#38
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.
#39
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;
    }





}
#40
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);
}



#41
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;
}
#42
Hola

Tengo que hacer un programa en el cual a partir de un archivo .csv que se encuentra en mi escritorio, lo que tengo que hacer es leerlo y guardarlo en un arreglo. Este arreglo es un tipo de dato creado por mi (struct)
El tema es que cuando ejecuto el programa no sale nada, no tira error, simplemente queda la consola en negro.
En el archivo .csv estan los datos de 10 puntos (x e y).

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

struct punto
{
    int x;
    int y;

};
typedef struct punto tipoPunto;

void LECTURA (tipoPunto arreglo[10]);

int main()
{
    tipoPunto arreglo[10];
    LECTURA(arreglo);

    return 0;
}
void LECTURA (tipoPunto arreglo[10])
{
    FILE*arch;
    int i=0,j=0;
    arch=fopen("C:\\Users\\Pablo-PC\\Desktop\\puntos.csv","r");
    while (!feof(arch))
    {
        fscanf(arch,"%d,%d\n",&arreglo[i].x,&arreglo[i].y);
        i++;
    }
    fclose(arch);

        for (j=0;j<10;j++)
    {
        printf ("Punto %d = %d - %d",i,arreglo[j].x,arreglo[j].y);
    }

}
#43
Programación C/C++ / Ordenar una matriz en C?
6 Septiembre 2016, 01:06 AM
Hola

Tengo un problema con este ejercicio. Me piden ordenar una matriz de enteros, de menor a mayor usando burbujeo.
Lo que hago es realizar la carga aleatoria de la matriz, imprimirla y luego debo imprimir la matriz nuevamente pero modificada.

La cuestion es que me dan el siguiente codigo para hacer el burbujeo pero al ser bidimensional no le encuentro la logica, no puedo reconocer en este codigo de burbujeo la forma bidimensional

void ordenar(int a[], int longitud)
{
int i, j, aux;
for (i = 0; i < longitud; i++)
{
for (j = i + 1; j < longitud; j++)
{
if (a[j] < a[i])
{
aux = a[i]; a[i] =
a[j]; a[j] = aux;
}
}
}
}


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void CARGA (int arreglo[3][3]);
void IMPRIMIR(int arreglo[3][3]);
void MODIFICAR(int arreglo[3][3]);

int main()
{
    srand(time(NULL));
    int arreglo[3][3],arreglin[3];
    printf ("La matriz sin modificar es : \n");
    CARGA(arreglo);
    printf ("\n");
    IMPRIMIR(arreglo);
printf ("\n");
MODIFICAR(arreglo);



    return 0;
}
void CARGA (int arreglo[3][3])
{
    int fila=0,columna=0;

    while (fila<3)
    {
        arreglo[fila][columna]=rand()%11+1;
        columna++;
        arreglo[fila][columna]=rand()%11+1;
        columna++;
        arreglo[fila][columna]=rand()%11+1;
        columna++;
        fila++;
        columna=0;
    }
}

void IMPRIMIR(int arreglo[3][3])
{
int fila=0,columna=0;

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




}

void MODIFICAR(int arreglo[3][3])
{
    int fila=0,columna=0;
   
    for (fila=0;fila<3;fila++)
    {
        for (columna=fila+1;columna<3;columna++)
        {
           
           
           
           
        }
    }
}

#44
Hola

Tengo problemas con el siguiente ejercicio "Realizar una función que efectúe el SHIFT A DERECHA completando con 0 desde la izquierda. Aplicarla en
un programa de ejemplo. "

Se hacerlo con el shift a la izquierda pero no me sale con el shift a derecha, ni tampoco se como completar con 0 desde la izquierda, estoy re perdido con este.

Basicamente el programa tiene que

- Pedir letra
- Realizar la funcion
- Mostrar la letra en binario.

Con el de la izquierda no tengo problemas y me quedo asi

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

int main()
{
    char letra;
    int i=7;
    printf ("Ingrese una letra: \n");
    letra=getche();
    printf ("\n");
    while (i>=0)
    {
        if (letra&(1<<i))
        {
            printf ("1");
        }
        else
        {
            printf ("0");
        }

    i--;


    }




    return 0;


}


Como tendria que modificarlo para que me quede como me piden?..Porque siempre use el izquierdo.
#45
Tengo que hacer un listado de equipos de futbol con sus respectivos puntos, partidos ganados, etc. El problema es que por el momento estoy haciendo la carga y en la primera pasada del ciclo va perfecto, ahora cuando empieza nuevamente se saltea la funcion fgets...Lo intente con fgets y con gets y ninguno de los 2 cambia el resultado.


El problema esta en esta linea 29.
En este caso puedo poner el fgets como lo puse o puedo poner "gets(nombre").



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void CARGA (char nombre[5][20],int arreglo[5][8]);

int main()
{

    char nombre[5][20];
    int arreglo[5][8];
    CARGA(nombre,arreglo);



   return 0;
}





void CARGA (char nombre[5][20],int arreglo[5][8])
{
      int i=0,total=0,ganado=0,empate=0,perdido=0,favor=0,contra=0,dif=0,puntito=0;

    while (i<5)
    {
        printf ("Ingrese el nombre del equipo: ");
        fgets(nombre[i],20,stdin);
        printf ("Ingrese la cantidad de partidos jugados: ");
        scanf("%d",&total);
        printf ("Ingrese la cantidad de partidos ganados: ");
        scanf("%d",&ganado);
        printf ("Ingrese la cantidad de partidos empatados: ");
        scanf("%d",&empate);
        printf ("Ingrese la cantidad de partidos perdidos : ");
        scanf("%d",&perdido);
        printf ("Ingrese la cantidad de goles a favor:  ");
        scanf ("%d",&favor);
        printf ("Ingrese la cantidad de goles en contra:  ");
        scanf ("%d",&contra);
        dif=favor-contra;
        puntito=3*ganado+empate;

        arreglo[i][0]=puntito;
        arreglo[i][1]=total;
        arreglo[i][2]=ganado;
        arreglo[i][3]=empate;
        arreglo[i][4]=perdido;
        arreglo[i][5]=favor;
        arreglo[i][6]=contra;
        arreglo[i][7]=dif;
        i++;
    }
}


Quizas es algo muy tonto pero no es la primera vez que me pasa y se hacerlo sin usar fgets o gets pero mi intencion ya que hace muy poco descubri estas funciones, es aprovecharla y ahorrar codigo.