Programación en C: Manejo de Cadenas, Algoritmos de Ordenamiento y Vectores de Estructuras

Informática y Telecomunicaciones5,74 KB

1. Funciones de Conversión de Cadenas: Mayúsculas y Minúsculas

Implementación de funciones para convertir caracteres alfabéticos entre mayúsculas y minúsculas manipulando directamente sus valores en la tabla ASCII.

Conversión a Mayúsculas

char* mayus(char *strin) {
    int i = 0;
    while (strin[i] != '\0') {
        if (strin[i] >= 97 && strin[i] <= 122) {
            strin[i] -= 32;
        }
        i++;
    }
    return strin;
}

Conversión a Minúsculas

char* minus(char *strin) {
    int i = 0;
    while (strin[i] != '\0') {
        if (strin[i] >= 65 && strin[i] <= 90) {
            strin[i] += 32;
        }
        i++;
    }
    return strin;
}

2. Control de Flujo: Confirmación de Salida

Ejemplo de ciclo interactivo para validar la salida del usuario mediante una condición lógica:

char sal;
int band = 0, i = 0;

do {
    printf("¿Desea salir? (Y/N): ");
    scanf(" %c", &sal);
    if (sal == 'Y' || sal == 'y') {
        band = 1;
    } else {
        i++;
    }
} while (band != 1);

3. Gestión de Vectores de Estructuras

Primitivas básicas para la creación, carga, búsqueda y cálculo de estadísticas sobre una colección de estructuras de tipo datos.

Definición de la Estructura y Carga de Datos

struct datos {
    int dni;
    int edad;
    char apellido[20];
};

struct datos * carga(struct datos *estructura, int n) {
    int i;
    for (i = 0; i < n; i++) {
        printf("Ingrese apellido: ");
        scanf("%s", estructura[i].apellido);
        printf("Ingrese edad: ");
        scanf("%d", &estructura[i].edad);
        printf("Ingrese DNI: ");
        scanf("%d", &estructura[i].dni);
    }
    return estructura;
}

Búsqueda Secuencial por DNI

void buscar(int n, struct datos *estructura) {
    int dnibusq;
    int i, noexiste = 1;
    printf("Ingrese DNI a buscar: ");
    scanf("%d", &dnibusq);
    for (i = 0; i < n; i++) {
        if (estructura[i].dni == dnibusq) {
            printf("El DNI es: %d\n", estructura[i].dni);
            noexiste = 0;
            break;
        }
    }
    if (noexiste == 1) {
        printf("Ese DNI no existe.\n");
    }
}

Cálculo del Promedio de Edad

int calculo(int n, struct datos *estructura) {
    int i;
    int promedio = 0;
    int edadtot = 0;
    for (i = 0; i < n; i++) {
        edadtot = edadtot + estructura[i].edad;
    }
    if (n > 0) {
        promedio = edadtot / n;
    }
    return promedio;
}

4. Ordenamiento y Modificación en Vectores de Estructuras

Operaciones sobre un vector de estructuras con nombres y edades: carga, ordenamiento alfabético mediante el método de burbuja, modificación y consulta.

Estructura y Algoritmo de Ordenamiento Alfabético

struct datos {
    char nombre[80];
    int edad;
};

struct datos vector[30]; // Declaración global

void ordenarYMostrar() {
    int i, j, k;
    struct datos aux;
    for (i = 0; i < 5; i++) {
        printf("Ingrese un nombre: ");
        scanf("%s", vector[i].nombre);
        printf("Ingrese la edad: ");
        scanf("%d", &vector[i].edad);
    }
    for (j = 0; j < 4; j++) {
        for (k = j + 1; k < 5; k++) {
            if (strcmp(vector[j].nombre, vector[k].nombre) > 0) {
                aux = vector[j];
                vector[j] = vector[k];
                vector[k] = aux;
            }
        }
    }
    for (i = 0; i < 5; i++) {
        printf("%s - %d\n", vector[i].nombre, vector[i].edad);
    }
    getchar();
}

Función Modificar

void modificar() {
    char nombremod[20];
    int i;
    printf("Ingrese nombre a modificar: ");
    scanf("%s", nombremod);
    for (i = 0; i < 30; i++) {
        if (strcmp(vector[i].nombre, nombremod) == 0) {
            printf("Ingrese nombre nuevo: ");
            scanf("%s", vector[i].nombre);
            break;
        }
    }
}

Función Buscar por Nombre

void buscarNombre() {
    char nombremod[20];
    int i;
    printf("Ingrese nombre a buscar: ");
    scanf("%s", nombremod);
    for (i = 0; i < 30; i++) {
        if (strcmp(vector[i].nombre, nombremod) == 0) {
            printf("El nombre es: %s\n", vector[i].nombre);
            break;
        }
    }
}

5. Extracción y Separación de Cadenas Delimitadas

Procedimiento para leer una cadena combinada en formato nombre;edad y separar los componentes en vectores independientes:

char nombre[20];
char edad[20];
char ingreso[40];
int a = 0, b = 0;

printf("Ingrese los datos en formato nombre;edad: ");
scanf("%s", ingreso);

while (ingreso[a] != ';' && ingreso[a] != '\0') {
    nombre[a] = ingreso[a];
    a++;
}
nombre[a] = '\0';

if (ingreso[a] == ';') {
    a++;
    while (ingreso[a] != '\0') {
        edad[b] = ingreso[a];
        a++;
        b++;
    }
    edad[b] = '\0';
}

6. Ordenamiento de Caracteres en un Vector

Función para ordenar alfabéticamente los caracteres de una cadena. Retorna 1 si el vector contenía elementos o 0 en caso de encontrarse vacío:

int ingresar(char *vector) {
    char temp;
    int i = 0, a = 0, cont = 0, asd = 0;
    while (vector[i] != '\0') {
        i++;
        cont++;
    }
    for (i = 0; i < cont - 1; i++) {
        for (a = i + 1; a < cont; a++) {
            if (vector[i] > vector[a]) {
                temp = vector[i];
                vector[i] = vector[a];
                vector[a] = temp;
            }
        }
    }
    if (cont != 0) {
        asd = 1;
    }
    return asd;
}

Descargar

PDF Word HTML