puro java

Tema1 CONCEPTOS PROGRAMACION: es una de las etapas más importantes del ciclo de vida de un proyecto informático, y requi

Views 179 Downloads 8 File size 346KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Tema1 CONCEPTOS PROGRAMACION: es una de las etapas más importantes del ciclo de vida de un proyecto informático, y requiere un determinado método de trabajo, las herramientas que utilizamos para programar son los lenguajes de programación a través de los cuales codificaremos los programas. La fase de programación desarrolla el algoritmo del programa a partir de los ordinogramas obtenidos en la fase de análisis. El algoritmo suele representarse gráficamente mediante ordinogramas más completos que los obtenidos en el análisis orgánico. Para el desarrollo de los algoritmos también se emplean el pseudocodigo las cuales son representaciones estructuradas no gráficas sino escritos PROGRAMAS: conjunto de instrucciones que representan las acciones que hemos hecho en el algoritmo y los cuales son escritos en un lenguaje de programación por ejemplo C El conjunto de programas forman lo que se ha denominado el software de un sistema informático o lo que es lo mismo una aplicación informática la cual no se fabrica no se desgasta sino que se desarrolla y se deteriora respectivamente y, además, se construyen a medida. Ejemplos : Software de sistemas (WORD) Software de gestión( utilizado por las industrias para las facturas por ejemplo) En tiempo real (central nuclear) Al hablar de programas nos referimos a su finalización como el progreso que tardamos en hacerlo. CICLO DE VIDA DEL SOFTWARE: Son las fases por las que pasa el desarrollo de un sistema son 3 fases • Fase de definición: estudiar lo que el cliente nos pide para saber lo que hay que hacer. • Fase de desarrollo: diseñar la solución y hacer el algoritmo que nos resuelva lo que ha pedido el cliente. • Fase de operación: mantenimiento del programa. Otra clasificación más explícita • Análisis y definición de las necesidades: Establece los objetivos del sistema que queremos construir y los requisitos para su elaboración a partir de las indicaciones. • Diseño del sistema y del software: Partiendo del punto anterior vamos a dividir las necesidades del problema en 2 tipos: necesidades del software: miramos que equipo informático hace falta. necesidades del hardware: nos encargamos de determinar las funciones y el lenguaje de programación a usar. 1

• Aplicaciones y pruebas de unidades: Se implementa cada función por separado y se verifica si nos sirve para lo que le hemos programado, implementar significa dividir todo en cachos pequeños, ir codificando y probando poco a poco. • Fase de prueba: Juntamos las partes obtenidas en el proceso anterior y vemos si funciona en conjunto. • Operación y mantenimiento: Sé esta al tanto si surge algún imprevisto y se recogen las modificaciones que quiera el usuario, propuestas sobre modificaciones o ampliaciones. Esta clasificación se corresponde con la anterior de la siguiente manera: La fase de análisis y definición de necesidades corresponde con la fase de definición, las 3 fases siguientes corresponden con la fase de desarrollo y la fase de operación y mantenimiento se corresponde con la ultima fase, la fase de operación. Los problemas que pueden surgir se deben a que no se puede empezar con una fase hasta que no se termine con la anterior, la solución a los posibles errores es más costoso si se ha cometido algún error desde el principio. Para intentar resolver esto utilizamos la realimentacion, es decir, se establece una comunicación entre las fases Codificación Explotación Una alternativa a este ciclo de vida es el modelo evolutivo en el cual el usuario nos manda algo a nosotros le hacemos un prototipo y le vamos modificando hasta que lo que tenemos coincide con lo que el usuario ha pedido. LEYES OBSERVADAS EN LA EVOLUCION DE LOS PROGRAMAS: • Ley de cambio continuo: aplicaciones según necesidades. • Ley de complejidad creciente: las ampliaciones son cada vez más complejas. • Ley de conservación de la estabilidad organizativa: Durante la vida útil de un programa su rapidez y desarrollo va a ser casi constante e independiente de los recursos del sistema. • Ley de conservación de la familiaridad: en el tiempo de vida del desarrollo de un sistema la evolución de su cambio en cada versión es casi constante IMPLICACIONES : • Coste de mantenimiento porque siempre hay modificaciones. • Entre versiones de un programa hay que hacer modificaciones graduales. • Dedicar al desarrollo de un programa la menor cantidad de gente posible por que así hay menos posibilidades de conflictos de pensamientos FACTORES QUE HACEN QUE LA CALIDAD DE UN PROGRAMA AUMENTE: • CALIDAD DEL SOFTWARE: De lo que se trata es de que la implementacion no tenga fallos y que se refleje lo que el usuario quiere. No hay un criterio para cuantificarlo pero más o menos los factores que hacen que se aumente la calidad del software son :

2

• Ausencia de errores. • Fácil de usar y que se refleje lo que el usuario a pedido. • Programa eficiente, es decir, que use los recursos del sistema de forma optima. • Que sea robusto, es decir, que responda bien a situaciones no determinadas • Adaptabilidad, es decir, que las ampliaciones sean fáciles de hacer. • Flexibilidad, es decir, que el programa sea compatible en cualquier tipo de ordenador. Principios de, la calidad: Prevenir posibles errores antes de introducirlos. Asegurar que los errores son detectados y corregidos lo antes posible. Eliminar las causas en vez de eliminar solamente los síntomas del error. Usar los estándares recomendados, es decir, seguir los pasos que sabes que no conducen al error. • INGENIERÍA DEL SOFTWARE: Se quieren establecer unos principios a seguir para obtener programas fiables y que funcionen eficazmente y que lleve todo esto el menor gasto posible Objetivos: − aumentar la calidad de los programas • aumentar la productividad • bajar los costes de elaboración de los programas • aumentar la fiabilidad • reutilizacion • PROGRAMACION ESTRUCTURADA: Forma de organizarse cuando queremos resolver el problema de forma que lleguemos a la solución del mismo en un tiempo razonable. Bases : Forma de programar usando el diseño descendente (ciclo de vida). Organizar y codificar programas que se entienden fácilmente y pueden ser modificados. Construir programas donde este presente una estructura y se puedan corregir errores. Objetivos: • Reducir la complejidad de la tarea de la programación e intentar que se puedan verificar los programas en el momento de ser construidas. Consecuencias: • aparecen nuevos lenguajes de programación • aparecen métodos para diseñar programas • verificar la validez de los programas • obtener programas claros legibles y elegantes 3

• la enseñanza de la programación Programa limpio: Es aquel cuyo diagrama de flujo de datos tiene solo un arco de entrada y uno solo de salida y existe un camino desde la entrada a cualquier sitio y de cualquier sitio a la salida. Un programa esta estructurado cuando todas las componentes de los algoritmos pertenecen a una de las 3 siguientes estructuras: SECUENCIA SELECCION ITERACION TEMA 2 ALGORITMOS DEFINICION: Es una secuencia de acciones y operaciones detalladas necesarias que nos van a llevar a la resolución del problema que tengamos Un algoritmo debe ser: • Preciso: en cuanto al orden de las operaciones, es decir, que en cada paso que demos sepamos lo que sé esta haciendo y lo que vamos a hacer en los pasos siguientes. • Finito : en cuanto al numero de operaciones, es decir, que puedo determinar el final del algoritmo. • Definido: a partir de unas entradas y salidas determinadas obtengamos los mismos resultados. Es decir, que un problema puede ser resuelto por mas de un algoritmo diferente. • Correcto: debe conducir a la solución del problema. Para elaborar un ALGORITMO es necesario seguir unos pasos: • Resolución de un programa: • Análisis del problema: ver las entradas, salidas y el procedimiento de un sistema • Definición del algoritmo: el problema inicial se va dividiendo en subproblemas con el fin que cada vez que hagamos esto nos encontremos con un problema más simple, es decir, hasta llegar a acciones que podemos realizar directamente; esta tecnica se llama TOPDOWN. • Verificar el algoritmo Trabajando de esta forma facilitamos la modificación, la verificación y la comprensión del programa. ANALISIS DEL PROBLEMA DEFINICION DEL ALGORITMO VERIFICAR EL ALGORITMO • Implementaron del algoritmo: • Codificamos el programa según el algoritmo que hemos obtenido. • Ejecutar el programa.

4

