Sie sind auf Seite 1von 29

III. Herramientas de programacin.

Para la representacin de algoritmos se debe utilizar algn mtodo que permita la independizacin del lenguaje de programacin elegido para su ejecucin. Para conseguir este objetivo se precisa que el algoritmo sea representado grficamente o numricamente. Los mtodos ms utilizados para la representacin de algoritmos son: Diagramas de Flujo Diagrama NassiSchneiderman (NS) Lenguaje de especificacin de algoritmos (Pseudocdigo)

III.1. Simbologa Diagramas de Flujo EL diagrama de flujo (Flowchart) es una de las tcnicas de representacin de algoritmos ms antigua y a la vez ms utilizada. Un diagrama de flujo (DF) es un diagrama que utiliza cajas y lneas que indican el flujo de la informacin.

Smbolo

Funcin Inicio/Fin. Comienzo y ltimo smbolo de los diagramas de flujos. Entrada. Se especifican los datos de entrada del algoritmo.

Smbolo

Funcin Salida. Se especifican los datos de salida del algoritmo.

Proceso. Se especifica cualquier tipo de operacin expresin matemticas (calculo, almacenamiento, transferencia) Conector. Enlaza diferentes partes del diagrama de flujo Fechas. Indican el flujo de datos en el algoritmo

Diagrama NassiSchneiderman (NS)

El diagrama NS tambin conocido como diagrama Chapin, es semejante al DF pero sin flechas de direccin, por lo cual utiliza un rectngulo para representar los pasos del algoritmo.

Inicio Accin 1 Accin 2 ...


Accin n Fin

Pseudocdigo Esta tcnica es una combinacin entre lenguaje natural y lenguaje de alto nivel. Inicio Accin 1 Accin 2 Accin n Fin III.2. Reglas para la construccin de diagramas Diagramas de Flujo Los diagramas de flujo comienzan con el smbolo de inicio/fin indicando el comienzo del diagrama:

Inicio Accin 1 Accin 2 ...


Accin n

Inicio
Y terminan con el smbolo de inicio/fin indicando el trmino del diagrama:

Fin
Entre los smbolos de inicio/fin se ponen las acciones (asignacin, proceso, entrada, salida, etc.) que forman parte del diagrama.

Fin
, , , etc.

Diagrama NassiSchneiderman (NS) Para este tipo de diagrama se utiliza un rectngulo, en el cual comienza con la leyenda Inicio y termina con la leyenda Fin. Entre estos dos recuadros de desarrolla el contenido del algoritmo.

Inicio Accin 1 Accin 2 ...


Accin n Fin
Definicin del problema: Obtenga la superficie y la longitud de un circulo. Anlisis: Entrada: Radio Salida: Superficie, Longitud Algoritmo: Una vez obtenido el radio, calcular: y Diagrama de Flujo Diagrama NS
Inicio

Inicio
Leer Radio

Leer Radio

Superficie= *Radio^2

Superficie= *Radio^2

Longitud=2* *Radio

Longitud=2* *Radio

Superficie, Longitud

Imprimir Superficie, Longitud

Fin

Fin

III.3. Pseudocdigo En este tipo de representacin se comienza con la leyenda Inicio y termina con Fin y entre los trminos de comienzo y terminacin se escribe el desarrollo del algoritmo. Inicio Leer Radio Superficie= *Radio^2 Longitud=2* *Radio Imprimir Superficie, Longitud Fin Ejercicios: 1. Calcule el salario neto de un trabajador a partir de la lectura del nombre, horas trabajadas, precio por hora y el clculo de impuesto son el 25% del salario bruto (horas trabajadas por precio por hora). Como resultado final imprima el nombre, salario bruto, impuestos y salario neto. 2. Obtenga la superficie de un triangulo

3. Obtenga el total a pagar aplicando un descuento del 5%. 4. Obtenga los valores de X1 y X2 para resolver ecuaciones de segundo grado:

5. De los valores a y b, obtenga cuantas veces cabe el valor b en el valor a. 6. Obtenga la suma de los nmeros del 1 al 100. 7. Elabore un algoritmo que lea dos valores y los intercambie.

Estructura selectivas Las estructuras selectivas se utilizan para forma decisiones lgicas. En las estructuras se evala una condicin y en funcin del resultado se puede realizar una accin u otra.

