Diferència entre revisions de la pàgina «DAW 2020-2021»
Línia 12: | Línia 12: | ||
= Algunes classes = | = Algunes classes = | ||
+ | == 20210406 (2h presencial) == | ||
+ | Seguim amb els robots | ||
+ | |||
== 20210325 (1h presencial) == | == 20210325 (1h presencial) == | ||
Seguim amb els robots | Seguim amb els robots |
Revisió del 17:22, 6 abr 2021
Contingut
- 1 Horari a partir del 18 de gener
- 2 Teleconferència del curs 2020-2021
- 3 Algunes classes
- 3.1 20210406 (2h presencial)
- 3.2 20210325 (1h presencial)
- 3.3 20210324 (1h síncrona)
- 3.4 20210318 (1h presencial)
- 3.5 20210316 (2h presencial)
- 3.6 20210309 (2h presencial)
- 3.7 20210304 (3h presencial)
- 3.8 20210303 (1h presencial)
- 3.9 20210302 (2h síncrona)
- 3.10 20210225 (1h síncrona)
- 3.11 20210224 (1h síncrona)
- 3.12 20210223 (2h presencial)
- 3.13 20210218 (1h presencial)
- 3.14 20210217 (1h presencial)
- 3.15 20210216 (2h síncrona)
- 3.16 20210211 (1h síncrona)
- 3.17 20210210 (1h síncrona)
- 3.18 20210209 (2h presencial)
- 3.19 20210204 (1h síncrona)
- 3.20 20210203 (1h síncrona)
- 3.21 20210202 (2h síncrona)
- 3.22 20210128 (1h síncrona per confinament)
- 3.23 20210127 (1h síncrona per confinament)
- 3.24 20210126 (2h síncrona per confinament)
- 3.25 20210120 (1h presencial) Robot
- 3.26 20210119 (2h síncrona)
- 3.27 20210114 (2h presencial)
- 3.28 20210111 (1h síncrona)
- 3.29 20201221 (1h síncrona)
- 3.30 20201217 (2h presencial)
- 3.31 20201214 (1h síncrona)
- 3.32 20201210 (2h presencial)
- 3.33 20201203 (2h presencial)
- 3.34 20201130 (1h síncrona)
- 3.35 20201126 (2h, presencial)
- 3.36 20201123 (1h síncrona)
- 3.37 20201120 (1h síncrona)
- 3.38 20201119 (2h presencials)
- 3.39 20201116 (1h en línia)
- 3.40 20201112 (2h presencials)
- 3.41 20201109 (1h en línia)
- 3.42 20201105 (1h)
- 3.43 20201104 (1h)
- 3.44 20201103 (2h)
- 3.45 20201029 (1h)
- 3.46 20201028 (1h)
- 3.47 20201027 (2h)
- 3.48 20201022 (1h)
- 3.49 20201021 (1h)
- 3.50 20201020 (2h)
- 3.51 20201015 (1h)
- 3.52 20201014 (1h)
- 3.53 20201013 (2h)
- 3.54 20201008 (1h)
- 3.55 20201007 (1h)
- 3.56 20201006 (2h)
- 3.57 20201001 (1h)
- 3.58 20200930 (1h)
- 3.59 20200929 (2h)
- 4 Repositori de codis fet a classe durant el curs
Horari a partir del 18 de gener
Teleconferència del curs 2020-2021
Adreça de la teleconferència de la part de reforç (També per a hores exclusives amb en Carles Olivé)
Carpetes compartides 1r de DAW. Curs 2020-2021
Algunes classes
20210406 (2h presencial)
Seguim amb els robots
20210325 (1h presencial)
Seguim amb els robots
20210324 (1h síncrona)
20210318 (1h presencial)
Seguim amb els robots
Prova del botó d'inici del robot
Com canviar d'estat quan passen més de 5 segons:
#define CINC_SEGONS 5000 ... int nPensaEstat(int nEstatActual, bool bL, bool bR) { static unsigned long ulStartMillis = millis(); bL = !bL; bR = !bR; switch (nEstatActual) { case STATE_STOP: ... case STATE_FORWARD: if ((bL || bR)) { ulStartMillis = millis(); return STATE_BORDER; } if (millis() - ulStartMillis > CINC_SEGONS) { ulStartMillis = millis(); return STATE_BUSCAR; // Canvi d'estat per passar-se de 5 segons al mateix estat } break; case STATE_BORDER: ... case STATE_SEARCH: ... case STATE_FAST_FORWARD: ... } return nEstatActual; }
20210316 (2h presencial)
Seguim amb els robots
Exemple d'ús de l'estat de cerca
20210309 (2h presencial)
Seguim amb els robots
20210304 (3h presencial)
1a hora de robots
A 2a i 3a hora hi ha examen d'avaluació ordinària.
20210303 (1h presencial)
Seguim amb els robots
20210302 (2h síncrona)
Proveu aquest codi en Python. Executeu-lo i verifiqueu que ho enteneu. En cas contrari, pregunteu:
for n in range (25,9,-5): print(n)
Comentem els codis dels estats del robot
20210225 (1h síncrona)
20210224 (1h síncrona)
20210223 (2h presencial)
Seguim amb els robots
20210218 (1h presencial)
Seguim amb el control del robot. Seguiment de línies i cerca d'una capsa al tatami.
20210217 (1h presencial)
Seguim amb el control del robot. Seguiment de línies i cerca d'una capsa al tatami.
20210216 (2h síncrona)
Depuració
Explicació de la depuració amb gdb
20210211 (1h síncrona)
20210210 (1h síncrona)
Compilació d'un projecte amb múltiples codis font
La compilació de múltiples fitxers .cpp es fa d'aquesta manera:
(La compilació requereix dels arxius .c o .cpp i no pas els .h)
gcc copiaCadena.c funcions.c -o copiaCadena
Es compilen tots els arxius .c a la vegada
Exercici
A partir de m05e7_04.c feu un projecte per a que m05e7.c pugui fer els includes: aleatorietat.h, visualitzacio.h i gestioVectors.h
Criteri de selecció de funcions:
#include "aleatorietat.h" // #defines i vLlavorAleatorietat(), nNumAleat(int,int) i vGeneraNumerosAleatoris(double, double, int, double*) #include "visualitzacio.h" // #defines i void vVisualitzaVector(double *) #include "gestioVectors.h" // #defines i lfMaximVector(double *,int ) i lfMaximVector2(double *,int )
Per tant, haureu d'escriure el codi dels arxius aleatorietat.c, visualitzacio.c i gestioVectors.c
Els defines els heu de posar als arxius .h que creieu més convenient. Ho heu de compilar i ha de seguir funcionant.
20210209 (2h presencial)
Proposta de control dels motors per infraroigs
Al final de l'exemple irRobCtl:
vMotion( (bBL)?127:0 , (bBR)?127:0 );
20210204 (1h síncrona)
Deures pel proper dia no presencial
Adreça per la classe d'en Carles a darrera hora d'avui
Adreça per la classe d'en Carles a darrera hora
20210203 (1h síncrona)
- Desenvolupeu m6e03_09.c a partir de m6e03_08.c que faci que qualsevol frase que tingui majúscules sigui passada a minúscules. De tal manera que si introduïm TuruRut o tururut digui en ambdòs casos que és palíndrom.
jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210202$ gcc m6e03_08.c -o m jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210202$ ./m Paraula candidata a palíndrom: TuruRuT Caràcter esquerra: T - Caràcter dreta: T Caràcter esquerra: u - Caràcter dreta: u Caràcter esquerra: r - Caràcter dreta: R "TuruRuT" no és palíndrom jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210202$ ./m Paraula candidata a palíndrom: tururut Caràcter esquerra: t - Caràcter dreta: t Caràcter esquerra: u - Caràcter dreta: u Caràcter esquerra: r - Caràcter dreta: r "tururut" és palíndrom
Pista:
('b' - 'a') + 'A' (98 - 97) + 65 --> 66 --> 'B'
- Desenvolupeu m6e03_10.c a partir de m6e03_09.c que tregui els espais.
- Desenvolupeu m6e03_11.c a partir de m6e03_10.c que tregui els espais, comes, punts, ...
20210202 (2h síncrona)
20210128 (1h síncrona per confinament)
Porteu pensat el segon exercici del dia anterior (implementació en Python de la solució proposada en C).
20210127 (1h síncrona per confinament)
Exercicis
- Feu un programa que generi set números aleatoris entre -10.00 i 10.00. S'han de posar a les set primeres posicions de vector lfVector[99]. Aprofiteu l'exercici m05e7_03.c com a base per a resoldre-ho. Podeu generar la funció void vGeneraNumerosAleatoris(double lfMin, double lfMax, int nQuants, double* lfV). Una crida possible des de la funció main() seria vGeneraNumerosAleatoris(-10.00,10.00,7,lfVector)
Exemple d'execució:
jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210127$ ./m vVisualitzaVector: lfVector: { -0.01 -7.42 7.52 2.08 5.59 8.68 -9.30 } 1) El valor màxim del vector és 8.68 2) El valor màxim del vector és 8.68
- El mateix que l'anterior en Python. La funció de generació haurà de ser diferent. Feu una proposta de codi.
20210126 (2h síncrona per confinament)
Exercicis
- Feu un programa en C i en Python, aprofitant el que avui hem vist a classe, i modifiqueu els elements del vector (llista a Python) incrementant el seu valor en un 21% (com l'IVA).
Ha de sortir així:
jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210126/ex$ gcc m05e7_03_mesIva.c -o m jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210126/ex$ ./m --------------- vVisualitzaVector: lfVector: { 2.34 4.56 -3.45 10.00 9.87 1.32 -1.27 } 1) El valor màxim del vector és 10.00 2) El valor màxim del vector és 10.00 --------------- vVisualitzaVector: lfVector: { 2.83 5.52 -4.17 12.10 11.94 1.60 -1.54 } 3) El valor màxim del vector és 12.10
Proposta de funció principal main():
int main(){ double lfVector[99] = {2.34,4.56,-3.45,10,9.87,1.32,-1.27}; // 7 elements instanciats vVisualitzaVector(lfVector); // vVisualitzaVector(&lfVector[0]); printf("1) El valor màxim del vector és %.2lf\n",lfMaximVector(lfVector,MIDA_INICIAL)); printf("2) El valor màxim del vector és %.2lf\n",lfMaximVector2(lfVector,MIDA_INICIAL)); vAfegeixIva(lfVector,MIDA_INICIAL,21.0); vVisualitzaVector(lfVector); // vVisualitzaVector(&lfVector[0]); printf("3) El valor màxim del vector és %.2lf\n",lfMaximVector(lfVector,MIDA_INICIAL)); return 0; }
I a Python:
jordi@ecat-XPS13:~/Documents/escolaClot/curs2020-2021/m03/daw/20210126/ex$ python3 m05e7_03_mesIVA.py vVector: [ 2.34 4.56 -3.45 10.00 9.87 1.32 -1.27 ] El valor màxim del vector és 10.00 vVector: [ 2.83 5.52 -4.17 12.10 11.94 1.60 -1.54 ] El valor màxim del vector és 12.10
Proposta de funció principal a Python:
lfVector = [2.34,4.56,-3.45,10,9.87,1.32,-1.27] vVisualitzaVector(lfVector) print("El valor màxim del vector és %.2lf"%lfMaximVector(lfVector)) lfVector = vAfegeixIva(lfVector,21.0) vVisualitzaVector(lfVector) print("El valor màxim del vector és %.2lf"%lfMaximVector(lfVector))
20210120 (1h presencial) Robot
Biblioteques per al robot versió 5
20210119 (2h síncrona)
Seguim amb apuntadors. Darrer dia que vam parlar d'apuntadors.
Explicació de la funció d'intercanvi (swap)
20210114 (2h presencial)
Seguim amb Arduino
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 1a part
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 2a part
20210111 (1h síncrona)
Comencem apuntadors.
20201221 (1h síncrona)
Dubtes de recursivitat i temes anteriors.
- Explicació de Les torres de Hanoi
Vídeo: Entendiendo la recursividad con las Torres de Hanoi
Vídeo: La terrible leyenda de las Torres de Hanói
- A partir del codi Les torres de Hanoi, feu un comptador de moviments de les torres de Hanoi. Excepcionalment podeu emprar variables globals.
- Implementeu en Python les torres de Hanoi
20201217 (2h presencial)
Alguns codis d'avui. Flanc implementat en Snap4Arduino
Porteu fet de casa l'exercici de Fibonacci traduït de Python a C.
Seguim amb Arduino
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 1a part
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 2a part
20201214 (1h síncrona)
La recursivitat
Exemples de recursivitat
Les torres de Hanoi (Feu un comptador de moviments)
Exercicis de recursivitat
20201210 (2h presencial)
20201203 (2h presencial)
- Feu la travessa en Python.
- Feu un menú en C que cridi els tres programes de la travessa en C i els tres programes en Python.
- Feu un menú en Python que cridi els tres programes de la travessa en C i els tres programes en Python.
20201130 (1h síncrona)
Porteu fet i acabat l'exercici 5 del mòdul 4 del d97 en C i en Python.
Porteu pensat com fer l'exercici de la travessa (quiniela).
20201126 (2h, presencial)
Heu de portar acabat en Python les solucions en C del dia anterior. Resposta proposada per n'Andrea Sánchez
Exercici 11 del mòdul 4 del d97
20201123 (1h síncrona)
20201120 (1h síncrona)
Mirar possibles solucions a l'exercici 3 del mòdul 3 (màxim comú divisor de tres nombres) i l'exercici 3 del mòdul 4 del d97 (joc d'endevinar un número entre l'1 i el 1000)
20201119 (2h presencials)
Estructura condicional switch-case (existeix en C, no en Python)
Estructura repetitiva do-while (existeix en C, no en Python)
Menú amb do-while i switch-case
Menú amb do-while i switch-case
Recursivitat i pseudoaleatorietat
Resum teòric de recursivitat i pseudoaleatorietat en C
20201116 (1h en línia)
Avui rebreu per correu electrònic la tasca a desenvolupar a l'hora de classe d'avui.
20201112 (2h presencials)
Exercici 1 de funcions
Desenvolupeu un programa en C i un altre en Python que preguntin el radi d'una roda de bicicleta i retorni la longitud del pneumàtic de la bicicleta (Pista: 2 pi R).
Exercici 2 de funcions
Desenvolupeu un programa en C i un altre en Python que preguntin els dos catets d'un triangle i calculi llur superfície.
Feu la funció lfSuperficie que sigui de tipus double en C i float en Python. El prototipus de la funció en C serà double lfSuperficie(double lfCatet1, double lfCatet2) i en Python def lfSuperficie(lfCatet1,lfCatet2)
Exercici 3 de funcions
Desenvolupeu un programa en C i un altre en Python que preguntin els dos catets d'un triangle i calculi llur hipotenusa.
En C caldrà fer servir la funció sqrt(), per tant caldrà incloure include <math.h>. Recordeu que la comppilació fent servir la biblioteca matemàtica és:
gcc -lm ex03_func.c -o e3
Un exemple d'ús de la funció sqrt() en Python
Exercici 4 de funcions
Desenvolupeu en C i en Python l'exercici 3 del mòdul 3 del d97. Recordeu que vam fer l'exercici del màxim comú divisor en C i l'exercici del màxim comú divisor en Python.
20201109 (1h en línia)
20201105 (1h)
Concepte de funció.
20201104 (1h)
Exercici 8. Algorisme 3n+1
20201103 (2h)
Exercicis d'estructures de control repetitives en Python
Per a implementar l'exercici 6 de bucles
Aquest és l'algorisme desenvolupat a classe i aquest és el codi en XML per a ser carregat per l'Snap!
Per simular un "Atura-ho Tot" en C, podeu fer servir un return 0; a la funció main()
Mireu pr02.py del Tercer dia de classe - M03 PRG 2020-2021 per saber com fer un return 0; en Python (sys.exit(0) i al principi cal afegir import sys).
20201029 (1h)
Exercicis d'estructures de control repetitives en Python
20201028 (1h)
Exercicis d'estructures de control repetitives en Python
20201027 (2h)
20201022 (1h)
1r exercici. Equació de 2n grau
20201021 (1h)
Exercicis de condicions en Python
20201020 (2h)
Exercicis de condicions en Python
20201015 (1h)
Exercicis de condicions en Python
20201014 (1h)
Exercicis de condicions en Python
20201013 (2h)
20201008 (1h)
Tercer dia de classe - M03 PRG 2020-2021
20201007 (1h)
Tercer dia de classe - M03 PRG 2020-2021
20201006 (2h)
Tercer dia de classe - M03 PRG 2020-2021
Codis del dia d'avui (comprimits els que hi eren al principi de la classe)
Tipus de dades fonamentals: Variables
20201001 (1h)
20200930 (1h)
Segon dia de classe - M03 PRG 2020-2021