18
Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 1 de 18 Objetivo de la asignatura: El alumno podrá plantear de manera sistemática la solución de problemas susceptibles de ser computarizados mediante técnicas estructuradas de diseño y formulación de algoritmos. La asignatura será la herramienta inicial requerida por el alumno para aprender las estructuras básicas de control de instrucciones, que le permitan desarrollar soluciones lógicas a problemas susceptibles de ser computarizados. Unidades 1. Conceptos básicos y reglas para el desarrollo de algoritmos 2. Técnicas de diseño y formulación de algoritmos 3. Estructuras algorítmicas 4. Arreglos 5. Introducción a C++ Bibliografía (el presente material es un resumen ) "Programación en C++" – Luis Joyanes Aguilar - Mc Graw Hill - 2000 “Aprenda C++ como si estuviera en primero” – Referencia electrónica Tutorial de Algoritmos del Instituto Tecnológico de la Paz – (http://www.itlp.edu.mx/publica/tutors.htm ) Cualquier texto que trate el diseño estructurado de algoritmos e introducción a la programación Criterios de evaluación Examen escrito = 70% Proyectos = 30% Reglas del juego (a nivel universitario) Programación es una materia que requiere práctica y que se le dedique tiempo. No se recomienda hacer copias ilegales de los trabajos del compañero y repasar 30 minutos antes del examen. Se requiere puntualidad. Habrá una tolerancia de 10 minutos para el pase de lista. No se manejan “retrasos”. Es necesaria completa responsabilidad y comportamiento en el trabajo. Esto implica puntualidad en la entrega de trabajos, calidad óptima en los entregables y conducta adecuada. Persona que sea expulsada del salón pierde sus 30 puntos de proyectos del parcial automáticamente. Mi trabajo consiste en enseñar, el del estudiante de estudiar y preguntar sus dudas. Reservarse las dudas del tema, se considerará como tema entendido y comprendido al 100%. Persona que se sorprenda con la intención de intercambiar información durante el examen, se le anulará. Sólo habrá un día de revisión de examen donde al término la calificación será definitiva. Cualquier situación que concierna a la asignatura y la clase se discutirá conmigo. Hablando se entiende la gente. BIENVENIDO AL CURSO

Programacion1

  • Upload
    ae

  • View
    26

  • Download
    1

Embed Size (px)

DESCRIPTION

introduccion a c++

Citation preview

Page 1: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 1 de 18

Objetivo de la asignatura: El alumno podrá plantear de manera sistemática la solución de problemas susceptibles de ser computarizados mediante técnicas estructuradas de diseño y formulación de algoritmos. La asignatura será la herramienta inicial requerida por el alumno para aprender las estructuras básicas de control de instrucciones, que le permitan desarrollar soluciones lógicas a problemas susceptibles de ser computarizados. Unidades 1. Conceptos básicos y reglas para el desarrollo de algoritmos 2. Técnicas de diseño y formulación de algoritmos 3. Estructuras algorítmicas 4. Arreglos 5. Introducción a C++ Bibliografía (el presente material es un resumen) � "Programación en C++" – Luis Joyanes Aguilar - Mc Graw Hill - 2000 � “Aprenda C++ como si estuviera en primero” – Referencia electrónica � Tutorial de Algoritmos del Instituto Tecnológico de la Paz – (http://www.itlp.edu.mx/publica/tutors.htm) � Cualquier texto que trate el diseño estructurado de algoritmos e introducción a la programación Criterios de evaluación Examen escrito = 70% Proyectos = 30% Reglas del juego (a nivel universitario) � Programación es una materia que requiere práctica y que se le dedique tiempo. No se recomienda hacer

copias ilegales de los trabajos del compañero y repasar 30 minutos antes del examen. � Se requiere puntualidad. Habrá una tolerancia de 10 minutos para el pase de lista. No se manejan

“retrasos”. � Es necesaria completa responsabilidad y comportamiento en el trabajo. Esto implica puntualidad en la

entrega de trabajos, calidad óptima en los entregables y conducta adecuada. Persona que sea expulsada del salón pierde sus 30 puntos de proyectos del parcial automáticamente.

� Mi trabajo consiste en enseñar, el del estudiante de estudiar y preguntar sus dudas. Reservarse las dudas del tema, se considerará como tema entendido y comprendido al 100%.

� Persona que se sorprenda con la intención de intercambiar información durante el examen, se le anulará. � Sólo habrá un día de revisión de examen donde al término la calificación será definitiva. � Cualquier situación que concierna a la asignatura y la clase se discutirá conmigo. Hablando se entiende la

gente.

BIENVENIDO AL CURSO

Page 2: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 2 de 18

INTRODUCCIÓN

LOS LENGUAJES DE PROGRAMACIÓN Software son todos los componentes intangibles de una computadora, es decir, el conjunto de programas y procedimientos necesarios para hacer posible la realización de una tarea específica, en contraposición a los componentes físicos del sistema (hardware). Las herramientas para desarrollar software (desde sistemas operativos (Windows, Unux, Linux, BSD, …) hasta aplicaciones particulares) reciben el nombre de lenguajes de programación, y éstos están compuestos por conjuntos de palabras que se eslabonan unas con otras de acuerdo a ciertas reglas de sintaxis, y que unidas correctamente, instruyen a la computadora (u otro dispositivo) sobre qué debe hacer en determinadas circunstancias. La diversidad de los lenguajes de programación es amplia, pero de acuerdo con el enfoque seguido al crear software, es posible dividirlos en tos tipos: los estructurados y los orientados a objetos. Para desarrollar software, primero se escribe un documento de texto siguiendo las reglas del lenguaje de programación. El archivo que contiene ese documento de texto se denomina archivo fuente. Después es preciso compilar los archivos fuente, o sea, traducirlos al lenguaje de máquina. Una vez terminada la compilación, se crean archivos ejecutables, que son los que la computadora corre cuando se le indica. Lenguaje Máquina Son aquéllos que están escritos en lenguajes directamente inteligibles por la máquina (computadora), ya que sus instrucciones son cadenas binarias que especifican una operación y las posiciones (dirección) de memoria implicadas en la operación. Las instrucciones en lenguaje máquina dependen del hardware de la computadora y, por tanto, diferirán de una computadora a otra. Ventajas • Posibilidad de cargar (transferir un programa a la memoria)

sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de programación.

Desventajas • Dificultad y lentitud en la codificación. • Poca fiabilidad. • Gran dificultad para verificar y poner a punto los programas. • Los programas solo son ejecutables en el mismo procesador

(CPU). Esto afecta directamente a la transportabilidad del software.

Lenguajes de Bajo Nivel Son más fáciles de utilizar que los lenguajes máquina, pero al igual que ellos, dependen de la máquina en particular. El lenguaje

de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos. Un programa escrito en lenguaje ensamblador, requiere de una fase de traducción al lenguaje máquina para poder ser ejecutado directamente por la computadora. Ventajas • Mayor facilidad de codificación y, en general, su velocidad de

cálculo. Desventajas • Dependencia total de la máquina lo que impide la

transportabilidad. • La formación de los programadores es más compleja ya que

exige no solo las técnicas de programación, sino también el conocimiento del interior de la máquina.

Lenguajes de Alto Nivel Estos lenguajes son los más utilizados por los programadores. Están diseñados para que las personas escriban y entiendan los programas de un modo mucho más fácil que los lenguajes máquina y ensambladores. Un programa escrito en lenguaje de alto nivel es independiente de la máquina, por lo que estos programas son portables o transportables. Los programas escritos en lenguaje de alto nivel pueden ser ejecutados con poca o ninguna modificación en diferentes tipos de computadoras. Ventajas • El tiempo de formación de los programadores es

relativamente corto comparado con otros lenguajes. • La escritura de programas se basa en reglas sintácticas

similares a los lenguajes humanos. • Las modificaciones y puestas a punto de los programas son

más fáciles. • Reducción del coste de los programas. • Transportabilidad. Desventajas • Incremento del tiempo de puesta a punto al necesitarse

diferentes traducciones del programa fuente para conseguir el programa definitivo.

• No se aprovechan los recursos internos de la máquina que se explotan mucho mejor en lenguajes máquina y ensambladores.

• Aumento de la ocupación de memoria. • El tiempo de ejecución de los programas es mayor.

GENERACIONES DE LENGUAJES DE PROGRAMACIÓN Primera generación: Las primeras computadoras se programaban directamente en código binario, que puede representarse mediante secuencias de ceros y unos sistema binario. Cada modelo de ordenador tiene su propio código, por esa razón se llama lenguaje de máquina.

Page 3: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 3 de 18

Segunda generación: Los lenguajes simbólicos, asimismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles. El lenguaje simbólico busca que cada instrucción de la máquina se transforme en una única instrucción en código simbólico. Esto mejora considerablemente la legibilidad del programa, aunque sigue requiriendo un conocimiento profundo de la CPU y de los registros de trabajo de los que dispone, la estructura de la memoria, y otros aspectos técnicos. Tercera generación: Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano. Para traducir las declaraciones simbólicas características de un lenguaje de alto nivel al lenguaje máquina a fin de que la computadora las ejecute es indispensable un compilador, que es quien realiza tal traducción. Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos. Los lenguajes de muy alto nivel o 4GL, buscan reducir tanto el esfuerzo de la programación, como el tiempo y los costos de creación de software. Quinta generación: se llama así a veces a los lenguajes de la inteligencia artificial. Bajo esta categoría se encuentran los lenguajes naturales, por su acercamiento a la lengua escrita. El uso de un lenguaje natural con una base de conocimientos produce un sistema basado en el conocimiento (como los sistemas expertos)

CICLO DE VIDA DEL DESARROLLO DE SOFTWARE Cuando una persona o empresa va a desarrollar software hay al menos 2 etapas previas a la codificación, es decir, 2 etapas anteriores a escribir instrucciones de código en un lenguaje de programación específico: 1. El análisis. Es determinar todos los recursos necesarios,

humanos y materiales para poder encarar la tarea. 2. El planteamiento lógico. Implica la descripción de los pasos

que han de seguirse para que el software maneje del modo más eficaz el problema, para que posteriormente se escriba un pseudocódigo o algoritmo de los pasos. Esta labor es de gran importancia, pues EL MEJOR SOFTWARE ES EL QUE

ABORDA LOS MEJORES ALGORITMOS. En general, las fases del ciclo de desarrollo de software son las siguientes: Definición del problema Está dada en sí por el enunciado del problema, el cual debe ser claro. Es importante que conozcamos exactamente "que se desea obtener al final del proceso”; mientras esto no se comprenda no puede pasarse a la siguiente etapa.

Análisis de los datos Para poder definir con precisión el problema se requiere que las especificaciones de entrada y salida sean descritas con detalle ya que esto es un requisito para lograr una solución eficaz. Una vez que el problema ha sido definido y comprendido, deben analizarse los resultados esperados y los datos de entrada disponibles. Diseño de la solución Una computadora no tiene capacidad para solucionar problemas más que cuando se le proporcionan los sucesivos pasos a realizar, esto se refiere a la obtención de un algoritmo que resuelva adecuadamente el problema. Esta etapa incluye la descripción del algoritmo resultante en un lenguaje natural, de diagrama de flujo o natural de programación. Codificación Se refiere a la obtención de un programa definitivo que pueda ser comprensible para la máquina. Incluye una etapa que se reconoce como compilación. Si la codificación original se realizó en papel, previo a la compilación deberá existir un paso conocido como transcripción a un lenguaje de programación. Prueba y depuración Una vez que se ha obtenido el programa ejecutable, este es sometido a prueba a fin de determinar si resuelve o no el problema planteado en forma satisfactoria. Las pruebas que se le aplican son de diversa índole y generalmente dependen del tipo de problema que se está resolviendo. Comúnmente se inicia la prueba de un programa introduciendo datos válidos, inválidos e incongruentes y observando como reacciona en cada ocasión. El proceso de depuración consiste en localizar los errores y corregirlos en caso de que estos existan. Si no existen errores, puede entenderse la depuración como una etapa de refinamiento en la que se ajustan detalles para optimizar el desempeño del programa. Los algoritmos óptimos serán aquellos que menos “problemas” presenten. Documentación Debido a que el programa resultante en esta etapa se encuentra totalmente depurado (sin errores), se procede a la documentación de todos los aspectos importantes para poder obtener el producto. Es decir, se documenta todas las etapas anteriores para poder ser utilizado como guía en un desarrollo de software posterior. En proyectos de desarrollo de software grandes y de alta complejidad, esta etapa se realiza en paralelo a las anteriores. Mantenimiento Se refiere a las actualizaciones que deban aplicarse al programa cuando las circunstancias así lo requieran. Este programa deberá ser susceptible de ser modificado para adecuarlo a nuevas condiciones de operación. Cualquier actualización o cambio en el programa deberá reflejarse en su documentación.

Page 4: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 4 de 18

DISEÑO ESTRUCTURADO DE

ALGORITMOS

CONCEPTOS BÁSICOS • Almacenamiento: Cualquier dispositivo o medio capaz de

recibir información y retenerla durante un periodo de tiempo, permitiendo su recuperación.

• Archivo: Colección organizada de registros. • Bit: Contracción de dígito binario (BInary digiT). Uno de los 2

dígitos Cero o Uno que se emplean en la notación binaria. • Byte: Conjunto de 8 dígitos binarios que se consideran como

una unidad. • Carácter: Uno de los componentes de un conjunto de

símbolos de un sistema de proceso de datos. Cada carácter se representa por un código de bits exclusivo.

• Compatibilidad: Característica de poder procesarse 2 actividades indistintamente sin la necesidad de realizar cambios.

• Identificador: Es el carácter o grupo de caracteres que se emplean para nombrar una posición determinada en memoria, un archivo o un dato. Siempre debe empezar con letra. Ejemplo: casa, p34, a23b, iden_prueba.

• Inicializar: Proceso que se realiza al principio de un algoritmo o programa para asegurarse que todos los identificadores y constantes se ajustan a las condiciones y valores requeridos para el inicio.

• Memoria: Se refiere al almacenamiento interno de una computadora. En un sentido estricto se refiere a las posiciones de almacenamiento en memoria interna o principal donde se almacena la información y permanece mientras el equipo está funcionando y no a cualquier medio de almacenamiento auxiliar o memoria secundaria.

• Procedimiento: Designa cualquier operación que la computadora efectúa con los datos.

• Sentencia: Instrucción en lenguaje fuente.

ALGORITMOS

"Un algoritmo se define como un método que se realiza paso a paso para solucionar un problema que termina en un número finito de pasos". Las características fundamentales que debe cumplir todo algoritmo son: 1. Debe ser preciso. Indicando el orden de realización de cada

paso. 2. Debe ser definido. Si se sigue un algoritmo dos veces, se

debe obtener el mismo resultado cada vez. 3. Debe ser finito. Si se sigue un algoritmo, se debe terminar en

algún momento; o sea debe tener un número finito de pasos. Por ejemplo: determinar el mayor de 2 números

Inicio Obtener el primer número (entrada), denominado NUM1 Obtener el segundo número (entrada), denominado NUM2 Si NUM1 > NUM2 entonces MAYOR=NUM1

En caso contario MAYOR=NUM2 Fin

Algo que le da versatilidad a la programación es que puede haber varios algoritmos para resolver el mismo problema. La diferencia reside en que unos son más óptimos que otros, ya sea porque son más rápidos, consumen menos recursos etc. Por ejemplo, ¿qué hacer si se desea obtener el área de un triángulo? SOLUCION 1: Aplicar (b x h) / 2 SOLUCION 2: Obtener el área bajo la curva por medio de una integral definida Si el problema es resuelto satisfactoriamente no hay solución mala, sino menos óptima.

TIPOS DE DATOS Un dato se define como la expresión general que describe los objetos con los cuales opera una computadora. Los datos de entrada se transforman por el programa, después de las etapas intermedias, en datos de salida. Los datos se clasifican en diversas categorías, según el tipo de máquina o del lenguaje en uso. Generalmente podemos encontrar las siguientes categorías: Datos Numéricos Son aquéllos que representan una cantidad o valor determinado. Su representación se lleva a cabo en los formatos ya conocidos (enteros, punto y fracciones decimales si estas existen). Estos pueden representarse en dos formas: • Enteros. Son números completos, no tienen componentes

fraccionarios o decimales y pueden ser negativos y positivos. • Reales. Estos números siempre tienen un punto decimal y

pueden ser positivos o negativos. Datos de Cadena Son los datos que representan información textual (palabras, frases, símbolos, etc). No representan valor alguno para efectos numéricos. Pueden distinguirse porque son delimitados por comillas dobles. Por ejemplo “Hola” Datos Tipo Carácter Es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato de este tipo contiene solo un carácter. Este carácter se delimita por apostrofes. Ejemplo: ‘x’ Datos Lógicos También se le denominan Boleanos. Es aquél dato que sólo puede tomar uno de dos valores: verdadero y falso. (true / false).

Datos de entrada

Procesamiento Información de entrada

Page 5: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 5 de 18

CONSTANTES Y VARIABLES Una Constante es aquélla que no cambia de valor durante la ejecución de un programa. Las Variables son aquéllas que pueden modificar su valor durante la ejecución de un programa. Su representación se da a través de identificadores que se les asigna un valor.

OPERADORES

Operadores Aritméticos Son aquéllos que permiten la realización de cálculos aritméticos. Utilizan operandos numéricos y proporcionan resultados numéricos. + Suma - Resta * Multiplicación / División real Div División entera Mod Residuo o módulo ^ Exponenciación Operadores Relacionales Permiten realizar comparaciones de valores de tipo numérico o carácter. Estos operadores sirven para expresar las condiciones en los algoritmos. Proporcionan resultados lógicos (verdadero o falso). < Menor que > Mayor que = Igual que <= Menor o igual que >= Mayor o igual que <> Diferente de Operadores Lógicos Son aquéllos que permiten la combinación de condiciones para formar una sola expresión lógica. Utilizan operandos lógicos y proporcionan resultados lógicos también. Se utilizan para formar condicionales complejas como por ejemplo: todos los números z entre 1 y 10. Forma 1: z>=1 Y z<=10 Forma 2: NO (z<1 O z>10) not Negación (No) and Conjunción (Y) or Disyunción (O) Se obtiene Verdadero si: NOT El operando es falso AND Ambos operandos son verdaderos OR Al menos un operando es verdadero

Prioridad de Operadores Determina el orden en que habrán de realizarse las operaciones en una expresión determinada. Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen diferentes paréntesis anidados (interiores unos a otros), las expresiones más internas se evalúan primero. En las operaciones aritméticas se sigue el siguiente orden de prioridad: exponenciación; multiplicaciones y divisiones; sumas y restas. Si los operadores tienen la misma prioridad entonces se evalúan de izquierda a derecha. Así: 10 / 5 + 2 = 2 + 2 4 10 / (5 + 2) = 10 / 7 1.42 (los paréntesis hacen la diferencia)

OTRAS OPERACIONES DE LOS ALGORITMOS ASIGNACIÓN La operación de asignación es el modo de darle valores a una variable. La operación de asignación se representa por el símbolo u operador =. La operación de asignación se conoce como instrucción o sentencia de asignación cuando se refiere a un lenguaje de programación. ACUMULADOR Se emplea para referirse a cualquier posición de almacenamiento en la que se generan resultados aritméticos. La idea esencial es que un acumulador almacene un valor y al recibir un segundo valor, genera y almacena la suma de esos valores. Debe ser inicializado siempre en cero.

ACUMULADOR = 0 … ACUMULADOR = ACUMULADOR + X

CONTADOR Cualquier dispositivo que se utilice para acumular el número de veces que se realiza un proceso. Es un tipo especial de acumulador que se inicializa con cero y los valores que va acumulando cada vez es la unidad.

CONT = 0 … CONT = CONT + 1

MULTIPLICADOR Identificador que se emplea para multiplicar otro y acumular el producto generado. Debe ser inicializado con la unidad para evitar la nulificación del producto.

MULT = 1 … MULT = MULT * X

Page 6: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 6 de 18

PSEUDOCÓDIGO Y

DIAGRAMAS DE FLUJO

PSEUDOCÓDIGO

Es una técnica para expresar en lenguaje natural la lógica de un programa mediante el empleo de palabras claves. Permite obtener la solución a un problema mediante aproximaciones sucesivas pues es una herramienta para el diseño de programas y no una notación para la descripción de los mismos. A continuación las instrucciones y la forma en que trabaja. • INICIO / TERMINAR Marcan el principio y el final de todo

algoritmo estructurado. • INICIALIZAR Se emplea con la finalidad de poder dar

valores iniciales a los contadores, sumadores, o multiplicadores que se requieren en un proceso.

• HACER Se emplea cada vez que se realiza una asignación, operación aritmética, sustitución o cualquier proceso de cálculo que quiera realizarse en un algoritmo. Es opcional para el manejo de la redacción.

• LEER Se emplea para realizar la lectura de los diversos identificadores que se manejen en el algoritmo.

• IMPRIMIR / ESCRIBIR Sirve para imprimir o escribir los resultados o mensajes de un proceso que se haya realizado. Cuando se manejen mensajes estos deben ir encerrados entre comillas “ ”

DIAGRAMA DE FLUJO

Es la representación gráfica de la solución de un problema, por medio de símbolos estandarizados que se colocan en una secuencia adecuada para indicar las fases lógicas de la solución de un problema. El sentido de ejecución es de arriba hacia abajo y de izquierda a derecha. Sirve como un medio de comunicación eficiente, como herramienta de análisis y una forma concisa de documentación. Entre sus ventajas están: 1. Presentar un panorama total de la solución del problema 2. Facilita la detección de posibles errores 3. Detecta si alguna alternativa no ha sido tomada en cuenta

para la solución 4. Puede codificarse para cualquier lenguaje de programación 5. Puede documentarse el problema con precisión 6. Representa gráficamente el flujo de datos Ejemplo: Redactar el pseudocódigo y hacer el diagrama de flujo correspondiente para calcular el área de un triángulo.

INICIO LEER base LEER altura HACER area = (base * altura) / 2 IMPRIMIR “El área del triangulo es “, area

TERMINAR

Las flechas que indican el flujo de datos se llaman flechas conectoras.

INSTRUCCIONES DE DECISIÓN

SI – ENTONCES – SINO – FIN DE SI Esta instrucción se emplea cada vez que es necesaria una comparación a la hora de tomar una decisión al realizar un proceso. Cuando la condición dada se cumple (se dice que es VERDADERA) se ejecuta el proceso indicado después del ENTONCES. Cuando la condición no se cumple (se dice que es FALSA) se ejecuta el proceso indicado después del SINO. Independientemente que se cumpla o no la condición, es decir, que sea VERDADERA o FALSA, después de cada proceso se sale de la instrucción SI por un FIN DE SI. Así tenemos: SI condición ENTONCES

Grupo de instrucciones que se realizan si la condición se cumple (es VERDADERA)

SINO Grupo de instrucciones que se realizan si la condición no se cumple (es FALSA)

FIN DE SI Nótese la identación, es decir las sangrías que se dejan para poder diferenciar las instrucciones que le corresponden al ENTONCES y a las que les corresponde al SINO. Puede ser omitido el manejo del SINO cuando no se requiera acción cuando la condición sea FALSA. Así tenemos: SI condición ENTONCES

Grupo de instrucciones que se realizan si la condición se cumple (es VERDADERA)

FIN DE SI Al no existir el SINO, cuando la condición sea FALSA se sale del SI por medio del FIN DE SI sin haber hecho ninguna acción.

Inicio

base, altura

area = (base * altura) / 2

“El área del triangulo es “, area

Fin

Símbolo de terminal Representa inicio Símbolo de entrada de datos

Símbolo de procesamiento de datos Símbolo de impresión Notar el “Texto que se imprime” Vs las variables Símbolo de terminal Representa final

Page 7: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 7 de 18

Ejemplo: Se proporcionan 2 valores cualesquiera, redactar el pseudocódigo para efectuar el producto de ambos si el primer valor es menor que el segundo; en caso contrario efectuar la suma de ambos. Desplegar el resultado. INICIO LEER A, B SI A<B ENTONCES

HACER PROD = A*B IMPRIMIR “El producto es “, PROD

SINO HACER SUMA = A+B IMPRIMIR “La suma es “, SUMA

FIN DE SI TERMINAR Pueden manejarse instrucciones SI – ENTONCES – SINO – FIN DE SI anidadas. Esto quiere decir que dentro de la sección del ENTONCES o del SINO pueden haber mas instrucciones SI – ENTONCES – SINO – FIN DE SI. Ejemplo: Se proporcionan 3 cantidades diferentes, redactar el pseudocódigo para poner en orden decreciente dichas cantidades. Imprimir las cantidades en el orden leído y en la forma solicitada. INICIO LEER C1, C2, C3 IMPRIMIR C1, C2, C3 SI C1>C2 ENTONCES

SI C2>C3 ENTONCES IMPRIMIR C1,C2,C3

SINO SI C1>C3 ENTONCES

IMPRIMIR C1,C3,C2 SINO

IMPRIMIR C3,C1,C2 FIN DE SI

FIN DE SI SINO

SI C1>C3 ENTONCES IMPRIMIR C2,C1,C3

SINO SI C2>C3 ENTONCES

IMPRIMIR C2,C3,C1 SINO

IMPRIMIR C3,C2,C1 FIN DE SI

FIN DE SI FIN DE SI TERMINAR A continuación se muestra la gráfica de la estructura condicional simple.

Obviamente, en el caso de que se necesite realizar alguna acción cuando la condición sea FALSA, deberá anexarse de manera similar a la de VERDADERA. SEGÚN – HACER – FIN DE SEGÚN Esta instrucción es de selección múltiple de opciones que pueden tenerse dentro de la solución de un problema. El identificador debe existir al principio del bloque de instrucciones a realizarse. La salida es siempre por el FIN DE SEGÚN. La forma general es: SEGÚN Identificador HACER

e1: Instrucciones a realizar cuando el valor de identificador sea e1. e2: Instrucciones a realizar cuando el valor de identificador sea e2 e3, e4: Instrucciones a realizar cuando el valor de identificador sea e3 o e4.

FIN DE SEGÚN Con la instrucción SEGÚN se evita el empleo de instrucciones SI anidadas. Ejemplo: redactar el algoritmo para leer como dato de entrada un número entre 1 y 5 correspondiente a un día de la semana y obtener el nombre de ese día. Hacerlo con SI y con SEGÚN.

Forma 1 (utilizando SEGÚN) INICIO LEER D SEGÚN D HACER

1: IMPRIMIR “LUNES” 2: IMPRIMIR “MARTES” 3: IMPRIMIR “MIERCOLES” 4: IMPRIMIR “JUEVES” 5: IMPRIMIR “VIERNES”

FIN DE SEGÚN TERMINAR

Page 8: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 8 de 18

Forma 2 (utilizando SI) INICIO LEER D SI D = 1 ENTONCES

IMPRIMIR “LUNES” SINO

SI D = 2 ENTONCES IMPRIMIR “MARTES”

SINO SI D = 3 ENTONCES

IMPRIMIR “MIERCOLES” SINO

SI D = 4 ENTONCES IMPRIMIR “JUEVES”

SINO IMPRIMIR “VIERNES”

FIN DE SI FIN DE SI

FIN DE SI FIN DE SI TERMINAR El símbolo utilizado para el SEGÚN en diagramas de flujo es el siguiente:

INSTRUCCIONES DE REPETICIÓN MIENTRAS – HACER – FIN DE MIENTRAS En esta estructura, se revisa en primer lugar una condición. Si esta condición es verdadera se pasa a realizar las acciones. Una vez que se terminen con estas acciones se vuelve a evaluar la condición y se repite el proceso de manera sucesiva. En el momento que la condición sea falsa se sale de la instrucción. Si en la primera vez la condición es falsa las instrucciones no se realizarán ni siquiera una vez.

Ejemplo: Redactar el algoritmo para calcular el factorial de un número entero que debe ser positivo. INICIO LEER N MIENTRAS N < 0 HACER

LEER N FIN DE MIENTRAS FACT = 1 MIENTRAS N > 0 HACER

FACT = FACT * N N = N - 1

FIN DE MIENTRAS IMPRIMIR “El factorial es “, FACT TERMINAR BANDERA Es un identificador que solamente puede tomar un valor de falso o verdadero. Ejemplo: Redactar el algoritmo para simular una calculadora que pueda realizar sumas, restas, multiplicaciones divisiones y nos devuelva el resultado al final de ellas, hasta que se proporcione el signo de igual (=). Reportar también si se restó al menos una vez. INICIO LEER “Dar un valor”, V RESULTADO = V LEER OPERADOR BAND = FALSE (damos por hecho que no se hará ninguna resta) MIENTRAS OPERADOR <> ‘ = ’ HACER

LEER “Dar otro valor”, V SEGÚN OPERADOR HACER

‘ + ’: RESULTADO = RESULTADO + V ‘ - ‘: RESULTADO = RESULTADO – V

BAND = TRUE ‘ * ’: RESULTADO = RESULTADO * V ‘ / ’: SI V <> 0 ENTONCES

RESULTADO = RESULTADO + V SINO

IMPRIMIR “Error!” FIN DE SI

FIN DE SEGÚN LEER OPERADOR

FIN DE MIENTRAS IMPRIMIR “El resultado es “, RESULTADO SI BAND ENTONCES

IMPRIMIR “Al menos se restó una vez“ SINO

IMPRIMIR “No se restó“ FIN DE SI TERMINAR

Page 9: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 9 de 18

HACER – MIENTRAS Esta instrucción es muy similar al MIENTRAS – HACER – FIN DE MIENTRAS. De igual forma se tiene una condición, pero será evaluada al final de las acciones, de manera que éstas se realizan al menos una vez. De forma análoga, si la condición es verdadera se repetirán las acciones. En el momento que la condición resulte falsa se sale del ciclo repetitivo.

Ejemplo: Leer un número positivo y sacar su raíz cuadrada. INICIO HACER

LEER X MIENTRAS X < 0 RAIZ = X ^ (1/2) (Por prioridad de exponenciación se necesitan

paréntesis) TERMINAR DESDE – HASTA – HACER – FIN DE DESDE Esta instrucción repetitiva es controlada por un contador automático. El contador puede moverse tanto hacia delante como para atrás pero siempre de uno en uno. Su sintaxis es la siguiente: DESDE Identificador = Valor_Inicial HASTA Valor_Final HACER

Grupo de instrucciones que se realizarán el número de veces desde Valor_Inicial hasta Valor_Final

FIN DE DESDE No debe ser alterado ninguno de los componentes de la instrucción. Pueden anidarse los DESDE de la siguiente forma: DESDE i = 1 HASTA M HACER

DESDE j = 1 HASTA N HACER Grupo de instrucciones que se realizarán M x N veces

FIN DE DESDE FIN DE DESDE En un caso como en el anterior, puede verse que los ciclos controlados por j se realizan M veces (controlado por i)

Ejemplo: Leer un número positivo y sacar su factorial. INICIO HACER

LEER X MIENTRAS X < 0 FACT = 1 DESDE i = 1 TO X HACER

FACT = FACT * i FIN DE DESDE IMPRIMIR “El factorial de “, X , “es ”, FACT TERMINAR ¿Qué ciclo usar? Aunque pueden utilizarse en la mayoría de los casos un ciclo MIENTRAS, HACER MIENTRAS o DESDE; en algunas circunstancias son deseables algunos por sus características propias. Por ejemplo, supongamos que en un momento del programa se debe leer una calificación. Obviamente la calificación no puede ser un número diferente al rango 0-100. Por lo tanto se puede forzar la repetición hasta que se proporcione un dato correcto. FORMA 1 (usando MIENTRAS) LEER calif MIENTRAS calif < 0 ó calif >100 HACER

LEER calif FIN DE MIENTRAS FORMA 2 (usando HACER - MIENTRAS) HACER

LEER calif MIENTRAS calif < 0 ó calif >100 HACER En este caso puede verse que el DESDE no es adecuado porque no sabemos de antemano cuantas veces se va a dar de manera incorrecta la calificación.

Page 10: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 10 de 18

ARREGLOS Los arreglos tienen como característica que con un único identificador se puede representar múltiples datos individuales, donde cada uno de ellos puede ser referenciado de forma separada. Pueden considerarse como conjuntos de elementos del mismo tipo de dato en donde cada uno de esos elementos tiene una posición determinada. Dicha posición la marca un índice que puede ser un identificador variable o constante con valor numérico. La ventaja primordial es que los valores se almacenan en memoria y pueden ser utilizados sin necesidad de leerlos nuevamente. El nombre de un arreglo se forma de la siguiente forma: se da un identificador seguido de un identificador que representa un índice que debe ir encerrado entre corchetes. Este índice nos indica la posición del elemento dentro del arreglo. Hay varios tipos de arreglos: • Unidimensionales o vectores: son los que sólo utilizan un

índice • Bidimensionales, matrices o tablas: si tienen 2 índices • Tridimensionales: si tienen 3 índices. Desde el momento en que se tengan más de un índice se llamará arreglo multidimensional. La sintaxis para la representación de los elementos de un arreglo es la siguiente: El orden o rango de un arreglo es el número de elementos que lo conforman. Los elementos del arreglo pueden ser utilizados como si fueran variables ordinarias. En estos casos el elemento del arreglo se expresa por el nombre del arreglo, seguido del valor del índice apropiado encerrado entre corchetes. Condiciones de los índices • Su valor debe ser un entero positivo • Puede ser una constante, una variable o una expresión • Pueden realizarse operaciones aritméticas, pero los

resultados de estas deben satisfacer a la primera condición. • Pueden ser elementos de otro arreglo Lectura de arreglos unidimensionales Se recomienda ampliamente el uso de la iteración que el DESDE ofrece, para que de esta forma se lean consecutivamente los elementos que lo conforman. Por ejemplo: leer 5 valores y almacenarlos en un arreglo llamado x.

DESDE i = 1 HASTA 5 HACER

LEER x[ i ] FIN DE DESDE Puede verse que la lectura se realiza elemento a elemento, es decir, los valores no pueden proporcionarse todos a la vez. Ejemplo: Con un arreglo unidimensional llamado x de orden N que debe contener valores positivos, determinar el menor de todos los elementos, calcular el producto de los elementos en posición impar y determinar cuantos son mayores que el promedio. INICIO HACER

LEER N MIENTRAS N<0 DESDE i = 1 HASTA N HACER

HACER LEER x[ i ]

MIENTRAS x[ i ]<0 FIN DE DESDE INICIALIZAR: prodImpar = 1, menor = x[1],

suma = 0, mayorProm = 0 DESDE i = 1 HASTA N HACER

Suma = suma + x[ i ] SI i MOD 2 <> 0 ENTONCES

prodImpar = prodImpar * x[ i ] FIN DE SI SI menor > x[ i ] ENTONCES

menor = x[ i ] FIN DE SI

FIN DE DESDE Promedio = suma / N DESDE i = 1 HASTA N HACER

SI Promedio < x[ i ] ENTONCES mayorProm = mayorProm + 1

FIN DE SI FIN DE DESDE IMPRIMIR “El menor de todos es ”, menor IMPRIMIR “La cantidad de valores que son mayores que el promedio es ”, mayorProm IMPRIMIR “El producto de los elementos en posición impar es ”, prodImpar TERMINAR

MÉTODOS DE ORDENAMIENTO Métodos de la burbuja El método de la burbuja consiste en que el elemento con el cual se inicie la ordenación quede ubicado en la primera posición del arreglo y así sucesivamente se continúa con los demás elementos que conforman el arreglo en cuestión. Se lleva a efecto N – 1 veces la comparación de los elementos del arreglo consigo mismo, hasta que no se efectúe intercambio alguno de los valores.

Identificador_arreglo [

,

] Índice

Page 11: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 11 de 18

El pseudocódigo para ordenar en forma creciente u orden ascendente un arreglo unidimensional de orden N es el siguiente: DESDE i = 1 HASTA (N – 1) HACER

DESDE j = (i + 1) HASTA N HACER SI x[ i ] > x[ j ] ENTONCES

aux = x[ i ] x[ i ] = x[ j ] x[ j ] = aux

FIN DE SI FIN DE DESDE

FIN DE DESDE Con el pseudocódigo anterior se comparan los elementos de la siguiente forma: el primero con los elementos restantes, después el segundo con los elementos restantes y así sucesivamente hasta tener los valores del arreglo ordenado de forma creciente. En caso de querer el ordenamiento en forma decreciente la condición a manejar debe ser x[ i ] < x[ j ] Métodos de intercambio También conocido como burbuja mejorada. Consiste en efectuar N comparaciones de dos elementos con posición subsiguiente (primero con segundo, segundo con tercero…), hasta el momento en el cual no se lleve intercambio alguno de los valores del arreglo. Para controlar el proceso se maneja una bandera, la cual cambiará de valor cuando se haya realizado algún intercambio de valores. HACER MIENTRAS

Cambios = false DESDE i = 1 HASTA (N – 1) HACER

SI x[ i ] > x[i + 1] ENTONCES aux = x[ i ] x[ i ] = x[i + 1] x[i + 1] = aux Cambios = true

FIN DE SI FIN DE DESDE

MIENTRAS Cambios

ARREGLOS MULTIDIMENSIONALES

Los arreglos multidimensionales permiten trabajar tablas de datos compuestos de filas y columnas. Esto es, el primer índice sirve para referirse a la fila y el segundo a la columna donde se encuentra el elemento en cuestión. Independientemente de cual sea su dimensión, un arreglo siempre constará de una serie de datos del mismo tipo. Para las aplicaciones de los arreglos multidimensionales se utilizan los bucles o ciclos anidados, esto es, que es necesario un bucle para cada una de las dimensiones (uno para cada índice).

Lectura de arreglos bidimensionales Pueden darse en dos formas: en orden de fila y por orden de columna. Orden de fila DESDE i = 1 HASTA NumeroFilas HACER

DESDE j = 1 HASTA NumeroColumnas HACER LEER x[i, j]

FIN DE DESDE FIN DE DESDE Orden de columna DESDE j = 1 HASTA NumeroColumnas HACER

DESDE i = 1 HASTA NumeroFilas HACER LEER x[i, j]

FIN DE DESDE FIN DE DESDE En ambos casos, puede observarse que el ciclo interno es más rápido que el externo.

CONCEPTOS MATRICIALES Matriz: Arreglo formado por elementos que están distribuidos en filas y columnas. En cada elemento se tienen dos índices, el primero representa la fila y el segundo la columna que ocupa en el arreglo. Igualdad de matrices: Para que dos matrices sean iguales deben tener el mismo orden y que cada uno de los elementos de una de ellas sea igual al correspondiente de la otra. Matriz cuadrada: Es aquel arreglo donde el número de filas es igual al de columnas. Tiene dos diagonales: Diagonal principal: la conforman aquellos elementos que tienen en el índice de la columna el mismo valor que el índice de la fila. Diagonal inversa: son los elementos cuya suma de los valores de los índices da por resultado el valor del orden más uno. Matriz identidad: Es aquella que en la diagonal principal tiene elementos cuyo valor es la unidad y los restantes son ceros. Matriz simétrica: Los elementos que están debajo de la diagonal principal son iguales a sus correspondientes que están arriba de la diagonal. Es decir, se cumple que A[I, J] = A[J, I] Matriz antisimétrica: Los elementos que están debajo de la diagonal principal son iguales a sus correspondientes que están arriba de la diagonal pero con signo cambiado. Es decir, se cumple que A[I, J] = – A[J, I]

Page 12: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 12 de 18

Suma de matrices: Es necesario que ambos arreglos tengan el mismo orden para sumar los elementos correspondientes a la misma posición de los arreglos. Es decir, SUMA[I, J] = A[I, J] + B[I, J] Resta de matrices: Es necesario que ambos arreglos tengan el mismo orden para restar los elementos correspondientes a la misma posición de los arreglos. Es decir, RESTA[I, J] = A[I, J] - B[I, J] Matriz triangular: Cuando se tiene una matriz cuadrada A, se pueden tener 2 matrices triangulares: una superior y una inferior, pero sólo una a la vez. Matriz triangular superior: Es aquella en la que los elementos que se encuentran debajo de la diagonal principal son iguales a cero. Es decir, A[I, J] = 0 para I > J Matriz triangular inferior: Es aquella en la que los elementos que se encuentran arriba de la diagonal principal son iguales a cero. Es decir, A[I, J] = 0 para I < J Producto de matrices: Es necesario que el número de columnas de la primera matriz sea igual al número de filas de la segunda. Un elemento PRODUCTO[I, J] se obtiene con la sumatoria de los productos de los elementos que estén en la fila I con su correspondiente en la columna J de la segunda matriz. Algoritmo para el producto de una matriz "a" de tamaño [m x n] y otra matriz "b" de tamaño [n x q], dando como resultado una matriz "p" de tamaño [m x q] DESDE i = 1 HASTA m HACER DESDE j = 1 HASTA q HACER p[ i ][ j ] = 0 DESDE k = 1 HASTA n HACER p[ i ][ j ] = p[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ] FIN DE DESDE FIN DE DESDE FIN DE DESDE

Guía de estudio del lenguaje de

programación C++

ELEMENTOS BÁSICOS BUG

Es un error que posee el programa (usualmente detectado por el usuario) que implica que el software requiere una depuración.

ERROR SINTÁCTICO Error cometido cuando se escribe un código que viola las reglas de sintaxis del lenguaje de programación. Son errores sencillos de depurar pues los compiladores los detectan.

ERROR LÓGICO Error cometido en la lógica del programa pero sin violar ninguna regla de sintaxis. Son extremadamente complicados de detectar, pues el compilador interpreta que todo se encuentra correcto aunque el software arroje resultados equivocados. Ejemplo de error lógico muy común: no inicializar con cero los contadores.

¿Cómo se programa en C++? Una vez que se tiene la lógica del programa plasmada en un algoritmo se deberá escribir el código en la sintaxis de C++ en un archivo de texto plano. Esto significa que debe usarse un editor de textos que NO establezca formato como el edit, notepad, o similares. Se debe evitar el uso de procesadores de texto que incluyan en los archivos “basura” (para el proceso de codificación) de formato. Lo anterior significa usar Word o parecidos. Una vez que tenemos el archivo fuente (archivo con extensión CPP) con todo el código en C++, éste no es ejecutable por el sistema operativo (Windows, Linux, Unix, etc.). Deberá compilarse para obtener un archivo ejecutable (archivo con extensión EXE). El compilador, además de traducir el código fuente a código ejecutable se encargará de revisar el código fuente en busca de errores. Turbo C++ presentará 2 tipos de errores. Los errors son errores de sintaxis que deberán ser corregidos obligatoriamente para generar el ejecutable. Los warnings son situaciones en los que el ejecutable se ha generado pues no implica necesariamente un error en el código, pero deberá ser revisado porque podría ser el causante de algún problema posterior. Una vez que se poseen 0 errors y 0 warnings se puede considerar que el código fuente está depurado al 100% en la sintaxis. Deberá probarse el código para cerciorarse de que no se han cometido errores lógicos. C++ es un lenguaje de programación muy estricto en cuanto a la sintaxis. Por lo tanto esta debe ser estudiada de memoria.

Page 13: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 13 de 18

Esqueleto de un programa en C++ #include<Librería_de_biblioteca> //Bibliotecas #define constante valor_de_la_constante //Opcional void main() {

Programa_principal } Las directivas del preprocesador comienzan con el símbolo # que indica al compilador que lea las directivas antes de compilar el programa principal. Estas directivas no serán de utilidad para incluir librerías de biblioteca y constantes simbólicas. C++ posee muchas funcionalidades en paquetes listos para utilizar directamente por el programador. Estos paquetes se llaman funciones y lo único que debe hacerse es especificar el nombre de la función junto con alguna información (si lo requiere) para que dicha función realice algo. Sin embargo, para que podamos utilizar una función debe indicarse al compilador su librería de biblioteca correspondiente. Esto se realiza con #include. La directiva #include indica al compilador que lea el archivo fuente de cabecera que viene a continuación de ella y su contenido lo inserte en la posición donde se encuentra dicha directiva. Por ejemplo #include<iostream.h> es la instrucción que se encarga de indicar al compilador que debe ser añadida la librería iostream.h en el programa. Las librerías son siempre archivos con extensión h. Por ejemplo, una función de mucha utilidad es clrscr() que se encarga de limpiar la pantalla. Para trabajar se requiere la librería conio.h La directiva #define sirve para definir constantes simbólicas. Por ejemplo, al incluir la línea #define PI 3.14159 se le indica al compilador que cambie todos los PI que encuentre en el código fuente del programa por 3.14159. Las directivas #define no son obligatorias. Sin embargo en algunos programas son de mucha utilidad pues evitan reescribir código. ESCRITURA DEL PROGRAMA Una vez que se ha especificado las librerías necesarias para la ejecución del programa, puede comenzarse a transcribir el algoritmo de la solución del problema en cuestión en código utilizando sintaxis de C++. Este código irá en la función main. Como puede verse, el main requiere un par de paréntesis vacíos a la derecha de la palabra main. Por otro lado, todo el programa que se incluya en el main deberá estar delimitado por un par de llaves {}. El olvidar cerrar algún par en el transcurso del programa es un error sintáctico que deberá ser corregido. Salvo algunas muy pocas excepciones, toda línea del programa deberá terminar con punto y coma (;). El olvidar el punto y coma

es un error de sintaxis muy común. El punto y coma indica al compilador que la línea de código ha terminado. Por lo tanto puede tenerse varias instrucciones de código en una misma línea del archivo fuente separadas por punto y coma. Comentarios Hay dos tipos de comentarios: los de estilo C comienzan con la secuencia /* y terminan con la secuencia */ y pueden ocupar una o más líneas. Los de estilo C++ siempre comienzan con // y se considera comentario todos los caracteres que sigan hasta el final de la línea. El objetivo de los comentarios es mencionar algún aspecto de interés por parte del programador en el programa. Es importante establecer la sintaxis de comentario de forma adecuada, pues de lo contrario el compilador intentará compilar el texto que se está escribiendo y como lo más probable es que no coincida con la rigurosa sintaxis de C++ se marcará error. Identificadores Un identificador es una secuencia de letras, dígitos y subrayados. Las mayúsculas y minúsculas se consideran diferentes. Los identificadores serán utilizados para trabajar variables. Es indispensable que las variables antes de ser utilizadas sean declaradas especificando un tipo de dato y que su nombre no sea una palabra reservada. Una palabra reservada es aquella que pertenece al compilador y está asociada a algún significado particular. No se podrán usar como identificadores. Tipos de datos C++ es un lenguaje fuertemente tipado. Esto significa que antes de usar una variable deberá ser declarada. Enteros (no llevan parte decimal)

• short • int • unsigned int • long • unsigned long

Coma flotante (si llevan parte decimal)

• float • double • long double

Caracteres y cadenas

• char • cadenas. En C++ no se posee el tipo de dato string. Por

lo tanto para manipular cadenas se requiere utilizar un arreglo de caracteres.

Page 14: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 14 de 18

Booleano o lógico C++ no incluye el tipo de dato booleano como en otros lenguajes de programación. Puede simularse con el tipo de dato entero, pues para C++ todo valor entero diferente de cero es considerado como verdadero y el 0 es considerado como falso. Constantes carácter Es un carácter encerrado entre comillas simples ( ‘ ’ ). Secuencias de escape En realidad representan un solo carácter, aunque se escriban con más de uno. Las más útiles son: ‘\n’ nueva línea ‘\t’ tabulación ‘\0’ carácter nulo Constante cadena Es una secuencia de caracteres encerrados entre comillas dobles ( “ ” ). En memoria se representan por una serie de caracteres más un carácter nulo. El carácter nulo marca el final de la cadena y se inserta automáticamente por el compilador. Por lo tanto no es lo mismo ‘A’ que “A”. La primera es una constante de carácter A, mientras que la segunda es una cadena que en realidad posee el carácter A y el carácter nulo.

ENTRADA Y SALIDA ESTÁNDAR En C++ la entrada y salida se lee y escribe en flujos o streams. Cuando la librería iostream.h se incluye en un programa, cin puede ser utilizado para la entrada y cout para la salida. La lectura de una variable se realiza con: cin >> variable; // >> se llama operador de extracción Para visualizar datos en la pantalla del equipo: cout << “El valor de A es “ << A; // << es el operador inserción ESCRITURA DEL PRIMER PROGRAMA EN C++ No se debe olvidar que C++ considera diferente a las mayúsculas y minúsculas. /* Este es el primer programa en C++. Se utiliza un comentario tipo C para que pueda abarcar más de una línea de comentario */ //LIBRERÍAS DE BIBLIOTECA #include<iostream.h> //Para usar cin y cout #include<conio.h> //Para usar getch() y clrscr() #include<stdio.h> //Para usar gets() //PROGRAMA PRINCIPAL void main(){ //Declaración de variables int edad; //dato entero int anioNac; //dato entero int anioAhora; //dato entero

char nombre[50]; //cadena usando arreglo float promedio; //dato real (con decimales) clrscr(); //se limpia la pantalla cout<< “Hola. Bienvenido al 1er programa”; cout<< “\nTu nombre: ”; gets(nombre); cout<< “\nAño de nacimiento: ”; cin>> anioNac; cout<< “\nAño actual: ”; cin>> anioAhora; cout<< “\nPromedio anterior: ”; cin>> promedio; edad= anioAhora – anioNac; clrscr(); cout<< “¡Oye ” << nombre << ”!, calculo que"; cout<< “\nTu edad es ” << edad; cout<< “\nUn promedio de ” << promedio << “es ”; if(promedio > 6) cout<< “aprobatorio”;

else cout<< “reprobatorio”;

getch(); }

