Mostrar Mensajes

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


Mensajes - nosferacento

Páginas: 1 ... 11 12 13 14 15 [16] 17 18 19 20 21 ... 23
301
La sentencia del lenguaje C/C++:

scanf("mes%2d", &mes);


a) Se ejecuta correctamente si se lee el dato: mes3

b) Siempre se ejecuta correctamente

c) Se ejecuta correctamente si se lee el dato: 03

d) No se ejecuta correctamente si se lee el dato: mes1234


RESPUESTA: La respuesta correcta es la a). El procedimiento scanf sirve para pedir datos al usuario y es accesible gracias al módulo de librería stdio. El dato solicitado se almacena en la variable indicada precedida del símbolo &, en este caso la variable es mes y el tipo de la variable no lo sabemos a priori. El término %2d indica que se espera un tipo entero (decimal es entero) con número de caracteres leídos o "tamaño del dato" de 2 caracteres. En este caso "cuidado": al indicar dentro del scanf mes%2d significa que la entrada de usuario esperada es mesXX donde XX representa hasta dos dígitos. scanf se suele utilizar sin texto (el texto se suele poner en un printf anterior) por lo que es fácil confundirse con esta pregunta.

En la opción a) se recibe mes3, es decir, mes y un dígito, lo que coincide con lo esperado.

La opción b) no es cierta porque si lo introducido por el usuario no corresponde a lo esperado la ejecución no es correcta.

La opción c) no es correcta porque no se recibe lo esperado.

La opción d) no es correcta porque la ejecución sí sería correcta, truncándose los dos últimos caracteres.

Pregunta  nada sencilla de responder, y además con cierta ambiguedad (porque la opción d) sería discutible). Paciencia.

Se pueden hacer pruebas con este programita:

#include <stdio.h>
#include <stdlib.h>

int main(){
  int mes;
    printf("Introduzca mes seguido de uno o dos enteros:\n");
    scanf("mes%2d", &mes);
    printf("El valor después de mes es %d", mes);
    return 0;
}




302
PREGUNTA:  Si a = true y b = false, la expresión:

!(!(a || b) && !(a))

Toma el mismo resultado que:

a) a && b

b) !(a || !b)

c) b ll (a&&b)

d) !(!a || b) || !b






RESPUESTA: la respuesta correcta es la d). Pregunta con bastante mala idea ya que es bastante liosa mezclando símbolos. Es probable que terminemos con un dolor de cabeza después de haber estado un rato dándole vueltas. Hay que tener en cuenta que el orden de precedencia de los operadores es:

1º) Operadores unarios como ! y -
2º) Operadores multiplicativos *, /, %
3º) Operadores aditivos: +, -
4º) Comparación matemática: >, >=, <, <=
5º) Comparación de igualdad: ==, !=
6º) Conjunción &&
7º) Disyunción ||

Y también que dentro de un mismo nivel, la ejecución es de izquierda a derecha.

Si a= true y b=false y evaluamos la expresión inicial tenemos:

! ( !( true || false) && !(true))

!(true) devuelve false

x && false devuelve false, luego la expresión interior !(a || b) && !(a) devuelve false. Al tener toda la expresión negada, el resultado final es true.

La opción a) plantea true && false, que devuelve false, con lo cual no puede ser solución.

La opción b) plantea !(true || !false), lo interior devuelve true y el resultado global es false con lo cual no puede ser solución.

La opción c) plantea false || ... que devolverá false.

Conclusión: la opción correcta es la d), que nos permite obtener true (aparte del dolor de cabeza)  ???

303
PREGUNTA: ¿Qué imprime la siguiente sentencia escrita en C/C++?:

printf("Descuento: %5.2f%c\n" ,12.5,'%');


a) Descuento: 12.50
b) Descuento: 12.5%
c) Descuento: 12.50%
d) Descuento: 12.5





RESPUESTA: La correcta es la c). Tener en cuenta que la expresión %5.2f y %c\n no son interpretadas como textos a mostrar debido a que están precedidas del carácter especial %. Luego lo que aparece detrás de esta expresión %5.2f tiene el siguiente significado: 5 representa el número de espacios que ocupará la salida por pantalla, .2 representa el número de decimales con que se mostrará el valor numérico; f representa "fixed point" o tipo de valor que se va a mostrar es "número real";

