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 - seryioo

#1
Buenos días.
Estoy liado con Haskell que me la dejé para verano en la carrera.

El ejercicio dice lo siguiente:

Consideremos la ecuación de segundo grado ax2 + bx + c = 0.
a) Define una función raíces que tome tres parámetros (correspondientes a los coeficientes a, b y c
de la ecuación) y devuelva una tupla con las dos soluciones reales de la ecuación (para calcular la
raíz cuadrada, usa la función predefinida sqrt). Recuerda que el discriminante se define como b2-
4ac y que la ecuación tiene raíces reales si el discriminante no es negativo.


Yo he hecho esto:

raices :: Float-> Float-> Float-> (Float, Float)
raices a b c | discriminante<0 = error "Raices no reales"
             | otherwise = ((-b + raiz)/denominador, (-b - raiz)/denominador)
  where
    discriminante = (b*b - 4*a*c)
raiz          = sqrt discriminante
denominador   = 2*a


Pero me tira el siguiente error:

parse error on input `='
    Perhaps you need a 'let' in a 'do' block?
    e.g. 'let x = 5' instead of 'x = 5'
   |
91 |         raiz          = sqrt discriminante
   |                       ^



La solución ya la tengo, pero quiero saber que error estoy cometiendo, ya que no es la primera vez que me aparece.

Gracias!
#2
Android / Diseño de interfaz en una app
27 Mayo 2016, 10:41 AM
Buenos días a todo.
Hace poco que he terminado un curso de desarrollo de apps Android y me he puesto a toquetear un poco con el Android Studio para hacer una app.

La app la tengo ya lista, pero me a surgido una duda. ¿Cómo me puedo currar más la interfaz? Quiero hacer que la app se vea menos amateur y la cosa es que como tengo Buttons y otros elementos "basicos" por el layout lo parece bastante.

He estado mirando por Google pero no saco nada en claro. Por ejemplo, si quiero diseñar un button o un listView más currado y no ponerlo tal y como se ve por defecto, cómo lo hago?
¿Existen herramientas para diseñar estos recursos gráficos?

Si alguien me pudiera orientar se lo agradecería. He estado buscando libros pero tampoco he visto nada relevante...
#3
Perfecto tenías razón crack,  muchas gracias por todo!
#4
Hola, gracias por contestar.

Si hago p[num].pregunta en vez de p.pregunta[num] me tira error el compilador
(error: no match for 'operator[]' in 'p[num]'|)

Igual no lo estoy haciendo bien... No me aclaro demasiado con el enunciado...  :(




Me acabo de aclarar y he visto que lo que quería estaba mal.
Pensaba que dentro del registro podía almacenar varias preguntas de la manera que comentaba, pero para eso necesito un array de registros, como bien dices.

Lo que pasa es que no puedo tocar el registro   ya que forma parte del enunciado.
#5
Programación C/C++ / Error a acceder a registro
23 Febrero 2016, 10:55 AM
Buenos días, tengo este registro:

Código (cpp) [Seleccionar]

struct TPregunta {
   string pregunta;
   int respuestaCorrecta;
   string resp1, resp2, resp3;
};


y estoy intentando pasar de un fichero al registro la información correspondiente controlada por un numero, este número controla el acceso a la pregunta 1,2,3...

Uso:
Código (cpp) [Seleccionar]

read>>p.pregunta[num]>>p.respuestaCorrecta[num]>>p.resp1[num]>>p.resp2[num]>>p.resp3[num];


Pero el compilador me da error en esta parte "p.respuestaCorrecta[num]"

Estoy accediendo bien al registro?

Gracias.



El enunciado es este, por si os resulta más sencillo:

Implementar un subprograma denominado leePregunta que reciba por parámetro el nombre
de un fichero y un número natural. Este fichero contendrá una serie de preguntas y sus posibles
respuestas en el siguiente formato (cada pregunta o respuesta ocupan una sola línea):
pregunta 1
nº respuesta correcta
respuesta 1
respuesta 2
respuesta 3
pregunta 2.
...

El subprograma también recibirá por parámetro el número de la pregunta que se quiere leer y
devolverá un parámetro de salida con los datos de la pregunta correspondiente en el fichero
almacenado en una estructura del tipo TPregunta.
#6
Perdona no te he entendido bien. ¿Creo el flujo así y despues hago esto?:


Código (cpp) [Seleccionar]

ofstream write (fichero.c_str(), ios::app);
string palabra;
fichero << palabra;



Gracias
#7
Buenas tardes, estoy haciendo un ejercicio de programación y me encuentro con el problema de que no se introducir un string al final de un fichero.

Básicamente el problema se reduce a:
Código (cpp) [Seleccionar]

ofstream write (fichero.c_str());
string palabra;

//COMO ANYADIR "PALABRA" AL FINAL DE "FICHERO"?
#8
Buenas, normalmente soy yo el que pregunto. Pero gracias a este foro he conseguido aprobar Programación I en la universidad así que te contesto cómo sería el algoritmo.

Voy a tratar de hacer un pseudocódigo:

Código (cpp) [Seleccionar]

//para recorrer la matriz empiezas en la fila cero y compruebas todas las columnas de la fila cero, se incrementa   fila, se vuelven a comprobar las columnas... Teniendo encuenta las dimensiones de la matriz

for(int f=0; f<nFilas; ++f){
 for(int c=0; c<nColumnas; ++c){
  if(matriz[f][c]==0){
     //Guardar en vector[columna] un cero e incrementar a la siguiente posicion.
  }
 }
}
//al final haces una comprobación y recorres el vector para ver la cantidad de ceros guardada y dependiendo de eso muestras lo que quieras en pantalla

#9
a ver, esta función no me está pasando el string a mayúscula
Código (cpp) [Seleccionar]
void a_mayusculas(string& str){
    for(int i; i<str.size(); ++i){
        str[i] = toupper(str[i]);
    }
}
#10
Buenas, llevo desde ayer dándole vueltas a este ejercicio en el que tengo que crear una agenda.

Os voy a dejar el código de las funciones y lo que se supone que debe hacer cada una.

Código (cpp) [Seleccionar]

//- Definiciones de funciones -----------------------------------------

void inicializar_agenda(Tagenda& ag){
    ag.numEntradas=0;
}

void a_mayusculas(string& str){
    for(int pos=0; pos<str.size(); pos++){
        if(str[pos]>='a' && str[pos]<='z'){
            str[pos]-=32;
        }
    }
}

void leer_contacto(Tentrada& ent){
    string nombre, apellido;
    long numero;
    cout<<"Introduce nombre, apellido y numero de contacto: ";
    cin>>ws;
    cin>>nombre>>apellido>>numero;

    a_mayusculas(nombre);
    a_mayusculas(apellido);

    ent.nombre=nombre;
    ent.apellido=apellido;
    ent.numero=numero;
}

void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& ok){
    if(ag.numEntradas>=DIM-1) ok=false;
    else{
        int pos=0;
        while(pos<=ag.numEntradas){
            if(ag.entradas[pos].nombre==ent.nombre && ag.entradas[pos].apellido==ent.apellido) ok=false;
            else{
                ok=true;
                ag.entradas[pos].nombre=ent.nombre;
                ag.entradas[pos].apellido=ent.apellido;
                ag.entradas[pos].numero=ent.numero;
            }//end else
            ++pos;
        }//end while

    }//end else
}

//int pos_en_agenda(string nom, string apdo, const Tagenda& ag);

void eliminar_contacto(Tagenda& ag, string nom, string apdo, bool& ok){
    a_mayusculas(nom);
    a_mayusculas(apdo);
    int pos=0;
    while(pos<=ag.numEntradas){
        if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo){
            ok=true;
            ag.entradas[pos].nombre=ag.entradas[ag.numEntradas].nombre;
            ag.entradas[pos].apellido=ag.entradas[ag.numEntradas].apellido;
            ag.entradas[pos].numero=ag.entradas[ag.numEntradas].numero;
            --ag.numEntradas;
        }else ok=false;
        ++pos;
    }
}

long numero(const Tagenda& ag, string nom, string apdo){
    long n=0;
    a_mayusculas(nom);
    a_mayusculas(apdo);
    int pos=0;
    while(pos<=ag.numEntradas){
        if(ag.entradas[pos].nombre==nom && ag.entradas[pos].apellido==apdo) n=ag.entradas[pos].numero;
        ++pos;
    }//end while
    return n;
}

void listar_agenda(const Tagenda& ag){
    int pos=0;
    while(pos<=ag.numEntradas){
         cout<<ag.entradas[pos].nombre<<" "<<ag.entradas[pos].apellido<<" "<<ag.entradas[pos].numero;
         ++pos;
    }//end while
}





ENUNCIADOS:

ara poder utilizar una agenda, primero habrá que inicializarla simplemente poniendo el nº
de entradas a 0. De esto se encargará la función siguiente

void inicializar_agenda(Tagenda& ag).
Para introducir contactos en la agenda se utilizarán las funciones

void leer_contacto(Tentrada& ent),
que se encargará de pedir y leer, de la consola, los datos de un contacto, pasar nombre y
apellido a mayúsculas, y rellenar con ellos los campos de la entrada ent que recibe como
argumento, y

void insertar_contacto(Tagenda& ag, const Tentrada& ent, bool& OK),
que pedirá los datos de un nuevo contacto para agregarlo a la agenda ag; pero si ya existe
una entrada en la agenda con el mismo nombre y apellido o la agenda está llena, no lo
agrega y devuelve false en el parámetro OK, de lo contrario agrega un nuevo registro con
los datos del contacto en la primera posición libre de la agenda y devuelve true en OK.
Recuérdese que los datos de una entrada deberán estar siempre en mayúsculas.
Para eliminar un contacto de la agenda se utilizará la función

void eliminar_contacto(Tagenda& ag, string nom, string apdo,bool& OK),
que buscará la entrada correspondiente al contacto cuyo nombre y apellido se especifican en
los argumentos y, si la encuentra, la elimina de la agenda ag y devuelve true en el
parámetro OK; pero si no lo encuentra, no modifica la agenda y devuelve false en OK. Para
eliminar la entrada bastará con copiar en su lugar del array la entrada situada en la última
posición ocupada y disminuir el número de entradas de la agenda. Se deberá tener cuidado
con las diferencias entre mayúsculas y minúsculas.
Para obtener el número de teléfono de un contacto se utilizará la función

long numero(const Tagenda& ag, string nom, string apdo),
que buscará en la agenda la entrada correspondiente al contacto cuyo nombre y apellido se
especifican en los argumentos y, si lo encuentra, lo devolverá como resultado; pero si no lo
encuentra, devuelve 0. Se deberá tener cuidado con las diferencias entre mayúsculas y
minúsculas.

Para ver en la pantalla el contenido de la agenda se utilizará la función
void listar_agenda(const Tagenda& ag);
que listará cada una de las entradas de la agenda ag en una línea de la pantalla.


He rehecho el ejercicio varias veces, cuando ejecuto el programa me dice que dejó de funcionar.