OPERADORES Y EXPRESIONES El operador de asignación = asigna el valor de la expresión derecha a la variable situada a su izquierda, y puesto que este operador es asociativo por la derecha se permite realizar asignaciones múltiples como a=b=c=45; Operadores de asignación

Op. Uso Equivale a = a=b *= a*=b a=a*b /= a/=b a=a/b %= a%=b a=a%b += a+=b a=a+b -= a-=b a=a-b

Operadores aritméticos

Op. Operandos enteros Operandos flotantes + Suma Suma - Resta Resta * Producto Producto / División entera División flotante % Residuo en div entera División flotante

Operadores de incrementación y decrementación

Op. Uso Idéntico a ++ a++ / ++a a=a+1 -- a-- / --a a=a-1

Page 15: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 15 de 18

Operadores relacionales

Op. Significado == igual que != diferente que > mayor que < menor que >= mayor o igual que <= menor o igual que

Operadores lógicos

Op. Significado Función ! Negación Niega de V a F y viceversa

&& Y lógica Devuelve V si todos los operandos son V || O lógica Devuelve V si al menos un operando es V

Siempre que se utilice un operador relacional o lógico, el resultado será un valor lógico. Operador , Permite combinar dos o más expresiones en una sola línea. Operador ( ) Es el operador de llamada a funciones. Sirve para encerrar los argumentos de una función, efectuar conversiones explícitas de tipo y resolver conflictos de prioridad entre operadores. Operador [ ] Designa un elemento de un arreglo. Conversión de tipos implícita Los operandos de tipo más bajo se convierten a los de tipo más alto de forma automática.