Lo que aparece detrás de %c\n tiene el significado: c, se va a insertar un carácter (que será el símbolo %) y \n salto de línea y retorno de carro.

Esta pregunta es desde luego un poco enrevesada, posiblemente hasta los propios profesores fallaran a la hora de responderla. No hay otra opción que conocer bien el significado de cada cosa para poder responderla.

304
PREGUNTA: En el lenguaje C± ("c más menos"), la sentencia catch:

a) Agrupa las sentencias para el tratamiento de la excepción

b) Agrupa las sentencias para la detección de la excepción

c) Devuelve el resultado de la excepción

d) Devuelve el resultado de la excepción y termina el programa




RESPUESTA: La correcta es la a). Dentro de una sentencia catch escribimos todas las instrucciones que deben ejecutarse cuando se captura una excepción, es decir, nos sirve para agrupar las sentencias para el tratamiento de la excepción.

305
Aunque quizás sea más limpio y adecuado usar preparedStatement. Sería algo así:

try {

PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES (?, ?, ?, ?, ?,  ?)");

//Preparamos aprovechando que en a, b, c, d, e, f tenemos los strings a insertar
preparedStatement.setString(1, a);
preparedStatement.setString(2, b);
preparedStatement.setString(3, c);
preparedStatement.setString(4, d);
preparedStatement.setString(5, e);
preparedStatement.setString(6, f);

preparedStatement.executeUpdate(); //Ejecutamos

} catch (SQLException e) {
     System.out.println("Error de MySQL: " + e.getMessage());
   }


Creo que esto puede ser mejor.

306
No estoy seguro porque esto habría que probarlo compilando código, pero me resulta un poco extraña esta parte del código:

String a = jTextField1.getText().toString();
       String b = jTextField2.getText().toString();
       String c = jTextField3.getText().toString();
       String d = jTextField4.getText().toString();
       String e = jTextField5.getText().toString();
       String f = jTextField6.getText().toString();
       st.executeUpdate("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES ("jTextField1.getText().toString()", "jTextField2.getText().toString()", "jTextField3.getText().toString()", "jTextField4.getText().toString()", "jTextField5.getText().toString()",  "jTextField6.getText().toString()")");   



Al método executeUpdate le probaría a pasar esto:

st.executeUpdate("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES ('"+jTextField1.getText().toString()+"', '"+jTextField2.getText().toString()+"', '"+jTextField3.getText().toString()+"', '"jTextField4.getText().toString()+"', '"+jTextField5.getText().toString()+"',  '"jTextField6.getText().toString()+"')");

Cada campo a insertar, entre apóstrofes, y cada string entre comillas; para que interprete la invocación del método bien como un string, precederlo y ponerle después el símbolo +. Puedes probar a ver si va.

307
Nota:  He revisado las preguntas con vistas al curso 2023-2024 y en principio está todo "OK". De cualquier manera si encuentras alguna errata puedes escribirme tanto públicamente en el foro como por mensaje privado.

En este post se encuentran exámenes resueltos de la asignatura "Fundamentos de programación" de la UNED (Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información). En general son interesantes pero a veces te parecerán absurdas o rebuscadas. He incluido las preguntas tipo test pero también la parte de problemas (parte de desarrollo del examen). Los exámenes constan de dos partes: una parte de preguntas tipo test y otra con un problema de programación en C/C++.

Algunas preguntas son de exámenes reales y otras son inventadas; por los comentarios tendrás pistas adicionales que te ayudarán a razonar la respuesta.

Otros post de interés para quienes busquen materiales:

Apuntes y recomendaciones para superar la asignatura "Fundamentos de Sistemas Digitales" del primer curso del Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED, que viene siendo una asignatura universitaria de introducción a la electrónica. Se pueden encontrar aquí: https://aprenderaprogramar.com/foros/index.php?topic=7066.0

Exámenes resueltos de la Asignatura "Fundamentos de sistemas digitales" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED se puede encontrar aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=6938.0

Exámenes resueltos de la Asignatura "Autómatas, gramáticas y lenguajes" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED se puede encontrar aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=638.0

