Bloque 6

Anuncio
Ing. Informática
Programación I
Bloque 6
Declaración de tipos propios
Bloque 6
Ing. Informática
Programación I
Bloque 6
Los tipos de las estructuras
ƒ
Si necesitamos pasar una estructura
como parámetro de una función no
podemos hacerlo así, ya que daría un
error de compilación:
void funcion (struct {short int R;short int G;short int B;} color)
{
...
};
Ing. Informática
Programación I
Bloque 6
Los tipos de las estructuras
ƒ
La forma correcta es definir un nuevo tipo de
datos (colorRGB):
struct ColorRGB {
short int R;
short int G;
short int B;
};
ƒ
Nuevo tipo de datos (llamado struct ColorRGB)
y de esta forma ya podremos declarar
variables y parámetros de dicho tipo:
struct ColorRGB color1, color2;
struct ColorRGB colores[10];
Variables (color1, color2 y colores)
Ing. Informática
Programación I
Bloque 6
Visibilidad de los tipos de estructuras
ƒ
Si la declaración del tipo se hace dentro de
una función, sólo es visible en esa función
void f1()
{
struct ColorRGB {
short int R;
short int G;
short int B;
};
...
}
main()
{
...
}
Sólo podemos declarar variables del tipo
struct ColorRGB dentro de la función f1,
pero no en otras (por ejemplo main)
Ing. Informática
Programación I
Bloque 6
Visibilidad de los tipos de estructuras
ƒ
Si la declaración del tipo se hace al
principio del fichero, fuera de las funciones,
es visible en todas las funciones
struct ColorRGB {
short int R;
short int G;
short int B;
Podemos tipo strut ColorRGB dentro de
cualquier función (y también como parámetro)
};
void f1(struct ColorRGB color)
{
...
}
main()
{
struct ColorRGB c;
...
}
Ing. Informática
Programación I
Bloque 6
Definición de tipos con typedef
ƒ
Otra forma de definir tipos es mediante typedef,
que crea un sinónimo para un tipo existente:
typedef tipos_original tipus_nuevo;
ƒ
Ejemplo:
typedef float Temperatura;
Temperatura temp1, temp2, temperatures[12];
typedef struct {
short int R;
short int G;
short int B;
} ColorRGB;
ColorRGB color1;
typedef char Dni[10];
Dni dni1 = "12345678A";
ƒ
También sigue la regla de visibilidad antes citada
Ing. Informática
Programación I
Conversiones de tipos
ƒ
Automáticas entre tipos numéricos:
int x=2;
float y=3.5;
y=x;
printf("%f",y);
int x=2;
float y=3.5;
x=y;
printf("%d",x);
Escribe 2.000000
Escribe 3
Bloque 6
Ing. Informática
Programación I
Bloque 6
Conversiones de tipos
ƒ
Ya que los caracteres se representan
mediante un entero entre 0 y 255, en
C los tipos entero y carácter se
pueden usar indistintamente
void main()
void main()
{
{
int c;
char c;
c='A';
c=66;
c=c+1;
printf("%c",c);
}
Escribe B
void main()
{
char c=’B’;
printf(“%d”,c);
}
printf("%c",c);
}
Escribe B
Escribe 66
Ing. Informática
Programación I
Conversiones de tipos
Si el entero es mayor que 255, se
toma el byte menos significativo
para hacer la convesión.
ƒ Por ejemplo, si el entero es 365,
su representación en binario es
ƒ
ƒ
ƒ
00000001 01101101
Se toma el byte de la derecha
(109), que se corresponde con el
carácter ‘m’
Bloque 6
Ing. Informática
Programación I
Conversiones de tipos
ƒ
Casts: forzar a un cambio de tipo
(tipo) variable
ƒ
Ejemplo:
int x=3,y=2;
float f;
f = (float)x / (float)y;
El resultado es 1.5
Sin casts sería 1
Bloque 6
Ing. Informática
Programación I
Bloque 6
Conversión de tipos
ƒ
Funciones de conversión. Por ejemplo, para
convertir una cadena de caracteres que contiene un
número en el tipo numérico correspondiente:
atoi(cadena) retorna el int representado por la cadena
de caracteres cadena
ƒ atof(cadena) retorna el float representado per cadena
ƒ
ƒ
Ejemplo:
#include <stdlib.h>
#include <stdio.h>
void main()
{
char cadena[6]=”12345”;
int x;
x=atoi(cadena);
printf(“%d”,x);
}
Descargar