0% encontró este documento útil (0 votos)
2 vistas48 páginas

Ud3. Programación

Cargado por

Boryo ves
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas48 páginas

Ud3. Programación

Cargado por

Boryo ves
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Índice

Índice 1
UD3. PROGRAMACIÓN 3
INTRODUCCIÓN 3
OBJETIVOS 4
CONOCIMIENTOS PREVIOS 4
1. INTRODUCCIÓN A LA PROGRAMACIÓN 4
1.1. ALGORITMOS Y PROGRAMAS 5
1.2. REPRESENTACIÓN DE ALGORITMOS (1) 6
1.2. REPRESENTACIÓN DE ALGORITMOS (2) 7
EJERCICIO CON SOLUCIÓN 1 9
1.3. PARADIGMAS DE PROGRAMACIÓN (1) 12
1.3. PARADIGMAS DE PROGRAMACIÓN (2) 15
1.3. PARADIGMAS DE PROGRAMACIÓN (3) 16
1.4. LENGUAJES DE PROGRAMACIÓN 17
2. INTRODUCCIÓN AL LENGUAJE C 19
2.1. ESTRUCTURA DE UN PROGRAMA EN C (1) 20
2.1. ESTRUCTURA DE UN PROGRAMA EN C (2) 21
2.2. ARCHIVOS FUENTE Y ARCHIVOS CABECERA 23
2.3. EL LÉXICO DEL LENGUAJE C 24
2.4. TIPOS DE DATOS FUNDAMENTALES EN LENGUAJE C 25
2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA ESCRITO
EN C (1) 25
2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA ESCRITO
EN C (2) 27
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA ESCRITO
EN C (3) 29
2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA ESCRITO
EN C (4) 31
3. DESARROLLO DE PROGRAMAS EN LENGUAJE C 33
3.1. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA ESCRITO
EN C (1) 34
3.1. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA ESCRITO
EN C (2) 35
3.2. OPERADORES Y EXPRESIONES (1) 36
3.2. OPERADORES Y EXPRESIONES (2) 38
3.3. MOSTRANDO ELEMENTOS POR SALIDA ESTÁNDAR 39
3.4. LECTURA DE VALORES DESDE TECLADO 41
3.5. SENTENCIAS DE CONTROL DE FLUJO (1) 42
3.5. SENTENCIAS DE CONTROL DE FLUJO (2) 43
EJERCICIO CON SOLUCIÓN 2 45
CONCLUSIONES 46
RECAPITULACIÓN 46
AUTOCOMPROBACIÓN 47
PROPUESTAS DE AMPLIACIÓN 47
BIBLIOGRAFÍA 47
GLOSARIO 47

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
UD3. PROGRAMACIÓN
INTRODUCCIÓN
El desarrollo de aplicaciones y programas informáticos requiere el empleo de
un conjunto de técnicas y procedimientos para garantizar soluciones efectivas y
libres de errores que den una respuesta ágil y eficiente a determinados
requisitos en materia de procesamiento de la información.

Por esta razón, es fundamental que la escritura de programas informáticos se


realice aplicando un conjunto de técnicas de ingeniería en todas las fases de su
proceso. De esta forma, aunque nos sintamos dispuestos, casi
inmediatamente, a comenzar a escribir líneas de código, es muy importante
que, en primer lugar, se analicen en detalle las características del problema a
resolver. Con esta información se podrá plantear una propuesta de solución
consistente en conjunto de acciones y operaciones, es decir, un algoritmo,
que, como primera aproximación, podremos plantear mediante una
representación esquemática.

Así, tras comprobar que la secuencia algorítmica diseñada constituye una


solución al problema planteado, estaremos en condiciones de comenzar a
escribir el programa, propiamente dicho, que implemente formalmente sus
instrucciones y pasos.

Para llevar a cabo esta fase, conocida como codificación o desarrollo, se


utilizará como herramienta un lenguaje de programación que permita, con
sus elementos y estructuras, expresar las acciones especificadas por el
algoritmo.

Igual que el desarrollo de un programa no comienza con la escritura directa del


código, tampoco finaliza de este modo. Así, tras la codificación, será necesario
verificar que el programa realiza adecuadamente su función y no se obtienen
resultados inadecuados ni situaciones de error no contempladas.

Además del lenguaje de programación utilizado, los desarrolladores utilizarán


otras herramientas para las distintas fases del proceso como compiladores,
entornos de ejecución, depuradores, etc. Habitualmente, suelen agruparse en
un solo paquete informático conocido como IDE (Del inglés, Integrated

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Development Environment ).

OBJETIVOS
En esta unidad se pretende que:
1. Aprendas a diseñar y representar esquemáticamente la secuencia de
pasos que establece un determinado algoritmo.
2. Puedas interpretar y seguir las distintas acciones indicadas por la
representación de un algoritmo.
3. Conozcas la importancia de los lenguajes de programación como
herramienta para la codificación de programas y aplicaciones informáticas.
4. Conozcas el concepto de lenguaje de programación de alto nivel así como
los distintos elementos que forman parte de su léxico y la sintaxis que se
emplea para construir las instrucciones.
5. Seas capaz de crear programas que implementen algoritmos utilizando,
para ello, un lenguaje de programación de alto nivel.
6. Puedas depurar los errores cometidos al codificar programas.
7. Aprendas a poner en ejecución programas que proporcionen un
determinado resultado o resuelvan un problema en cuestión.
8. Aprendas buenas prácticas a la hora de desarrollar programas y
aplicaciones como la preocupación por la eficiencia y el uso de
documentación interna.

CONOCIMIENTOS PREVIOS
Para el estudio de esta unidad no es necesario ningún conocimiento previo. Se
realizarán programas escritos en lenguaje C para cuya compilación y ejecución
podemos utilizar la máquina virtual Linux instalada en la primera unidad.

1. INTRODUCCIÓN A LA PROGRAMACIÓN
Seguramente habrás oído hablar mucho de programación y de diferentes
lenguajes utilizados para ello ¿Sabes que lenguajes son los más utilizados en la
actualidad? En este artículo
puedes hace una inmersión rápida en el tema.

Actualmente, los programas y aplicaciones informáticas constituyen una


herramienta de uso general en, prácticamente, todos los ámbitos de nuestra
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
sociedad. Así, se emplean en cualquier actividades industrial, comercial,
industrial o administrativa en la que podamos pensar.

El objetivo del desarrollo de aplicaciones informáticas no es otro que contribuir


a facilitar y automatizar determinadas tareas de forma que se incremente la
calidad de los elementos resultantes así como la eficiencia del proceso para
obtenerlos.

A continuación, aprenderemos a diseñar algoritmos utilizando elementos de


representación como los diagramas de flujo y el pseudocódigo. Más adelante,
veremos cómo codificar nuestros algoritmos utilizando un lenguaje de alto nivel
y las herramientas necesarias para obtener un programa que pueda ser
ejecutado desde el sistema operativo.

