> **EXAME TEMA 1: FUNDAMENTOS DE .NET (Sintaxe, Variables e Estruturas)**

# Pregunta 1: Sintaxe e Lóxica (Mezclado)

Analiza o seguinte fragmento de pseudocódigo/lóxica e dime se hai algún erro ou como o optimizarías:

> *"Necesito comprobar unha variable 'idade'. Se é menor de 18, imprimir 'Menor'; se é exactamente 18, imprimir 'Xusto'; e se é maior de 18, imprimir 'Adulto'."*

- ¿Que estrutura de control usarías para que fose o máis eficiente posible (If...Then...Else ou Select Case)? Xustifica a túa resposta.

## Resposta

No caso de .Net usaríase o `Select Case` ou `Switch`. No caso de F#, a opción ven sendo un `match` e no caso de C++ non existe esta opción polo que nun nivel óptimo acádase o `if else if else`.

```vb
Public Function idade_rango(ByVal idade as Integer) As String 
    Select Case Idade
        Case Is < 18:
            Return "Menor de idade."
        Case 18:
            Return "Ten 18 anos."
    End Select
    Return "Maior de Idade."
End Function
```

```cs
public string idade_rango(int idade){
    switch(idade){
        case int _ when idade < 18:
            return "Menor de idade.";
        case 18:
            return "Ten 18 anos.";
    }
    return "Maior de Idade."
}
```

```fs
let idade_rango idade:int = match idade with 
    | < 18 -> "Menor de idade."
    | 18 -> "Ten 18 anos."
    | _ -> "Maior de Idade."
```

```cpp
string idade_rango(int idade){
    switch(idade){
        case < idade:
            return "Menor de idade.";
        case idade:
            return "Ten 18 anos.";
    }
    return "Maior de Idade";
}
```

# Pregunta 2: Tipos de Datos Específicos (Castellano)

¿Qué diferencia existe entre el tipo de datos Decimal, Double y Single? Si estuvieras desarrollando una aplicación para la gestión económica de la Xunta (contabilidad), ¿cuál de los tres elegirías para manejar importes monetarios y por qué?

## Respuesta

- **Decimal**: o *decimal* Es un valor numérico de punto flotante con capacidad a poder desplazar la compa variando la proporción de la mantisa cara su parte entera o decimal. Posee una precisión de 128 bits (16 bytes).
- **Double** o *double*: Es un valor numérico de punto flotante con una precisión de 64 bits (8 bytes).
- **Single** o *float*: Es un valor numérico de punto flotante con una precisión de 32 bits (4 bytes).

Para valores monetarios, siempre Decimal por su capacidad de precisión a 128 Bit, además de poder trabajar con un desplazamiento de la coma sobre su Parseo.

```cs
public decimal coger_cantidad(string cantidad){
    return decimal.Parse(cantidad.Replace(",", "."));
}
```