Introducción a la Programacion en Visual Basic .NET 2008 TEMA 9 Algoritmos, Pseudocódigos y Conceptos Fundamentales Un Algoritmo es un conjunto ordenado y finito de pasos o instrucciones que conducen a la solución de un problema. La naturaleza de los problemas varían con el ámbito o con el contexto donde están planteados; así, existen problemas matemáticos, químicos, filosóficos, etc. Según esto la naturaleza de los algoritmos también es variada y no todos ellos pueden ser ejecutados por la computadora. En este curso consideramos aquellos algoritmos que expresan soluciones usando reglas cuantitativas cuyas instrucciones pueden ser introducidas en la computadora, a este tipo de algoritmos se denominan Algoritmos Computacionales. En la resolución de un problema con la computadora la parte pensante esta en el algoritmo. Así pues la eficacia de un programador no esta en conocer la herramienta de programación, cosa necesaria, sino en saber resolver problemas con la computadora para lo cual se requiere conocer un concepto conocido como metodología de la programación cuyo eje central es el algoritmo. Una vez que la solución de un problema ha sido expresada mediante un algoritmo el paso siguiente es convertirlo a programa para lo cual se elige un lenguaje de programación. De modo que un programa resulta ser la implementación de un algoritmo en un determinado lenguaje de programación. Esto significa, por otro lado, que un algoritmo es independiente del lenguaje de programación. Problema, algoritmo y programa Es una relación de pasos que siguen un orden lógico con la finalidad de dar solución a un problema especifico. Durante la construcción de todo algoritmo se debe buscar que éste cumple los siguientes criterios o condiciones. - Entrada. - Salida. - Exactitud - Generalidad Ing. Miguel Angel Machaca 1 Introducción a la Programacion en Visual Basic .NET 2008 Al ser una secuencia de pasos, un algoritmo tiene un principio un final, además de ser finito y general. Cada uno de los pasos son consecuentes; es decir un paso origina otro. Veamos la siguiente grafica para comprender a un algoritmo clásico y sus características. Algoritmo Inicio Paso : 1 Secuencia Paso : 2 Secuencia Paso : 3 Secuencia Final Paso : n El pseudocódigo es una herramienta algorítmica que permite escribir pseudoprogramas (una imitación de un programa real) utilizando un lenguaje de pseudoprogramación que es una imitación de los lenguajes de programación de alto nivel. Así, un pseudocódigo es una combinación de símbolos (+, -, *, /, %, >, >=, <, <=, !=, ==, y, o, no), términos (Leer, Imprimir, Abrir, Cerrar, Hacer...Mientras, Mientras...Hacer, Para...Mientras, etc) y otras características comúnmente utilizadas en uno o más lenguajes de alto nivel. No existen reglas que determinen que es o no es un pseudocódigo, sino que varía de un programador a otro. El objetivo del pseudocódigo es permitir al programador centrarse en los aspectos lógicos de la solución evitando las reglas de sintaxis de un lenguaje de programación. Posteriormente el pseudocódigo debe ser traducido a programa usando un lenguaje de programación de alto nivel como Java, C++, Delphi, etc. Ejemplo. Diseñe un algoritmo para preparar una limonada. INICIO Paso 1: Llenar una jarra con un litro de agua Paso 2: Echar el jugo de tres limones Ing. Miguel Angel Machaca 2 Introducción a la Programacion en Visual Basic .NET 2008 Paso 3: Echar cuatro cucharadas de azúcar Paso 4:Remover el agua hasta disolver completamente el azúcar FIN Ejemplo. Diseñe un algoritmo que permita hallar la suma y el promedio de tres números. INICIO Paso 1: LEER numero1, numero2, numero3 Paso 2: Suma = numero1 + numero2 + numero3 Paso 3: Promedio = suma / 3 Paso 4: IMPRIMIR suma, promedio FIN Notas: El término LEER significa obtener un dato de algún dispositivo de entrada, como el teclado, y almacenarlo en una variable. Una variable es una localización en la memoria que tiene un nombre y cuyo contenido puede cambiar a lo largo de la ejecución de un programa. Así numero1, numero2 y numero3 son variables. El término IMPRIMIR significa mostrar el valor de una variable en algún dispositivo de salida, como la pantalla. Para una explicación más detallada de estos conceptos vea Variables e Instrucciones Básicas de Programación más adelante en este mismo capítulo. En la siguiente pagina realiza los siguientes algoritmos: - Realizar un algoritmo para efectuar una llamada telefónica considerando que deseas llamar por un teléfono monedero. - Realizar un algoritmo para hallar el producto de números enteros en base a suma sucesivas. - Realizar un algoritmo para determinar si un numero es mayor a 100 o menor a este. - Realzar un algoritmo para una actividad cotidiana que tu realizas. Ing. Miguel Angel Machaca 3 Introducción a la Programacion en Visual Basic .NET 2008 Variable: Es una estructura elemental o medio de almacenamiento que soporta o identifica a un determinado tipo de dato, que radica en la RAM. Durante la construcción de un algoritmo, siempre se utilizan variables ya sean para efectuar operaciones, controlar procesos repetitivos o tomar decisiones. Características de una variable. Siempre debe comenzar con una letra (carácter inicial) luego de ella puede ir a - cualquier combinación de letras (A...Z, a...z) o dígitos (0...9) hasta máximo de 255 caracteres. No puede formar parte del nombre de la variable ningún carácter especial (&, #, - @, !, ", -, +, *, /, %, $, ?, ^, {}, [], etc.) excepto un subguión (mi_variable). Se recomienda que en lo posible el nombre de la variable refleje el motivo de - operación que desarrolle. CLASIFICACIÓN DE VARIABLES Por su Ubicación y Uso. - Variables Globales. Son aquellas que pueden ser utilizadas por todos los módulos que componen el programa. Generalmente son declaradas o definidas entes o dentro del módulo principal. - Variables Locales: También denominadas restringidas, porque son utilizadas dentro el modulo en que fueron declaradas. Por el Tipo de Dato que Almacena - Variables Numéricas: Almacenan caracteres numéricos (0...9), en general números reales. - Variables Alfabéticas: Almacenan caracteres alfabéticos MAYÚSCULAS (A...Z) y minúsculas (a...z). - Variables Alfanuméricos: Combinación de los anteriores. Ej. Suma1, Digito_55. TIPOS DE DATOS Los datos son los objetos de información sobre los que actúa un programa. Un dato puede ser un simple carácter como 'a', un valor entero tal como 35, un número real tal Ing. Miguel Angel Machaca 4 Introducción a la Programacion en Visual Basic .NET 2008 como 2.345 o una cadena tal como "algoritmia". En la mayoría de los lenguajes de programación los tipos de datos simples o primitivos se pueden clasificar como: - enteros (dato numérico sin componente decimal y puede ser positivo o negativo). - flotantes (dato numérico con componente decimal y puede ser positivo o negativo). - carácter (un sólo carácter) - booleanos (verdadero o falso) Así, en los lenguajes de programación, existen los siguientes tipos de datos: Clasificación Nombre del Carácter Rango de Valores Permitidos Tipo Char 0 a 65535 Byte -128 a 127 Short -32768 a 32767 Int -2147483648 a 2147483647 Long -9223372036854775808 a -9223372036854775807 Float -3.4 x 10 38 a 3.4 x 10 38 Double -1.7 x 10 308 a 1.7 x 10 308 Entero Real Booleano Boolean true, false También la mayoría de los lenguajes de programación permiten crear tipos compuestos conocidos también como tipos abstractos de datos. Estos son tipos de datos creados por el programador para responder a un problema específico o general, usando para ello los tipos simples u otros tipos abstractos. IDENTIFICADORES Un identificador es un nombre que puede darse a una variable, a una constante y en general a cualquier elemento de un programa que necesite nombrarse. Ing. Miguel Angel Machaca 5 Introducción a la Programacion en Visual Basic .NET 2008 Una variable tiene asociada dos cosas fundamentales: un identificador y un tipo de dato. El nombre identifica de manera única la localización de memoria donde se almacena el dato. El tipo de dato especifica la naturaleza del dato que puede almacenar la variable. Según el tipo de dato de la variable podemos tener variables enteras, variables reales, variables de carácter, variables booleanas, etc. En el gráfico siguiente se muestran dos variables con sus contenidos en memoria. La variable llamada Edad (de tipo entero) cuyo contenido es 27 y la variable llamada Descuento (de tipo real) cuyo contenido es 23.57. Ing. Miguel Angel Machaca Edad 301 Descuento 23.57 6 Introducción a la Programacion en Visual Basic .NET 2008 TEMA 10 PROGRAMACIÓN ESTRUCTURADA Una estructura secuencial es aquella en la que las instrucciones están una a continuación de la otra siguiendo una secuencia única, sin cambios de ruta. La estructura secuencial tiene una entrada y una salida. En la Figura se muestra el diagrama de flujo y el pseudocódigo de una estructura secuencial. Diagrama de Flujo Pseudocódigo Inicio . . acción 1 acción 2 acción 3 . . Fin Estructura Secuencial: Diagrama de Flujo y Pseudocódigo Ejercicios: Ejercicio 1:- Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere las siguientes fórmulas: area = base x altura, perimetro = 2 x (base+altura). INICIO REAL base, altura, area, perimetro LEER base, altura area = base*altura perimetro = 2*(base+altura) IMPRIMIR area, perimetro FIN Ing. Miguel Angel Machaca 7 Introducción a la Programacion en Visual Basic .NET 2008 Ejercicio 2:- Diseñe un pseudocódigo para convertir una longitud dada en centímetros a pies. Considere que: 1 pie = 30.48 centímetros. INICIO REAL cpies, ccent LEER ccent cpies = ccent/30.48 IMPRIMIR cpies FIN Ejercicio 3:- Una institución benéfica europea ha recibido tres donaciones en soles, dólares y marcos. La donación será repartida en tres rubros: 60% para la implementación de un centro de salud, 40% para un comedor de niños y el resto para gastos administrativos. Diseñe un algoritmo que determine el monto en euros que le corresponde a cada rubro. Considere que: 1 dólar = 3.52 soles, 1 dólar = 2.08 marcos, 1 dólar = 1.07 euros. INICIO REAL c soles, cdolares, c marcos, ceuros, rubro1, rubro2, rubro3 LEER csoles, cdolares, cmarcos // Determina el total en euros ceuros = (csoles/3.52 + cdolares + cmarcos/2.08)*1.07 // Determina el monto de cada rubro rubro1 = ceuros*0.60 rubro2 = ceuros*0.40 rubro3 = ceuros*0.20 IMPRIMIR rubro1, rubro2, rubro3 FIN Ing. Miguel Angel Machaca 8 Introducción a la Programacion en Visual Basic .NET 2008 REPRESENTACIÓN MEDIANTE DIAGRAMAS DE FLUJO Concepto. Un Diagrama de Flujo, es la Representación grafica de un algoritmo. En este texto, los símbolos gráficos que utilizaremos son los siguientes SÍMBOLO DESCRIPCIÓN Inicio o Final Lectura o Entrada de Datos Proceso Secuencial o Asignación Salida por Pantalla de Textos y Resultados Entrada de Datos por teclado Conector de Procesos Interno Conector de Procesos Externo Toma de Decisiones Flujo de Datos Multidocumentos Ing. Miguel Angel Machaca 9 Introducción a la Programacion en Visual Basic .NET 2008 Ejemplo: Utilizando las anteriores figuras representemos el siguiente ejercicio. Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere las siguientes fórmulas: area = base x altura, perimetro = 2 x (base+altura). ALGORITMO INICIO REAL base, altura, area, perimetro LEER base, altura area = base*altura perimetro = 2*(base + altura) IMPRIMIR area, perímetro FIN Diagrama de Flujo inic io base, altura, area, perim etro PRUEBA DE ESCRITORIO base, altura area = bas e * altura base altura área perímetro pantalla 5 10 50 30 "100" 10 12 120 44 "44" 10,5 5,5 57.75 32 "32.0" perim etro = 2 * (base + altur a) area, perim etro fin Ing. Miguel Angel Machaca 10 Introducción a la Programacion en Visual Basic .NET 2008 1. Hacer leer S en segundos, convertir a minutos y horas. Desplegar resultados. Public Class Ej_3 Private Sub Button2_Click(ByVal... Button2.Click End End Sub Private Sub Button1_Click(ByVal... Button1.Click Dim s, min, hor As Long s = Val(TextBox1.Text) min = s / 60 hor = min / 60 TextBox2.Text = CStr(min) TextBox3.Text = CStr(hor) End Sub End Class Ing. Miguel Angel Machaca 11 Introducción a la Programacion en Visual Basic .NET 2008 2. Hacer leer un número X, hallar su cuadrado, cubo, raíz cuadrada, raíz cúbica. Desplegar resultados. Public Class Ej_5 Private Sub Button1_Click(ByVal... Button1.Click Dim x, cua, cubo, rac, racub As Long x = Val(TextBox1.Text) cua = x * x cubo = x * x * x rac = x ^ (1 / 2) racub = x ^ (1 / 3) TextBox2.Text = CStr(cua) TextBox3.Text = CStr(cubo) TextBox4.Text = CStr(rac) TextBox5.Text = CStr(racub) End Sub Private Sub Button2_Click(ByVal... Button2.Click End End Sub End Class Ing. Miguel Angel Machaca 12 Introducción a la Programacion en Visual Basic .NET 2008 3. Desarrollar una aplicación que permita calcular la velocidad de un Móvil cuando se conoce el espacio recorrido y el tiempo. La formula es V=e/t. Public Class frmvelocidad Dim espacio, tiempo, velocidad As Single Private Sub cmdcalcular_Click(... cmdcalcular.Click espacio = Val(txtespacio.Text) tiempo = Val(txttiempo.Text) a = Convert.ToInt32(TextBox1.Text) Dim a As Integer = Convert.ToInt32(TextBox1.Text) velocidad = espacio / tiempo txtvelocidad.Text = velocidad.ToString & " m/s" lblvelocidad.Visible = True txtvelocidad.Visible = True End Sub Private Sub cmdnuevo_Click(... cmdnuevo.Click txtespacio.Text = "" txttiempo.Text = "" txtvelocidad.Text = "" End Sub End Class Ing. Miguel Angel Machaca 13 Introducción a la Programacion en Visual Basic .NET 2008 4. Hacer leer G grados, M minutos y S segundos convertir a radianes y desplegar el resultado. Public Class Ejer1a Private Sub btnNuevo_Click(... btnNuevo.Click txtGrado.Clear() txtMin.Clear() txtSeg.Clear() txtResultado.Clear() txtGrado.Focus() End Sub Private Sub btnConvertir_Click(... btnConvertir.Click Dim grado As Integer = Convert.ToInt32(txtGrado.Text) Dim min As Integer = Convert.ToInt32(txtMin.Text) Dim seg As Integer = Convert.ToInt32(txtSeg.Text) Dim res As Double res = ((seg * min) / 3600) + grado res = (res * Math.PI) / 180 txtResultado.Text = res.ToString End Sub Ing. Miguel Angel Machaca 14 Introducción a la Programacion en Visual Basic .NET 2008 Private Sub txtGrado_KeyPress(... txtGrado.KeyPress If Asc(e.KeyChar) = 13 And txtGrado.TextLength > 0 Then txtMin.Focus() Exit Sub End If VerificaValor(e) End Sub Private Sub txtMin_KeyPress(... txtMin.KeyPress If Asc(e.KeyChar) = 13 And txtMin.TextLength > 0 Then txtSeg.Focus() Exit Sub End If VerificaValor(e) End Sub Private Sub txtSeg_KeyPress(... txtSeg.KeyPress If Asc(e.KeyChar) = 13 And txtSeg.TextLength > 0 Then btnConvertir.Focus() Exit Sub End If VerificaValor(e) End Sub Sub VerificaValor(ByVal x As System.Windows.Forms.KeyPressEventArgs) If Asc(x.KeyChar) = 8 Or Asc(x.KeyChar) = 46 Then Exit Sub End If If Asc(x.KeyChar) < 48 Or Asc(x.KeyChar) > 57 Then x.Handled = True MessageBox.Show("Solo se permiten Numeros", "Error de datos") End If End Sub End Class Ing. Miguel Angel Machaca 15 Introducción a la Programacion en Visual Basic .NET 2008 5. Hacer leer un número X, hallar su cuadrado, cubo, raíz cuadrada, raíz cúbica. Desplegar resultados. Public Class Ejer2a Private Sub btnNuevo_Click(... btnNuevo.Click txtnumero.Clear() LTResultado.Items.Clear() txtnumero.Focus() End Sub Private Sub btnCalcular_Click(... btnCalcular.Click Dim numero As Double = Convert.ToDouble(txtnumero.Text) Dim res As Double res = Math.Pow(numero, 2) LTResultado.Items.Add("Cuadrado => " & res.ToString) res = Math.Pow(numero, 3) LTResultado.Items.Add("Cubo => " & res.ToString) res = Math.Sqrt(numero) LTResultado.Items.Add("Raíz Cuadrada => " & res.ToString) res = Math.Pow(numero, (1 / 3)) LTResultado.Items.Add("Raíz Cúbica => " & res.ToString) End Sub Ing. Miguel Angel Machaca 16 Introducción a la Programacion en Visual Basic .NET 2008 Private Sub txtnumero_KeyPress(... txtnumero.KeyPress If Asc(e.KeyChar) = 13 And txtnumero.TextLength > 0 Then btnCalcular.Focus() Exit Sub End If VerificaValor(e) End Sub Sub VerificaValor(ByVal x As System.Windows.Forms.KeyPressEventArgs) If Asc(x.KeyChar) = 8 Or Asc(x.KeyChar) = 46 Then Exit Sub End If If Asc(x.KeyChar) < 48 Or Asc(x.KeyChar) > 57 Then x.Handled = True MessageBox.Show("Solo se permiten Numeros", "Error de datos") End If End Sub End Class Ing. Miguel Angel Machaca 17