Exámenes resueltos de la Asignatura "Programación orientada a objetos" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED (lenguaje Java) se puede encontrar aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=49.0

¡Gracias a todos los que envían comentarios y sugerencias!

308
PREGUNTA: Indicar si la siguiente afirmación es verdadera o falsa:

"La clase Vector de Java define un tipo de colección y un tipo de lista. "


RESPUESTA:

Es verdadera, hemos dicho que la clase vector tiene gran similitud con ArrayList, y al igual que ArrayList es una colección y un tipo de lista.

309
Aprender a programar desde cero / Re:Seguridad en aplicaciones
« en: 04 de Noviembre 2012, 22:50 »
Solo se me ocurre probar

' OR 1=='1';UPDATE usuarios SET password=111 WHERE username='seba

' OR 1=1;UPDATE usuarios SET password=111 WHERE username='seba

' OR true==true;UPDATE usuarios SET password=111 WHERE username='seba

310
Aprender a programar desde cero / Re:Resolver ecuacion Lineal en java
« en: 04 de Noviembre 2012, 19:50 »
¿Pero el código que te he puesto no resuelve el comportamiento de tu clase?

311
Aprender a programar desde cero / Re:Seguridad en aplicaciones
« en: 04 de Noviembre 2012, 19:49 »
Aparentemente la línea donde tienes la vulnerabilidad es esta:

$sql="select * from usuarios where username='$_POST[nombre]'and estado='activo'";

Fíjate que en la consulta que realizas no aparece el password, sino el username y el estado.

Lo primero que tendrás que probar es que te puedas logar con un usuario y contraseña válido, si esto no es posible será porque exista algún fallo en el código, no esté creada la base de datos o cualquier problema similar.

Si es posible logarte con un usuario y password válido, ahora se trataría de lograr que esa consulta sql se ejecute añadiéndole el código de inyección.

Para ello habría que probar a escribir en formulario de acceso en vez de un nombre de usuario algo como:

'unacualquiera' OR ''=';
'unacualquiera’  OR username LIKE '%';
'unacualquiera’  OR username LIKE '%' OR username LIKE '%';

El objetivo sería que se llegara a ejecutar algo como esto:

$sql="select * from usuarios where username='unacualquiera’  OR username LIKE '%' OR username LIKE '%' and estado='activo'";

Tienes que probar con distintas sintaxis.

Una vez logres entrar, establecer la medida para evitar el ataque. Para ello puedes usar condicionales if, o bien funciones propias de sql que sirven para limpiar cadenas de caracteres especiales (con lo que en teoría se evitaría la inyección) como mysql_real_escape_string o mysqli::escape_string, 

312
Aprender a programar desde cero / Re:Seguridad en aplicaciones
« en: 04 de Noviembre 2012, 00:05 »
Esto puede tener su complejidad. Para empezar veamos la línea:

$sql = "SELECT * FROM usuarios WHERE username='$user' AND password='$pass' ";

El comportamiento esperado sería que en user y password tengamos un usuario y contraseña normal, como "juan" y "alegria2012" . Al ejecutar la consulta tendríamos:

$sql = "SELECT * FROM usuarios WHERE username='juan' AND password='alegria2012' ";

Un ataque podría venir si se introduce como contraseña:

unacualquiera’  OR PASSWORD LIKE '%

El código de color es la inyección SQL a través de la cual el hacker o quien sea está intentando acceder maliciosamente. Lo que la query quedaría así:

$sql = "SELECT * FROM usuarios WHERE username='juan' AND password='unacualquiera’  OR PASSWORD LIKE '%
 
En este caso trata de entrar sin hacer más daño, pero podría escribir:

unacualquiera; DROP TABLE usuarios

Lo cual sería un intento por borrar la tabla de usuarios de la base de datos.

Una primera validación podría consistir en un condicional que busque caracteres como comas, puntos y comas, signo igual, paréntesis, palabras claves SQL como LIKE, TABLE, DROP, %, etc. y en caso de ser detectado no ejecutar el query.

