Diferència entre revisions de la pàgina «M3 - Programació»
(→Exercicis prova) |
|||
(207 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 1: | Línia 1: | ||
==UF1: Programació Estructurada == | ==UF1: Programació Estructurada == | ||
<!-- | <!-- | ||
+ | [[ASIX-M3-UF1-Proves|BPUF1]] | ||
+ | --> | ||
+ | <pre> | ||
A1. L’estructura del programa informàtic | A1. L’estructura del programa informàtic | ||
A2. La composició alternativa | A2. La composició alternativa | ||
Línia 7: | Línia 10: | ||
A5. Tractament de cadenes | A5. Tractament de cadenes | ||
A6. Creació de nous tipus de dades | A6. Creació de nous tipus de dades | ||
− | |||
+ | Nota NF1 = 0.2 Pe1 + 0.08 Pt1+ 0.08 Pt2 + 0.32 Pe2 + 0.32 Pe3 | ||
+ | |||
+ | Pe1: Qüestionari | ||
+ | Pt1: Pràctica taules | ||
+ | Pt2: Pràctica nou tipus de dades | ||
+ | Pe2: Prova programació: estructures de control, algoritmes de cerca i de recorregut | ||
+ | Pe3: Prova programació: taules, cadenes i nous tipus de dades | ||
+ | |||
+ | </pre> | ||
===Continguts=== | ===Continguts=== | ||
+ | <!-- | ||
+ | ====Algoritmes / pseudocodi==== | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: Pseudocodi|Pseudocodi]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: Exercicis Pseudocodi |Exercicis Pseudocodi]] | ||
+ | --> | ||
+ | ====Variables, constants, entrada de dades i operadors==== | ||
:*[[M3 - Programació estructurada / Continguts UF1: Algorismes i programes |Algorismes i programes]] | :*[[M3 - Programació estructurada / Continguts UF1: Algorismes i programes |Algorismes i programes]] | ||
Línia 22: | Línia 41: | ||
:*[[M3 - Programació estructurada / Continguts UF1: Operadors amb dades de tipus lògic |Operadors amb dades de tipus lògic]] | :*[[M3 - Programació estructurada / Continguts UF1: Operadors amb dades de tipus lògic |Operadors amb dades de tipus lògic]] | ||
+ | |||
+ | |||
+ | ====Estructures de control==== | ||
+ | |||
+ | ===== Estructures alternatives===== | ||
+ | |||
+ | :*Les '''estructures alternatives''' permeten prendre decisions sobre quin conjunt d’instruccions cal executar en un punt del programa. | ||
+ | |||
+ | :*Tota estructura alternativa es basa en l’avaluació d’una expressió que ha de donar un resultat booleà: true (cert) o false (fals). Aquesta expressió s’anomena la '''condició lògica''' de l’estructura. | ||
+ | |||
+ | :*El conjunt d’instruccions que s’executarà dependrà del resultat de la condició lògica, i actuarà com una mena d’interruptor que marca el flux que cal seguir dins del programa. | ||
:*[[M3 - Programació estructurada / Continguts UF1: Estructura alternativa |Estructura alternativa]] | :*[[M3 - Programació estructurada / Continguts UF1: Estructura alternativa |Estructura alternativa]] | ||
+ | |||
+ | ===== Estructures iteratives===== | ||
+ | |||
+ | Les estructures de repetició o iteratives permeten repetir una mateixa seqüència d’instruccions diverses vegades, mentre es compleixi una certa condició. | ||
+ | |||
+ | ::Anomenem '''bucle''' o cicle el conjunt d’instruccions que s’ha de repetir un cert nombre de vegades, i anomenem '''iteració''' cada execució individual del bucle. | ||
+ | |||
+ | ::Un '''bucle infinit''' és una seqüència d’instruccions dins d’un programa que itera indefinidament, normalment perquè s’espera que s’assoleixi una condició que mai no s’arriba a produir. | ||
+ | |||
+ | ::Forçosament dins de tot bucle hi ha d’haver instruccions que manipulin variables el valor de les quals permeti controlar la repetició o el final del bucle. Aquestes variables s’anomenen '''variables de control'''. | ||
+ | |||
+ | Normalment, les variables de control dins d’un bucle es poden englobar dins d’algun d’aquests tipus de comportament: | ||
+ | |||
+ | :* '''Comptador''': una variable de tipus enter que va augmentant o disminuint, indicant de manera clara el nombre d’iteracions que caldrà fer. | ||
+ | |||
+ | :* '''Acumulador''': una variable en què es van acumulant directament els càlculs que es volen fer, de manera que en assolir cert valor es considera que ja no cal fer més iteracions. Si bé s’assemblen als comptadors, no són ben bé el mateix. | ||
+ | |||
+ | :* '''Semàfor''': una variable que serveix com a interruptor explícit de si cal seguir fent iteracions. Quan ja no en volem fer més, el codi simplement s’encarrega d’assignar-li el valor específic que servirà perquè la condició avaluï false. | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: La sentència for|La sentència for]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: La sentència while|La sentència while]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: La sentència do/while|La sentència do/while]] | ||
+ | |||
+ | ===== Esquemes de tractament seqüencial===== | ||
+ | |||
+ | '''Introducció''' | ||
+ | |||
+ | Un esquema de programació no és altra cosa que un model de solució per a a una família de problemes de programació homòlegs. L'ús d'esquemes de programació és una eina imprescindible per al programador atès que el seu ús facilita molt la solució de problemes i rebaixa considerablement la taxa d'errors de programació. | ||
+ | |||
+ | Aquesta estratègia de treball no és única de l'àmbit de la programació sinó que també l'apliquem en altres disciplines. Per exemple, a física quan aprenem a resoldre problemes de tir parabòlic o a matemàtiques quan aprenem a calcular primitives fent integració per parts. | ||
+ | |||
+ | La metodologia general segueix aquests passos: | ||
+ | |||
+ | :• Identificació del tipus de problema. | ||
+ | :• Caracterització dels elements característics. | ||
+ | :• Aplicació de l'esquema. | ||
+ | |||
+ | En aquest material introduïrem els esquemes seqüencials, és a dir els que s'apliquen a dades que tenen estructura de seqüència. | ||
+ | |||
+ | '''Seqüències''' | ||
+ | |||
+ | Una seqüència és un conjunt de dades de qualsevol tipus que es caracteritzen per estar disposades «en forma de fila», ja sigui des d'un punt de vista físic o conceptual. Moltes de les dades que manipula un programa tenen estructura de seqüència. Per exemple, un | ||
+ | string com ara "Hola nois", pot ser considerat com una seqüència de caràcters ('H', 'o', 'l',...) o una matriu de reals com una seqüència de files. Més formalment, una seqüència és una conjunt de dades tal que: | ||
+ | |||
+ | :• És finit. | ||
+ | :• Conté un element que és el primer de la seqüència | ||
+ | :• Es pot definir la relació de "següent", que donat un element de la seqüència, diu quin ve a darrera. | ||
+ | |||
+ | Per exemple, el enters de 1 a 10 tenen estructura de seqüència atès que són un conjunt finit, tenen un primer ben definit (l'1) i la relació de següent consisteix a sumar una unitat a l'anterior. | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: Esquema de recorregut|Esquema de recorregut]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: Esquema de cerca|Esquema de cerca]] | ||
+ | <!----> | ||
====Tipus de dades compostes==== | ====Tipus de dades compostes==== | ||
Línia 30: | Línia 116: | ||
:*[[M3 - Programació estructurada / Continguts UF1: Cadenes de caràcters |Cadenes de caràcters]] | :*[[M3 - Programació estructurada / Continguts UF1: Cadenes de caràcters |Cadenes de caràcters]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Continguts UF1: El tipus char |El tipus char]] | ||
:*[[M3 - Programació estructurada / Continguts UF1: Classes |Classes]] | :*[[M3 - Programació estructurada / Continguts UF1: Classes |Classes]] | ||
+ | <!----> | ||
===Activitats=== | ===Activitats=== | ||
====Exercicis seqüencials, estructura alternativa i iteratius==== | ====Exercicis seqüencials, estructura alternativa i iteratius==== | ||
− | |||
− | |||
− | |||
− | :*[[M3 - Programació estructurada / Exercicis UF1: For |Exercicis amb For]] | + | :*[[M3 - Programació estructurada / Exercicis UF1: Seqüencials |Exercicis seqüencials]] / [[M3 - Programació estructurada / Exercicis UF1: Seqüencials-Solucions| Solucions]] |
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: Expressions lògiques|Exercicis avaluar expressions lògiques]] / [[M3 - Programació estructurada / Exercicis UF1: Expressions lògiques-Solucions| Solucions]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: Fer expressions lògiques |Exercicis trobar expressions lògiques]] / [[M3 - Programació estructurada / Exercicis UF1: Fer expressions lògiques-Solucions| Solucions]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa preliminars|Exercicis d'estructura alternativa preliminars]] / [[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa preliminars-Solucions| Solucions]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa |Exercicis d'estructura alternativa]] / [[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa-Solucions| Solucions]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: For |Exercicis amb For]] / [[M3 - Programació estructurada / Exercicis UF1: For-Solucions| Solucions]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: Recorregut |Exercicis de recorregut]] / [[M3 - Programació estructurada / Exercicis UF1: Recorregut-Solucions| Solucions]] | ||
− | :*[[M3 - Programació estructurada / Exercicis UF1: | + | :*[[M3 - Programació estructurada / Exercicis UF1: Cerca |Exercicis de cerca]] / [[M3 - Programació estructurada / Exercicis UF1: Cerca-Solucions| Solucions]] |
− | :*[[M3 - Programació estructurada / Exercicis UF1: | + | :*[[M3 - Programació estructurada / Exercicis UF1: Iteratius |Més exercicis iteratius]] / [[M3 - Programació estructurada / Exercicis UF1: Iteratius-Solucions| Solucions]] |
− | + | <!----> | |
+ | <!-- | ||
+ | '''Proves exercicis seqüencials, estructura alternativa i iteratius 20/21''' | ||
:*[[M3 - Programació estructurada / Exercicis UF1: Proves |Proves]] | :*[[M3 - Programació estructurada / Exercicis UF1: Proves |Proves]] | ||
+ | --> | ||
+ | <!-- | ||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: Proves+Solucions |Proves + Solucions]] | ||
+ | --> | ||
====Exercicis taules, cadenes i nous tipus de dades==== | ====Exercicis taules, cadenes i nous tipus de dades==== | ||
:*[[M3 - Programació estructurada / Exercicis UF1: Taules |Exercicis taules]] | :*[[M3 - Programació estructurada / Exercicis UF1: Taules |Exercicis taules]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: Taules - Problemes |Exercicis taules - Problemes]] | ||
:*[[M3 - Programació estructurada / Exercicis UF1: Taules - Pokemons |Exercici taules - Pokemons]] | :*[[M3 - Programació estructurada / Exercicis UF1: Taules - Pokemons |Exercici taules - Pokemons]] | ||
:*[[M3 - Programació estructurada / Exercicis UF1: Cadenes |Exercicis de cadenes]] | :*[[M3 - Programació estructurada / Exercicis UF1: Cadenes |Exercicis de cadenes]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: classe Character |Exercicis de classe Character]] | ||
:*[[M3 - Programació estructurada / Exercicis UF1: Classes|Exercicis Classes]] / [[M3 - Programació estructurada / Exercicis UF1: Menú|Prototipus menú]] | :*[[M3 - Programació estructurada / Exercicis UF1: Classes|Exercicis Classes]] / [[M3 - Programació estructurada / Exercicis UF1: Menú|Prototipus menú]] | ||
+ | <!----> | ||
+ | <!-- | ||
+ | '''Proves exercicis taules, cadenes i nous tipus de dades 20/21''' | ||
:*[[M3 - Programació estructurada / Exercicis UF1: Proves_T_C_TD |Proves]] | :*[[M3 - Programació estructurada / Exercicis UF1: Proves_T_C_TD |Proves]] | ||
+ | --> | ||
+ | <!-- | ||
+ | :*[[M3 - Programació estructurada / Exercicis UF1: Proves_T_C_TD+Solucions |Proves + Solucions]] | ||
+ | --> | ||
+ | <!-- | ||
+ | ====Proves OnLine==== | ||
+ | |||
+ | - Exercicis seqüencials, estructura alternativa i iteratius | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1 Part1: Proves OnLine |Proves Online UF1 1a. Part]] | ||
+ | |||
+ | - Exercicis taules, cadenes i nous tipus de dades | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF1 Part2: Proves OnLine |Proves Online UF1 2a. Part]] | ||
+ | |||
+ | - Tota la UF1 | ||
+ | |||
+ | :*[[M3 - Programació estructurada / UF1: Proves OnLine |Proves Online UF1]] | ||
+ | --> | ||
===Pràctiques=== | ===Pràctiques=== | ||
− | :*[[M3 - Programació estructurada / Pràctiques UF1: Pt1 |Pt1 - Taules]] / [[M3 - Programació estructurada / Continguts UF1: System.out.printf |System.out.printf]] | + | :*[[M3 - Programació estructurada / Pràctiques UF1: Pt1 |Pt1 - Taules]] / [[M3 - Programació estructurada / Continguts UF1: System.out.printf |System.out.printf]] / [[M3 - Programació estructurada / Continguts UF1: Colors |Colors]] |
:*[[M3 - Programació estructurada / Pràctiques UF1: Pt2 |Pt2 - Classes]] | :*[[M3 - Programació estructurada / Pràctiques UF1: Pt2 |Pt2 - Classes]] | ||
+ | <!----> | ||
+ | <!-- | ||
====Repàs UF1==== | ====Repàs UF1==== | ||
Línia 82: | Línia 214: | ||
Més exercicis iteratius: '''1, 2, 3, 4, 5''' | Més exercicis iteratius: '''1, 2, 3, 4, 5''' | ||
+ | --> | ||
==UF2: Disseny modular i recursivitat== | ==UF2: Disseny modular i recursivitat== | ||
Línia 102: | Línia 235: | ||
:*[[M3 - Programació estructurada / Exercicis UF2: Recursivitat |Recursivitat]] | :*[[M3 - Programació estructurada / Exercicis UF2: Recursivitat |Recursivitat]] | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF2: Exercicis repàs programació estructurada|Exercicis repàs programació estructurada]] | ||
+ | |||
===Pràctiques=== | ===Pràctiques=== | ||
Línia 111: | Línia 247: | ||
:*[[M3 - Programació estructurada / Pràctiques UF2: Pt3 |Pt3 - Recursivitat]] | :*[[M3 - Programació estructurada / Pràctiques UF2: Pt3 |Pt3 - Recursivitat]] | ||
+ | <!----> | ||
+ | <!-- | ||
+ | '''Proves disseny modular i recursivitat 2020-21''' | ||
+ | |||
+ | :*[[M3 - Programació estructurada / Exercicis UF2: Proves_DM_R |Proves]] | ||
+ | --> | ||
==UF3: Fonament de gestió de fitxers== | ==UF3: Fonament de gestió de fitxers== | ||
Línia 129: | Línia 271: | ||
:*[[M3 - Programació estructurada / Activitats UF3: Fitxers orientats a byte |Fitxers orientats a byte]] | :*[[M3 - Programació estructurada / Activitats UF3: Fitxers orientats a byte |Fitxers orientats a byte]] | ||
+ | <!----> | ||
==UF4: Programació Orientada a Objectes. Fonaments == | ==UF4: Programació Orientada a Objectes. Fonaments == | ||
Línia 135: | Línia 278: | ||
:*[[M3 - Programació Orientada a Objectes / Activitats UF4: Classes |Classes]] | :*[[M3 - Programació Orientada a Objectes / Activitats UF4: Classes |Classes]] | ||
+ | <!----> | ||
+ | <!-- | ||
+ | :*[[M2 - Bases de dades / Apunts UF3 : Exercicis OnLine paquets i triggers| Paquets i triggers ]] | ||
+ | --> | ||
+ | ==LP== | ||
+ | |||
+ | ==Exercicis Seqüencials== | ||
+ | |||
+ | 1. Escriu un programa que demani al usuari el seu nom, i a continuació escrigui una salutació. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Hem de demanar un nom per teclat i després escriure un missatge de salutació | ||
+ | ::Dades d'entrada: nom (cadena) | ||
+ | ::Variables: nom (cadena) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir nom | ||
+ | ::2. Escriure missatge de salutació | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Saludar | ||
+ | Definir nom como Cadena; | ||
+ | Escribir "Diguem el teu nom:"; | ||
+ | Leer nom; | ||
+ | Escribir "Hola ",nom; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 2. Calcular el perímetre i l'àrea d'un rectangle atesa la base i l'alçada. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Hem de llegir la base i l'alçada del triangle i calcular el perímetre i el àrea | ||
+ | ::Dades d'entrada: base(real), alçada(real) | ||
+ | ::Informació de sortida: perímetre(real) i àrea(real) | ||
+ | ::Variables: base, alçada, perímetre i àrea (real) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir base i altura | ||
+ | ::2. Calcular perímetre(2*base + 2*alçada) | ||
+ | ::3. Calcular àrea (base * altura | ||
+ | ::4. Mostrar perímetre i àrea | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Rectangle | ||
+ | Definir base,alçada,perimetre,area como Real; | ||
+ | Escribir "Introdueix la base:"; | ||
+ | Leer base; | ||
+ | Escribir "Introdueix la alçada:"; | ||
+ | Leer alçada; | ||
+ | perimetro <- 2 * base + 2 * alçada; | ||
+ | area <- base * alçada; | ||
+ | Escribir "El perímetre és ",perimetre," y el àrea es ",area; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 3. Calcular la hipotenusa d'un triangle rectangle a partir dels seus catets. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Hem de llegir la longitud dels dos catets i calcular la hipotenusa. | ||
+ | ::(Teorema de Pitàgores) | ||
+ | ::Variables d'entrada: catet1(real), catet2(real) | ||
+ | ::Variables de sortida: hipotenusa(real) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir la longitud dels catets | ||
+ | ::2. Calcular hipotenusa (En un triangle rectangle el quadrat de la hipotenusa és igual a la suma dels quadrats dels catets.) | ||
+ | ::Per tant la hipotenusa és igual a l'arrel quadrada de la suma dels quadrats dels catets (funció raiz). | ||
+ | ::3. Mostrar la hipotenusa | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso CalcularHipotenusa | ||
+ | Definir catet1,catet2,hipotenusa como Real; | ||
+ | Escribir "Introdueix el catet 1:"; | ||
+ | Leer catet1; | ||
+ | Escribir "Introdueix la catet 2:"; | ||
+ | Leer catet2; | ||
+ | hipotenusa <- raiz(catet1 ^ 2 + catet2 ^ 2); | ||
+ | Escriure "La hipotenusa és", hipotenusa; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 4. Escriu un algoritme amb pseudocodi que demani dos valors numèrics, intercanviï els valors de les variables, i mostri les variables amb els valors intercanviats. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Es demanen el valor de dues variables (el tipus pot ser el que vulguem). | ||
+ | ::Cal intercanviar els valors de les variables | ||
+ | ::Dades d'entrada: dos números en dues variables (enters). | ||
+ | ::Informació de sortida: Les dues variables però amb les dades canviades (enter) | ||
+ | ::Variables: num1, num2 (enters). | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir els dos números | ||
+ | ::2. Intercanvio els valors. Necessito una variable auxiliar (aux). | ||
+ | :: Assigno "num1" a "aux", "num2" a "num1" i "aux" a "num2" | ||
+ | ::3. Mostra "num1" i "num2" | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso IntercanviarVariables | ||
+ | Definir num1,num2,aux como Entero; | ||
+ | Escribir "Introdueix valor de la variable num1:"; | ||
+ | Lleer num1; | ||
+ | Escribir "Introdueix valor de la variable num2:"; | ||
+ | Lleer num2; | ||
+ | aux <- num1; | ||
+ | num1 <- num2; | ||
+ | num2 <- aux; | ||
+ | Escrbir "Nou valor de num1:", num1; | ||
+ | Escribir "Nou valor de num2:", num2; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ==Exercicis estructura alternativa== | ||
+ | |||
+ | 1. Escriu un algorisme que demani un número i digui si és positiu, negatiu o 0. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Hem de demanar un número per teclat, comparar-lo amb 0, i indicar si és igual, major o menor que 0. | ||
+ | ::Dades d'entrada: número (enter) | ||
+ | ::Informació de sortida: Un missatge de text indicant si el número és igual, major o menor que 0. | ||
+ | ::Variables: num (enters) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir el número | ||
+ | ::2. Si el nombre és igual 0 escriviu "És igual a 0" | ||
+ | ::3. En cas contrari si és més gran que 0 escriure "És més gran que 0" | ||
+ | ::4. En altre cas escriure "És menor que 0" | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso CalcularPositiuNegatiuZero | ||
+ | Definir num como Entero; | ||
+ | Escribir "Digue'm el número :"; | ||
+ | Leer num; | ||
+ | Si num=0 Entonces | ||
+ | Escribir "És igual a 0"; | ||
+ | SiNo | ||
+ | Si num>0 Entonces | ||
+ | Escribir "És positiu"; | ||
+ | SiNo | ||
+ | Escribir "És negatiu"; | ||
+ | FinSi | ||
+ | FinSi | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 2. Escriu un algorisme en pseudocodi que demani un nom d'usuari i una contrasenya i si s'ha introduït "pcarbonell" i "pc1673" s'indica "Has entrat al sistema", sinó hi ha un error. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Demanem per teclat nom i contrasenya | ||
+ | ::si coincideixen amb les correctes indiquem que s'ha entrat al sistema. | ||
+ | ::en cas contrari indiquem que el nom o la clau són incorrectes | ||
+ | ::Dades d'entrada: usuari, password (cadena) | ||
+ | ::Informació de sortida: Missatges d'encert o error. | ||
+ | ::Variables: usuari, password (cadena) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir l'usuari | ||
+ | ::2. Llegir el password | ||
+ | ::3. Si l'usuari és igual a "pcarbonell" i el password és igual a "pc1673" | ||
+ | ::escriure "Has entrat al sistema" | ||
+ | ::4. En cas contrari mostrar el missatge "Usuari/password incorrecte" | ||
+ | |||
+ | <source lang="java"> | ||
+ | Procéso Login | ||
+ | Definir usuari, password como Cadena; | ||
+ | Escribir Sin Saltar "Introdueix l'usuari:"; | ||
+ | Leer usuari; | ||
+ | Escribir Sin Saltar "Introdueix el password:"; | ||
+ | Leer password; | ||
+ | Si usuari="pcarbonell" Y password="pc1673" Entonces | ||
+ | Escribir "Has entrat al sistema"; | ||
+ | SiNo | ||
+ | Escribir "Usuari/password incorrecte"; | ||
+ | FinSi | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 3. Algorisme que demani dos números 'nota' i 'edat' i un caràcter 'sexe' i mostri el missatge 'ACCEPTADA' si la nota és major o igual a cinc, l'edat és més gran o igual a divuit i el sexe és 'F'. En cas que es compleixi el mateix, però el sexe sigui 'M', heu d'imprimir 'POSSIBLE'. Si no es compleixen aquestes condicions cal mostrar 'NO ACCEPTADA'. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Demanem per teclat dos números: nota i edat i un caràcter sexe. | ||
+ | ::Es mostra "ACCEPTADA" si nota>=5, edat>=18 i el sexe és femení. | ||
+ | ::Si es compleix les mateixes condicions però amb el sexe masculí -> "POSSIBLE" en cas contrari es mostra "NO ACCEPTADA" | ||
+ | ::Dades d'entrada: nota, edat (enter) i sexe (cadena) | ||
+ | ::Informació de sortida: Missatge d'informació | ||
+ | ::Variables: nota, edat (enter) i sexe (cadena) | ||
+ | |||
+ | ::Disseny | ||
+ | ::1. Llegir la nota, l'edat i el sexe | ||
+ | ::2. si nota>=5, edat>=18 | ||
+ | ::3. si sexe="F" mostrar "ACCEPTADA" -> funció Mayusculas() | ||
+ | ::4. si sexe="M" mostrar "POSSIBLE" | ||
+ | ::5. En cas contrari, mostrar "NO ACCEPTADA" | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso ComprovarNotaEdatSexe | ||
+ | Definir nota,edat como Entero; | ||
+ | Definir sexe como Cadena | ||
+ | Escribir Sin Saltar "Introdueix la nota:"; | ||
+ | Leer nota; | ||
+ | Escribir Sin Saltar "Introdueix l'edat:"; | ||
+ | Llegir edat; | ||
+ | Escribir Sin Saltar "Introdueix el sexe (F/M):"; | ||
+ | Leer sexe; | ||
+ | Si nota>=5 Y edat>=18 Entonces | ||
+ | Si Mayusculas(sexe)="F" Entonces | ||
+ | Escribir "Acceptada"; | ||
+ | Sinó | ||
+ | Si Mayusculas(sexe)="M" Entonces | ||
+ | Escribir "Possible"; | ||
+ | SiNo | ||
+ | Escribir "No Acceptada"; | ||
+ | FinSi | ||
+ | FinSi | ||
+ | SiNo | ||
+ | Escribir "No Acceptada"; | ||
+ | FinSi | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 4. L'associació de vinicultors té com a política fixar un preu inicial al quilo de raïm, la qual es classifica en tipus A i B, i a més en mides 1 i 2. Quan es realitza la venda del producte, aquesta és d'un sol tipus i mida, es requereix determinar quant rebrà un productor pel raïm que lliura en un embarcament, considerant el següent: | ||
+ | :* Si és de tipus A, se li carreguen 20 cèntims al preu inicial quan és de mida 1; i 30 cèntims si és de mida 2. | ||
+ | :* Si és de tipus B, es rebaixen 30 cèntims quan és de mida 1, i 50 cèntims quan és de mida 2. | ||
+ | :* Realitzeu un algorisme per determinar el guany obtingut. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::El preu final del raïm es calcula multiplicant els quilos recollits pel preu de cada quilo. El preu per quilo es calcula a partir del preu inicial sumant o restant una quantitat determinada segons la mida i el tipus del raïm. | ||
+ | ::Dades d'entrada: tipus, mida (caràcter), preu inicial en cèntims i quilos (enter) | ||
+ | ::Informació de sortida: Preu final en euros (real) o missatge d'error | ||
+ | ::Variables: preu_inicial (enter), quilos (enter), mida (caràcter), tipus (caràcter), preu_final (real) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir preu_inicial, quilos | ||
+ | ::2. Llegir tipus | ||
+ | ::3. Si tipus no és "A" o "B" tornar missatge d'error. | ||
+ | ::4. Llegir la mida | ||
+ | ::5. Si la mida no és "1" o "2" tornar missatge d'error. | ||
+ | ::6. Si tipus és "A" i mida és "1" summe a preu_inicial 20 cèntims. | ||
+ | ::7. Si tipus és "A" i mida és "2" summe a preu_inicial 30 cèntims. | ||
+ | ::8. Si tipus és "B" i grandària és "1" resta a preu_inicial 20 cèntims. | ||
+ | ::9. Si tipus és "B" i grandària és "2" resta a preu_inicial 30 cèntims. | ||
+ | ::10. El preu_final = preu_inicial * quilos | ||
+ | ::11. Mostra preu final/100 euros | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso PreuUva | ||
+ | Definir tipus como Caracter; | ||
+ | Definir mida como Caracter; | ||
+ | Definir preu_inicial,preu_final como Real; | ||
+ | Definir quilos como Entero; | ||
+ | Escribir Sin Saltar "Introdueix el preu inicial per quilos del UVA (cèntims):"; | ||
+ | Leer preu_inicial; | ||
+ | Escribir Sin Saltar "Introdueix quants quilos has venut:"; | ||
+ | Leer quilos; | ||
+ | Escribir Sin Saltar "Introdueix el tipus de l'UVA (A/B):"; | ||
+ | Leer tipus; | ||
+ | |||
+ | Si Mayusculas(tipus)<>"A" Y Mayusculas(tipus)<>"B" Entonces | ||
+ | Escribir "Tipus incorrecte"; | ||
+ | SiNo | ||
+ | Escribir Sin Saltar "Introdueix la mida del UVA (1/2):"; | ||
+ | Leer mida; | ||
+ | Si mida<>"1" Y mida<>"2" Entonces | ||
+ | Escribir "Mida incorrecte"; | ||
+ | SiNo | ||
+ | Si Mayusculas(tipus)="A" Entonces | ||
+ | Si mida="1" Entonces | ||
+ | preu_inicial<-preu_inicial+20; | ||
+ | SiNo | ||
+ | preu_inicial<-preu_inicial+30; | ||
+ | FinSi | ||
+ | SiNo | ||
+ | Si mida="1" Entonces | ||
+ | preu_inicial<-preu_inicial-20; | ||
+ | SiNo | ||
+ | preu_inicial<-preu_inicial-30; | ||
+ | FinSi | ||
+ | FinSi | ||
+ | preu_final<-preu_inicial * quilos; | ||
+ | Escribir "El guany és",preu_final/100, "euros."; | ||
+ | |||
+ | FinSi | ||
+ | FinSi | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 5. Utilitzant l'estructura Segun ..., fes un algorisme en pseudocodi que demani el nom i preu original d'un article i el codi de descompte (si el codi és 1 els descompte és del 10%, si el codi és 2 el descompte és del 15%, si el codi és 3 el descompte és del 20%, altrament el descompte és del 0%. Cal mostrar l'article, el preu original, el descompte i el preu final. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso DescompteComercial | ||
+ | |||
+ | Definir nom como Cadena; | ||
+ | Definir preuOriginal, descompte, preuFinal como Real; | ||
+ | Definir codiDescompte como Entero; | ||
+ | |||
+ | Escribir "Introdueix el nom de l'article: "; | ||
+ | Leer nom | ||
+ | Escribir "Introdueix el preu original: "; | ||
+ | Leer preuOriginal | ||
+ | Escribir "Introdueix el codi de descompte: "; | ||
+ | Leer codiDescompte; | ||
+ | |||
+ | Segun codiDescompte Hacer | ||
+ | 1: descompte <- preuOriginal * 0.10; | ||
+ | 2: descompte <- preuOriginal * 0.15; | ||
+ | 3: descompte <- preuOriginal * 0.20; | ||
+ | De Otro Modo: descompte <- 0; | ||
+ | FinSegun | ||
+ | |||
+ | preuFinal <- preuOriginal - descompte; | ||
+ | |||
+ | Escribir "Article: ", nom | ||
+ | Escribir "Preu original: ", preuOriginal | ||
+ | Escribir "Descompte: ", descompte | ||
+ | Escribir "Preu final: ", preuFinal | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 6. Utilitzant l'estructura Segun ..., fes un algorisme en pseudocodi per calcular l'àrea de qualsevol de les següents figures geomètriques: Quadrat, Rectangle, Triangle i Cercle. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Area | ||
+ | |||
+ | Definir figura Como Cadena; | ||
+ | Definir area, costat, ample, llarg, base, alçada, radi Como Real; | ||
+ | |||
+ | Escribir "Escull la figura geomètrica" | ||
+ | Escribir "Quadrat , Rectangle , Triangle , Cercle" | ||
+ | Leer figura | ||
+ | |||
+ | Segun figura Hacer | ||
+ | "Quadrat" : | ||
+ | Escribir "Introdueix la mida d'un costat del quadrat" | ||
+ | Leer costat | ||
+ | area <- costat * costat | ||
+ | |||
+ | "Rectangle" : | ||
+ | Escribir "Introdueix l'ample del rectangle" | ||
+ | Leer ample | ||
+ | Escribir "Introdueix el llarg del rectangle" | ||
+ | Leer llarg | ||
+ | area <- ample * llarg | ||
+ | |||
+ | "Triangle" : | ||
+ | Escribir "Introdueix la alçada del triangle"; | ||
+ | Leer alçada; | ||
+ | Escribir "Introdueix la base del triangle"; | ||
+ | Leer base; | ||
+ | area <- (base * alçada) / 2; | ||
+ | |||
+ | "Cercle" : | ||
+ | Escribir "Ingrese el radio del circulo"; | ||
+ | Leer radi: | ||
+ | area <- PI * radi * radi; | ||
+ | FinSegun | ||
+ | |||
+ | Escribir "l'àrea de la figura és: " , area; | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | ==Exercicis estructura repetitiva== | ||
+ | |||
+ | ===Para=== | ||
+ | |||
+ | 1. Crea una algorisme amb pseudocodi que demani un número i calculi el seu factorial (El factorial d'un nombre és el producte de tots els enters entre 1 i el mateix nombre i es representa pel nombre seguit d'un signe d'exclamació. Per exemple 5! = 1x2x3x4x5=120) | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Necessito acumular les successives multiplicacions, començant per 2 fins al número indicat. | ||
+ | ::Dades d'entrada: número per calcular el factorial comptador per in comptant els números des de 2 al nombre. | ||
+ | ::Informació de sortida: El resultat del factorial | ||
+ | ::Variables: num, comptador (enter), resultat (real) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir nombre | ||
+ | ::2. Inicialitza variables: resultat = 1 | ||
+ | ::3. Per a comptador=2 fins num | ||
+ | :::::4. resultat=resultat*comptador | ||
+ | ::5. Mostrar resultat | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Factorial | ||
+ | Definir num,comptador como Entero; | ||
+ | Definir resultat como Real; | ||
+ | resultat <- 1; | ||
+ | Escribir Sin Saltar "Digue'm un número:"; | ||
+ | Leer num; | ||
+ | Para comptador<-2 Hasta num Hacer | ||
+ | resultat <- resultat * comptador; | ||
+ | FinPara | ||
+ | Escribir "El resultat és", resultat; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 2. Feu un algorisme que imprimeixi tots els números parells entre dos números que se li demanin a l'usuari. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Llegim un nombre. Si és senar, li sumo 1 i ja és parell. Llegim el segon número. | ||
+ | ::Escric el número des del primer fins al segon de dos en dos. | ||
+ | ::Dades d'entrada: dos números | ||
+ | ::Informació de sortida: Els nombres parells que hi ha entre els dos anteriors | ||
+ | ::Variables: num, num1, num2 (enter) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir num1,num2 | ||
+ | ::2. Si num1 és senar -> num1=num1+1 | ||
+ | ::3. Des de num1 fins a num2 de 2 en 2 | ||
+ | ::::4. Escriure el número | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso NumerosParells | ||
+ | Definir num,num1,num2 Como Entero; | ||
+ | Escribir Sin Saltar "Introdueix el número 1:"; | ||
+ | Leer num1; | ||
+ | Escribir Sin Saltar "Introdueix el número 2:"; | ||
+ | Leer num2; | ||
+ | Si num1 % 2 = 1 Entonces | ||
+ | num1<-num1+1; | ||
+ | FinSi | ||
+ | Para num<-num1 Hasta num2 Con Paso 2 Hacer | ||
+ | Escribir Sin Salta saltar num," "; | ||
+ | FinPara | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 3. Realitzar un algorisme que demani números (es demanarà per teclat la quantitat de números a introduir). El programa ha d'informar de quants números introduïts són més grans que 0, menors que 0 i iguals a 0. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Es demana la quantitat de números que es llegiran. Anem introduint números. | ||
+ | ::Hem de comptar els positius, negatius i zeros. | ||
+ | ::Dades d'entrada: Quantitat de números, els números. | ||
+ | ::Informació de sortida: Quantitat de positius, de negatius i de zeros. | ||
+ | ::Variables: quantitat_num,num,cont_positius,cont_negatius,cont_zeros(enters) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Inicialitzo els comptadors | ||
+ | ::2. Llegir quantitat de números | ||
+ | ::3. Des d'1 fins a quantitat de números | ||
+ | ::::4. Llegir num | ||
+ | ::::5. Si num> 0-> increment cont_positius | ||
+ | ::::6. Si num< 0-> increment cont_negatius | ||
+ | ::::7. Si num = 0-> increment cont_zeros. | ||
+ | ::8Mostra cont_postius, cont_negatius, cont_zeros | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso ComptarNumerosPositiusNegatiusIZeros | ||
+ | Definir num Como Entero; | ||
+ | Definir quantitat_num,i Como Entero; | ||
+ | Definir cont_negatius,cont_positius,cont_zeros omo Entero; | ||
+ | cont_negatius <- 0; | ||
+ | cont_positius <- 0; | ||
+ | cont_zeros <- 0; | ||
+ | Escribir "Quants números introduiràs?:"; | ||
+ | Leer quantitat_num; | ||
+ | Para a i<-1 Hasta quantitat_num Hacer | ||
+ | Escribir "Nombre ",i,":" ; | ||
+ | Leer num; | ||
+ | Si num>0 Entonces | ||
+ | cont_positius <- cont_positius + 1; | ||
+ | SiNo | ||
+ | Si num<0 Entonces | ||
+ | cont_negatius <- cont_negatius + 1; | ||
+ | Sinó | ||
+ | cont_zeros <- cont_zeros + 1; | ||
+ | FinSi | ||
+ | FinSi | ||
+ | FinPara | ||
+ | Escribir "Números positius:",cont_positius; | ||
+ | Escribir "Números negatius:",cont_negatius; | ||
+ | Escribir "Nombre igual a 0:",cont_zeros; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 4. Feu un algorisme que mostri la taula de multiplicar d'un número introduït per teclat. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Llegim el número del que volem mostrar la taula | ||
+ | ::Necessitem un comptador per comptar d'1 a 10 | ||
+ | :.Hem de repetir 10 vegades -> A cada volta hem de mostrar: el comptador * el número = resultat de la multiplicació | ||
+ | ::Dades d'entrada: El número de la taula i un comptador d'1 a 10. | ||
+ | ::Informació de sortida: Les 10 operacions de la taula de multiplicació | ||
+ | ::Variables: taula,num (enters) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir taula | ||
+ | ::2. Des de nombre d'1 a 10 | ||
+ | ::::3. Mostrar num * taula = (num*taula) | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso TaulaMultiplicar | ||
+ | Definir taula i Como Entero; | ||
+ | Escribir Sin Saltar "De quin número vols mostrar la taula de multiplicar?:"; | ||
+ | Leer taula; | ||
+ | Para num<-1 Hasta 10 Hacer | ||
+ | Escribir num," * ",taula," = ",num*taula; | ||
+ | FinPara | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 5. Feu un algorisme que mostri les taules de multiplicar del 1 al 10. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::He de repetir 10 vegades (des del número 1 fins al 10) mostrar la taula de multiplicar d'aquest número. | ||
+ | ::Com hem vist en l'exercici 4, per fer una taula de multiplicar hem de repetir 10 vegades per mostrar cada línia de la taula. | ||
+ | ::Per tant necessito dos bucles imbricats. | ||
+ | ::Dades d'entrada: Res | ||
+ | ::Informació de sortida: Les deu taules de multiplicar | ||
+ | ::Variables: taula,num (enters) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Per a taula des d'1 fins a 10 | ||
+ | ::::2. Per num des d'1 fins a 10 | ||
+ | ::::::3. Mostrar taula * num = (taula*num) | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso TaulesDeMultiplicar | ||
+ | Definir taula,num Como Entero; | ||
+ | Para taula<-1 Hasta 10 Hacer | ||
+ | Para num<-1 Hasta 10 Hacer | ||
+ | Escribir taula," * ",num," = ", taula*num; | ||
+ | FinPara | ||
+ | Esperar Tecla; | ||
+ | FinPara | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 6. Una empresa té el registre de les hores que treballa diàriament un empleat durant la setmana (sis dies) i requereix determinar-ne el total, així com el sou que rebrà per les hores treballades. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Calcular el sou i les hores treballades dun empleat en una setmana (6 dies). | ||
+ | ::Cal anar introduint la quantitat d'hores que treballa cada dia. | ||
+ | ::Hem de saber quant es paga l'hora treballada. | ||
+ | ::Cal anar acumulant les hores treballades cada dia, per poder calcular el sou. | ||
+ | ::Dades d'entrada: Sou per hora, hores. | ||
+ | ::Informació de sortida: Les hores acumulades, i el sou de la setmana. | ||
+ | ::Variables: sou_per_hora (Real),hores, hores_acum, dia(enter) | ||
+ | |||
+ | :Disseny | ||
+ | ::1.- Inicialitzo les hores acumulades | ||
+ | ::2.- Llegir sou per hora (sou) | ||
+ | ::3.- Des del dia 1 al 6 | ||
+ | ::::4.- Llegir hores treballades | ||
+ | ::::5.- Acumular les hores treballades | ||
+ | ::6.- Mostrar Les hores acumulades | ||
+ | ::7.- Mostrar el sou -> hores acumulades * sou per hora | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso CalcularSou | ||
+ | Definir sou_per_hora Como Real; | ||
+ | Definir hores, hores_acum Como a Entero; | ||
+ | Definir dia Como Entero; | ||
+ | hores_acum<-0; | ||
+ | Escribir sin saltar "Introdueix el sou per hora:"; | ||
+ | Leer sou_per_hora; | ||
+ | Para dia<-1 hasta 6 Hacer | ||
+ | Escribir "Quantes hores has treballat el dia "dia,"?:"; | ||
+ | Leer hores; | ||
+ | hores_acum <- hores_acum + hores; | ||
+ | FinPara | ||
+ | Escribir "Hores acumulades a la setmana:",hores_acum; | ||
+ | Escribir "Sou:",sou_per_hora*hores_acum; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 7. Una empresa paga als seus empleats amb base a les hores treballades a la setmana. | ||
+ | :Realitzeu un algorisme per determinar el sou setmanal de N treballadors i, a més, calculeu quant va pagar l'empresa pels N empleats. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Cal calcular el sou d'un nombre de treballadors, per tant necessitem el nombre de treballadors que té lempresa. També necessitem saber el sou per hora, i per cada treballador cal demanar les hores que ha treballat a la setmana. | ||
+ | ::Per cada treballador cal mostrar el sou setmanal i en finalitzar el programa mostrem el total de sous pagats. | ||
+ | ::Dades d'entrada: Nombre de treballadors, sou per hora, hores treballades per cada treballador. | ||
+ | ::Informació de sortida: Sou de cada treballador, total pagat. | ||
+ | ::Variables: hores_per_setmana, hores_acum (enter), sou_per_hora (real), treballadors, treballador (enters) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Inicialitzo l'acumulador d'hores | ||
+ | ::2. Llegir el nombre de treballadors | ||
+ | ::3. Llegir sou per hora | ||
+ | ::4. Per cada treballador | ||
+ | ::::5. Llegir hores treballades per setmana | ||
+ | ::::6. Mostrar sou (hores_per_setmana*sou_per_hora | ||
+ | ::::7. Acumular hores treballades | ||
+ | ::8. Mostrar total de pagament (hores_acum*sou_per_hora) | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso CalcularSalari | ||
+ | Definir hores_per_setmana, hores_acum Como Entero; | ||
+ | Definir sou_per_hora Como Real; | ||
+ | Definir treballadors, treballador Como Entero; | ||
+ | hores_acum<-0; | ||
+ | Escribir Sin Saltar "Quants treballadors té l'empresa?:"; | ||
+ | Leer treballadors; | ||
+ | Escribir Sin Saltar "Sou per hora:"; | ||
+ | Leer sou_per_hora; | ||
+ | Para treballador<-1 Hasta treballadors Hacer | ||
+ | Escribir Sin Saltar "Quantes hores ha treballat el treballador, treballador, ?"; | ||
+ | Leer hores_per_setmana; | ||
+ | hores_acum<-horas_acum+hores_per_setmana; | ||
+ | Escribir "El treballador ",treballador," té de sou ",hores_per_setmana*sou_per_hora; | ||
+ | FinPara | ||
+ | Escribir "El pagament als "treballadors," treballadors és: ",hores_acum*sou_per_hora; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | ===Mientras=== | ||
+ | |||
+ | |||
+ | |||
+ | 1, Crea un algoritme amb pseudoci que permeti endevinar un número. L'aplicació genera un número aleatori de l'1 al 100. A continuació va demanant números i va responent si el nombre a endevinar és més gran o més petit que l'introduït, a més dels intents que et queden (tens 10 intents per encertar-ho). | ||
+ | |||
+ | El programa acaba quan s'encerta el número (a més et diu quants intents ho has encertat), si s'arriba al límit d'intents et mostra el número que havia generat. | ||
+ | |||
+ | :Anàlisi | ||
+ | :: Hem de generar un nombre aleatori (funció aleatori) de l'1 al 100. | ||
+ | :: Necessitem un comptador per comptar els 10 intents. Al principi val 10 i anirà decrementant. | ||
+ | :: Mentre no encerti el número i em quedin intents: | ||
+ | :: Llegeixo un número | ||
+ | :: Ho comparo amb el nombre generat (dic si és més gran o més petit) | ||
+ | :: Demano un altre nombre | ||
+ | :: Puc acabar el bucle per dues raons: si he endevinat el número (he guanyat) i mostro els intents que he necessitat. | ||
+ | :: sinó he perdut, he utilitzat els 10 intents i mostro el número generat. | ||
+ | :: Dades d'entrada: número demanat a l'usuari. | ||
+ | :: Informació de sortida: Has guanyat i els intents, o has perdut i el número. | ||
+ | :: Variables: num_scret, num_ingressat, intents (enters) | ||
+ | |||
+ | :Disseny | ||
+ | :: 1. Genero un nombre aleatori de l'1 al 100 (num_secret) | ||
+ | :: 2. intents = 10 | ||
+ | :: 3. Llegir num | ||
+ | :: 4. Mentre num<> num_secret i intents>1 | ||
+ | :::: 5. Si num_screto>num -> Escriure "Molt baix" | ||
+ | :::: 6. Si num_screto<num -> Escriure "Molt alt" | ||
+ | :::: 7. intents=intents-1 | ||
+ | :::: 8. Escriure intents | ||
+ | :::: 9. Llegir num | ||
+ | :: 10. Si num_secreo=num -> Escriure "Has guanyat", intents | ||
+ | :: 11. SiNo -> Escriure "Has perdut, num_secret | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Adivina_Numero | ||
+ | Definir intents,num_secret,num_ingressat Como Entero; | ||
+ | intents <- 10; | ||
+ | num_secret <- Aleatorio(1,100); | ||
+ | |||
+ | Escribir "Endevineu el nombre (d'1 a 100):"; | ||
+ | Leer num_ingressat | ||
+ | Mientras num_secret<>num_ingressat Y intents>1 Hacer | ||
+ | Si num_secret>num_ingressat Entonces | ||
+ | Escribir "Molt baix"; | ||
+ | Sino | ||
+ | Escribir "Molt alt"; | ||
+ | FinSi | ||
+ | intents <- intents-1; | ||
+ | Escribir "Li queden ",intents," intents:"; | ||
+ | Leer num_ingressat; | ||
+ | FinMientras | ||
+ | |||
+ | Si num_secret=num_ingressat Entonces | ||
+ | Escribir "Exacte! Vostè endevino a ",11-intents," intents."; | ||
+ | Sino | ||
+ | Escribir "El nombre era: ",num_secret; | ||
+ | FinSi | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 2.Algorisme que demani números fins que s'introdueixi un zero. Heu d'imprimir la suma i la mitjana de tots els números introduïts. | ||
+ | |||
+ | :Anàlisi | ||
+ | :: Anem demanant números fins a introduir un 0. | ||
+ | :: Necessitem un acumulador per anar fent les sumes intermèdies. | ||
+ | :: A més necessitem un comptador, per calcular la mitjana (suma/quantitat) | ||
+ | :: Dades d'entrada: números, un acumulador per sumar i un comptador | ||
+ | :: Informació de sortida: La suma i la mitjana | ||
+ | :: Variables:num, suma, cont enters) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Inicialitzat: suma = 0, cont = 0 | ||
+ | ::2. Llegir num | ||
+ | ::3. Mentre num<>0 | ||
+ | :::: 4. Acumul: suma = suma + num | ||
+ | :::: 5. Conte si num<>0: cont=cont+1 | ||
+ | :::. 6. Llegir num | ||
+ | ::7. Si cont=0 (No hem introduït cap número)-> mitjana=0 | ||
+ | ::8. SiNo -> mitjana=suma/cont; | ||
+ | ::9. Mostrar suma i mitjana | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso CalcularSumaMitjana | ||
+ | Definir num Como Entero; | ||
+ | Definir suma,cont como Entero; | ||
+ | Definir mitjana Como Real; | ||
+ | suma <- 0; | ||
+ | cont <-0; | ||
+ | //Amb el mentre si el primer número és 0 no entrarà al bucle | ||
+ | Escribir "Nombre (0 per sortir):" | ||
+ | Leer num; | ||
+ | Mientras num<>0 Hacer | ||
+ | suma <- suma + num; | ||
+ | cont <- cont + 1; | ||
+ | Escribir "Nombre (0 per sortir):"; | ||
+ | Leer num; | ||
+ | FinMientras | ||
+ | //Si cont=0 no puc fer la divisió | ||
+ | Si cont>0 Entonces | ||
+ | mitjana <- suma / cont; | ||
+ | SiNo | ||
+ | mitjana <-0; | ||
+ | FinSi | ||
+ | |||
+ | Escribir "Suma:",suma; | ||
+ | Escribir "Mitjana:",mitjana; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 3. Crea una aplicació que demani un número i calculi el seu factorial (El factorial de un nombre és el producte de tots els enters entre 1 i el mateix nombre i es representa pel nombre seguit d'un signe d'exclamació. | ||
+ | ::Per exemple 5! = 1x2x3x4x5=120 | ||
+ | |||
+ | :Anàlisi | ||
+ | :: Necessito acumular les successives multiplicacions, començant per 2 fins al número indicat. | ||
+ | :: Dades d'entrada: número per calcular el factorial comptador per in comptant els números des de 2 al nombre | ||
+ | :: Informació de sortida: El resultat del factorial | ||
+ | :: Variables: num, comptador (entero), resultat (real) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Llegir nombre | ||
+ | :.2. Inicials variables | ||
+ | :: comptador = 2 | ||
+ | :: resultat = 1 | ||
+ | :: 3. Mentre comptador<=num fer | ||
+ | :::: 4. resultat=resultat*comptador | ||
+ | :::: 5. comptador=comptador+1 | ||
+ | :. 6. Mostrar resultat | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Factorial | ||
+ | Definir num,comptador Como Entero; | ||
+ | Definir resultat Como Real; | ||
+ | resultat <- 1; | ||
+ | Escribir Sin Saltar "Digue'm un número:"; | ||
+ | Leer num; | ||
+ | comptador <- 2; | ||
+ | Mientras comptador<=num Hacer | ||
+ | resultat <- resultat * comptador; | ||
+ | comptador <- comptador + 1; | ||
+ | FinMientras | ||
+ | Escribir "El resultat és ", resultat; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 4. Feu una algorisme amb pseudocodi que digui si un número introduït per teclat és primer o no. | ||
+ | ::Un nombre primer és aquell que només és divisible entre ell mateix i la unitat. | ||
+ | ::Nota: N'hi ha prou amb provar fins a l'arrel quadrada del número per veure si és divisible per algun altre número. | ||
+ | |||
+ | :Anàlisi | ||
+ | ::Llegim un número i anem comprovant si és divisible entre 2 fins a l'arrel quadrada del nombre. Si és divisible per algun número no és primer. | ||
+ | ::Si no és divisible per cap nombre és primer. | ||
+ | ::Per saber si és divisible fem servir l'operador mòdul. | ||
+ | ::Dades d'entrada: el número a comprovar si és primer o no | ||
+ | ::Informació de sortida: Un missatge dient si és primer o no | ||
+ | ::Variables: numero_es_primer (entero), num (entero) comptador des de 2 fins arrel quadrada del num_es_primer, es_primer (lógico) | ||
+ | |||
+ | :Disseny | ||
+ | ::1. Suposo que el nombre és primer -> és_primer<-Verdadero | ||
+ | ::2. Llegir num_ces_primer | ||
+ | ::3. Mentre no final (num < número primer?) i el número primer? no sigui divisible pel num | ||
+ | ::::4. Incrementem el num | ||
+ | ::5. Si es_primer -> Mostra "És primer" | ||
+ | ::6. Si no -> Mostra "No és primer" | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso EsPrimo | ||
+ | Definir numero_es_primer,num Como Entero; | ||
+ | Escribir Sin Saltar "Introdueix un número per comprovar si és primer:"; | ||
+ | Leer numero_es_primer; | ||
+ | mum <- 2; | ||
+ | Mientras num<-numero_es_primer Y numero_es_primer % num = 0 Hacer | ||
+ | num <- num +1; | ||
+ | FinMientras | ||
+ | Si num = numero_es_primer Entonces | ||
+ | Escribir "És Primer"; | ||
+ | SiNo | ||
+ | Escribir "No és Primer"; | ||
+ | FinSi | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 5. Escriviu un algoritme amb pseudocodi que demani el límit inferior i superior d'un interval. | ||
+ | : Si el límit inferior és més gran que el superior ho ha de tornar a demanar. | ||
+ | : A continuació es van introduint números fins que introduïm el 0. | ||
+ | : Quan acabi el programa donarà les informacions següents: | ||
+ | ::* La suma dels números que estan dins de l'interval (interval obert). | ||
+ | ::* Quants números estan fora de l'interval. | ||
+ | ::* He informat si hem introduït algun nombre igual als límits de l'interval. | ||
+ | |||
+ | :Anàlisi | ||
+ | :: Demanem un interval (límit inferior i superior) | ||
+ | :: Ens hem d'assegurar que el límit inferior sigui menor que el superior. | ||
+ | :: Es van demanant números fins que s'introdueixi el 0. | ||
+ | :: Si el nombre pertany a l'interval -> ho vaig sumant (necessito un acumulador) | ||
+ | :: Si el número no pertany a l'interval, ho explico (necessito un comptador) | ||
+ | :: Si el nombre és igual a algun límit, allò índic (necessito un indicador) | ||
+ | :: Al final mostro la suma dels números que pertanyen a l'interval. | ||
+ | :: Mostreu el comptador de número que no pertanyen a l'interval. | ||
+ | :: Indico si hem introduït un número igual a algun límit | ||
+ | :: Dades d'entrada: límit superior i inferior de l'interval i els números. | ||
+ | :: Informació de sortida: La suma dels que pertanyen a l'interval, el comptador dels números que no pertanyen a l'interval i indico si un nombre ha estat igual a algun interval | ||
+ | :: Variables: lim_inf, lim_sup, num, suma_dins_interval, cont_fora_interval (enters), igual_limits (Lògic) | ||
+ | |||
+ | :Diseny | ||
+ | ::1. Inicialitzo l'acumulador, el comptador i l'indicat | ||
+ | ::2. Repetir -> llegir lim_inf i lim_sup fins que lim_inf<lim_sup | ||
+ | ::3. Llegir núm | ||
+ | ::4. Mentre num sigui diferent de 0 | ||
+ | ::::5. Si num pertany a l'interval -> acumula la suma | ||
+ | ::::6. Sinó -> increment comptador | ||
+ | ::::7. Si és igual a algun interval -> Ho indico (indicador a cert) | ||
+ | ::::8. Llegir núm | ||
+ | ::9. Mostra la suma dels números pertanyents a l'interval | ||
+ | ::10. Mostra el comptador de números no pertanyents a l'interval | ||
+ | ::11. Si l'indicador = Veritable -> Mostra "Un nombre = a interval" | ||
+ | ::12. SiNo -> Mostra "No has introduït un número igual a l'interval | ||
+ | |||
+ | |||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Interval | ||
+ | Definir lim_inf, lim_sup como Entero; | ||
+ | Definir num como Entero; | ||
+ | Definir suma_dins_interval Como Entero; | ||
+ | Definir cont_fora_interval Como Entero; | ||
+ | Definir igual_limits Como Logico; | ||
+ | suma_dins_interval <- 0; | ||
+ | cont_fora_interval <- 0; | ||
+ | igual_limits <- Falso; | ||
+ | //M'asseguro que el lim_inf és menor que el lim_sup | ||
+ | Repetir | ||
+ | Escribir "Introdueix el límit inferior de l'interval:"; | ||
+ | Leer lim_inf; | ||
+ | Escribir "Introdueix el límit superior de l'interval:"; | ||
+ | Leer lim_sup; | ||
+ | Si lim_inf>lim_sup Entonces | ||
+ | Escribir "ERROR: El límit inferior ha de ser menor que el superior."; | ||
+ | FinSi | ||
+ | Hasta Que lim_inf<=lim_sup; | ||
+ | |||
+ | Escribir Sin Saltar "Introdueix un número (0, per sortir):"; | ||
+ | Leer num; | ||
+ | Mientras num<>0 Hacer | ||
+ | //Pertany a l'interval | ||
+ | Si num>lim_inf Y num<lim_sup Entonces | ||
+ | suma_dins_interval<- suma_dins_interval + num; | ||
+ | SiNo | ||
+ | //No pertany a l'interval | ||
+ | cont_fora_interval <- cont_fuera_intervalo + 1; | ||
+ | FinSi | ||
+ | //Nombre igual a algun dels límits | ||
+ | Si num=lim_inf O num=lim_sup Entonces | ||
+ | igual_limits <- Verdadero; | ||
+ | FinSi | ||
+ | Escribir Sin Saltar "Introdueix un número (0, per sortir):"; | ||
+ | Leer num; | ||
+ | FinMientras | ||
+ | Escribir "La suma dels números dins de l'interval és ",suma_dins_interval; | ||
+ | Escribir "La quantitat de números fora de l'interval és ",cont_fora_interval; | ||
+ | Si igual_limits Entonces | ||
+ | Escribir "S'ha introduït algun nombre igual als límits de l'interval."; | ||
+ | SiNo | ||
+ | Escribir "No s'ha introduït cap número igual als límits de l'interval."; | ||
+ | FinSi | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | ===Més exercicis iteratius=== | ||
+ | |||
+ | 1. Calculeu les qualificacions d'un grup d'alumnes. La nota final de cada alumne es calcula segons el criteri següent: la part pràctica val el 10%; la part de problemes val el 50% i la part teòrica el 40%. L'algorisme llegirà el nom de l'alumne, les tres notes, escriurà el resultat i tornarà a demanar les dades del següent alumne fins que el nom sigui una cadena buida. Les notes han d'estar entre 0 i 10, si no ho estan, no imprimirà les notes, mostrarà un missatge d'error i tornarà a demanar un altre alumne. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Notes_Alumnes | ||
+ | Definir alumne Como Cadena; | ||
+ | Definir nota_practica, nota_problemes, nota_teoria, nota_final Como Real; | ||
+ | Escribir "Introduïu el nom de l'alumne: "; | ||
+ | Leer alumne; | ||
+ | Mientras alumne<>"" Hacer | ||
+ | //si introduïm un nom d'alumne correcte, entrés al bucle | ||
+ | Escribir "Introdueix la nota de la pràctica: "; | ||
+ | Leer nota_practica; | ||
+ | Escribir "Introdueix la nota dels problemes: "; | ||
+ | Leer nota_problemes; | ||
+ | Escribir "Introdueix la nota de teoria"; | ||
+ | Leer nota_teoria; | ||
+ | //comprovem si les notes tenen un rang correcte | ||
+ | Si (nota_practica<=10 y nota_practica>=0) y (nota_problemes<=10 y nota_problemes>=0) y (nota_teoria<=10 y nota_teoria>=0) Entonces | ||
+ | Escribir "L'alumne ", alumne; | ||
+ | Escribir "La nota practica és " nota_practica; | ||
+ | Escribir "La nota de problemes és ", nota_problemes; | ||
+ | Escribir "La nota de teoria és " nota_teoria; | ||
+ | nota_final<-(nota_practica * 0,1)+(nota_problemes * 0.5)+(nota_teoria*0.4); | ||
+ | Escribir "La nota final és " nota_final; | ||
+ | SiNo | ||
+ | Escribir "Has escrit una nota incorrecta, Torna a introduir les notes!"; | ||
+ | FinSi | ||
+ | Escribir "Introdueix el nom d'un altre alumne"; | ||
+ | Leer alumne; | ||
+ | FinMientras | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 2. Un conductor d'UBER va prendre el temps (en minuts) que es va demorar des del punt de partida fins a la destinació. Elaboreu un algorisme amb pseudocodi que permeti ingressar cadascun dels temps en minuts i que mostri: | ||
+ | |||
+ | ::a) La mitjana dels temps | ||
+ | ::b) El nombre de vegades que es va demorar menys de 30 minuts | ||
+ | ::c) El nombre de vegades que es va demorar entre 30 a 45 minuts i | ||
+ | ::d) Finalment el nombre de vegades que es va demorar més de 45 minuts. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso UBER | ||
+ | Definir nroViatges,temps,acum,cont,contMenys30,contEntre30i45,contMes45 Como Entero; | ||
+ | Definir mitjana Como Real; | ||
+ | |||
+ | contMenys30 <- 0; //comptador | ||
+ | contEntre30i45 <- 0; | ||
+ | contMes45 <- 0; | ||
+ | acum <- 0; //acumulador | ||
+ | |||
+ | Escribir "Introduïu el número de viatges del dia: "; | ||
+ | Leer nroViatges; | ||
+ | |||
+ | cont <- 1; | ||
+ | Mientras cont <= nroViajes Hacer | ||
+ | Escribir "Introduïu el temps del viatge ",cont; | ||
+ | Leer temps; | ||
+ | |||
+ | si temps<30 Entonces | ||
+ | contMenys30 <- contMenys30 + 1; | ||
+ | Sino | ||
+ | si temps >= 30 y temps < 45 Entonces | ||
+ | contEntre30i45 <- contEntre30i45 + 1; | ||
+ | Sino | ||
+ | contMes45 <- contMes45 + 1; | ||
+ | FinSi | ||
+ | FinSi | ||
+ | |||
+ | acum <- acum + temps; | ||
+ | cont <- cont + 1; | ||
+ | Fin Mientras | ||
+ | |||
+ | mitjana <- acum / nroViajes; | ||
+ | |||
+ | Escribir "Nro de viatges : ",nroViatges; | ||
+ | Escribir "Mitjana dels temps: ",mitjana; | ||
+ | Escribir "Vegades que es va demorar menys de 30 minuts:: ",contMenys30; | ||
+ | Escribir "Vegades que es va demorar entre 30 a 45 minuts: ",contEntre30i45; | ||
+ | Escribir "Vegades que es va demorar més de 45 minuts: ",contMes45; | ||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | <!----> | ||
+ | ===Exercicis prova=== | ||
+ | |||
+ | 1. Demana un número enter positiu per teclat. Si el número és senar, el multipliquem per 3 i li sumem 1, si és parell el dividim per 2. Repetim aquest procés amb el nou valor acabant quan el número és 1. Per exemple, la següent seqüència és generada quan N=22: | ||
+ | |||
+ | ::22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 | ||
+ | |||
+ | Fes un programa que fent aquests passos ens digui la quantitat de números generats fins a aconseguir arribar a l'1. A l'exemple anterior seria 16. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso TresN | ||
+ | Definir num, cont Como Entero; | ||
+ | |||
+ | Escribir "Escriu un numero enter i positiu: " | ||
+ | |||
+ | Leer num; | ||
+ | |||
+ | Si num > 0 Entonces | ||
+ | cont <- 1; | ||
+ | |||
+ | Mientras num != 1 Hacer | ||
+ | Si num % 2 = 0 Entonces | ||
+ | num <- num / 2; | ||
+ | SiNo | ||
+ | num <- (num * 3) + 1; | ||
+ | |||
+ | cont <- cont + 1; | ||
+ | Escribir Sin Saltar num, " "; | ||
+ | FinMientras | ||
+ | |||
+ | Escribir "Ha donat ",cont," voltes."; | ||
+ | SiNo | ||
+ | Escribir "El número ha de ser positiu!!"); | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 2. Llegirem dos números que representaran una data, el primer representa el dia i el segon representa el mes. Cal dir quina data serà després de cinc dies (suposarem que febrer té sempre 28 dies) | ||
+ | |||
+ | Exemples: | ||
+ | <pre> | ||
+ | Entrada: 28 3 Sortida: 2/4 | ||
+ | Entrada: 27 12 Sortida: 1/1 | ||
+ | Entrada: 26 2 Sortida: 2/3 | ||
+ | </pre> | ||
+ | <source lang="java"> | ||
+ | Proceso Data | ||
+ | Definir dia, mes, diesPerMes, diaSeguent, mesSeguent Como Entero; | ||
+ | |||
+ | Escribir "Introdueix el dia: "; | ||
+ | Leer dia; | ||
+ | Escribir "Introdueix el mes: "; | ||
+ | Leer mes; | ||
+ | |||
+ | diesPerMes <- 0; | ||
+ | |||
+ | Segun Mes Hacer | ||
+ | 1, 3, 5, 7, 8, 10, 12: diesPerMes <- 31; | ||
+ | 4, 6, 9, 11: diesPerMes <- 30; | ||
+ | 2: diesPerMes <- 28; | ||
+ | FinSegun | ||
+ | |||
+ | diaSeguent <- dia+5; | ||
+ | |||
+ | Si diaSeguent>diesPerMes Entonces | ||
+ | diaSeguent <- diaSeguent-diesPerMes; | ||
+ | mes <-- mes + 1; | ||
+ | Si mes>12 Entonces | ||
+ | mes <-- 1; | ||
+ | FinSi | ||
+ | FinSi | ||
+ | |||
+ | Escribir diaSeguent, " ", mes; | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 3. Donat un missatge secret de 10000 caràcters cal saber si dins aquest missatge apareix la seqüència “XY” (els dos caràcters seguits). Només cal dir si apareix o si no apareix. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso XY | ||
+ | Definir carActual, carAnterior Como Caracter; | ||
+ | Definir cont Como Entero; | ||
+ | |||
+ | carAnterior=" "; | ||
+ | Escribir "Introdueix un caràcter: "; | ||
+ | Leer carActual; | ||
+ | |||
+ | cont <- 1; | ||
+ | |||
+ | Mientras (cont < 10000 && (carAnterior != 'X' O carActual != 'Y')) Hacer | ||
+ | |||
+ | carAnterior = carActual; | ||
+ | Escribir "Introdueix un caràcter: "; | ||
+ | Leer carActual; | ||
+ | cont <- cont + 1; | ||
+ | |||
+ | FinMientras | ||
+ | |||
+ | Si (carAnterior != 'X' Y carActual != 'Y') Entonces | ||
+ | Escribir "Apareix la seqüència XY"; | ||
+ | SiNo | ||
+ | Escribir "No apareix la seqüència XY"; | ||
+ | FinSi | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | 4. Donat un número entrat per teclat cal escriure el primer divisor d’aquest número. Aquest ha de ser diferent de 1 i del mateix número. Si no hi hagués cap, sortirà un missatge que informi d'això. | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Divisor | ||
+ | Definir divisor, numero Como Entero; | ||
+ | |||
+ | Escribir "Introdueix el número: "; | ||
+ | Leer numero; | ||
+ | |||
+ | divisor <- 2; | ||
+ | |||
+ | Mientras (divisor < numero Y numero % divisor != 0) Hacer | ||
+ | |||
+ | divisor <- divisor + 1; | ||
+ | |||
+ | FinMientras | ||
+ | |||
+ | Si divisor = numero Entonces | ||
+ | Escribir "No té cap divisor"; | ||
+ | SiNo | ||
+ | Escribir "El primer divisor és: ", divisor; | ||
+ | FinSi | ||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | |||
+ | 5. Una línia horitzontal la definim per les dues coordenades x dels dos extrems. Un punt es troba a la mateixa línia horitzontal i s'estableix amb la seva coordenada x. | ||
+ | |||
+ | El programa llegirà tres números, els dos primers seran els extrems de la línia (no tenen perquè estar ordenats) i el tercer serà la coordenada del punt. El programa ha de respondre si el punt està dins la línia i la distància a l’extrem més proper. | ||
+ | |||
+ | Exemples: | ||
+ | |||
+ | :Entrada: 10 5 7 | ||
+ | :::::5 7 10 | ||
+ | :::::'''|--------o------------|''' | ||
+ | :Sortida: Dins. Distància 2 | ||
+ | |||
+ | :Entrada: 8 10 5 | ||
+ | :::::5 8 10 | ||
+ | :::::o------------'''|--------|''' | ||
+ | :Sortida: Fora. Distància 3 | ||
+ | |||
+ | <source lang="java"> | ||
+ | Proceso Divisor | ||
+ | Definir x1, x2, punt, min, max, distanciaDreta, distanciaEsquerra Como Entero; | ||
+ | |||
+ | Escribir "Introdueix la primera coordenada de la línia: "; | ||
+ | Leer x1; | ||
+ | Escribir "Introdueix la segona coordenada de la línia: "; | ||
+ | Leer x2; | ||
+ | Escribir "Introdueix el punt: "; | ||
+ | Leer punt; | ||
+ | |||
+ | Si x1 < x2 Entonces | ||
+ | min <- x1; | ||
+ | max <- x2; | ||
+ | SiNo | ||
+ | min <- x2; | ||
+ | max <- x1; | ||
+ | FinSi | ||
+ | |||
+ | distanciaDreta = max - punt; | ||
+ | Si (distanciaDreta < 0) Entonces | ||
+ | distanciaDreta = distanciaDreta * -1; | ||
+ | FinSi | ||
+ | |||
+ | distanciaEsquerra = min - punt; | ||
+ | Si (distanciaEsquerra < 0) Entonces | ||
+ | distanciaEsquerra = distanciaEsquerra * -1; | ||
+ | FinSi | ||
+ | |||
+ | Si (punt >= min Y punt <= max) { | ||
+ | Escribir "Dins"; | ||
+ | SiNo | ||
+ | Escribir "Fora"; | ||
+ | FinSi | ||
+ | |||
+ | Si (distanciaEsquerra <= distanciaDreta) { | ||
+ | Escribir "Distància: ", distanciaEsquerra; | ||
+ | SiNo | ||
+ | Escribir "Distància: ", distanciaDreta; | ||
+ | FinSi | ||
+ | |||
+ | |||
+ | FinProceso | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | <!-- | ||
+ | == En català== | ||
+ | ===Exercicis previs=== | ||
+ | |||
+ | 1. Feu un algoritme amb pseudocodi per calcular la distancia recorreguda (m) per un mòbil que té una velocitat constant (m/s) durant un temps T. Considerar moviment rectilini uniforme. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Distancia Recorreguda (m) D | ||
+ | Entrada: | ||
+ | Velocitat constant (m/s) V | ||
+ | Temps (s) T | ||
+ | |||
+ | Inici | ||
+ | Llegir V | ||
+ | Llegir T | ||
+ | D = V * T | ||
+ | Escriure D | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 2. Feu un algoritme amb pseudocodi per obtenir la nota mitjà d'un estudiant a partir de les seves tres notes parcials. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Nota mitjà NM | ||
+ | Entrada: | ||
+ | Primera nota parcial N1 | ||
+ | Segona nota parcial N2 | ||
+ | Tercera nota parcial N3 | ||
+ | |||
+ | Inici | ||
+ | Llegir N1 | ||
+ | Llegir N2 | ||
+ | Llegir N3 | ||
+ | NM = (N1 + N2 + N3) / 3 | ||
+ | Escriure NM | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 3. Feu un algoritme amb pseudocodi que demani el nombre de respostes correctes, incorrectes i en blanc corresponents a una prova i mostri la puntuació final considerant, que per cada resposta correcte obtindrà 4 punts, per cada resposta incorrecta obtindrà -1 punt i per les respostes en blanc obtindrà 0 punts. | ||
+ | |||
+ | <pre> | ||
+ | Sortida: | ||
+ | Puntuació final PF | ||
+ | Entrada: | ||
+ | Nombre de respostes correctes RC | ||
+ | Nombre de respostes incorrectes RI | ||
+ | Nombre de respostes en blanc RB | ||
+ | Intermedi: | ||
+ | Punts de respostes correctes PRC | ||
+ | Punts de respostes incorrectes PRI | ||
+ | |||
+ | Inici | ||
+ | Llegir RC | ||
+ | Llegir RI | ||
+ | Llegir RB | ||
+ | PRC = RC * 4 | ||
+ | PRI = RI * -1 | ||
+ | PF = PRC + PRI | ||
+ | Escriure NM | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 4. Feu un algoritme amb pseudocodi per trobar la paga d'un treballador en funció de les hores treballades en el mes i de la tarifa per hora. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Paga P | ||
+ | Entrada: | ||
+ | Nombre d'hores treballades en el mes HT | ||
+ | Tarifa per hora TH | ||
+ | |||
+ | Inici | ||
+ | Llegir HT | ||
+ | Llegir TH | ||
+ | P = HT * TH | ||
+ | Escriure P | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 5. Feu un algoritme amb pseudocodi que a partir de l'any de naixement i de l'any actual ens indiqui si és o no major d'edat. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Missatge indicant si és o no major d'edat MSG | ||
+ | Entrada: | ||
+ | Any de naixement AN | ||
+ | Any actual AA | ||
+ | Intermedi: | ||
+ | Edat E | ||
+ | |||
+ | Inici | ||
+ | Llegir AN | ||
+ | Llegir AA | ||
+ | E = AA - AN | ||
+ | SI E >= 18 LLAVORS | ||
+ | MSG = "És major d'edat" | ||
+ | ALTRAMENT | ||
+ | MSG = "No és major d'edat" | ||
+ | FSI | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 6. Feu un algoritme amb pseudocodi que demani l'edat de dos germans i ens digui qui és el més gran i quants anys de diferència té amb el menor. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Missatge indicant si és o no major d'edat MSG | ||
+ | Diferencia d'edat entre els germans DE | ||
+ | Entrada: | ||
+ | Edat primer germà E1 | ||
+ | Edat segon germà E2 | ||
+ | Intermedi: | ||
+ | Diferencia d'edats DE | ||
+ | |||
+ | Inici | ||
+ | Llegir E1 | ||
+ | Llegir E2 | ||
+ | SI E >= 18 LLAVORS | ||
+ | MSG = "El primer germà és més gran, per " | ||
+ | DE = E1 - E2 | ||
+ | ALTRAMENT | ||
+ | MSG = "El segon germà és més gran, per " | ||
+ | DE = E2 - E1 | ||
+ | FSI | ||
+ | Escriure DE | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 7. Feu un algoritme amb pseudocodi que ens digui si una operari obté o no incentius en la seva producció setmanal (de dilluns a dissabte). Cal dir que per obtenir incentius cal que l'operari hagi obtingut una mitjà mínima en la seva producció diària de 100 unitats. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | L'operari obté o no incentius MSG | ||
+ | Entrada: | ||
+ | Producció de dilluns (unitats) PDll | ||
+ | Producció de dimarts (unitats) PDmt | ||
+ | Producció de dimecres (unitats) PDmc | ||
+ | Producció de dijous (unitats) PDj | ||
+ | Producció de divendres (unitats) PDv | ||
+ | Producció de dissabte (unitats) PDs | ||
+ | Intermedi: | ||
+ | Producció total PT | ||
+ | Producció Mitjà PM | ||
+ | |||
+ | Inici | ||
+ | Llegir PDll | ||
+ | Llegir PDmt | ||
+ | Llegir PDmc | ||
+ | Llegir PDj | ||
+ | Llegir PDv | ||
+ | Llegir PDs | ||
+ | PT = (PDll + PDmt + PDmc + PDj + PDv + PDs) | ||
+ | PP = PT / 6 | ||
+ | SI PP >= 100 LLAVORS | ||
+ | MSG = "Rebrà incentius" | ||
+ | ALTRAMENT | ||
+ | MSG = "No rebrà incentius" | ||
+ | FSI | ||
+ | Escriure MSG | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 8. Feu un algoritme amb pseudocodi que llegeixi 3 números enters diferents entre si i ens indiqui el número més gran dels tres. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Número més gran de 3 NM | ||
+ | Entrada: | ||
+ | Primer número enter N1 | ||
+ | Segon número enter N2 | ||
+ | Tercer número enter N3 | ||
+ | |||
+ | Inici | ||
+ | Llegir N1 | ||
+ | Llegir N2 | ||
+ | Llegir N3 | ||
+ | SI ((N1 > N2) I (N1 > N3) LLAVORS | ||
+ | NM = N1 | ||
+ | ALTRAMENT | ||
+ | SI (N2 > N3) LLAVORS | ||
+ | NM = N2 | ||
+ | ALTRAMENT | ||
+ | NM = N3 | ||
+ | FSI | ||
+ | FSI | ||
+ | Escriure NM | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 9. Feu un algoritme amb pseudocodi per identifica el tipus de triangle coneixent els seus costats. | ||
+ | |||
+ | -Tots els costats diferents: Escalè / tots els costats iguals: Equilàter / la resta: Isòsceles | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Tipus de triangle TT | ||
+ | Entrada: | ||
+ | Primer costat PC | ||
+ | Segon costat SC | ||
+ | Tercer costat TC | ||
+ | |||
+ | Inici | ||
+ | Llegir PC | ||
+ | Llegir SC | ||
+ | Llegir TC | ||
+ | SI ((PC != SC) I (PC != TC) I (SC != TC) LLAVORS | ||
+ | TT = "Escalè" | ||
+ | ALTRAMENT | ||
+ | SI ((PC = SC) I (SC = TC)) LLAVORS | ||
+ | TT = "Equilàter" | ||
+ | ALTRAMENT | ||
+ | TT = "Isòsceles" | ||
+ | FSI | ||
+ | FSI | ||
+ | Escriure TT | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 10. Feu un algoritme amb pseudocodi que llegeixi un número enter entre 1 i 10 i ens el mostri en números romans. | ||
+ | |||
+ | (1: I; 2: II; 3: III; 4: IV 5: V; 6: VI; 7: VII; 8: VIII; 9: IX; 10: X) | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Equivalent en romà ER | ||
+ | Entrada: | ||
+ | Número enter (1 a 10) NE | ||
+ | |||
+ | Inici | ||
+ | Llegir NE | ||
+ | SEGONS NE FER | ||
+ | CAS valor 1 | ||
+ | ER = "I" | ||
+ | CAS valor 2 | ||
+ | ER = "II" | ||
+ | CAS valor 3 | ||
+ | ER = "III" | ||
+ | CAS valor 4 | ||
+ | ER = "VI" | ||
+ | CAS valor 5 | ||
+ | ER = "V" | ||
+ | CAS valor 6 | ||
+ | ER = "VI" | ||
+ | CAS valor 7 | ||
+ | ER = "VII" | ||
+ | CAS valor 8 | ||
+ | ER = "VIII" | ||
+ | CAS valor 9 | ||
+ | ER = "IX" | ||
+ | CAS valor 10 | ||
+ | ER = "X" | ||
+ | ALTRAMENT | ||
+ | ER = "Valor Incorrecte" | ||
+ | FSEGONS | ||
+ | Escriure ER | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 11.- Feu un algoritme amb pseudocodi per mostrar el nombres parells entre 1 i 10. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Nombres parells NP | ||
+ | |||
+ | Inici | ||
+ | PER NP = 2 FINS 10 PAS 2 FER | ||
+ | Escriure NP | ||
+ | FPER | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 12.- Feu un algoritme amb pseudocodi per mostrar el salari mitjà d'un grup d'empleats. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Sou mitjà SM | ||
+ | Entrada: | ||
+ | Sou del empleat SE | ||
+ | Nombre d'empleats NE | ||
+ | Intermedi: | ||
+ | Suma dels sous SS | ||
+ | |||
+ | Inici | ||
+ | Llegir NE | ||
+ | SS = 0 | ||
+ | PER I = 1 FINS NE PAS 1 FER | ||
+ | Llegir SE | ||
+ | SS = SS + SE | ||
+ | FPER | ||
+ | SM = SS / NE | ||
+ | ESCRIURE SM | ||
+ | Fi | ||
+ | </pre> | ||
+ | |||
+ | 13.- Feu un algoritme amb pseudocodi que demani l'edat de 200 persones i mostri quants majors i menors d'edat hi ha. | ||
+ | |||
+ | <pre> | ||
+ | Identificadors | ||
+ | Sortida: | ||
+ | Majors d'edat majorsEdat | ||
+ | Menors d'edat menorsEdat | ||
+ | Entrada: | ||
+ | Edat persona edatPersona | ||
+ | |||
+ | Inici | ||
+ | NUMPERSONES = 200 | ||
+ | majorsEdat = 0 | ||
+ | menorsEdat = 0 | ||
+ | PER I = 1 FINS NUMPERSONES PAS 1 FER | ||
+ | Llegir edatPERSONA | ||
+ | SI edatPERSONA < 18 | ||
+ | menorsEdat = menorsEdat + 1 | ||
+ | ALTRAMENT | ||
+ | majorsEdat = majorsEdat + 1 | ||
+ | FSI | ||
+ | FPER | ||
+ | ESCRIURE majorsEdat | ||
+ | ESCRIURE menorsEdat | ||
+ | Fi | ||
+ | </pre> |
Revisió de 12:10, 19 nov 2024
Contingut
- 1 UF1: Programació Estructurada
- 2 UF2: Disseny modular i recursivitat
- 3 UF3: Fonament de gestió de fitxers
- 4 UF4: Programació Orientada a Objectes. Fonaments
- 5 LP
- 6 Exercicis Seqüencials
- 7 Exercicis estructura alternativa
- 8 Exercicis estructura repetitiva
UF1: Programació Estructurada
A1. L’estructura del programa informàtic A2. La composició alternativa A3. Disseny d’algorismes iteratius A4. Tractament de taules A5. Tractament de cadenes A6. Creació de nous tipus de dades Nota NF1 = 0.2 Pe1 + 0.08 Pt1+ 0.08 Pt2 + 0.32 Pe2 + 0.32 Pe3 Pe1: Qüestionari Pt1: Pràctica taules Pt2: Pràctica nou tipus de dades Pe2: Prova programació: estructures de control, algoritmes de cerca i de recorregut Pe3: Prova programació: taules, cadenes i nous tipus de dades
Continguts
Variables, constants, entrada de dades i operadors
Estructures de control
Estructures alternatives
- Les estructures alternatives permeten prendre decisions sobre quin conjunt d’instruccions cal executar en un punt del programa.
- Tota estructura alternativa es basa en l’avaluació d’una expressió que ha de donar un resultat booleà: true (cert) o false (fals). Aquesta expressió s’anomena la condició lògica de l’estructura.
- El conjunt d’instruccions que s’executarà dependrà del resultat de la condició lògica, i actuarà com una mena d’interruptor que marca el flux que cal seguir dins del programa.
Estructures iteratives
Les estructures de repetició o iteratives permeten repetir una mateixa seqüència d’instruccions diverses vegades, mentre es compleixi una certa condició.
- Anomenem bucle o cicle el conjunt d’instruccions que s’ha de repetir un cert nombre de vegades, i anomenem iteració cada execució individual del bucle.
- Un bucle infinit és una seqüència d’instruccions dins d’un programa que itera indefinidament, normalment perquè s’espera que s’assoleixi una condició que mai no s’arriba a produir.
- Forçosament dins de tot bucle hi ha d’haver instruccions que manipulin variables el valor de les quals permeti controlar la repetició o el final del bucle. Aquestes variables s’anomenen variables de control.
Normalment, les variables de control dins d’un bucle es poden englobar dins d’algun d’aquests tipus de comportament:
- Comptador: una variable de tipus enter que va augmentant o disminuint, indicant de manera clara el nombre d’iteracions que caldrà fer.
- Acumulador: una variable en què es van acumulant directament els càlculs que es volen fer, de manera que en assolir cert valor es considera que ja no cal fer més iteracions. Si bé s’assemblen als comptadors, no són ben bé el mateix.
- Semàfor: una variable que serveix com a interruptor explícit de si cal seguir fent iteracions. Quan ja no en volem fer més, el codi simplement s’encarrega d’assignar-li el valor específic que servirà perquè la condició avaluï false.
Esquemes de tractament seqüencial
Introducció
Un esquema de programació no és altra cosa que un model de solució per a a una família de problemes de programació homòlegs. L'ús d'esquemes de programació és una eina imprescindible per al programador atès que el seu ús facilita molt la solució de problemes i rebaixa considerablement la taxa d'errors de programació.
Aquesta estratègia de treball no és única de l'àmbit de la programació sinó que també l'apliquem en altres disciplines. Per exemple, a física quan aprenem a resoldre problemes de tir parabòlic o a matemàtiques quan aprenem a calcular primitives fent integració per parts.
La metodologia general segueix aquests passos:
- • Identificació del tipus de problema.
- • Caracterització dels elements característics.
- • Aplicació de l'esquema.
En aquest material introduïrem els esquemes seqüencials, és a dir els que s'apliquen a dades que tenen estructura de seqüència.
Seqüències
Una seqüència és un conjunt de dades de qualsevol tipus que es caracteritzen per estar disposades «en forma de fila», ja sigui des d'un punt de vista físic o conceptual. Moltes de les dades que manipula un programa tenen estructura de seqüència. Per exemple, un string com ara "Hola nois", pot ser considerat com una seqüència de caràcters ('H', 'o', 'l',...) o una matriu de reals com una seqüència de files. Més formalment, una seqüència és una conjunt de dades tal que:
- • És finit.
- • Conté un element que és el primer de la seqüència
- • Es pot definir la relació de "següent", que donat un element de la seqüència, diu quin ve a darrera.
Per exemple, el enters de 1 a 10 tenen estructura de seqüència atès que són un conjunt finit, tenen un primer ben definit (l'1) i la relació de següent consisteix a sumar una unitat a l'anterior.
Tipus de dades compostes
Activitats
Exercicis seqüencials, estructura alternativa i iteratius
Exercicis taules, cadenes i nous tipus de dades
Pràctiques
UF2: Disseny modular i recursivitat
Continguts
Activitats
Pràctiques
UF3: Fonament de gestió de fitxers
Continguts
Activitats
UF4: Programació Orientada a Objectes. Fonaments
Activitats
LP
Exercicis Seqüencials
1. Escriu un programa que demani al usuari el seu nom, i a continuació escrigui una salutació.
- Anàlisi
- Hem de demanar un nom per teclat i després escriure un missatge de salutació
- Dades d'entrada: nom (cadena)
- Variables: nom (cadena)
- Disseny
- 1. Llegir nom
- 2. Escriure missatge de salutació
Proceso Saludar
Definir nom como Cadena;
Escribir "Diguem el teu nom:";
Leer nom;
Escribir "Hola ",nom;
FinProceso
2. Calcular el perímetre i l'àrea d'un rectangle atesa la base i l'alçada.
- Anàlisi
- Hem de llegir la base i l'alçada del triangle i calcular el perímetre i el àrea
- Dades d'entrada: base(real), alçada(real)
- Informació de sortida: perímetre(real) i àrea(real)
- Variables: base, alçada, perímetre i àrea (real)
- Disseny
- 1. Llegir base i altura
- 2. Calcular perímetre(2*base + 2*alçada)
- 3. Calcular àrea (base * altura
- 4. Mostrar perímetre i àrea
Proceso Rectangle
Definir base,alçada,perimetre,area como Real;
Escribir "Introdueix la base:";
Leer base;
Escribir "Introdueix la alçada:";
Leer alçada;
perimetro <- 2 * base + 2 * alçada;
area <- base * alçada;
Escribir "El perímetre és ",perimetre," y el àrea es ",area;
FinProceso
3. Calcular la hipotenusa d'un triangle rectangle a partir dels seus catets.
- Anàlisi
- Hem de llegir la longitud dels dos catets i calcular la hipotenusa.
- (Teorema de Pitàgores)
- Variables d'entrada: catet1(real), catet2(real)
- Variables de sortida: hipotenusa(real)
- Disseny
- 1. Llegir la longitud dels catets
- 2. Calcular hipotenusa (En un triangle rectangle el quadrat de la hipotenusa és igual a la suma dels quadrats dels catets.)
- Per tant la hipotenusa és igual a l'arrel quadrada de la suma dels quadrats dels catets (funció raiz).
- 3. Mostrar la hipotenusa
Proceso CalcularHipotenusa
Definir catet1,catet2,hipotenusa como Real;
Escribir "Introdueix el catet 1:";
Leer catet1;
Escribir "Introdueix la catet 2:";
Leer catet2;
hipotenusa <- raiz(catet1 ^ 2 + catet2 ^ 2);
Escriure "La hipotenusa és", hipotenusa;
FinProceso
4. Escriu un algoritme amb pseudocodi que demani dos valors numèrics, intercanviï els valors de les variables, i mostri les variables amb els valors intercanviats.
- Anàlisi
- Es demanen el valor de dues variables (el tipus pot ser el que vulguem).
- Cal intercanviar els valors de les variables
- Dades d'entrada: dos números en dues variables (enters).
- Informació de sortida: Les dues variables però amb les dades canviades (enter)
- Variables: num1, num2 (enters).
- Disseny
- 1. Llegir els dos números
- 2. Intercanvio els valors. Necessito una variable auxiliar (aux).
- Assigno "num1" a "aux", "num2" a "num1" i "aux" a "num2"
- 3. Mostra "num1" i "num2"
Proceso IntercanviarVariables
Definir num1,num2,aux como Entero;
Escribir "Introdueix valor de la variable num1:";
Lleer num1;
Escribir "Introdueix valor de la variable num2:";
Lleer num2;
aux <- num1;
num1 <- num2;
num2 <- aux;
Escrbir "Nou valor de num1:", num1;
Escribir "Nou valor de num2:", num2;
FinProceso
Exercicis estructura alternativa
1. Escriu un algorisme que demani un número i digui si és positiu, negatiu o 0.
- Anàlisi
- Hem de demanar un número per teclat, comparar-lo amb 0, i indicar si és igual, major o menor que 0.
- Dades d'entrada: número (enter)
- Informació de sortida: Un missatge de text indicant si el número és igual, major o menor que 0.
- Variables: num (enters)
- Disseny
- 1. Llegir el número
- 2. Si el nombre és igual 0 escriviu "És igual a 0"
- 3. En cas contrari si és més gran que 0 escriure "És més gran que 0"
- 4. En altre cas escriure "És menor que 0"
Proceso CalcularPositiuNegatiuZero
Definir num como Entero;
Escribir "Digue'm el número :";
Leer num;
Si num=0 Entonces
Escribir "És igual a 0";
SiNo
Si num>0 Entonces
Escribir "És positiu";
SiNo
Escribir "És negatiu";
FinSi
FinSi
FinProceso
2. Escriu un algorisme en pseudocodi que demani un nom d'usuari i una contrasenya i si s'ha introduït "pcarbonell" i "pc1673" s'indica "Has entrat al sistema", sinó hi ha un error.
- Anàlisi
- Demanem per teclat nom i contrasenya
- si coincideixen amb les correctes indiquem que s'ha entrat al sistema.
- en cas contrari indiquem que el nom o la clau són incorrectes
- Dades d'entrada: usuari, password (cadena)
- Informació de sortida: Missatges d'encert o error.
- Variables: usuari, password (cadena)
- Disseny
- 1. Llegir l'usuari
- 2. Llegir el password
- 3. Si l'usuari és igual a "pcarbonell" i el password és igual a "pc1673"
- escriure "Has entrat al sistema"
- 4. En cas contrari mostrar el missatge "Usuari/password incorrecte"
Procéso Login
Definir usuari, password como Cadena;
Escribir Sin Saltar "Introdueix l'usuari:";
Leer usuari;
Escribir Sin Saltar "Introdueix el password:";
Leer password;
Si usuari="pcarbonell" Y password="pc1673" Entonces
Escribir "Has entrat al sistema";
SiNo
Escribir "Usuari/password incorrecte";
FinSi
FinProceso
3. Algorisme que demani dos números 'nota' i 'edat' i un caràcter 'sexe' i mostri el missatge 'ACCEPTADA' si la nota és major o igual a cinc, l'edat és més gran o igual a divuit i el sexe és 'F'. En cas que es compleixi el mateix, però el sexe sigui 'M', heu d'imprimir 'POSSIBLE'. Si no es compleixen aquestes condicions cal mostrar 'NO ACCEPTADA'.
- Anàlisi
- Demanem per teclat dos números: nota i edat i un caràcter sexe.
- Es mostra "ACCEPTADA" si nota>=5, edat>=18 i el sexe és femení.
- Si es compleix les mateixes condicions però amb el sexe masculí -> "POSSIBLE" en cas contrari es mostra "NO ACCEPTADA"
- Dades d'entrada: nota, edat (enter) i sexe (cadena)
- Informació de sortida: Missatge d'informació
- Variables: nota, edat (enter) i sexe (cadena)
- Disseny
- 1. Llegir la nota, l'edat i el sexe
- 2. si nota>=5, edat>=18
- 3. si sexe="F" mostrar "ACCEPTADA" -> funció Mayusculas()
- 4. si sexe="M" mostrar "POSSIBLE"
- 5. En cas contrari, mostrar "NO ACCEPTADA"
Proceso ComprovarNotaEdatSexe
Definir nota,edat como Entero;
Definir sexe como Cadena
Escribir Sin Saltar "Introdueix la nota:";
Leer nota;
Escribir Sin Saltar "Introdueix l'edat:";
Llegir edat;
Escribir Sin Saltar "Introdueix el sexe (F/M):";
Leer sexe;
Si nota>=5 Y edat>=18 Entonces
Si Mayusculas(sexe)="F" Entonces
Escribir "Acceptada";
Sinó
Si Mayusculas(sexe)="M" Entonces
Escribir "Possible";
SiNo
Escribir "No Acceptada";
FinSi
FinSi
SiNo
Escribir "No Acceptada";
FinSi
FinProceso
4. L'associació de vinicultors té com a política fixar un preu inicial al quilo de raïm, la qual es classifica en tipus A i B, i a més en mides 1 i 2. Quan es realitza la venda del producte, aquesta és d'un sol tipus i mida, es requereix determinar quant rebrà un productor pel raïm que lliura en un embarcament, considerant el següent:
- Si és de tipus A, se li carreguen 20 cèntims al preu inicial quan és de mida 1; i 30 cèntims si és de mida 2.
- Si és de tipus B, es rebaixen 30 cèntims quan és de mida 1, i 50 cèntims quan és de mida 2.
- Realitzeu un algorisme per determinar el guany obtingut.
- Anàlisi
- El preu final del raïm es calcula multiplicant els quilos recollits pel preu de cada quilo. El preu per quilo es calcula a partir del preu inicial sumant o restant una quantitat determinada segons la mida i el tipus del raïm.
- Dades d'entrada: tipus, mida (caràcter), preu inicial en cèntims i quilos (enter)
- Informació de sortida: Preu final en euros (real) o missatge d'error
- Variables: preu_inicial (enter), quilos (enter), mida (caràcter), tipus (caràcter), preu_final (real)
- Disseny
- 1. Llegir preu_inicial, quilos
- 2. Llegir tipus
- 3. Si tipus no és "A" o "B" tornar missatge d'error.
- 4. Llegir la mida
- 5. Si la mida no és "1" o "2" tornar missatge d'error.
- 6. Si tipus és "A" i mida és "1" summe a preu_inicial 20 cèntims.
- 7. Si tipus és "A" i mida és "2" summe a preu_inicial 30 cèntims.
- 8. Si tipus és "B" i grandària és "1" resta a preu_inicial 20 cèntims.
- 9. Si tipus és "B" i grandària és "2" resta a preu_inicial 30 cèntims.
- 10. El preu_final = preu_inicial * quilos
- 11. Mostra preu final/100 euros
Proceso PreuUva
Definir tipus como Caracter;
Definir mida como Caracter;
Definir preu_inicial,preu_final como Real;
Definir quilos como Entero;
Escribir Sin Saltar "Introdueix el preu inicial per quilos del UVA (cèntims):";
Leer preu_inicial;
Escribir Sin Saltar "Introdueix quants quilos has venut:";
Leer quilos;
Escribir Sin Saltar "Introdueix el tipus de l'UVA (A/B):";
Leer tipus;
Si Mayusculas(tipus)<>"A" Y Mayusculas(tipus)<>"B" Entonces
Escribir "Tipus incorrecte";
SiNo
Escribir Sin Saltar "Introdueix la mida del UVA (1/2):";
Leer mida;
Si mida<>"1" Y mida<>"2" Entonces
Escribir "Mida incorrecte";
SiNo
Si Mayusculas(tipus)="A" Entonces
Si mida="1" Entonces
preu_inicial<-preu_inicial+20;
SiNo
preu_inicial<-preu_inicial+30;
FinSi
SiNo
Si mida="1" Entonces
preu_inicial<-preu_inicial-20;
SiNo
preu_inicial<-preu_inicial-30;
FinSi
FinSi
preu_final<-preu_inicial * quilos;
Escribir "El guany és",preu_final/100, "euros.";
FinSi
FinSi
FinProceso
5. Utilitzant l'estructura Segun ..., fes un algorisme en pseudocodi que demani el nom i preu original d'un article i el codi de descompte (si el codi és 1 els descompte és del 10%, si el codi és 2 el descompte és del 15%, si el codi és 3 el descompte és del 20%, altrament el descompte és del 0%. Cal mostrar l'article, el preu original, el descompte i el preu final.
Proceso DescompteComercial
Definir nom como Cadena;
Definir preuOriginal, descompte, preuFinal como Real;
Definir codiDescompte como Entero;
Escribir "Introdueix el nom de l'article: ";
Leer nom
Escribir "Introdueix el preu original: ";
Leer preuOriginal
Escribir "Introdueix el codi de descompte: ";
Leer codiDescompte;
Segun codiDescompte Hacer
1: descompte <- preuOriginal * 0.10;
2: descompte <- preuOriginal * 0.15;
3: descompte <- preuOriginal * 0.20;
De Otro Modo: descompte <- 0;
FinSegun
preuFinal <- preuOriginal - descompte;
Escribir "Article: ", nom
Escribir "Preu original: ", preuOriginal
Escribir "Descompte: ", descompte
Escribir "Preu final: ", preuFinal
FinProceso
6. Utilitzant l'estructura Segun ..., fes un algorisme en pseudocodi per calcular l'àrea de qualsevol de les següents figures geomètriques: Quadrat, Rectangle, Triangle i Cercle.
Proceso Area
Definir figura Como Cadena;
Definir area, costat, ample, llarg, base, alçada, radi Como Real;
Escribir "Escull la figura geomètrica"
Escribir "Quadrat , Rectangle , Triangle , Cercle"
Leer figura
Segun figura Hacer
"Quadrat" :
Escribir "Introdueix la mida d'un costat del quadrat"
Leer costat
area <- costat * costat
"Rectangle" :
Escribir "Introdueix l'ample del rectangle"
Leer ample
Escribir "Introdueix el llarg del rectangle"
Leer llarg
area <- ample * llarg
"Triangle" :
Escribir "Introdueix la alçada del triangle";
Leer alçada;
Escribir "Introdueix la base del triangle";
Leer base;
area <- (base * alçada) / 2;
"Cercle" :
Escribir "Ingrese el radio del circulo";
Leer radi:
area <- PI * radi * radi;
FinSegun
Escribir "l'àrea de la figura és: " , area;
FinProceso
Exercicis estructura repetitiva
Para
1. Crea una algorisme amb pseudocodi que demani un número i calculi el seu factorial (El factorial d'un nombre és el producte de tots els enters entre 1 i el mateix nombre i es representa pel nombre seguit d'un signe d'exclamació. Per exemple 5! = 1x2x3x4x5=120)
- Anàlisi
- Necessito acumular les successives multiplicacions, començant per 2 fins al número indicat.
- Dades d'entrada: número per calcular el factorial comptador per in comptant els números des de 2 al nombre.
- Informació de sortida: El resultat del factorial
- Variables: num, comptador (enter), resultat (real)
- Disseny
- 1. Llegir nombre
- 2. Inicialitza variables: resultat = 1
- 3. Per a comptador=2 fins num
- 4. resultat=resultat*comptador
- 5. Mostrar resultat
Proceso Factorial
Definir num,comptador como Entero;
Definir resultat como Real;
resultat <- 1;
Escribir Sin Saltar "Digue'm un número:";
Leer num;
Para comptador<-2 Hasta num Hacer
resultat <- resultat * comptador;
FinPara
Escribir "El resultat és", resultat;
FinProceso
2. Feu un algorisme que imprimeixi tots els números parells entre dos números que se li demanin a l'usuari.
- Anàlisi
- Llegim un nombre. Si és senar, li sumo 1 i ja és parell. Llegim el segon número.
- Escric el número des del primer fins al segon de dos en dos.
- Dades d'entrada: dos números
- Informació de sortida: Els nombres parells que hi ha entre els dos anteriors
- Variables: num, num1, num2 (enter)
- Disseny
- 1. Llegir num1,num2
- 2. Si num1 és senar -> num1=num1+1
- 3. Des de num1 fins a num2 de 2 en 2
- 4. Escriure el número
Proceso NumerosParells
Definir num,num1,num2 Como Entero;
Escribir Sin Saltar "Introdueix el número 1:";
Leer num1;
Escribir Sin Saltar "Introdueix el número 2:";
Leer num2;
Si num1 % 2 = 1 Entonces
num1<-num1+1;
FinSi
Para num<-num1 Hasta num2 Con Paso 2 Hacer
Escribir Sin Salta saltar num," ";
FinPara
FinProceso
3. Realitzar un algorisme que demani números (es demanarà per teclat la quantitat de números a introduir). El programa ha d'informar de quants números introduïts són més grans que 0, menors que 0 i iguals a 0.
- Anàlisi
- Es demana la quantitat de números que es llegiran. Anem introduint números.
- Hem de comptar els positius, negatius i zeros.
- Dades d'entrada: Quantitat de números, els números.
- Informació de sortida: Quantitat de positius, de negatius i de zeros.
- Variables: quantitat_num,num,cont_positius,cont_negatius,cont_zeros(enters)
- Disseny
- 1. Inicialitzo els comptadors
- 2. Llegir quantitat de números
- 3. Des d'1 fins a quantitat de números
- 4. Llegir num
- 5. Si num> 0-> increment cont_positius
- 6. Si num< 0-> increment cont_negatius
- 7. Si num = 0-> increment cont_zeros.
- 8Mostra cont_postius, cont_negatius, cont_zeros
Proceso ComptarNumerosPositiusNegatiusIZeros
Definir num Como Entero;
Definir quantitat_num,i Como Entero;
Definir cont_negatius,cont_positius,cont_zeros omo Entero;
cont_negatius <- 0;
cont_positius <- 0;
cont_zeros <- 0;
Escribir "Quants números introduiràs?:";
Leer quantitat_num;
Para a i<-1 Hasta quantitat_num Hacer
Escribir "Nombre ",i,":" ;
Leer num;
Si num>0 Entonces
cont_positius <- cont_positius + 1;
SiNo
Si num<0 Entonces
cont_negatius <- cont_negatius + 1;
Sinó
cont_zeros <- cont_zeros + 1;
FinSi
FinSi
FinPara
Escribir "Números positius:",cont_positius;
Escribir "Números negatius:",cont_negatius;
Escribir "Nombre igual a 0:",cont_zeros;
FinProceso
4. Feu un algorisme que mostri la taula de multiplicar d'un número introduït per teclat.
- Anàlisi
- Llegim el número del que volem mostrar la taula
- Necessitem un comptador per comptar d'1 a 10
- .Hem de repetir 10 vegades -> A cada volta hem de mostrar: el comptador * el número = resultat de la multiplicació
- Dades d'entrada: El número de la taula i un comptador d'1 a 10.
- Informació de sortida: Les 10 operacions de la taula de multiplicació
- Variables: taula,num (enters)
- Disseny
- 1. Llegir taula
- 2. Des de nombre d'1 a 10
- 3. Mostrar num * taula = (num*taula)
Proceso TaulaMultiplicar
Definir taula i Como Entero;
Escribir Sin Saltar "De quin número vols mostrar la taula de multiplicar?:";
Leer taula;
Para num<-1 Hasta 10 Hacer
Escribir num," * ",taula," = ",num*taula;
FinPara
FinProceso
5. Feu un algorisme que mostri les taules de multiplicar del 1 al 10.
- Anàlisi
- He de repetir 10 vegades (des del número 1 fins al 10) mostrar la taula de multiplicar d'aquest número.
- Com hem vist en l'exercici 4, per fer una taula de multiplicar hem de repetir 10 vegades per mostrar cada línia de la taula.
- Per tant necessito dos bucles imbricats.
- Dades d'entrada: Res
- Informació de sortida: Les deu taules de multiplicar
- Variables: taula,num (enters)
- Disseny
- 1. Per a taula des d'1 fins a 10
- 2. Per num des d'1 fins a 10
- 3. Mostrar taula * num = (taula*num)
- 2. Per num des d'1 fins a 10
- 1. Per a taula des d'1 fins a 10
Proceso TaulesDeMultiplicar
Definir taula,num Como Entero;
Para taula<-1 Hasta 10 Hacer
Para num<-1 Hasta 10 Hacer
Escribir taula," * ",num," = ", taula*num;
FinPara
Esperar Tecla;
FinPara
FinProceso
6. Una empresa té el registre de les hores que treballa diàriament un empleat durant la setmana (sis dies) i requereix determinar-ne el total, així com el sou que rebrà per les hores treballades.
- Anàlisi
- Calcular el sou i les hores treballades dun empleat en una setmana (6 dies).
- Cal anar introduint la quantitat d'hores que treballa cada dia.
- Hem de saber quant es paga l'hora treballada.
- Cal anar acumulant les hores treballades cada dia, per poder calcular el sou.
- Dades d'entrada: Sou per hora, hores.
- Informació de sortida: Les hores acumulades, i el sou de la setmana.
- Variables: sou_per_hora (Real),hores, hores_acum, dia(enter)
- Disseny
- 1.- Inicialitzo les hores acumulades
- 2.- Llegir sou per hora (sou)
- 3.- Des del dia 1 al 6
- 4.- Llegir hores treballades
- 5.- Acumular les hores treballades
- 6.- Mostrar Les hores acumulades
- 7.- Mostrar el sou -> hores acumulades * sou per hora
Proceso CalcularSou
Definir sou_per_hora Como Real;
Definir hores, hores_acum Como a Entero;
Definir dia Como Entero;
hores_acum<-0;
Escribir sin saltar "Introdueix el sou per hora:";
Leer sou_per_hora;
Para dia<-1 hasta 6 Hacer
Escribir "Quantes hores has treballat el dia "dia,"?:";
Leer hores;
hores_acum <- hores_acum + hores;
FinPara
Escribir "Hores acumulades a la setmana:",hores_acum;
Escribir "Sou:",sou_per_hora*hores_acum;
FinProceso
7. Una empresa paga als seus empleats amb base a les hores treballades a la setmana.
- Realitzeu un algorisme per determinar el sou setmanal de N treballadors i, a més, calculeu quant va pagar l'empresa pels N empleats.
- Anàlisi
- Cal calcular el sou d'un nombre de treballadors, per tant necessitem el nombre de treballadors que té lempresa. També necessitem saber el sou per hora, i per cada treballador cal demanar les hores que ha treballat a la setmana.
- Per cada treballador cal mostrar el sou setmanal i en finalitzar el programa mostrem el total de sous pagats.
- Dades d'entrada: Nombre de treballadors, sou per hora, hores treballades per cada treballador.
- Informació de sortida: Sou de cada treballador, total pagat.
- Variables: hores_per_setmana, hores_acum (enter), sou_per_hora (real), treballadors, treballador (enters)
- Disseny
- 1. Inicialitzo l'acumulador d'hores
- 2. Llegir el nombre de treballadors
- 3. Llegir sou per hora
- 4. Per cada treballador
- 5. Llegir hores treballades per setmana
- 6. Mostrar sou (hores_per_setmana*sou_per_hora
- 7. Acumular hores treballades
- 8. Mostrar total de pagament (hores_acum*sou_per_hora)
Proceso CalcularSalari
Definir hores_per_setmana, hores_acum Como Entero;
Definir sou_per_hora Como Real;
Definir treballadors, treballador Como Entero;
hores_acum<-0;
Escribir Sin Saltar "Quants treballadors té l'empresa?:";
Leer treballadors;
Escribir Sin Saltar "Sou per hora:";
Leer sou_per_hora;
Para treballador<-1 Hasta treballadors Hacer
Escribir Sin Saltar "Quantes hores ha treballat el treballador, treballador, ?";
Leer hores_per_setmana;
hores_acum<-horas_acum+hores_per_setmana;
Escribir "El treballador ",treballador," té de sou ",hores_per_setmana*sou_per_hora;
FinPara
Escribir "El pagament als "treballadors," treballadors és: ",hores_acum*sou_per_hora;
FinProceso
Mientras
1, Crea un algoritme amb pseudoci que permeti endevinar un número. L'aplicació genera un número aleatori de l'1 al 100. A continuació va demanant números i va responent si el nombre a endevinar és més gran o més petit que l'introduït, a més dels intents que et queden (tens 10 intents per encertar-ho).
El programa acaba quan s'encerta el número (a més et diu quants intents ho has encertat), si s'arriba al límit d'intents et mostra el número que havia generat.
- Anàlisi
- Hem de generar un nombre aleatori (funció aleatori) de l'1 al 100.
- Necessitem un comptador per comptar els 10 intents. Al principi val 10 i anirà decrementant.
- Mentre no encerti el número i em quedin intents:
- Llegeixo un número
- Ho comparo amb el nombre generat (dic si és més gran o més petit)
- Demano un altre nombre
- Puc acabar el bucle per dues raons: si he endevinat el número (he guanyat) i mostro els intents que he necessitat.
- sinó he perdut, he utilitzat els 10 intents i mostro el número generat.
- Dades d'entrada: número demanat a l'usuari.
- Informació de sortida: Has guanyat i els intents, o has perdut i el número.
- Variables: num_scret, num_ingressat, intents (enters)
- Disseny
- 1. Genero un nombre aleatori de l'1 al 100 (num_secret)
- 2. intents = 10
- 3. Llegir num
- 4. Mentre num<> num_secret i intents>1
- 5. Si num_screto>num -> Escriure "Molt baix"
- 6. Si num_screto<num -> Escriure "Molt alt"
- 7. intents=intents-1
- 8. Escriure intents
- 9. Llegir num
- 10. Si num_secreo=num -> Escriure "Has guanyat", intents
- 11. SiNo -> Escriure "Has perdut, num_secret
Proceso Adivina_Numero
Definir intents,num_secret,num_ingressat Como Entero;
intents <- 10;
num_secret <- Aleatorio(1,100);
Escribir "Endevineu el nombre (d'1 a 100):";
Leer num_ingressat
Mientras num_secret<>num_ingressat Y intents>1 Hacer
Si num_secret>num_ingressat Entonces
Escribir "Molt baix";
Sino
Escribir "Molt alt";
FinSi
intents <- intents-1;
Escribir "Li queden ",intents," intents:";
Leer num_ingressat;
FinMientras
Si num_secret=num_ingressat Entonces
Escribir "Exacte! Vostè endevino a ",11-intents," intents.";
Sino
Escribir "El nombre era: ",num_secret;
FinSi
FinProceso
2.Algorisme que demani números fins que s'introdueixi un zero. Heu d'imprimir la suma i la mitjana de tots els números introduïts.
- Anàlisi
- Anem demanant números fins a introduir un 0.
- Necessitem un acumulador per anar fent les sumes intermèdies.
- A més necessitem un comptador, per calcular la mitjana (suma/quantitat)
- Dades d'entrada: números, un acumulador per sumar i un comptador
- Informació de sortida: La suma i la mitjana
- Variables:num, suma, cont enters)
- Disseny
- 1. Inicialitzat: suma = 0, cont = 0
- 2. Llegir num
- 3. Mentre num<>0
- 4. Acumul: suma = suma + num
- 5. Conte si num<>0: cont=cont+1
- . 6. Llegir num
- 7. Si cont=0 (No hem introduït cap número)-> mitjana=0
- 8. SiNo -> mitjana=suma/cont;
- 9. Mostrar suma i mitjana
Proceso CalcularSumaMitjana
Definir num Como Entero;
Definir suma,cont como Entero;
Definir mitjana Como Real;
suma <- 0;
cont <-0;
//Amb el mentre si el primer número és 0 no entrarà al bucle
Escribir "Nombre (0 per sortir):"
Leer num;
Mientras num<>0 Hacer
suma <- suma + num;
cont <- cont + 1;
Escribir "Nombre (0 per sortir):";
Leer num;
FinMientras
//Si cont=0 no puc fer la divisió
Si cont>0 Entonces
mitjana <- suma / cont;
SiNo
mitjana <-0;
FinSi
Escribir "Suma:",suma;
Escribir "Mitjana:",mitjana;
FinProceso
3. Crea una aplicació que demani un número i calculi el seu factorial (El factorial de un nombre és el producte de tots els enters entre 1 i el mateix nombre i es representa pel nombre seguit d'un signe d'exclamació.
- Per exemple 5! = 1x2x3x4x5=120
- Anàlisi
- Necessito acumular les successives multiplicacions, començant per 2 fins al número indicat.
- Dades d'entrada: número per calcular el factorial comptador per in comptant els números des de 2 al nombre
- Informació de sortida: El resultat del factorial
- Variables: num, comptador (entero), resultat (real)
- Disseny
- 1. Llegir nombre
- .2. Inicials variables
- comptador = 2
- resultat = 1
- 3. Mentre comptador<=num fer
- 4. resultat=resultat*comptador
- 5. comptador=comptador+1
- . 6. Mostrar resultat
Proceso Factorial
Definir num,comptador Como Entero;
Definir resultat Como Real;
resultat <- 1;
Escribir Sin Saltar "Digue'm un número:";
Leer num;
comptador <- 2;
Mientras comptador<=num Hacer
resultat <- resultat * comptador;
comptador <- comptador + 1;
FinMientras
Escribir "El resultat és ", resultat;
FinProceso
4. Feu una algorisme amb pseudocodi que digui si un número introduït per teclat és primer o no.
- Un nombre primer és aquell que només és divisible entre ell mateix i la unitat.
- Nota: N'hi ha prou amb provar fins a l'arrel quadrada del número per veure si és divisible per algun altre número.
- Anàlisi
- Llegim un número i anem comprovant si és divisible entre 2 fins a l'arrel quadrada del nombre. Si és divisible per algun número no és primer.
- Si no és divisible per cap nombre és primer.
- Per saber si és divisible fem servir l'operador mòdul.
- Dades d'entrada: el número a comprovar si és primer o no
- Informació de sortida: Un missatge dient si és primer o no
- Variables: numero_es_primer (entero), num (entero) comptador des de 2 fins arrel quadrada del num_es_primer, es_primer (lógico)
- Disseny
- 1. Suposo que el nombre és primer -> és_primer<-Verdadero
- 2. Llegir num_ces_primer
- 3. Mentre no final (num < número primer?) i el número primer? no sigui divisible pel num
- 4. Incrementem el num
- 5. Si es_primer -> Mostra "És primer"
- 6. Si no -> Mostra "No és primer"
Proceso EsPrimo
Definir numero_es_primer,num Como Entero;
Escribir Sin Saltar "Introdueix un número per comprovar si és primer:";
Leer numero_es_primer;
mum <- 2;
Mientras num<-numero_es_primer Y numero_es_primer % num = 0 Hacer
num <- num +1;
FinMientras
Si num = numero_es_primer Entonces
Escribir "És Primer";
SiNo
Escribir "No és Primer";
FinSi
FinProceso
5. Escriviu un algoritme amb pseudocodi que demani el límit inferior i superior d'un interval.
- Si el límit inferior és més gran que el superior ho ha de tornar a demanar.
- A continuació es van introduint números fins que introduïm el 0.
- Quan acabi el programa donarà les informacions següents:
- La suma dels números que estan dins de l'interval (interval obert).
- Quants números estan fora de l'interval.
- He informat si hem introduït algun nombre igual als límits de l'interval.
- Anàlisi
- Demanem un interval (límit inferior i superior)
- Ens hem d'assegurar que el límit inferior sigui menor que el superior.
- Es van demanant números fins que s'introdueixi el 0.
- Si el nombre pertany a l'interval -> ho vaig sumant (necessito un acumulador)
- Si el número no pertany a l'interval, ho explico (necessito un comptador)
- Si el nombre és igual a algun límit, allò índic (necessito un indicador)
- Al final mostro la suma dels números que pertanyen a l'interval.
- Mostreu el comptador de número que no pertanyen a l'interval.
- Indico si hem introduït un número igual a algun límit
- Dades d'entrada: límit superior i inferior de l'interval i els números.
- Informació de sortida: La suma dels que pertanyen a l'interval, el comptador dels números que no pertanyen a l'interval i indico si un nombre ha estat igual a algun interval
- Variables: lim_inf, lim_sup, num, suma_dins_interval, cont_fora_interval (enters), igual_limits (Lògic)
- Diseny
- 1. Inicialitzo l'acumulador, el comptador i l'indicat
- 2. Repetir -> llegir lim_inf i lim_sup fins que lim_inf<lim_sup
- 3. Llegir núm
- 4. Mentre num sigui diferent de 0
- 5. Si num pertany a l'interval -> acumula la suma
- 6. Sinó -> increment comptador
- 7. Si és igual a algun interval -> Ho indico (indicador a cert)
- 8. Llegir núm
- 9. Mostra la suma dels números pertanyents a l'interval
- 10. Mostra el comptador de números no pertanyents a l'interval
- 11. Si l'indicador = Veritable -> Mostra "Un nombre = a interval"
- 12. SiNo -> Mostra "No has introduït un número igual a l'interval
Proceso Interval
Definir lim_inf, lim_sup como Entero;
Definir num como Entero;
Definir suma_dins_interval Como Entero;
Definir cont_fora_interval Como Entero;
Definir igual_limits Como Logico;
suma_dins_interval <- 0;
cont_fora_interval <- 0;
igual_limits <- Falso;
//M'asseguro que el lim_inf és menor que el lim_sup
Repetir
Escribir "Introdueix el límit inferior de l'interval:";
Leer lim_inf;
Escribir "Introdueix el límit superior de l'interval:";
Leer lim_sup;
Si lim_inf>lim_sup Entonces
Escribir "ERROR: El límit inferior ha de ser menor que el superior.";
FinSi
Hasta Que lim_inf<=lim_sup;
Escribir Sin Saltar "Introdueix un número (0, per sortir):";
Leer num;
Mientras num<>0 Hacer
//Pertany a l'interval
Si num>lim_inf Y num<lim_sup Entonces
suma_dins_interval<- suma_dins_interval + num;
SiNo
//No pertany a l'interval
cont_fora_interval <- cont_fuera_intervalo + 1;
FinSi
//Nombre igual a algun dels límits
Si num=lim_inf O num=lim_sup Entonces
igual_limits <- Verdadero;
FinSi
Escribir Sin Saltar "Introdueix un número (0, per sortir):";
Leer num;
FinMientras
Escribir "La suma dels números dins de l'interval és ",suma_dins_interval;
Escribir "La quantitat de números fora de l'interval és ",cont_fora_interval;
Si igual_limits Entonces
Escribir "S'ha introduït algun nombre igual als límits de l'interval.";
SiNo
Escribir "No s'ha introduït cap número igual als límits de l'interval.";
FinSi
FinProceso
Més exercicis iteratius
1. Calculeu les qualificacions d'un grup d'alumnes. La nota final de cada alumne es calcula segons el criteri següent: la part pràctica val el 10%; la part de problemes val el 50% i la part teòrica el 40%. L'algorisme llegirà el nom de l'alumne, les tres notes, escriurà el resultat i tornarà a demanar les dades del següent alumne fins que el nom sigui una cadena buida. Les notes han d'estar entre 0 i 10, si no ho estan, no imprimirà les notes, mostrarà un missatge d'error i tornarà a demanar un altre alumne.
Proceso Notes_Alumnes
Definir alumne Como Cadena;
Definir nota_practica, nota_problemes, nota_teoria, nota_final Como Real;
Escribir "Introduïu el nom de l'alumne: ";
Leer alumne;
Mientras alumne<>"" Hacer
//si introduïm un nom d'alumne correcte, entrés al bucle
Escribir "Introdueix la nota de la pràctica: ";
Leer nota_practica;
Escribir "Introdueix la nota dels problemes: ";
Leer nota_problemes;
Escribir "Introdueix la nota de teoria";
Leer nota_teoria;
//comprovem si les notes tenen un rang correcte
Si (nota_practica<=10 y nota_practica>=0) y (nota_problemes<=10 y nota_problemes>=0) y (nota_teoria<=10 y nota_teoria>=0) Entonces
Escribir "L'alumne ", alumne;
Escribir "La nota practica és " nota_practica;
Escribir "La nota de problemes és ", nota_problemes;
Escribir "La nota de teoria és " nota_teoria;
nota_final<-(nota_practica * 0,1)+(nota_problemes * 0.5)+(nota_teoria*0.4);
Escribir "La nota final és " nota_final;
SiNo
Escribir "Has escrit una nota incorrecta, Torna a introduir les notes!";
FinSi
Escribir "Introdueix el nom d'un altre alumne";
Leer alumne;
FinMientras
FinProceso
2. Un conductor d'UBER va prendre el temps (en minuts) que es va demorar des del punt de partida fins a la destinació. Elaboreu un algorisme amb pseudocodi que permeti ingressar cadascun dels temps en minuts i que mostri:
- a) La mitjana dels temps
- b) El nombre de vegades que es va demorar menys de 30 minuts
- c) El nombre de vegades que es va demorar entre 30 a 45 minuts i
- d) Finalment el nombre de vegades que es va demorar més de 45 minuts.
Proceso UBER
Definir nroViatges,temps,acum,cont,contMenys30,contEntre30i45,contMes45 Como Entero;
Definir mitjana Como Real;
contMenys30 <- 0; //comptador
contEntre30i45 <- 0;
contMes45 <- 0;
acum <- 0; //acumulador
Escribir "Introduïu el número de viatges del dia: ";
Leer nroViatges;
cont <- 1;
Mientras cont <= nroViajes Hacer
Escribir "Introduïu el temps del viatge ",cont;
Leer temps;
si temps<30 Entonces
contMenys30 <- contMenys30 + 1;
Sino
si temps >= 30 y temps < 45 Entonces
contEntre30i45 <- contEntre30i45 + 1;
Sino
contMes45 <- contMes45 + 1;
FinSi
FinSi
acum <- acum + temps;
cont <- cont + 1;
Fin Mientras
mitjana <- acum / nroViajes;
Escribir "Nro de viatges : ",nroViatges;
Escribir "Mitjana dels temps: ",mitjana;
Escribir "Vegades que es va demorar menys de 30 minuts:: ",contMenys30;
Escribir "Vegades que es va demorar entre 30 a 45 minuts: ",contEntre30i45;
Escribir "Vegades que es va demorar més de 45 minuts: ",contMes45;
FinProceso
Exercicis prova
1. Demana un número enter positiu per teclat. Si el número és senar, el multipliquem per 3 i li sumem 1, si és parell el dividim per 2. Repetim aquest procés amb el nou valor acabant quan el número és 1. Per exemple, la següent seqüència és generada quan N=22:
- 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
Fes un programa que fent aquests passos ens digui la quantitat de números generats fins a aconseguir arribar a l'1. A l'exemple anterior seria 16.
Proceso TresN
Definir num, cont Como Entero;
Escribir "Escriu un numero enter i positiu: "
Leer num;
Si num > 0 Entonces
cont <- 1;
Mientras num != 1 Hacer
Si num % 2 = 0 Entonces
num <- num / 2;
SiNo
num <- (num * 3) + 1;
cont <- cont + 1;
Escribir Sin Saltar num, " ";
FinMientras
Escribir "Ha donat ",cont," voltes.";
SiNo
Escribir "El número ha de ser positiu!!");
FinProceso
2. Llegirem dos números que representaran una data, el primer representa el dia i el segon representa el mes. Cal dir quina data serà després de cinc dies (suposarem que febrer té sempre 28 dies)
Exemples:
Entrada: 28 3 Sortida: 2/4 Entrada: 27 12 Sortida: 1/1 Entrada: 26 2 Sortida: 2/3
Proceso Data
Definir dia, mes, diesPerMes, diaSeguent, mesSeguent Como Entero;
Escribir "Introdueix el dia: ";
Leer dia;
Escribir "Introdueix el mes: ";
Leer mes;
diesPerMes <- 0;
Segun Mes Hacer
1, 3, 5, 7, 8, 10, 12: diesPerMes <- 31;
4, 6, 9, 11: diesPerMes <- 30;
2: diesPerMes <- 28;
FinSegun
diaSeguent <- dia+5;
Si diaSeguent>diesPerMes Entonces
diaSeguent <- diaSeguent-diesPerMes;
mes <-- mes + 1;
Si mes>12 Entonces
mes <-- 1;
FinSi
FinSi
Escribir diaSeguent, " ", mes;
FinProceso
3. Donat un missatge secret de 10000 caràcters cal saber si dins aquest missatge apareix la seqüència “XY” (els dos caràcters seguits). Només cal dir si apareix o si no apareix.
Proceso XY
Definir carActual, carAnterior Como Caracter;
Definir cont Como Entero;
carAnterior=" ";
Escribir "Introdueix un caràcter: ";
Leer carActual;
cont <- 1;
Mientras (cont < 10000 && (carAnterior != 'X' O carActual != 'Y')) Hacer
carAnterior = carActual;
Escribir "Introdueix un caràcter: ";
Leer carActual;
cont <- cont + 1;
FinMientras
Si (carAnterior != 'X' Y carActual != 'Y') Entonces
Escribir "Apareix la seqüència XY";
SiNo
Escribir "No apareix la seqüència XY";
FinSi
FinProceso
4. Donat un número entrat per teclat cal escriure el primer divisor d’aquest número. Aquest ha de ser diferent de 1 i del mateix número. Si no hi hagués cap, sortirà un missatge que informi d'això.
Proceso Divisor
Definir divisor, numero Como Entero;
Escribir "Introdueix el número: ";
Leer numero;
divisor <- 2;
Mientras (divisor < numero Y numero % divisor != 0) Hacer
divisor <- divisor + 1;
FinMientras
Si divisor = numero Entonces
Escribir "No té cap divisor";
SiNo
Escribir "El primer divisor és: ", divisor;
FinSi
FinProceso
5. Una línia horitzontal la definim per les dues coordenades x dels dos extrems. Un punt es troba a la mateixa línia horitzontal i s'estableix amb la seva coordenada x.
El programa llegirà tres números, els dos primers seran els extrems de la línia (no tenen perquè estar ordenats) i el tercer serà la coordenada del punt. El programa ha de respondre si el punt està dins la línia i la distància a l’extrem més proper.
Exemples:
- Entrada: 10 5 7
- 5 7 10
- |--------o------------|
- Sortida: Dins. Distància 2
- Entrada: 8 10 5
- 5 8 10
- o------------|--------|
- Sortida: Fora. Distància 3
Proceso Divisor
Definir x1, x2, punt, min, max, distanciaDreta, distanciaEsquerra Como Entero;
Escribir "Introdueix la primera coordenada de la línia: ";
Leer x1;
Escribir "Introdueix la segona coordenada de la línia: ";
Leer x2;
Escribir "Introdueix el punt: ";
Leer punt;
Si x1 < x2 Entonces
min <- x1;
max <- x2;
SiNo
min <- x2;
max <- x1;
FinSi
distanciaDreta = max - punt;
Si (distanciaDreta < 0) Entonces
distanciaDreta = distanciaDreta * -1;
FinSi
distanciaEsquerra = min - punt;
Si (distanciaEsquerra < 0) Entonces
distanciaEsquerra = distanciaEsquerra * -1;
FinSi
Si (punt >= min Y punt <= max) {
Escribir "Dins";
SiNo
Escribir "Fora";
FinSi
Si (distanciaEsquerra <= distanciaDreta) {
Escribir "Distància: ", distanciaEsquerra;
SiNo
Escribir "Distància: ", distanciaDreta;
FinSi
FinProceso