El concepto de algoritmo procede de algoritmo que es el proceso de hacer aritmética haciendo uso de las herramientas necesarias. Cuando creamos un algoritmo debemos especificar las acciones a realizar pudiendo utilizar los lenguajes de programación Antes de pasar a la codificación de un algoritmo mediante un lenguaje de programación utilizaremos un lenguaje natural para crear el pseudocodigo de cada problema planteado. Podemos definir lenguaje de programación como un conjunto de instrucciones y unas reglas para combinarlas cuyo objetivo es controlar el hardware para que lleve a cabo un determinado proceso, es decir, indican como hacer los programas. TIPOS DE LENGUAJES DE PROGRAMACION: • Bajo nivel: Es el lenguaje maquina, es decir, esta muy relacionado con el hardware, el programador debe conocer a fondo la arquitectura del ordenador que programa. Consiste en conjunto de instrucciones en binario, es decir, en 0 y 1, por esto es un lenguaje muy complicado y la posibilidad de cometer errores utilizando este tipo de lenguaje es muy alto por eso ya no se utiliza Para solucionar en parte este problema apareció el lenguaje ensamblador que consiste en asignar una abreviatura a cada instrucción en binario Este lenguaje presenta la mayoría de los inconvenientes del lenguaje maquina. • El programador ha de conocer perfectamente el hardware del equipo • Las instrucciones son elementales básicas • Las instrucciones del programa dependen del tipo de ordenador para el que se escribe Pero a su vez destaca en: • Gozan de la ventaja de la mínima ocupación de memoria(la cantidad de memoria que necesitan los programas es menor que la utilizada por los lenguajes de alto nivel) y mínimo tiempo de ejecución en comparación con el resultado de la compilación del programa equivalente escrito en otros lenguajes. • Los programas escritos en este lenguaje son más eficientes que aquellos equivalentes escritos en otros lenguajes. Todos los lenguajes ensambladores tienen su correspondiente ENSAMBLADOR que es un programa que traduce los programas escritos en lenguaje ensamblador a código maquina para que el ordenador pueda ejecutarlos. Al igual que el lenguaje ensamblador cada ordenador tiene su propio ensamblador. Utilización: en la programación de microordenadores y para crear programas eficientes (programas de sistema o software de sistemas)que sirvan de insfrastuctura a los lenguajes de alto nivel • Alto nivel: son llamados así porque están mas cerca del programador que del hardware de la maquina Características: • Son independientes del hardware, pudiendo utilizar un mismo programa en diferentes equipos con la única condición de disponer de un programa traductor o compilador. • La estructura de los lenguajes de programación de alto nivel tienden a semejarse lo más posible al lenguaje natural esto lleva consigo una mayor legibilidad de los programas y un aprendizaje más 5

rápido del lenguaje. • Incluyen instrucciones de alto nivel con ello se intenta paliar el problema que plantean los lenguajes ensambladores en los que las instrucciones eran muy básicas. La existencia de estas instrucciones tiene como consecuencia la obtención de programas más cortos y por lo tanto más legibles que sus equivalentes en lenguaje de bajo nivel. Pero aun así también tienen defectos como que son más lentos de ejecución y disponen de la memoria de forma menos eficaz que los lenguajes de bajo nivel. El ordenador solo comprende el lenguaje maquina y no pude ejecutar programas directamente que están escritos en otros lenguajes por ello es necesario traducirlos Hay 3 herramientas que realizan esta operación: • El ensamblador el cual traduce un programa codificado en lenguaje ensamblador a lenguaje binario • Él interprete el cual toma el programa creado por el lenguaje de alto nivel llamado programa fuente y lo va traduciendo y ejecutando instrucción a instrucción. La ventaja que tiene es que si el programa tiene errores permitirá al programador corregirlos sobre la marcha y continuar la ejecución, el inconveniente es que cada vez que se desea ejecutar el programa es necesario traducirlo, es decir, que la ejecución de un programa es más lenta con el uso de interpretes. • El compilador el cual primero traduce todas las instrucciones del programa fuente y crea un programa traducido al lenguaje maquina llamado programa objeto. La ventaja que tiene es que el programa objeto podrá ser ejecutado todas las veces que se quiera sin tener que ser traducido el programa. Al contrario que los interpretes los compiladores nos permiten aprovechar mejor la memoria y la ejecución de un programa se realiza con rapidez. TRADUCTOR TRADUCTORES Objetivos de los lenguajes de alto nivel • Debe proporcionarnos una herramienta practica y útil para poder representar y expresar la solución de un determinado problema • Debe buscar la simplicidad en la creación de los programas. • Tiene que proporcionarnos programas eficientes, es decir, que el proceso de traducción de las instrucciones del programa a su código maquina equivalente se haga de forma rápida y sobre todo que el código resultante sea lo más eficaz posible. Hay dos formas de enfocar la eficiencia del código maquina: la velocidad y el tamaño. El código maquina destinado a realizar una determinada operación debe llevar al ordenador a efectuarla de la forma más rápida posible, hay muchos métodos distintos para realizar una misma operación por eso se busca el método más rápido. También ha de buscar el método que requiera menos cantidad de código maquina para realizar una operación determinada. Hemos de tener en cuenta que un código maquina mas corto suele ser mas lento mientras que uno largo suele ser más rápido.

6

• Obtención de programas legibles para que sus ampliaciones o mejoras posibles sean posibles de una forma eficaz Ejemplos de lenguajes de alto nivel: C, PASCAL, COBOL, BASIC, FORTRAN, ADA Herramientas y notaciones para el diseño de algoritmos • Diagramas de flujo. • Pseudocodigo. • Diagramas de flujo: representación gráfica del flujo de datos u operaciones de un programa, un diagrama de flujo nos permite representar el circuito de información desde su entrada como dato hasta su salida como resultado, esclareciendo la secuencia de las operaciones. Son considerados el lenguaje común de todos los programadores y se utilizan en distintas fases del ciclo de vida siendo distinto el nombre en cada etapa, en la etapa de análisis reciben el nombre de organigramas en cambio en la fase de programación reciben el nombre de ordinogramas teniendo en cuenta esto se puede decir que hay dos tipos de flujos de datos: • Organigramas. Los organigramas reflejan gráficamente la ubicación de información en los soportes periféricos de entrada y salida unida por el flujo de datos e información que utiliza un programa de manera clara y sencilla; un organigrama debe dar una visión externa e interna a través de los siguientes elementos: Los soportes (medio capaz de almacenar información) de los datos de entrada, los soportes de los datos de salida, el nombre del programa y el flujo de datos Los símbolos utilizados para la entrada y salida de datos indican el tipo de soporte físico. si se utilizan archivos es conveniente poner su nombre Los símbolos más utilizados en los organigramas son: • Ordinogramas: son diagramas de flujo que representan la secuencia lógica de las operaciones que se han de efectuar para llevar a cabo un proceso o subsistema determinado, es decir, los ordinogramas representan gráficamente paso a paso todas las instrucciones del programa, reflejando la secuencia lógica de las operaciones necesarias para la resolución de un problema El ordinograma detalla paso a paso el proceso que debemos seguir en la etapa de programación, todo ordinograma debe plasmar un inicio, un fin y una secuencia de operaciones. En la representación de los ordinogramas es conveniente seguir unas reglas: • Utilizar líneas rectas. • debe haber un solo comienzo y un solo fin • se evitara los cruces de líneas de flujo • Las instrucciones deben ser mínimas. • No hacer uso excesivo de comentarios. • Las expresiones utilizadas dentro de los símbolos deben ser independientes del lenguaje de programación. • Etc. .. 7

Como con los organigramas los ordinogramas poseen sus símbolos: ETC Tomas de decisión datos terminador operación conector • 1 INICIO 1 • 2 OPERACIONES • 3 SECUENCIA 2 DE OPERACIONES • 4 FIN 3 4 • Pseudocodigo: representaciones estructuradas escritas no gráficas, es una notación Mediante la cual podemos escribir la solución de un problema en forma de algoritmo utilizando palabras y frases del lenguaje natural sujetos a unas determinadas reglas. Se puede considerar un paso intermedio entre la solución del problema y la codificación en un lenguaje. Todo pseudocodigo debe posibilitar la descripción de los siguientes elementos: • Instrucciones de entrada/salida • Instrucciones de proceso • Sentencias de control de flujo de ejecución. • Acciones compuestas(subrogaras). • Comentarios que comienzan**. La estructura de los pseudocodigo es así: La primera parte del pseudocodigo contiene el nombre que informático asigna al programa. La segunda parte es una descripción de los elementos que forman el entorno del propio programa, se incluye la declaración de variables (numéricas enteras, numéricas reales, alfanuméricas, lógicas) La tercera parte es el algoritmo que resuelve el problema. Ejemplo: Programa: NOMBRE área Entorno : TODAS LAS VARIABLES QUE USAMOS Y DE QUE TIPO SON Base, área, altura, son numéricas enteras Algoritmo:

8

Escribir introduzca la base y la altura Leer base, altura Calcular area=base *altura Escribir el área de rectángulo es: Fin programa. TEMA3 TECNICAS DE PROGRAMACION CONCEPTOS: • OBJETOS DE UN PROGRAMA: ¿Qué son? Elementos a través de los cuales almacenamos los datos y resultados de operaciones con los que llegamos a la resolución de un problema. Ahora veremos elementos que nos ayudan a trabajar en la fácil comprensión de los programas. DATOS Numéricos Enteros SIMPLES

Reales Lógicos Carácter

DEFINIDAS POR EL USUARIO ESTRUCTURADAS NUMERICOS: Contienen datos formados exclusivamente por números que pueden ser de dos tipos: • Enteros : son datos numéricos llamados también de coma o punto fijo. Su rango depende del computador y del lenguaje de programación, se representan en decimal por dígitos (1 2 3 4 5 6 7 8 9) formando cantidades enteras, es decir, sin parte fraccionaria positivas o negativas. • Reales :son datos numéricos también llamados de coma o punto flotante. Su rango depende del computador y del lenguaje de programación, se representan por dígitos formando cantidades positivas o negativas que pueden tener cifras fraccionarias LOGICOS: Datos que toman exclusivamente dos valores (0,1) (verdadero,falso), el uno corresponde con verdadero y el cero con falso. Se almacenan en memoria mediante un solo bit y se utilizan para elegir entre 2 alternativas diversas o como resultado de una comparación. 9

