UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Fundamentos de Programação Trabalho de casa no 6 3 de Dezembro de 2004 Objectivo Pretende-se implementar uma variante do TAI mapa pedido no TPC4: o TAI mapa-limitado. Este TAI, ao contrário do anterior, é mutável, sendo possível alterar a informação que está contida em algumas posições do mapa. Este mapa é limitado, na medida em que apenas permite alterar a informação de um número finito de posições, definidas por um rectângulo quando o mapa é criado. A tentativa de alterar uma posição fora dos limites do mapa dá origem a um erro. No entanto, pode-se consultar qualquer posição, dentro ou fora dos limites do mapa. O tipo posicao definido no TPC4 vai ser usado para nos referirmos às várias posições do mapa. Neste trabalho, a representação interna usada para o tipo mapa-limitado deve ser baseada no tipo vector do S CHEME. Em particular, devem ser usados vectores para guardar a informação do mapa nas posições dentro dos limites definidos na criação do mapa. As operações a considerar para o tipo mapa-limitado são as seguintes: • cria-mapa-limitado : universal × inteiro × inteiro × inteiro × inteiro 7→ mapa-limitado • mapa-limitado-poe! : mapa-limitado × posicao × universal 7→ indefinido • mapa-limitado-obtem : mapa-limitado × posicao 7→ universal A operação cria-mapa-limitado recebe um objecto qualquer e quatro números inteiros e constrói um novo mapa-limitado que contém em todas as posições esse objecto. Os quatro números inteiros definem um rectângulo no espaço de coordenadas no qual é possível efectuar alterações à informação do mapa e 1 correspondem, por ordem, aos seguintes valores de coordenadas: o menor x, o menor y, o maior x e o maior y do rectângulo. A operação mapa-limitado-poe!, dados um mapa-limitado M, uma posição P e um objecto O, altera M de modo a que na posição P passe a estar o objecto O, se a posição P corresponder a uma posição contida no rectângulo definido na criação de M. Se a posição P estiver fora do rectângulo definido na criação de M deve ser dado um erro e M não é alterado. A operação mapa-limitado-obtem, dados um mapa M e uma posição P, devolve o objecto que se encontra na posição P do espaço representado pelo mapa M. Qualquer posição é válida, e não apenas as que estão dentro dos limites definidos na criação de M. A seguinte interacção de S CHEME ilustra o funcionamento destas operações: > (define m1 (cria-mapa-limitado ’areia -3 2 10 15)) > (mapa-limitado-obtem m1 (@ 0 0)) areia > (mapa-limitado-poe! m1 (@ 0 0) ’fora-dos-limites) mapa-limitado-poe!: posicao fora dos limites > (mapa-limitado-obtem m1 (@ 0 0)) areia > (mapa-limitado-poe! m1 (@ -3 2) ’canto-inferior-esquerdo) > (mapa-limitado-obtem m1 (@ -3 2)) canto-inferior-esquerdo > (mapa-limitado-poe! m1 (@ -3 15) ’canto-superior-esquerdo) > (mapa-limitado-poe! m1 (@ 10 2) ’canto-inferior-direito) > (mapa-limitado-poe! m1 (@ 10 15) ’canto-superior-direito) > (mapa-limitado-obtem m1 (@ -3 15)) canto-superior-esquerdo > (mapa-limitado-obtem m1 (@ 10 15)) canto-superior-direito > (mapa-limitado-obtem m1 (@ 10 2)) canto-inferior-direito > (mapa-limitado-poe! m1 (@ -3 1) ’fora-dos-limites) mapa-limitado-poe!: posicao fora dos limites > (define coord (expt 2 30)) > coord 1073741824 > (mapa-limitado-obtem m1 (@ coord coord)) areia Trabalho a realizar O trabalho deve ser realizado por grupos de dois alunos. Os grupos formados devem ser os mesmos que irão realizar o projecto da cadeira. Usando uma representação interna baseada em vectores, tal como descrito acima, 2 devem definir as operações para o tipo mapa-limitado. Assim, o trabalho a entregar é composto pelo seguinte: 1. A folha de rosto apresentada na última página deste enunciado, preenchida com a identificação dos elementos que realizaram o trabalho. 2. A impressão das definições das operações do tipo mapa-limitado (não devem incluir nesta impressão novamente as definições relativas ao tipo posicao). 3. A impressão de uma interacção em que se demonstre o correcto funcionamento das operações definidas. As várias folhas devem ser agrafadas. Os trabalhos devem ser entregues o mais tardar até às 15:00 do dia 13 de Dezembro. As entregas podem ser feitas durante as aulas práticas ou na secretaria do DEI (Alameda) ou na sala de apoio da LEIC (Tagus). 3 Fundamentos de Programação Ano Lectivo de 2004/2005 - 1o Semestre TPC6 Número Nome Dia, Hora e Sala Professor (práticas) Número Nome Dia, Hora e Sala Professor (práticas)