elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda: programa en lenguaje c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda: programa en lenguaje c  (Leído 5,247 veces)
Dayleap

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: ayuda: programa en lenguaje c
« Respuesta #10 en: 21 Abril 2016, 11:32 am »

Ya esta solucionado el problema estaba en volver a llamar a la variable dificultad en la función. Al ser una variable global y volver a llamarla dentro de la funcion , la cual esta en un bucle do while se reinicializa con el valor 100 en vez de con el que tu le has mandado.
Código:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>


//FUNCIONES CREADAS:

void impresionCARATULA();
void JugarPart( int intentos);
void Gene_Num_Aleatorios();
int NivelDificultad();
int MENU(int *dir_opcion, int control, int intentos);
int dificultad;

int main(){
int opcion, num_adivinar[4],num_jugador,  control,  intentos;
control=1;
dificultad =100;

impresionCARATULA();

do{
printf("%i\n", dificultad);
control=MENU(&opcion,   control, intentos);}while(control==1);


}

//CODIGO DE LAS FUNCIONES CREADAS:


void impresionCARATULA(){//imprimir la caratula intentar que sea lo mas corto posible.
int i;
int aste;
int linea=0;
do{
linea ++;
if(linea != 4){
for(aste=0; aste<80;aste ++){// LINEA DE ASTERISCOS
printf("*");}
printf("\n");}
else{
for(aste=0;aste<32;aste ++){printf("*");}printf(" MASTER MIND ");for(aste=0;aste<35;aste ++){printf("*");}printf("\n");//Linea mastermind
}}while(linea<7);}


int MENU(int *dir_opcion, int control, int intentos){//imprimir el menú
printf("\n1) Jugar partida \n2) Jugar partida de prueba\n3) Establecer nivel de dificultad\n4) Listar historial de partidas\n0) Salir\n\n ¿Siguiente operacion?\t");
scanf("%i", dir_opcion);


switch(*dir_opcion){
case 1:
control=1;
JugarPart( intentos);
break;

case 2:
control=1;
break;

case 3:
control=1;
dificultad=NivelDificultad();


break;
case 4:
control=1;
printf("Has selecionado Listar historial de partidas\n");
break;
case 0:
printf("Has seleccionado Salir\n");
control=0;
break;
default:
control=1;
printf("Has seleccionado una opcion no valida\n");
break;

}return control;
}
int NivelDificultad(){
  int c1=0, d;
printf("Nivel actual");
do{
printf("Elige el nuevo nivel[1..100] \t");
  scanf(" %i",  &d);
 
if(1>d || d>100){
printf("Has selecionado un numero no valido\n");c1=1;
c1=0;}
else{printf("Has establecido numero de intentos máximo como: %i \n\n", d);}
}while(c1!=0);

return d;}

void Gen_Num_Aleatorio_y_Comp(int adivinar[],int n){

int i;
    int bande;
    int j;
int cont;
srand (time(NULL));
do{
for(cont=0; cont<4; cont++){
adivinar[cont]=(rand() %10); //del 0 al 10
for(j=0;j<4;j ++){
for(i=j+1;j<3;i++){
if(adivinar[j]==adivinar[i]){
bande=1;

}
else continue;
}
}

}}while(bande!=1);
printf("correcto");}


void JugarPart( int intentos){
    printf(" dificultad = %i\n", dificultad);
printf("Has seleccionado Jugar Partida con dificultad %i \n", intentos);

do{
intentos++;
printf("2f\t", dificultad);
 }while(intentos<dificultad);
}


En línea

HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: ayuda: programa en lenguaje c
« Respuesta #11 en: 21 Abril 2016, 12:47 pm »

Si son 4 digitos, cambia esta linea:

Código
  1. array_numeros_aleatorios[i] = rand() % 9000 + 1000;
  2.  

Eso genera del 1000 al 9999


En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ayuda: programa en lenguaje c
« Respuesta #12 en: 22 Abril 2016, 00:04 am »

Lo irás viendo con el tiempo pero las funciones deben ser lo más independientes posibles. Deben pasársele los datos mínimos para realizar su trabajo.
Código:
control=MENU(&opcion,   control, intentos);}while(control==1);
por ejemplo, está mal diseñada. Le pasas una variable control para que te la saque otra vez y dentro de la función ésta sirve solo para saber si debe repetir el ciclo. Esto es mucha dependencia y se debe reestructurar.
Le pasas por referencia la 'opcion' pero la usa dentro y no debe variarla. Has gastado tiempo y recursos realizando un trabajo que podría haber hecho la función sola. Y de nuevo has creado una dependencia que se podría haber evitado.
La interfaz de las funciones siempre debe ser lo más simple posible.

Por otra parte has escrito algo sin sentido
Código:
printf("2f\t", dificultad);
Supongo que es una cadena de control para mostrar el dato dificultad. El doble error que hay en ella es que querías hacer %2f, pero resulta que dificultad en un entero, no un real. Tampoco tiene sentido terminarlo en \t, a lo mejor te referirías \n. Su código debería ser
Código:
printf("%2d\n", dificultad);

Como puedes ver la lista de errores, tanto técnicos como de lógica eran muchos y opté por reescribir el código, era más rápido que enumerarlos, de esta forma podrías comparar las dos formas de hacer y que sacaras tus conclusiones al ver las diferencias entre uno y otro.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines