Underc0de

Programación General => C / C++ => Mensaje iniciado por: /d3v/nu11 en Abril 08, 2015, 08:06:46 PM

Título: Ejercicios C
Publicado por: /d3v/nu11 en Abril 08, 2015, 08:06:46 PM
Aquí les dejo algunos ejercicios que he tenido que hacer para la uni.

1. Simular un sistema de autenticacion de usuarios.

#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

#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

#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;
}
Título: Re:Ejercicios C
Publicado por: Syro96 en Abril 10, 2015, 08:25:53 AM
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
Título: Re:Ejercicios C
Publicado por: /d3v/nu11 en Abril 10, 2015, 04:59:28 PM
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.


Título: Re:Ejercicios C
Publicado por: ñoño1 en Abril 11, 2015, 02:52:17 PM
Buen código me he quedado con ganas de probarlo, codeblock al menos no lo coje, puedes decirme como lo compilas?
Título: Re:Ejercicios C
Publicado por: /d3v/nu11 en Abril 11, 2015, 06:27:18 PM
Para compilar uso el gcc con la opcion de compilacion automatica que usa codeblocks.