1.1. ALGORITMOS Y PROGRAMAS


1.1. Algoritmos y Programas

Un algoritmo (Solemos asociar los algoritmos al ámbito de las matemáticas o la


informática, pero son de aplicación en casi cualquier ámbito. Por ejemplo ¿Te
atreves a escribir un algoritmo para hacer una tortilla de patatas?) es una
secuencia de acciones y operaciones para resolver un determinado
problema (Podemos considerar un problema como una situación de diferente
complejidad en la que hay que llevar a cabo un cierto análisis para determinar
las acciones a realizar.) u obtener un determinado resultado.

Es importante tener en cuenta que un algoritmo define el orden


específico en que deben realizarse sus diferentes pasos para
obtener el resultado buscado. Así, la alteración de las
operaciones o del orden de éstas dará lugar a situaciones
imprevistas o de error.

Las características que debe tener un algoritmo son:


Robustez y flexibilidad: todo algoritmo debe contemplar todas las posibles
facetas del problema que queremos resolver, pero además debe ser flexible
a cambios si se produce una anomalía en la ejecución del algoritmo.
Correcto y eficiente: el algoritmo es correcto cuando da una solución al
problema a tratar y cumple con todos los requerimientos especificados tal
que cumplamos con los objetivos planteados, minimizando los pasos todo lo

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
posible.
Completitud: un algoritmo cuenta con todos los recursos para poder llegar
a una solución satisfactoria.

Por su parte, un programa es un conjunto de instrucciones escritas con arreglo


al léxico y a las normas sintácticas de un determinado lenguaje de
programación que puede ser ejecutado por una arquitectura física o virtual o
reescrito en otra codificación para hacer posible su procesamiento automático.

1.2. REPRESENTACIÓN DE ALGORITMOS (1)


1.2. Representación de Algoritmos

El objeto de la representación de algoritmos es el de facilitar la comprensión


de las acciones y operaciones que establecen y el orden en que lo hacen.

Una de las ventajas más importantes de la obtención de una representación


esquematizada de un algoritmo es que es independiente del lenguaje de
programación donde luego se vaya a implementar. También permite detectar
errores antes de realizar la implementación y, además, que desarrolladores
especializados en diferentes lenguajes de programación puedan colaborar
haciendo uso de los elementos comunes del esquema.

Una de las formas más comunes de representación de algoritmos son los


diagramas de flujo que permiten expresarlos mediante una de serie de
elementos gráficos prestablecidos.

Estos elementos permiten, así,


representar:
El inicio y el fin del algoritmo:
mediante un rectángulo de bordes
redondeados.
Las instrucciones a realizar:
mediante rectángulos normales o
cajas que las encierran.
La bifurcación del flujo de
ejecución. Normalmente, en base
al resultado de una condición lógica

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
específica, la secuencia de
realización de las órdenes seguirá
un camino u otro. El elemento
gráfico para la bifurcación es el
rombo.
La entrada o salida de
información desde o hacia un punto
externo al sistema que procesa el
algoritmo. Se expresa mediante un
paralelogramo.
Los elementos externos de
información a los que accede o
genera el algoritmo se representan Elaboración propia
mediante un rectángulo con uno de Elementos para representar
sus lados curvado. gráficamente un algoritmo
La conexión entre las diferentes Elementos para representar
partes de un programa se puede gráficamente un algoritmo
representar mediante un círculo. Fuente: Elaboración propia
Finalmente, la secuencia u
orden en que deben realizarse las
instrucciones y operaciones del
algoritmo se indica mediante
flechas de dirección.

1.2. REPRESENTACIÓN DE ALGORITMOS (2)


El pseudocódigo, también denominado lenguaje de descripción de algoritmos,
permite obtener una representación textual del funcionamiento y operación de
una secuencia algorítmica.

En pseudocódigo se hace uso de las estructuras propias de los lenguajes de


programación reales, pero de una forma que facilita su lectura y comprensión
por personas aún no familiarizadas con los principios básicos de la
programación.

Existe una herramienta para la escritura de algoritmos en pseudocódigo


denominada Pseint
que es software libre y, además, ofrece posibilidades muy interesantes ya que
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
permite la escritura de algoritmos en pseudocódigo y también realizar la
correspondiente representación diagramática.

A continuación, se incluye, a modo de ejemplo, un algoritmo para solicitar dos


números al usuario y obtener su suma. El algoritmo se presenta mediante un
diagrama de flujo y también escrito en pseudocódigo.

Diagrama de Flujo de un Algoritmo

Aquí puedes ver el diagrama de flujo de un algoritmo donde se solicita al


usuario que introduzca dos valores para, después, sumarlos y mostrar el
resultado.

[Link]
page=[Link]&cual=Suma&mode=flow
Algoritmo para sumar dos números introducidos por el usuario y mostrar el
resultado
Algoritmo para sumar dos números introducidos por el usuario y mostrar
el resultado
Fuente: [Link]

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Si te fijas, cuando el algoritmo muestra mensajes indicando al usuario la
introducción de un valor, se añade una flecha hacia el exterior indicando que se
trata de una información de salida (Recuerda que el paralelogramo indica tanto
entrada como salida). En cambio, cuando se lee la información introducida por
el usuario y se almacena en una variable, la flecha es hacia el interior indicando
que se trata de una entada de datos.

Pseudocódigo del Algoritmo

Aquí puedes ver el mismo algoritmo escrito en pseudocódigo.

Elaboración propia
Pseudocódigo

EJERCICIO CON SOLUCIÓN 1

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Enunciado

Se pide:

a) Obtenga el diagrama de flujo para un algoritmo donde se pida al


usuario adivinar un número obtenido de forma aleatoria. El usuario
dispondrá de tres intentos para conseguir su objetivo.

b) Escriba en pseudocódigo un algoritmo que solicite al usuario la


cantidad de números que desea introducir y, después, le vaya pidiendo
que introduzca cada uno de ellos. Al final el algoritmo mostrará el
promedio o media aritmética de los valores introducidos.

Solución apartado a

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Solución ejercicio 1a

Solución apartado b

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Solución ejercicio 1b

1.3. PARADIGMAS DE PROGRAMACIÓN (1)


1.3. Paradigmas de Programación

Programar consiste en implementar una idea de naturaleza algorítmica


utilizando un determinado lenguaje que pueda ser directamente interpretado
por una arquitectura informática, física o virtual, o trasladado mediante alguna
herramienta a un conjunto de definiciones e instrucciones que puedan ser
ejecutadas por la arquitectura en cuestión.

Podemos considerar los siguientes modelos o paradigmas (El término


paradigma puede entenderse como el conjunto de elementos y técnicas
empleados para el desarrollo de programas.) utilizados como fundamentos
metodológicos de programación:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
1.3.1. Programación con Saltos