CARÁCTER: Aquellos que representan un solo elemento alfanumérico, va entre comillas Cuando es un solo carácter va entre ` ` y cuando es una cadena va entre la característica más principal del carácter es la longitud el espacio también es considerado un carácter. Cada carácter de tipo alfanumérico suele almacenarse en un byte ESTRUCTURADAS: Para agrupar distintos datos de los vistos en los simples. Ejemplos: registros, ficheros,conjuntos, listas, arrays. DEFINIDOS POR EL USARIO: El propio programador define un tipo de datos al principio del programa ya que los va a necesitar para la resolución del mismo. • IDENTIFICADORES Y PALABRAS RESERVADAS. A toda variable se le debe dar un nombre o identificador. Este nombre sirve para que el sistema identifique el lugar de la memoria donde esta almacenado el valor de la variable, dicho nombre debe empezar siempre por una letra no se pueden usar las palabras clave del lenguaje como identificadores de las variables. Él numero máximo de sus caracteres difieren según los lenguajes Los identificadores son nombres que nos van a servir para nombrar algo, hay que definirlos de la forma más explícita posible ejemplo S=S+P Las palabras reservadas son las que forman el lenguaje de programación y no se usan para nombrar cosas porque tienen su propio significado. Ejemplo: si entonces repetir inicio. • COSTANTES: son datos cuyo valor no varia durante la ejecución de un programa, es decir, es un objeto cuyo valor almacenado en una zona de la memoria permanece inalterado. Una constante puede ser del tipo de las que hemos visto en el apartado 1 Cuando me quiero referir a la constante la llamo identificador. ¿Para que se usan? Pues se van a proclamar al principio del programa para que sea más comprensible el programa y para facilitar las modificaciones en el programa. • VARIABLES : Representan datos que pueden modificar su valor, se caracterizan por el nombre que le damos y por el tipo. El sistema debe conocer el tipo de datos de cada variable para poder almacenar en memoria dichos valores, el modo de declarar varia según el lenguaje. El nombre sirve para poder acceder al valor de la variable y el tipo determina la clase de dato que podemos almacenar en la variable, también se declaran al principio del programa. Tipos de variables auxiliares: Contadores: . Son unas variables que se utilizan para contar. Normalmente sé inicializan a 0 y cada vez que ocurre el suceso a contar, se incrementan en una unidad. Acumuladores:. Son unas variables que se utilizan para realizar sumatorios o productos de distintas cantidades. Para el sumatorio sé inicializan en 0 para el producto sé inicializan en 1. Es un elemento cuyo 10