Estructuras selectivas simples Diagrama de Flujo


Verdadero Condicin Accin 1 Falso

Diagrama NS

Condicin Verdadero Accin 1


Pseudocdigo Si Condicin Accin 1 Fin Si

Falso

1. La tienda Artculos de Limpieza S.A. de C.V. realiza un descuento del 5% a todas las compras mayores a 2500.00 pesos. Elabore un algoritmo que resuelva este problema. 2. La empresa Electrnica Digital desea un programa que determine si una persona es solvente econmicamente en base a los ingresos y los gastos; si los ingresos son mayores a los gastos la persona es solvente. Elabore un algoritmo que resuelva este problema. 3. En la clnica Salud Eterna desean un programa que determine si una persona esta enferma en base a su temperatura corporal; si la temperatura corporal es mayor a 36.5 el programa debe mandar un mensaje que diga Enfermo. Estructuras selectivas dobles Diagrama de Flujo Diagrama NS
Condicin Verdadero
Accin 2

Verdadero Condicin
Accin 1

Falso

Falso Accin 2

Accin 1

Pseudocdigo Si Condicin Accin 1 En otro caso Accin 2 Fin Si

4. Escriba un algoritmo que calcule el total a pagar en una tienda departamental, si la compra excede de 15,000 pesos se concede un descuento del 10%, en caso contrario el descuento es del 5%. 5. Elabora un algoritmo que en base a dos nmeros imprima el mayor. 6. Elabore un algoritmo que en base a tres nmeros imprima el mayor. 7. Elabore un algoritmo que en base a cuatro nmeros, los imprima en forma descendente. Estructuras de seleccin mltiple En la vida se presentan problemas en los cuales presentan ms de dos alternativas como posibilidades y eso se soluciona con estructuras de seleccin mltiple. Diagrama de Flujo

Otro Caso
Selector 1 2

Accin 1

Accin 2

Accin n

Accin OC

Diagrama NS

Selector Verdadero
1 2 n Otro Caso

Accin 1

Accin 2

Accin n

Accin OC

Pseudocdigo Segn sea Selector hacer 1: Accin 1 2: Accin 2 n: Accin n En otro caso: Accin OC Fin Segn

8. Elabore un algoritmo que en base al nmero del mes imprima el mes correspondiente como cadena de caracteres. 9. Elabore un algoritmo que en base a un nmero (entre 10 y 20) imprima su valor con letra. 10. Elabore un algoritmo que en base al nmero de da de la semana imprima que da es. Estructuras de repeticin Cuando se requiere que un conjunto de instrucciones se repita varias veces se utiliza las estructuras de repeticin. Diagrama de Flujo For/Next
Inicio

While/Mientras

No Condicin
Proceso

Falso Condicin Verdadero

Inc/Dec Si
Proceso

Repeat/Repite

Proceso Verdadero Condicin Falso

Diagrama NassiSchneiderman (NS) For/Next


Inicio

While/Mientras

While Condicin
Proceso

Proceso
Inc/Dec

Repeat/Repite

Proceso

Repeat Condicin

Pseudocdigo For/Next Para I = VI Hasta VF [Inc Valor/Dec Valor] Proceso Fin Para Repeat/Repite Repite Proceso Hasta Condicin While/Mientras Mientras Condicin Proceso Fin Mientras

11. Elabore un algoritmo que lea 10 calificaciones e imprima el promedio. 12. Elabore un algoritmo que lea dos nmeros e imprima la serie de nmeros que existe entre el nmero menor a el nmero mayor. 13. Elabore un algoritmo que lea una serie de valores e imprima el valor ms grande de la serie. El fin de la serie esta denotado por el valor 9999. 14. Calcular la media de una serie de nmeros positivos. El valor cero como entrada indican que se ha finalizado la serie de nmeros positivos.

Producto de Aprendizaje 3.1: De los siguientes problemas elabore su correspondiente algoritmo. 1. Obtenga el cuadrado de 243 2. Obtenga el permetro y la superficie de un cuadrado 3. Obtenga la suma de dos nmeros 4. Obtenga el permetro de un rectngulo 5. Obtenga la hipotenusa de un triangulo rectngulo 6. Obtenga el rea y el volumen de un cilindro