int unsigned int long unsigned long float double long double

Ejemplo: … int a=10; float b=20.3; b=a; //No hay problema a=b; //Resultado impredecible Conversión de tipos explícita Se hace mediante el operador de cast. Hay 2 maneras: (Tipo_de_dato) valor //Estilo C: convierte valor a Tipo_de_dato Tipo_de_dato (valor) //Estilo C++: convierte valor a Tipo_de_dato Esto es muy útil para evitar divisiones enteras por “accidente”.

ESTRUCTURAS DE SELECCIÓN if - else if (condición) {

Instrucciones a ejecutar si condición es verdadera } else {

Instrucciones a ejecutar si condición es falsa } Características • En su forma más sencilla el if puede omitir la parte else. Si l

condición fuera falsa no se realizará ninguna acción. • Si tenemos un if que trae else, en su ejecución o se ejecutan

sólo las instrucciones correspondientes al if o sólo las instrucciones que le corresponden al else. La razón de lo anterior se debe a que la condición o es verdadera o falsa en un momento determinado.

• Independientemente si la condición es verdadera o falsa, si las “instrucciones” del if o else son en realidad una sola instrucción, entonces podrán omitirse las llaves.

switch switch (expresión) {

case valor1: Instrucciones a ejecutar si expresión es igual a valor1 break;

case valor2: Instrucciones a ejecutar si expresión es igual a valor2 break; …

default: // opcional Instrucciones si expresión no coincide con ninguna etiqueta

} Características • El valor de la expresión debe ser de tipo int o char • Cada etiqueta (por ejemplo valor1) es un valor único,