Fue la primera técnica de desarrollo de programas y se caracteriza por el


empleo de instrucciones de salto (sentencia GOTO) para indicar la ejecución de
diferentes partes del código del programa. A medida que el tamaño del
programa crece, los saltos entre sus partes forman un entramado 1 complejo
difícil de comprender y, sobre todo de mantener 2.

1.3.2. Programación Estructurada

La programación estructurada se introduce para mejorar la legibilidad del


código y, por tanto, con el objetivo de facilitar su revisión y mantenimiento.

Con esta metodología de programación, el flujo de ejecución de los programas


se establece utilizando tres tipos de estructuras de control:
Secuenciales: Establecen la ejecución de instrucciones una a continuación
de otra.
Condicionales o de bifurcación: Permiten que se ejecuten unas
instrucciones u otras en función de una determinada condición lógica.
Iterativas o repetitivas: Permiten ejecutar una o varias instrucciones un
número específico de veces, o bien, mientras se cumpla (o no lo haga) una
determinada condición.

Además, en programación
estructurada también se hace uso de
las denominadas subrutinas que
podemos definir como unidades de
código invocadas para llevar a cabo
Elaboración propia
una funcionalidad muy concreta
Subproceso
(realizar un cálculo, añadir un
Ejemplo de subrutina 3
elemento a un conjunto, eliminar un
Fuente: Elaboración propia
elemento de un conjunto, etc.). De
esta forma, para realizar su propósito,
las subrutinas necesitan recibir una
información de entrada y,
opcionalmente, podrán proporcionar
un determinado resultado, que se
considerará información de salida.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
En programación, las subrutinas
suelen denominarse procedimientos
o funciones. De igual forma, los
elementos que una subrutina recibe
como entrada se denominan
argumentos y al resultado que se
ofrece como información de salida se
le denomina valor devuelto. En
conjunto, es habitual referirse a los
elementos de entrada y salida de una
función o procedimiento como su
interfaz (Seguramente hayas oído
hablar de los elementos que ofrece un
determinado sistema operativo o una
aplicación para su programación y
que constituyen su API (Application
Programming Interface).).

Para invocar una subrutina sólo será


necesario especificar su nombre junto
con los argumentos que se
proporcionen como información de
entrada. En el punto donde se realiza
la invocación, podemos pensar que
toda ella quedará sustituida por el
valor que devuelva.

1 A los programas creados utilizando esta técnica se les denomina “código

espagueti” porque si trazáramos líneas para representar los saltos, el resultado


se asemejaría a un plato de espaguetis.

2
El mantenimiento de los programas informáticos incluye dos aspectos
principales:
Extensión o ampliación para añadir nuevas características y
funcionalidades
Depuración para corregir situaciones de errores y/o mal funcionamiento.

3 UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
3 Supongamos que el usuario introduce 2 como valor de X. Entonces, La
llamada a la función CalcularDoble(x) corresponderá a CalcularDoble(2) por lo
que el valor devuelto como resultado de su invocación será 4. Por tanto,
podemos considerar a que la invocación a la función quedará sustituida por el
valor 4 al que se sumará una unidad para obtener el valor 5 que será el que se
muestre finalmente por pantalla.

1.3. PARADIGMAS DE PROGRAMACIÓN (2)


1.3.3. Programación Modular

Esta técnica complementa la programación estructurada mediante la definición


de módulos independientes que reúnan elementos y funciones para llevar a
cabo tareas o subtareas en que se haya dividido (La metodología “divide y
vencerás” consiste en descomponer un problema o situación en ele-mentos
más pequeños hasta que estos resulten abordables.) el problema a resolver.

De esta forma, diferentes desarrolladores pueden trabajar en la codificación de


módulos que resuelvan problemas concretos o específicos. Al final, será
necesario integrar todos los módulos para disponer del programa o aplicación
completos.

La modularidad de los programas supone un gran avance en su diseño al


facilitar tanto su desarrollo como posterior verificación y depuración. Además, la
programación modular permite comprobar de forma sencilla el grado de
eficiencia de diferentes soluciones para un mismo problema. Así, una aplicación
diseñada de esta forma permite intercambiar fácilmente un módulo por otro si
las distintas funciones y procedimientos mantienen las mismas entradas y
salidas (Es decir, si las funciones y procedimientos de los dos módulos tienen
la misma API).

Por ejemplo, existen diferentes técnicas para buscar un valor


concreto dentro de un conjunto de ellos. Si dos implementaciones
reciben el valor buscado junto con el conjunto donde hacer la
búsqueda y devuelven un valor lógico (Verdadero o Falso (true or
false). ) para indicar el éxito de la búsqueda, podremos,
fácilmente, sustituir uno por otro para evaluar el rendimiento.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Es importante, tener en cuenta que el código de cada módulo puede ser
invocado desde el propio módulo, desde otro módulo, o, desde lo que se
considera el programa principal.

Es frecuente agrupar en un módulo funciones con algún tipo de asociación


lógica: funciones matemáticas, funciones de tratamientos de estos, etc. Los
desarrolladores suelen referirse a estos módulos como bibliotecas (o el término
inglés libraries).

1.3. PARADIGMAS DE PROGRAMACIÓN (3)


1.3.4. Programación Orientada a Objetos (POO, en inglés OOP)

L a PO O es la técnica de programación de más uso en la actualidad. Esta


metodología pretende resolver el problema de separar los datos del código
donde se lleva a cabo su proceso mediante la encapsulación de ambos en una
estructura denominada clase, que servirá después como modelo para la
creación de instancias suyas u objetos. Así, a través de una clase se definirán
tanto las propiedades (representadas por los atributos) como el
comportamiento (especificado en procedimientos denominados métodos) de
todas sus instancias u objetos.

La definición de los métodos de una clase permite, además, especificar la


interfaz de comunicación (Se considera una buena práctica en POO no
acceder directamente al valor de los atributos, sino que se consultarán o
actualizarán a través del correspondiente método.) de los objetos instanciados
a partir de ella. Cada objeto conservará su propia copia de los valores
establecidos para los distintos atributos y se le podrán consultar o indicar
modificaciones mediante los correspondientes métodos.

La Programación Orientada a Objetos ofrece un mecanismo adecuado para dar


soporte a los procesos de abstracción que permiten a los desarrolladores poner
el foco de atención sobre determinados elementos de interés a la hora de llevar
a cabo el modelado del problema o situación a resolver.

Además, también es de interés el principio de ocultación que permite el uso de


clases u objetos sin conocer el detalle de la implementación interna de éstos,

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
tan sólo los elementos de entrada y salida que definen su interfaz.

1.4. LENGUAJES DE PROGRAMACIÓN


1.4. Lenguajes de Programación

En primer lugar, es importante tener en cuenta que los lenguajes de


programación se pueden clasificar en:

Lenguajes de bajo nivel (El término bajo no significa que los lenguajes
tengan pocas prestaciones sino que su sintaxis está más próxima a la
máquina que a los humanos.): Son lenguajes cuyas instrucciones pueden
ser directamente ejecutadas por una determinada arquitectura hardware y,
por tanto, están muy influenciados por sus características. El lenguaje de
más bajo nivel sería el lenguaje máquina compuesto por secuencias de unos
y ceros. Escribir programas en estos lenguajes era una labor muy costosa
por lo que rápidamente aparecieron otros lenguajes como los nemotécnicos
o de ensamblador. El código fuente escrito en estos lenguajes ya no era
directamente ejecutable en la arquitectura, pero se construía con sentencias
como ADD o JMP (del inglés JUMP) con cierto significado para los
desarrolladores. Al no ser este código directamente ejecutable por un
computador, fue necesario introducir programas para traducir el código
fuente en ensamblador a código máquina: los compiladores.
Lenguajes de alto nivel: Se trata de lenguajes donde las expresiones
tienen una forma apropiado para el mecanismo cognitivo del ser humano.
Así utilizan expresiones como while, if else, function, etc. El “alejamiento”
progresivo de la máquina física para facilitar la comprensión de los
programas implicó herramientas de compilación e interpretación (Los
programas intérpretes se diferencian de los compiladores en que, mientras
los últimos traducen el código fuente a código máquina de forma completa,
los primeros analizan, traducen y ejecutan instrucción por instrucción
(normalmente sin almacenar el resultado de la traducción). La ejecución de
un programa interpretado normalmente es más lenta pero más flexible.)
cada vez más complejos y optimizados con respecto al uso de recursos
como la memoria del sistema.
Hoy en día, a la hora de desarrollar un programa, tenemos la posibilidad de
elegir entre numerosos lenguajes de programación. A continuación, veremos
algunos de los más demandados.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
C

C
. Es un lenguaje de programación de nivel medio porque posee elementos de
los lenguajes de alto nivel, pero también permite incluir construcciones para
mantener un control a muy bajo nivel. En este sentido se trata de un lenguaje
de gran potencia vinculado al desarrollo de sistemas operativos y a la
programación de microcontroladores y otros dispositivos hardware. En este
último ámbito su presencia actual se encuentra ampliamente extendida.

Java

Java. Es un lenguaje orientado a objetos con una gran presencia en el


panorama actual del desarrollo profesional de aplicaciones. Se trata de un
lenguaje fuertemente tipado lo que significa que dispone de un sistema
automático de comprobación de tipos de datos (Otros lenguajes dejan esta
responsabilidad al programador o desarrollador) para evitar la ocurrencia de
errores. Java es también un lenguaje muy especial por el hecho de que el
código en que se escriben sus programas (código fuente) no se compila para
una arquitectura física concreta sino para una arquitectura virtual denominada
JVM (Java Virtual Machine) que puede interpretarlo para ponerlo en ejecución.
Este hecho propició que Java fuera rápidamente adoptado para el desarrollo de
aplicaciones dirigidas a entornos distribuidos como la propia internet. Además,
el hecho de correr en una máquina que, en realidad, aporta un nivel de
seguridad adicional frente a programas maliciosos.

C++

C++. Es un lenguaje de programación orientado a objetos que toma la base del


lenguaje C ya que con su creación se perseguía dotar de orientación a objetos
a este lenguaje. Posteriormente se añadió el soporte adecuado para la
programación con elementos genéricos, que se sumó a los otros dos
paradigmas ya completamente adoptados: programación estructurada y
programación orientada a objetos.

Python

Python. Es un lenguaje de programación interpretado, orientado a objetos,


multiplataforma y de sintaxis sencilla. Por otro lado, Python permite dividir su
programa en módulos reutilizables desde otros programas. El lenguaje
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
incorpora una gran colección de módulos estándar que puedes utilizar como
base de los programas. También, permite escribir programas muy compactos y
legibles. Actualmente goza de una gran popularidad por estar incluido en las
tecnologías Big Data.

PHP

PHP. Es un lenguaje de programación serverside para la generación de


páginas webs dinámicas 4, orientado al desarrollo de aplicaciones web
dinámicas con acceso a información almacenada en una Base de Datos,
destaca su conectividad con MySQL y PostgreSQL. Permite aplicar técnicas de
programación orientada a objetos. Biblioteca nativa de funciones sumamente
amplia e incluida. PHP es gratuito, portable, consume pocos recursos y tiene el
código fuente abierto.

4 Una página web estática es una cuyo contenido está recogido, por ejemplo,

en un archivo html y siempre es el mismo. Las páginas webs dinámicas, al


contrario, son el resultado de consultar datos como las butacas libres para ver
una determinara película en una sesión concreta. Lenguajes como PHP
permiten esa generación dinámica de código HTML desde el servidor.

2. INTRODUCCIÓN AL LENGUAJE C
El lenguaje C fue diseñado y definido originalmente por Dennis Ritchie sobre
una arquitectura PDP11. C es el resultado de un proceso de desarrollo
evolutivo que comenzó con el lenguaje BCPL, el cual influenció y derivó en otro
lenguaje denominado simplemente B que, posteriormente, en la década de los
años 60, daría lugar al lenguaje C.

Durante mucho tiempo, el auténtico estándar del lenguaje C fue el distribuido


con la versión V del sistema operativo UNIX implementado, en su práctica
totalidad, con este lenguaje. Debido a la gran cantidad de versiones de C que
fueron apareciendo, el instituto de estándares americanos (ANSI) promovió su
estandarización en 1990 bajo la denominación de ANSI C.

Una de las principales características del lenguaje C se desprende de su


consideración como lenguaje de nivel intermedio por permitir la combinación
de la funcionalidad del lenguaje ensamblador con los elementos típicos de los

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
lenguajes de programación de alto nivel.

Otra característica fundamental de C es la capacidad para la manipulación


directa de bits, bytes y palabras y direcciones de memoria. Esta posibilidad
hace de C un lenguaje especialmente adecuado para la programación de
sistemas operativos, donde este tipo de operaciones resultan muy habituales a
la hora de implementar sus funciones y tareas más comunes.

Otro aspecto importante de C, como se verá más adelante, es que define un


léxico con un tamaño bastante reducido. Así, C permite la codificación de
programas y aplicaciones utilizando únicamente 32 palabras reservadas o
palabras clave.

2.1. ESTRUCTURA DE UN PROGRAMA EN C (1)


2.1. Estructura de un Programa en C

El componente estructural principal del lenguaje C es la función. El empleo de


éstas permite dividir un programa complejo en tareas concretas y determinadas
que pueden codificarse por separado, con lo que se consigue dotar al
programa de modularidad. Una vez implementadas, cada función puede ser
invocada desde cualquier punto del programa, de manera que su funcionalidad
puede aprovecharse tantas veces como resulte necesario sin que ello
repercuta en efectos colaterales con otras partes del código.