7. Dado x grados Celsius obtenga su conversin a grados Fahrenheit

8. Obtenga el rea de un triangulo en funcin de las longitudes de sus lados:

Donde:

9. Dado x numero de metros convertirlos a pies y pulgadas (1 metro = 39.37 pulgadas, 1 pie = 12 pulgadas) 10. Una tonelada mtrica equivale a 35,273.92 onzas. Elabore un algoritmo que lea el peso de un paquete de cereal para el desayuno en onzas y que obtenga como salida el nmero de cajas necesarias para llenar una tonelada mtrica de cereal, as como deber proporcionar cuantas onzas sobran. El algoritmo deber permitir al usuario repetir este proceso las veces que desee. 11. Dado tres nmeros, determinar si la suma de cualquier pareja de ellos es igual al tercer nmero. Si se cumple la condicin, escribir iguales en caso contrario Distintos. 12. Elabore un algoritmo lea 3 calificaciones de la materia de Fundamentos de Programacin y determine si el alumno Aprobado o Reprobado en base a su promedio.

13. Elabore un algoritmo que en base a un valor numrico determine si es Alto o Bajo. Si el nmero es mayor a 100 imprima Alto, en caso contrario imprima Bajo. 14. Elabore un algoritmo que lea 4 nmeros e imprima el mayor de ellos. 15. Elabore un algoritmo que lea un nmero e imprima sus dgitos en forma individual: Ejemplo: Dame un nmero? 7539 9 3 5 7 16. Obtenga el salario de un obrero en base a las horas extras trabajadas. El salario se calcula sumando al sueldo base las horas extra. El sueldo base es equivale a $450.00 y las horas extra se calculan en base a la siguiente tabla: 1 a 10 hrs 11 a 12 hrs 21 y ms hrs $11.50 $ 13.00 $ 15.00

17. Elabore un algoritmo que lea un nmero decimal e imprima su representacin en binario. 18. Elabore un algoritmo que lea un nmero e imprima su factorial. Ejemplo: 5 = 5 * 4 * 3 * 2 * 1 = 120 Nota: El factorial de 0 (cero) por notacin es 1. III.4. Tipos de datos y expresiones Tipos de datos Existen dos grupos de tipos de datos: Simples (bsicos, primitivos, sin estructura) Compuestos (Estructurados, Complejos)

Dentro de los tipos de datos Simples se encuentran: Numricos o Enteros 5, 15, 1350, 50000, etc. o Punto Flotante (Reales) 0.00008, 3.7452, 8.72, 370000.0, etc.

En aplicaciones cientficas se requiere una notacin especial para manejar nmeros muy grandes (como la masa de la tierra) o muy pequeos (como la masa de un electrn) esta notacin es llamada notacin exponencial o notacin cientfica: 367 520 100 000 000 000 00 0.000 000 000 030 257 3.675201E+20 3.0257E11

Lgicos (Booleanos) Los datos tipo lgico es aquel que solo puede tomar dos valores: Verdadero (True) Falso (False) Carcter (Char) El tipo de datos carcter es un conjunto finito y ordenado de caracteres. Un dato tipo carcter contiene un solo carcter. Un carcter se delimita por comillas sencillas: A, a, 1, $, etc. Los grupos de caracteres son los siguientes: o o o Caracteres alfabticos: A, B,,Z, a, b,,z Caracteres numricos: 0, 1, 2,,9 Caracteres Especiales: +, , /, *, ^, ., ;, <, >, $, #, etc.

Y dentro los Compuestos o Estructurados se encuentran: Cadena de caracteres (String) Una cadena de caracteres es una sucesin de caracteres que se encuentra delimitado por comillas dobles: Hola Mundo 30 de septiembre de 2010 Esta es una cadena de caracteres llamada tambin String Clases (Class) Arreglos (Array) Registros (Records) Listas (LinkerList) Conjuntos (Set) rboles (Tree) Grafos (Graph) Abstractos (Abstract) Archivos (Files)

En la siguiente tabla presentamos los 8 tipos de dato primitivos de Java, el nmero de bits que ocupan y el rango de valores que pueden tomar.

Tipo boolean char byte short int long

Tamao en bits 1 16 8 16 32 64