constante. Si estamos trabajando con tipo char, no olvides encerrar el carácter entre comillas simples.

• Si el valor de expresión es igual a una de las etiquetas case, entonces la ejecución comenzará con la primera instrucción a partir del case y terminará hasta encontrar el primer break que se encuentre

• Si el valor de expresión no coincide con ninguna etiqueta case y no se ha establecido un default entonces el control se pasará a la siguiente instrucción después del switch sin realizar ninguna acción.

CICLOS O BUCLES while while (condición) {

Instrucciones que se ejecutan mientras condición sea verdadera

}

Page 16: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 16 de 18

do - while do {

Instrucciones que se ejecutan mientras condición sea verdadera

} while (condición); Características • Los bucles while y do-while son muy parecidos. Ambos están

controlados por una condición que será verdadera o falsa. La diferencia consiste en que momento se analiza la condición.

• En los ciclos while la condición se evalúa al principio. Si la primera vez que se revisa dicha condición es falsa, las instrucciones no se ejecutarán ni una sola vez devolviendo el control del programa a la siguiente instrucción después del while. Si la condición fuera verdadera, entonces se llevan a cabo las instrucciones del bucle y se vuelve a revisar la condición repitiendo el procedimiento explicado.

• En los ciclos do-while la condición se evalúa hasta el final. La primera vez se ejecutarán las instrucciones (sin importar si la condición es verdadera o falsa) y luego se verificará la condición. Si ésta es falsa se sale del ciclo (pero las instrucciones ya se ejecutaron al menos una vez) y se devuelve el control del programa a la siguiente instrucción después del do-while. Si es verdadera se vuelven a ejecutar las instrucciones del bucle una vez más y se revisa nuevamente la condición repitiendo el procedimiento explicado.

