Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - manri98

#1
Y eso lo haría asi?

show myShow;
myShow.name = (char *)malloc(longitudNombre*sizeof(char));
#2
Seguí investigando. Creo que declarar un array dentro del struct no es posible porque al crear una instancia el compilador necesitaría conocer el tamaño de este antes. No se estoy equivocado.
Así que sigo como antes :(
#3
Hola a todos, tengo el siguiente problema. He creado la siguiente estructura, mi intención es que tenga un booleano, un array de caracteres(name)  y uno bidimensional(episodes)
Ejemplo:
    name = {"Name of the serie"}

    episodes = {"season1Title","Season2Title", "Season3Title"}
                       {"episode1","episode1","eisode1"}
                       {"episode2","episode2","eisode2"}
                     
    isAll = true



typedef struct{
    char *name;
    char *episodes;
    bool isAll;
}show;


Los datos que almacenará se sabrán en tiempo de ejecución y quería saber si era posible reservar dinámicamente espacio de memoria. En el código los escribí como punteros para mas tarde hacer esto:

show myShow;
myShow.name = (char *)malloc(longitudNombre*sizeof(char));


¿Esto sería corecto?¿Como lo haría para el array bidimensional? Además me surge la duda de como podría recorrer el array después. Si fuese sumando uno al puntero, creo que tendría que mirar cuando el valor es el byte nulo.
#4
Ya que la duda está resuelta os dejo aquí también el código de Cows and Bulls por si a alguien le resultase de interés,quiere mejorarlo o encuentra algún fallo, que siempre los hay :silbar:
Código (python) [Seleccionar]

from random import randint

secretNumber = "0"
userNumber = "0"
tries = 7
cows = 0
bulls = 0

def generateNumber():
    secretNumber = str(randint(1, 9))
    for i in range(3):
        x = str(randint(0, 9))
        while x in secretNumber:
            x = str(randint(0, 9))
        secretNumber += x
    return secretNumber
       
def askNumber():
    userNumber = "0"
    isCorrect = False
    while len(userNumber)!=4 or not isCorrect  or userNumber[0] == "0":
        userNumber = raw_input("Type a 4 digit number between 1000 and 9999.\nDo not repeat any digit: ")
        for i in range(len(userNumber)):
            if userNumber.count(userNumber[i]) > 1:
                isCorrect = False
                break
            else:
                isCorrect = True
    return userNumber


print" _________________________"
print"< Welcome to Cows & Bulls >"
print" -------------------------"
print"        \   ^__^"
print"         \  (oo)\_______"
print"            (__)\       )\/\\"
print"                ||----w |"
print"                ||     ||\n"
secretNumber = generateNumber()


while tries>0:
    userNumber = askNumber()
    if userNumber == secretNumber:
        print"*************************************************"
        print"*Congratulations, you guessed the secret number.*"
        print"*************************************************"
        break   

    for i in range (len(secretNumber)):
        if userNumber[i] == secretNumber[i]:
            bulls +=1
        elif userNumber[i] in secretNumber:
            cows +=1

    print "FAIL: %d cows and %d bulls. You still have %d attempts\n" %(cows, bulls, tries-1)
   
    tries -=1
    bulls = 0
    cows = 0   


if tries == 0:
    print "You got out of attempts!\nThe secret number was %d" %int(secretNumber)



#5
Solucionado. La función count() me vino perfecta, gracias! :D
Dejo aquí el código funcional:
Código (python) [Seleccionar]

def askNumber():
    userNumber = "0"
    isCorrect = False
    while len(userNumber)!=4 or not isCorrect  or userNumber[0] == "0":
        userNumber = raw_input("Please type a 4 digit number between 1000 and 9999, do not repeat any digit: ")
        for i in range(len(userNumber)):
            if userNumber.count(userNumber[i]) > 1:
                isCorrect = False
                break
            else:
                isCorrect = True
    return userNumber
#6
1232 estaría mal también. No había pensado en ese caso... 
#7
Cita de: engel lex en  4 Noviembre 2016, 15:30 PM
no se que intentas hacer con

userNumber[i] == userNumber[i-1]:

pero para este tipo de problemas es más estetico un do-while

si usas break se aplicacrá dentro del ciclo donde esté....


exactamente que necesitas hacer a demás de ver que tenga 4 dígitos? (cosa que si tienes correcta, pero no comprobaste si el primer dígito es 1 y si son números)
Es cierto que no compruebo si son números, pero para este ejercicio no es necesario comprobarlo, se entiende que el usuario sólo introducirá números.
Con esto:
Código (python) [Seleccionar]
userNumber[i] == userNumber[i-1]: lo que hago es asegurarme de que dentro de userNumber no haya dos números iguales.
Además de que tenga 4 dígitos, el numero no puede empezar en "0"(lo compruebo después del for)
Código (python) [Seleccionar]
        if userNumber[0] == "0":
            isCorrect = False

Y ninguno de los dígitos debería repetirse.
Ejemplo-->
    1234 Bien
    7648 Bien
    0123 Mal
    1223 Mal
    9999 Mal
#8
Buenas tardes, tengo esta duda y os la presento para pediros ayuda.
Desde la facultad me han mandado hacer el juego de Cows and Bulls en Python.
Un requisito a implementar es que el usuario debe introducir un número de 4 dígitos entre el 1000 y el 9999, además no puede repetirse ninguno de ellos, mientras no se cumplan esas condiciones el programa pedirá que ingreses un numero nuevo. El número debo guardarse como un string.
Esto es lo que hice:
Código (python) [Seleccionar]

def askNumber():
   userNumber = "0"
   isCorrect = False
   while len(userNumber)!=4 and not isCorrect:
       userNumber = raw_input("Please type a 4 digit number between 1000 and 9999, do not repeat any digit: ")
       for i in range(1, len(userNumber)):
           if userNumber[i] == userNumber[i-1]:
               isCorrect = False
           else:
               isCorrect = True
       if userNumber[0] == "0":
           isCorrect = False
   return userNumber

El problema viene cuando por ejemplo introduzco "1223". isCorrect se vuelve False cuando compara los 2 doses pero se vuelve True al final del for. ¿Cómo podría hacer para que esto no sucediese? ¿Si introdujese un "break" entre las líneas 8 y 9 actuaría en el for o en while?
Gracias de antemano.
#9
Programación C/C++ / Re: Ayuda con el operador !=
8 Noviembre 2014, 10:57 AM
Hola,
Pues si era eso ;-) . Muchas gracias, no sabía cual era el problema y todo por no leer el código más a fondo.
Respecto a lo que comentas, si, eso es lo que quiero hacer  ;D.
Sobre posicionSatelite[12], no puedo eliminar el resto porque la función api.getMyZRState() devuelve 12 valores. Pensé en pasar los 3 primeros valores de posicionSatelite[12] a otro array y comparar este con MovimientoEsferico[3].
#10
Programación C/C++ / Ayuda con el operador !=
8 Noviembre 2014, 00:19 AM
Buenas noches.
Haciendo un proyecto de clase me he encontrado con este error:
invalid operands of types 'float' and 'float [12]' to binary 'operator!='
El error se encuentra en el bucle while que señalo en el código. Por lo que entiendo surge de intentar utilizar el operador con dos tipos distintos de variables, pero ambos son arrays :huh:
¿Alguien podría ayudarme a saber que pasa? Muchas gracias por adelantado.

