MOPT - Lògica i programacio / Pseudocodi: Exercicis Pseudocodi
Contingut
Exercicis Seqüencials
1. Escriu un algorisme amb pseudocodi que demani al usuari el seu nom, i a continuació escrigui una salutació.
2. Calcular el perímetre i l'àrea d'un rectangle atesa la base i l'alçada.
3. Calcular la hipotenusa d'un triangle rectangle a partir dels seus catets.
4. Escriu un algorisme amb pseudocodi que demani dos valors numèrics i mostri la seva suma, resta, divisió i multiplicació.
5. Escriu un algorisme amb pseudocodi que demani dos valors numèrics, intercanviï els valors de les variables, i mostri les variables amb els valors intercanviats.
Exercicis estructura alternativa
Exercicis estructura repetitiva
Exercicis Arrays
Exercicis programació estructurada
1. Fes un programa de conversió entre el sistema decimal i el sistema binari. En concret el programa presentarà un menú i utilitzarà dues funcions: una que ens permeti convertir un nombre sencer a binari, i una altra que ens permeti convertir un nombre binari a decimal.
- ConvertirABinari: Funció que rep un nombre enter i torna una cadena amb la representació del número en binari.
- ConvertirADecimal: Funció que rep una cadena amb la representació binària dun nombre i torna el nombre en decimal. Aquesta funció utilitzarà una altra, EsBinari, que rep un nombre enter i torna cert si un nombre binari i fals en cas contrari.
Funcions cadena, emprades en aquest exercici:
- longitud(cadena): Retorna la quantitat de caràcters de la cadena.
- subcadena(cadena,pos_ini,pos_fin): Retorna una nova cadena que consisteix a la part de la cadena que va des de la posició pos_ini fins a la posició pos_fin.
- convertirANumero(cadena): Rep una cadena de caràcters que conté un nombre (caràcters numèrics) i retorna una variable numèrica amb el mateix.
- convertirATexto(numero): Rep un numero i retorna una variable cadena de caràcters de aquest numero.
2.- El DNI (Document Nacional d'Identitat) a Espanya està format per 8 números i una lletra. La lletra ens serveix per verificar que el número és correcte, per tant la lletra es calcula a partir del número.
Per obtenir la lletra, cal dividir el número per 23 i quedar-te amb la resta. La lletra que correspon segons la resta és:
0 - T 1 - R 2 - W 3 - A 4 - G 5 - M 6 - Y 7 - F 8 - P 9 - D 10 - X 11 - B
12 - N 13 - J 14 - Z 15 - S 16 - Q 17 - V 18 - H 19 - L 20 - C 21 - K 22 – E
Fes un programa amb les següents opcions: obtenir lletra DNI, validar DNI i Sortir.
Implementa 4 funcions, amb el següent propòsit:
- 1. validi a partir de un número de DNI, passat com a cadena, té 9 caràcters numèrics.
- 2. validi que un DNI, passat com a cadena, té 9 caràcters numèrics i una lletra.
- 3. a partir de un número de DNI passat com a cadena, ens retorni la lletra que li correspon.
- 4. a partir de un DNI passat com a cadena, ens indiqui si aquest es correcte.
- Les funcions 3 i 4 utilitzaran les funcions 1 i 2, per comprovar que les dades introduïdes són correctes.
Funcions cadena, emprades en aquest exercici:
- longitud(cadena): Retorna la quantitat de caràcters de la cadena.
- mayusculas(cadena): Retorna una còpia de la cadena amb tots els seus caràcters en majúscules.
- subcadena(cadena,pos_ini,pos_fin): Retorna una nova cadena que consisteix a la part de la cadena que va des de la posició pos_ini fins a la posició pos_fin.
- convertirANumero(cadena): Rep una cadena de caràcters que conté un nombre (caràcters numèrics) i retorna una variable numèrica amb el mateix.
3.- Dissenyar un programa que permeti endevinar a l'ordinador un determinat nombre enter i positiu, utilitzant cerca binaria, per a això s'han de llegir els límits en què està comprès aquest número. El programa haurà d'anar mostrant números que rebran les respostes següents:
‘S’, si és correcte. ‘A’, si és més alt que el número a endevinar. ‘B’, si és més baix.
En finalitzar el programa, cal escriure el nombre d'intents realitzats per encertar el número.
Consideracions:
- Cal comprovar que els límits introduïts són positius i que el límit inferior és menor que el límit superior.
- La cerca binaria, consisteix en generar a cada iteració, el valor mig dels límits.
Funcions cadena, emprades en aquest exercici:
- mayusculas(cadena): Retorna una còpia de la cadena amb tots els seus caràcters en majúscules.
- trunc(real): Retorna un número enter, eliminat la part decimal.
4.- Implementa un programa en pseudocodi que gestioni l'inici de sessió d'un usuari.
Consideracions:
- L'usuari és user1 i la contrasenya és 1@-27
- Només es permeten 3 intents.
Implementeu:
- Funció Login, rep el nom d'usuari introduït per l'usuari, i la contrasenya introduïda per l'usuari i per referència el nombre d'intents. Retorna cert si es corresponen amb l'usuari i contrasenya, i fals en cas contrari. Actualitza el nombre d'intents.
- Procediment Credencials, té com a paràmetres el nom de l'usuari i la contrasenya (ambdós passats per referència). Demana les dades de l'usuari i actualitza els paràmetres.
- Procediment MostrarMissatgeFinal, rep com a paràmetre un booleà indicant si s'ha accedit (usuari i contrasenya correctes) o no s'ha pogut accedir (error en usuari i/o contrasenya) i mostra un missatge indicant si s'ha aconseguit l'accés o si s'han superat els intents.
5.- Fes un programa que pseudocodi que permeti calcular:
- La quantitat de segons en un temps donat en hores, minuts i segons.
- La quantitat de hores, minuts i segons d'un temps donat en segons.
El programa utilitzarà tres funcions una per presentar un menú en tres opcions (primera: convertir a segons, segona: convertir a hores, minuts i segons i tercera: sortir) i dues funcions una per a cada una dels càlculs a fer.
6.- Crearem un programa per treballar amb una pila. Una pila és una estructura de dades que ens permet desar un conjunt de variables. La característica fonamental és que el darrer element que s'afegeix al conjunt és el primer que se'n pot treure.
Per representar una pila utilitzarem un vector de cadena de caràcters amb mida 10, per tant la pila no podrà tenir més de 10 elements.
Crearem diverses funcions per treballar amb la pila:
- IncialitzarPila: Com que tenim un vectpr de 10 elements de cadenes hem d'inicialitzar-lo i introduir un caràcter (per exemple un * que indiqui que aquest element de l'arranjament no correspon amb una dada de la pila. Aquesta funció inicialitza el vector amb aquest caràcter.
- LongitudPila: Funció que rep una pila i torna el nombre d'elements que té.
- EstaBuidaPila: Funció que rep una pila i que torna si la pila és buida, no té elements.
- EstaPlenaPila: Funció que rep una pila i que torna si la pila és plena.
- AfegirPila: funció que rep una cadena de caràcters i una pila, i afegeix la cadena a la pila, si no és plena. si aquesta plena mostra un missatge derror.
- TreureDeLaPila: Funció que rep una pila i torna l'últim element afegit i l'esborra de la pila. Si la pila és buida mostra un missatge derror.
- EscriurePila: Funció que rep una pila i mostra a la pantalla els elements de la pila.
Realitza un programa principal que ens permeti fer servir les funcions anterior, que ens mostri un menú, amb les opcions següents:
- Afegir element a la pila
- Treure element de la pila
- Longitud de la pila
- Mostra pila
- Sortir
7.- Escriviu un programa que jugui al joc del mastermind. El programa genera quatre dígits aleatoris entre 0 i 9. L’objectiu del joc és encertar els quatre dígits així com les seves posicions en el mínim nombre de jugades possibles. Cada vegada el jugador introdueix quatre dígits i el programa respon amb una pista, dient el nombre d’encerts i d’aproximacions. Un dígit es considera encertat quan existeix en aquella posició, mentre que una aproximació representa un dígit que existeix però no està ben col·locat. Per no complicar el joc, cal controlar que els quatre dígits que es generen siguin tots diferents.
- Variables que necessitarem com a mínim:
- -Dues taules de quatre números per guardar la jugada de la màquina i del jugador
- -Dues variables que ens guardin el número d’encerts i d’aproximacions.
- -Seria convenient una variable que ens compti el número de jugades que ha fet el jugador, de forma que si és un inútil i no encerta mai, el programa acabi després d’un cert nombre d’intents.
- Funcions que necessitem:
- - generar_jugada_maquina (maquina)
- Ens crea la jugada de la màquina amb nombres aleatoris entre 0 i 9. Cal controlar que no hi hagin números repetits.
- - llegir_jugada_jugador (jugador)
- Simplement s’ha de llegir de teclat els quatre valors i posar-los a la taula
- - final (encerts)
- En principi aquesta funció només seria certa quan el nombre d’encerts fos igual a 4 però com he dit abans seria interessant acabar en un nombre de jugades determinat. Si ho féu així, s’ha de passar com a paràmetre el nombre de jugades actual.
- - trobar_numero_encerts (maquina, jugador)
- Calcula i retorna el nombre d’encerts de la jugada actual
- - trobar_numero_aproximacions (maquina, jugador)
- Calcula i retorna el nombre d’aproximacions de la jugada actual
8. Un laboratori d’investigació cultiva una colònia de bacteris dins d’una àrea que es pot considerar com una superfície quadriculada de dimensió 30 x 30. Cada casella pot ser buida o contenir un bacteri. A partir de la seva configuració inicial, la colònia evoluciona generació rere generació segons unes lleis genètiques que tot seguit es descriuen i que depenen del nombre de veïns que té cada casella:
- Naixement: tota casella buida amb exactament tres veïns tindrà un naixement la propera generació.
- Mort per solitud: tot bacteri que ocupa una casella amb 0 o 1 veïns morirà per solitud la propera generació.
- Supervivència: tot bacteri que ocupa una casella amb 2 o 3 veïns sobreviurà la propera generació.
- Mort per asfixia: tot bacteri que ocupa una casella amb més de 3 veïns morirà per asfixia la següent generació.
Noteu que cada bacteri té com a molt 8 veïns i que en el cas dels bacteris residents a les vores de la quadrícula el nombre de veïns és menor.
Es considera que la transició entre generacions és simultània en totes les caselles de la colònia.
Es demana dissenyar un programa que simuli l’evolució de la colònia de bacteris i determini, a partir d’una situació inicial aleatòria, quantes iteracions es necessiten per tal que la colònia arribi a una situació estable. Aclariments sobre algunes funcions:
- El procediment Generar generació inicial ha de crear una colònia de forma aleatòria. La forma més senzilla en és omplir la matriu amb valors aleatoris. Random r =new Random(); r.nextInt(2) i us retornarà valors que seran o bé 0 o bé 1 (podeu considerar per exemple que 1 representa que hi ha un bacteri i 0 que no).
- El procediment Mostrar generació inicial simplement traurà per pantalla l’estat actual. No cal fer virgueries en la presentació, simplement que s’entengui el que hi ha. El procediment Mostrar generació final és exactament el mateix, simplement canviarà el paràmetre que li passem.
- El procediment Generar següent generació ens crea la nova generació seguint les regles explicades abans. Òbviament per poder-ho fer haurà de cridar a una funció veïns que ens indiqui per a cada posició de la matriu, quants veïns n’hi ha.
- Considerem que la situació és estable quan després de crear una nova generació ja no hi ha canvis a la colònia.
- Aquest sistema genètic funciona, però per possibles errors de programació podria ser que entrés en un bucle infinit, per això fins que no esteu segurs que el programa funciona i acaba bé podeu posar també com a condició del bucle que no doni més de 500 voltes. També és cert que en algun cas pot entrar en un cicle de dues voltes i per tant serà millor que poseu sempre aquesta condició.
- Si no teniu clar on falla el programa, es pot dintre del bucle visualitzar cada vegada el tauler, però això ralentitzarà molt l’execució. Si ho voleu provar d’aquesta manera, feu-lo amb matrius petites (6 x 6 o així). Quant tingueu clar que funciona, torneu a donar la mida inicial.
NOTES: El programa ha d’estar perfectament estructurat i la filosofia és l’explicada abans. No cal que sigui exactament així però penso que no pot canviar molt l’estructura.
Tot ha de fer-se mitjançant funcions (potser Inicialitzar variables no cal) i heu de pensar que el programa principal no quedarà gaire més llarg que el programa de la pàgina anterior. Cal comentar el codi.