• De forma análoga al if, si las instrucciones a ejecutar en el ciclo (ya sea do o do-while) en realidad es una sola instrucción, podrán omitirse las llaves.

• Las condiciones deberán ser falsas en algún momento. De lo contrario se cae en un bucle infinito.

Ejemplos: (Las llaves se pudieron haber omitido) while (0) {

cout << “Esto nunca se imprime, porque 0 = falso”; } do {

cout << “Esto se imprime una sola vez”; } while (0); // La condición es falsa while (1) { // Condición verdadera. Entrar al bucle.

cout << “Bucle infinito”; // La condición nunca se vuelve falsa } for for (Inicialización; CondiciónIteración; Incremento) {

Instrucciones que se ejecutan n veces } El bucle for contiene 4 partes: 1. Inicialización. Inicializa las variables de control del bucle.

Pueden usarse una o más variables. Estas variables son en realidad contadores.

2. CondiciónIteración. Contiene una expresión lógica que hace que el bucle realice las iteraciones de las instrucciones, mientras que la expresión sea verdadera. Esta condición

debe volverse falsa cuando se hayan ejecutado las instrucciones la n veces deseadas.

3. Incremento. Incrementa o decrementa las variables contadoras que sirven de control para el bucle. Lo habitual es que sea de uno en uno, aunque no necesariamente tiene que ser así.