Rango de valores true o false Nota: El No. de bits puede variar segn la plataforma \u0000 hasta \uFFFF' Conjunto Unicode de ISO 128 a +127 27 a 27 1 32,768 a +32,767 215 a 215 1 2,147,483,648 a +2,147,483,647 231 a 231 1 9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 263 a 263 1 Rango negativo: 3.4028234663852886E+38 hasta 1.40129846432481707E45 Rango positivo: 1.40129846432481707E45 hasta 3.4028234663852886E+38 Rango negativo: 1.797693134862157E308 hasta 4.94065645841246544E324 Rango positivo: 4.94065645841246544E324 hasta 1.797693134862157E308

float

32

double

64

Tokens elementos lxico de los programas Existen 5 clase de tokens: identificadores, palabras reservadas, literales, operadores y otros. Identificadores Los identificadores pueden representar variables, constantes, mtodos, nombres de archivos, etc. Diagrama de contexto de los identificadores:

Regla para formar un identificador: 1. Debe comenzar por una letra 2. Despus de la 1er. Letra puede contener letras, dgitos o guin de piso 3. No estn permitidos los espacios en blanco 4. No deben formar palabras reservadas 5. Java es sensibles a las maysculas y minsculas 6. En Java la longitud de los identificadores no tiene lmite. Expresiones Las expresiones son combinaciones de constantes, variables, operadores, operandos, parntesis, funciones, etc.

Constante Operando

Funcin

a (b 3 ) c
Variable
Expresiones aritmticas Las expresiones aritmticas son anlogas a las expresiones matemticas. Operadores aritmticos: + * / % Ejemplos: 5+3=8 32=1 5 * 3 = 15 17/2 = 8 17/2.0 = 8.5 (double) 17/2 = 8.5 20 % 7 = 6 Suma Resta Multiplicacin Divisin Modulo

Operador

Transforme las siguientes formulas en expresiones computacionales:

III.5. Estructuras lgicas Otro tipo de expresiones son las lgicas, o booleanas, cuyo valor puede ser true (verdadero) o false (falso) y se denominan expresiones booleanas en honor a matemtico George Boole, quien desarrollo el lgebra booleana. Mediante los operadores relacionales se pueden hacer comparaciones entre valores tipo numrico y carcter. Por ejemplo: 3<6V 0>9F 8 <= 5 F A=3yB=4 A>B F A<B V A<=B V B==4 V X=2 Y = 3 Z = 9 X>Z F Y<X F Z!=X V

Operadores Lgicas Java cuenta con los operadores lgicos para formar condiciones ms complejas. Los operadores lgicos son:

Operador && || & | ^ !

Descripcin And condicional Or condicional And lgico Or lgico Or exclusivo Negacin

Corto Circuito Si No

Tablas de verdad de los operadores lgico: && And Condicional A false false true true B false true false true A && B false false false true

Con un operador && (And condicional) ser true si y solo si todas sus entradas son true. || Or Condicional A false false true true B false true false true A || B false true true true

Con un operador || (Or condicional) ser true si por lo menos una de sus entradas es true. Operadores & And lgico y | Or lgico funcionan de manera idntica a los operadores && And condicional y || Or condicional, con la excepcin de de que los operadores lgicos siempre se evaluaran todas las expresiones (es decir, no realizan una evaluacin de corto circuito). ^ Or Exclusivo A false false true true B false true false true A^B false true true false

Con un operador ^ (Or exclusivo) es true si y solo si una de sus operandos es true y el otro es false

! Negacin A false true !A true false

Por medio del operador ! (Negacin) se invierte el significado de la condicin. A diferencia de los operadores &&, ||, &, | y ^ que son operadores binarios, el operador ! es unario. Por ejemplo: Si A=3, B=2 y C=7 a) b) c) d) (A>5) || (B<C) V (A!=B) && (B==C) (A>=B) & (C>=5) !(A<=9) | (5>B)

Reglas de prioridad Las expresiones que tienen dos o ms operadores requieren de reglas matemticas que permitan determinar el orden de las operaciones, a estas reglas se les llama reglas de prioridad. Prioridad 1 2 3 4 5 6 7 8 9 10 11 12 Operadores () Agrupacin (tipo) Cast * / % + < <= > >= == != & ^ | && || = *= /= %= += = Asociatividad ID DI ID ID ID ID ID ID ID ID ID DI

