No es un bug, es una característica no documentada

sábado, 11 de octubre de 2014

Programación. Codificación de programas en C (III)

15:18 Posted by Inazio , No comments
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