Estimados,
A continuación encontrarán el repaso del taller 2. La grabación del taller se encuentra en la sección: Clases Online. Se adjunta código fuente de las soluciones de los ejercicios que se realizaron en clase.
El siguiente taller (Taller 3) se dictará el Jueves 24 de Marzo de 8 a 10 am. El link de zoom será el mismo para todos los talleres, lo pueden encontrar la sección Novedades.
Taller2: Conceptos básicos: tipos, control de flujo, operadores.
Requisitos:
- Mandatorio ver la grabación Teórico-Clase 2 (Sección: Clases Online)
- (Recomendado) Capítulos 2 y 3 del Libro.
- Relevamiento sobre instalación de la maquina virtual/ Entornos Linux.
Esquema:
1. Repasamos las siguientes soluciones provistas en el taller 1 ahondando en conceptos relacionados a tipos, control de flujo, operadores.
- Ejercicio1_mod_a.c
- Ejercicio1_mod_b.c
- Ejercicio5_a.c (Repasamos args y control de flujo: while)
- Ejercicio5_a_for.c (Solución del ejercicio con un bucle for, opcional)
2. Realizamos el ejercicio 2 del práctico 1 (Simulador de dados)
- simulador_dados.c
Con el fin de obtener números pseudo-aleatorios utilizamos la función rand() (The C Programming Language Kernighan Ritchie - Apéndice B5) cada vez que esta función es llamada devuelve un número entero entre 0 y RAND_MAX. Para obtener un número entre 1 y 6 es útil el uso de ciertos operadores cómo % y + (repasar solución).
EL inconveniente es que si ejecutamos varias veces el programa, los números pseudo-aleatorios se repiten. Esto se debe a que la función rand() obtiene estos números partiendo de una condición inicial denominada "semilla" o seed, en inglés.
Ahora bien, para evitar este problema utilizamos la función srand(). A dicha función se le debe pasar un parámetro de entrada que se usará como semilla. Por lo tanto el nuevo problema es encontrar la manera de generar un número distinto cada vez que ejecutamos nuestro programa.
Hay dos valores comúnmente utilizados con este propósito:
- srand (time(NULL)); utilizar la fecha/hora del sistema.
- srand (getpid()); Obtener el identificador del proceso.
3. Repasamos: tipos, control de flujo y operadores:
Tipos (The C Programming Language Kernighan & Ritchie - Chapter 2 - Types, Operators and Expressions):
Hay sólo algunos tipos de datos básicos en C:
- char: un solo byte, capaz de contener un carácter del conjunto de caracteres local.
- int: un entero, normalmente del tamaño natural de los enteros en la máquina en la que se ejecuta.
- float: punto flotante de precisión normal.
- double: punto flotante de doble precisión.
Además, existen algunos calificadores que se aplican a estos tipos básicos, short y long se aplican a enteros:
- short int sh;
- long int counter;
Por otro lado el calificador signed o unsigned puede aplicarse a char o a cualquier entero. Los números unsigned son siempre positivos o cero y obedecen las leyes de la aritmética módulo 2^n, donde n es el número de bits en el tipo. Así, por ejemplo, si los char son de 8 bits, las variables unsigned char tienen valores «entre 0 y 255, en tanto que las variables signed char tienen valores entre -128 y 127 (en una maquina de complemento a dos).
Operadores:
- Repasamos operadores de manipulación de bits:
C provee seis operadores para manipulación de bits, éstos deben aplicarse a variables de tipo char, short, int y long, sean con signo (signed) o sin signo (unsigned):
& bitwise AND
| bitwise inclusive OR
^ bitwise exclusive OR
<< leftshift
>> right shift
~ one's complement (unary)
Precedencia y orden de evaluación (The C Programming Language Kernighan & Ritchie - 2.12 Precedence and Order of Evaluation). Por más tipos de operadores, referirse a The C Programming Language Kernighan & Ritchie - Chapter 2.
Control de flujo (The C Programming Language Kernighan & Ritchie - Chapter 3 Control Flow):
- Condicionales: if-else-if, ? y switch.
- Bucles: for, while, do {} while ().
- Salto: goto, break.
4. Repasamos el sistema binario, decimal, hexadecimal. Se hicieron conversiones en calculadora en modo programador Hex, Dec, Bin.
5. Se pide a los estudiantes que hagan el ejercicio 6: Operadores de bit, parte a y parte b del práctico 2 (Se adjunta solución p2_ej6_a.c, p2_ej6_b.c, para la parte b se plantea una solución alternativa al problema propuesto por la letra, tomando posición de bit desde 0 a 31, en vez de 1 a 32).
Links de interés:
- https://es.wikipedia.org/wiki/Anexo:Operadores_de_C_y_C%2B%2B
Requisitos para el siguiente Taller (Taller 3, Programación modularizada, Makefile, generación biblioteca.a)
- Mandatorio ver la grabación Teórico-Clase 3 (Sección: Clases Online)
- (Recomendado) Leer capítulo 4 del Libro del curso (K & R).
- En caso de tener instalado un sistema operativo que no sea linux (Windows, MAC) instalar virtualBOx y levantar la maquina virtual concedida por los docentes. En caso de dudas realizar la consulta en la sección de Consultas en EVA.