Вы находитесь на странице: 1из 20

ESCUELA POLITÉCNICA SUPERIOR

INFORMÁTICA – CURSO 2018-19


PRÁCTICA 1: Introducción a la programación

PRERREQUISITOS
• Para el correcto desarrollo de esta práctica, el alumno debe leer atentamente el enunciado
ANTES Y DESPUÉS DE LA SESIÓN PRÁCTICA.
• Se recomienda que descargue, instale e intente habituarse al entorno de programación que se utilizará
para programar en Processing: Processing-IDE (disponible en https://processing.org/download/).

OBJETIVOS
Esta práctica tiene como objetivo la iniciación en la programación en lenguaje Processing.
Los lenguajes Processing, C y Java (y otros) comparten en gran medida la misma sintaxis, por lo que el código
será muy semejante. No obstante las prácticas se harán en Processing, si bien en el ANEXO se puede ver cómo
emplear un entorno de programación en C para aquellos alumnos que quieran emplear ambos.
En esta práctica:
• Se introduce el concepto de programa y programación.
• Se presentan los primeros conceptos de los lenguajes de programación: variables, sus tipos y la
instrucción de asignación.
• Se describe el entorno de programación Processing que se usará en el presente curso académico.

Al finalizar esta práctica, el alumno debe ser capaz de:


• Usar correctamente el IDE de Processing.
• Crear, abrir, y editar ficheros de código fuente en Processing,
• Identificar errores de compilación y ejecutar el código compilado.
• Familiarizarse con algunas instrucciones en Processing.
• Observar las similitudes entre Processing y C.

PROGRAMACIÓN IMPERATIVA
Los circuitos electrónicos de cualquier dispositivo digital pueden reconocer datos e instrucciones que están
constituidos por conjuntos de unos y ceros. Es lo que se conoce como lenguaje máquina. El lenguaje máquina
es difícil de manejar por los humanos, y raramente puede contener operaciones más complejas que realizar
operaciones aritméticas con dos números, mover datos de una parte de la memoria a otra y saltar a una
instrucción si se cumple una condición. En realidad cualquier ordenador termina traduciendo las operaciones
más complejas escritas por un usuario/programador a este tipo de operaciones simples en lenguaje máquina.
Una forma de facilitar la programación de los ordenadores a los humanos es emplear un lenguaje de
programación de alto nivel (como C, C++, Java, Processing, Javascript, HTML, etc).
Por otra parte, es destacable que la mayor parte de los lenguajes de programación de alto nivel están muy
relacionados entre sí, tal y como se aprecia en la figura 1.

Fig 1. Relación entre distintos lenguajes de programación.


(Referencia: Getting Started with Processing, 2010: pg 5)

1
Según el LENGUAJE DE PROGRAMACIÓN DE ALTO NIVEL que se use, se distinguen tres formas
de hacer la traducción entre el código de alto nivel y el código máquina:
- Código interpretado: La traducción de código fuente a código máquina la hace un programa llamado
INTÉRPRETE que el usuario debe tener instalado en su dispositivo digital. Un ejemplo de código
interpretado es el HTML o Javascript que emplean las páginas web, y para ejecutarlas es necesario tener
un navegador (que sería el intérprete, por ejemplo: Internet Explorer, Google Chrome, Safari, etc).
o Ventajas: El código ocupa poco espacio. El código es el mismo para cualquier sistema
operativo en el que se vaya a ejecutar.
o Inconvenientes: El código no está optimizado, es más lento de ejecutar y necesita siempre que
esté instalado el intérprete.
o Ejemplos de lenguajes de programación interpretados: Javascript, PHP,…
- Código compilado: La traducción de código fuente a código máquina la hace el programador con un
entorno llamado COMPILADOR. Se genera un código máquina específico para el sistema operativo
en el que se va a ejecutar (Windows, Linux, MacOS, Android, IOS, etc).
o Ventajas: El código está optimizado, funciona más rápido, y no necesita ningún programa
adicional para ejecutarse.
o Inconvenientes: El código ocupa más espacio. Además, una vez compilado, el código máquina
es específico para cada sistema operativo, por lo que si queremos generar la aplicación para
otro sistema operativo tendremos que volver a compilar el código para ese sistema operativo.
o Ejemplos de lenguajes de programación compilados: C, C++, Arduino,…
- Código semi-compilado: La traducción de código fuente a código máquina la hace en parte el
programador y en parte el dispositivo digital en el que se realiza la ejecución del código máquina.
Es decir, hay dos fases:
o Generación de código intermedio: A partir del código fuente el programador usa un
COMPILADOR que genera el código intermedio de esta aplicación.
o Generación del código máquina: El usuario debe tener instalado en su sistema operativo la
MÁQUINA VIRTUAL correspondiente, la cual compila el código intermedio al código
máquina, que es el que ejecuta ese dispositivo digital cuando la aplicación está funcionando.
o Ventajas: El código está parcialmente optimizado. Es relativamente rápido de ejecutar (más
que el código interpretado, y menos que el código compilado). Es multiplataforma, es decir se
puede ejecutar en cualquier sistema operativo sin tener que volver a compilarlo.
o Inconvenientes: Necesita que esté instalada en el dispositivo digital la máquina virtual
correspondiente a su sistema operativo.
o Ejemplos de lenguajes de programación semi-compilados: Java, Processing,…

Fig 2. Esquema global sobre la programación


(Referencia: https://goo.gl/images/xBeLSN)

2
Un ALGORITMO “es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas
que permite llevar a cabo una actividad mediante pasos sucesivos que no generen dudas a quien deba hacer dicha
actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se
obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia, (que es una rama de las
matemáticas). En términos de programación, un algoritmo es una secuencia de pasos lógicos que permiten
solucionar un problema.” (Wikipedia). Un ejemplo cotidiano de algoritmo sería una receta de cocina, los
pasos que permiten hacer una división, etc.

Un PROGRAMA es una secuencia de instrucciones escritas convenientemente en un lenguaje de


programación concreto, que permiten traducir un algoritmo a un lenguaje entendible y procesable por una
máquina (ordenador, tablet, móvil,…). Las instrucciones de los programas se ejecutan, ordinariamente, de modo
secuencial, es decir, cada una a continuación de la anterior. Recientemente se está haciendo un gran esfuerzo en
desarrollar programas paralelos, es decir, programas que se pueden ejecutar simultáneamente en varios
procesadores. La programación paralela es mucho más complicada que la secuencial y no se hará referencia a
ella en este curso.

Cuando se codifica en un lenguaje de alto nivel, el programa se almacena en un fichero con una extensión:
• En Processing, la extensión de los ficheros es .pde (pde es el acrónimo de processing
developmente enviroment).
• En el lenguaje C, la extensión de los ficheros es .c

En el caso de un programa escrito en Processing semicompilado:


- En primer lugar, al guardar el fichero .pde se crea automáticamente una carpeta con el mismo nombre
del fichero.
- En segundo lugar, al ejecutar el código en el IDE de Processing, si está en “modo Java” se genera un
código máquina entendible por la máquina virtual del sistema operativo en el que estemos trabajando, y
es la máquina virtual la que permite que se ejecute en nuestro equipo.

En el caso de un programa en C y compilado, la tarea del compilador se descompone en dos etapas:


- En la 1ª etapa traduce el programa del fichero .c al lenguaje ensamblador produciendo el fichero .o. El
lenguaje ensamblador es un lenguaje más próximo al del computador.
- En la 2ª etapa genera el programa ejecutable en lenguaje máquina, que es el fichero con extensión .exe
(en sistemas operativos Windows), y que se ha generado vinculando el código objeto con las
instrucciones que se hayan usado de las librerías estándares empleadas en el programa. Este fichero .exe
es lo que se conoce como el “ejecutable” y, al ser un lenguaje compilado, no necesita intérprete ni
máquina virtual instalados en el sistema operativo donde se vaya a ejecutar.

Por otra parte, los programas se pueden escribir siguiendo distintos PARADIGMAS DE
PROGRAMACIÓN. “Un paradigma de programación representa un enfoque particular o filosofía para
diseñar soluciones. Los paradigmas difieren unos de otros, en los conceptos y la forma de abstraer los elementos
involucrados en un problema, así como en los pasos que integran su solución del problema, en otras palabras, el
cómputo”, (Wikipedia).

Existen múltiples paradigmas de programación (imperativa, orientada a objetos, dinámica, dirigida por
eventos, declarativa, funcional, multiparadigma, etc.)
En este curso de iniciación a la programación veremos dos paradigmas de programación:
- Paradigma de Programación Imperativa (o por procedimientos): es el paradigma más usado en
general, se basa en dar instrucciones al ordenador sobre como ejecutar los algoritmos, dividiendo el
código en funciones independientes. La programación imperativa es la más tradicional. Ejemplos de
lenguajes de programación imperativa: C, Processing, Arduino,...
- Paradigma de Programación Orientada a Objetos: está basado en el imperativo, pero encapsula el
código en elementos denominados objetos, que incluyen tanto variables como funciones. Ejemplos de
lenguajes de programación orientada a objetos: Processing, Java, Javascript, C++, C#, Arduino,…

La figura 2 muestra una visión global de lo explicado hasta este momento. Es importante entender que
cualquier aplicación que usemos en un ordenador, una tablet, un móvil, etc. ha sido programada
previamente en un lenguaje de programación concreto, siguiendo un paradigma de programación
(inherente al lenguaje escogido) conforme a lo explicado de forma resumida en esta introducción a la
programación. Por tanto, cualquier app, videojuego, aplicación de diseño, etc. ha implicado que un equipo
humano haya creado los algoritmos, y los haya implementado en un lenguaje de programación específico,
teniendo en cuenta dónde se va a ejecutar (sistema operativo), y por qué tipo de usuarios.
La programación es una actividad creativa cuyo aprendizaje demanda dedicación y esfuerzo, pero abre
un número de posibilidades infinito y apasionante ;-)

3
ENTORNO DE PROGRAMACIÓN DE PROCESSING (IDE)
IDE es el acrónimo en inglés de Integrated Development Environment (es decir Entorno Integrado de
Desarrollo, más conocido como Entorno de Programación). El entorno de programación de Processing tiene
un diseño minimalista que permite a los programadores nóveles iniciarse con facilidad en el uso del mismo.
También se puede programar en Processing en otros IDE profesionales (por ejemplo Eclipse), o incluso en un
IDE online (por ejemplo www.openprocessing.org).

En cualquier caso, en nuestro curso emplearemos el IDE estándar de Processing que puede descargarse
gratuitamente para los distintos sistemas operativos desde la web oficial: https://processing.org/download/

La Interfaz de Usuario (IU) del IDE se muestra en la figura 3. Es posible que en nuevas versiones que vayan
publicando varíe ligeramente esta IU.

Fig 3. IDE de Processing Fig. 4. IDE de Processing mostrando un error

Básicamente el entorno de programación tiene diversas partes bien diferenciadas:


1- La barra superior de menús (Archivo, Editar, Sketch, Depuración, Herramientas, Ayuda).
2- Para crear un nuevo programa hay que ir al menú Archivo > Nuevo El nuevo fichero tendrá asignado
un nombre por defecto (en el ejemplo de la fig. 3 es “sketch_190816a"). Este nombre cambiará una vez le
demos un nombre concreto (a través del menú Archivo > Guardar como…). En la fig. 4 aparece ya el
nombre del fichero “ejemplo01” con el que ha sido guardado.
3- Una pestaña blanca rectangular para escribir el código, en la que aparecen los números de cada
línea a la izquierda.
4- Varios iconos de acciones básicas que aparecen debajo de la barra del nombre y antes de la pestaña de
código y que sirven para lo siguiente:

Botón “Ejecutar” que se emplea para realizar las acciones de compilación y


ejecución (siempre que no haya algún error de compilación que subsanar).
Botón “Detener” cuya función es parar la ejecución de un código que se esté
ejecutando en ese momento.

Botón “Depurar” que sirve para ejecutar paso a paso el código, y así detectar
errores lógicos.
Botón para cambiar el modo de ejecución. Por defecto está en Java, pero pueden
añadirse otros modos: Android, p5.js, javascript, Python… En caso de elegir
algunos de estos modos (p5.js, javascript) en lugar de generarse código
semicompilado, el código será interpretado por el navegador (Chrome, Safari,...).

5- Una zona gris horizontal, que es donde aparecen los errores de compilación del código. Sólo mostrará el
primer error que encuentre, en cuyo caso la barra aparecerá en rojo y con un mensaje descriptivo del
error sintáctico detectado (tal y como aparece en la figura 4). NOTA: Los mensajes de error del IDE
estarán escritos en inglés, y se asume que los alumnos lo entienden bien. En caso de no ser así, pueden
copiar el mensaje y traducirlo con un traductor (por ejemplo el de Google).
6- Una zona rectangular negra en la parte inferior de la ventana, que es la consola y nos permitirá ejecutar
ciertas partes de código en este modo (por ejemplo, escribiendo mensajes y resultados en formato texto)

4
PROGRAMACIÓN EN LENGUAJE PROCESSING
Processing es un lenguaje de programación y entorno de desarrollo de código abierto basado en Java (y éste
a su vez está basado en C). Fue creado por Ben Fry y Casey Reas, ambos miembros del Aesthetics and
Computation Group del MIT Media Lab dirigido por John Maeda, en el Medialab del Massachusetts Institute
of Technology (MIT, Boston, EE.UU.). En la actualidad es frecuentemente utilizado por ingenieros, científicos,
tecnólogos y en general por personas creativas, por ser especialmente idóneo para el aprendizaje de un lenguaje
de programación (paradigmas: imperativo y orientado a objetos), con datos multimodales (número, texto, audio,
imagen, vídeo, gráficos generados por ordenador, hardware libre tipo Arduino, etc) y multiplataforma (se puede
ejecutar en distintos sistemas operativos (Windows, Android, MacOS, Raspbian,…), sin tener que tener una
versión del código para cada uno de ellos.

Para comenzar a programar en Processing basta con escribir correctamente instrucciones de este lenguaje en
la pestaña blanca de código del IDE. Nuestro primer programa es uno muy básico, que consiste simplemente en
escribir en la consola el texto “Hola mundo”. Para ello en la figura 3 se aprecia que se ha de emplear la función
println() y entre los dobles paréntesis el texto entrecomillado que queramos que se muestre en la pantalla:
println (“Hola mundo”);
Al darle al botón “Ejecutar” veremos que aparece la frase “Hola mundo” en la consola (ver figura 5).
También observamos que se abre una ventana nueva que por defecto es gris (ver figura 6), y que será la que nos
sirva para programar aplicaciones con IU gráficas. De momento aparece con un aspecto muy básico, que
aprenderemos a personalizar más adelante.

Fig. 5. Ventana de ejecución con IU gráfica Fig. 6. Ventana de ejecución con IU gráfica

Aunque Processing permite añadir instrucciones directamente en la ventana de código (tal y como hemos
hecho con el ejemplo anterior), esto no se considera un buen estilo de programación, ya que el código debe estar
escrito en formato de funciones que permiten modularizar la solución, y hacerla más legible y depurable.
Todo esto se explicará en detalle en la práctica 2.

Es decir, en Processing el código suele estar dividido en funciones (también llamadas procedimientos o
rutinas). Cada función ejecuta una parte de un programa, pudiendo recibir unos valores (de entrada) y pudiendo
devolver otro (de salida).

Para facilitar la iniciación a la programación, Processing consta de dos funciones básicas: setup() y
draw(). No es obligatorio usarlas, pero su uso es bastante habitual.

Además se pueden añadir otras funciones que ya existen en bibliotecas (libraries en inglés), que otros
programadores han ido creando y poniendo a disposición de quien quiera usarlas; por ejemplo para programar
aplicaciones de edición de imagen, vídeo, audio, sensores, visualización 3D, infografía, etc.), y podemos también
añadir otras funciones creadas por nosotros mismos. Todo esto se introduce en la práctica 2. En la práctica 1 nos
vamos a centrar en las funciones setup(), draw(), así como en aquellas funciones que nos permiten programar
una interfaz sencilla entre el usuario y la aplicación (es lo que se conoce como “Interfaz Persona-Ordenador
(IPO)”, en inglés “Human Computer Interaction (HCI)”.

En el lenguaje C la función que debe estar presente siempre se denomina main() y equivaldría a la función
setup() de Processing (ver anexo para más información al respecto).

5
La función setup() contendrá un código que se ejecutará una sola vez al iniciarse la ejecución del
programa. Su sintaxis es la siguiente:

void setup()
{ // El código del setup() se ejecuta sólo una vez al iniciar la aplicación
// Esto es un comentario y no se trata como instrucción
/* Esto también es un comentario que puede ocupar varias líneas, y
no se trata como instrucción, por lo que no se traduce a código máquina */

lista de instrucciones;
}

La función draw() contendrá un código que se ejecutará “iterativamente”, como si fuera un bucle o
ciclo infinito. Su sintaxis es la siguiente:

void draw()
{ // El código del draw() se ejecuta continuamente de forma iterativa
// Esto es un comentario y no se trata como instrucción
/* Esto también es un comentario que puede ocupar varias líneas, y
no se trata como instrucción, por lo que no se traduce a código máquina */
lista de instrucciones;
}

Tabla 1: Funciones básicas para personalizar el aspecto de la ventana de IU gráfica, y funciones gráficas.
Función Utilidad de cara a la ejecución en la ventana de Ejemplo
IU gráfica
size(width, height); Sirve para darle el tamaño a la ventana de IU size(400, 200);
gráfica.
background(R,G,B); Sirve para darle un color determinado al fondo background(255, 128, 62);
background(R, G, B, Alfa); (Red, Green, Blue), con valores en el intervalo 0- background(255, 0, 0, 50);
255 para cada canal de color. El canal Alfa sirve
para añadir un grado de transparencia entre 0-100.
stroke(R,G,B); Sirve para darle un color determinado a los trazos stroke(128, 128, 128);
stroke(R,G,B, Alfa); de todas las figuras que se dibujen a continuación stroke(150, 100, 80, 25);
en el código. Los colores son (Red, Green, Blue),
con valores en el intervalo 0-255 para cada canal
de color. El canal Alfa sirve para añadir un grado
de transparencia entre 0-100.
fill(R,G,B); Sirve para darle un color determinado al relleno de fill(150, 100, 80);
fill(R, G, B, Alfa); todas las figuras cerradas que se dibujen a fill(0, 100, 80, 60);
continuación en el código. Los colores son (Red,
Green, Blue), con valores en el intervalo
0-255 para cada canal de color. El canal Alfa sirve
para añadir un grado de transparencia entre 0-100.
strokeWeight(n); Sirve para darle un grosor determinado al trazo, strokeWeight(5);
siendo n un número en el intervalo 0-100.
point(x, y); Sirve para dibujar un punto en las coordinadas point(50, 100);
especificadas.
line(x1, y1, x2, y2); Sirve para dibujar una línea entre las coordinadas line (0, 0, 200, 200);
especificadas.
triangle(x1, y1, x2, y2, x3, y3); Sirve para dibujar un triángulo entre las triangle(158, 55, 290, 91, 290, 112);
coordinadas especificadas.
quad(x1,y1,x2,y2,x3 y3,x4,y4); Sirve para dibujar un trapecio entre las coordinadas quad(10, 20, 50, 60, 0, 100, 200, 10);
especificadas.
rect(x1,y1,x2,y2,x3 y3,x4,y4); Sirve para dibujar un rectángulo entre las rect(120,150, 100, 50);
coordinadas especificadas, la anchura y altura.
ellipse(x1, y1, width, height); Sirve para dibujar una elipse entre las coordinadas ellipse ( 120, 100, 110, 150);
especificadas par el centro, la anchura y altura.
arc(x1,y1,width,height,start,stop); Sirve para dibujar una elipse menos una sección arc(390, 60, 80, 80, radians(90),
entre las coordinadas especificadas par el centro, la radians(225));
anchura y altura. Los parámetros start y stop se le
pasan en radianes, para lo cual es mejor usar la
función radians(grados) pasándole el ángulo en el
intervalo 0-360).
NOTA: Se especifican las funciones gráficas con las coordenadas en el espacio 2D (el más empleado); pero si se trabajase en el espacio 3D
habría que añadir la coordenada z donde corresponda.
6
NOTA PARA TODOS LOS EJEMPLOS DE LOS BOLETINES: Si se copia el código de los ejemplos desde
el fichero PDF del boletín, es posible que las comillas simples ‘’ y dobles comillas “” las copie con otro formato,
y el IDE de Processing dará un error. Se corrige volviendo a escribir bien esas comillas. De todas formas, de cara
al aprendizaje del alumno LO MEJOR ES ESCRIBIR EL CÓDIGO DIRECTAMENTE (sin usar las
utilidades de copiar y pegar el texto).

Ejemplo de utilización de las funciones setup() y draw() y ejercicios para realizar en clase:

EJEMPLO 1: USO DE LAS FUNCIONES BÁSICAS DE PROCESSING: setup() y draw()

void setup()
{
size(400, 200);
background(255, 128, 62);
}

void draw()
{
stroke(128, 128, 128);
fill(0, 100, 80, 60);
strokeWeight(5);
point(50, 100);
line (0, 0, 200, 200);
fill(255, 0, 0, 60);
triangle(158, 55, 290, 91, 290, 112);
fill(0, 255, 0, 60);
quad(10, 20, 50, 60, 0, 100, 200, 10);
fill(0, 0, 255, 60);
rect(120,150, 100, 50);
fill(0, 128, 128, 60);
ellipse ( 120, 100, 110, 150);
fill(128, 255, 0);
arc(390, 60, 80, 80, radians(90), radians(225));
}

EJERCICIO 1A: USAR LAS FUNCIONES BÁSICAS DE PROCESSING: setup() y draw()


Probar a ejecutar las funciones de la tabla 1, cambiando los valores de los parámetros/argumentos.

VARIABLES Y CONSTANTES EN PROCESSING (Y C)


Existen variables del sistema que nos dan información útil para determinados fines. Así por ejemplo,
están las variables mouseX, mouseY, ,… se utilizan para crear código interactivo.

Algunas Variables del Sistema en Processing


mouseX Coordenada horizontal del ratón en el frame actual
mouseY Coordenada vertical del ratón en el frame actual
width Ancho de la ventana gráfica
height Alto de la ventana gráfica
pmouseX Coordenada horizontal del ratón en el frame inmediantamente anterior
pmouseY Coordenada vertical del ratón en el frame inmediantamente anterior
*Frame: es el marco/ventana gráfica de ejecución de Processing

EJERCICIO 1B: USAR LAS FUNCIONES BÁSICAS DE PROCESSING: setup() y draw()


Crear una función que dibuje un círculo de diámetro igual a la cuarta parte del ancho de la ventana, y cuyo
centro esté determinado por las coordenadas del ratón. La ventana será de 800x600, fondo blanco, y los círculos
serán de color azul con una transparencia del 40%.

7
En general las variables nos permiten almacenar datos en memoria y operar con ellos. Estos datos
pueden ser de distinto tipo (o formato numérico) y de distinto tamaño (en bits o bytes). Hay diversos tipos
de variables simples: números enteros, caracteres, cadenas de caracteres, números reales (flotantes), así de
variables compuestas (vectores y matrices, siendo cada elemento de tipo simple o compuesto). Es necesario
declarar las variables al principio de la función, con el objetivo de indicar al compilador que reserve un espacio
determinado en memoria para operar con estas variables. La longitud en bytes de este espacio será función del
tipo de variable declarada (ver columnas 1 y 2 de la tabla 2).

La sintaxis de la declaración de variables puede ser de dos tipos: sólo declarándolas con el tipo y nombre,
o bien declarándolas y dándoles un valor inicial al mismo tiempo.

tipo lista_de_nombres; //DECLARACIÓN

tipo nombreVariable1=valorInicial1, Variable2=valorInicial2; //DECLARACIÓN E INICIALIZACIÓN

/*tanto la declaración, como la declaración/inicialización se podría hacer con varias variables a la vez,
separándolas por comas*/
- tipo: indica el tipo de dato que se almacena en la variable (entero, real, carácter ASCII, ...).
- lista_de_nombres: uno o más nombres de variables separados por comas.

Una constante es un dato con un nombre, un tipo y un valor asociado que no puede modificarse una vez
definido. La sintaxis de la declaración de una constante es:
final TIPO NOMBRE=valor_cte;

Las constantes se suelen definir al principio del programa, antes de las funciones.
Ejemplo: final float PI=3.14; //Las ocurrencias del código donde aparezca PI serán sustituidas por 3.14

NOTA: Las constantes en C se declaran de otra forma (ver anexo).

Existen una serie de normas para los nombres de variables y constantes: pueden contener el carácter guion
bajo (_), dígitos numéricos y letras del código ASCII estándar (no pueden contener eñes ni caracteres con tildes).
No pueden comenzar por un dígito numérico. Se diferencian mayúsculas y minúsculas.

Los nombres de constantes se suelen poner en MAYUSCULA para reconocerlas fácilmente en el código.
Ejemplos:
- Nombres correctos: importe3, hora_comienzo, dia, Dia, DIA
- Nombres incorrectos: día, 3importe, año
- Si se declaran las variables de tipo entero var1, Var1, VAR1, serán tres variables diferentes que ocuparán
distintas posiciones en la memoria, puesto que se diferencian las mayúsculas y las minúsculas.

Tabla 2: Tipos básicos de variables en Processing (y C)


Lenguaje Sintaxis del tipo Tipo Almacenamiento Rango de valores
Proc, C int Entero 32 bits Entero (Complemento a 2) [-231, 231-1]
Proc, C unsigned int Natural de 32 bits Entero (Binario natural) [0, 232-1]
Proc, C float Real 32 bits Real* (Punto Flotante de simple [1.18-38, 3.4038]
precisión) (precisión: 7 dígitos)
Proc, C double Real 64 bits Real*(Punto Flotante de doble [2.23-308, 1.79308]
precisión) (precisión: 15 dígitos)
Proc, C char Un carácter Entero y carácter** A-z, 0-9, símbolos
(entero de 8 bits) (Complemento a 2)
Proc, C unsigned char Natural de 8 bits Binario natural [0, 28-1]
Proc String Secuencia de caracteres (se explicará más adelante) (se explicará en
(palabra, frase,…) prácticas 1 y 2)
Proc PFont Fuente vectorial VLW; (se explicará más adelante) (práctica 5)
se usa con la herramienta
Create Font
Proc PImage Imagen JPG, PNG o GIF (se explicará más adelante) (práctica 7)
Proc PShape Fichero SVL (se explicará más adelante) (práctica 8)
(objeto 3D)
*Las variables reales deben recibir valores en los que la parte entera y fraccionaria estén separadas por un
punto“.”y no por una coma “,” como se usa en España. Ejemplo correcto: float radio=12.345;
**El tipo char suele utilizarse para representar el valor numérico de un carácter de la tabla ASCII/UNICODE.

8
EJEMPLO 2: DECLARACIÓN DE VARIABLES Y CONSTANTES
//Ejemplo sencillo para ver la declaración de variables y constantes, aunque no se hace nada con ellas
final float PI=3.14;
void setup(){
int x, y, z;
float radio=4.5;
String nombre, apellido1, apellido2;
char inicial=’A’;
int[] v; //vector de enteros
//los vectores y matrices se estudiarán en prácticas posteriores
}
EJERCICIO 2: DECLARACIÓN DE VARIABLES Y CONSTANTES
Escribir en el IDE de Processing el ejemplo 2 y ejecutarlo.

INSTRUCCIÓN DE ASIGNACIÓN EN PROCESSING (Y C)


Instrucción que sirve para almacenar un dato en una variable. Todas las instrucciones de asignación acaban
con el carácter (;). La sintaxis de la instrucción de asignación es:

Nombre_de_variable = expresión;
- nombre_de_variable: Nombre de variable declarada previamente
- operador de asignación (=): Indica que el valor calculado en la expresión debe ser almacenado en
Nombre_de_variable.
- expresión: Indica cómo se calcula el valor a almacenar en la variable.
Nótese que el sentido de la asignación es de derecha a izquierda

EXPRESIONES ARITMÉTICAS EN PROCESSING (Y C)


EXPRESIÓN ARITMÉTICA Resultado de la expresión
Constante El resultado de la expresión es el valor de la constante
Nombre_de_Variable El resultado de la expresión es el valor de la variable
Expresión1 + Expresión2 Suma Expresión1 y Expresión2, que son, a su vez, otras expresiones
Expresión1 – Expresión2 Resta Expresión2 a Expresión1
Expresión1 * Expresión2 Multiplica Expresión1 por Expresión2
Expresión1 / Expresión2 Divide Expresión1 entre Expresión2
- Expresión El resultado es la Expresión cambiada de signo (operador unario)
Expresión1 % Expresión2 Operador módulo: Devuelve el resto de la división entera Expresión1 entre Expresión2
variable -- Auto-Decremento: Devuelve el valor de la variable; después resta 1 al valor de la variable
variable ++ Auto-Incremento: Devuelve el valor de la variable; después suma 1 al valor de la variable.

Veamos algunos ejemplos de expresiones incluyendo algunos errores. Vamos a suponer que en alguna parte
de nuestro programa hemos definido las variables radio, perímetro y area:
float radio = 3000;
float perimetro, area;

EXPRESIÓN ARITMÉTICA EJEMPLOS


Constante 3.32 PI ‘A’
Nombre_de_Variable perimetro radio area
Expresión1 + Expresión2 area+perimetro 3+radio+34 ‘A’+3
Expresión1 – Expresión2 perimetro-PI ‘A’-’a’+3 3+4-5.6-3
Expresión1 * Expresión2 2*PI*radio PI*radio*radio PI*(radio+2)
Expresión1 / Expresión2 perimetro/PI 3/2 resultado:1 3.0/2.0 resultado: 1.5
- Expresión -2 -PI -sqrt(radio)
Expresión1 % Expresión2 3%2 resultado:1 7%4 resultado:3 7.0%5 ERROR
variable -- radio-- (area+3)--ERROR PI-- ERROR
variable ++ area++ sqrt(34)++ ERROR PI++ ERROR

Como vemos en las tablas, una expresión puede contener como operando otras expresiones.
9
La forma en la que se evalúan o resuelven las expresiones siguen unas reglas similares a las de la aritmética
de las matemáticas. Primero se resuelven las de mayor precedencia y al final la de menor. La precedencia de las
operaciones aritméticas es:
Mayor Menor
++, -- - unario *, / y % +, -

En el caso de que haya varios operadores de la misma precedencia, se evalúan de izquierda a derecha. Con
los paréntesis podemos cambiar la precedencia.

EJEMPLO 3: EXPRESIONES ARITMÉTICAS


El siguiente código resuelve dos expresiones aritméticas.

void setup() {
float x, y, z, sol1, sol2;
x=2.0;
y=4.0;
z=-3.0;
sol1= -x+2*z+y/x-7;
sol2= -x+2*(z+y)/(x-7);
//en el caso de la función println() el + no sirve para sumar,
// sino para mostrar el texto entrecomillado y el valor de una variable
println("sol1: " + sol1);
println("sol2: " + sol2);
}

EJERCICIO 3: Dado el código del ejemplo 3, resuelva manualmente las operaciones en un papel, y
posteriormente compruebe mediante el depurador los resultados de las expresiones aritméticas. Tenga en cuenta
la precedencia de los operadores para entender cómo se resuelven. ¿Por qué sol1 y sol2 no valen lo mismo?

EJEMPLO 4: PROMOCIÓN ENTRE TIPOS

Dado el siguiente código:


void setup() {
float result;
result = 3 / 2;
result = 3 / 2.0;
println(result);
result = 3.0 + 3/2;
println(result);
}

EJERCICIO 4A: Realizar las operaciones a mano y comprobar el valor calculado por el ordenador.
¿Por qué no realiza la operación como esperábamos?

SOLUCIÓN: Conversión implícita de valores de un tipo a otro (números enteros a reales)

EJERCICIO 4B: ¿Cómo se puede solucionar el problema para que result termine valiendo 4.5?

10
SOLUCIÓN: Conversión de tipos IMPLÍCITA haciendo que en la división entera el dividendo, el divisor
o ambos sean de tipo real (float o double):
Para que la división / calcule la parte fraccionaria (además de la parte entera), es necesario que el dividendo
o/y el divisor sean números reales (que pueden ser enteros con la parte fraccionario a cero; ejemplo 4.0).
Por tanto para que 3/2 dé como resultado 1.5 se puede hacer poniendo 3.0/2 o bien 3/2.0 o bien 3.0/2.0
Si fuera una variable, se podría multiplicar el dividendo o/y divisor por 1.0 Ejemplo: (var1*1.0)/2
También se puede hacer una conversión de tipos EXPLÍCITA (usando funciones tales como int(),
float(), round(),… esto se explica más adelante en esta práctica).

EJEMPLO 5: escrito en Processing y en C: El siguiente código sirve para calcular el perímetro y el área de
una circunferencia. Como puede verse el código es prácticamente el mismo, lo cual nos sirve para comprobar lo
que se explicó al comienzo de esta práctica respecto a la similitud entre distintos lenguajes de programación, en
este caso Processing y C.

prac1_ejemplo_PerimetroArea.pde (código en Processing con los conceptos explicados):


final float PI=3.14;

void setup()
{
float perimetro, area;
float radio = 30; // Declaración de variable con inicialización

perimetro = 2 * PI * radio;
area = PI * radio * radio;
println ("Mi primer programa en Processing");
ellipse (width/2.0, height/2.0, radio, radio);
println ("La circunferencia de radio " + radio + " tiene como perímetro: " + perimetro);
println ("El círculo de radio " + radio + " tiene como area: " + area);
}

prac1_ejemplo_PerimetroArea.c (código en C con los conceptos explicados):


#include <stdio.h> //necesario ponerlo en C para poder hacer uso funciones de entrada/salida como printf()
#define PI 3.14

int main()
{ float perimetro, area;
float radio = 30;

perimetro = 2 * PI * radio;
area = PI * radio * radio;
printf(“Mi primer programa en C\n”);
//En lenguaje C no se puede dibujar tan fácilmente el círculo y por eso no se incluye el código
printf ("La circunferencia de radio %f tiene como perímetro: %f", radio, perimetro);
printf ("El circulo de radio %f tiene como area: %f”, radio, area);
}

EJERCICIO 5A: Subrayar y anotar las diferencias entre los códigos en Processing y C del ejemplo 5,
y buscar en Internet los comandos print() y println() de Processing, así como printf() de C.

Diferencias:

EJERCICIO 5B: Modificar el ejemplo 5 en Processing, para que el radio dependa de la posición horizontal
del ratón, y por tanto calcule de forma interactiva el perímetro y el área en función de donde ponga el
usuario el ratón (en tiempo de ejecución).
¿Cómo puede hacer que sólo se vea el último círculo que se esté dibujando en ese momento?
Pista: Borrar es equivalente a volver a pintar el fondo cada vez que se ejecute.

11
ERRORES TÍPICOS DE PROGRAMACIÓN
ES IMPORTANTE TENER EN CUENTA LO SIGUIENTE:
A- El compilador detecta los errores y los muestra uno a uno en la zona roja del entorno de programación.
B- Una vez se soluciona el error mostrado en la zona roja del entorno de programación, hay que volver a
compilar. Si el compilador detecta un nuevo error, lo mostrará en la zona correspondiente. Y así
sucesivamente, hasta que ya esté todo el código correcto, en cuyo caso se ejecutará.
C- Aunque el error puede estar en inglés, hay que leerlo con atención y traducirlo si es necesario.
D- El compilador indica la línea donde está el error, aunque puede estar en esa línea o en otras anteriores.
E- Existen DIVERSOS TIPOS DE MENSAJES:
a. Errores de la sintaxis o del uso inadecuado del código: Son errores introducidos por el
programador (por ejemplo, cuando una función debe recibir variables de un tipo y la recibe de
otro tipo, si se ha escrito mal el nombre de una función o una variables, etc). El compilador nos
informa al respecto en la zona roja.
b. Errores de la lógica de la solución planteada: Estos errores ocurren cuando ya no hay
errores del tipo (a), y por tanto la aplicación se ejecuta pero no hace lo que se espera de ella.
Son errores más difíciles de identificar, porque no los detecta el compilador, pero se puede
averiguar qué está pasando repasando mentalmente la solución, y usando el DEPURADOR
(PRÁCTICA 3) para ver los valores de las variables en la ejecución paso a paso.
c. Avisos (Warning en inglés): Se trata de aspectos concretos del código que el compilador
detecta como extraños, pero sin ser errores. Por ejemplo, si detecta que hay variables
declaradas, pero luego no se usan en la sentencias y nos avisa al respecto.

INTERFAZ DE USUARIO E INTERACCIÓN PERSONA-ORDENADOR:


FUNCIONES ESTÁNDAR PARA ENTRADA/SALIDA
La mayoría de las aplicaciones informáticas han sido desarrolladas para que un usuario humano interactúe
con ellas. A esto se lo conoce como “IPO: Interacción Persona-Ordenador” (“HCI: Human Computer
Interaction” en inglés), y a la parte de la aplicación mediante la que se establece la comunicación se la denomina
“IU: Interfaz de Usuario” (“UI: User Interface” en inglés).

Existe una amplia diversidad de IU, siendo la más básica la que se establece mediante las funciones
estándares de entrada/salida, que permiten:
1. Imprimir mensajes y resultados por pantalla (println() y showInputDialog() en Processing)1.
2. Leer desde el teclado (showInputDialog() en Processing) 2.

LAS FUNCIONES SE EXPLICAN EN DETALLE EN LA PRÁCTICA 2. PUEDEN ACEPTAR O NO


PARÁMETROS, Y DEVOLVER O NO VALORES.

Función println para SALIDA DE DATOS POR CONSOLA


La función println nos permite mostrar mensajes de texto y valores de variables en el área de CONSOLA
del IDE de Processing. Se emplea poniendo entre dobles comillas “” el texto a mostrar y si se quieren mostrar
valores de variables se añade un + y en nombre de la variable a mostrar (sin comillas y haciéndolo con este
formato para cada variable que se quiera mostrar). Es decir, el + en println() no sirve para sumar sino para unir
trozos de texto entrecomillados y nombres de variables y constantes cuyo valor se va a mostrar por consola.
Ejemplo: int edad=18;
String nombre= "Carlos Núñez";
println("El nombre del usuario es: " + nombre + " y tiene " + edad + “años”);
//esto mostraría por consola la frase “El nombre del usuario es Carlos Núñez y tiene 18 años.

Un uso frecuente de la función println es cuando creamos una INTERFAZ PERSONA-ORDENADOR


TIPO MENÚ. Este menú podría meterse en la función draw() de Processing si queremos que se repita una y
otra vez hasta cerrar la aplicación (ejemplo 6).

EJEMPLO 6:
void setup()
{ println("Opciones:");
println("0. Introducir el valor del radio");
println("1. Calcular perímetro");
println("2. Calcular área:");
println("3. Salir"); }

1
printf() en lenguaje C. Se explica el funcionamiento de esta función en el anexo.
2
scanf() en lenguaje C. Se explica el funcionamiento de esta función en el anexo.
12
EJERCICIO 6: Escribir el código del ejemplo 6 en Processing y ejecutarlo.

Función text para SALIDA DE DATOS EN LA VENTANA GRÁFICA DE EJECUCIÓN


La función text nos permite mostrar mensajes de texto en la ventana gráfica de ejecución.

text(valor, columna, fila);


valor: Valor a mostrar, pudiendo ser un valor numérico, cadena de caracteres, o una variable de estos tipos
columna: posición horizontal donde se quiere mostrar el inicio del texto
fila: posición vertical donde se quiere mostrar el inicio del texto

Ejemplo:

size(800, 600);
text("Recetas de cocina", width/4, height/2);

Función showMessageDialog para SALIDA DE DATOS MEDIANTE CUADROS DE DIÁLOGO


La función println nos permite mostrar mensajes de texto en consola.
Si queremos mostrar una IU un poco más gráfica mediante CUADROS DE DIÁLOGO se puede emplear la
función showMessageDialog que pertenece a una librería de JAVA cuya referencia hay que incluir en la primera
línea del código, antes de cualquier función. Esto se hace de la siguiente manera:

import static javax.swing.JOptionPane.*;


La función showMessageDialog recibe dos parámetros: el primero es frame y el segundo es el texto y valores de
variables que se quieren mostrar en el cuadro de diálogo. Se emplea poniendo entre dobles comillas “” el texto a
mostrar y si se quieren mostrar valores de variables se añade un + y en nombre de la variable a mostrar (sin
comillas y haciéndolo con este formato para cada variable que se quiera mostrar.

EJEMPLO 7:
import static javax.swing.JOptionPane.*;

void draw()
{
showMessageDialog(frame, "Opciones:" + "\n\r" +
"0. Introducir el valor del radio" +"\n\r" +
"1. Calcular perímetro" +"\n\r" +
"2. Calcular área:"+"\n\r" +
"3. Salir" + "\n\r" +"Introducir opción");
}
Se usan los códigos de escape “\n y \r” para crear una nueva líneas en el cuadro de diálogo.

EJERCICIO 7: Escribir el código del ejemplo 7 en Processing y ejecutarlo.

Como se puede observar, al tener únicamente el código para escribir las opciones del menú en el cuadro de
diálogo, y estar el código dentro de la función draw no es posible salir del bucle infinito.
Por tanto, necesitamos aprender a utilizar funciones para entrada/salida de datos, y completar así el diálogo
hombre máquina o interacción persona ordenador.

Función showInputDialog para ENTRADA/SALIDA (E/S) DE DATOS MEDIANTE CUADROS DE


DIÁLOGO
La función showInputDialog permite escribir una indicación al usuario y recibir la respuesta del mismo, es decir
puede ser empleada para entrada/salida de datos en formato cuadro de diálogo.

Esta función tiene la particularidad de que devuelve el valor introducido por el usuario como un valor tipo
cadena (String). Por tanto, para poder usarla de una manera operativa hay que traducir la cadena al tipo
correspondiente. Esto se hace con las funciones de la siguiente tabla:

13
Funciones para CONVERSIÓN Uso Ejemplo
EXPÍCITA DE TIPOS
int(valor) Convierte a número entero el valor (numérico o de cadenas) int(strOpcion);
que se le pase como parámetro de entrada int(area);
float(valor) Convierte a número entero el valor (numérico o de cadenas) Float(radio);
que se le pase como parámetro de entrada float(strRadio);
round(valor) Redondea al valor entero más cercano el valor real que se le round(3.16);
pase como parámetro devuelve el valor 3

EJEMPLO 8:
import static javax.swing.JOptionPane.*;

void draw()
{ int op;
String strOpcion;

strOpcion=showInputDialog("Opciones:" + "\n\r" +
"0. Introducir el valor del radio" +"\n\r" +
"1. Calcular perímetro" +"\n\r" +
"2. Calcular área:"+"\n\r" +
"3. Salir" + "\n\r" +"Introducir opción");
op=int(strOpcion);

showMessageDialog(frame, "La opción elegida ha sido" + op);
}

EJERCICIO 8A: Escribir el código del ejemplo 8 en Processing y ejecutarlo. ¿Con lo visto hasta ahora, podría
unirse el código de los ejemplos 5 y 8 para tener una solución completa en la que preguntar al usuario un radio y
darle a elegir entre calcular perímetro o área, calcular el que corresponda y mostrar el resultado por pantalla?

EJERCICIO 8B: Escribir en la función setup() el código (sin copiar la solución del ejercicio anterior) para
establecer la Interacción Persona Ordenador a través de E/S en formato cuadros de diálogo, para una aplicación
de recetas de cocina, leer la opción elegida por el usuario como cadena, pasar la cadena a número entero, y
mostrar el mensaje “La opción elegida ha sido:__” , mostrando en __ la opción elegida en formato numérico .
Las opciones serán:
1. Añadir nueva receta
2. Buscar una receta y mostrarla
3. Hacer un listado de todas las recetas
4. Salir
Introducir opción:

EJERCICIO 8C: Cambiar el nombre de la función setup() por la función draw() el código del ejercicio 8B
¿Qué efecto tiene en la ejecución del código?

EJERCICIIO 9: Crear el código para simular el menú típico de un cajero automático para que sea mostrado en
cuadros de diálogo. Después de mostrar las opciones, se ha de leer la opción y mostrar la frase “Opción elegida:
___” (donde ___ muestre el valor de la opción elegida).

(“Opciones:” “A. Últimos movimientos”, “B. Consultar de saldo”, “C. Retirada de efectivo”,
“D. Ingresar dinero”, “Elija una opción: ”)

EJERCICIO 10: Crear el código para simular el menú típico del juego Piedra/Papel/Tijera para que sea
mostrado en cuadros de diálogo. Después de mostrar las opciones, se ha de leer la opción y mostrar la frase
“Opción elegida: ___” (donde ___ muestre el valor de la opción elegida).

(“Si quiere jugar con la máquina, elija una opción entre las siguientes:” “1. Piedra”,
“2. Papel”, “3.Tijeras”, “Elija una opción”).

14
ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C

ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C


(para alumnos que quieran practicar con C fuera del aula)
Instalación del entorno de programación en C
EL ALUMNO QUE, ADEMÁS DE PROCESSING, QUIERA APRENDER A PROGRAMAR
EN LENGUAJE C DEBE DESCARGAR, INSTALAR Y HABITUARSE al entorno de programación que se
utiliza para programar en C en la EPS: ZinjaI (disponible en E.V. y en http://zinjai.sourceforge.net/).

Creación, edición, compilación y ejecución de un programa C


El entorno de programación nos permite crear, editar, compilar y ejecutar programas.
TAREA: Siga los siguientes pasos para realizar su primer programa en C.

1. Haz clic en este icono, o pulsa Ctrl+N, 2. Puede seleccionar tanto “Archivo en 3. En la ventana principal del editor, escriba
para crear un nuevo fichero de código C Blanco” como “Utilizar plantilla”. En estas líneas de código.
este ejemplo se usa “Archivo en Blanco”.
A continuación, pulse el botón “Crear”.

4. Guarde el programa. Haz clic en el 5. Haz clic en este icono, o pulsa la tecla 6. Comprueba el resultado. Va a tener un
icono para guardar, o pulsa Ctrl+S. Elige F9, para compilar y ejecutar el programa error porque la variable area no está
un sitio en el disco duro para guardar tu que has hecho. declarada
programa, y ponle un nombre. ¡No olvides
el .c al final del nombre!

7. Haz los cambios necesarios en el 8. Guarde el programa con los cambios 9. Consola de entrada y salida de nuestros
programa para corregir los errores (declare corregidos, compílelo y ejecútelo. ¡Ya programas.
la variables area). funciona!

15
ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C

Si la versión de ZinjaI no reconoce los comentarios con // seguir los siguientes pasos:
Pulse Archivo y a continuación Preferencias. Elegir la opción “Programa/Proyecto”
Debe mostrarse la ventana de preferencias tal como se observa en la siguiente imagen:

Figura 1: Preferencias de los programas en el entorno ZinjaI

Tal y como se muestra en la imagen, debe añadir en los parámetros adicionales por defecto para el compilador
C: –std=c99
NOTA: La mayoría de los compiladores aceptan /* */ para introducir comentarios en el código. Usar // es sólo
más cómodo cuando el comentario ocupa una sóla línea.

PROGRAMACIÓN EN LENGUAJE C
Función main()
Un programa C suele estar dividido en funciones (que se llaman procedimientos o rutinas en otros
lenguajes). Cada función ejecuta una parte de un programa, pudiendo recibir unos valores (de entrada) y
pudiendo devolver otro (de salida). El programador puede hacer cuantas funciones necesite y darles los nombres
que quiera, pero siempre debe haber una función main (en inglés significa “principal”). En las primeras
prácticas ÚNICAMENTE trabajaremos con esta función principal.

La sintaxis de la función main es:

int main ()
{
// Esto es un comentario y no se trata como instrucción
/* Esto también
es un comentario y no se traduce a código máquina */
lista de instrucciones;
return 0;//esta instrucción se explicará en la práctica 4
}
Todo lo que hay entre las llaves { ... } es el cuerpo de la función. El cuerpo está formado por una lista de
instrucciones, separadas por el carácter ‘;’. Las instrucciones se procesan de forma secuencial.
En esta práctica se trabajará con programas secuenciales, pero en prácticas posteriores se verá cómo se
modifica este comportamiento secuencial.

16
ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C

Variables en C
Igual que en Processing (ver apartado correspondiente).

Constantes en C
Una constante es un dato con un nombre, un tipo y un valor asociado que no puede modificarse una vez
definido porque no ocupan espacio en la memoria. La sintaxis de la declaración de una constante es:

#define NOMBRE valor_cte

Las constantes se definen al principio del programa, antes de las funciones. No se dice explícitamente de
qué tipo es la constante ya que no ocupan espacio en memoria, y al hacer la precompilación previa a la
ejecución, el compilador busca las ocurrencias de NOMBRE y lo sustituye por el valor_cte correspondiente.
Ejemplo: #define PI 3.1416 //Las ocurrencias del código donde aparezca PI serán sustituidas por 3.1416

FUNCIONES ESTANDAR PARA ENTRADA/SALIDA


Las funciones que estudiaremos en este apartado se encuentran en la biblioteca de funciones
estándar de entrada/salida (llamada stdio). Para usar estas funciones es necesario incluir la
siguiente línea al comienzo de programa:
#include <stdio.h>

Función printf
La función printf nos permite mostrar mensajes de texto en pantalla. No mostraremos el prototipo de la función
printf debido a que utiliza reglas del lenguaje C que no serán estudiadas en este curso. En su lugar, la
describiremos usando una notación simplificada:
printf(“texto_de_formato”, lista_argumentos_adicionales);

Entre las comillas (“) podemos escribir el texto que queramos que la función printf muestre en pantalla. Además
del mensaje que queramos mostrar por pantalla, este texto puede contener una serie de códigos de formato que
nos permite mostrar dentro de esa frase el resultado de las expresiones aritméticas que colocaremos en la lista de
argumentos. Los códigos de formato se identifican por el carácter %. La función printf devuelve un valor de tipo
int; sin embargo, en los ejercicios propuestos nunca se usará el valor devuelto.

Veamos a continuación algunos códigos de formato y una serie de ejemplos.

CÓDIGO FORMATO
%d Muestra un valor entero con signo (int, char, etc.)
%u Muestra un valor entero sin signo (unsigned int, etc.)
%f Se muestra un número real de tipo float
%lf Se muestra un número real de tipo double
%c Muestra un carácter de la tabla ASCII
%s Cadena de caracteres (se estudiarán en prácticas posteriores).
%x Se escribe en pantalla un número entero en hexadecimal

EJEMPLO 2:
#include <stdio.h>
main()
{ int a = -33;
float b = 0.26;

printf(“Muestra un entero: %d\n”, a);
printf(“Muestra una suma entera: %d\n”, a+120);
printf(“Muestra el mismo valor como entero y natural: %d, %u\n”, a, a);
printf(“Ahora mostramos un valor real: %f\n”, b);
}

17
ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C

Podemos ver cómo al final de cada frase hemos escrito “\n”. Eso hace que, en lugar de ese código especial, se
muestre un salto de línea (esto hace que lo que se muestre después aparezca en la línea siguiente de la pantalla).
Ese código se llama secuencia de escape. Los más comunes son los de la siguiente tabla:

CÓDIGO (secuencia de escape) SIGNIFICADO


\a Carácter de alarma
\b Retroceso
\n Nueva línea
\t Tabulador horizontal
\r Retorno de carro
\” Dobles comillas
\’ Comillas simples
\\ Barra invertida
\? Signo de interrogación

Función scanf
La lectura de datos escritos con el teclado se realiza mediante la función scanf, cuya sintaxis es la siguiente:

scanf(“texto_de_formato”, &variable);

En el caso de scanf, entre las comillas sólo debemos escribir los códigos de formato (no se debe escribir
ningún otro carácter, ni siquiera espacios). Estos códigos son los mismos que hemos visto para el printf. El uso
del carácter “&” delante del nombre de la variable es obligatorio. Si olvidamos ponerlo pueden ocurrir
incluso errores graves de aplicación. De esta forma, si quisiéramos leer por teclado un valor de tipo float
escribiríamos:

EJEMPLO 3: (TÍPICO EJEMPLO DE DIÁLOGO HOMBRE – MÁQUINA)


#include <stdio.h>
main()
{ float b;

//FRASE DE CORTESÍA PARA DECIRLE AL USUARIO LO QUE DEBE HACER
printf(“\n Introduce un valor real por teclado y dale a la tecla
ENTER:”);

//INSTRUCCIÓN DE LECTURA EN C: SCANF, INDICANDO LA VARIABLE DONDE
GUARDAR EL //VALOR LEÍDO POR TECLADO
scanf(“%f”, &b);
// &b se podría interpretar como “lee un valor real (%f) en la
dirección de memoria de la variable b. No se usa el \n con scanf

//IMPRIMIR EL VALOR LEÍDO POR TECLADO EN LA CONSOLA DE EJECUCIÓN
printf(“El valor tecleado ha sido: %f\n”, b);
}

La función scanf devuelve un valor de tipo int; aunque en los ejercicios propuestos en esta práctica no se usará el
valor devuelto.

18
ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C

EJEMPLOS DE ESTA PRÁCTICA EN LENGUAJE C

EJEMPLO 1 (no se puede hacer con facilidad a no ser que se usen librerías gráficas de C)

EJEMPLO 2 (en C):

#include <stdio.h>

int main (void)


{
int x, y, z;
float radio=4.5;
char nombre[20], apellido1[20], apellido2[20];
char inicial='A';
int v[10]; //vector de enteros

return 0;
}
¿Qué valores cree que tendrán las variables durante la ejecución? ¿Cambia el valor de b tras asignarle

EJEMPLO 3 (en C):


#include <stdio.h>

int main() {
float x, y, z, sol1, sol2;
x=2.0;
y=4.0;
z=-3.0;
sol1= -x+2*z+y/x-7;
sol2= -x+2*(z+y)/(x-7);
printf("sol1: %f", sol1);
printf("sol2: %f", sol2);

return 0;
}

EJEMPLO 4 (en C):


#include <stdio.h>

int main() {
float result;

result = 3 / 2;
result = 3 / 2.0;
printf("%f ", result);
result = 3.0 + 3/2;
printf("%f ", result);

return 0;}

19
ANEXO: ENTORNO DE PROGRAMACIÓN ZINJAI PARA PROGRAMAR EN C

EJEMPLO 5 (en C):


#include <stdio.h>
//necesario ponerlo en C para poder hacer uso funciones de entrada/salida como printf()
#define PI 3.14

int main()
{
float perimetro, area;
float radio = 30;

perimetro = 2 * PI * radio;
area = PI * radio * radio;
printf(“Mi primer programa en C\n”);
//En lenguaje C no se puede dibujar tan fácilmente el círculo y por eso no se incluye el código
printf ("La circunferencia de radio %f tiene como perímetro: %f", radio, perimetro);
printf ("El circulo de radio %f tiene como area: %f”, radio, area);
}

EJEMPLO 6 (en C):


#include <stdio.h>

int main() {
int op;

printf("1. Añadir nueva receta \n");


printf("2. Buscar una receta y mostrarla \n");
printf("3. Hacer un listado de todas las recetas \n");
printf("4. Salir \n");
printf("Introducir opción: " );
scanf("%d", &op);
//En la función scanf de C se le especifica que se lea como número entero "%d"
//En la función scanf de C si el valor leído por teclado es una variable de
//tipo simple, hay que ponerle un & delante del nombre de la variable &op
return 0;
}

20

Вам также может понравиться