ASIX 2020-2021
Contingut
- 1 Horari a partir del 18 de gener
- 2 Teleconferència del curs 2020-2021
- 3 Algunes classes
- 3.1 20210528 Avaluació ordinària del M03UF3
- 3.2 20210517
- 3.3 20210514
- 3.4 20210510
- 3.5 20210507
- 3.6 20210503
- 3.7 20210430 Comença M03UF3 (2h presencial)
- 3.8 20210426 Examen M03UF2 (2h presencial)
- 3.9 20210423 (2h presencial)
- 3.10 20210419 (2h presencial)
- 3.11 20210416 (2h presencial)
- 3.12 20210412 (2h síncrona)
- 3.13 20210326 (2h presencial)
- 3.14 20210322 (2h síncrona)
- 3.15 20210319 (2h síncrona)
- 3.16 20210318 (1h presencial)
- 3.17 20210315 (2h presencial)
- 3.18 20210312 (2h presencial)
- 3.19 20210308 (2h presencial)
- 3.20 20210305 (2h síncrona)
- 3.21 20210304 Examen M03UF1 (2h presencial)
- 3.22 20210301 (2h presencial)
- 3.23 20210226 (2h síncrona)
- 3.24 20210222 (2h síncrona)
- 3.25 20210219 (2h síncrona)
- 3.26 20210216 (1h presencial)
- 3.27 20210212 (2h presencial)
- 3.28 20210208 (2h síncrona)
- 3.29 20210205 (2h síncrona)
- 3.30 20210201 (2h presencial) Robot
- 3.31 20210129 (2h presencial) Robot
- 3.32 20210125 (2h síncrona)
- 3.33 20210122 (2h síncrona)
- 3.34 20210118 (2h presencial)
- 3.35 20210113 (1h síncrona)
- 3.36 20210111 (2h presencial)
- 3.37 20201221 (2h presencial)
- 3.38 20201214 (2h presencial)
- 3.39 20201202 (1h, síncrona)
- 3.40 20201130 (2h, presencial)
- 3.41 20201125 (1h, síncrona)
- 3.42 20201123 (2h, presencial)
- 3.43 20201118 (síncrona)
- 3.44 20201116 (presencial)
- 3.45 20201113 (asíncrona)
- 3.46 20201111 (síncrona)
- 3.47 20201109 (presencial)
- 3.48 20201106
- 3.49 20201102
- 3.50 20201030
- 3.51 20201026
- 3.52 20201023
- 3.53 20201019
- 3.54 20201016
- 3.55 20201012
- 3.56 20201009
- 3.57 20201005
- 3.58 20201002
- 3.59 20200928
- 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ç
Carpetes compartides 1r d'ASIX. Curs 2020-2021
Algunes classes
20210528 Avaluació ordinària del M03UF3
Examen d'avaluació ordinària de M03UF3
20210517
20210514
20210510
sprintf(szTerminal,"ls > %s",NOM_FITXER); // sprintf(szTerminal,"dir /b /a-d > %s",NOM_FITXER);
Sistema seriós:
ls > llista.dir
Finestrots:
dir /b /a-d > llista.dir
20210507
20210503
Exercici
Demaneu els valors de l'arxiu struct05.c i feu que s'enregistri la informació als arxius administratiu.txt, enginyer.txt i auxiliar.txt. Anomeneu l'arxiu com a exEstructuraArxiu_00.c (baseu-vos en m8p03.c).
Feu un nou exEstructuraArxiu_01.c que es limiti a fer la lectura d' administratiu.txt, enginyer.txt i auxiliar.txt.
20210430 Comença M03UF3 (2h presencial)
Comentem l'examen del darrer dia.
Comencem M03UF3.
20210426 Examen M03UF2 (2h presencial)
Examen d'avaluació ordinària del M03UF2
20210423 (2h presencial)
Avui intentarem resoldre l'examen del M03UF2 del curs 2017-2018 fent servir vector de números, fent-ho en Python.
Al final de la classe intentem fer l'examen del M03UF2 del curs 2017-2018 fent servir cadena de caràcters, fent-ho en Python.
20210419 (2h presencial)
20210416 (2h presencial)
Examen del M03UF2 del curs 2017-2018 fent servir vector de números
Examen del M03UF2 del curs 2017-2018 fent servir cadena de caràcters
Al codi rps01.c li cal afegir sota l'include:
#include <stdlib.h> #include <time.h>
20210412 (2h síncrona)
20210326 (2h presencial)
Seguim amb els robots.
20210322 (2h síncrona)
20210319 (2h síncrona)
20210318 (1h presencial)
Seguim amb els robots.
Exemple d'ús de l'estat de cerca
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; }
20210315 (2h presencial)
Seguim amb els robots.
20210312 (2h presencial)
Seguim amb els robots.
20210308 (2h presencial)
Seguim amb els robots.
20210305 (2h síncrona)
Repàs de l'examen.
Proposta de solució feta a classe
20210304 Examen M03UF1 (2h presencial)
20210301 (2h presencial)
Seguim amb els robots.
Repassem la introducció a l'ús d'estats al robot
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)
20210226 (2h síncrona)
Seguim amb els robots.
Introducció a l'ús d'estats al robot
20210222 (2h síncrona)
Alguns codis comentats avui a classe
20210219 (2h síncrona)
Alguns codis comentats avui a classe
Anem fent aquest examen de fa dos anys
20210216 (1h presencial)
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
Depuració
20210212 (2h presencial)
- Acabeu l'aproximació del robot
- Feu que el robot segueixi la vora dels tatamis (la línia negra). Us ha de funcionar en qualsevol direcció (cap a l'esquerra o cap a la dreta).
Proposta de control dels motors per infraroigs:
Al final de l'exemple irRobCtl:
vMotion( (bBL)?127:0 , (bBR)?127:0 );
- Feu que, des de qualsevol posició del robot, cerqui una capsa i la faci fora del tatami. El robot no en pot sortir del tatami i haurà d'insistir en empènyer la capsa fora del tatami.
20210208 (2h síncrona)
Porteu traduït a Python l'arxiu m05e7_04.c, vist el darrer dia. Com a pista, teniu implementat m05e7_03.py a partir de m05e7_03.c
Seguim per la 2a part del darrer dia. Ens vam quedar explicant m6e03_07.c.
Exercicis
- Desenvolupeu m6e03_09.c, a partir de m6e03_08.c, que permeti analitzar si una cadena és palíndroma malgrat tingui majúscules.
Ara tururut és un palíndrom, però tuRurut no és un palíndrom. I sí que ho és. Arrangem-ho.
- Desenvolupeu m6e03_10.c, a partir de m6e03_09.c, que permeti analitzar si una cadena és palíndroma malgrat tingui espais.
Ara tururut és un palíndrom, però tu Ru rut no és un palíndrom. I sí que ho és. Arrangem-ho.
Pista: Feu servir una funció de concatenació per a eliminar els espais. (tu Ru rut -> tururut)
20210205 (2h síncrona)
Repàs de l'exercici del darrer dia
- 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))
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.
20210201 (2h presencial) Robot
Seguim amb el robot.
20210129 (2h presencial) Robot
Biblioteques per al robot versió 5
20210125 (2h síncrona)
Heu d'haver fet, per avui, l'exercici 7. Valor màxim d'un vector
20210122 (2h síncrona)
Explicació de la funció d'intercanvi (swap)
Exercici
20210118 (2h presencial)
Exemple a TinkerCad amb 4 leds i 2 botons
Seguim amb Arduino
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 1a part
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 2a part
20210113 (1h síncrona)
La recursivitat
Exemples de recursivitat
- Les torres de Hanoi:
Explicació de Les torres de Hanoi
Vídeo: Entendiendo la recursividad con las Torres de Hanoi
Exercicis de recursivitat
Implementeu l'exemple de la successió de Fibonacci traduint el codi fet en Python a C.
A partir del codi Les torres de Hanoi, feu un comptador de moviments de les torres de Hanoi. Excepcionalment podeu emprar variables globals.
20210111 (2h presencial)
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 2a part
Alguns codis fets avui. Gentilesa dels senyors Caballero, Delgado i Areste.
20201221 (2h presencial)
Alguns codis d'avui. Flanc implementat en Snap4Arduino
Seguim amb Arduino
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 1a part
Pràctiques Arduino sobre placa S4A i Snap4Arduino - 2a part
20201214 (2h presencial)
20201202 (1h, síncrona)
20201130 (2h, presencial)
Heu de dur fet m4e05_03.py implementat en C
Porteu fet, en C i en Python, l'exercici 11 del mòdul 4 del d97
Exercici de la travessa (quiniela).
20201125 (1h, síncrona)
Porteu pensat de cas l'exercici 5
20201123 (2h, presencial)
Proveu de dur fet aquest exercici en C i en Python: Exercici 3. Endevina el número
El primer que farem serà comentar la vostra solució.
20201118 (síncrona)
Recursivitat i pseudoaleatorietat
Resum teòric de recursivitat i pseudoaleatorietat en C
Deixem un exercici per al proper dilluns, 23 de novembre de 2020.
20201116 (presencial)
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.
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
20201113 (asíncrona)
Com cada divendres, el nostre correu estarà obert per a resoldre dubtes. Sempre i quan es puguin contestar dins de la franja horària (1/4 de 7 a 1/4 menys 5 de 8).
Si rebem alguna consulta, obrirem el canal habitual de teleconferència. En cap cas es passarà llista.
Suggeriment d'exercici per a tenir dubtes: Exercici 3 del mòdul 3 del d97
20201111 (síncrona)
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
20201109 (presencial)
Concepte de funció.
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.
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.
20201106
1a part
Aquest és l'algorisme mostrat 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).
2a part
Exercicis d'estructures de control repetitives en Python
3a part
Exercici 8. Algorisme 3n+1
4a part
Concepte de funció.
20201102
Exercicis d'estructures de control repetitives en Python
20201030
Exercicis d'estructures de control repetitives en Python
20201026
20201023
Exercicis de condicions en Python
1r exercici. Equació de 2n grau
20201019
Exercicis de condicions en Python
20201016
Exercicis de condicions en Python
nNum = int(input("Número: ")) print("%d / 2 = %.2f" % (nNum, nNum / 2)) # Divisió amb decimals print("%d // 2 = %d" % (nNum, nNum // 2)) # Divisió sense decimals print("%d %% 2 = %d (si dóna 1, %d és senar. Si dóna 0, %d és parell)" % (nNum, nNum % 2, nNum, nNum)) # residu de la divisió per 2
20201012
Feina a fer:
Desenvolupeu en Python, m1p06.py, l'equivalent a m1p06.c
20201009
Repàs del Tercer dia de classe - M03 PRG 2020-2021
Tipus de dades fonamentals: Variables
20201005
Tercer dia de classe - M03 PRG 2020-2021
20201002
Segon dia de classe - M03 PRG 2020-2021
20200928
Teleconferència 20200928
Adreça de la teleconferència (És la del primer dia. Queda obsoleta)