valor se incrementa varias veces en cantidades variables. • OPERACIONES ARITMETICAS: están formadas por un operador y una serie de datos permiten elaborar expresiones estos operadores aritméticos son: + − * / etc. En el caso de que se den varias a la vez se opera según esta prioridad Potencias multiplicaciones divisiones y por ultimo sumas y restas. • OPERACIONES LOGICAS o BOOLEANAS: Estan formados por una constante o variable, operador lógico seguido de una constante o variable. Solo pueden expresar dos valores verdadero o falso, las operaciones booleanas actúan sobre una o más variables obteniendo otra variable booleana, cada operación lógica se rige por su tabla de verdad, Se utilizan para evaluar las condiciones a través de los operadores relacionales como por ejemplo ( = < > >= .. • nombres • comentarios: indicar lo que se hace comentario • palabras reservadas: identifica una de las estructuras de los organigramas−−− inicio, fin ESTRUCTURA SELECCIÓN Si A=B+C entonces Escribir Si no . Fin si • algoritmo que lea 2 valores y les ponga en orden Inicio Leer A Leer B Si A>B ents Escribir valor de A Escribir valor de B Sino Si Ao=B ents

19

Ma=A Sino Ma=B Fin si Si C >o=D ents M=C Sino M= D Fin si Si Ma>o=M Escribir Ma Sino Escribir M Fin si Fin • Programa que pide números y los vaya sumando, nos de la media hasta introducir un numero negativo. Inicio Leer N S=O M=O C=O mientras N>o=O hacer S=S+N C=C+1 Leer N Fin mientras Si C=O ents M=S/C 20

Escribir M Escribir S Fin si Fin • sumar los n pares entre 1 y 50 Inicio S=O P=2 Mientras P0 entonces S=2*P*R escribir S =1 =2 =OTROS =otro escribir mensaje Fin según Fin • Algoritmo para sacar por pantalla todos los divisores de un numero mayor que 0 Inicio C=0 Repetir leer N hasta n>o contador =N si N mod cont=O entonces escribir contador

29

sino fin si C=C−1 Repetir si cont=O entonces Escribir contador Hasta C=O Fin También se puede hacer si pones el contador en 1 y en la ultima decisión C=N y cambias el repetir por un mientras Inicio Repetir leer N hasta N>O para I desde 1 hasta N hacer si n mod I =O entonces escribir I fin si fin para Fin • Algoritmo que nos diga si un numero mayor que o es primo Inicio Divisor=O Contador=2 Escribir dame numero Repetir Leer N Hasta N>O 30

Mientras contadorO escribir un algoritmo que lo imprima en orden descendente. Inicio Leer N repetir Hasta N>O Repetir N mod 10=A Escribir A N=N/10 Hasta N=O Fin • Algoritmo que nos calcule la potencia de un numero mayor que O Inicio Potencia=1 Repetir leer BASE Hasta base >=O

31

Repetir Leer exp Hasta que exp>=o Si exp=o ents Escribir potencia Si no Para I desde 1 hasta exp Hacer Potencia = potencia *base Fin para Escribir potencia Fin si Fin Otra forma de hacerlo es: • Haz un algoritmo que haga la multiplicación rusa 22x64 Inicio Suma=O Leer n1 n2 Mientras n1 n21 hacer N1=n1/2

32

N2=n2*2 Si n1 mod2O ents S=S+N2 Fin si Fin mientras Escribir suma Fin • Algoritmo que nos de la solución de una ecuación de segundo grado. Inicio Repetir Leer A B C D= Sqrt ( B*B− ( 4*A*C ) ) Hasta DO y diga si son iguales o no Inicio Repetir Leer A Leer B Leer C Hasta

33

A>O B>0 C>0 Si A=B Entonces Si A=C Ents A=B=C Sino A=B Fin Si Sino Si A=C Entonces A=C Sino Si B=C Entonces B=C Sino ABC Fin Si Fin Si Fin Si Fin • Algoritmo que nos muestre en pantalla un triángulo hecho con asteriscos dándote el lado Ejemplo: lado 3 − * ** *** Inicio Pedir Lado Para I Desde 1 Hasta Lado Hacer 34

Para J Desde 1 Hasta I Hacer Escribir* Fin Para Saltar Línea Fin Para Fin • Algoritmo para determinar el Precio de un billete de ida y vuelta conociendo la distancia, los días de la estancia y sabiendo si la distancia es superior a 1000km y la estancia superior a 7 días hay un descuento del 30%, el precio por km. es de 8 pesetillas. Inicio Precio=0 Repetir Leer Distancia Dias Hasta Dias Distancia>0 P=2distancia*8 Si 2Distancia>1000 Dias>7 Entonces Precio=Precio−Pr *0,3 Escribir Precio Fin • Algoritmo que sume los n números pares • Algoritmo que diga si un numero es par o impar Inicio P=0 C=O S=0 Repetir C=C+1

35

P=P+2 S=S+P Hasta C=N Ecribir S Fin Inicio Leer A B=Amod2 Si B=O Par Sino Impar Fin • Algoritmo que nos muestre un menú con 3 opciones: Pide números hasta introducir uno negativo Pide 2 pares de números y decir que par es mayor, salir Inicio Escribir Menú Leer Opción Mientras Opción3 Hacer Según Opción Hacer =1 Leer N Mientras N> =0 Hacer Leer N Fin Mientras =2 Leer A B C D Suma =A+B F=C+A

36

Si Suma >Suma 2 Entonces Escribir Suma1 Sino Si Suma2>Suma1 Entonces Escribir Suma 2 Sino Escribir Igual Fin Si Fin Si = Otros Escribir Error Fin Según Escribir Menu Leer Opcion Fin Mientras Fin • Algoritmo que nos calcule el importe apagar por un vehículo en una carrera Para bicis =100 Coches =30 pts por km Motos= 40 pts por km Camiones= 50 pts por Km + 10 por toneladas Inicio Total=0 Coches =1 Bicis=2 Motos=3 Camiones=4

37

Según Opcion Hacer =1 Repetir Leer Km Hasta Km>0 T=Km*30 Leer Total =2 Total 100 =3 Repetir Leer Km Hasta Km>0 T=Km*40 Leer Total =4 repetir leer km hasta km>0 leer toneladas si tonel>0 entonces Total=10*tone Fin si T1= total+50*km =otros error Escribir importe Fin TEMA IV INTRODUCCION A C • HISTORIA DEL LENGUAJE C • CARACTERISTICAS • ESTRUCTURA GENERAL DE UN PROGRAMA HECHO EN C • CARACTERISITACAS DESEABLES DE UN PROGRAMA HECHO EN C • COMPILACION HISTORIA DEL LENGUAJE C

38

En un principio los computadores necesitan que los usuarios les demos las ordenes correspondientes para trabajar con unos datos. El conjunto de esas ordenes e instrucciones forman los llamados programas. Estos programas deben ser escritos en un lenguaje que interprete el propio computador. C es un lenguaje de programación de propósito general que combina las características de un lenguaje de alto nivel con ciertas características que solo se encuentran en los de mas bajo nivel y que ha sido asociado estrechamente con el sistema operativo UNIX ya que nació durante el desarrollo de este sistema operativo en el año 1972 y creado por Dennis Ritchie en los laboratorios Bell Telephone Laboratories y tanto este sistema operativo como los programas que se ejecutan en él están escritos en C. C es el resultado de la a unión de 2 lenguajes anteriores BCPL y el B los cuales fueron desarrollados en los mismos laboratorios. Durante mucho tiempo se uso exclusivamente en estos laboratorios hasta que en 1978 ritchie y kernigan publicaron un manual que impresiono a los profesionales de las computadoras por la cantidad de características que poseía el lenguaje este manual se llamaba THE C PROGRAMMING LANGUAJE; de forma que sé promovió su uso para desarrollar programas en distintos entornos. En la década de los ochenta el C alcanza su auge de popularidad contando con compiladores de C elaborados para todo tipo de ordenadores e incluso programas codificados en otros lenguajes pasados al lenguaje C. El objetivo principal de C es actuar como un lenguaje de programación potente que genere un modulo objeto eficiente. Aunque fue diseñado inicialmente para la programación de sistemas, posteriormente su uso se ha extendido a aplicaciones técnico científicas, de bases de datos, de proceso de textos etc. A pesar de que es un lenguaje que se desarrollo junto con el sistema operativo UNIX no esta ligado a ningún sistema operativo en concreto, de forma que se obtiene una gran portabilidad de los programas escritos en este lenguaje. Esta portabilidad y su gran aceptación provocaron la aparición de multitud de versiones comerciales, cada una de ellas con sus características propias. Este echo trajo consigo algunas incompatibilidades entre las versiones del lenguaje de forma que se hizo necesaria una estandarización del mismo que corrió a cargo de ANSI, es decir el AMERICAN NATIONAL STANDARS INSTITUTE elaboro una definición normalizada del lenguaje de programación C. CARACTERISTICAS • Lenguaje complicado si no se tiene cierta experiencia a la hora de elaborar programas. • Suministra una visión de conjunto del problema que queremos resolver. • Es un lenguaje muy eficaz ya que ofrece soluciones que nos permiten resolver cualquier problema que nos planteemos. • Ofrece libertad para organizar el trabajo es decir que las cosas se pueden hacer de diferentes maneras pero siempre llegas a la misma solución. • Es un lenguaje de alto nivel es decir que se asemeja con el lenguaje natural. • Portabilidad o flexibilidad; se puede utilizar en cualquier ordenador. • Permite programar como lenguaje de bajo nivel consiguiendo mayor eficacia, se puede ver como un paso intermedio en el camino, en realidad no se puede encuadrar en ningún sitio. • Es un lenguaje potente porque permite realizar multitud de tareas. • Es un lenguaje muy utilizado en distintos tipos de aplicación. • Reutilizacion: aprovecha el uso de tareas ya implementadas. • No es un lenguaje muy estructurado como ocurre en lenguajes como el PASCAL 39

• Un aspecto destacable del paso del tiempo en C es su control sobre aspectos del computador a la manera de los lenguajes ensambladores. Resumiendo C es un lenguaje de proposito general es decir que puede ser utilizado para programar una gran variedad de aplicaciones . Por su diseño original es un lenguaje facilmente transportable: como es posible utilizar las bibliotecas para realizar tareas que dependan de la arquitectura del ordenador, se puede compilar un programa en casi cualquier maquina. Es un lenguaje de nivel medio. Tradicionalmente se divide a los lenguajes de programacion en L de nivel alto y en L de nivel bajo por su permision a no utilizar los conceptos de programacion estructurada. El C es un lenguaje modular: los programas pueden escribirse en modulos que pueden ser almacenados en distintos ficheros y luego compilados separadamente. Mas tarde, cada una de estas unidades compilables pueden ser almacenadas en un mismo fichero . los modulos mas utilizados pueden guardarse en bibliotecas para luego poder ser usadas en otros programas. El C es un lenguaje conciso que ahorra espacio en disco, tiempo de compilacion y tiempo que el programador debe invertir en escribir un programa ,ademas de ser flexible y potente. La principal desventaja reside en la dificultad de aprendizaje, ya que es un lenguaje fuertemente tipeado (debe definirse todo); ESTRUCTURA GENERAL DE UN PROGRAMA EN C La Técnica para resolver un programa cualquiera: . • Leer el enunciado y una vez entendido elaborar una solución mental del mismo. • Elaborar un algoritmo. • Asegurarnos de que el algoritmo resuelve el problema inicial. • Codificar el programa a través del algoritmo. • Editar el programa en el ordenador. • Compilar y enlazar. • Ejecutar y comprobar resultados. Todo programa en C consta de una o más funciones. Una función es un conjunto de sentencias, es decir, de datos e instrucciones que realizan una tarea determinada. En el lenguaje C podemos hacer una distinción entre las funciones que creamos los usuarios ( las cuales establece el propio programador creando su propia biblioteca de funciones) y entre las que nos ofrece el lenguaje C, también llamadas funciones de biblioteca, las cuales se guardan en ficheros, cada fichero contendrá las funciones. Estas funciones se declaran al principio del programa. La tendencia de la programación es la utilización de módulos, es decir, una programación dividida en partes diferenciadas que contengan las instrucciones. Un programa esta formado por instrucciones que realizan las operaciones a lo largo del mismo. Estas 40

instrucciones se pueden agrupar en las llamadas funciones, evitando la repetición innecesaria de una parte del programa y dotándolo de una gran independencia. Esto confiere una claridad a la programación permitiendo a simple vista una composición mental de la solución del problema. El funcionamiento de un programa compuesto por varias funciones es el siguiente: El programa se ejecuta secuencialmente. Detecta la funcion. Ejecuta dicha función. Continua con el programa secuencialmente donde lo dejo. Una de las ventajas que tiene esta forma de trabajo es la confección de nuestra propia biblioteca de funciones( una biblioteca de funciones o librería es un conjunto de funciones compiladas que pueden ser invocadas desde cualquier programa que permita hacer uso de ellas. Ejemplos: STDIO.H ;CONIO.H) en vez de tener que diseñar las mismas funciones cada vez que sean necesarias. La estructura de una función es la siguiente: • Cabecera: nombre con que identificamos a una función seguida de los argumentos entre paréntesis y separados por comas en caso de existir; estos comentarios suelen ser el nombre del programa, autor. etc. y suelen ir así: /*comentario*/, para que estos sean ignorados por el computador y no los tome como sentencias a ejecutar; y suelen ser utilizados para hacer mas claro el programa para posibles modificaciones • Una llave de apertura { la cual indica donde comienza la función. • El cuerpo: todas las sentencias de control, operaciones aritméticas • Una llave de cierre } la cual indica el fin de la función. Otra manera de ver su estructura es la siguiente: • Una cabecera. • Declaración de argumentos. • Declaración de variables locales. • Sentencia compuesta. • Valor devuelto. En todo programa hay una función que siempre tiene que aparecer que es aquella que todo programa comienza siempre ejecutando: main ( ). LA FUNCION MAIN( ): La función main( ) es una función particular. La primera particularidad es que a esta función la invoca el sistema operativo y no otra función. De esta forma cuando desde el S.O. ejecutamos nuestro programa ya compilado y enlazado, el S.O. lo que hace es llamar a esa función. Por tanto, todo programa en C debe tener una única función main ( ) que será la primera en ejecutarse y la que llame al resto de funciones de nuestro programa, si las hubiera. El ( ) sirve para indicar que hacemos referencia a una funcion. Cuando utilizamos Void main( ): ni espera ni devuelve nada al sistema operativo, y cuando utiliza int main( ) o main( ) : devuelve un entero al sistema operativo, si finaliza normalmente devuelve un cero. Cualquier otro valor implica algún tipo de error. 41

CARACTERISITICAS DESEABLES DE UN PROGRAMA EN C • INTEGRIDAD: se refiere a la corrección de los cálculos que hacemos en el programa. • CLARIDAD: se refiere a la facilidad de lectura del programa en conjunto y esto lo conseguimos a través de los comentarios y sobre todo facilidad para el propio programador y para otros. • SENCILLEZ: hacer las cosas lo más fáciles posibles. • EFICIENCIA: usar adecuadamente los recursos del sistema; Hay que buscar la armonía entre la sencillez y la eficiencia. • MODULARIDEZ: consiste en coger el programa grande y dividirlo en programas más pequeños, es decir, en módulos, es decir, en funciones; Usando las funciones aumenta la claridad y a la vez facilita futuras codificaciones del programa. • GENERALIDAD: hacer las cosas lo mas general posible. COMPILACION La compilación es una de las fases más importantes en la elaboración de un programa que consiste en traducir un programa escrito en un lenguaje de alto nivel llamado programa fuente en un programa llamado programa objeto escrito en un lenguaje de bajo nivel a través de un compilador y mediante la consulta de una serie de tablas. Estas tablas funcionan como un diccionario. El compilador toma una instrucción y busca en la tabla su código binario correspondiente. A continuación, sustituye la instrucción por su código binario en el programa objeto. Este proceso se repite para cada una de las instrucciones que forman el programa. Puesto que cada lenguaje de programación utiliza instrucciones con formato diferente, cada lenguaje de programación tiene su propio compilador. La compilación permite la detección de todo tipo de errores para su posterior corrección por parte del programador. Los errores generados por el compilador se deben a la existencia de instrucciones que no conoce, es decir, que no se encuentra en su tabla. Si se detectan errores durante la compilación, se genera igualmente un programa objeto por supuesto inservible y además una lista de errores que indica la línea de código fuente en que fue detectado el error y el tipo. Estos errores se llaman errores sintácticos. Una vez que hemos escrito y compilado el programa, es decir, después de la creación de los módulos solo queda unirlos mediante un enlazador cuyas dos tareas son: enlazar los módulos en código maquina y convertir esos módulos en un programa ejecutable. Y después de la obtención de un programa ejecutable, sin errores de compilación ni de enlazado viene la parte más difícil: comprobar a través de la depuración que el programa funciona bien; o sea, que no contiene errores lógicos, es decir, errores que se producen en los ordinogramas y en la codificación y tienen como resultado un funcionamiento incorrecto del programa. A través de un depurador se obtiene un programa libre de errores, es decir, depurado.

42

El compilador interpreta el programa dando lugar a un archivo de código objeto del programa inicial. A continuación se enlaza para producir un archivo ejecutable. Este enlazador tiene como misión unir los módulos del programa que han sido compilados anteriormente y las funciones de la biblioteca del compilador C. Una función biblioteca es una función ya hecha , estas funciones se guardan con ficheros, cada fichero contendrá las funciones. Este tipo de funciones se declaran al principio del programa. Ejemplo: include

TEMA V PROGRAMACION EN C • ELEMENTOS DE UN LENGUAJE • TIPO DE DATOS • FUNCIONES DE ENTRADA O SALIDA • ENTENCIA DE CONTROL • ESTRUCTURA DE UN PROGRAMA ELEMENTOS DE UN LENGUAJE: • Palabras clave • Separadores • Operadores • Identificadores • Constantes • Cadenas de caracteres: string. Palabras clave: son las que constituyen realmente el lenguaje, son un conjunto de instrucciones equivalentes a las utilizadas en el pseudocodigo. Todas las palabras reservadas se deben escribir en minúscula Las palabras clave no se pueden utilizar como identificadores, Estas son:

43

PALABRAS CLAVE ELSE SWITCH

BREAK FLOAT

UNSIGNED

CASE FOR

VOID

CHAR IF

WHILE

CONTINUE INT

SIGNED

DEFAULT LONG

AUTO

DO RETURN

RETURN

DOUBLE SHORT

SIZEOF

CONST TYPEDEF

VOLATILE

GOTO UNION

INTERRUP

REGISTER ENUM

Identificadores: un identificador es el nombre de un puntero, de un array, de una etiqueta de las variables y constantes que el usuario puede definir. Un identificador consiste en una secuencia continua (sin espacios en blanco)de letras ,carácter de subrayado y digitos, si bien el primer carácter debe ser una letra o un subrayado nunca un digito. Es importante saber que en C las minúsculas y las mayúsculas son diferentes. Conviene elegir nombres cuyo significado se identifique fácilmente con el propósito del identificador. Por consiguiente, suelen ser más recomendables los nombres largos para los identificadores. Habitualmente se utilizan las mayúsculas para los nombres de las constantes y las minúsculas para los nombres de las variables. Separadores: En C se consideran separadores los espacios en blanco, los tabuladores, los cambios de línea y los comentarios. Los espacios en blanco pueden aparecer practicamente en cualquier lugar del codigo fuente C. Los comentarios son una clase de espacios en blanco que se representan asi: /*nombre del programa*/ Constantes: el concepto de constantes en un lenguaje de programación se aplica a los valores usados en un programa y que se pueden calcular en tiempo de compilación. Las constantes no solo son numéricas (enteras, fraccionarias) también pueden existir constantes que sean caracteres (letras) o palabras.

44

Las llamadas constantes simbólicas son un nombre que sustituye una secuencia de caracteres la cual puede ser representada por: Una constante numérica Una constante de caracteres Una constante de cadena de caracteres Cuando se compila un programa cada aparición de la constante simbólica se sustituye por la secuencia de caracteres. Las constantes tienen que declararse al principio y se escriben en mayúsculas para diferenciarlas de las variables Representación: • Define nombre texto • Define PI 3,1416 • Define LETRA `A' • Define MENSAJE ha ocurrido un error • Define : Es una directiva del compilador la cual permite definir constantes y variables es decir identificar los datos utilizados en las operaciones realizadas en el programa. Debe estar colocada totalmente en la izquierda seguida del nombre y del valor de la constante. Las constantes y variables definidas en la cabecera son elementos comunes a todo el programa. Operadores: en C se utilizan los operadores para representar operaciones aritmeticas. Caracterisitcas a tener en cuenta de alguno de ellos: − En la division en C el valor de la izquierda de la barra se divide por el que se encuentra a su derecha. Ejemplo : A=B/C; la division (\) funciona de manera distinta con valores de tipo INT y FLOAT. La division en coma flotante da como resultado una division en coma flotante. Sin embargo la division entre enteros produce un entero. Tambien se puede realizar una division mixta en la que se divida un flotante entre un entero cuyo resultado final es un FLOAT porque el menor tipo se transforma el de mayor tipo al realizarse una operación (según las conversiones de tipos). La division entera no redondea al entero mas proximo sino que lo hace por defecto. − El operador de adicion (+) hace que los dos valores situados a su derecha e izquierda se sumen. Los operandos pueden ser de tanto constantes como variables. Ejemplo : Ganancia=salario+ sisa; Hace que el ordenador consulte los valores de las variables de la derecha, los suma y asigna el total a la variable de la izquierda. − El operador de sustracion (−)hace que se reste el numero situado a su derecha del situado a su izquierda. Ejemplo :

45

total=224−23; − El operador modulo (%) se emplea en aritmetica de numeros enteros. Proporciona el resto de la division entera(es decir sin decimales)del numero entero situado a su izquierda entre el situado a su derecha. Ejemplo : resto=variable1%variable2; este operador no funciona en un numero de punto flotante. − El operador condicional(?:) es un operador terciario es decir que usa tres operadores. Sintaxis EXPRESION 1? EXPRESION2: EXPRESION 3 Este operador evalua la expresion1. Si el resultado es distinto de 0 es decir verdadero evalua la expresion2. El resultado de esta evaluacion sera el resultado del operador. Si por el contrario el resultado de la primera es igual a 0 , es decir, es falso, el resultado sera el que se obtenga de la evaluacion de la expresion 3. Ejemplo : mayor =(A>B)?A:B Aunque el operador es complejo practicamente equivale a una sentencia de control del flujo del programa. Antes de ser utilizado debemos tener en cuenta que el codigo del programa debe ser legible tanto para nosotros como para el resto de programadores. − En C el operador de asignacion (=) no significa igual a. Es un operador de asignacion de valores. Ejemplo Suma = 1; Lo que hay a la izquierda del signo igual es el nombre de la variable mientras que lo que hay a la derecha es el valor de la misma. Con el operador de asignacion, se puede asignar a varias variables a la vez un mismo valor de la siguiente forma: Chita= tarzan= jane =68; Estas asignaciones se efectuan de derecha a izquierda es decir jane toma en primer lugar el valor 68, a continuacion lo toma tarzan y por ultimo chita. Cadena de caracteres. Una cadena de caracteres consiste en una serie de caracteres que van entre Es decir son ARRAYS de caracteres es decir de tipo char En el lenguaje C es obligatorio que todas las variantes se declaren antes de ser utilizadas OPERADORES O. ARITMETICOS

O. MONARIOS

SUMA = +

(también llamados de incremento y decremento)

RESTA= −

OPERADOR CONDICIONAL Es un operador ternario es decir con tres 46

++i (La variable i se incrementa una unidad antes operandos. de ser utilizada, es el llamado modo prefijo.) Representacion: (si divido un numero real entre un n° entero el resultado es un i++ (la variable i se incrementa 1 unidad después Expr1? expr2:epr3 ; n° real) de ser utilizada, es el llamado modo sufijo.) DIVISION = /

MULTIPLICACION = *

−−i

Ejemplo:

RESTO DE LA DIVISION ENTERA= % (modulo)

i−−

Si f

printf (i=%d,i)−−−2

min= (f =

( estos operadores solo se pueden aplicar a variables)

¡ NOT − NEGATIVO

MENOR IGUAL < = O. DE DIRECCION: * ( operador de contenido de apuntado) *pun

nunca a expresiones para hacer algo similar con expresiones se utilizan los operadores de asignación.)

(cambia el signo de la variable)..

O.ASIGNACION

> desplazamiento a la derecha

+ = (i =i+d) (i+=d) & and para bits −= (i=i+d) (i−=d) | or para bits *= (i=i*d) (i*=d) ^ or exclusivo (bits) /= (i=i/d) (i/=d) %= (i=i%d) (i%=d) PRECEDENCIA Y ORDEN DE LOS OPERADORES: ()[]& 47

−−,++,~,! ^ *,/,% | +,− && || = ?: ==,!= /=,*=,−=,+=,= TIPOS DE DATOS Los tipos de datos básicos de C son: • INT : es un tipo de dato numerico que guarda numeros enteros positivos o negativos. Utiliza 16 bits para su almacenamiento. Con las variables int pueden utilizarse los cualificadores SIGNED, UNSIGNED, SHORT y LONG. Ejemplos : Tipo identificador; Int letra; • CHAR: se utiliza para variables de tipo carácter. Guardan caracteres del codigo ASCII. Necesitan 8 bits para su almacenamientos. Pueden utilizar los cualificadores SIGNED y UNSIGNED. Ejemplos: Char identificador; Char letra='a'.otra='b'; • FLOAT: sirven para representar numeros en coma flotante es decir reales con precision simple de 6 digitos (como parte decimal) ocupa normalmente 32 bits. Pueden utilizarse el cualificador LONG(longfloat=double). Ejemplos : Float identificador; Float numero; • DOUBLE: representa un numero en coma flotante con doble precision tiene 14 digitos de precision y ocupa 64 bits.. representa datos del mismo tipo que el float pero con mayor precision . el double se emplea poco porque necesita el doble de memoria que un float. Por ejemplo una variable que controla un bucle for es mejor definirla como int, por que las entera contienen pocos bits y se procesan mas rapidamente que las float o doubles. Permite el cualificador LONG, Ejemplo : Double identificador; Double numero; EXTENSION DE LOS TIPOS DE DATOS: 48

De los cuatro tipos de los anteriores se pueden derivar otros tipos de datos. Esto se realiza por medio de calificadores o modificadores que se colocan antes del nombre tipo. • SHORT: acorta los rangos de los tipos de variables. Puede utilizarse con las variables de tipo INT, pero con estas el resultado final seria el mismoque si no usaramos SHORT. Es decir ocupa el mismo espacio que un int normal ,16 bits. Ejemplo: modificador cualificador identificador; Short int numero; • LONG : alarga los rangos de los tipos de las variables. Se puede emplear tanto en los numeros enteros (long int) como en los numeros en coma flotante (long float) e incluso en los double. El almacenamiento del long int es, normalmente, dos veces el de un entero, ocupa pues 32 bits y puede tomar valores positivos y negativos. Un long float ocupa el doble que un float e igual que un double. Por lo tanto no hay ninguna diferencia entre double y long float. Ejemplo : Long float identificador; Long float numero; • SIGNED y UNSIGNED: los definidos como signed pueden ser positivos o negativos, mientras que los unsigned no guardan valores negativos. El unsigned int puede tomar valores mayores que los int porque no tiene signo. Ocupa 16 bits. Ejemplo : Unsigned int variable; Cuando hay que poner mas de un cualificador, estos se pueden colocar en cualquier orden. Si en una definicion de variable no se escribe ni el tipo de dato ni el cualificador o simplemente se escribe el cualificador se sobreentiende que el tipo de dato es INT. Los cualificadores INT y CHAR pueden combinarse con los modificadores SIGNED y UNSIGNED. La utilidad de SHORT y LONG es proporcionar diferentes tamaños de datos. TIPO DE DATOS SHORT LONG CHAR INT FLOAT DOUBLE

Enteros Enteros Caracteres Enteros Reales Reales

4 bytes 2 bytes 1 bytes 2 bytes 4 bytes 6 bytes

En una declaración asociamos un tipo de datos a una variable, las variables hay que declararlas antes de que se empiecen las sentencias ejecutables Otro tipo de datos son

49

• VOID : Es un dato muy especial que se utiliza en estos casos: • para indicar que una funcion no tiene parametros o argumentos. • Para indicar que una funcion no devuelve ningun valor • Para crear punteros genericos. Sintaxis: void main −−−− se coloca cuando la funcion no devuelve parametros Main (void) −−−se coloca cuando la funcion no recibe parametros. Void main (void)−−− cuando ni devuelve ni recibe parametros Cuando una funcion recibe y devuelve parametros se escribe MAIN( ). Para definir un puntero se utiliza la sintaxis siguiente: void*P • PUNTERO: Una variable de tipo puntero es un tipo de dato cuyo valor es la direccion de almacenamiento de otro tipo de dato(variable)dentro de la memoria del ordenador, es decir una variable contiene la direccion de otra variable. Con estos tipos de datos se definen dos nuevas variables: &(direccion) y *(contenido). En la declaracion de un tipo de dato puntero debemos indicarel tipo de dato al que se apuntara dicho puntero. Sintaxis: tipo dato*P Char*p ENTRADA O SALIDA DE DATOS ENTRADA: • SCANF :. Es una función permite leer datos de la entrada estándar, es decir, el teclado y almacenar el resultado de la lectura en las variables que recibe como argumento. Se utiliza para introducir cualquier combinación de valores numéricos, caracteres sueltos o cadenas de caracteres. Según el formato especificado en el primer argumento almacena elresultado de la lectura en las variables que recibe como argumentos. La sintaxis de scanf es: Scanf ( formato, lista de argumentos); Scanf (%d %d, & n1 & n2); En FORMATO debemos especificar el formato de los datos que se van a leer Para ello se utilizan las mismas especificaciones que len la funcion PRINTF mas otra especificaion que se utiliza para leer un entero corto (%h) 50

Las funcion Scanf recibe los argumentos por referencia para almacenar el valor leido; Esto significa que tras la cadena de formato debe especificarse la direccion de la variable donde se almacena el valor, codificado según el descriptor de la cadena de formato. Hay que tener en cuenta dos reglas para su utilizacion: • Si se desea leer un valor perteneciente a cualquiera de los tipos de datos hay que colocar el nombre de la variable precedido de un aspersan &. • Si se desea leer una variable de tipo carácter no se tiene que usar el aspersan &. Ejemplos : Scanf (%d;&numero); Scanf (%s %s,frase1,frase2); Hasta que se explique mas detalladamente el paso de parámetros en las funciones diremos que una variable se pasa por referencia cuando va precedida del operador & en la llamada a una función. Cada elemento de la lista de argumentos debe tener su especificación en el formato. La funcion Scanf devuelve el control cuando recibe un carácter nulo o de terminacion (pulsar INTRO despues de leer el dato) o bien cuando se produce un error en la conversion. • GETCHAR: esta función mucho más sencilla que la anterior no tiene argumentos y simplemente devuelve el carácter leido en forma de entero sin signo. Es una función que lee un carácter del dispositivo de entrada estándar, es decir, el teclado. Se declara antes la variable donde lo vamos a guardar y luego coge su contenido El prototipo de esta función es: Variable getchar (argumentos); Char x; X= getchar( ); • GETS: Función que lee una cadena entera de caracteres hasta que se pulse intro. Si utilizamos scanf para una leer una cadena de caracteres parara cuando encuentre un espacio en blanco su sintaxis es así: Gets (variable); Ejemplo: Char línea; [20] ( tengo una variable llamada línea que como mucho tiene 20 caracteres) Gets (línea); ( con Scanf seria así: Scanf (%S, línea); ) Otras funciones de entrada son getch( ) y getche ( ). SALIDA: • PUTCHAR: Es una función simétrica a getchar que nos saca un carácter por pantalla sin salto de linea 51

Sintaxis: Char letra; Putchar (letra); • PRINTF: Es una función que básicamente lo que hace es imprimir o sacar por pantalla una cadena de caracteres. Esta definida en la biblioteca STDIO por lo que hay que incluir el archivo Stdio.h (en el cual encontramos las principales funciones de entrada y salida) mediante la directiva de precompilacion Include si se desea utilizar en un programa. La función printf tiene dos argumentos el primero se denomina formato , es %letra e indica a printf ( ) como debe de tratar el segundo argumento. Él % indica a la función que el carácter que le acompaña es un comando de control de formato que le indicara como debe imprimir el pseudo argumento. Sintaxis : Printf (formato de los argumentos,lista de argumentos); Ejemplo : printf (%i,2); En este caso la i significa que el segundo argumento es un numero entero En la función la cadena con el formato de los argumentos contiene los comandos que le indican a la función tanto como visualizar los argumentos sobre la pantalla, como el n° de dichos argumentos. Los argumentos se separan por comas en la lista de argumentos. COMANDO

TIPO DE ARGUMENTO Carácter. Entero Decimal

%C %D %E %F %O %S %U %H %I

Flotante en Notación científica

%ID

Hexadecimal

%p

Entero

%x

Entero largo

Real decimal Octal Cadena de caracteres Entero Decimal sin signo (unsigned)

Puntero Entero hexadecimal sin signo Lo que hace la función printf( ) cuando se la llama es analizar la cadena de formato. Todos los caracteres imprimibles, los que no estén precedidos por un %, se muestran en la pantalla como tales. Cuando encuentra un comando de formato, lo utiliza para saber como imprimir el argumento correspondiente según dicho 52

formato. Los comandos de formato y los argumentos deberán coincidir de izquierda a derecha. La cantidad de comandos de la cadena de formato le indica a la función cuantos argumentos debe esperar. Esta función nos saca mensajes de información por ejemplo: Printf(introduce dos valores/n); Cuando utilizamos la contrabarra el cursor pasa línea. Secuencias de escape: estan formadas por la barra invertida \ seguida de uno o mas caracteres permitidos . gracias a estas secuencias se pueden enviar ciertos caracteres especiales al monitor, a la impresora. Son: \a (sonido),\n(salto de linea), \f(salto de hoja o barrido de pantalla);\\ (representacion de la barra); \? (representacion de la interrogacion); \ (representacion de las comillas); \b (espacio atrás); \r (retorno de carro); \t (avance de carro); \0(null);.. • PUTS: Esta función escribe una cadena de caracteres por pantalla seguida por un salto de linea es decir no es necesario añadir \n al final de la cadena , lo añade la misma funcion. La rutina que implementa PUTS es mucho mas corta que la de printf . Su sintaxis es: puts (cadena de caracteres); Ejemplo: Char línea [20]; Puts (línea) SENTENCIAS DE CONTROL DE UN PROGRAMA Las sentencias se corresponden con las instrucciones vistas en el pseudo código, constituyen el esqueleto de un programa. Estas sentencias no son mas que un conjunto de palabras que indican al compilador cosas como cual es la próxima sentencia a ejecutar. TIPOS: • SENTENCIAS DE SELECCIÓN: las instrucciones que se van analizar nos permiten elegir o una sentencia o otra. • If− else: sirve para elegir si se ejecutara una sentencia u otra, en función del valor booleano de una expresión. Su sintaxis es: If (condición) { sentencia1; } 53

else { sentencia 2; } También es posible que dentro de cada sentencia haya otra estructura if−else es lo que se llama anidamiento En el caso de que no halle ninguna sentencia sino se cumpliese la condición no haría falta poner else. Funcionamiento: Se evaluala condicion. Si esta es cierta (valor distinto de 0)se ejecuta la sentencia 1. Si es falsa (la condicion es 0) y existe la parte else, se ejecuta la sentencia 2. En caso de no existir else o de haber ejecutado una de las dos sentencias se pasara a la siguiente sentencia del programa. Tanto la opcion 1 como la opcion 2 pueden estar formadas por una (sin llaves) o mas proposiciones(con llaves). • Switch: corresponde con la estructura según del pseudo código que permite la elección de uno o varios casos. Es llamada la funcion de la selecion multiple. El switch evalúa la expresión que debe ser obligatoriamente entera, que se proporciona entre paréntesis y compara su valor con todos los casos. La ejecución de sentencias comenzara en el caso en que el valor de la expresión y el caso coincidan y terminara de ejecutar sentencias cuando encuentre una sentencia brake o continue.( el primero proporciona la posibilidad de salir incondicionadamente de las sentencias for, while, switch y la segunda lo que hace es romper la secuencia de ejecución de las sentencias de un bucle haciendo que se evalúe de nuevo la condición, esta sentencia no tiene sentido en un switch) En el caso de que el valor de la expresión no coincida con ningún caso se ejecutara la sentencia del caso marcado como default que puede no existir, es decir, es opcional. No hay limitación en el n° de casos ni en las sentencias de cada uno. Sintaxis: Switch (expresión) { case 1: sentencia 1; break ; case n sentencia n; break; default: 54

sent1; sent n; Break; } • SENTENCIAS DE ITERACIÓN: Otra necesidad habitual de los programadores es la de ejecutar una sentencia un determinado numero de veces: es lo que se denomina BUCLE. El C dispone de las siguientes instrucciones para este propósito • Do−while: ejecuta en primer lugar la sentencia y luego evalúa la expresión. Si al volver a evaluar la expresión esta sigue siendo cierta, se ejecuta la sentencia de nuevo y así sucesivamente hasta que se dé lo contrario. Esta función coincide con la estructura repetir del pseudo código. La sintaxis es la siguiente: Do { sent 1; sent n; } while (condicion); • While: Permite repetir una sentencia mientras una determinada expresión sea cierta. Si la condicion es falsa, no se entra enel bucle y no se ejecutan las sentencias controladas por el while. La sentencia debera modificar alguna de las variables de la expresion para que en algun momento la condicion sea falsa; si esto no ocurre asi se producira un bucle infinito. Como en las demas sentencias de control, si escribimos dos o mas acciones deberemos incluir llaves que indiquen el inicio y el final de la estructura. Por lo tanto se pueden anidar bucles while. Los bucles while son los menos apropiados en las situaciones en las que ya se conoce el numero de iteraciones exacto que va a realizar el bucle. Su utilizacion se reserva a casos inesperados de finalizacion del bucle. Corresponde con la estructura mientras del pseudo código Su sintaxis es: While (expresión) { Sentencia: }

55

• For : Es similar al while , es preferible usar el for cuando la modificacion de la expresion es simple. Su sintaxis es: For (valor inicio; valor final; incremento) { sentencia 1 sentencia N } La primera parte del bucle for, usa una expresion de asignacion para una o mas variables. Si se inicializa mas de una variable se deberia separar por comas. La segunda parte, condicion , consta de una comparacion logica que utiliza los operadores logicos de relacion. La tercera parte, incremento, consiste normalmente en incrementar una o mas variables. La condicion podra ser simple o compuesta pero tiene siempre el sentido de un while (MIENTRAS SE CUMPLA LA CONDICION). Cuando un bucle esta formado por varias sentencias se tiene que utilizar las llaves en el caso de que solo haya una sentencia no es necesario utilizarlas. Las tres partes del for se separan por (;) y cualquier otro argumento adicional que se incluya en el bucle se separa por comas. En C se pueden omitir las tres partes del for. En este caso la condicion siempre sera verdadera y sera un bucle infinito FOR(;;) el cual se ejecuta hasta que alguna de las sentencias que esten dentro del bucle pase el control al exterior. • SENTENCIAS DE SALTO: • Break: El bucle examina una serie de datos hasta que un valor dado de una de ellas asigne la salida del bucle. La sentencia break nos permite salir de los bucles for while y do−while, antes de alcanzar el valor terminal que determina la salida de los mismos. En caso de estar en sentencias anidadas lo que hace es salir incondicionalmente de las mas interna. Es sintacticamente correcta usarla en cualquier bucle, pero atenta contra la programacion estructurada y hace dificil mantener y leer los programas puesto que se esta añadiendo otro punto de salida en los bucles. La unica situacion en la que esta justificada su utilizacion es para separar los casos de una sentencia SWITCH. Sintaxis: break; • Continue: Si por alguna razon, generalmente debida a un mal diseño, fuese estrictamente necesario salir de un bucle, disponemos de una estructura menos agresiva que el BREAK;. 56

Lo que hace CONTINUE; es romper la sentencia de ejecucion de las sentencias de un bucle, haciendo que se evalue de nuevo la condicion. Esta sentencia es utilizable en los tres tipos de bucles pero no en switch. Al igual que en el break, interrumpe el flujo del programa; sin embargo en lugar de finalizar el bucle completo, CONTINUE hace que el resto de la iteracion se evite , comenzando una nueva iteracion. Ejemplo : While ( (ch =getchar( ) ) ¡= `#') { if (ch=='n') continue; putchar (ch); } CONTINUE hace que se ignore los caracteres nueva linea; sin embargo, el bucle se abandonara unicamente cuando se localice el carácter `#'. Este fragmento se podria haber expresado tambien asi: While ( (ch=getchar( ) )!= `#') If (ch!='n'); La referencia CONTINUE puede ayudar a acortar algunos programas,en especial si existen sentencias If else anidadas. ESTRUCTURA DE UN PROGRAMA BASICO • Include Include: Es una sentencia de inclusión de archivos que permiten incluir otros ficheros tanto del usuario como del fabricante. Estos archivos contienen la declaración de funciones, variables, y constantes utilizadas por el programador. Cuando el ordenador encuentra un comando (#include) , busca el fichero que corresponde al nombre que le sigue y lo incluye en el fichero actual. Es conveniente que los archivos include figuren al principio. Stdio.h: es un archivo que contiene informacion relacionada con la entrada y salida de los datos. Proviene de STANDARS INPUT/OUTPUT HEADER. Este archivo contiene información de utilidad para el programa. Ejemplo :

57

#include #include stdio.h #include a:stdio.h busca en el disco a: incluimos ficheros porque estos contienen la informacion necesaria . por ejemplo el stido.h contiene tipos y macros necesarias para la entrada/salida standard. math.h declara prototipos para funciones matematicas. Etc • Define nombre cadena Permite definir opciones y variables. Es decir identificar los datos utilizados en las operaciones realizadas en el programa esto no es obligatorio depende del programa. Esta directriz sirve para definir constantes simbolicas que se utilizaran a lo largo de todo el programa. Al compilar el programa el valor sera sustituido en cualquier lugar donde aparezca el nombre referido. Este proceso se llama sustitucion en tiempo de compilacion. El nombre de la constante (identificador) y el valor son introducidos por el usuario. La sentencia #define se puede utilizar para constantes de tipo carácter y cadenas, empleando apostrofes para los primeros y comillas para los segundos. La expresion situada detrás de #define que se utilizara en todo el listado se denomina identificador.la expresion que lo sigue es el valor que sustituira al identificador durante la ejecucion del programa y se le denomina texto. El identificador esta separado del texro mediante un espacio en blanco. Por convenio el identificador se escribe en mayusculas. Ejemplos : #define PI 3,14; #define ESS `S' Otra utilidad seria; supongamos que en un programa se necesita imprimir un mensaje error, en varios lugares de un programa. Se puede crear la diractiva: #define ERROR printf (\n *** ERROR***\n) si en el programa aparece: if (estado>dato) error; ahora error se sustituiria por printf(\n***ERROR***\n) Void main ( ) La funcion main es la funcion principal que aparece en la cabecera de un programa. Es el punto de entrada al programa y el punto de salida. Solo se puede utilizar una unica vez en cada programa, ya que si se usa mas 58

veces el compilador no reconoce cual es el que indica el comienzo. Los parentesis indican que hacemos referencia a una funcion. Según como sea el programa puede estar escrita de las siguientes maneras: VOID MAIN ( ). INT MAIN o MAIN ( ) Del dato VOID ya se hablado. { Una lista de declaraciones de argumentos: es decir de variables ya declaradas al principio. Sentencias y operaciones: En un programa se deben especificar paso a paso las instrucciones para la resolucion del problema en forma de sentencias. Cada sentencia deber terminar en punto y coma que indica el final de la instrucción. } Las llaves se utilizaran para encerrar un conjunto de sentencias. Estas son obligatorias cuando hay mas de una sentencia y no lo son cuando solamente hay una. Señalan el comienzo y el fin del cuerpo de la funcion. TEMA VI LAS FUNCIONES INTRODUCION Una funcion es una unidad de codigo de programa auto contenida diseñada para realizar una determinada tarea. Las funciones de biblioteca vistas hasta ahora sirven para realizar operaciones o calculos de uso comun. Sin embargo podemos definir nuestras propias funciones para que realicen determinadas tareas. El uso de estas funciones permite dividir un programa grande o complejo en un cierto numero de componentes mas pequeños cada una con un proposito unico e identificable. Esta tecnica se llama TOP DOWN o modularizar y presenta unas ventajas : • Evita la repeticion de instrucciones en distintos lugares d el programa. • Facilita la comprension de los programas y su modificacion. • Aumenta la reutilizacion del codigo. La razon principal del uso de las funciones es la evitacion de las odiosas repeticiones. Escribiendo una sola vez la funcion apropiada, podremos emplearla cualquier numero de veces en un 59

determinado programa, en diferentes situaciones y localizaciones. Una funcion es un segmento del programa que realiza determinadas tareas bien definidas entonces todo programa consta de una o mas funciones una de las cuales es la funcion MAIN ( ) la cual tiene que estar siempre y la ejecucion de un programa comienza con las instrucciones contenidas en ella . Las funciones lo mismo que las variables tienen que declararse y estas definiciones tienen que ser independientes unas de otras es decir , una funcion no necesita de otra para realizar su tarea. Al acceder a una funcion se ejecutan las instruciones que la forman. Se puede llamar a una funcion desde diversos puntos del programa y una vez que se han ejecutado las instrucciones que forman la funcion se devuelve el control al punto desde que se accedio a el. Normalmente una funcion procesa informacion la cual es pasada desde el punto en el que se accede a la funcion y devuelve un solo valor al punto desde donde se llama a la funcion. La informacion se la pasa a la funcion mediante unos identificadores o variables que son argumentos o parametros y se devuelve con la sentencia RETURN. DEFINICION DE UNA FUNCION: Para definir una funcion hay 3 componentes principales: • Primera linea. • Declaracion de los argumentos. • El cuerpo de la funcion. La primera linea : Sintaxis: TIPO _DATO NOMBRE (ARG FORMAL,,ARG FORMAL N) Tipo dato : contiene la especificacion del dato devuelto por la funcion. Cuando la funcion devuelva un dato que no sea entero, se debe usar un indicador de datos. Por defecto el indicador que toma es el int. Nombre: nombre que le damos a la funcion. Generalmente la representacion del nombre de una funcion sigue las mismas reglas que los nombres de las variables: • debe comenzar por una letra. • Se permiten digitos despues de la primera letra. • Solo son significativos los ocho primeros. Cuando se define una funcion,. No se debe poner el; despues del nombre de la funcion. Si se omite el ; se esta diciendo el compilador que se esta definiendo y no usando la funcion. Argumentos : son los argumentos necesarios para que la funcion realice su tarea van entre parentesis y separados por comas. Si la funcion no lleva argumentos simplemente se ponen los ( ).

60

Los argumentos formales son los que permiten que se transmita informacion desde el punto del programa desde donde se la llama. Los identificadores que tomamos como argumentos son locales a la funcion es decir que no son reconocidos fuera de la funcion donde se tienen definidas. Declaracion de los argumentos: En estas declaraciones se dice de que tipo son los argumentos formales que tenemos entre parentesis. Es decir cada variable de argumentos que nos se declare explicitamente se toma como int por defecto. Se deben declarar los argumentos antes de la llave que inicia el cuerpo de la funcion. Sintaxis: TIPO ARG FORMAL; El cuerpo de la funcion: Contiene las instrucciones ( declaraciones y sentencias)necesarias para que esta resuelva o realice su tarea . Contiene las tipicas estructuras y va entre { } Por lo tanto la estructura de una funcion seria asi: Primera linea Declaracion { −−−−−− −−−−−− −−−−−− return expresion; } La sentencia RETURN devuelve la informacion al punto en el que se llama a la funcion, si la funcion no devuelve nada solo se pone return; Una funcion puede incluir varias sentencias return; conteniendo cada una de ellas distintas expresiones. ACCESO A UNA FUNCION: Para usar una funcion hay que llamarla o invocarla Para llamar a una funcion se especifica el nombre y los argumentos( ), en el caso de que sea necesario una serie de argumentos van separados por comas, estos argumentos son argumentos reales por que contienen la informacion que realmente se transmite a la funcion. Se tiene que dar que exista un argumento real por cada argumento formal que hayamos puesto en la 61

declaracion de la funcion y tiene que ser del mismo tipo. Sintaxis: NOMBRE_FUNCION(LISTA_ARGUMENTOS); Ejemplo : Suma (A,B); Como devolver valores: La funcion MAIN, como casi todas las funciones puede devolver un valor a la funcion que la llamo. En el caso de MAIN el valor se devuelve al sistema operativo ,el comando que lo devuelve es main donde la expresion a retornar es la que se devuelve. La sentencia RETURN no se limita a indicar la salida de la funcion sino que tambien puede pasar un valor a quien llama a la funcion. Para pasar el valor que tecleo el usuario, cambiamos la sentencia RETUN; por RETURN (ARGUMENTO); Entre parentesis podemos poner cualquier expresion y dicha expresion puede ser tan compleja como se quiera , devolviendose solamente un valor. Con una instrucción return solo se puede enviar al programa de llamada un valor. Para el paso de mas de un valor se tienen que emplear los punteros . La palabra return hace que el valor de la expresion encerrada entre parentesis, cualquiera que sea, quede asignada a la funcion que contenia dicho return. Ejemplo: suma de dos cantidades #include int suma (a , b) int a , b; { int res =0; res=a+b; return(res); } void main( ) { int n1, n2 , resultado=0 printf (dame dos numeros);

62

scanf (%d %d ,&n1, &n2); resultado=suma(n1,n2); printf (el resultado es %d,resultado); } Programa que lea un dato por teclado y diga si el dato >5(mensaje) y si el dato es5) { max=x; printf(el maximo es %d,max); return; } else { max=5 d=5−n; pintf(la distancia es %d, d); return; } }

