Friday, October 24, 2014

Informatica II : Recuperatorio Segundo Parcialito 8/5/2014 (Resuelto!)


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct
{
    char nombre[30];
    char apellido[30];
    int edad;
    unsigned int codigo;
} t_persona;


int main()
{
    t_persona persona[3];
    int i;
    char auxn,auxa;

    for (i=0; i<3; i++)
    {
        persona[i].codigo=0;

        printf("Ingresar nombre:");
        cargar_txt(persona[i].nombre);
        printf("\nIngresar apellido:");
        cargar_txt(persona[i].apellido);
        printf("\nIngresar edad:");
        scanf("%d", &(persona[i].edad));

        auxn=persona[i].nombre[0];
        if(es_mayuscula(auxn))
        {
            auxn=auxn^32;
        }
        persona[i].codigo=persona[i].codigo|auxn;
        persona[i].codigo=persona[i].codigo<<8;

        auxa=persona[i].apellido[0];
        if(es_mayuscula(auxa))
        {
            auxa=auxa^32;
        }
        persona[i].codigo=persona[i].codigo|auxa;
        persona[i].codigo=persona[i].codigo<<8;

        persona[i].codigo=persona[i].codigo|persona[i].edad;
    }
    for(i=0;i<3;i++)
    {
        mostrar_bin(persona[i].codigo);
        printf("\n");
    }


    return 0;
}
void cargar_txt(char txt[])
{
    char l;
    int i=0;
    do
    {
        l=getche();
        if(l!='\r')
        {
            txt[i]=l;
            i++;
        }
    }
    while ((l!='\r')&&(i<29));
    txt[i]='\0';
}
void es_mayuscula(char l)
{
    if((l>='A')&&(l<='Z'))
        return 1;
    else
        return 0;
}
void mostrar_bin (unsigned int var)
{
    int i;
    int aux;
    unsigned int mask=1;
    mask=mask<<((sizeof(unsigned int)*8)-1);
    for(i=0;i<(sizeof(unsigned int)*8);i++)
    {
        aux=var&mask;
        var=var<<1;
        if(aux!=0)
            printf("1");
        else
            printf("0");
    }
}

Wednesday, October 15, 2014

Tercer Parcialito Informática II

/*
programar una funcion:
int * datos_frase(char*)
recibe una frase y devuelve un arreglo de enteros que en cada posicion va a tener la cantidad de letras de cada palabra de la frase.
Con lo cual, si mi frace es hola mundo, va a devolver un arreglo de 2 posiciones que va a tener un 4 y un 5.
sin desperdiciar memoria.
*/


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

int * datos_frase (char * frase);
int es_letra (char l);

int main()
{
    int * palabras=datos_frase("Hola Mundo!, como estan?, yo muy muy muy muy muy bien");
    printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",palabras[0],palabras[1], palabras[2], palabras[3],palabras[4],palabras[5], palabras[6], palabras[7],palabras[8],palabras[9], palabras[10], palabras[11]);
    free(palabras);
    return 0;
}
int * datos_frase (char * frase)
{
    int a=10;
    int * palabras=(int *)malloc(sizeof(int)*a);
    if(palabras==NULL)
        printf("Falta de memoria");
    char l;
    int i=0,j=0;
    int cont=0;

    do
    {
        if(es_letra(frase[i]))
        {
            cont++;
        }
        if(!es_letra(frase[i+1])&&(es_letra (frase[i])))
        {
            palabras[j]=cont;
            j++;
            if(j>=a)
            {
                a+=10;
                palabras=(int*)realloc(palabras,sizeof(int)*a);
            }
        cont=0;
        }
        i++;
    }while(frase[i]!='\0');
    palabras=(int*)realloc(palabras, sizeof(int)*(j));
    return palabras;
}
int es_letra (char l)
{
    if((l>='a'&&l<='z')||(l>='A'&&l<='Z'))
        return 1;
    else
        return 0;
}

Ejercicios Resueltos | Practica 4 | Informática II