Problema Master mind. Extracte de solució

Documentos relacionados
Tema: Arreglos de Objetos en C++.

Tema: Clases y Objetos en C++.

Examen Principios de Programación Febrero 2012

ALMACENAMIENTO PERSISTENTE DE DATOS

Tema 5: Diseño modular. Índice. Notas. Programación 2. Curso Notas. Ejemplo. La herramienta make. 1 Diseño modular.

Veure que tot nombre cub s obté com a suma de senars consecutius.

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Práctica 8: Barreras

TEORIA I QÜESTIONARIS

Examen escrito de Programación 1

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones

Capítulo 6. Introducción a la POO

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Tema 2. El lenguaje de programación Java (Parte 1)

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Prof. Dr. Paul Bustamante

Tema: Sobrecarga de Operadores.

Àmbit de les matemàtiques, de la ciència i de la tecnologia M14 Operacions numèriques UNITAT 2 LES FRACCIONS

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Prof. Dr. Paul Bustamante

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

DIVISIBILITAT. Amb els nombres 5, 7 i 35 podem escriure diverses expressions matemàtiques: 5x7=

Introducción a C++ y Code::Blocks

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Objetivo de aprendizaje del tema

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

1. Juego del Ahorcado

2. Estructura de un programa en Java

Clases y Objetos. Informática II Ingeniería Electrónica

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Estructuras de repetición

Librerías estándar en C++ STL: Standard Template Library. Álvaro Sánchez Miralles José Porras (Fidel Fernández)

Prof. Dr. Paul Bustamante

Metodología de la Programación II. Recursividad

Impresión por pantalla

8. Diseña una función que muestre el calendario para un mes en el siguiente formato: Lunes Martes Miércoles Jueves Viernes Sábado Domingo

CURSO 2º GRUPO Junio 2011

Prof. Dr. Paul Bustamante

Programación en C+ +/ Funciones

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Fundamentos de programación

Elementos léxicos del lenguaje de programación Java

Examen Septiembre Curso Programación en C++ Pág. 1

ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO

CAMPS DE FORÇA CONSERVATIUS

Funciones y Clases Amigas en C++ Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Aprende programación fácilmente con ejercicios resueltos.

Agenda..NET C# Laboratorio #1

ALGORITMICA Y PROGRAMACION POR OBJETOS I

VALORACIÓ D EXISTÈNCIES / EXPLICACIONS COMPLEMENTÀRIES DE LES DONADES A CLASSE.

Programación en C++/Funciones

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

SEGUNDO PARCIAL INFORMATICA II

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Pruebas de unidad con JUnit

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Paradigmas de Programación

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras

Java para programadores

Introducción al tipo de dato ARRAY

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Text Mining: Distancia de Levenshtein

Introducción a la programación orientada a objetos

Prof. Dr. Paul Bustamante

Índice de contenido. Herramientas necesarias...2 Tipos de Variable...3 Operadores...6 Sentencias...12

Ejercicios propuestos de. Programación orientada a objetos. con C++ Cristina Cachero Pedro J. Ponce de León

Curso Introducción JAVA Pág.: 1

Estructuras de repetición hacer-mientras y repita hasta

Programación estructurada (Introducción a lenguaje C)