Los programas escritos en lenguaje C han de estar formados por una o más
funciones y deben disponer siempre de una función principal, denominada
main(). Esta función constituirá el punto de arranque del programa porque
cuando sea ejecutado será la primera en ser invocada.

Cada función vendrá definida por los siguientes elementos:


Una cabecera, donde se especifica el tipo de datos que devolverá la
función, su nombre o identificador y una lista de parámetros formales. Esta
lista se consignará entre paréntesis y para cada parámetro se proporcionará
su tipo de datos e identificador. Si hay más de uno, los parámetros quedarán
separados por comas ( ,).
Un cuerpo, que agrupará las sentencias que implementan la tarea

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
desarrollada por la función. Dichas sentencias quedarán encerradas entre
llaves ( {...}) y cada una de ellas debe ir terminada por el símbolo punto y
coma ( ;). El cuerpo de sentencias comenzará con la declaración de las
variables locales a la función y terminará con la sentencia return
acompañada del valor devuelto por la función y por el que quedará sustituida
su ejecución. En caso de que la función no devuelva ningún valor no será
necesario incluir tal sentencia.
Otra herramienta importante para la estructuración del código son los bloques
de código. Cada uno de ellos consiste en un grupo de sentencias encerradas
entre llaves que constituyen una unidad lógica y atómica. Es decir, un bloque
puede ser considerado como una única sentencia de forma que su ejecución
no puede realizarse parcialmente.

Los bloques de código actúan también como delimitadores del ámbito de


validez o contexto de los elementos declarados en su interior. Así, por ejemplo,
una variable será conocida y, por tanto, podrá ser referenciada únicamente
dentro del bloque en el que se ha declarado pero nunca fuera de él. ANSI C
exige que las sentencias declarativas se realicen al comienzo del bloque y
nunca después de una sentencia que no sea declarativa. Se permite, además,
el anidamiento de sucesivos bloques en función de los requerimientos de
programación.

Como ayuda a la elaboración de un código más claro y legible, C permite la


inclusión en el mismo de comentarios que servirán como aclaración y
documentación interna. Los comentarios no serán tenidos en cuenta por el
compilador a la hora de procesar el código fuente y pueden incluirse entre los
símbolos /* y */. Estos caracteres hacen que todo el texto que encierran, y que
puede incluir más de una línea, tenga la consideración de comentario.

2.1. ESTRUCTURA DE UN PROGRAMA EN C (2)


En general, la estructura de los programas C propuestos para este módulo
será muy parecida a la siguiente:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Estructura programa C
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Nótese que al comienzo del archivo se proporcionan prototipos de funciones en
los que figuran el tipo devuelto por cada función, el nombre de la misma y el
número y tipo de sus parámetros formales. Esto permite que las funciones
puedan ser invocadas sin que se haya proporcionado todavía su
implementación, como se hace con las funciones f1 y f2 que son invocadas
desde main() proporcionando su implementación a continuación. Cuando se
implementen estas funciones, su cabecera debe coincidir con el prototipo
especificado.

2.2. ARCHIVOS FUENTE Y ARCHIVOS CABECERA


2.2. Archivos Fuente y Archivos Cabecera

Los programas y aplicaciones C constan fundamentalmente de dos tipos de


archivos: archivos con extensión ‘.c’ que contienen código fuente estructurado
a base de funciones y archivos con extensión ‘.h’ que especifican definiciones
de tipos y prototipos de funciones. La posibilidad de utilizar varios archivos
permite añadir un nivel superior de modularidad, de forma que se pueda incluir
en un archivo un conjunto de funciones cuya funcionalidad esté, de alguna
forma, relacionada. Por ejemplo, dentro de un determinado archivo se podrían
ubicar las funciones encargadas de realizar operaciones matemáticas, dentro
de otro, las encargadas de acceder a archivos de datos, y, dentro de otro, las
responsables de cuestiones gráficas.

Los archivos ‘.c’ suelen denominarse archivos fuente (source code) y su


compilación da lugar a archivos de código objeto (object code) con extensión
‘.o’. Cada archivo fuente constituye una unidad independiente cuya
compilación puede realizarse separadamente del resto. Una vez compilados,
los archivos de código objeto son enlazados (linking) junto con las funciones
de bibliotecas externas utilizadas para dar lugar a un único ejecutable.
Los archivos ‘.h’ se denominan archivos de cabecera (header files) y
normalmente contienen declaraciones de tipos de datos y constantes
simbólicas así como los prototipos de las funciones que un archivo fuente
desea hacer públicas. De esta forma se permite que desde un archivo fuente
pueda invocarse a funciones implementadas en otro. La inclusión de un
archivo de cabecera se lleva a cabo mediante la directiva #include del
precompilador al comienzo de un archivo fuente.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Si el archivo de cabecera a incluir se encuentra en la ruta de búsqueda de
estos archivos puede especificarse su nombre entre los símbolos ‘<’ y ‘>’. Si,
por el contrario, el archivo en cuestión se encuentra en otra ruta, habrá que
proporcionarla expresamente encerrada entre dobles comillas (“, ”).

A continuación, se presentan dos ejemplos de sentencias include:

Elaboración propia
Sentencias include

2.3. EL LÉXICO DEL LENGUAJE C


2.3. El Léxico del Lenguaje C

Como cualquier lenguaje cotidiano, C define un léxico constituido por un


conjunto de símbolos y una serie de palabras reservadas o palabras clave. A la
hora de codificar programas se debe tener esta cuestión en cuenta para no
declarar elementos cuyos identificadores coincidan con las citadas palabras
reservadas. Los símbolos definidos en C son los indicados en la Tabla 1 y las
palabras reservadas se presentan en la Tabla 2:

Elaboración propia
Tabla 1. Símbolos utilizados en el
lenguaje C Elaboración propia
Tabla 1. Símbolos utilizados en el Tabla 2. Palabras reservadas en
lenguaje C lenguaje C
Tabla 2. Palabras reservadas en
lenguaje C

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
2.4. TIPOS DE DATOS FUNDAMENTALES EN LENGUAJE C
2.4. Tipos de datos fundamentales en lenguaje C
En el lenguaje C existen cuatro tipos de datos fundamentales o primitivos:
char, int, float, double.

Algunos de estos tipos pueden ser complementados con los denominados


modificadores de tipo. Así, los modificadores signed y unsigned especifican si
el signo es incluido en el formato de almacenamiento de los valores,
determinado con ello el rango final de los valores del tipo. Otros modificadores
como short y long pueden influir en el tamaño final del espacio de memoria
reservado para los elementos declarados de un determinado tipo.

La Tabla 3 muestra las diferentes posibilidades para estos tipos de datos


fundamentales:

Elaboración propia
Tabla 3. Tipos de datos primitivos o fundamentales en C
Tabla 3. Tipos de datos primitivos o fundamentales en C