4. Instrucciones. Son las órdenes que deberán repetirse las n veces deseadas.

En realidad el for equivale al siguiente código: Inicialización; while (CondiciónIteración) {

Instrucciones del ciclo for; Incremento;

} Características • Los bucles for difieren de los bucles while y do-while en que

el for está controlado por contador mientras que los otros están controlados por condición. Esto significa que con el for ya se sabe de antemano cuantas veces han de repetirse las instrucciones, mientras que con el while y do-while este dato no se sabe por anticipado.

Ejemplo: for(i=0; i <=5; i++) { // incremento de uno en uno

cout << “Esto se repite 6 veces. No 5. \n”; cout << “i = “ << i << “\n”; // i = 0, 1, 2, 3, 4 y 5. Cuando i = 6 // la condición (i <=5) será falsa y el // for termina

} for (h=10; h>=0; h-=2) { // decremento de dos en dos

cout << “Esto se repite 6 veces \n”; /* h = 10, 8, 6, 4, 2 y 0. Cuando h = -2 la condición será falsa*/

} for (g=10; g<=0; g-=2) { // decremento de dos en dos

cout << “Esto no se imprimirá”; /* La primera vez, g = 10. La condición es falsa desde el principio puesto que g > 0. El bucle termina inmediatamente*/

} for (k=0; k<=10; k-=5) { // decremento de cinco en cinco

cout << “BUCLE INFINITO. \n”; /* k = 0, -5, -10… La condición nunca se vuelve falsa*/

}