313
Aprender a programar desde cero / Re:Resolver ecuacion Lineal en java
« en: 03 de Noviembre 2012, 23:31 »
Hola Eva, una ecuación lineal del tipo f(x) = m*x + b es lo que entiendo yo.

¿Qué ocurre? Que la interfaz será quien defina los métodos a implementar, ya que según indicas la clase debe implementar la interfaz y la interfaz te especifica el contrato que debe de cumplir la clase. Por eso creo que deberías poner aquí el contenido de esa interface para que podamos responder algo.

Suponiendo que debemos seguir el código que has puesto tú, lo plantearía así:

public class EcuacionLineal implements Ecuacion {
//Representa una ecuacion lineal del tipo f(x) = m * x + b
private int m; //Representa el valor de la pendiente en la ecuacion
private int b; //Representa el valor de b corte con eje de ordenadas de la recta

                       public EcuacionLineal(Double m, Double b) {

                                   this.m = m; // Establecemos el valor del atributo
                                   this.b = b; //Establecemos el valor del atributo
}

public Double resolver(Double x) {
int resultado = 0;
resultado = m*x +b;
return resultado;
   }

Si era esto lo que había que hacer me resulta muy simple, el único problema que le podría ver es que no se tenga claro el concepto de ecuación. La ecuación viene definida por dos valores, m y b que son valores fijos. Por ejemplo una ecuación puede ser 3x + 2 y otra ser 8x - 1. La ecuación se resuelve introduciendo un valor concreto de x. Por ejemplo la primera ecuación para x = 1 se resuelve como 3+2=5, para x = 2 se resuelve como 6+2 = 8 y así sucesivamente. Se puede invocar el método para resolver la ecuación pasándole cualquier valor.

Si no era esto, pues a ver si aportas algo más de información.

314
Hay varias maneras de hacerlo, yo probaría algo así.
 
import java.net.URL;
import java.io.BufferedReader;

URL url = new URL("http://wwis.inm.es/057/c00879.htm");
BufferedReader bs = new BufferedReader(new InputStreamReader(url.openStream()));     
String txt;           
while ((txt = bs.readLine()) != null) System.out.println(txt);


En primer lugar le daría un repaso a las clases que intervienen para comprender lo que se pretende. Luego yo comprobaría que puedo meter el contenido de texto en una variable y leer el contenido. Una vez tuviera probado esto, procedería a analizar cómo puedo extraer exactamente los datos que a mí me interesan, ya que aparte de lo que a tí te interesa vendrán más cosas. La cuestión es ir probando.

315
Pues lo primero que me plantearía yo es la definición del problema con mayor exactitud. Hay muchos tipos de servidores y muchos tipos de protocolos de comunicación. Lo primero a tener claro es de dónde tienes que obtener esa información y qué requisitos necesitas para obtener esa información. Te pongo ejemplos: no es lo mismo si tienes que obtener texto contenido en una url sin necesidad de ningún protocolo ni autenticación que si tienes que utilizar sockets para conectarte al servidor o conectarte vía ftp para descargar un archivo o de otra manera. Lo primero a definir sería qué información hay que obtener, de dónde hay que obtenerla y qué requisitos hay para obtenerla. Una vez tengas esto claro ya es el momento de buscar qué clases o código java puedes necesitar.

316
¿A qué te refieres con refactorizar? Refactorizar suele aludir a reordenar el código, pero esto suele hacerse con algún fin. ¿Qué fin es el que persigues? Por ejemplo podríamos refactorizar empleando if ... en lugar de switch, pero se supone que si hacemos esto es buscando algo ¿qué buscas? Otra forma de refactorizar sería definir cuadrado, circulo y triangulo_recto como subclases de forma. Esto sería bastante lógico y adecuado a la programación orientada a objetos, ya que usaríamos herencia. Esta sería una refactorización que yo probablemente haría, pero no entiendo bien qué es lo que buscas.

Y respecto a las pruebas, a la hora de probar tienes que definir qué quieres probar. Por ejemplo, podríamos querer probar distintas cosas:

a) Que se pueden crear objetos de tipo Forma
b) Que se pueden crear objetos de tipo Forma cuyo atributo tipoForma sea 1
c) Que se pueden crear objetos de tipo Forma cuyo atributo tipoForma sea 2
d) Que se pueden crear objetos de tipo Forma cuyo atributo tipoForma sea 3
e) Que el cálculo de área para un objeto de tipo Forma cuyo atributo tipoForma es CUADRADO devuelve un valor correcto
f) Que el cálculo de área para un objeto de tipo Forma cuyo atributo tipoForma es CIRCULO devuelve un valor correcto
g) Que el cálculo de área para un objeto de tipo Forma cuyo atributo tipoForma es TRIANGULO_RECTO devuelve un valor correcto

