12
Generalitat de Catalunya Departament d’Ensenyament Institut Obert de Catalunya Nom i cognoms 2251 CFGS Administració de Sistemes Informàtics 2252 CFGS Desenvolupament d'Aplicacions Multiplataforma Mòdul 3 – Programació bàsica UF2 – Disseny modular EAC4 (Curs 2012–13 / 2n semestre) Presentació i resultats d'aprenentatge Aquest exercici d’avaluació continuada (EAC) es correspon amb els continguts treballats a la unitat 4- Programació modular. Els resultats d'aprenentatge que es plantegen són: Analitza els conceptes relacionats amb la programació modular Analitza els avantatges i la necessitat de la programació modular Aplica el concepte d'anàlisi descendent en l'elaboració de programes. Modularitza correctament els programes realitzats. Realitza correctament les crides a funcions i la seva parametrització. Té en compte l'àmbit de les variables en les crides a les funcions. Criteris d’avaluació La puntuació màxima assignada a cada activitat s’indica a l’enunciat. Els criteris que es tindran en compte per avaluar el treball de l’alumnat són els següents: Que faci el que es demana. Que la descomposició del problema en mètodes sigui adequada. Que s'hagin corregit els errors de compilació i funcioni. Que sigui codi ordenat i clar: fer servir variables amb nom significatiu. Tot codi ha de tenir una capçalera apropiada. Tot el codi ha d'estar correctament indentat (tabulació adequada). Fer el lliurament en format .zip o .7z (NO s'admet el .rar) Codi: I71 Exercici d'avaluació contínua 1 Pàgina 1 de 12 Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

225XM03B2_EAC4_Solucio_1213S2

Embed Size (px)

DESCRIPTION

ioc

Citation preview

Page 1: 225XM03B2_EAC4_Solucio_1213S2

Generalitat de Catalunya Departament d’EnsenyamentInstitut Obert de Catalunya

Nom i cognoms

2251CFGS Administració de Sistemes Informàtics2252 CFGS Desenvolupament d'Aplicacions Multiplataf orma

Mòdul 3 – Programació bàsicaUF2 – Disseny modular

EAC4(Curs 2012–13 / 2n semestre)

Presentació i resultats d'aprenentatge

Aquest exercici d’avaluació continuada (EAC) es correspon amb els continguts treballats a la unitat 4-Programació modular.

Els resultats d'aprenentatge que es plantegen són:

• Analitza els conceptes relacionats amb la programació modular• Analitza els avantatges i la necessitat de la programació modular • Aplica el concepte d'anàlisi descendent en l'elaboració de programes.• Modularitza correctament els programes realitzats. • Realitza correctament les crides a funcions i la seva parametrització.• Té en compte l'àmbit de les variables en les crides a les funcions.

Criteris d’avaluació

La puntuació màxima assignada a cada activitat s’indica a l’enunciat.

Els criteris que es tindran en compte per avaluar el treball de l’alumnat són els següents:

• Que faci el que es demana.

• Que la descomposició del problema en mètodes sigui adequada.

• Que s'hagin corregit els errors de compilació i funcioni.

• Que sigui codi ordenat i clar: fer servir variables amb nom significatiu.

• Tot codi ha de tenir una capçalera apropiada.

• Tot el codi ha d'estar correctament indentat (tabulació adequada).

• Fer el lliurament en format .zip o .7z (NO s'admet el .rar)

Codi: I71 Exercici d'avaluació contínua 1 Pàgina 1 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 2: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

Forma i data de lliurament

Per respondre les qüestions heu d’utilitzar aquest mateix fitxer. Elimineu els apartats Presentació i resultats d'aprenentatge, Criteris d’avaluació i Forma i data de lliurament.

El nom del fitxer serà el següent: 225XM03B2_EAC4_Cognom1_InicialDelCognom2. Els cognoms s’escriuran sense accents. Per exemple, l’estudiant Joan García Santos posaria el següent nom al seu fitxer de l’EAC4: 225XM03B2_EAC4_Garcia_S .

Substituïu Nom i cognoms de la capçalera per les vostres dades personals.

Comprimiu tots els fitxers que heu de lliurar (aquest document amb les respostes i els fitxers que us demanen alguns exercicis) amb format zip o 7z (rar no s'adment perquè no és lliure). Anomeneu aquest fitxer comprimit amb el mateix criteri que l'assenyalat pel fitxer odt: "225XM03B2_EAC4_Cognom1_InicialDelCognom2.".

Un cop finalitzat l’exercici d’avaluació continuada heu d’enviar el fitxer comprimit esmentat abans des de l'apartat M03 Lliurament EAC4 de l'aula, dins del termini establert. Tingueu en compte que el sistema no permetrà fer lliuraments després de la data i hora indicades.

El termini de lliurament finalitza a les 23:55 h del dia 13/03/2013. La proposta de solució de l’EAC es publicarà el dia14/03/2013 i les qualificacions el dia 20/03/2013

Enunciat

Per publicar la solució heu d’utilitzar aquest mateix model, eliminant els apartats Presentació i resultats d'aprenentatge, Criteris d’avaluació i Forma i data de lliurament i substituint Enunciat i Nom i cognoms per Solució.

Pautes generals a seguir en tots els exercicis:

• Apliqueu disseny descendent estructurant el codi en diferents mètodes independents que responguin a tasques/objectius concrets.

• Intenteu sempre que sigui possible crear mètodes genèrics usant paràmetres d'entrada i sortida per tal que es puguin reutilitzar ja sigui en el mateix programa o en altres

• Descriviu abans de cada mètode la seva funcionalitat. Es tracta d'una descripció breu però precisa de les dades que entren el procés que realitza i el resultat obtingut. Si cal podeu fer també els comentaris que cregueu oportuns en el codi.

• Intenteu usar noms auto-descriptius per anomenar les variables i els mètodes de manera que la lectura del codi es faci més comprensible.

• Intenteu separar en mètodes diferents i sempre que sigui possible l'entrada de dades, els càlculs o procediments requerits i la sortida dels resultats.

Pregunta 1 (4 punts)

Realitzar un programa que donada una paraula formada per lletres minúscules, sense accents ni dièresis, i acabada en punt, ens mostri quantes síl·labes té.

Codi: I71 Exercici d'avaluació contínua Pàgina 2 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 3: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

Per fer el programa cal tenir en compte aquestes regles gramaticals:

• En general, cada síl·laba es 1 vocal.• Hi poden haver diftongs, es quan hi han dos vocals en una síl·laba. Per fer aquest programa només considerem els següents diftongs:• Decreixents: ai,au,ei,eu,ii,iu,oi,ou,ui,uu

Exemples: aire, rei, boira, cuina• Creixents amb consonant velar: gua, gue, gui, guo, qua, que, qui, quo

Exemples: quatre, quota, quilometre• Creixents a l'inici de paraula: ia, ie, io, iu. Exemples: iogurt, iode, hiena, ioga...• No considereu triftongs ni trencament de diftongs.

Exemple :

Entra una paraula:treure.Nombre de síl·labes=2

Entra una paraula:patata.Nombre de síl·labes =3

Entra una paraula:quinaNombre de síl·labes =2

Cal que també tingueu en compte que:

• S'avaluarà la correcció del programa per les següents paraules: treure, patata, quina, examen, pauta, maquina, aig ua, ioga

• Heu de resoldre l'exercici aplicant disseny descendent. Les solucions monolítiques no es tindran en compte.• En aquest exercici no es penalitzaran l'ús de variables globals ni l'ús de mètodes sense paràmetres.• No estem avaluant les síl·labes mitjançant les normes ortogràfiques, ja que no estem considerant tots els casos, però per simplificar la complexitat de l'exercici, s'ha de considerar que són síl·labes en el casos descrits anteriorment i el programa ha de funcionar amb les paraules que hi ha descrites anteriorment.• S'han de realitzar comentaris en els fragments de codi que ho requereixin per motiu de claredat.• El fitxer .java que enviareu per aquest exercici s'anomenarà Eac4_001.java

Codi: I71 Exercici d'avaluació contínua Pàgina 3 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 4: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

Copieu a continuació el codi .java.

public static boolean esVocal(String a){ if (a.equals("a") | a.equals("e") | a.equals("i") | a.equals("o") | a.equals("u"))

return true; else

return false;

} /* Comprovem si es G o Q */ public static boolean esQoG(String a){

if (a.equals("q") | a.equals("g"))

return true; else

return false;

} /* Comprovem si es Diftong */ public static boolean esDiftong(String a){

if ((a.equals("ai")) || (a.equals("au")) || (a.equals("eu")) ||(a.equals("ii")) || (a.equals("oi")) ||(a.equals("ou")) || (a.equals("ui")) ||(a.equals("uu"))) return true;

else return false;

} /* Comprovem si es diftong d'inici */ public static boolean esDiftongInici(String a){

if ((a.equals("ia"))|| (a.equals("ie")) || (a.equal s("io")) || (a.equals("iu"))) return true;

else return false;

}

/* Funció principal de separació de silabes */ public static int separarSilabes(String paraula,int index){

int i; /* Comencem a separar silabes */ boolean trobat=false; String actual,anterior,silaba="",posterior; anterior=paraula.substring(index,index+1); i=index; while (i<paraula.length() & !trobat){

actual = paraula.substring(i,i+1); /* Necesitem comprobar la lletra posterior, sempre que existeixi */

if(i <=paraula.length()-2) posterior=paraula.substring(i+1,i+2 );

else posterior="a";

/* Si l'actual es vocal*/ if (esVocal(actual)) {

/* Si es vocal llavors pot ser final de silaba o di ftong */ /* En el cas que estiguem a principi de paraula*/ if (i==0){

/*Comprobem si tenim un diftong d'inici */ if(esDiftongInici(paraula.substring(i,i+2))) {

/* Hem trobat una cas com ia,ie,io,iu */ silaba=actual+posterior; /* Incrementem un valor per no analitzar el posteri or*/ i++; trobat=true;

} else {

silaba=actual; trobat=true;

} }

/* Si la que ve posteriorme nt es final de paraula */

Codi: I71 Exercici d'avaluació contínua Pàgina 4 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 5: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

if (!esVocal(posterior)&&i+2==paraula.len gth()){ silaba=silaba+actual+posterior;

i++; trobat=true;

} /* Si la posterior es consonant, tanquem silaba */ if (!esVocal(posterior) ) {

trobat=true; } else{

if (esDiftong(actual+posterior)){ silaba=silaba+actual+posterior; i++; trobat=true;

} } /* Si es Vocal l'anterior*/ if (!esVocal(anterior)){ /* Si la anterior era constonant, podem tenir una p osible silaba */

if (esQoG(anterior)& actual.equals("u") && !trobat) { trobat=false; silaba=silaba+actual;

} else {

trobat=true; }

} } /* Consonant */ else {

anterior=actual; silaba=silaba+actual; if (esQoG(actual) && i+3 <paraula.length())

if (posterior.equals("u") & esVocal(paraula.substri ng(i+2,i+3) )){ silaba=actual+posterior+paraula.substring(i+2,i+3); trobat=true; i=i+2;

} } anterior=actual; i++;

} return i;

}

public static void main(String[] args){

//String[] paraules = {"patata","quina","examen","p auta","maquina","aigua", "ioga","quoniam"};

// Un cop definides les paraules que volem buscar int index; int index_nou; int numero_silabes; String MARCA_FI = "FI"; Scanner lector = new Scanner(System.in); String paraula_separada=""; String paraula; System.out.println("Inserta paraula (FI per acabar) ");

paraula = lector.next();

do{ paraula_separada=""; index=0; index_nou=0; numero_silabes=0; System.out.println("******** Paraula :"+paraula+"** *************");

Codi: I71 Exercici d'avaluació contínua Pàgina 5 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 6: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

while (index<paraula.length()){

index_nou = separarSilabes(paraula,index); index=index_nou; numero_silabes++;

}

System.out.println("Numero de silabes: "+numero_sil abes); System.out.println("Inserta paraula (FI per acabar) ");

paraula = lector.next();

} while (!paraula.equals("FI"));

}

Copieu a continuació una captura de la vostra pantalla que mostri l'execució del programa. Cal que aparegui la data d'avui, el vostre nom, l'entorn de netbeans amb el vostre codi font, i la finestra amb el resultat d'execució.

Codi: I71 Exercici d'avaluació contínua Pàgina 6 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 7: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

Pregunta 2 (3 punts)

Realitzeu un programa que ens doni els números primers que hi ha entre dos números entrats pel teclat.

L'usuari ha d'entrar dos números, heu de controlar que el primer sigui més petit que el segon i que els dos números siguin positius. En el cas de que no compleixi les condicions anterior ens ho ha de demanar tantes vegades fins a complir-la.

La sortida del programa, haurà de mostrar els números primers que hi han entre els dos rangs de valors.

Exemple :

Entra rang de valors:10050Error, torna a entrar valors.

1020Els números primers són: 11,13,17,19

Cal que també tingueu en compte que:

• Heu de resoldre l'exercici aplicant disseny descendent. Les solucions monolítiques no es tindran en compte.• S'han de realitzar comentaris en els fragments de codi que ho requereixin per motiu de claredat.• Afegiu entrades (paràmetres) i sortides (retorns) al mètodes quan us calgui per evitar l'ús de variables globals.• El fitxer .java que enviareu per aquest exercici s'anomenarà Eac4_002.java

Copieu a continuació el codi .java.

public static boolean numerocorrecte(int p, int s) { if ((p>0) & (s>0) & (p<s)) return true; else return false;

} public static boolean esprimer(int numero) { int i=2; while (numero % i != 0 && i<=numero/2) { i++; } if (numero % i == 0)

Codi: I71 Exercici d'avaluació contínua Pàgina 7 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 8: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

return false; else return true; } public static void main (String[] args){

int rang_primer, rang_segon=0; do { Scanner lector = new Scanner(Sy stem.in); System.out.println("Entra primer nu mero rang"); rang_primer = lector.nextInt(); System.out.println("Entra segon num ero rang"); rang_segon = lector.nextInt(); }while (!numerocorrecte(rang_primer,ran g_segon));

for (int i=rang_primer;i<=rang_segon;i+ +) { if (esprimer(i)) System.out.println(i);

}

}

Copieu a continuació una captura de la vostra pantalla que mostri l'execució del programa. Cal que aparegui la data d'avui, el vostre nom, l'entorn de netbeans amb el vostre codi font, i la finestra amb el resultat d'execució.

Codi: I71 Exercici d'avaluació contínua Pàgina 8 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 9: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

Pregunta 3 (3 punts)

Realitzar un programa que faci operacions amb fraccions entrades pel teclat en funció de la opció triada en el seguent menú d'opcions:

**MENÚ**1. Suma fraccions2. Restar fraccions3. Multiplicar fraccions4. Dividir fraccions5. Sortir

Esculliu una opció:

El programa ha de fer operacions amb fraccions de números naturals. El primer que farà es mostrar un menú i llavors demanarà les fraccions, per finalment mostrar el resultat.Un cop mostrat el resultat ha de preguntar si volem continuar, tornant a mostrar el menú.

Cal tenir en compte:

• Heu de resoldre l'exercici aplicant disseny descendent. Les solucions monolítiques no es tindran en compte.• Sempre que sigui possible, cal usar paràmetres d'entrada i sortida per tractar totes les dades (en qualsevol cas, mai variables globals). • El fitxer .java que enviareu per aquest exercici s'anomenarà Eac4_003.java• No cal buscar càlculs optims de simplicar fraccions o calcular comuns mútliples per fer els càlculs.

Copieu a continuació el codi .java.

public static int n1=1,d1=1,n2=0,d2=0;

public static int simplifica_fraccio(int num, i nt denom) {

int u = Math.abs(num); int v = Math.abs(denom); if(v==0) return u; int r; while(v!=0){ r = u%v; u = v; v = r; } return u; }

Codi: I71 Exercici d'avaluació contínua Pàgina 9 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 10: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

public static void suma_fraccions(int n1,int n2 ,int d1, int d2) { int suma; //entrar_dades(); int numerador=(n1 * d2 + n2 * d1); System.out.println(n1+" "+ d1 +" "+ n2 +" " +d2); int denominador=(d1*d2); int mcd = simplifica_fraccio(numerador,deno minador); System.out.println("Resultat es :" + numerador/mcd + "/"+ denominador/mcd); //return suma; } public static void resta_fraccions(int n1,int n2,int d1, int d2) { int resta; //entrar_dades(); int numerador=(n1 * d2 - n2 * d1); System.out.println(n1+" "+ d1 +" "+ n2 +" " +d2); int denominador=(d1*d2); int mcd = simplifica_fraccio(numerador,deno minador); System.out.println("Resultat es :" + numerador/mcd + "/"+ denominador/mcd); //return suma; } public static void mult_fraccions(int n1,int n2,int d1, int d2) { int mult; //entrar_dades();

int numerador=(n1 * n2); System.out.println(n1+" "+ d1 +" "+ n2 +" " +d2); int denominador=(d1 * d2); int mcd = simplifica_fraccio(numerador,deno minador); System.out.println("Resultat es :" + numerador/mcd + "/"+ denominador/mcd); //return suma;

} public static void divid_fraccions(int n1,int n2,int d1, int d2) { int dividir; //entrar_dades(); int numerador=(n1 * d2); System.out.println(n1+" "+ d1 +" "+ n2 +" " +d2); int denominador=(n2 * d1); int mcd = simplifica_fraccio(numerador,deno minador); System.out.println("Resultat es :" + numerador/mcd + "/"+ denominador/mcd); } public static int menu() { int opcio; Scanner lector = new Scanner(System.in); do { System.out.println("*********************** EXERCICI 3 ************* \n"); System.out.println("1- Suma fraccions \n"); System.out.println("2- Restar fraccions \n" ); System.out.println("3- Multiplicar fraccion s \n"); System.out.println("4- Dividir fraccions \n "); System.out.println("5- Sortir \n"); opcio = lector.nextInt(); }while (opcio<1 || opcio>5);

Codi: I71 Exercici d'avaluació contínua Pàgina 10 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 11: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

return opcio; } public static void main(String[] args) { int opcio;

opcio=menu(); while (opcio != 5)

{ Scanner lector = new Scanner(System.in); System.out.println("Entra numerador 1 \n") ; n1=lector.nextInt(); System.out.println("Entra denominador 1 \n "); d1=lector.nextInt(); System.out.println("Entra numerador 2 \n") ; n2=lector.nextInt(); System.out.println("Entra denominador 2 \n "); d2=lector.nextInt(); switch (opcio) { case 1: suma_fraccions(n1,n2,d1,d2); break; case 2: resta_fraccions(n1,n2,d1,d2); break; case 3: mult_fraccions(n1,n2,d1,d2); break; case 4: divid_fraccions(n1,n2,d1,d2); break; } opcio=menu();

} }

Copieu a continuació una captura de la vostra pantalla que mostri l'execució del programa. Cal que aparegui la data d'avui, el vostre nom, l'entorn de netbeans amb el vostre codi font, i la finestra amb el resultat d'execució.

Codi: I71 Exercici d'avaluació contínua Pàgina 11 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013

Page 12: 225XM03B2_EAC4_Solucio_1213S2

Formació professionalNom i cognoms

Codi: I71 Exercici d'avaluació contínua Pàgina 12 de 12

Versió: 02 225XM03B2_EAC4_Enunciat_1213S2 Lliurament: 13/03/2013