ARREGLOS

Un arreglo o array es una secuencia de objetos del mismo tipo. Los objetos se llaman elementos del arreglo y se numeran consecutivamente a partir del 0. Estos números: 0, 1, 2, … se denominan valores índice.

Page 17: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 17 de 18

Si el nombre de un arreglo es a, entonces a[0] es el nombre del elemento que está en la posición 0, es decir, el primero. a[1] es el elemento que está en la posición 1 (el segundo), y así sucesivamente. En general, el elemento i-ésimo está en la posición i-1. De modo que si el arreglo tiene n elementos, sus nombres son a[0], a[1], …, a[n-1]. Declaración de un arreglo tipo_de_datos Nombre_del_arreglo [ Número_de_elementos ]; La declaración anterior, hace que el compilador reserve espacio suficiente para contener el número de elementos del tipo de dato especificado. Los elementos de los arreglos se almacenan en bloques contiguos de memoria. Arreglos de caracteres Vs cadenas de texto Las cadenas se deben almacenar en arreglos de caracteres. Pero las cadenas contienen el carácter nulo (‘\0’) al final del arreglo.

En la figura mostrada arriba, a) representa un arreglo de caracteres y b) una cadena. Asignación de cadenas Es posible asignar la cadena del ejemplo anterior de la siguiente forma: a[0] = ‘h’; // comillas simples por tratarse de un carácter a[1] = ‘o’; a[2] = ‘l’; a[3] = ‘a’; a[4] = ‘\0’; Sin embargo no es posible asignarlo de la siguiente forma: a = “hola”; Para copiar una constante cadena o una variable cadena a otra variable cadena se debe utilizar la función strcpy(). Esta función se encarga de añadir el carácter nulo al final de la cadena. strcpy (a, “hola”); //requiere la librería string.h Arreglos multidimensionales Son similares a los de una dimensión, pero deberá especificarse cada dimensión por medio de un índice. Por ejemplo: int tabla [5] [3]; representa la declaración de un arreglo de 2 dimensiones conformado por 5 filas (numeradas del 0 al 4) y 3 columnas (numeradas del 0 al 2); dando como total 15 elementos enteros. El acceso a los elementos individuales de un arreglo de este tipo, ya sea para lectura o escritura hará necesario que se especifique cada una de las dimensiones. Por ejemplo:

for ( i=0; i<5; i++ ){ // i toma los valores 0, 1, 2, 3 y 4 for ( j=0; j<3; j++ ){ // j toma los valores 0, 1 y 2

cin>> tabla[ i ] [ j ]; // Lectura del elemento en la fila i y // columna j

} } Arreglos como parámetros de función Si se envía un elemento de un arreglo como parámetro de una función, entonces se trata como paso por valor. Si se envía el nombre de un arreglo como parámetro de una función, entonces se trata como paso por referencia, pues el nombre de un arreglo es en sí un puntero al primer elemento de dicho arreglo.

Page 18: Programacion1

Introducción a la Programación I.S.C. Carlos Ernesto Arjona Marrufo Página 18 de 18

EJERCICIOS

A continuación se especifican diversas situaciones en las que se desea una solución específica. Escribe el programa completo en C++ para lograr dichas peticiones. Ejercicios de estructuras de selección y repetición 1. Leer el radio de un círculo y calcular el área y perímetro. 2. Leer 4 datos de tipo real llamados A, B, C y D y calcular el

valor de x en función de un valor entero k de acuerdo a lo siguiente: Si k=1 entonces x= A+B+C+D Si k=2 entonces x= (A+B+C+D)/4 Si k=3 entonces x= (A/B) – (C/D) Si k=4 entonces x= A2+B2-C2-D2 Si k=5 entonces x= (A+B)1/2 – (C+D)1/2 Se debe validar que k esté en el rango de 1 a 5 y que no se hagan operaciones incorrectas (divisiones entre cero y raíces cuadradas con números negativos)

3. Leer el número de día, mes y el año (cuatro dígitos). Debe obtenerse el nombre del mes y la cantidad de días transcurridos desde el primero de enero. Tómese en cuenta el año bisiesto. Sugerencia: si el año es divisible entre 4 puede considerarse como bisiesto.

4. Dado dos puntos en el eje cartesiano, obtener la distancia entre ellos. La fórmula es: D = ((x1 - x2)2 + (y1 - y2)2)1/2

5. Convertir una temperatura en grados Celsius a Fahrenheit. La fórmula de conversión es F = (9 / 5)C + 32

6. Resolver una ecuación cuadrática de la forma ax2 + bx + c = 0

7. Leer n números enteros que deben ser positivos. Contar los pares y efectuar el producto de los impares. Contar cuantos terminan en 6. Averiguar cual es el mayor y el menor.

8. Generar los n primeros números de la secuencia de Fibonacci. En la secuencia de Fibonacci el primer valor es 0 y el segundo 1, los demás se calculan a partir de la suma de los 2 valores anteriores. Así: 0, 1, 1, 2, 3, 5, 8, 13, …

9. Calcular el logaritmo natural de un número entero positivo x, mediante la evaluación de w términos de la siguiente serie:

( ) ( ) ( ) ( )...

1111)(

432

+−

+−

+−

+−

=x

x

x

x

x

x

x

xxLn

10. Calcular el número de combinaciones de n objetos tomados

en grupos de r, donde r<=n. La fórmula es: )!(!

!,

rnr

nC rn

−=

11. Obtener los primeros n números primos. 12. Leer un número y convertirlo a romano. 13. El coseno de un ángulo x en radianes se puede calcular con

la siguiente serie: ...!6!4!2

1)(642

+−+−=xxx

xCos Calcular

dicha serie con n términos. Nota: AnguloEnRadianes = (AnguloEnGrados)(π / 180)

14. Resolver un sistema de ecuaciones con 2 incógnitas de la forma Ax + By = C y Dx + Ey = F

15. Calcular la constante π mediante la siguiente serie:

...4

1

3

1

2

11

6 222

2

+++=π con n términos.

16. Generar los primeros n números capicúas.

17. Crear una calculadora simple. Lee dos flotantes y un caracter. Si el caracter es un +, se imprime la suma; si es un – se imprime la resta; si es un * se imprime la multiplicación y si es un / se imprime la división. Debe terminarse hasta que se proporcione como operador la letra X.

Ejercicios de arreglos 18. Leer n calificaciones. Calcular cuantos están reprobados.

Averiguar cual es la mayor y la menor. Cuantos están abajo y arriba del promedio. Ordenarlas de forma ascendente y mostrarlas al usuario.

19. Se debe proporcionar un arreglo de dos dimensiones de orden M x N. Determinar cual es el elemento menor de todo el arreglo así como la posición que ocupa en él.

20. Leer un arreglo bidimensional de orden L x L. Calcular el producto de los elementos de la diagonal inversa y principal.

21. Leer dos arreglos llamados A y B de orden M x N y calcular la suma de los arreglos dados. Determinar el elemento menor y la posición que ocupa en el arreglo calculado.

22. Leer un vector x de n elementos numéricos. Calcular la varianza de dicho vector. La fórmula es:

[ ]( )

N

mediaix

Var

N

i

∑=

= 1

2

23. Se tienen 2 vectores llamados x y y, cada uno contienen N elementos. Leer dichos arreglos y calcular el coeficiente de correlación de rango R entre las listas x y y, el cual se define

de la siguiente forma:[ ] [ ]( )

( )1

6

12

1

2

−=∑=

NN

iyix

R

N

i

24. Dado un arreglo de orden M x M se intercambiarán los valores de las diagonales. Es decir, la diagonal principal se volverá la inversa y viceversa.

INVESTIGACIONES 1. Compilador Vs Intérprete 2. Historia y características Fortran, C, Java, Visual Basic, C# 3. Programación secuencial Vs Modular Vs POO 4. IDE’s. NetBeans, SharpDevelop, Visual Studio .Net 5. C Vs C++ / C++ Vs C# 6. C++ Vs Java / Java Vs VB .Net 7. Basic Vs Visual Basic 6 / Visual Basic 6 Vs VB .Net 8. Máquina virtual (JRE, Framework .Net) 9. Modelo espiral de desarrollo de software 10. Características y funcionamiento de printf y scanf 11. Características de UML para desarrollo de software 12. Características (que es, lenguaje en que se programa,

tecnicismos) de GNOME y KDE 13. AJAX, PHP, ASP, JavaScript 14. API, DirectX, OpenGL 15. Ensamblador como HW + SW (Programación de PICs) 16. Programación distribuida y multihilo (o concurrente)