Bateria De Test Para Una Función. Ejercicios


Subject: Bateria De Test Para Una Función. Ejercicios
Hola!.

Os cuento la idea. Es una función muy simple, consiste en una función que tiene que devolver "verdadero" en
caso de que no sea un día laborable o estemos de vacaciones. En caso contrarió devolverá "falso".

Este es el texto que he podido traducir del inglés.

Citar:

El parametro "dialaborable" es verdadero si se trata de un día entre semana y el parámetro "vacaciones" es verdadero si estamos de vacaciones.
Descansamos si no es un "díalaborable" o estamos de "vacaciones". 'Devolverá verdadero si descansamos.


Esta es su tabla de la verdad y la salida de la función: (Podía haber usado librando, de permiso, descanso...)

Citar:

'Descansando(False, False) -> True
'Descansando(True, False) -> False
'Descansando(False, True) -> True
'Descansando(True, True) -> True


Creo que el principal problema radica en el array "solucióncorrecta", en su orden. Cuando compara ambos array, testusuario y solucioncorrecta.
Como tenemos dos parámetros booleanos, debemos crear una función que nos genere todos los posibles valores que pueden tomar las entradas.
He creado una batería de test para comprobar la salida.

Private solucioncorrecta As Boolean[] = [True, False, True, True]
Private testusuario As New Boolean[]

Public Sub Main()

CrearTest()
ComprobarTest()

End

Private Function descanso(dialaborable As Boolean, vacaciones As Boolean) As Boolean

If Not dialaborable Or vacaciones Then
Return True
Else
Return False
Endif

End

Private Sub CrearTest()

Dim bboleanos As Boolean[] = [False, True]
Dim x, y As Boolean

For Each x In bboleanos
For Each y In bboleanos
'Con esta forma de poner los parametros,el resultado sale invertido
'testusuario.Add(descanso(x, y))
'De esta forma no
testusuario.Add(descanso(y, x))
Next
Next
'Stop

End

Public Sub ComprobarTest()

Dim x As Integer

For x = 0 To solucioncorrecta.Max
If testusuario[x] = solucioncorrecta[x] Then
Print "OK!"
Else
Print "Error!"
Endif
Next

End


Lo importante del ejercicio es comprobar el correcto funcionamiento de la función.
¿ Qué me podéis decir del orden de la solución en el array y el testeo de la misma ?.
Podría comparar con el array solución de derecha a izquierda y al revés. Hacer dos veces lo mismo.

Os adjunto el código implementado para Gambas.

Siento no haber puesto descansando, tome la traducción muy literalmente.

Como ultimo dato, es un ejercicio perteneciente a:

CodingBat

Saludos

Last edited by Shell on Sunday, 13 September 2015, 00:19; edited 1 time in total

ejemplo1_funcion_durmiendo.tar.gz
Description:  
Download
Filename: ejemplo1_funcion_durmiendo.tar.gz
Filesize: 5.13 KB
Downloaded: 70 Time(s)
ejemplo1_funcion_durmiendo.tar.gz
Description:  
Download
Filename: ejemplo1_funcion_durmiendo.tar.gz
Filesize: 5.13 KB
Downloaded: 70 Time(s)
ejemplo1_funcion_durmiendo.tar.gz
Description:  
Download
Filename: ejemplo1_funcion_durmiendo.tar.gz
Filesize: 5.13 KB
Downloaded: 70 Time(s)

Subject: Re: Bateria De Test Para Una Función. Ejercicios
Fijaros como se crea una tabla de la verdad con tres variables.
Lo hacemos mediante bucles anidados. Lo curioso del tema es que lo hace al revés de como la aprendí en la escuela.
Por cada entrada/variable necesitamos un bucle anidado.

Public Sub Main()

Dim bbooleanos As Boolean[] = [False, True]
Dim x, y, z As Boolean

For Each x In bbooleanos
For Each y In bbooleanos
For Each z In bbooleanos
Print x, "\t", y, "\t", z
Next
Next
Next

End


Salida:
Citar:

False False False
False False True
False True False
False True True
True False False
True False True
True True False
True True True


Bien. Creo que para aplicar esto en distintos ejercicios que necesiten dos parámetros booleanos o más,
podríamos crear una clase de la tabla de la verdad. No he probado a crearla aun.

P.d Parece como si los cambios en el editor de gambas estuvieran un poco verde.
Hay momentos en que la linea no tiene color, se queda completamente en negra y borrando o tocando un poco
la linea, toma de nuevo color, las declaraciones , los comandos, etc.

Eso me ocurre con la versión beta.

Saludos

Subject: Re: Bateria De Test Para Una Función. Ejercicios
Buenas,
Con las clases no te puedo ayudar, no he llegado todavía a entender lo de los objetos.

Con la función que genera tablas de verdad, sí. Te paso una función que te permite crear tablas de cualquier tamaño (en realidad está pensada para generar cadenas siguiendo un alfabeto):
Public Function TablaDeVerdad(Alfabeto As String, Actual As String) As String

Dim Caracter As String
Dim Primero, Ultimo As String
Dim Posicion As Integer

Dim Resultado As String

Primero = Left(Alfabeto, 1) 'Primer caracter del alfabeto
Ultimo = Right(Alfabeto, 1) 'Ultimo caracter del alfabeto

Caracter = Right(Actual, 1) 'Empezamos al final de la cadena

If Caracter = Ultimo Then
Posicion = Len(Actual) 'Empezamos al final de la cadena
While Posicion And Caracter = Ultimo
Dec Posicion
Caracter = Mid(Actual, Posicion, 1)
Wend
Caracter = Mid(Alfabeto, InStr(Alfabeto, Caracter) + 1, 1)
'Reiniciamos el resto de la cadena
Resultado = Left(Actual, Posicion - 1) & Caracter & String(Len(Actual) - Posicion, Primero)

Else 'Si no estamos en el final del alfabeto
Caracter = Mid(Alfabeto, InStr(Alfabeto, Caracter) + 1, 1) 'Sustituimos el caracter por el siguiente en el alfabeto
Resultado = Left(Actual, Len(Actual) - 1) & Caracter
Endif

Return Resultado

End


Y un ejemplo de tabla generada:

' gambas module file

Public stAlfabeto As String = "10"

Public Sub Main()

Dim stCadenaPrueba As String
Dim stCadenaObjetivo As String = "010"
Dim stValor As String
' Dim ct As Integer

Dim MatrizResultados As New String[]

stCadenaPrueba = String(Len(stCadenaObjetivo), Left(stAlfabeto, 1)) 'Inicializamos la cadena de pruebas. Debe tener la misma longitud que el objetivo


While stCadenaPrueba <> stCadenaObjetivo
MatrizResultados.Add(stCadenaPrueba)
stCadenaPrueba = TablaDeVerdad(stAlfabeto, stCadenaPrueba)
Wend

MatrizResultados.Add(stCadenaObjetivo) 'Añadir el objetivo!!!!

For Each stValor In MatrizResultados
Print stValor
Next

End


OJO!!: La función no contiene comprobación de errores (cadenas de distinta longitud, caracteres que no figuran en el alfabeto...) así que petará irremediablemente si los parámetros no son los correctos.

Saludos.

Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1408s (PHP: 4% SQL: 96%)
SQL queries: 26 - Debug Off - GZIP Enabled