Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/12/2006, 11:26
Nevhazovat
 
Fecha de Ingreso: diciembre-2006
Mensajes: 33
Antigüedad: 17 años, 4 meses
Puntos: 0
Dos programas que ya me traen loco

Hola a todos.

Estoy haciendo dos programas y por más que intento no consigo que me funcionen del todo como yo quiero. Ya tengo la mente tan enredada que no se que hacer. (Pongo sólo el primer programa en este post porques si no se va a hacer muy grande)

En el primer programa hay que introducir una clave de 4 digitos por teclado (seria importante que se viera como *). Luego el usuario debe entrar una clave para comparar con la otra y que nos vaya ayudando a conseguir la clave correcta, diciendonos cuantos digitos hemos acertado y cuantos estan en la clave pero desornadados (en el codigo se ve mejor que explicado con palabras). Yo uso dos bucles for para ir comparando cada caracter de la primera contraseña con los de la segunda. Pero no se como hacer para que una vez encontrados dos caracteres iguales me pare de contar el resto como desordenados. El código es este:

#include <stdio.h>
#include<conio.h>
#define N 4

int error (char cadena[N]) {
int i, j;
for (i=0; i<N; i++) {

//CARACTERES ERRONEOS
if ((cadena[i]!='1') && (cadena[i]!='2') && (cadena[i]!='3') &&
(cadena[i]!='4') && (cadena[i]!='5') && (cadena[i]!='6') && (cadena[i]!='7')
&& (cadena[i]!='8') && (cadena[i]!='9') && (cadena[i]!='0')) {
printf("La clave es numerica.\n");
printf("Intentalo otra vez.\n");
return 1;
}
}
return 0;
}
int desordenados_ (char propuesta[N], char clave[N]) {
int i, j, desordenados=0;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
if (clave[i]==propuesta[j] && i!=j)
desordenados++;
if (desordenados) printf("Hay %d numeros desordenados en la clave.\n", desordenados++);
//else printf("No hay numeros desordenados en la clave.\n");
return desordenados;
}

int aciertos_ (char propuesta[N], char clave[N]) {
int i, aciertos=0;
for (i=0; i<N; i++)
if (clave[i]==propuesta[i])
aciertos++;
if (aciertos) printf("Hay %d aciertos.\n", aciertos);
else printf("No hay aciertos.\n");
return aciertos;
}

int main() {
char cl[N+1], pr[N+1];
int i, aciertos, desordenados;

do {
printf("Escribe la clave que se ha de adivinar (4 digitos): ");
gets(cl);



} while (error(cl));
printf("\n\n");

while (aciertos!=4) {
do {
printf("\nEscribe tu propuesta: ");
gets(pr);
} while (error(pr));
desordenados=desordenados_(pr, cl);
aciertos=aciertos_(pr, cl);
}

if (aciertos==4) printf("\nAcertaste!\n");
return 0;
}