Si vas a refactorizar lo lógico es primero refactorizar y luego plantear las pruebas.

Para plantear las pruebas, lo primero que tienes que saber es qué quieres probar.

317
El objeto1 es un objeto de una clase que he definido, la clase Multiplicador.

public class Multiplicador {
    //No declaramos campos
    public Multiplicador () {
        //Nada que declarar
    }
    public int multiplica (int a, int b) {       return a*b;   }
}

public int multiplica (int a, int b) {       return a*b;   } Es un método de la clase. Cuando creamos objetos de la clase, estos objetos tienen un método disponible denominado "multiplica" que espera dos enteros y devuelve otro entero. El entero que devuelve es el resultado de multiplicar los dos que recibe.

Entonces lo que yo trato de probar es que este método devuelve el resultado de multiplicar dos enteros, y esto lo pruebo con Junit.

En la clase de Junit no necesito hacer un import de Multiplicador porque esta clase es una clase que estoy utilizando y que tengo en el mismo package. De hecho, la clase que yo estoy probando con JUnit es la clase Multiplicador. Las clases que están situadas en un mismo sitio no necesitan ser importadas, pueden usarse directamente (siempre que tengamos acceso).

318
Te digo un posible planteamiento:

lo primero es definir la clase que queremos probar. Yo voy a definir:

public class Multiplicador {

    //No declaramos campos

    public Multiplicador () {
        //Nada que declarar
    }

    public int multiplica (int a, int b) {       return a*b;   }

}


Esta clase simplemente me permite crear un objeto con un método que devuelve el resultado de multiplicar dos números.

Ahora voy a probar con JUnit que el método devuelve el resultado correcto. Para ello creo una clase de test donde se pide al usuario que entre por teclado dos números y se comprueba que el resultado sea correcto:

import java.util.Scanner;
public class MultiplicadorTest extends junit.framework.TestCase {
    private Multiplicador objeto1;

    public void testOperacion(){
        System.out.println ("Por favor introduce el primer número");
        int entradaTeclado1 = 0;
        Scanner sc1 = new Scanner(System.in);
        entradaTeclado1 = Integer.parseInt(sc1.nextLine());
        System.out.println ("Por favor introduce el segundo número");
        int entradaTeclado2 = 0;
        Scanner sc2 = new Scanner(System.in);
        entradaTeclado2 = Integer.parseInt(sc2.nextLine());
        objeto1 = new Multiplicador();
        int resultado;
        resultado = objeto1.multiplica(entradaTeclado1, entradaTeclado2);
        assertEquals (resultado, entradaTeclado1*entradaTeclado2);
    }

}


Al ejecutar el método test JUnit me dice "OK"; si escribiéramos

assertEquals (99, entradaTeclado1*entradaTeclado2);

El resultado que obtendríamos sería junit.framework.AssertionFailedError: expected:<99> but was:<20>, es decir, en este caso no se cumple la aserción que hemos especificado.


319
Hola, yo coincido con Ogramar, no creo que tenga sentido hacer pruebas sobre una clase del api java como hashmap porque esas clases ya están más que probadas, se trataría de hacer pruebas sobre una clase codificada por nosotros. Saludos!

320
PREGUNTA: Indicar si la siguiente afirmación es verdadera o falsa:

"Los vectores u objetos de la clase Vector son bastante similares a los ArrayList. Las diferencias hay que buscarlas a nivel interno."




RESPUESTA: es verdadera. Tener en cuenta que en general la clase ArrayList es más usada y recomendada que la clase Vector precisamente por esas diferencias que presenta a nivel interno.

Páginas: 1 ... 11 12 13 14 15 [16] 17 18 19 20 21 ... 23

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".