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;
}
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.
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.