63

void main () { int n1; printf(dame un numero); scanf(%d,&n1); void maximo(n1); } como especificar tipos de funciones. El tipo de una funcion queda determinado por el tipo de valor que devuelve, no por el tipo de sus argumentos. Las funciones se suponen del tipo int, a menos que se indique lo contrario. Si una funcion no es del tipo int se debera advertir en dos sitios: • Al declarar el tipo de la funcion en su definicion • Al declararse el tipo de funcion en la funcion de llamada. Esta declaracion debe incluirse junto con las declaraciones de variables;en la declaracion se incluiran el nombre de la funcion y los parentesis (sin argumentos) con el fin de identificar dicho nombre como funcion. En C todas las funciones del programa tienen la misma estructura. Cada una puede llamar a otra funcion o ser llamada porotra. De hecho una funcion puede llamarse a si misma. El proceso por el cual una funcion se llama a si misma recibe el nombre de recursividad. En el caso de que se quiera llamar a una funcion b( ) desde una funcion A( ), se deben Declarar, para evitar errores fuera de la funcion main( ): • Calcular el factorial de un numero que sea mayor que 1 #include void main ( ) { int n, contador=0, factorial=1; printf ("dame un numero\n"); scanf ("%d", &n); if (n=b) { maximo1=a; } else { maximo1=b; } if(c>=d) { maximo2=c; } else {

65

maximo2=d; } if (maximo1>=maximo2) { printf("el maximo es %f\n",maximo1); } else { printf("el maximo es %f\n", maximo2); } } • Programa que nos pida numeros y los vaya sumando , nos de la media, hasta que introduzcamos un numero negativo. #include void main () { /* declaracion de variables*/ float n,suma=0,media=0,introducidos=0; printf ("dame un numero\n"); scanf ("%f", &n); while (n>=0) { suma=suma+n; introducidos=introducidos+1; printf ("dame un numero\n"); scanf ("%f", &n); } 66

if (introducidos!=0) { media=suma/introducidos; printf ("la media es %f y la suma es %f\n", media, suma); } } • Programa que determine la cantidad a pagar por una llamada telefonica dependiendo de: toda llamada que dura − de 3 minutos tiene un coste de 10 pts, cada minuto mas es un paso de contador y cuesta 5 pts mas. #include void main () { float tiempo,dinero=0,contador=0; do { printf ("dame el tiempo\n"); scanf("%f",&tiempo); } while (tiempo