Ejercicios C

Iniciado por /d3v/nu11, Abril 08, 2015, 08:06:46 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Aquí les dejo algunos ejercicios que he tenido que hacer para la uni.

1. Simular un sistema de autenticacion de usuarios.
Código: c

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

// Registra usuario con contraseña pwd en el fichero de
// lectura/escritura apuntado por f.
// Devuelve 1 si el usuario ya existe, y 0 en caso contrario.
int Registro(FILE* f, char* usuario, char* pwd){
    char u[50];
    char p[50];
    while(!feof(f)){
        fscanf(f,"%s",u);
        fscanf(f,"%s",p);
        if(strcmp(u,usuario) == 0)
            return 1;
    }
    fprintf(f,"%s %s\n", usuario, pwd);
    return 0;
}

// Comprueba si usuario ha sido registrado con contraseña pwd en
// el fichero de lectura apuntado por f.
// Devuelve 1 si el usuario no existe, 2 si la contraseña es
// incorrecta y 0 en caso contrario.
int Autenticacion(FILE* f, char* usuario, char* pwd){
    char u[50];
    char p[50];
    while(!feof(f)){
        fscanf(f,"%s",u);
        fscanf(f,"%s",p);
        if(strcmp(u, usuario) == 0){
            if (strcmp(p, pwd) == 0)
                return 0;
            else
                return 2;
        }
    }
    return 1;
}

void Imprime_Menu(){
    printf("Elige una opcion:\n");
    printf("1) Registro\n");
    printf("2) Autenticacion\n");
    printf("3) Salir\n");
}

// Gestiona el menu, según la opción elegida por el usuario
char Gestion_Menu(char opc){
    Imprime_Menu();
    fflush(stdin);
    opc = getchar();
    switch(opc){
        case '1':{
            FILE* f = fopen("registro.txt","r");
            char user[50];
            char pass[50];
            if (f != NULL)
                f = fopen("registro.txt","r+");
            else
                f = fopen("registro.txt","w+");
            printf("Introduce el usuario a registrar: ");
            scanf("%s",user);
            printf("Introduce la contrasenya: ");
            scanf("%s",pass);
            if (Registro(f, user, pass) == 1)
                printf("Error: usuario ya existente.\n");
            else
                printf("Usuario registrado correctamente.\n");
            if (fclose(f) != 0)
                printf("%s",strerror(errno));
            printf("------------------------------------------------\n");
            break;
        }
        case '2':{
            FILE* f = (fopen("registro.txt","r") == NULL)?NULL:fopen("registro.txt","r");
            char user[50];
            char pass[50];
            if (f != NULL){
                f = fopen("registro.txt","r+");
                printf("User: ");
                scanf("%s",user);
                printf("Password: ");
                scanf("%s",pass);
                switch(Autenticacion(f, user, pass)){
                    case 0:{
                        printf("Login correcto, entrando al sistema.\n");
                        break;
                    }
                    case 1:{
                        printf("El usuario no existe, para registrar nuevo usuario use la opcion 1.\n");
                        break;
                    }
                    case 2:{
                        printf("Contrasenya incorrecta.\n");
                        break;
                    }
                    default:{
                        printf("Error de autenticacion.\n");
                    }
                }
            }
            else
                printf("Error: %s",strerror(errno));
            if (fclose(f) != 0)
                printf("Error: %s",strerror(errno));
            printf("------------------------------------------------\n");
            break;
        }
        default:{
            if (opc != '3') printf("Por favor, introduce un numero del 1 al 3\n");
            printf("------------------------------------------------\n");
        }
    }
    return opc;
}

int main(){
    char opcion = 0;
    do{
        opcion = Gestion_Menu(opcion);
    }while(opcion != '3');
    printf("Saliendo...");
    return 0;
}


2.Torres de Hanoi
Código: c

#include <stdio.h>
#include <time.h>


int cont = 0;
int Hanoi (char origen, char destino, char auxiliar, int n){
    if (n > 0){
        ++cont;
        Hanoi(origen, auxiliar, destino, n-1);
        printf("Mueve disco de %c a %c\n", origen, destino);
        for(int i=1; i<= 1000;i++);
        Hanoi(auxiliar, destino, origen, n-1);
    }
    return cont;
}

int main(){
    FILE * f = fopen("Hanoi.txt", "w");
    int n = 10;
    for(int i=1; i<=n; i++){
        long t1 = clock();
        long Nmov = Hanoi('A','B','C',i);
        long t2 = clock();
        long t = t2-t1;
        fprintf(f,"n: %d\tt: %d\tNºmov.: %d\n",i,t,Nmov);
    }
    fclose(f);
    return 0;
}


3. Generador del triángulo de Pascal
Código: c

#include <stdio.h>
#include <windows.h>

int coeficiente(int n, int k){
    if(n==k || k==0)
        return 1;
    else
        return coeficiente(n-1,k-1)+coeficiente(n-1,k);
}

void triangulo(int N){
for(int n=0; n<=N; n++){
    printf("\t");
        for(int k=0; k<=n; k++){
            printf(" %d",coeficiente(n,k));
        }
        printf("\n");
}
}

int main(){
    int a;
    printf("+--------------------------------------------+\n");
    printf("| Programa generador del triangulo de Pascal |\n");
    printf("+--------------------------------------------+\n");
    printf("  Numero de filas a generar: ");
    scanf("%d",&a);
    printf("-----------------------------------------------\n");
    triangulo(a);
    printf("-----------------------------------------------\n");
    system("PAUSE");
return 0;
}


Piensa por ti mismo y cuestiona a la autoridad.

La verdad, me has ayudado bastante, no tenia ni idea de como hacer la practida de Entrada y Salida de datos.

Gracias tio  :)

PD: ¿Eres de la UMU? xD

De nada hombre estamos para ayudar y si, soy de la umu jejjejeje. Espero que si tu tambien lo eres no te limites a hacer un copy/paste.




Piensa por ti mismo y cuestiona a la autoridad.

Buen código me he quedado con ganas de probarlo, codeblock al menos no lo coje, puedes decirme como lo compilas?

Para compilar uso el gcc con la opcion de compilacion automatica que usa codeblocks.


Piensa por ti mismo y cuestiona a la autoridad.