Cual es el valor de las siguientes expresiones? a) b) c) d) 15 * 14 3 *7 (24 + 2 * 6) / 4 3 + 4 * (8 * (4 (9 + 31) / 6)) 4 40 / 5

Estructura general de un programa en Java import Importacin de paquetes con clases predefinidas. public class NombreDeLaClase { Declaracin de variables miembro de la clase public static tipo main (String[] args) { Declaracin de variables locales Sentencias de la funcin main() [return tipo;] } acceso static tipo NombreDelMtodo1 (Lista de Argumentos) { Declaracin de variables del mtodo 1 Sentencias del mtodo 1 [return tipo;] } acceso static tipo NombreDelMtodo2 (Lista de Argumentos) { Declaracin de variables del mtodo 2 Sentencias del mtodo 2 [return tipo;] } } Variables Una variable es un identificador donde se almacena un valor con un cierto tipo de dato. Las variables de tipos bsicos almacena datos del tipo primitivos, las variables de clases o variables de objetos, hacen referencias a objetos. Una constante es una variable cuyo contenido no puede ser modificado. Declaracin de variables Ejemplo: int x, y; float a, b, c; char letra1; tipo identificador

Inicializacin de variables Una de las variantes que se puede hacer en una declaracin es inicializar una variable con un valor a ser declarada.

tipo

identificador

= ; ,

Expresin

Ejemplos: int x, y = 0; float a, b, c = 100.0f; char letra1 = A; Se pueden declarar una variable en tres lugares: En una clase, como miembro de clase Al principio de un mtodo o bloque de cdigo En el punto de utilizacin. Ejemplo de las tres formas de declarar una variable:

Objetos que permiten E/S por consola. En Java, la entrada y salida se lee y escribe en flujos (streams). La fuente bsica de entrada de datos es el teclado y la fuente de salida es pantalla. La clase System define dos referencias a objetos static para la gestin de entrada (in) y salida (out). Salida (System.out) El objeto out definida en la clase System est asociado con el flujo de salida, que dirige los datos a consola y permite visualizarlos en pantalla, por ejemplo: System.out.println(Esta es una cadena); Se visualizar en pantalla: Esta es una cadena. Descripcin del mtodo print: void print(cadena) void println(cadena) Despliega una cadena en pantalla. Despliega una cadena en pantalla y al final un carcter de nueva lnea (\n).

Con estos mtodos se puede escribir cualquier cadena o dato de los tipos primitivos, como por ejemplo: System.out.println( "Valores de las Variables: \n" + "a=" + a +"\n" + "b=" + b +"\n" + "x=" + x +"\n" + "y=" + y ); Entrada (System.in) Por medio de un objeto Scanner se puede leer datos desde un programa, esta clase pertenece al paquete java.util y debe ser importada. Para poder utilizarlo instancie un objeto de la siguiente forma: Scanner identificador = new Scanner (System.in); Esta expresin crea un objeto Scanner y determina que leer los datos desde teclado mediante los siguientes mtodos: identificador.nextBoolean() identificador.nextByte() identificador.nextShort() identificador.nextInt() identificador.nextLong() Para Booleanos Para nmeros Enteros tipo byte Para nmeros Enteros tipo short Para nmeros Enteros tipo int Para nmeros Enteros tipo long

identificador.nextFloat() identificador.nextDouble() identificador.next() identificador.nextLine()

Para nmeros flotantes Para nmeros doubles Para el siguiente token Para una lnea

Recuerdan este ejemplo: Obtenga la superficie y la longitud de un crculo.

Inicio
Anlisis: Entrada: Radio Salida: Clculos de Superficie y Longitud Proceso: Una vez obtenido el radio, calcular: y
Leer Radio

Superficie= *Radio^2

Longitud=2* *Radio

Superficie, Longitud

Fin

El siguiente ejemplo lee dos nmeros enteros desde Windows, los suma y muestra el resultado en una ventana.

Al convertir datos tipo String a tipo int (con Integer.parseInt()) manda una excepcin de formato de numero si ocurre un error. El mtodo showMessageDialog de la clase JOptionPane tiene varias formas de enviarles parmetros: public static void showMessageDialog(Component componentePadre, Object Mensaje) Donde los parmetros: componentePadre Mensaje Determina la ventana en que se desplegara el mensaje, si es null, se despliega en la ventana por defecto. Objeto a desplegar