2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA


ESCRITO EN C (1)
2.5. Compilación y Ejecución de un Programa Escrito en C

Una vez que se ha codificado un programa, el siguiente paso es proceder a su

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
compilación. El programa se ha escrito en código fuente correspondiente a un
lenguaje de alto nivel cuyas sentencias no pueden ser procesadas por la
arquitectura sobre la que se va a ejecutar. Por esta razón es necesario traducir
tales sentencias a un código objeto compuesto por instrucciones máquina que
sí pueden ser interpretadas y ejecutadas por la arquitectura hardware
subyacente. A este proceso de traducción se le denomina compilación. Para
llevarlo a cabo utilizaremos el compilador C de GNU (GNU corresponde al
acrónimo recursivo “GNU is Not Unix”. ) (gcc). La forma de invocación más
sencilla de esta herramienta es la siguiente:

Elaboración propia
Compilador gcc

Si no existen errores de codificación se generará un archivo ejecutable con el


nombre especificado que quedará ubicado en el mismo directorio que los
archivos que contienen el código fuente.

Para proceder a su ejecución no es necesario modificar sus atributos, bastando


simplemente con proporcionar su nombre a la shell:

Elaboración propia
Ejecución

Llegados a este punto y como actividad de refuerzo, vamos a escribir y ejecutar


un sencillo programa de ejemplo (Los desarrolladores, en su jerga, suelen
referirse a hacer este programa inicial como hacer un “hola mundo” porque
este suele ser el mensaje que se muestra.) donde se muestra un mensaje de
bienvenida por pantalla:
En primer lugar, arrancamos la máquina virtual con el sistema operativo
Linux cuya creación se propuso en el ejercicio feedback de la unidad 1.
Una vez arrancada, localizamos una herramienta denominada “Terminal” y
la ejecutamos.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Herramienta terminal en Ubuntu Linux
Herramienta terminan en Ubuntu Linux
A continuación, creamos un directorio para nuestros programas con la orden
mkdir (make directory):

Elaboración propia
mkdir
Después nos situamos en este directorio de trabajo con la orden cd (change
directory):

Elaboración propia
change directory

2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA


ESCRITO EN C (2)
Vamos a ser ordenados y crearemos un directorio para cada programa que
hagamos. Esto nos ahorrará problemas:

Elaboración propia
make directory holamundo
Cambiamos a este directorio

Elaboración propia
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
change directory holamundo

Elaboración propia
Creación directorios
Creación directorios
Ahora vamos a escribir el código, para ello utilizaremos un editor genérico
como gedit (Los más valientes pueden atreverse con nano, emacs o,
incluso, vi):

Elaboración propia
Generación Código
& (Este símbolo es para lanzar la ventana del editor de forma que
proceso terminal no quede esperando por su terminación. De esta
forma, tendremos nos ventanas independientes.)
Introducimos el siguiente código:

Elaboración propia
Código

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Arranque gedit e introducción de código
Arranque gedit e introducción de código

2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA


ESCRITO EN C (3)
Pulsamos en el botón guardar del editor gedit.
En la consola procedemos a compilar el programa

Elaboración propia
compilación holamundo
hm: Nombre del archivo ejecutable
hm.c: Nombre del archivo con el código
Es posible que en nuestra distribución Linux no se encuentre instalado el
compilador gcc y se muestre un mensaje como el siguiente:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Situación de error por no estar gcc instalado
Situación de error por no estar gcc instalado
Si observamos este mensaje, solucionamos la situación actualizando el
repositorio de paquetes con la orden (La oden sudo viene de ‘super user do’
y permite que un usuario normal ejecute ciertos comandos que precisan un
nivel de privilegios reservado al usuario administrativo root.):

Elaboración propia
sudo update
Se nos solicitará nuestra contraseña y después se llevará a cabo la
actualización de los repositorios de paquetes que son los servidores de
donde los sistemas descargan los paquetes de cada distribución.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Actualización repositorio de paquetes
Actualización repositorio de paquetes
Después, procedemos a instalar el compilador gcc con la orden:

Elaboración propia
sudo install

Elaboración propia
Instalación compilador gcc
Instalación compilador gcc

2.5. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA


ESCRITO EN C (4)
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Cuando finalice la instalación, nuestra pantalla tendrá un aspecto parecido al
siguiente:

--
Instalación compilador gcc
En la consola procedemos, de nuevo, a compilar el programa

--
Y, finalmente, para poner el programa en ejecución, introducimos el nombre
del archivo ejecutable generado

--
El resultado que debe visualizarse se parecerá al siguiente:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
--
Ejecución programa hola mundo

3. DESARROLLO DE PROGRAMAS EN LENGUAJE C


En los siguientes apartados veremos cómo declarar las unidades básicas de
almacenamiento de información: variables y constantes y también como escribir
programas cuyo flujo de ejecución se defina mediante las estructuras de control
propias de la programación estructurada:
Secuencialidad.
Bifurcación.
Repetición o iteración.

3.1. Compilación y ejecución de un programa escrito en C

Una vez conocidos los tipos de datos fundamentales, se procede a indicar


como utilizarlos para declarar elementos básicos dentro de un programa como
son las variables.

Una variable es una unidad lógica de almacenamiento de información que se


corresponde con un espacio de memoria y que queda determinada por tres
factores:
Un identificador (Será el nombre con que nos refiramos a la variable) que
consiste en un nombre asociado al espacio de memoria reservado para la
variable y que permitirá hacer uso de ella y distinguirla de otras variables
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
utilizadas en el mismo programa o función.
Un tipo de dato que determina la cantidad del espacio de memoria
reservado para la variable y, por extensión, el rango de valores que pueden
ser almacenados y las operaciones en que la variable en cuestión puede
verse involucrada.
El valor que la variable almacena en un determinado momento y que podrá
ir cambiando a lo largo de la ejecución del programa.
Para declarar una variable basta indicar el tipo de datos que almacenará, un
identificador apropiado y, opcionalmente, un valor inicial. La sintaxis de C para
la declaración de variables es la siguiente:

Elaboración propia
Tipo de dato_01

En una misma sentencia pueden declararse varias variables del mismo tipo de
datos separándolas por comas (,):

Elaboración propia
Tipo de dato_02

3.1. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA


ESCRITO EN C (1)
Cuando una variable ha sido declarada se le podrán asignar valores que se
correspondan con su tipo de datos en distintos puntos a lo largo del código. La
asignación de estos valores se lleva a cabo mediante el operador igual (=), y
siempre se tendrá en cuenta que el valor situado a la derecha de este símbolo
se asignará al elemento situado en la parte izquierda. A las sentencias de este
tipo se les denomina sentencias de asignación.

El siguiente código muestra ejemplos de sentencias de asignación:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Sentencias de asignación

