UNIVERSIDAD PRIVADA “SAN PEDRO” ESCUELA PROFESIONA DE INGENIERIA INFORMATICA Y DE SISTEMAS CICLO I ESTRUCTURA DE DATOS Y ALGORITMOS Docentes: Ingº Oscar Ascón Valdivia Chimbote 2007 Ing. Oscar Ascón Valdivia 1 LOS SISTEMAS DE PROCESAMIENTO DE LA INFORMACIÓN Datos: Se refiere a la representación de algún hecho, concepto o entidad real los datos pueden tomar diferentes formas; por ejemplo: palabras escritas o habladas, números, dibujos, etc. Información: Implica datos procesados y organizados. Sistema: Es un conjunto de componentes conectados e interactivos, que tienen propósito y una unidad total. un Sistema de procesamiento de información: Es un sistema que transforma datos brutos en información organizada, significativa y útil. Entrada de datos Procesador Salida de información Hardware: Conjunto de componentes físicos en una computadora. El Hardware de una computadora se compone de : 1. Unidad central de procesamiento. 2. Memoria central 3. Dispositivos de almacenamiento secundario. 4. Periféricos o dispositivos de entrada / salida. Software: Conjunto de programas que controlan el funcionamiento de una computadora. Dispositivos de E/S Memoria central Almacenamiento Sec. Unidad Central de Proceso Diagrama de una computadora Ing. Oscar Ascón Valdivia 2 Concepto de algoritmo: Describe la secuencia ordenada de pasos que conducen a la solución de un problema dado. La resolución de un programa exige el diseño de un algoritmo que resuelve el problema propuesto. Problema Diseño del algoritmo Programa de computadora Los pasos para la solución de un problema son: 1. Diseño de algoritmo que describe la secuencia ordenada de pasos, que conducen a la solución de un problema dado. 2. Expresar el algoritmo como un programa en un lenguaje de programación adecuado. 3. Ejecución y validación del programa por la computadora. Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como de la computadora que se ejecuta. Características: • Debe de ser preciso e indicar el orden de realización de cada paso. • Un algoritmo debe de estar definido. Obtener el mismo resultado • Un algoritmo debe de ser finito. La definición de un algoritmo debe de describir tres partes: Entrada, proceso y salida. Ejemplo: Diseñar un algoritmo para obtener la ultima cifra de un numero ingresado por teclado.. 1. Inicio. 2. Introducir un numero, Num. 3. Modulo de Num con 10, X=Num mod 10 4. Imprimir X, como resultado 5. Fin Ejemplo: Num= 245 1. Inicio 2. Ingresar 225 3. X= 225 mod 10 4. Imprimir X 5. Fin Ing. Oscar Ascón Valdivia 3 Ejemplo: I. Diseñar un algoritmo que calcule el promedio de 2 notas. 1. 2. 3. 4. 5. 6. II. Diseñar un algoritmo que calcule el subtotal, total y el IGV, dado el precio y la cantidad. 1. 2. 3. 4. 5. 6. 7. 8. TIPOS DE DATOS El primer objetivo de toda computadora es el manejo de la información o datos. Un dato es la expresión general que describe los objetos con los cuales opera una computadora. Los tipos de datos simples son los siguientes: • Numérico (Integer, real) • Lógicos (Bolean) • Carácter (char, string) Datos Numéricos: Es el conjunto de valores numéricos. Estos pueden representarse en dos formas distintas: • Numero entero (Integer) • Numero real (real) Enteros: Es un subconjunto finito de los números enteros. Los enteros son números completos, no tienen componentes fraccionarios o decimales y pueden ser negativos o positivos. Los números enteros máximos y mínimos de una computadora suelen ser –32768 a +32767. Ing. Oscar Ascón Valdivia 4 Reales: Es un subconjunto de los números reales. Los números reales siempre tienen un punto decimal y pueden ser positivos y negativos. Un numero real consta de un entero y una parte decimal. Datos Lógicos: También denominado booleano es aquel dato que puede tomar uno de 2 valores: Verdadero – Falso. Ejemplo: Cuando se pide si un valor entero es positivo, la respuesta será verdadera o falsa. Datos Carácter: El tipo carácter es el conjunto finito y ordenado de caracteres que la computadora reconoce, un dato tipo carácter contiene un solo carácter. Tipos de carácter: • Carácter Alfabético: A, B, C, D, .... Z • Carácter Numéricos: 0, 1, 2, 3, ...9 • Caracteres Especiales: +, -, *, =, /, %, #... Una cadena (String) de caracteres es una sucesión de caracteres que se encuentra delimitados entre unas comillas, la longitud de caracteres esta comprendida entre los separadores. Datos Numérico Entero Ing. Oscar Ascón Valdivia Carácter Lógico Real 5 Tipos en C# C# es un lenguaje de tipeado seguro (o fuertemente tipado) lo cual quiere decir que el programador debe definir a que tipo pertenece cada pedazo de información o cada objeto que se crea. Los tipos básicos no son más que alias para tipos predefinidos en la librería base de la plataforma .NET. Así, el tipo número entero (que se representa con la palabra clave int), no es más que una forma rápida de escribir System.Int32. Los tipos por valor difieren de los tipos por referencia en que las variables de los tipos por valor contienen directamente su valor, mientras que las variables de los tipos por referencia almacenan la dirección donde se encuentran los objetos, es por eso que se las llaman referencias. Más adelante describiremos como funcionan cada una de estas categorías. Tipos básicos o internos Los tipos básicos como hemos dicho son espacios predefinidos y categorizados donde se almacena información. En C# tenemos los siguientes tipos internos: Tipo C# Nombre para plataforma .NET bool System.Boolean 1 true o false (verdadero o falso en inglés) byte System.Byte 1 0 hasta 255 sbyte System.SByte 1 -128 hasta 127 short System.Int16 2 -32.768 hasta 32.767 ushort System.Uint16 2 0 hasta 65535 int System.Int32 4 -2.147.483.648 hasta 2.147.483.647 uint System.Uint32 4 0 hasta 4.394.967.395 long System.Int64 8 -9.223.372.036.854.775.808 9.223.372.036.854.775.807 ulong System.Uint64 8 0 hasta 18446744073709551615 float System.Single 4 Approximadamente ±1.5E-45 hasta ±3.4E38 con 7 cifras significativas double System.Double 8 Approximadamente ±5.0E-324 ±1.7E308 con 7 cifras significativas decimal System.Decimal 12 Approximadamente ±1.0E-28 hasta ±7.9E28 con 28 ó 29 cifras significativas char 2 Cualquier carácter Unicode (16 bits) System.Char la Bytes utilizados Valores que soporta hasta hasta int sueldo; string nombre; Ing. Oscar Ascón Valdivia 6 CONSTANTES Y VARIABLES Constantes: Es una partida de datos que permanecen sin cambios durante todo el desarrollo del algoritmo o durante la ejecución del programa. Constantes tipo numérico: Entero 31025 125 2 Real 0.258 158.25 782156 Constantes tipo carácter, cadena: ‘A’, ‘B’ ‘ISTP, ‘Computación e Informática’ Constantes lógicas (boleen) Verdadero, Falso. const int mes = 30; const string nombre = "Oscar Ascón"; Variables: Es un objeto o partida de datos cuyo valor puede cambiar durante el desarrollo del algoritmo o ejecución del programa. Dependiendo del lenguaje hay diferentes tipos de variables, tales como enteros, reales, carácter, lógico y de cadena. Una variable que es de un cierto tipo, pueden tomar valores de este tipo. Ejemplos (C#) int X, Y; float A, B; char R; X=20 Y=30250 A=7.325 B=0.0258 R=’A’ Para la solución de problemas con computadoras se puede dividir en 3 fases: • Análisis del problema • Diseño del algoritmo • Solución del algoritmo en la computadora. Ing. Oscar Ascón Valdivia 7 Análisis del problema: Análisis del Problema Definición del Problema Especificaciones de Entrada Especificaciones de Salida Diseño de Algoritmos: Suma de dos números Entrada de datos Calcula la suma Salida de resultados Entrada n1, n2. S= A+B Salida A, B, S Ing. Oscar Ascón Valdivia 8 Estructura de un Programa en C# using System; using System.Collections.Generic; using System.Text; namespace Ejemplo1 //Nombre del Programa { class Program // Nombre de la Clase { static void Main(string[] args) { System.Console.Write("Universidad Privada San Pedro"); System.Console.Write("Ingenieria Informatica y de Sistemas"); System.Console.ReadKey(); } } } Ing. Oscar Ascón Valdivia Cuerpo del Programa 9 CASOS PRÁCTICOS 1. Implementar un programa que permita calcular el IGV usando constantes, dado el precio y la cantidad static void Main(string[] args) { DECLARACION DE VARIABLES int c; double p, st, t; DECLARACION DE CONSTANTES const double igv = 0.19; MOSTRAR TITULOS System.Console.WriteLine ("Ingresar Precio:"); LEER VALOR p = Convert.ToDouble( Console.ReadLine ()); System.Console.WriteLine("Ingresar Cantidad:"); c = Convert.ToInt16(Console.ReadLine()); REALIZAR OPERACIONES st = p * c; t = st + st * igv; MOSTRAR RESULTADOS Console.WriteLine("Sub Total:{0} ", st); Console.WriteLine("Total:{0} ", t); System.Console.ReadKey(); } 2. Implementar un programa que permita la declaración de los diferentes tipos de variables static void Main(string[] args) { int edad; double sueldo; char sexo; string nombre; DateTime fecha; Console.WriteLine("Ingresar Nombre"); nombre =Convert.ToString (Console.ReadLine()); Console.WriteLine("Ingresar Sexo (M / F)"); sexo =Convert.ToChar ( Console.ReadLine()); Console.WriteLine("Ingresar Sueldo"); Ing. Oscar Ascón Valdivia 10 sueldo =Convert.ToDouble( Console.ReadLine()); Console.WriteLine("Ingresar Edad"); edad =Convert.ToInt16( Console.ReadLine()); Console.WriteLine("Ingresar Fecha"); fecha=Convert.ToDateTime(Console.ReadLine()); Console.ReadKey(); } 3. Desarrollar un programa que permita sumar 2 números static void Main(string[] args) { int n1,n2,s; System.Console.WriteLine("Ingresar Numero1:"); n1 = Convert.ToInt16 (Console.ReadLine()); System.Console.WriteLine("Ingresar Numero2:"); n2 = Convert.ToInt16(Console.ReadLine()); s = n1 + n2; Console.WriteLine("Suma:{0} ", s); System.Console.ReadKey(); } PRACTICA Desarrollar los siguientes problemas: Código: C# 1. Calcular la superficie de un circulo (S=pi * R2) 2. Calcular el perímetro de la superficie de un rectángulo dadas la base y altura del mismo. (S=Base * Altura; P=2 * (base + altura)) 3. Calcular el área de un cuadrado. 4. Calcular el valor de Y=X2 5. Calcular el valor de Y=(X2-X) / 2 6. Calcular la multiplicación de dos números. 7. Calcular la división de dos números 8. Calcular el modulo de dos números. Ing. Oscar Ascón Valdivia 11 REPRESENTACIÓN GRAFICA DE LOS ALGORITMOS Los métodos usuales para representar un algoritmo son: 1. Diagrama de flujo 2. Diagrama N – S (Nassi – Schneiderman) 3. Pseudocódigo 4. Lenguaje español 5. Formulas Diagrama de Flujo: Es una de las técnicas de representación de algoritmos mas antiguas y a la vez más utilizada. Un diagrama de flujo es un diagrama que utiliza los símbolos estándar unidas por flechas denominadas líneas de flujo que indican la secuencia que se debe ejecutar. Símbolos Principales Función Terminal: Representa el inicio o fin de un programa Entrada / Salida, cualquier tipo de datos introducidos a la memoria desde los periféricos (entrada), o registro de información procesada en un periférico (salida) Proceso: Cualquier tipo de operación que pueda originar cambio de valor, formato o posición de la información almacenada en memoria. Decisión: Indica operaciones lógicas o de comparación entre datos, normalmente tiene dos salida si, no. Decisión múltiple: En función del resultado de la comparación se seguirá uno de los diferentes caminos de acuerdo con dicho resultado. Conector: Sirve para enlazar dos partes cuales quiera de un ordinograma a través de un conector en la salida y otro conector en la entrada. Línea de flujo: Indica el sentido de la ejecución de las operaciones. Línea conectora: Sirve de unión entre dos símbolos Conector: Conexión entre dos puntos del organigrama situado en paginas diferentes. Llamada a sub rutina o a un proceso predeterminado. Ing. Oscar Ascón Valdivia 12 Ejemplos: • Sumar dos numero y mostrar el resultado Inicio Leer Sumaß A+B Imprimir Fin Diagramas N – S: Es como un diagrama de flujo donde se omiten las flechas de unión y las cajas son contiguas. Las acciones sucesivas se escriben en cajas sucesivas y, como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja Ejemplo: Nombre del algoritmo Acción 1 Acción 2 Acción n Pseudocódigo: Es un lenguaje de especificación de algoritmos, el uso de tal lenguaje hace el paso de codificación final relativamente fácil. El pseudocódigo original utiliza para representar las acciones sucesivas palabras reservadas en ingles similares a sus homonimias en los lenguajes de programación. Ejemplo: • Calcular el salario neto semanal de un trabajador en función al número de horas trabajadas y la tasa de impuesto. Ing. Oscar Ascón Valdivia 13 Pseudocódigo: Inicio Leer nombre, horas, pre_hora Sal_Brutoß horas * precio_horas Tasaß 0.30*sal_bruto Sal_netoß sal_bruto – tasa Visualizar Nombre, Sal_bruto, Tasa, Sal_neto. Fin Diagrama flujo Inicio Ingresar horas, sal_ horas, tasa Sal_brutoßhoras*sal_horas Tot_impß sal_bruto*tasa Sal_netoß sal_bruto-tot_imp Visualizar sal_bruto, tasa, sal_neto Fin N–S Inicio Ingresar horas, sal_horas, tasas Sal_brutoß horas * sal_horas Tot_impß sal_bruto- tasa Sal_netoß sal_bruto – tot_imp fin Ing. Oscar Ascón Valdivia 14 ESTRUCTURAS DE PROGRAMACIÓN Estructura Secuencial: La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso Diagrama de Flujo N Acción 1 Acción 1 Acción 2 Acción 2 . . . Acción 3 S Acción N Ejemplo: Calcular la suma, resta, multiplicación, división de dos números. (Diagrama Flujo, N-S, Pseudocódigo). Pseudocodigo Inicio Leer un numero A Leer un numero B Suma S. SßA + B Producto P. PßA * B Escribir S,P Fin Diagrama de Flujo Inicio Leer A Leer B S= A + B P= A * B Escribir S, P Fin Ing. Oscar Ascón Valdivia 15 • Implementacion del Programa en C# using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { static void Main(string[] args) { int n1,n2; int s, r, m, d; Console.WriteLine("Ingresar numero 1: "); n1 = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Ingresar numero 2: "); n2 = Convert.ToInt16(Console.ReadLine()); s = n1 + n2; r = n1 - n2; m = n1 * n2; d = n1 / n2; Console.WriteLine("Suma={0}", s); Console.WriteLine("Resta={0}", r); Console.WriteLine("Multiplicacion={0}", m); Console.WriteLine("Division={0}", d); Console.ReadKey(); } } } Practica 1. Desarrollar los siguientes diagramas de Flujos (Pseudocodigo), implementarlos en el Lenguaje de Programación C# a. Calcular el salario neto de un trabajador en función del numero de horas trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en concepto de impuestos 20%. b. Calcular el monto neto a pagar a telefónica, teniendo en cuenta que se tienen 2 tipos de llamadas (Local =0.5, Nacional = 2), debe de permitir ingresar el total de minutos de llamadas locales y nacionales. Ing. Oscar Ascón Valdivia 16 Estructura Selectiva Se utiliza para tomar decisiones lógicas; de ahí que se suelan denominar también estructuras de selección o alternativas. En las estructuras selectivas se evalúa una condición y y en función del resultado de la misma se realiza una opción u otra. Las estructuras selectivas o alternativas pueden ser: • • • Simple Dobles Múltiples Alternativa Simple (Si - entonces, If Then) La estructura selectiva simple si – entonces (If – Then) ejecuta una determinada acción cuando se cumple una determinada condición. • • Si la condición es verdadera, entonces ejecuta la acción SI Si la condición es falsa, entonces no hacer nada Diagrama Flujo N - S V ¿Condición? Condición Pseudocódigo F Si (condición) entonces Acción 1 Acción 2 Fin si Acción 1 Alternativa Doble (Si - entonces – Si no, If - Then - Else ) • Si la condición C es verdadera, se ejecuta la acción SI, y si es falsa se ejecuta la acción S2 Ing. Oscar Ascón Valdivia 17 Diagrama Flujo N - S V Pseudocódigo Condición F ¿Condición? Acción 1 Si (condición) entonces Acción 1 Sino Acción 2 Fin si Acción 2 Acción S2 Acción S1 Ejemplo: Ingresar un numero e indicar si el numero es positivo o negativo. Pseudocodigo Inicio Leer N Si (N>0) Entonces Escribir N es positivo Sino Escribir N es negativo Fin Diagrama de Flujo Inicio Leer N Falso N>0 Escribir N Negativo Verdadero Escribir N Positivo Fin Ing. Oscar Ascón Valdivia 18 using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { static void Main(string[] args) { int n; Console.WriteLine("Ingresar numero: "); n = Convert.ToInt16(Console.ReadLine()); if (n > 0) { Console.WriteLine("Es Numero positivo {0}", n); } else { Console.WriteLine("Es Numero negativo {0}", n); } Console.ReadKey(); } } } Practica 1. Calcular el total de un articulo dado el precio y la cantidad, si el total es mayor que 50 tiene un descuento de 15%. 2. Dada tres notas calcular el promedio; si el promedio es <= 10.5 la condición es jalado, si el promedio<=14 la condición es Bueno, caso contrario la condición es Excelente. 3. Identificar si el numero ingresado es par o impar. 4. Ingresar un numero e indicar si el numero es mayor que 50 5. Los trabajadores de una fabrica de automóviles tienen tres turnos: Mañana, Tarde y Feriados; se desea calcular el sueldo semanal a razón de 5 días de trabajo de las Siguientes tarifas: 50 S/. Turno Mañana 60 S/. Turno Tarde 100 S/. Turno Feriado 6. Ingresar un numero e indicar si el numero es igual a “Cero”, mayor que cero o menor que cero. 7. Ingresar un numero e indicar si el numero es positivo o negativo, además debe mostrar si el numero es par o impar. Ing. Oscar Ascón Valdivia 19 Alternativa múltiple. La estructura de decisión múltiple evaluara una expresión que podrá tomar n valores distintos 1, 2, 3, 4, 5, ….n. Según que elija uno de estos valores en la condición, se realizara una de las n acciones. Diagrama Flujo N - S 1 2 A2 Case expresión E1: acción 1 E2: Acción 2 Otherwise Acción x End case Condición Cond A1 Pseudocódigo A3 3 n An Ejemplo: Ingresar un Numero del 1 al 12 e indicar el mes que le corresponda. Inicio Leer N 1 N 2 11 Enero Febrero …………… 12 Noviembre Diciembre Fin Ing. Oscar Ascón Valdivia 20 using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { static void Main(string[] args) { int n; Console.WriteLine("Ingresar numero del Mes: "); n = Convert.ToInt16(Console.ReadLine()); switch (n) { case 1: Console.WriteLine("El mes {0} es Enero", n); break; case 2: Console.WriteLine("El mes {0} es Febrero", n); break; case 3: Console.WriteLine("El mes {0} es Marzo", n); break; case 4: Console.WriteLine("El mes {0} es Abril", n); break; case 5: Console.WriteLine("El mes {0} es Mayo", n); break; case 6: Console.WriteLine("El mes {0} es Junio", n); break; case 7: Console.WriteLine("El mes {0} es Julio", n); break; case 8: Console.WriteLine("El mes {0} es Agosto", n); break; case 9: Console.WriteLine("El mes {0} es Setiembre", n); break; case 10: Console.WriteLine("El mes {0} es Octubre", n); Ing. Oscar Ascón Valdivia 21 break; case 11: Console.WriteLine("El mes {0} es Noviembre", n); break; case 12: Console.WriteLine("El mes {0} es Diciembre", n); break; } Console.ReadKey(); } } } Practica 1. Diseñar un menu que muestre las operaciones aritméticas y haga los cálculos correspondientes. 2. Desarrollar un programa que muestre un menú con cuatro opciones diferentes, cada opción debe realizar una operación. 3. Desarrollar un algoritmo que permita ingresar el salario de un trabajador e identificar que cargo tiene. Salario >2500 à Gerente Salario <=1500 à Jefe Salario <1000 à Maestro Salario <=700 à Operario Ing. Oscar Ascón Valdivia 22 Estructuras Repetitivas: Las estructuras que repiten una secuencia de instrucciones un número determinada de veces se denominan bucles, y se determinan iteración al hecho de repetir la ejecución de una secuencia de acciones. • • • Mientras (While) Repetir (Repeat) Desde (For) Estructuras Mientras (While) Es aquella en el que el cuerpo del bucle se repite mientras se cumple una determinada condición. Diagrama flujo Cond. N–S Mientras N Pseudocódigo Condición Acción S Mientras (condición) hacer Acción 1 Acción 2 Acción n Fin Mientras Acción Ejemplo: Contar los números enteros positivos, el cálculo se realiza cuando se ingresa un número negativo. Inicio Cß0 Leer N N>0 no si Leer N CßC+1 Escribir C Fin Ing. Oscar Ascón Valdivia 23 Estructura repetir (Repeat) La estructura repetir se ejecuta hasta que se cumpla una condición determinada que se comprueba al final del bucle. Diagrama Flujo N –S Pseudocódigo Repetir Acción 1 Acción 2 Hasta que (condición) Acción Acción Cond. Repetir condición Ejemplo: Calcular el factorial de un número N, que responde a la formula: N! = N(N-1) (N-2) …….. 3 x 2 x 1 Inicio Leer N Factorial =1 I =1 Factorial=factorial * I I=I+1 N >= I No Escribir Factorial Fin Ing. Oscar Ascón Valdivia 24 • While using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { static void Main(string[] args) { int n,c; c=0; Console.WriteLine("Ingresar numero: "); n = Convert.ToInt16(Console.ReadLine()); while (n >=0) { c = c + 1; Console.WriteLine("Ingresar numero: "); n = Convert.ToInt16(Console.ReadLine()); } Console.WriteLine("Total Numeros={0}", c); Console.ReadKey(); //Console.ReadKey(); } } } • Do While using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { static void Main(string[] args) { int n, factorial, i; Console.WriteLine("Ingresar numero: "); n = Convert.ToInt16(Console.ReadLine()); Ing. Oscar Ascón Valdivia 25 factorial = 1; i = 1; do { factorial = factorial * i; i = i + 1; } while (n >= i); Console.WriteLine("Factorial={0}", factorial); Console.ReadKey(); } Console.ReadKey(); } } } Practica 1. Diseñar un algoritmo que permita Ingresar dos números y sumarlos, debe de mostrar mensaje de continuar S/N 2. Diseñar un algoritmo que permita Ingresar Números , el programa termina cuando se ingresa el numero Cero 3. Diseñar un algoritmo que permita Ingresar números; dada la cantidad de números. 4. Diseñar un algoritmo que permita Calcular el promedio dada una cantidad de números 5. Diseñar un algoritmo que permita Contar y sumar cuantos números pares e impares se ingresa; dada una cantidad de números 6. Diseñar un algoritmo que permita Contar y sumar cuantos números positivos y negativos s e ingresan; dada la cantidad de números. 7. Diseñar un algoritmo que permita Ingresar números, e identificar cuantos son múltiplos de Cinco, termina cuando se ingresa el numero cero. Ing. Oscar Ascón Valdivia 26 Estructura desde / para (for) En muchas ocasiones se conoce de antemano el numero de veces que se desean ejecutar las acciones de un bucle. En estos casos en el que el numero de iteraciones es fija, se debe usar la estructura desde Pseudocódigo Desde vß vi hasta vf [incremento / decremento] Acción 1 Acción n Fin desde Diagrama de flujo Inicio Var i,n,c Ii= Acciones Imp. c Fin N- S Desde V_indß V_ini hasta V_fin [Inc / Dec] Acciones Fin desde Ing. Oscar Ascón Valdivia 27 Ejemplo: Calcular la suma de los N primeros números. (Ingresar número por teclado) Inicio Leer N S= 0 Ii= I <= N I=1I= I+ 1 w I=I+1 S= S + I Escribir S Fin Ing. Oscar Ascón Valdivia 28 using System; using System.Collections.Generic; using System.Text; namespace Factorial { class Program { static void Main(string[] args) { int n,i,s; s = 0; Console.WriteLine("Ingresar numero: "); n = Convert.ToInt16(Console.ReadLine()); for (i = 1; i <= n; i++) { s = s + i; } Console.WriteLine("Suma Numeros={0}",s); Console.ReadKey(); } } } Practica 1. Implementar un algoritmo que permita Ingresar una Cantidad de Números, conociendo el limite. 2. Implementar un algoritmo que permita identificar los números pares e impares, de 1 hasta el numero ingresado. 3. Implementar un algoritmo que permita mostrar la suma de los números pares menores o iguales a el, y la suma los numero impares. Ing. Oscar Ascón Valdivia 29 Bucles: Un bucle es un segmento de un algoritmo o programa, cuyas instrucciones se repiten un número determinado de veces mientras se cumple una determinada conexión. Leer N Si .. N=0 No Escribir S S=S+N Fin Contadores: es una variable cuyo valor se incrementa o decrementa en una cantidad constante en cada iteración. Contß 1 Cont>5 Cuerpo del bucle Fin Contß cont+1 Acumulador: Es una variable cuya misión es almacenar cantidades variables resultantes de sumas sucesivas. Nß 0 Sumaß0 NßN+1 SumaßSuma+N N=K? Escribir Suma Fin Ing. Oscar Ascón Valdivia 30 PRACTICA Desarrollar los diagramas de Flujos e Implementarlo en C# 1. Escribir un algoritmo que lea tres notas y calcule el promedio de las notas. Promedio=(n1+n2+2*n3)/4. 2. Escribir un algoritmo en donde se ingrese los días trabajados, y se calcule el sueldo neto, el sueldo = días trabajados por jornal día menos el descuento. (El jornal día =30, el descuento afp=11% del sueldo). 3. Escribir un algoritmo que lea un numero y escriba su cuadrado. 4. Escribir un algoritmo que exprese en horas, minutos y segundos un tiempo expresado en segundos. 5. Diseñar un algoritmo que realice la siguiente conversión: una temperatura dada en grados Celsius a grados Fahrenheit. ( F = (9/5) C + 32 ). 6. Escribir un algoritmo que obtenga la ultima cifra de un numero. 7. Escribir un algoritmo donde se ingrese un numero. 8. Escribir un algoritmo que lea un numero e indique si el numero es positivo o negativo. 9. Escribir un algoritmo que calcule el sueldo de un empleado dados los días trabajados y el jornal diario; si el sueldo es mayor que 1000, entonces tiene un descuento del 10% caso contrario no hay ningún descuento. 10. Escribir un algoritmo que calcule las nota promedio de un alumno dadas dos notas, si el promedio es mayor o igual a 10.5 entonces mostrar “aprobado”, caso contrario mostrar “Jalado”. 11. Escribir un algoritmo que lea un numero e indique si el numero es par o impar. 12. Escribir una algoritmo que lea dos números e indique cual es el mayor y cual es el menor. 13. Escribir un programa que al ingresar un numero adivine el numero mágico (Numero mágico es una constante del programa), si el numero ingresado es igual al numero mágico entonces reportar “numero correcto”, caso contrario si el numero es mayor, reportar “numero demasiado grande”, caso contrario “numero demasiado pequeño”. 14. Calcular el factorial de un numero N, utilizando la estructura desde 15. Imprimir las 20 primeras potencias de 4, es decir, 4 elevado a la 1, 4 elevado a 2,.… 16. Calcular la suma de los N primeros números utilizando Mientras 17. Diseñar un algoritmo para imprimir la suma de los números impares menores o iguales que N. 18. Realizar el algoritmo para obtener la suma de los números pares hasta 500 inclusive. 19. Escribir un algoritmo que permita escribir en una pantalla la frase “Desea Continuar S / N”, hasta que la respuesta sea S o N. 20. Leer sucesivamente números del teclado, hasta que aparezca un número negativo. Ing. Oscar Ascón Valdivia 31 ESTRUCTURA DE DATOS (ARRAYS) Un array es una secuencia de posiciones de la memoria central a las que se puede acceder directamente, que contiene datos del mismo tipo y pueden ser seleccionados individualmente mediante el uso de subíndices. Array Unidimensionales: Los Vectores. Un array (matriz o vector) es un conjunto finito y ordenado de elementos homogéneos. Los elementos de un array son homogéneos, es decir, del mismo tipo de datos. Un array puede estar compuesto de todos sus elementos de tipo cadena, otro puede tener todos sus elementos de tipo entero, etc. El tipo más simple de array es el array unidimensional o vector (matriz de una dimensión). Un vector de una dimensión denominado NOTAS que consta de N elementos se puede representar de la siguiente manera: El subíndice o índice de un elemento [1, 2, 3, 4, i, n], designa su posición en la ordenación del vector. Notas: 20 15 12 09 13 18 12 Sintaxis public static void Main() { int[] notas = new int[5]; notas [0] = 20; notas [1] = 15; notas [2] = 12; notas [3] = 09; notas [4] = 13; notas [5] = 18; notas [6] = 12; Console.WriteLine( arr[1] ); } Ing. Oscar Ascón Valdivia 32 Para crear un arreglo debemos especificar de qué tipo deseamos crear el arreglo seguido por corchetes [ ] que es el distintivo del arreglo (en nuestro ejemplo usamos int[]), seguido por la palabra clave new y el tipo y la cantidad de parámetros que tendrá nuestro arreglo. En el ejemplo anterior, por ejemplo, se creó un arreglo notas unidimensional con capacidad para 6 enteros (especificado por new int[5]), y luego se le asignó a cada parámetro un entero distinto (nótese que se comienza a contar a partir de 0 y el número del parametro se encuentran entre corchetes). Existe una forma más corta para declarar el arreglo y asignarle los valores: int[] arr = {1,2,3}; //es exactamente lo mismo que el ejemplo anterior Casos Prácticos 1. Desarrollar e implementar un programa que permita ingresar y reportar un arreglo de notas, según una cantidad de elementos ingresados using System; using System.Collections.Generic; using System.Text; namespace Arreglos { class Program { static void Main(string[] args) { // Declaracion de variables int i, n; // Declaracion del arreglo NOTA int [] nota =new int[6]; // Cantidad de elementos del arreglo System.Console.WriteLine("Ingresar numero de notas: "); n =Convert.ToInt16( Console.ReadLine()); // Ingreso de elementos al arreglo for (i = 0; i < n; i++) { Console.WriteLine("Nota [{0}]:",i); nota[i] =Convert.ToInt16( Console.ReadLine()); } // Reportar elementos del arreglo for (i = 0; i < n; i++) { Console.WriteLine("Nota: {0}",nota[i]); } Console.ReadKey(); } } Ing. Oscar Ascón Valdivia 33 } 2. Implementar un programa que permita ingresar un arreglo, e identificar los elementos positivos y negativos. static void Main(string[] args) { int i, n; int[] nota = new int[6]; System.Console.WriteLine("Ingresar numero de notas: "); n = Convert.ToInt16(Console.ReadLine()); for (i = 0; i < n; i++) { Console.WriteLine("Nota [{0}]:", i); nota[i] = Convert.ToInt16(Console.ReadLine()); } for (i = 0; i < n; i++) { if (nota[i] > 0) { Console.WriteLine("Elemento {0}, es Positivo", nota[i]); } else { Console.WriteLine("Elemento {0}, es Negativo", nota[i]); } } Console.ReadKey(); } 3. Implementar un programa que permita ingresar un arreglo, y permita contar y acumular los números pares e impares. static void Main(string[] args) { int i, n; int cp, ci, ap, ai; cp = 0; ci = 0; ap = 0; ai = 0; int[] nota = new int[6]; Ing. Oscar Ascón Valdivia 34 System.Console.WriteLine("Ingresar numero de notas: "); n = Convert.ToInt16(Console.ReadLine()); for (i = 0; i < n; i++) { Console.WriteLine("Nota [{0}]:", i); nota[i] = Convert.ToInt16(Console.ReadLine()); } for (i = 0; i < n; i++) { if (nota[i] % 2==0) { cp = cp + 1; ap = ap + nota[i]; } else { ci = ci + 1; ai = ai + nota[i]; } } Console.WriteLine("Total elementos Pares:{0}:", cp); Console.WriteLine("Total elementos Impares:{0}:", ci); Console.WriteLine("Suma Total Pares:{0}:", ap); Console.WriteLine("Suma Total Impares:{0}:", ai); Console.ReadKey(); } PRACTICA 1. Implementar un programa que permita mostrar que elementos son positivos y/o negativos. 2. Implementar un programa que permita Sumar todos los elementos del arreglo. 3. Implementar un programa que permita ingresar 2 arreglos y sumar los elementos de los dos arreglos en un tercer arreglo. 4. Implementar un programa que permita ingresar 2 arreglos y multiplicar los elementos de los dos arreglos en un tercer arreglo. 5. Implementar un programa que permita calcular el promedio de los elementos ingresados en un arreglo. 6. Implementar un programa que permita ingresar elementos a un arreglo, y luego debe de permitir ingresar un numero para verificarlo si se encuentra en el arreglo. 7. Implementar un programa que permita ingresar elementos a un arreglo, y luego debe de reportarlos del ultimo al primero. Ing. Oscar Ascón Valdivia 35 Array Bidimensionales: Los Arreglos. El array bidimensional se puede considerar como un vector de vectores. Es, por consiguiente, un conjunto de elementos, todos del mismo tipo, en el cual el orden de los componentes es significativo y en el que se necesitan especificar dos subíndices para poder identificar a cada elemento del array. Fila 1 Fila 2 Fila 3 Fila 4 Fila 5 Columna 5 Columna 4 Columna 3 Columna 2 Columna 1 En notación estándar, normalmente el primer subíndice se refiere a la fila del array, mientras que el segundo subíndice se refiere a la columna del array. Es decir B(i,j). 1 2 3 4 5 1 2 3 4 5 5,2 Sintaxis public static void Main() { int[ , ] arr = new int[2,2]; arr[0,0] = 1; arr[1,0] = 2; arr[0,1] = 3; arr[1,1] = 4; Ing. Oscar Ascón Valdivia 36 Console.WriteLine("El valor que posee la variable arr[1,1] es {0}", arr[1,1] ); } Ejemplo: 1. Implementar un programa que permita ingresar y reportar elementos de una matriz. using System; using System.Collections.Generic; using System.Text; namespace Matriz { class Program { static void Main(string[] args) { // Declarar la Matriz int[,] matriz = new int[5, 5]; int f, c, i, j; // Ingresar filas y columnas Console.WriteLine("Ingresar N° Filas:"); f = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Ingresar N° Columnas:"); c = Convert.ToInt16(Console.ReadLine()); // Ingresar elementos a la matriz for (i = 0; i < f; i++) { for (j = 0; j < c; j++) { Console.WriteLine("Mat: "); matriz[i, j] = Convert.ToInt16(Console.ReadLine()); } } // Reportar elmentos de la matriz for (i = 0; i < f; i++) { Console.Write("\n"); for (j = 0; j < c; j++) { Console.Write(" {0} ", matriz[i,j]); } } Console.ReadKey(); } } } Ing. Oscar Ascón Valdivia 37 2. Implementar un programa que permita contar cuantos elementos positivos y negativos tiene la matriz. static void Main(string[] args) { int[,] matriz = new int[5, 5]; int f, c, i, j,cp,cn; cp = 0; cn = 0; Console.WriteLine("Ingresar N° Filas:"); f = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Ingresar N° Columnas:"); c = Convert.ToInt16(Console.ReadLine()); for (i = 0; i < f; i++) { for (j = 0; j < c; j++) { Console.WriteLine("Mat: "); matriz[i, j] = Convert.ToInt16(Console.ReadLine()); } } for (i = 0; i < f; i++) { Console.Write("\n"); for (j = 0; j < c; j++) { if (matriz[i, j] > 0) { cp = cp + 1; } else { cn = cn + 1; } } } Console.WriteLine("Total positivos {0}:", cp); Console.WriteLine("Total negativos {0}:", cn); Console.ReadKey(); } Ing. Oscar Ascón Valdivia 38 PRACTICA 3. Implementar un programa que permita mostrar que elementos son positivos y/o negativos. 4. Implementar un programa que permita Sumar todos los elementos de la matriz . 5. Implementar un programa que permita ingresar 2 matrices y sumar los elementos de las dos matrices en un tercer matriz. 6. Implementar un programa que permita calcular el promedio de los elementos ingresados en una Matriz. 7. Implementar un programa que permita ingresar elementos a una matriz, y luego debe de permitir ingresar un numero para verificarlo si se encuentra en la matriz. 8. Implementar un programa que permita ingresar elementos a una matriz, y luego debe de reportarlos el elemento mayor y menor. Ing. Oscar Ascón Valdivia 39 I Ing. Oscar Ascón Valdivia 40