jueves, 20 de abril de 2023

Lección 2. Operadores

 Los operadores. 

Son los símbolos que permiten realizar operaciones matemáticas y lógicas, como la suma, sustracción, multiplicación, división, comparación y de manejo de bits. Los mas comunes son:

  1. Operadores aritméticos: se utilizan para realizar operaciones matemáticas básicas, como sumar, restar, multiplicar, dividir y obtener el resto de una división. Algunos ejemplos de operadores aritméticos en C son '+' (suma), '-' (resta), '*' (multiplicación), '/' (división) y '%' (módulo).

  2. Operadores de asignación: se utilizan para asignar valores a variables. El operador de asignación más común en C es '='.

  3. Operadores de comparación: se utilizan para comparar dos valores y devolver un resultado booleano (verdadero o falso). Algunos ejemplos de operadores de comparación en C son '==' (igualdad), '!=' (desigualdad), '<' (menor que), '>' (mayor que), '<=' (menor o igual que) y '>=' (mayor o igual que).

  4. Operadores lógicos: se utilizan para combinar expresiones booleanas y devolver un resultado booleano. Algunos ejemplos de operadores lógicos en C son '&&' (AND lógico), '||' (OR lógico) y '!' (NOT lógico).

  5. Operadores bit a bit: se utilizan para realizar operaciones a nivel de bits. Algunos ejemplos de operadores bit a bit en C son '&' (AND bit a bit), '|' (OR bit a bit), '^' (XOR bit a bit) y '~' (NOT bit a bit).

  6. Operadores de desplazamiento: se utilizan para desplazar bits a la izquierda o a la derecha. Algunos ejemplos de operadores de desplazamiento en C son '<<' (desplazamiento a la izquierda) y '>>' (desplazamiento a la derecha).

Además de estos operadores, C también cuenta con operadores de incremento y decremento '++' y '--', operadores condicionales '?:' y operadores de apuntador '*' y '&'.

Estos operadores se utilizan en diferentes situaciones dependiendo de la aplicación que estemos realizando. 

Precedencia de operaciones. 

La operaciones también pueden agruparse y se tiene el mismo concepto de jerarquía que se obtiene en las matemáticas. Hay una precedencia que debe tomarse en cuenta en lenguaje C. 

  1. Paréntesis:  ( )
  2. Postfijos: X++ X--
  3. Prefijos ++X, --X, Signo unario (positivo y negativo): +,-. Negacion y complemento: '!', '~'. Apuntador y dirección: '*', '&' 
  4.  Multiplicación y división: '*',  '/'. Modulo: '%' (la sobra al hacer una división entera) 
  5. Suma y resta: '+', '-'.
  6. Desplazamiento de bits: >>, <<.
  7. Operadores de comparación: <, >, <=, >=.
  8. Relacionales: ==, !=.
  9. AND binario: &.
  10. XOR binario: ^.
  11. OR binario: |.
  12. AND lógico: &&.
  13. OR lógico: ||.  
  14. Condicional ternario: '? :'.
  15. Asignaciones: =, +=, -=.. etc.
  16. Coma: ', ' (separación de parámetros, listas, elementos) 

Todo esto cobra sentido cuando se utilizan estos operadores. En códigos antes mostrados ya estan plasmados los mas comunes para operaciones aritméticas. 



 

En la próxima lección cuando utilicemos las sentencias de control para comenzar a realizar nuestros primeros programas útiles. 



miércoles, 5 de abril de 2023

Lección 01. Variables, entrada y salida estándar.

 Entrada y salida estándar. 

    En una computadora, el concepto clásico que todos tenemos, tiene varios dispositivos de entrada y salida de datos.

Entradas  Salidas
Teclado  Monitor
Micrófono
 Bocinas
Puertos USB
 Ventiladores
Botones de encendido/reinicio
 Puerto VGA
Ratón
 Puerto HDMI
Reloj de tiempo real
 Unidades de almacenamiento
Cámara de vídeo
 LEDs indicadores

    Un teléfono celular también es una computadora, la cual funciona con el propósito de hacer y recibir llamadas, aunque actualmente tienen un sin fin de utilidades más. Comparte con la PC clásica el hecho de que consta de dispositivos de entrada y salida de datos como lo es un touchpad, pantalla, micrófono, auriculares, bluetooth, wifi, etc.

    En lenguaje C es posible utilizar todos los dispositivos de entrada y salida de una computadora. Aunque esto puede ser tanto muy complejo como muy sencillo dependiendo de la aplicación que se esté desarrollando al momento.

    Para fines educativos, en este espacio se utilizará solamente la terminal o consola para hacer la ejecución de nuestros programas en Lenguaje C, y más adelante se utilizarán los puertos de entrada y salida de microcontroladores y/o microprocesadores a nuestra disposición. 

    En C estándar la biblioteca "studio.h" contiene las funciones básicas para el uso de los puertos de entrada salida, y en nuestro caso hemos utilizado ya una de ellas, que es "printf". Esta función sirve para imprimir mensajes en la pantalla. Su uso se irá extendiendo a base de ejercicios.

Variables