En C se distingue entre variables globales (Las variables globales se crean al


declararlas en cualquier parte fuera de una función. Su utilización debe
realizarse con precaución ya que pueden dar lugar a efectos colaterales y su
empleo sistemático no se considera una buena técnica de programación.) y
variables locales. Las primeras son conocidas a lo largo de todo el programa
mientras que las segundas tienen restringido su ámbito de validez al bloque
donde han sido declaradas.

Elaboración propia
Variables

Una constante es una variable cuyo valor, una vez asignado, ya no puede ser
modificado posteriormente. Para declarar constantes utilizamos la cláusula
const antes de la declaración normal de la variable.

Elaboración propia
Constante

3.1. COMPILACIÓN Y EJECUCIÓN DE UN PROGRAMA


ESCRITO EN C (2)
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Un literal es una representación de un valor constante, por ejemplo, 5 y 20
serían literales enteros, ‘a’ y ‘@’ corresponderían a literales de tipo carácter y
2.5 ó 3.56 serían literales reales.

También pueden expresarse literales correspondientes a cadena de caracteres


como una secuencia de caracteres ASCII encerrados entre comillas dobles.
Algunos ejemplos pueden ser los siguientes:

Elaboración propia
Literales

Las constantes definidas o simbólicas son identificadores que se sustituirán


por el valor indicado, puede ser un literal numérico, de carácter o de cadena de
caracteres. Estas constantes resultan de utilidad. Resulta habitual consignar el
identificador en letras mayúsculas y resultan de utilidad porque modificando el
valor de la constante nos ahorra tener que hacerlo en todos los puntos del
código donde se utilice. La sustitución de la constante por su valor se lleva a
cabo, como paso previo a la compilación, por el preprocesador de C, por esta
razón estas constantes se declaran con una de sus directivas.

Elaboración propia
Define Valor 2

3.2. OPERADORES Y EXPRESIONES (1)


3.2. Operadores y Expresiones

Los operadores son símbolos, o grupos de símbolos, que indican la realización


de una determinada operación sobre uno o varios operandos y actúan como
nexos de unión para la construcción de expresiones. En C hay tres clases
generales de operadores:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Aritméticos.
Relacionales y lógicos.
A nivel de bits.
Los operadores aritméticos se utilizan para la realización de operaciones
algebraicas y son los siguientes (Por ejemplo, para sumar los valores de las
variables a y b indicaremos a + b ):

Elaboración propia
Operadores Aritméticos

Los operadores relacionales se utilizan para verificar una determinada


relación entre dos elementos de valor. Por esta razón, cualquier expresión de la
que formen parte evaluará, obligatoriamente, a un valor lógico, cierto o falso,
en función de que se verifique o no la relación en cuestión. Es importante
mencionar que en C no existe un tipo de datos específico para los valores
lógicos, en su lugar se considera falso al valor 0 y cierto a cualquier valor
distinto de él (Por ejemplo, la expresión a == 0 tomará el valor cierto si la
variable a almacena el valor 0 y falso en cualquier otro caso. ). La siguiente
tabla muestra los distintos operadores relacionales:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Operadores relacionales

3.2. OPERADORES Y EXPRESIONES (2)


Los operadores lógicos, por su parte, se utilizan para construir expresiones
donde intervienen valores lógicos y cuyo resultado se obtiene siguiendo las
reglas de la lógica formal. C define los siguientes operadores lógicos.

--

Las tablas de verdad de estos operadores se indican a continuación:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
--
Tabla 4. Tablas de verdad de los operadores lógicos

Como se puede observar, p || q sólo es falso cuando tanto p


como q son falsos y p && q sólo es cierto cuando tanto p como q
son ciertos.

Finalmente, los operadores a nivel de bits permiten manipular y llevar a cabo


operaciones de aritmética binaria sobre los bits contenidos en las posiciones de
memoria correspondientes a las variables declaradas y asignadas. Estos
operadores se consignan en la siguiente tabla:

Elaboración propia
Operadores a nivel de bits

3.3. MOSTRANDO ELEMENTOS POR SALIDA ESTÁNDAR

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
3.3. Mostrando Elementos por Salida Estándar

Dado que ya hemos visto como declarar y asignar valores a algunos elementos
de programación e incluso como construir expresiones, resultaría conveniente
conocer cómo debemos proceder para mostrar por pantalla, o por otro tipo de
salida, el valor de estos elementos, de forma que podamos verificar la
corrección de nuestras asignaciones y expresiones.

Para mostrar elementos por la salida estándar del programa se hará uso de la
función printf cuya sintaxis se detalla a continuación:

Elaboración propia
printf

Esta función escribe los argumentos que componen lista-arg bajo el control de
la cadena apuntada por formato. La cadena formato consta de dos tipos de
elementos. El primero lo constituyen los caracteres que se mostrarán tal como
se indican por pantalla mientras que el segundo tipo contiene las
especificaciones de formato con que se mostrarán los argumentos de la lista.
Cada una de estas indicaciones comienza por el símbolo % y le sigue el código
del correspondiente formato. Es importante indicar que el número de órdenes
de formato y el número de argumentos debe coincidir exactamente. Mediante
el siguiente ejemplo, veremos cómo indicar los formatos de salida de los tipos
de datos más habituales.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Ejemplos printf

3.4. LECTURA DE VALORES DESDE TECLADO


3.4. Lectura de Valores desde Teclado

La obtención de valores procedentes de teclado puede realizarse de forma


sencilla con ayuda de la función scanf cuya sintaxis se detalla a continuación:

Elaboración propia
scanf

Esta función permite la entrada de datos de teclado y su conversión y


asignación directa a variables o estructuras de datos utilizando los mismos
modificadores vistos para la función printf. El siguiente programa lee dos
valores enteros de teclado y muestra por salida estándar su suma.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Ejemplo scanf

3.5. SENTENCIAS DE CONTROL DE FLUJO (1)


3.5. Sentencias de Control de Flujo
Un flujo de ejecución sobre un programa informático determina un orden de
ejecución de sus sentencias y, consiguiente, un camino o ruta entre ellas.
Normalmente, las sentencias con que se ha codificado un programa son
ejecutadas en el mismo orden en que han sido escritas dando lugar a un flujo
secuencial de ejecución. Como se verá a continuación, C proporciona
sentencias y estructuras sintácticas para hacer que un flujo de ejecución pueda
bifurcarse en varios caminos y también dar lugar a la formación de bucles o
lazos.

3.5.1. Sentencias de Bifurcación

La sentencia if es la forma más básica de sentencia de bifurcación. Se utiliza


para bifurcar el flujo de ejecución a un determinado bloque de sentencias en
función del cumplimiento de una condición lógica. Su sintaxis es la siguiente:

Elaboración propia
Sentencia if

La condición consistirá en una expresión lógica cuyo valor determinará si se


