Programación en C  Datos avanzados

Ariel Mora

Temas

  • Conversión de datos
  • Arreglos
    • Vectores
    • Matrices
  • Structs
  • Enums

Conversión de datos

Por medio del operador Cast se puede convertir los tipos de datos en tiempo de ejecución

Útil cuando en ciertas operaciones se ocupa un tipo diferente al de la variable

No modifica el tipo original


tipoFinal nuevaVariable = (tipoNuevo) (datoOriginal);

Conversión de datos

Solo ciertos tipos de datos se pueden convertir por medio de Cast

  • Enteros -> Flotantes
  • Flotantes -> Enteros
  • Enteros -> Char
  • Char -> Enteros

 

Nota: la conversión de Char se hace por Código ASCII

Conversión de datos

int valor1 = 9;
int valor2 = 15;
double valorFlotante = 0.0;
double resultado = 0.0;

// se puede convertir de una variable a otra
valorFlotante = (double) (valor1);

// o se puede convertir el resultado de una operacion
resultado = (double) (valor1) / (double) (valor2);

Arreglos

Las variables permiten guardar solo un dato de un tipo

En algunos casos, se necesita guardar varios datos de un mismo tipo, que tiene relación entre sí


double nota1;
double nota2;
double nota3;
double nota4;
...

Arreglos

Los arreglos permiten guardar en una variable múltiples datos de un mismo tipo

Estos pueden ser de múltiples dimensiones


tipo nombre[][][]; // los [] indican las dimensiones

Vectores

Son arreglos de una dimensión

Permiten guardar elementos como una fila contigua

Los elementos son identificados por una posición


tipo nombre[]; // los [] indican las dimensiones

Vectores

Se tiene que saber de antemano la cantidad de elementos que contendrá el vector


// se crea un arreglo de enteros de tamaño cinco
int arreglo[5];

// se crea un arreglo de enteros indicando cuales
// son los elementos que contiene
int arreglo[5] = { 10, 2, 53, 8, 97};

// si se le indica los elementos que contiene
// no es necesario indicar el tamaño
int arreglo[] = { 10, 2, 53, 8, 97};

Vectores

Cada elemento del vector tiene una posición asociada

Las posiciones inician a partir de cero y llegan hasta tamaño - 1


// un vector de cinco posiciones
int arreglo[] = { 10, 2, 53, 8, 97};

printf("%d\n", arreglo[0]); // por medio de los [] indico cual elemento
printf("%d\n", arreglo[1]); // quiero acceder
printf("%d\n", arreglo[2]);
printf("%d\n", arreglo[3]);
printf("%d\n", arreglo[4]);

Vectores

Para imprimir los elementos de un vector se usa el for

El tamaño del for puede estar dado por una variable


// un vector de cinco posiciones
int arreglo[] = { 10, 2, 53, 8, 97};
int posicion;

for (posicion = 0; posicion < tamanno; posicion++){
    printf("%d ", arreglo[posicion]);
}

Matrices

Son arreglos de dos dimensiones

Permiten guardar elementos como un tablero, con filas y columnas

Los elementos son identificados por dos posiciones


tipo nombre[][]; // los [] indican las dimensiones

Matrices

Se tiene que saber de antemano la cantidad de elementos que contendrá la matriz

Estos son dados por filas y columnas

// se crea una matriz de enteros de tamaño 2 por 3
int matriz[2][3];

// se crea una matriz de enteros indicando cuales
// son los elementos que contiene
int matriz[2][3] = { {10, 2, 53},
                     {11, 3, 54} };

// si se le indica los elementos que contiene
// no es necesario indicar el tamaño
int matriz[][] = { {10, 2, 53},
                   {11, 3, 54} };

Matrices

Cada elemento de la matriz tiene una posición asociada

Las posiciones están dadas por fila y columna

Las posiciones inician a partir de cero y llegan hasta tamaño - 1

int matriz[][] = { {10, 2, 53},
                   {11, 3, 54} };

printf("%d", matriz[0][0]); // primer elemento de la matriz
printf("%d", matriz[1][3]); // ultimo elemento de la matriz

Matrices

Para imprimir los elementos de la matriz se usa dos for anidados

El tamaño de las filas y columnas pueden estar dados por variables

Matrices


int matriz[][] = { {10, 2, 53},
                   {11, 3, 54} };
int posFilas;
int posCols;

for(posFilas = 0; posFilas < filas; posFilas++){
    for(posCols = 0; posCols < columnas; posCols++){
        printf("%d ", matriz[posFilas][posCols]);
    }
    printf("\n");
}

Structs

Los arreglos permiten tener conjuntos de datos del mismo tipo en una misma variable

En caso de ocupar datos de distinto tipo se usan Structs

También permiten crear tipos de datos compuestos


struct nombre{
    tipo dato;
    tipo dato;
    tipo dato;
};

Structs

Por ejemplo, un tipo de dato para coordenadas X, Y llamado coordenada

Esto permite crear variables de tipo struct coordenada

// definicion del struct coordenada
struct coordenada{
    double x = 0.0;
    double y = 0.0;
};

// en este caso, struct coordenada indica el tipo
struct coordenada punto; 

Structs

Para acceder a cada elemento del Struct se hacer por medio del operador . seguido del nombre del elemento


struct coordenada{
    double x = 0.0;
    double y = 0.0;
};

// en este caso, struct coordenada indica el tipo
struct coordenada punto;

punto.x = 1.0;
punto.y = 1.0; 

Structs

Los structs puede ser utilizados como valores de retorno o de entrada en funciones

// definicion del struct coordenada
struct coordenada{
    double x = 0.0;
    double y = 0.0;
};

void imprimirCuadrante(struct coordenada punto){
    //codigo
}

struct coordenada crearPunto(double x, double y){
    struct coordenada nuevoPunto;
    //codigo
    return nuevoPunto;
}

Enums

Permiten definir un conjunto de datos

Estos datos son constantes numéricas

Pueden ser usados como códigos internos


enum nombre{dato1, dato2, dato3, ..., datoN};

Enums

Por defecto, cada dato tiene un valor entero, iniciando a partir de cero

También es posible definir el valor de cada dato


// exitoso = 0; fallo = 1; falloLectura = 2; falloConexion = 3;
enum codigoSalida{exitoso, fallo, falloLectura, falloConexion};

enum codigoSalida{exitoso = 0, fallo = 1, falloLectura = 1, falloConexion = 2};

// variable codigo de tipo enum codigoSalida
enum codigoSalida codigo;

Enums

Los enums solo pueden contener los datos que fueron definidos


// exitoso = 0; fallo = 1; falloLectura = 2; falloConexion = 3;
enum codigoSalida{exitoso, fallo, falloLectura, falloConexion};

// variable codigo de tipo enum codigoSalida
enum codigoSalida codigo;

codigo = exitoso;
codigo = fallo;

Enums

Por ser constantes, pueden ser usadas con switch

// variable codigo de tipo enum codigoSalida
enum codigoSalida codigo = exitoso;

switch(codigo){
    case exitoso:
        //codigo
        break;
    case fallo:
        //codigo
        break;
    case falloLectura:
        //codigo
        break;
}

Made with Slides.com