|
| 1 | +(* |
| 2 | + * EJERCICIO: |
| 3 | + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: |
| 4 | + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... |
| 5 | + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) |
| 6 | + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos |
| 7 | + * que representen todos los tipos de estructuras de control que existan |
| 8 | + * en tu lenguaje: |
| 9 | + * Condicionales, iterativas, excepciones... |
| 10 | + * - Debes hacer print por consola del resultado de todos los ejemplos. |
| 11 | + * |
| 12 | + * DIFICULTAD EXTRA (opcional): |
| 13 | + * Crea un programa que imprima por consola todos los números comprendidos |
| 14 | + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. |
| 15 | + * |
| 16 | + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. |
| 17 | + *) |
| 18 | + |
| 19 | +program fduron; |
| 20 | + |
| 21 | +{$APPTYPE CONSOLE} |
| 22 | + |
| 23 | +{$R *.res} |
| 24 | + |
| 25 | + |
| 26 | +uses |
| 27 | + System.SysUtils; |
| 28 | + |
| 29 | +type |
| 30 | + TElementos = (Elemento1, Elemento2, Elemento3, Elemento4, Elemento5, Elemento6); |
| 31 | + TConjuntoElementos = set of TElementos; |
| 32 | +const |
| 33 | + IntA = 20; |
| 34 | + IntB = 11; |
| 35 | + BoolA = True; |
| 36 | + BoolB = False; |
| 37 | + UnConjunto: TConjuntoElementos = [Elemento1, Elemento3, Elemento5]; |
| 38 | + OtroConjunto: TConjuntoElementos = [Elemento2, Elemento6]; |
| 39 | +var |
| 40 | + VariableEntera: Integer; |
| 41 | + VariableString: String; |
| 42 | + VariableConjunto: TConjuntoElementos; |
| 43 | + UnObjeto: TObject; |
| 44 | + I: Integer; |
| 45 | + R: Real; |
| 46 | + |
| 47 | +procedure MostrarElementosDelConjunto(const UnConjuntoLocal: TConjuntoElementos); |
| 48 | +begin |
| 49 | + //Ejemplo de ciclo FOR con elementos de un conjunto |
| 50 | + for var Elemento in UnConjuntoLocal do |
| 51 | + case Elemento of |
| 52 | + Elemento1: Write('Elemento1 '); |
| 53 | + Elemento2: Write('Elemento2 '); |
| 54 | + Elemento3: Write('Elemento3 '); |
| 55 | + Elemento4: Write('Elemento4 '); |
| 56 | + Elemento5: Write('Elemento5 '); |
| 57 | + Elemento6: Write('Elemento6 '); |
| 58 | + end; |
| 59 | + WriteLn; |
| 60 | +end; |
| 61 | + |
| 62 | +begin |
| 63 | + WriteLn('*** Operadores Aritméticos ***'); |
| 64 | + WriteLn('Suma: ', IntA + IntB); |
| 65 | + WriteLn('Resta: ', IntA - IntB); |
| 66 | + WriteLn('Multiplicación: ', IntA * IntB); |
| 67 | + WriteLn('división real: ', IntA / IntB); |
| 68 | + WriteLn('división entera: ', IntA div IntB); |
| 69 | + WriteLn('residuo: ', IntA mod IntB); |
| 70 | + WriteLn; |
| 71 | + WriteLn('*** Operadores lógicos ***'); |
| 72 | + WriteLn('NOT lógico (Negación):', not BoolA); |
| 73 | + WriteLn('AND lógico (Conjunción):', BoolA and BoolB); |
| 74 | + WriteLn('OR lógico (Disyunción):', BoolA or BoolB); |
| 75 | + WriteLn('XOR lógico (Disyunción exclusiva):', BoolA xor BoolB); |
| 76 | + WriteLn; |
| 77 | + WriteLn('*** Operadores de comparacion ***'); |
| 78 | + WriteLn('Es mayor que: ', IntA > IntB); |
| 79 | + WriteLn('Es menor que: ', IntA < IntB); |
| 80 | + WriteLn('Es mayor o igual que: ', IntA >= IntB); |
| 81 | + WriteLn('Es menor o igual que: ', IntA <= IntB); |
| 82 | + WriteLn('Es igual a: ', IntA = IntB); |
| 83 | + WriteLn('Es diferente a: ', IntA <> IntB); |
| 84 | + WriteLn; |
| 85 | + WriteLn('*** Asignacion ***'); |
| 86 | + VariableEntera := 12; |
| 87 | + VariableString := 'Valor string'; |
| 88 | + VariableConjunto := [Elemento1, Elemento2]; |
| 89 | + WriteLn; |
| 90 | + WriteLn('*** Operadores de identidad ***'); |
| 91 | + WriteLn('La variable es de la clase TObject: ', UnObjeto is TObject); |
| 92 | + WriteLn; |
| 93 | + WriteLn('*** Operadores de pertenencia ***'); |
| 94 | + WriteLn('El elemento pertenece a un conjunto: ', Elemento4 in UnConjunto); |
| 95 | + WriteLn('El elemento NO pertenece a un conjunto: ', not(Elemento4 in UnConjunto)); |
| 96 | + WriteLn; |
| 97 | + WriteLn('*** Operadores de bits ***'); |
| 98 | + {IntA es un valor entero de 64Bits, su valor (20) en binario es: |
| 99 | + 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0100 |
| 100 | + al invertir todos los bits (not IntA) se convierte en |
| 101 | + 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110 1011 |
| 102 | + que es -21 entero} |
| 103 | + WriteLn('NOT a nivel de bits (invertir): ', not IntA); |
| 104 | + WriteLn('AND a nivel de bits: ', IntA and IntB); |
| 105 | + WriteLn('OR a nivel de bits: ', IntA or IntB); |
| 106 | + WriteLn('XOR a nivel de bits: ', IntA xor IntB); |
| 107 | + WriteLn('Desplazamiento de X bits a la izquierda: ', IntA shl 2); |
| 108 | + WriteLn('Desplazamiento de X bits a la derecha: ', IntA shr 2); |
| 109 | + WriteLn; |
| 110 | + WriteLn('*** Operadores de conjuntos ***'); |
| 111 | + Write('Union: '); |
| 112 | + MostrarElementosDelConjunto(UnConjunto + OtroConjunto); |
| 113 | + Write('Diferencia: '); |
| 114 | + MostrarElementosDelConjunto(UnConjunto - OtroConjunto); |
| 115 | + Write('Intersección: '); |
| 116 | + MostrarElementosDelConjunto(UnConjunto * OtroConjunto); |
| 117 | + WriteLn('Es subconjunto de: ', UnConjunto <= OtroConjunto); |
| 118 | + WriteLn('Es sperconjunto de: ', UnConjunto >= OtroConjunto); |
| 119 | + WriteLn('Igualdad: ', UnConjunto = OtroConjunto); |
| 120 | + WriteLn('Diferencia: ', UnConjunto <> OtroConjunto); |
| 121 | + WriteLn('Pertenencia de ordinal en un conjunto: ', Elemento1 in OtroConjunto); |
| 122 | + WriteLn; |
| 123 | + WriteLn('*** Apuntadores ***'); |
| 124 | + var x := @VariableEntera; //Apuntador a la dirección de memoria que ocupa la variable |
| 125 | + WriteLn('Dereferenciar un apuntador: ', Integer(^x)); |
| 126 | + WriteLn; |
| 127 | + WriteLn('*** Estructuras de control ***'); |
| 128 | + if IntA > IntB then |
| 129 | + begin |
| 130 | + WriteLn('IntA es mayor que IntB') |
| 131 | + end |
| 132 | + else |
| 133 | + begin |
| 134 | + WriteLn('IntA no es mayor que IntB') |
| 135 | + end; |
| 136 | + |
| 137 | + case IntA of |
| 138 | + 10: WriteLn('IntA es igual a 10'); |
| 139 | + 20: WriteLn('IntA es igual a 20'); |
| 140 | + 30: WriteLn('IntA es igual a 30'); |
| 141 | + 31..40: WriteLn('IntA esta entre 31 y 40'); |
| 142 | + else |
| 143 | + WriteLn('IntA es igual a otro valor'); |
| 144 | + end; |
| 145 | + |
| 146 | + WriteLn('Numeros del 1 al 10 en un ciclo FOR:'); |
| 147 | + for I := 1 to 10 do |
| 148 | + begin |
| 149 | + Write(I, ' '); |
| 150 | + end; |
| 151 | + |
| 152 | + WriteLn; |
| 153 | + WriteLn('Numeros del 1 al 10 en un ciclo WHILE:'); |
| 154 | + I := 1; |
| 155 | + while I <= 10 do |
| 156 | + begin |
| 157 | + Write(I, ' '); |
| 158 | + I := I + 1; |
| 159 | + end; |
| 160 | + |
| 161 | + WriteLn; |
| 162 | + WriteLn('Numeros del 1 al 10 en un ciclo REPEAT:'); |
| 163 | + I := 1; |
| 164 | + repeat |
| 165 | + Write(I, ' '); |
| 166 | + I := I + 1; |
| 167 | + until I > 10; |
| 168 | + |
| 169 | + WriteLn; |
| 170 | + try |
| 171 | + WriteLn('Prueba de finally'); |
| 172 | + VariableEntera := IntA + IntB; |
| 173 | + R := IntB * 2.25; |
| 174 | + finally |
| 175 | + WriteLn(''' |
| 176 | + Esta línea se imprimirá independientemente de lo que ocurra |
| 177 | + en el código del bloque T R Y |
| 178 | + '''); |
| 179 | + end; |
| 180 | + |
| 181 | + WriteLn; |
| 182 | + WriteLn(''' |
| 183 | + ****************************************************************** |
| 184 | + ** DIFICULTAD EXTRA ** |
| 185 | + ****************************************************************** |
| 186 | + '''); |
| 187 | + WriteLn('Números del 10 al 55, excluyendo el 16 y multiplos de 3'); |
| 188 | + for I := 10 to 55 do |
| 189 | + if (I <> 16) and ((I mod 3) <> 0) then |
| 190 | + Write(I, ', '); |
| 191 | + WriteLn; |
| 192 | + |
| 193 | + try |
| 194 | + writeLn('Prueba de excepciones'); |
| 195 | + I := 1; |
| 196 | + while I <= 1 do |
| 197 | + begin |
| 198 | + R := IntA div I; //Provocar una Division por 0 |
| 199 | + I := I - 1; |
| 200 | + end; |
| 201 | + except |
| 202 | + on E: Exception do |
| 203 | + WriteLn('Ocurrio el error: ', E.Message); |
| 204 | + end; |
| 205 | + |
| 206 | + ReadLn; |
| 207 | + |
| 208 | +end. |
0 commit comments