Tipos de datos

    Vamos a partir que en este punto, que tienes conocimientos de matemáticas básicos sobre todo algebra, pues en al final las computadoras solamente pueden reconocer números por medio de almacenamiento de energía eléctrica que se organizan en cadenas de 0s y 1s.  
    Una forma sencilla de comprender una variable es la x de una ecuación de primer grado solucionada, es decir un espacio que puede contener un valor. 
    En lenguaje C, tenemos unas cuantas formas de reconocer datos para considerarlos en diferentes tipos. Esto no sera tan fácil de digerir al inicio supongo, pero con la práctica se verá más fácil. Aquí usaremos el precepto de: "La mejor forma de aprender a programar es programando". Los elementales son los siguientes:
  • Enteros, tal como en las matemáticas son los números que no tienen parte fraccionaria, o punto decimal. Para declararlos existen palabras reservadas especificas:
    • int: Entero con signo de 2 bytes (16 bits) y puede tener valores entre -32768 a 32767. El númeto de datos que se pueden representar con 2¹⁶ en representacion binaria. Si no entendiste esta parte, con algunos ejercicios más adelante se intentará hacerlo más claro. 
    • unsigned int: Entero sin signo es decir, sus valores van de  0 a 65535.
    • long int: El modificador long, dobla el tamaño  "base" de los tipos de dato. para los enteros quedaria en 8 bytes, es decir  
  • Caracteres:
    • char: Es un tipo de datos de 1 byte (8 bits) que codifica el codigo acci (una googleada no esta mal para ver de que se trata).  
  • Cadena de caracteres:
    • No es un tipo de dato como tal en Lenguaje C, se maneja como un array de tipo char, mas adelante se tomara en cuenta de mejor manera.
  • Punto flotante:  Es el tipo de datos que permite utilizar números decimales es decir que tienen parte entera y parte fraccionaria. 
    • float: este tipo de dato por lo general es de 4bytes de precisión para representar numero decimales. sus valores van de 3.4E-38 a 3.4E+38
    • double: este tipo de dato esta compuesto de 8 bytes 1.7E-308 a 1.7E+308.
 Probablemente esto en un principio no sea tan importante, pero ya en el momento de trabajar es algo que debe tomarse muy en cuenta. Vale la pena empezar a familiarizar los conceptos.

Tipos de Variables
    Las variables se pueden organizar en dos grandes tipos. 

Globales

    Este tipo de variables se puede utilizar en cualquier momento dado que se declaran de forma que todo el código tenga la capacidad de acceder a ellas. 

Locales

    Este tipo de variable se define en una parte específica del código y es invisible o inaccesible para el resto de la aplicación. 

En este punto se que te estarás preguntando: ¿Que chingados?  sobre todo si es tu primera vez tomando estos conceptos. El autor esperaría que no, que ya estas ampliando tu conocimiento. En todo caso, se peude ver mejor en el repositorio de Github donde se incluye un ejemplo de uso de entrada y salida de datos que se guardan en variables de distintos tipos. 

Ejemplo práctico

    El archivo printScanVariables.c contiene el codigo para interactuar con la pantalla y el teclado con un codigo muestra, es muy básico pero creo que se comprendera facilmente. En el se puede ver el uso de la función scanf, printf y como pueden distintas variables tener alcances globales y locales.

    Las variables se declaran con un tipo de dato y el valor iniciar (de preferencia) debido a que si esto no se hace puede en algun punto haber comportamientos extraños producto de valores no esperados.

Como se puede ver se sigue la estructura de un programa estandar, al inicio los headers, la sección de macros, variables globales, prototipos de funcion, funcion principal y funciones vamos a llamarles secundarias. 

Dentro del archivo se puede encontrar tambien la forma de imprimir distintos tipos de datos, como lo son caracteres, enteros y números flotantes. utilizando el formato de la función printf (que de hecho deriva del nombre print with format). La función printf se utiliza en su forma más simple con la estructura: 

printf ("Cadena de caracteres", parametros de distinto tipo de dato).

Los modificadores de formato mas utilizados son los siguintes:
  • %d: para imprimir un número entero con signo.
  • %u: para imprimir un número entero sin signo.
  • %f: para imprimir un número en coma flotante.
  • %c: para imprimir un carácter.
  • %s: para imprimir una cadena de caracteres.
  • %p: para imprimir un puntero.
  • %x o %X: para imprimir un número en formato hexadecimal.

A grandes rasgos se utilizarán comas para separar los parametros di la funcion, que pueden ser los tipos de datos vistos anteriormente (enteros, caracteres, flotantes, etcétera).






















Para el caso de la lectura de datos desde el teclado, se utiliza la funcion scanf() la cual funciona  tomando datos de teclado y guardandolos en las variables. Al igual que printf funciona con la misma estructura utilizando caracteres de formato. 






En el código ejemplo se utilizan funciones que serán explicadas más adelante. Recomiendo descargar el código y en base a el crear una funcion main que permita escribir mensajes personalizados,  leer frases y leer variables para hacer algunas otras operaciones. Por ejemplo de desigualdades. 

Para el caso de la lectura de datos, se realiza por medio de la funcion scanf().

La funcion scanf(), utiliza los mismos operadores que scanf, no daremos muchos detalles debido a que este curso esta pensado en darle mas importancia a los sistemas embebidos. Asi que la utilizaremos solamente para aprender un poco la lógica de programación. 















Yocto Project II. Primera configuración de sistema y compilación.

 Se dice que la mejor manera de aprender a programar es programando, el mismo principio se sigue respetando para cuestiones de sistemas oper...