void MovimientoEsferico(){
    PosicionInicialCartesianasAEsfericas();
   
    float MovimientoEsferico[3];
    MovimientoEsferico[0]=posicionInicialEsferica[0]*sinf(posicionInicialEsferica[1])*cosf(posicionInicialEsferica[2]);
    MovimientoEsferico[1]=posicionInicialEsferica[0]*sinf(posicionInicialEsferica[1])*sinf(posicionInicialEsferica[2]);
    MovimientoEsferico[2]=posicionInicialEsferica[0]*cosf(posicionInicialEsferica[1]);
   
    float diferenciaX = 0;
    float diferenciaY = 0;
    float diferenciaZ = 0;
    float resultadoDivisionX = 0;
    float resultadoDivisionY = 0;
    float resultadoDivisionZ = 0;
   
    float posicionSatelite[12];
    api.getMyZRState(posicionSatelite);

    //X
    if(MovimientoEsferico[0]>posicionFinal[0]){
        diferenciaX = MovimientoEsferico[0]-posicionFinal[0];
        resultadoDivisionX = diferenciaX/6;
        resultadoDivisionX = resultadoDivisionX*-1;
    }
    else if(MovimientoEsferico[0]<posicionFinal[0]){
        diferenciaX = posicionFinal[0]-MovimientoEsferico[0];
        resultadoDivisionX = diferenciaX/6;   
}
//Y
    if(MovimientoEsferico[1]>posicionFinal[1]){
        diferenciaY = MovimientoEsferico[1]-posicionFinal[1];
        resultadoDivisionY = diferenciaY/6;
        resultadoDivisionY = resultadoDivisionY*-1;
    }
    else if(MovimientoEsferico[1]<posicionFinal[1]){
        diferenciaY = posicionFinal[1]-MovimientoEsferico[1];
        resultadoDivisionY = diferenciaY/6;
    }
//Z
    if(MovimientoEsferico[2]>posicionFinal[2]){
        diferenciaZ = MovimientoEsferico[2]-posicionFinal[2];
        resultadoDivisionZ = diferenciaZ/6;
        resultadoDivisionZ = resultadoDivisionZ*-1;
    }
    else if(MovimientoEsferico[2]<posicionFinal[2]){
        diferenciaZ = posicionFinal[2]-MovimientoEsferico[2];
        resultadoDivisionZ = diferenciaZ/6;
    }
   
MovimientoEsferico[0] = MovimientoEsferico[0]+resultadoDivisionX;
MovimientoEsferico[1] = MovimientoEsferico[1]+resultadoDivisionY;
MovimientoEsferico[2] = MovimientoEsferico[2]+resultadoDivisionZ;
api.setPositionTarget(MovimientoEsferico);
    while ((posicionSatelite[0]!=MovimientoEsferico[0])&&(posicionSatelite[1]!=MovimientoEsferico[1])&&(posicionSatelite[2]!=MovimientoEsferico))//en este bucle while esta el error//{
api.getMyZRState(posicionSatelite);
api.setPositionTarget(MovimientoEsferico);
}