Printf
¿Cómo funciona?
Es lo que normalmente utilizaremos
para mostrar información por pantalla.
El primer parámetro es una cadena
donde podemos escribir aquello que queramos que salga, incluyendo las
posiciones en las que saldrá el valor de ciertas variables, que serán los
parámetros a partir del segundo.
Símbolos que incluir en esta cadena
(ejemplos):
·
%c à Variable de tipo
caracter
·
%d, %i à Enteros con signos
·
%e, %E, %f, %g, %G à Reales
·
%s à Cadenas
·
%u à Representación decimal
sin signo
·
%x à Representación entera
sin signos
·
\t, \n à Resectivamente,
tabulador y salto de línea
De todos estos ejemplos, los
importantes que estudiaremos serán %c, %d, %i, %f, %s, tabulador y salto de
línea.
Ejemplo:
printf(“El
número %i multiplicado por %i es &i \n”,a,b,a*b); /* Se supone que ambas
variables están declaradas como enteros */
Scanf
Comportamiento simétrico a printf
pero para leer valores de teclado.
Se emplean los mismos símbolos.
Cuidado, el compilador ahora no
espera variables, sino direcciones de memoria (punteros), así que será
necesario emplear el símbolo & si tenemos declaradas variables normales.
Ejemplo
int
a;
printf
(“Introduce número entero”);
scanf(“%i”,&a);
Crear y compilar en Linux
·
gedit
nombreArchivo.c & à Edita el fichero .c. El símbolo & hace que la
orden se ejecute de forma asíncrona
·
gcc
nombrePrograma.c à Compila, obteniendo un fichero ejecutable .out
§ gcc –o nombrePrograma nombreArchivo.c à
Compila renombrando el archivo
·
./nombrePrograma
à
Lanza el ejecutable
Selección múltiple. Sintaxis y semántica
caso
<nombreVariable> sea
<constante 1>: <acción 1>
<constante 2>: <acción 2>
…
<default>: <acción d>
Ejecuta la acción correspondiente
en función del valor de la variable cuyo nombre se indica.
Si el valor no coincide con ningún
caso, se ejecuta la acción por defecto.
Sólo funciona con tipos escalares
(no puede hacerse con un número real, ya que puede dar problemas, como por
ejemplo alcanzar el 0 y no llegar nunca).
Otras composiciones iterativas
Iteración indexada (for)
para
<nombreVariable>:=<expresión> hasta <expresión> hacer
<acción>
fpara
Iteración condicionada (siempre se ejecuta la acción mínimo una vez
hacer
<acción>
mientras
que condición
Tipo caracter
Recordemos que internamente un
ordenador representa todo al final como una secuencia de unos y ceros que
podemos transformar posteriormente a la base que consideremos oportuna para su
representación externa.
Ante la necesidad de representar
caracteres, lo que hacen los lenguajes de programación es asignar un código a
cada posible caracter.
Hay varias formas de poder
codificar caracteres. Una de las más extendidas es la codificación ASCII. No es la única (IBM por ejemplo usaba la suya propia, EBCDIC, y cada vez se utiliza más UNICODE, como estándar internacional –
los primeros caracteres son los mismos que ASCII- ).
En muchos lenguajes de programación
normalmente un caracter ocupa un byte cuyo contenido es el código ASCII del
carácter en cuestión.
Los datos constantes de tipo
caracter se escriben entre comillas simples en los algoritmos ( ‘ ‘ ). Ejemplo:
‘a’
ASCII
à C UNICODE à JAVA
UNICODE y ASCII son
compatibles, la diferencia es que UNICODE
permite representar cualquier tipo de caracter.
Operaciones
Operaciones específicas de datos
escalares (operaciones de relación y funciones sucesor y predecesor).
La función ord (ordinal), aplicada a un caracter, da como resultado el valor
entero correspondiente a su código numérico aosciado (ASCII). Ej:
ord(‘A’)=65,
ord(‘B’)=66, ord(‘0’)=48, ord (‘1’)=49…
La función chr es la inversa de la función ord. Aplicada al código numérico de un caracter da como resultado
el propio caracter. Se puede combinar con otras operaciones. Ejemplo:
chr(65)=’A’,
chr(49)=’1’, chr(ord(‘A’)+9)=’J’ /* Decima letra */, ord(‘J’)–ord(‘A’)+1=10 /*
Posición de J en el alfabeto */, ord(‘7’)-ord(‘0’)=7 /* Valor numérico del
dígito 7 */
Procedimiento para lectura y escritura de caracteres
leerCaracter(teclado,variableCaracter)
à
Lee un caracter introducido por teclado y asigna a la variable el valor de su
código. Coge el primer caracter que encuentra en el buffer de entrada.
escribirCaracter(teclado,expresionCaracter)
à
Escribe por la pantalla el caracter resultante de evaluar la expresión.
La función scanf quita cualquier espacio que haya por
delante, y lee el número mientras sea un número.
Hay un buffer de entrada. Ha leído
un número y no hay problema. Pero si ahora lee un carácter, detectará el ENTER.
Algoritmos de ejemplo:
Algoritmo
ordenAlfabetico
{Lee
un caracter. Si es del alfabeto, nos da su posición en él}
variables
letra:caracter;
principio
leerCaracter(teclado,pantalla);
si ((letra>=’a’) and (letra<=’z’))
entonces
escribirEntero(pantalla,ord(letra)-ord(‘A’)+1);
si no
escribirCadena(‘No es una letra’);
fsi
fin
Algoritmo
valorEnteroDeDigito
{Si
el caracter leído es un dígito, escribe por pantalla el entero que representa.
En caso contrario informa de la situación}
variables
digito:caracter;
principio
leerCaracter(teclado,digito);
si ((digito>=’0’) and (digito<=’9’))
entonces
escribeEntero(pantalla,ord(digito)-ord(‘0’));
si no
escribirCadena(pantalla,”No es un
dígito”);
fsi
fin
Algorimo
leerDatoEntero
{Lee
caracteres que supuestamente forman un entero, crear con ellos número entero
correspondiente y escribirlo por pantalla. El número puede tener espacios
blancos por delante}
variables
c:caracter;
numero:entero;
principio
leerCaracteres(teclado,c);
mientras que (c=’’) hacer
leerCaracteres(teclado,c);
fmq
numero=0;
mientras que ((c>’0’) and (c<’9’))
hacer
numero:=10*numero+ord(c)-ord(‘0’);
leerCaracteres(teclado,c);
fmq
fin
Tipo cadena
Las cadenas de caracteres o “strings”
son tipos de datos de amplia utilzación en programación.
Son simplemente secuencias de cero
o más caracteres.
Nosotros las representamos entre
comillas dobles. Ejemplo: “Esto es una
cadena de caracteres”
0 comentarios:
Publicar un comentario