public static void showMessageDialog(Component componentePadre, Object Mensaje, String Titulo, int TipodeMensaje) Donde los parmetros: componentePadre Mensaje Titulo TipodeMensaje Determina la ventana en que se desplegara el mensaje, si es null, se despliega en la ventana por defecto. Objeto a desplegar Cadena de caracteres de la caja de dialogo Valor entero que determina que imagen se despliega segn la siguiente tabla:

Tipo de cuadro de dilogo de mensaje

Icono

Descripcin

JOptionPane.ERROR_MESSAGE

Ventana de Error

JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE

Ventana Informativa Ventana de Advertencia Ventana de introduccin de datos o seleccin de alguna alternativa

JOptionPane.QUESTION_MESSAGE

Tipo de cuadro de dilogo de mensaje JOptionPane.PLAIN_MESSAGE

Icono Sin Icono

Descripcin Ventana estndar

Sintaxis de la seleccin simple:

if (Expresin) Accin; o if (Expresin) Accin;

Nota: El if solo soporta una instruccin, si desea poner ms de una sentencia debe utilizar un bloque de cdigo ({..}).

if (condicin) {accin1; accin2,,accin n} ; o if (condicin) { accin1; accin 2; . . accin n; } Sintaxis de la seleccin doble: if (condicin) accin 1; else accin 2; if con mas de una sentencia y usando un boque de cdigo: if (condicin) { accin1; accin 2; accin n; } else { accin1; accin 2; accin n; } Sintaxis de Seleccin mltiple: switch (selector) { case constante 1: Accin 1; break; case constante 2: Accin 2; break; default: Accin n; }
switch (letra) { case a: caseA: case : case A: case e: caseE: case : case : case i: caseI: case : case : case o: caseO: case : case : case u: caseU: case : case : System.out.println(letra + es vocal); }

Sintaxis de los ciclos Java: for 1. for (Inicializacin; Condicin; Incremento) sentencia; for (Inicializacin; Condicin; Incremento) { sentencia 1; sentencia 2; sentencia n; }

2.

while 1. while (condicin) sentencia; while (condicin) { sentencia 1; sentencia 1; sentencia n; }

2.

do while 1. do sentencia; while (condicin);

2.

do { sentencia 1; sentencia 2; sentencia n; } while (condicin);

Producto de Aprendizaje 3.2: Desarrolle los siguientes programas en Java. 1. En la empresa Aceros Industrializados S.A. de C.V. los obreros recibieron un incremento del 7.6% retroactivo a 6 meses. Elabore un programa que en base el salario mensual despliegue el monto total de incremento por los 6 meses. 2. Elabore un programa que lea 4 nmeros e imprima el mayor de ellos. 3. Elabore un programa que lea los tres parciales de la materia de Fundamentos de Programacin y en base el Promedio despliegue si Acredita o No Acredita la materia. 4. Elabore un programa que lea un nmero e imprima sus dgitos en forma individual: Ejemplo: Dame un nmero? 7539 9 3 5 7 5. Obtenga el salario de un obrero en base a las horas extras trabajadas. El salario se calcula sumando al sueldo base las horas extra. El sueldo base es equivale a $450.00 y las horas extra se calculan en base a la siguiente tabla: 1 a 10 hrs $11.50 11 a 12 hrs $ 13.00 21 y ms hrs $ 15.00 6. Elabore un programa que lea un nmero decimal e imprima su representacin en binario. 7. Elabore un programa que lea un nmero e imprima su factorial. Ejemplo: 5 = 5 * 4 * 3 * 2 * 1 = 120 Nota: El factorial de 0 (cero) por notacin es 1.

8. Elabore un programa que lea serie de nmeros e imprima su media. El final de los nmeros de denota con un -1. 9. Elabore un programa que lea 10 calificaciones e imprime el promedio. 10. Elabore un algoritmo que lea dos nmeros diferentes, he imprima el rango del nmero ms pequeo al nmero ms grande. 11. Elabore un programa que lea un nmero positivo diferente de cero e imprima la secuencia de nmeros en forma descendente hasta el cero. 12. Elabore un programa que imprima la suma de los nmeros impares del 1 al 100 utilizando ciclos.

Das könnte Ihnen auch gefallen