ejecuta o no el bloque de sentencias especificado. Si la expresión toma valor
cierto se procederá a la ejecución del bloque de sentencias, descartándose
dicha ejecución en caso contrario.

Es importante tener en cuenta que en C cualquier valor distinto


de cero es cierto y sólo el valor cero se considera falso.

La sentencia if-else permite bifurcar el flujo de ejecución de un programa en


dos caminos distintos en función de que se cumpla o no una condición lógica.
La forma general es la siguiente (La cláusula else del final figura entre

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
corchetes porque su escritura es opcional.):

Elaboración propia
Sentencia if-else

La condición consistirá nuevamente en una expresión lógica y su valor


determinará el bloque de sentencias al que bifurcará (Si su valor es cierto se
ejecutará el bloque_sentencias_si_cierto y si es falso se ejecutará el
bloque_sentencias_si_falso.) el flujo de ejecución.

La sentencia if-else-if múltiple permite realizar una bifurcación múltiple de


forma que se ejecute el bloque de sentencias que siga a la primera condición
de cuya evaluación se obtenga el valor cierto. Una vez ejecutado este bloque
se abandonará la evaluación del resto de condiciones. el Si no se cumple
ninguna de las condiciones se ejecutará el bloque de sentencias de la cláusula
else final. Su sintaxis general es la siguiente:

Elaboración propia
Sentencia if-else-if

3.5. SENTENCIAS DE CONTROL DE FLUJO (2)


La sentencia switch también permite implementar una bifurcación múltiple. Su
sintaxis es la siguiente:
UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Elaboración propia
Sentencia switch
El funcionamiento de esta sentencia consiste en comparar la expresión
encerrada entre paréntesis con los sucesivos valores indicados en las cláusulas
case. Si coincide con alguno de ellos se ejecutan las sentencias especificadas
para ese valor hasta encontrar un break o hasta que termine el bloque de la
sentencia switch. Los valores consignados en las sentencias case deben ser
literales constantes de tipo entero o carácter y no puede haber valores
repetidos. La cláusula default es opcional y si se incluye, sus sentencias se
ejecutarán sólo cuando el valor de la expresión no coincida con ninguno de los
expresados en las entradas case.

3.5.2. Sentencias de Iteración (bucles)

Las sentencias de iteración o, más comúnmente, bucles, permiten ejecutar


de forma repetida un bloque de sentencias mientras se verifique el
cumplimiento de una determina condición. Esta condición suele denominarse
condición de control o de continuidad del bucle y consistirá nuevamente en una
expresión lógica que evaluará a los valores cierto o falso. Resulta habitual
referirse al bloque de sentencias cuya ejecución puede repetirse como cuerpo
del bucle. Es importante tener en cuenta que, normalmente, en la condición de
control participarán una o más variables que deben ser inicializadas antes de la
estructura iterativa y convenientemente actualizadas en las sentencias

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
correspondientes al cuerpo del bucle.

Los bucles for (…;…;…;) permiten escribir de una forma más abreviada y
compacta los bucles de tipo while. Su sintaxis es la siguiente:

Elaboración propia
Sentencia for

En primer lugar, se lleva a cabo la parte de inicialización. A continuación, se


verifica la condición de control y si es cierta se procede a ejecutar el cuerpo del
bucle. Después se ejecuta la parte de actualización y de nuevo se comprueba
la condición para repetir el proceso. Cuando la condición deje de cumplirse se
abandonará la ejecución de las sentencias del cuerpo.

Los bucles do{...} while(condicion) presentan un funcionamiento muy similar


al de los bucles de tipo while. La diferencia consiste en que en los primeros se
ejecuta en primer lugar el cuerpo del bucle y, a continuación, se evalúa la
condición de continuidad. Si ésta resulta con el valor cierto se ejecutará de
nuevo el cuerpo del bucle y así sucesivamente hasta que la condición evalúe a
valor falso. De esta forma se consigue garantizar que el cuerpo del bucle se
ejecutará al menos una vez. Su sintaxis viene dada por:

Elaboración propia
Sentencia do-while

EJERCICIO CON SOLUCIÓN 2

Enunciado

Escribir un programa en C teniendo en cuenta las siguientes


indicaciones:
1. Se escribirá una función de nombre calcuFactNum que reciba por
parámetro un valor entero y devuelva su factorial.

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
2. Escribir un programa (función main()) que haga uso de la función
anterior para obtener el factorial de los valores 0 a 10 y muestre el
resultado por pantalla.

Solución

Elaboración propia
Solución Ejercicio 2

CONCLUSIONES
En esta unidad se han descrito los principales paradigmas de programación y
se han presentado los lenguajes de programación de mayor presencia en el
ámbito actual del desarrollo de aplicaciones.

También se han descrito las principales estructuras de control de flujo


características de la programación estructurada y se ha descrito en detalle
como comenzar a escribir programas con los elementos léxicos y sintácticos
que ofrece el lenguaje de programación C.

RECAPITULACIÓN
En esta unidad se han visto:

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
Los principales paradigmas de programación para el desarrollo de
programas y aplicaciones.
Algunos de los lenguajes más ampliamente utilizados en el ámbito actual de
la programación.
Las características fundamentales de la programación estructurada.
Los principales elementos léxicos y sintácticos con que podemos escribir
programas utilizando el lenguaje C.

AUTOCOMPROBACIÓN
Mediante esta tarea podrás verificar tu grado de progreso sobre los diferentes
contenidos y actividades presentados a lo largo de la unidad.

PROPUESTAS DE AMPLIACIÓN
En los siguientes enlaces puedes encontrar información abundante sobre los
temas tratados en la unidad.
Learn-C
ANSI/ISO Standard C
The Standard
C Language Introduction

BIBLIOGRAFÍA
García Carballeira, Félix: El lenguaje de programación C: diseño e
implementación de programas. Prentice-Hall, 2001.
García Carballeira, Félix: Problemas resueltos de programación en lenguaje
C. Serie paso a paso. Thomson Reuters, 2004.

GLOSARIO

Término Acepciones Definición

API API Application Programming Interface: Conjutno de


funciones y tipos de datos que se ofrecen para
el desarrollo de aplicaciones y programas.

JVM JVM Java Virtual Machine: Arquitectura Virtual Capaz


UD3. PROGRAMACIÓN
2021. Todos los derechos reservados
de interpretar los bytecodes a que se compila el
codigo fuente escrito en lenguaje Java.

PHP PHP Acrónimo recursivo: PHP Hypertext


Preprocessor

AND AND Operación lógica cuya valor sólo es cierto si


todos los operandos también tienen valor cierto

OR OR Operación lógica cuya valor sólo es falso si


todos los operandos también tienen valor falso

XOR OR Operación lógica cuyo valor es cierto si hay un


Exclusiva número impar de valores cierto en sus
operandos y falso en caso contrario

UD3. PROGRAMACIÓN
2021. Todos los derechos reservados

También podría gustarte