(00) - Cursito de Matemática discretas, para programadores

hola :V

Planteamiento.
Esta área puede llegar a ser abrumadora dependiendo de su enfoque, estoy convencido que si se enseña de manera técnica y orientada a la programación, puede llegar a ser de su agrado.

Cuando veamos un tema nuevo aplicaremos este a un lenguaje (con una sintaxis que ya conozcan), Básicamente ver los conceptos teóricos de forma superficial para luego adentrarnos a una aplicación practica en código…
(Sobre lo del lenguaje, creo que usar C99/C11 es buena idea, es lo mas clásico y formal xd.
Aunque si quieren podemos cambiar de lenguaje a python o yo que se a haskell)

Introducción.
Como saben un programa trabaja con datos que pueden representarse, almacenarse y procesarse.
Ya sean caracteres, números enteros, registros, nodos de una red, estados de una aplicación o instrucciones. Ahora bien esta rama de las matemáticas ofrece modos para describir estos objetos y reglas para razonar con precisión sobre ellos. Tambien cabe aclarar que este capitulo solo es un planteamiento, próximamente profundizaremos adecuadamente en cada concepto.

¿Qué estudia las matemática discreta?
Las matemáticas discretas en si son varias áreas que comparten el estudio de estructuras separadas. Cada una responde preguntas muy habituales a ustedes programares, por mencionar algunas podrían ser las siguientes.

Lógica… ¿La conclusión se deduce de las condiciones?… Verificar precondiciones e invariantes
Conjuntos… ¿Cómo se vinculan los datos? …. Modelar usuarios, permisos y claves

Y como olvidarse de la Álgebra de Boole
Álgebra de Boole… ¿Cómo combinar valores verdadero y falso? .. Condiciones, TRUE y FALSE.

Objetos discretos: elementos separados
Un objeto es discreto cuando sus valores aparecen como unidades separadas.
Entre dos valores consecutivos puede no existir otro valor válido dentro del modelo. Por ejemplo, un arreglo de JavaScript tiene posiciones numeradas: después del índice 4 viene el índice 5, osea nunca creamos un indice 4.5… Una forma resumida de ver esto es que continuo y discreto es si tiene decimales o no, el compilador va leyendo los datos

Ejemplos de objetos discretos:

Los caracteres de un texto: A, B, C,

Los números naturales: 0, 1, 2, 3, …

Los estados de un semáforo o de una interfaz

La computadora es una máquina discreta

En el nivel lógico, una computadora procesa símbolos y estados finitos. La memoria se organiza en posiciones, los datos se codifican mediante bits y las instrucciones se ejecutan como una secuencia. Aunque el hardware usa fenómenos físicos continuos, el diseño de los programas se expresa con abstracciones discretas.

-Bit: 0 o 1

-Byte: secuencia de 8 bits
-Booleano: true o false
-Índice de un arreglo: 0, 1, 2, …
-Estado de un programa: una configuración definida de variables y control

Esta observación explica por qué los conceptos discretos son tan cercanos a la programación.
Un if toma una decisión booleana!
Y un for recorre una sucesión de índices!
Una función recursiva se analiza mediante una recurrencia!
Un compilador reconoce cadenas mediante reglas formales, es decir si sabes programar ya tienes la mitad de trabajo hecho.

Algoritmo clásico
Como saben un algoritmo es un procedimiento formado por pasos bien definidos que transforma una entrada en una salida, una simple receta. Para que sea útil debe indicar qué hacer en cada situación relevante y debe terminar cuando la tarea lo requiera.

Por ejemplo, encontrar el mayor número de un arreglo parece una tarea simple, pero nos ayuda a entender una idea esencial… Que es recorrer elementos discretos manteniendo una propiedad verdadera durante todo el proceso.
(Por cierto ya me di cuenta que esta bien incomodo escribir en el hilo, no me funciona la indentación)

#include <stdio.h>
#include <stdlib.h>

int buscarMaximo(const int numeros, int longitud) {
    if (longitud <= 0) {
       fprintf(stderr, “Error: Se necesita al menos un número\n”);
       exit(EXIT_FAILURE);
    }

    int maximo = numeros[0];

    for (int i = 1; i < longitud; i++) {
    if (numeros[i] > maximo) {
        maximo = numeros[i];
    }
}

return maximo;

}

int main(void) {
     int numeros = {8, 3, 12, 5, 9};
     int longitud = sizeof(numeros) / sizeof(numeros[0]);

     int resultado = buscarMaximo(numeros, longitud);
     printf("%d\n", resultado); // 12
 
     return 0;

}

La idea del script es la siguiente.. Después de examinar los elementos desde la posición 0 hasta la posición i, la variable maximo guarda el mayor de esos elementos.

Lógica booleana y decisiones
Los programas (o Claude ai) toman decisiones con expresiones que solo pueden ser verdaderas o falsas. La lógica booleana estudia cómo se combinan estas condiciones mediante operadores como AND, OR y NOT.


#include <stdio.h>
#include <stdbool.h> // Permite usar ‘bool’, ‘true’ y ‘false’ (estándar C99 en adelante)

int main(void) {
// Las condiciones evalúan a verdadero (true / 1) o falso (false / 0)
int edad = 20;
bool tieneLicencia = true;

// Operador AND (&&): Ambas condiciones deben ser verdaderas
if (edad >= 18 && tieneLicencia) {
    printf("Puede conducir.\n");
}

// Operador OR (||): Al menos una condición debe ser verdadera
bool tienePermisoEspecial = false;
if (tieneLicencia || tienePermisoEspecial) {
    printf("Tiene autorización para circular.\n");
}

// Operador NOT (!): Invierte el valor de verdad
bool esMenorDeEdad = !(edad >= 18);
if (!esMenorDeEdad) {
    printf("Es mayor de edad.\n");
}

return 0;

}

Conclusión
Las matemáticas discretas son el lenguaje natural y los lenguajes de programacion son como adaptaciones. Al operar con elementos y estados finitos, dominar sus conceptos teóricos y llevarlos al código permite entender con precisión cómo una computadora procesa dato.. Osea ser como el terry devis.

6 Me gusta

Goty, llore con cada palabra escrita en este mini curso :folded_hands::sob:

1 me gusta

No llores princesa, no agaches la cabeza por que se cae la corona..
Solo es un “prefacio“ si me gustaria escribir aqui unos 10 caps aprox, pero estoy pensando una forma de hacerlo divertido, por que si no si que flojera.

2 Me gusta

Excelente. Muchas gracias por el aporte.

1 me gusta