Pseudolenguaje. (1 byte) (valores códigos ASCII) [CHAR_MIN.. CHAR_MAX] (Definida en <limits.h>) No hay. Dominio n 1 [MIN(C)..

Tema: Punteros a Objetos. Puntero this.

3r a 4t ESO INFORMACIÓ ACADÈMICA I D OPTATIVES

Tema 4: Estructuras de Control Estructura y Contenidos

Instituto Politécnico Nacional

Ejercicios de evaluación de fundamentos de programación en Java

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Fundamentos de la Programación Orientada a Objetos Definición de Clases

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

CONTENIDO. Programación orientada a objetos - POO. Clases. Constructores y destructores. Definiciones. Entrada y salida

Multitarea en Java. Rafa Caballero - UCM

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

CREACIÓ I RESTAURACIÓ D'IMATGES DE CLONEZILLA EN UN PENDRIVE AUTORRANCABLE

Funciones. Parámetros por valor

Curso 0 de Informática

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Programación Orientada a Objetos en JAVA

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

Programación básica C++

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Transcripción:

Problema Master mind. Extracte de solució Josep M. Ribó Juny, 2005 1 Fitxer combinacio.txt (Problema de l examen de MTP-gestió de Setembre-2003) Advertiment: Es presenta només un extracte de l especificació de la classe. A l especificació completa han d aparèixer Precondicions, postcondicions i forma de la crida per cada operació Classe: Combinacio Objectiu: Modelitza una combinació de n caràcters (n N=10) Operacions: Combinacio(); Genera una combinació de 4 caràcters triats aleatòriament Combinacio(unsigned int nc, bool& er); Genera una combinació de nc caràcters triats aleatòriament. Error si nc > N Combinacio(char car[], unsigned int n, bool& er); Genera una combinació amb els nc caràcters de l array car. Error si nc > N void setcombinacio(char car[], unsigned int n, bool& er); void setcombinacio(unsigned int n, bool& er); Les dues operacions anteriors tenen el mateix sentit que les constructores corresponents, però es poden aplicar explícitament sobre objectes de la classe Combinacio ja existents (recordem que les operacions constructores només es poden aplicar implícitament en el moment de crear un objecte). Aquestes operacions setcombinacio(...) seran usades per la classe Director, com veurem. 1

void comprovarcombinacio(combinacio& combi, int& npos, int& ncar); Crida: combiref.comprovarcombinacio(combi,npos,ncar); Indica el nombre d encerts de posició (npos) i de caràcter (ncar) que hi ha a combi en relació a combiref char getcaracter(unsigned int pos, bool& er); Retorna el caràcter que ocupa la posició pos de la combinació Error si pos és més gran que getncaracters() void setcaracter(unsigned int pos, char car, bool& er);... unsigned int getncaracters(); Retorna el nombre de caràcters de la combinació void presentarcombinacio(); Escriu per la sortida estàndar el contingut de la combinació Aquesta operació no és estrictament necessària i hi ha autors que ens són contraris 2 Fitxer combinacio.h const unsigned int N=10; class Combinacio private: char c[n]; unsigned int nc; bool encertcaracter(char car, bool usats[], Combinacio& combi); public: Combinacio(); Combinacio(unsigned int nc, bool& er); Combinacio(char car[], unsigned int n, bool& er); void setcombinacio(char car[], unsigned int n, bool& er); void setcombinacio(unsigned int n, bool& er); void comprovarcombinacio(combinacio& combi, int& npos, int& ncar); char getcaracter(unsigned int pos, bool& er); void setcaracter(unsigned int pos, char car, bool& er); unsigned int getncaracters(); void presentarcombinacio(); ; 2

3 Fitxer combinacio.cc #include "combinacio.h" #include <iostream> using namespace std; Combinacio::Combinacio() //...EXERCICI Combinacio::Combinacio(unsigned int n, bool& er) if (n>=n) er=true; else for (i=0;i<n;i++) c[i]=rand()%n+ a ; nc=n; er=false; Combinacio::Combinacio(char car[], unsigned int n, bool& er) if (n>=n) er=true; else for (i=0;i<n;i++) c[i]=car[i]; nc=n; er=false; void Combinacio::setCombinacio(unsigned int n, bool& er) if (n>=n) er=true; else for (i=0;i<n;i++) c[i]=rand()%n+ a ; nc=n; er=false; 3

void Combinacio::setCombinacio(char car[], unsigned int n, bool& er) if (n>=n) er=true; else for (i=0;i<n;i++) c[i]=car[i]; nc=n; er=false; void Combinacio::comprovarCombinacio(Combinacio& combi, int& npos, int& ncar) bool usats[n]; npos=0; ncar=0; for (i=0;i<nc;i++) usats[i]=false; for (i=0;i<nc;i++) if (combi.c[i]==c[i]) npos=npos+1; usats[i]=true; else if (encertcaracter(combi.c[i],usats,combi)) ncar=ncar+1; void Combinacio::presentarCombinacio() for (i=0;i<nc;i++) cout<<c[i]<<" "; /******************************* 4

OPERACIO PRIVADA: *******************************/ bool Combinacio::encertCaracter(char car, bool usats[], Combinacio& combi) i=0; while (i<nc && (car!=c[i] usats[i] c[i]==combi.c[i])) i++; if (i<nc) usats[i]=true; return true; else return false; Comentaris: Per implementar aquesta operacio usem l array usats: usats[i]= cert si el caracter que ocupa la posicio i de la combinacio de referencia ha sigut usat per comptar un encert de posicio o de caracter La versió que us proposo en aquest document: Conté un sol bucle per comptar simultàniament els encerts de posició i de caràcter i No usa un array addicional ep per saber si un caràcter de la combinació ha sigut ja comptat com a encert de posició (en la solució que vam donar a classe sí que l usàvem). El resultat és, potser, una mica més difí cil d entendre, però una mica més eficient. Noteu que encertcaracter(car,usats,combi) retorna cert si trobem a la combinació de referència (o sigui, a l objecte Combinació sobre el qual es crida a encertcaracter) un caràcter c[i] tal que: c[i]=car, c[i] no usat prèviament (!usats[i]) i c[i] no és encert de posició (c[i]!=combi.c[i]) 4 Fitxer director.txt Advertiment: Només he inclòs les capceleres de les operacions. Caldria fer-ne una especificació completa. Director(); void inicijoc(unsigned int ncarcombi, bool& er); 5

void entracombinacio(combinacio& combi, int& npos, int& ncar, bool& err); void geticombinacio(unsigned int i, Combinacio& combi, bool& err); void getcombinaciopensada(combinacio& combi); 5 Fitxer director.h #include "director.h" const unsigned int MAXCOMBI=100; class Director private: Combinacio combiref; Combinacio registrecombi[maxcombi]; unsigned int ncombi; public: Director(); void inicijoc(unsigned int ncarcombi, bool& er); void entracombinacio(combinacio& combi, int& npos, int& ncar, bool& err); void geticombinacio(unsigned int i, Combinacio& combi, bool& err); void getcombinaciopensada(combinacio& combi); ; 6 Fitxer director.cc Director::Director() bool er=false; char comb[4]= a, b, c, d ; ncombi=0; combiref.setcombinacio(comb,4,er); void Director::iniciJoc(unsigned int ncarcombi, bool& er) ncombi=0; combiref.setcombinacio(ncarcombi,er); void Director::entraCombinacio(Combinacio& combi, int& npos, int& ncar, bool& err) 6

if (ncombi<maxcombi) err=false; registrecombi[ncombi]=combi; //C++ permet assignar objectes de classes creades //pel programador. //Per tenir un major control de com es fa aquesta //assignacio, podeu definir l operacio: // void assigna(combinacio& combi); //a la classe Combinacio (com ja vam fer a la classe // Cadena) ncombi=ncombi+1; combiref.comprovarcombinacio(combi,npos,ncar); else err=true; void Director::getICombinacio(unsigned int i, Combinacio& combi, bool& err) if (i>=ncombi) err=true; else err=false; combi=registrecombi[i]; void Director::getCombinacioPensada(Combinacio& combi) combi=combiref; 7 Fitxer usuari.cc #include "combinacio.h" #include "director.h" #include <iostream> using namespace std; void demanarcombinaciojugador(combinacio& combi) //Demana al jugador que entri per l entrada estandar una //combinacio de 4 caracters 7

void informajugadorencerts(unsigned int npos, unsigned int ncar) //Informa al jugador del nombre d encerts de la seva darrera //combinacio int main() Director dir; Combinacio combi; bool er; unsigned int npos, ncar; dir.inicijoc(4,er); do demanarcombinaciojugador(combi) dir.entracombinacio(combi,npos,ncar,er); informajugadorencerts(ncar,npos); while(npos<4); 8