Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Manejo de listas con el tablero
- Ejercicio 0
- ¿qué es lo primero que tenés que escribir en cada ejercicio?
- . Escribir el contrato.
- */
- /*Ejercicio 1
- Escribir el procedimiento PonerColoresEnCeldaActual(colores) que, dada una lista de Colores
- [c1,c2,c3,...,ck], ponga en la celda actual una bolita de color ci por cada i = 1,2,3,...,k.
- Ejemplo: PonerColoresEnCeldaActual([Verde, Verde, Azul]) pone dos bolitas Verdes y una Azul
- en la Celda Actual.*/
- procedure PonerColoresEnCeldaActual (colores){
- /* PROPOSITO: Poner colores de acuerdo a cada color en la lista
- PRECONDICIÓN: Ninguna
- PARAMETRO: colores es una lista de colores */
- foreach color in colores {
- Poner (color)
- }
- }
- /*Ejercicio 2
- Escribir el procedimiento RecorrerCamino(direcciones) que, dada una lista de Direcciones
- [d1,d2,...,dk], mueva el cabezal primero en dirección d1, después en dirección d2, y así
- sucesivamente hasta mover el cabezal en dirección dk. Ejemplo: dada la lista [Este, Este, Norte,
- Este], el procedimiento debe mover el cabezal primero hacia el Este dos veces, luego hacia el
- Norte 1 vez y por último se mueve hacia el Este. ¿Cuál es la precondición de este
- procedimiento?*/
- procedure RecorrerCamino (direcciones){
- /*PROPOSITO: Se mueve de acuerdo a cada elemento de la lista de direcciones
- PRECONDICION: Debe haber un tablero tan grande como la lista lo indique
- PRECONDICION: Todas las direcciones de la lista deben ser movimientos validos*/
- foreach dirección in direcciones{
- Mover(dirección)
- }
- }
- /*Ejercicio 3
- Escribir la función aparicionesDeColor(colorBuscado) que, dado un colorBuscado, recorra
- todas las celdas del tablero y describa la lista de booleanos que se consiguen en un recorrido
- por celdas con dirección principal Norte y dirección secundaria Oeste, consultando si hay o no
- bolitas del colorBuscado en cada celda del tablero.*/
- function aparicionesDeColor (colorBuscado){
- /*PROPOSITO: Denota cada elemento del tablero con un booleano.
- PRECONDICIÓN: Ninguno
- PARAMETRO: es un color
- RESULTADO: Denota una lista de booleanos*/
- listaDeBooleanosSegúnColor := []
- while (not esLaÚltimaCelda(Norte, Oeste)){
- listaDeBooleanosSegúnColor := listaDeBooleanosSegúnColor ++ resultadoDeLaCeldaSegun(colorBuscado)
- // IrALaSiguienteCelda()
- }return (listaDeBooleanosSegúnColor ++ resultadoDeLaCeldaSegun(colorBuscado))
- }
- function esLaÚltimaCelda(dir1, dir2){
- return (not puedeMover(dir1) && not puedeMover(dir2))
- }
- function resultadoDeLaCeldaSegun(color){
- /*PROPOSITO: DENOTA UNA LISTA CON VALOR "BOOLEANO" DE ACUEROD AL COLOR EXISTENTE EN LA CELDA
- PRECONDICIÓN: NINGUNA
- PARAMETRO: "color" es un color*/
- return (hayBolitas(color))
- }
- /*Ejercicio 4
- Escribir la función coloresEnCeldaActual() que describa la lista de los colores que aparecen en
- la Celda Actual.*/
- function coloresEnCeldaActual (){
- /*PROPOSITO: Denota una lista de colores de la celda actual
- PRECONDICIÓN: ninguna
- RESULTADO: Arma una lista de colores de la celda*/
- listaDeColoresDeLaCelda := []
- foreach color in [minColor()..maxColor()]{
- listaDeColoresDeLaCelda := listaDeColoresDeLaCelda ++ singularSi(color, hayBolitas(color))
- }return (listaDeColoresDeLaCelda)
- }
- function singularSi(elemento, condición) {
- /*PROPOSITO: Devolver una lista con el color de "colorActual" si es que existe
- PRECONDICIÓN: NO TIENE
- PARAMETROS: colorActual es un color*/
- return (choose [elemento] when (condición)
- [] otherwise)
- }
- /*Ejercicio 5
- Escribir la función aparicionesDeColorEnCamino(colorBuscado,direcciones) que, dado un
- colorBuscado y una lista de Direcciones, describa la lista con la cantidad de bolitas de
- colorBuscado en las celdas recorridas, si las mismas se recorren en el orden en que indica
- direcciones, (incluyendo la celda en que se encuentra el cabezal antes de empezar y al nalizar
- el recorrido). ¿Cuál es la precondición del procedimiento?*/
- function aparicionesDeColorEnCamino (colorBuscado, direcciones) {
- /*PROPOSITO: denota una lista con la cantidad de bolitas de "colorBuscado" en el recorrido
- de la lista "direcciones"
- PRECONDICION: Todas las direcciones de la lista deben ser movimientos validos*/
- listaDeCantidadDeColores := []
- foreach direccion in direcciones {
- listaDeCantidadDeColores := listaDeCantidadDeColores ++
- devolverNúmeroDeBolitas (colorBuscado)
- Mover(direccion)
- }return (listaDeCantidadDeColores++
- devolverNúmeroDeBolitas (colorBuscado))
- }
- function devolverNúmeroDeBolitas (colorBuscado){
- return(choose [nroBolitas(colorBuscado)] when (hayBolitas(colorBuscado))
- [0] otherwise)
- }
- /*Ejercicio 6
- Escribir la función longitud(lista) que, dada una lista, describa la cantidad de elementos de la
- misma. Ejemplo: longitud([Azul, Azul, Verde, Rojo]) describe 4.*/
- function longitud(lista) {
- /*PROPOSITO: Denota la cantidad de elementos en la lista
- PRECONDICIÓN: Ninguna
- PARAMETRO: "lista" es una lista
- RESULTADO: La cantidad de elementos en la lista*/
- cantidadDeElementos := 0
- foreach elementos in lista {
- cantidadDeElementos := cantidadDeElementos + 1
- }return (cantidadDeElementos)
- }
- /*Ejercicio 7
- Escribir la función sumatoria(lista) que, dada una lista de Números, describa la suma de todos
- los elementos de la misma. Ejemplo: sumatoria([1, 5, 7, 9]) describe 1+5+7+9, es decir, 22.*/
- function sumatoria(lista){
- /*PROPOSITO: Denota la sumatoria de la lista
- PRECONDICION: Ninguna
- PARAMETROS: "lista" es una lista de números*/
- elementosSumados := 0
- foreach elemento in lista {
- elementosSumados := elementosSumados + elemento
- }return (elementosSumados)
- }
- /*Ejercicio 8
- Escribir la función multiplicatoria(lista) que, dada una lista de Números, describa la
- multiplicación de todos los elementos de la misma. Ejemplo: multiplicatoria([1, 5, 7, 9]) describe
- 1*5*7*9, es decir, 315.*/
- function multiplicatoria (lista) {
- /*PROPOSITO: Denota la multiplicación de la lista
- PRECONDICION: Ninguna
- PARAMETROS: "lista" es una lista de números*/
- elementosMultiplicados := primero(lista)
- foreach elemento in lista {
- elementosMultiplicados := elementosMultiplicados * elemento
- }return (elementosMultiplicados)
- }
- /*Ejercicio 9
- Escribir la función repetición(cantidad,elemento) que, dado una cantidad y un elemento (de
- cualquier tipo), describa una lista con cantidad repeticiones de elemento. Si n ≤ 0, retorna la
- lista vacía.
- Ejemplo: repetición(3, 8) describe la lista [8, 8, 8] , mientras que repetición(5, Verde) describe la
- lista [Verde, Verde, Verde, Verde, Verde]*/
- function repetición (cantidad, elemento) {
- /*PROPOSITO: Denota la cantidad de veces que se repite el "elemento"
- PRECONDICIÓN: "cantidad" no puede ser 0
- PARAMETROS: "Cantidad" corresponde a un número y "elemento" a un elemento
- RESULTADO: Devuelve una repeticion del elemento "cantidad" veces*/
- elementosRepetidos := []
- repeat (cantidad){
- elementosRepetidos := elementosRepetidos ++ [elemento]
- }
- return (elementosRepetidos)
- }
- /*Ejercicio 10
- Escribir la función clonados_veces(cantidad, valores) que dado un número cantidad y una lista
- de valores, describa la lista que contenga los elementos de valores en el orden de dicha
- listarepetida cantidad de veces. Ejemplo: clonados_veces(3, [Rojo, Azul, Verde]) retorna [Rojo,
- Azul, Verde, Rojo, Azul, Verde, Rojo, Azul, Verde].*/
- function clonados_Veces (cantidad, valores){
- /*PROPOSITO: Denotar una lista que se repite "cantidad" veces
- PRECONDICIÓN: Ninguna
- PARAMETROS: cantidad es un nùmero, valores es una lista*/
- elementosRepetidos := valores
- repeat (cantidad){
- elementosRepetidos := elementosRepetidos ++ valores
- }
- return (elementosRepetidos)
- }
- /*Ejercicio 11
- Escribir la función multiplicadosInternamente_veces(cantidad, valores) que dado un número
- cantidad y una lista de valores, describa la lista que contenga los elementos de valores repetida
- cantidad de veces cada uno. Ejemplo: multiplicadosInternamente_veces(3, [Rojo, Azul, Verde])
- retorna [Rojo, Rojo, Rojo, Azul, Azul, Azul, Verde, Verde, Verde].*/
- function multiplicadosInternamente_veces (cantidad, valores){
- /*PROPOSITO: Clonar cada elemento de la lista "cantidad" veces
- PRECONDICIÓN: NINGUNA
- PARAMETROS: "cantidad" es un nùmero, valores corresponde a una lista*/
- valorDeLista := []
- foreach valor in valores{
- valorDeLista := valorDeLista ++ repetición(cantidad, valor)
- }return (valorDeLista)
- }
- /*Ejercicio 12
- En tu solución anterior, ¿reutilizaste repetición(cantidad, elemento)?
- Si no lo hiciste, resolvé nuevamente utilizando esa función combinada con el operador ++.*/
- //SI LO HICE (?)
- /*Ejercicio 13
- Escribir la función reverso(lista) que, dada una lista [e1,...,ek], describa la lista [ek,...,e1].
- Ejemplo: reverso([Azul, Azul, Verde, Rojo]) describe [Rojo, Verde, Azul, Azul].*/
- function reverso(lista) {
- /*PROPOSITO: Describe una lista de elementos de manera que la lista comienza desde el final y
- avanza hacia el primero
- PRECONDICIÓN: La lista no puede estar vacía
- PARAMETROS: "lista" es una lista :P*/
- listaReversa := []
- foreach elemento in lista {
- listaReversa := [elemento] ++ listaReversa
- }return (listaReversa)
- }
- /*Ejercicio 14
- Escribir la función direccionesOpuestas(listaDeDirecciones) que, dada una lista de direcciones
- [d1, ...,dk], describa la lista de direcciones en donde cada elemento es el opuesto al de la
- posición original, [opuesto(d1), ..., opuesto(dk)].
- Ejemplo: direccionesOpuestas([Oeste, Sur, Norte]) describe [Este, Norte, Sur].*/
- function direccionesOpuestas (listaDeDirecciones) {
- /*PROPOSITO: Describe una lista de direcciones donde se obtienen los opuestos de cada elemento
- de la lista
- PRECONDICIÓN: Es una lista de direcciones
- PARAMETROS: "listaDeDirecciones" corresponde a una lista*/
- listaDeDireccionesOpuesta := []
- foreach dirección in listaDeDirecciones{
- listaDeDireccionesOpuesta := listaDeDireccionesOpuesta ++ [opuesto(dirección)]
- }return (listaDeDireccionesOpuesta)
- }
- /*Ejercicio 15
- Escribir la función coloresSiguientes(listaDeColores) que, dada una lista de colores [c1, ...,ck],
- describa la lista de colores en donde cada elemento es el siguiente del original, [siguiente(c1),
- ..., siguiente(ck)].
- Ejemplo: coloresSiguientes([Rojo, Azul, Verde]) describe [Verde, Negro, Azul].*/
- function coloresSiguientes(listaDeColores){
- listaDeColoresSiguientes := []
- foreach color in listaDeColores {
- listaDeColoresSiguientes := listaDeColoresSiguientes ++ [siguiente(color)]
- }return (listaDeColoresSiguientes)
- }
- /*Ejercicio 16
- Escribir la función homologar(listaDeNúmeros, umbral, default) que, dada una lista de números
- [n1, ...,nk], y dos números umbral, y default, denote otra lista de números [m1, ...,mk] en donde,
- aquellos números que son mayores al umbral, permanecen iguales, pero aquellos que son
- menores son reemplazados por el valor default. Es decir, cada elemento es
- mi = ni sii ni >= umbral
- mi =default sii ni < umbral
- Ejemplo: homologar([3, 7, 8, 5, 1, 3, 2, 4], 4, 2) describe [2, 7, 8, 5, 2, 2, 2, 4].*/
- function homologar (listaDeNúmeros, umbral, default) {
- /*PROPOSITO: Denota una lista con valores donde si un número de la lista es > umbral permanece igual
- si es < a umbral su valor se convierte en default
- PRECONDICION: DEBE SER UNA LISTA DE NUMEROS*/
- listaHomologada := []
- foreach numero in listaDeNúmeros {
- listaHomologada := listaHomologada ++ homologarElemento(numero, umbral, default)
- } return (listaHomologada)
- }
- function homologarElemento(numero, umbral, default){
- return (choose [numero] when (numero >= umbral)
- [default] when (numero < umbral)
- [] otherwise)
- }
- /*Ejercicio 17
- Escribir la función númerosPares(valores) que, dada valores (una lista de Números), describa
- la lista de números pares que aparecen en valores.
- Ejemplo: númerosPares([3, 4, 5, 2, 5]) describe [4, 2].*/
- function númerosPares (valores) {
- /*PROPOSITO: DENOTA UNA NUEVA LISTA CON LOS VALORES PARES DE UNA LISTA DADA
- PRECONDICION: NINGUNA*/
- listaDeNumerosPares := []
- foreach valor in valores {
- listaDeNumerosPares := listaDeNumerosPares ++ singularSi(valor, esPar(valor))
- }return (listaDeNumerosPares)
- }
- function esPar (número){
- return (número mod 2 == 0)
- }
- /*Ejercicio 18
- Escribir la función sinElemento(lista,elemento) que, dada una lista y un elemento, describa la
- lista que resulta de quitar todas las apariciones de elemento que ocurren en lista.
- ¿de qué tipo debe ser elemento?
- Ejemplo: sinElemento([Azul, Verde, Azul, Rojo], Azul) describe [Verde, Rojo].*/
- function sinElemento (lista, elemento){
- /*PROPOSITO: Denota una lista sin "elemento"
- PRECONDICION: NINGUNA
- */
- listaSinElemento := []
- foreach elem in lista{
- listaSinElemento := listaSinElemento ++
- singularSi(element2, not es_iguala_(elem, elemento))
- } return (listaSinElemento)
- }
- function es_iguala_(elem, elemento) {
- return (elem == elemento)
- }
- /*Ejercicio 19
- Escribir la función soloLosDePosicionesImpares(lista) que, dada una lista, describa la lista que
- se obtiene de quitar los elementos en las posiciones pares.
- Ejemplo: soloLosDePosicionesImpares([2, 2, 8, 4, 5, 6]) describe [2, 8, 5]*/
- function soloLosDePosicionesImpares (lista) {
- /*
- PROPOSITO: DADA UNA LISTA SOLO ELIJE LOS ELEMENTOS EN POSICIONES IMPARES Y ARMA UNA NUEVA LISTA
- PRECONDICION: NINGUNA
- */
- listaDeElemImpares := []
- listaATrabajar := lista
- while (not esVacía(listaATrabajar) && (longitud(listaATrabajar) >= 2)){
- listaDeElemImpares := listaDeElemImpares ++ [primero(listaATrabajar)]
- listaATrabajar := sinLosDosPrimeros(listaATrabajar)
- }
- return (listaDeElemImpares ++ [primero(listaATrabajar)])
- }
- function sinLosDosPrimeros(lista){
- /*PROPOSITO: DADA UNA LISTA se le restan los primeros dos elementos
- PRECONDICION: NINGUNA
- */
- return (resto(resto(lista))) /////REVISAR
- }
- /*Ejercicio 20
- Un elemento de una lista se dice interno si es igual al anterior de la lista. Escribir la función
- reducciónDeBloques(valores) que, dada valores (una lista de Números), describa la lista que se
- obtiene de quitar todos los elementos internos.
- Ejemplo: reducciónDeBloques([1, 1, 2, 2, 2, 2, 3, 1, 2, 2]) describe [1, 2, 3, 1, 2].*/
- function reducciónDeBloques (valores) {
- /*PROPOSITO: Denotar una lista sin los valores internos
- PRECONDICION: no tiene
- PARAMETROS: "valores" corresponde a una lista de cualquier tipo*/
- listaSinInternos := [primero(valores)]
- valorAnterior := primero(valores)
- foreach valor in resto(valores) {
- listaSinInternos := listaSinInternos ++ singularSi(valor, not es_iguala_(valor, valorAnterior))
- valorAnterior := valor
- }return (listaSinInternos)
- }
- /*Ejercicio 21
- Escribir la función sinDuplicados(lista) que, dada una lista, describa una lista que tenga todos
- los elementos de lista, pero donde no aparecen elementos repetidos.
- Ejemplo: sinDuplicados([1, 3, 4, 2, 4, 3, 5]) describe [1, 3, 4, 2, 5] (también es válido el
- resultado [1, 2, 4, 3, 5]).*/
- function sinDuplicados(lista) {
- /*PROPOSITO: Denota una lista sin valores duplicados
- PRECONDICIÓN: Ninguna
- PARAMETROS: "lista" corresponde a una lista de valores de cualquier tipo*/
- listaSinDupli := []
- listaDeValores := lista
- while (not esVacía(listaDeValores)){
- valorActual := primero(listaDeValores)
- listaSinDupli := listaSinDupli ++ singularSi(valorActual, not contiene(listaSinDupli, valorActual))
- listaDeValores := resto(listaDeValores)
- } return (listaSinDupli)
- }
- /*Ejercicio 22
- Escribir la función uniónDe_con_(lista1,lista2) que, dadas lista1 y lista2 que no contienen
- elementos repetidos, describe una lista sin repetidos que contenga todos los elementos que
- aparecen en alguna de las 2 listas. Ejemplo: uniónDe_con_([1, 3, 4], [2, 4, 3, 5]) describe [1, 3,
- 4, 2, 5]. ¿de qué tipo es lista1? ¿y de qué tipo es lista2? ¿pueden ser ambas de otro tipo?*/
- function uniónDe_con_(lista1, lista2) {
- /*PROPOSITO: Denota una lista unificada entre "lista1" y "lista2" sin elementos repetidos
- PRECONDICIÓN: No tiene
- PARAMETROS: "Lista1" y "lista2" son listas del mismo tipo*/
- return (sinDuplicados(lista1++lista2))
- }
- /*Ejercicio 23
- Escribir la función intersecciónDe_con_(lista1,lista2) que, dadas lista1 y lista2 que no contienen
- elementos repetidos, describe la lista de todos los elementos que aparecen tanto en lista1
- como en lista2. Ejemplo: intersecciónDe_con_([1, 3, 4], [2, 4, 3, 5]) describe [3, 4].*/
- function intersecciónde_con_(lista1, lista2) {
- /*PROPOSITO: Denota una nueva lista con los elementos repetidos en "lista1" y "lista2"
- PRECONDICIÓN: Las listas dadas no contienen elementos repetidos
- PARAMETROS: "Lista1" y "lista2" son dos listas del mismo tipo*/
- listaDeIntersección := []
- foreach valor in lista1{
- listaDeIntersección := listaDeIntersección ++ singularSi(valor, contiene(lista2, valor))
- }
- return (listaDeIntersección)
- }
- /*Ejercicio 24
- Escribir la función contiene(lista, elemento) que, dada una lista y un elemento, describa
- verdadero si el elemento está en la lista.
- Ejemplo: contiene([2,3,4], 3) describe True.
- contiene([2,3,4], 5) describe False.*/
- function contiene (lista, elemento){
- /*PROPOSITO: Denota verdadero, si "elemento" se encuentra en la "lista".
- PRECONDICION: No tiene
- PARAMETROS: "Lista" es una lista de cualquier tipo, "elemento" es del mismo tipo que "lista"*/
- listaDeValores := lista
- while (not esVacía(listaDeValores) && not esElemento(primero(listaDeValores), elemento)){
- listaDeValores := resto(listaDeValores)
- }return (not esVacía(listaDeValores))
- }
- function esElemento (elem1, elem2){
- return (elem1 == elem2)
- }
- /*Ejercicio 25
- Escribir la función algunoEnMedioDe(lista, desde, hasta) que, dada una lista de Números y dos
- números desde y hasta, describa verdadero si la lista contiene un elemento que se encuentre
- entre los números desde y hasta, sin incluirlos. Es decir, si algún elemento k de la lista, cumple
- desde < k < hasta.
- Ejemplo: algunoEnMedioDe([7, 3, 25, 16], 13, 18) describe True.
- algunoEnMedioDe([7, 3, 25, 16], 13, 15) describe False.*/
- function algunoEnMedioDe(lista, desde, hasta) {
- /*PROPOSITO: Denota verdadero si los valores númericos de la lista, son >desde y <hasta
- PRECONDICIÓN: NINGUNA
- PARAMETROS: "Lista" corresponde a una lista de números.
- *"desde" corresponde a un número
- *"hasta" corresponde a un número*/
- listaDeNúmeros := lista
- while (not esVacía(listaDeNúmeros) && not contiene([desde+1 .. hasta-1], primero(listaDeNúmeros))){
- listaDeNúmeros := resto (listaDeNúmeros)
- }
- return (not esVacía(listaDeNúmeros))
- }
- /*Ejercicio 26
- Escribir la función lista_estáIncluídaEn_(lista1,lista2) que dadas lista1 y lista2 que no contienen
- elementos repetidos, describe si lista1 se encuentra contenida en lista2.
- Ejemplos: lista_estáIncluídaEn_([4,5] , [2,3,4,5,6]) denota True.
- lista_estáIncluídaEn_([4,5,8] , [2,3,4,5,6]) denota False.
- lista_estáIncluídaEn_([4,5] , [2,3,4,6,5]) denota True.*/
- function lista_estáIncluídaEn_(lista1, lista2) {
- /*PROPOSITO: Describe si lista1 está incluida en lista2
- PRECONDICIÓN: Las Listas no poseen números repetidos
- PARAMETROS: lista1 y lista2 son listas de cualquier tipo*/
- listaCorta := longitudDeListasCorta (lista1, lista2)
- listaLarga := longitudDeListasLarga(lista1, lista2)
- while (not esVacía(listaCorta) && contiene (listaLarga, primero(listaCorta))) {
- listaCorta := resto(listaCorta)
- }return (esVacía(listaCorta))
- }
- function longitudDeListasCorta (lista1, lista2){
- return (choose lista1 when (longitud (lista1) < longitud(lista2))
- lista2 when (longitud (lista2) < longitud(lista1))
- lista1 otherwise)
- }
- function longitudDeListasLarga (lista1, lista2){
- return (choose lista1 when (longitud(lista1) > longitud(lista2))
- lista2 when (longitud(lista2) > longitud(lista1))
- lista2 otherwise)
- }
- /*Ejercicio 27
- Escribir la función estáOrdenada(valores) que, dada valores (una lista de Números) describe si
- está ordenada de menor a mayor. Para que una lista esté ordenada, cada elemento debe ser
- menor al que le sigue.
- Ejemplos: estáOrdenada([2, 7, 9, 15]) describe True
- estáOrdenada([2, 15, 9, 7]) describe False.*/
- function estáOrdenada(valores) {
- /*PROPOSITO: Dada una lista de números describe si está ordenada de menor a mayor
- PRECONDICIÓN: NINGUNA
- PARÁMETROS: "valores" corresponde a una lista de números*/
- valorAnterior := primero(valores)
- listaDeValores := resto(valores)
- while(not esVacía(listaDeValores) && esMenor(valorAnterior, primero(listaDeValores))){
- valorAnterior := primero(listaDeValores)
- listaDeValores := resto(listaDeValores)
- }return (esVacía(listaDeValores))
- }
- function esMenor (valor1, valor2){
- return (valor1 < valor2)
- }
- /*Ejercicio 28
- Escribir la función tomar(cantidad, valores) que, dado un número cantidad y una lista valores,
- describe la lista que se obtiene de quedarse únicamente con los primeros cantidad elementos
- de la lista. ¿Cuál es la precondición de esta función?
- Ejemplo: tomar(4, [4, 8, 15, 16, 23, 42]) describe [4, 8, 15, 16]
- tomar(2, [4, 8, 15, 16, 23, 42]) describe [4, 8]*/
- function tomar(cantidad, valores) {
- /*PROPOSITO: Denota una nueva lista con los primeros "cantidad" elementos de la lista "valores"
- PRECONDICIÓN: La lista debe tener al menos "cantidad" elementos.
- PARAMETROS: "cantidad": es un valor numérico
- "valores": corresponde a una lista de cualquier tipo.*/
- listaTomar := []
- listaValores := valores
- cantidadDeElementos := cantidad
- while(cantidadDeElementos /= 0){
- listaTomar := listaTomar ++ [primero(listaValores)]
- listaValores := resto(listaValores)
- cantidadDeElementos := cantidadDeElementos-1
- }
- return (listaTomar)
- }
- /*Ejercicio 29
- Escribir la función tirar(cantidad, valores) que, dado un número cantidad y una lista valores,
- describe la lista que se obtiene de quedarse con todos los elementos menos los primeros
- cantidad elementos de la lista. ¿Cuál es la precondición de esta función?
- Ejemplo: tirar(4, [4, 8, 15, 16, 23, 42]) describe [23, 42]
- tirar(2, [4, 8, 15, 16, 23, 42]) describe [15, 16, 23, 42]*/
- function tirar (cantidad, valores){
- /*PROPÓSITO: Denota una nueva lista sin los primeros "cantidad" elementos de la lista
- PRECONDICIÓN: "cantidad" no puede ser mayor a la cantidad de elementos de la lista
- PARAMETROS: "cantidad": corresponde a un valor numérico
- "valores": es una lista de valores de cualquier tipo*/
- listaValores := valores
- repeat (cantidad){
- listaValores := resto(listaValores)
- }
- return (listaValores)
- }
- /*Ejercicio 30
- Escribir la función posiciónEnLaQueAprece(elemento, valores) que, dado un elemento y una
- lista de valores, describe la posición de la lista en la que aparece el elemento en dicha lista.
- ¿Cuál es la precondición de la función?
- Ejemplo: posiciónEnLaQueAprece(8, [4, 8, 15, 16, 23, 42]) describe 2
- posiciónEnLaQueAprece(16, [4, 8, 15, 16, 23, 42]) describe 4*/
- function posiciónEnLaQueAparece(elemento, valores){
- /*PROPOSITO: Denota la posición de "elemento" en la lista "valores"
- PRECONDICIÓN: No tiene ////////////////////////////////////////////////////////////////////
- PARAMETRO: "elemento": corresponde a un elemento de la lista "valores"
- "valores": es una lista de cualquier tipo*/
- listaValores := valores
- posiciónElemento := 0
- while (primero(listaValores) /= elemento){
- listaValores := resto(listaValores)
- posiciónElemento := posiciónElemento+1
- }return(posiciónElemento+1)
- }
- /*Ejercicio 31
- Escribir la función sinPrimerAparición(elemento, valores) que, dado un elemento y una lista de
- valores, describe la lista que se obtiene de eliminar una única vez el elemento, si es que este
- aparece en la lista.
- Ejemplo: sinPrimerAparición(8, [4, 8, 42, 15, 8, 16, 42]) describe [4, 42, 15, 8, 16, 42]
- sinPrimerAparición(42, [4, 8, 42, 15, 8, 16, 42]) describe [4, 8, 15, 8, 16, 42]*/
- function sinPrimerAparición (elemento, valores) {
- /*PROPOSITO: Describe una lista que elimina la primer aparición de "elemento" de la lista si es que
- se encuentra en ella
- PRECONDICIÓN: NINGUNA
- PARAMETROS:"elemento": corresponde a un elemento de la lista "valores"
- "valores": es una lista de cualquier tipo */
- return (listaHastaElemento(elemento, valores) ++ listaDesdeSinElemento(elemento, valores))
- }
- function listaDesdeSinElemento (elemento, valores) {
- listaDeValores := valores
- while (not esVacía(listaDeValores) && primero(listaDeValores) /= elemento){
- listaDeValores := resto(listaDeValores)
- }return (resto(listaDeValores))
- }
- function listaHastaElemento (elemento, valores) {
- listaDeValores := valores
- listaDeValoresVistos := []
- while (not esVacía(listaDeValores) && primero(listaDeValores) /= elemento){
- listaDeValoresVistos := listaDeValoresVistos ++ [primero(listaDeValores)]
- listaDeValores := resto(listaDeValores)
- } return (listaDeValoresVistos)
- }
- /*Ejercicio 32
- Escribir la función minimoElemento(valores) que, dada valores (una lista de Números), describe
- el elemento más chico que se encuentra en la lista. ¿Cuál es la precondición de la función?
- Ejemplo: minimoElemento([3, 21, 9, 45, 3, 7]) describe 3*/
- function minimoElemento (valores) {
- /*PROPOSITO: Denota el menor elemento de una lista numérica
- PRECONDICIÓN: La lista no puede ser vacía
- Parametros: "valores" denota una lista de números*/
- valorMinimo := primero(valores)
- foreach valor in resto(valores) {
- valorMinimo := valorMenor(valorMinimo, valor)
- }return (valorMinimo)
- }
- function valorMenor (valor1, valor2) {
- return (choose valor1 when (valor1 < valor2)
- valor2 otherwise)
- }
- /*Ejercicio 33
- Escribir la función máximoElemento(valores) que, dada valores (una lista de Números),
- describe el elemento más grande que se encuentra en la lista. ¿Cuál es la precondición de la
- función?
- Ejemplo: máximoElemento([3, 21, 9, 45, 3, 7]) describe 45*/
- function maximoElemento (valores) {
- /*PROPOSITO: Denota el mayor elemento de una lista numérica
- PRECONDICIÓN: La lista no puede ser vacía
- Parametros: "valores" denota una lista de números*/
- valorMaximo := primero(valores)
- foreach valor in resto(valores) {
- valorMaximo := valorMayor(valorMaximo, valor)
- }return (valorMaximo)
- }
- function valorMayor (valor1, valor2) {
- return (choose valor1 when (valor1 > valor2)
- valor2 otherwise)
- }
- /*Ejercicio 34
- Escribir la función sinElMínimoElemento(valores) que, dada valores (una lista de Números),
- describe la lista que se obtiene de eliminar una única vez el elemento más chico. ¿Cuál es la
- precondición de la función?
- Ejemplo: sinElMínimoElemento([3, 21, 9, 45, 3, 7]) describe [21, 9, 45, 3, 7]*/
- function sinElMínimoElemento (valores){
- /*PROPOSITO: Devuelve una lista sin el valor mínimo de una lista de números
- PRECONDICIÓN: No tiene
- PARAMETROS: "VALORES" corresponde a una lista de números*/
- return (sinPrimerAparición(minimoElemento(valores), valores))
- }
- /*Ejercicio 35
- Escribir la función sinElMáximoElemento(valores) que, dada valores (una lista de Números),
- describe la lista que se obtiene de eliminar una única vez el elemento más chico. ¿Cuál es la
- precondición de la función?
- Ejemplo: sinElMáximoElemento([3, 21, 9, 45, 3, 7]) describe [3, 21, 9, 3, 7]*/
- function sinElMáximoElemento (valores){
- /*PROPOSITO: Devuelve una lista sin el valor mínimo de una lista de números
- PRECONDICIÓN: No tiene
- PARAMETROS: "VALORES" corresponde a una lista de números*/
- return (sinPrimerAparición(maximoElemento(valores), valores))
- }
- /*Ejercicio 36
- Escribir la función listaOrdenada(valores) que, dada valores (una lista de Números), describe la
- lista ordenada de menor a mayor. ¿Se puede elaborar una estrategia combinando los ejercicios
- anteriores? ¿Se le ocurre alguna otra estrategia?
- Ejemplo: listaOrdenada([2, 1, 0, 3]) describe [0,1,2,3].*/
- function listaOrdenada (valores) {
- /*PROPOSITO: Denota una lista con los elementos ordenados de menos a mayor de la lista "valores"
- PRECONDICIÓN: Ninguna
- PARAMETROS: "valores" denota una lista de números*/
- listaOrdenada := []
- listaDeValores := valores
- while (not esVacía(listaDeValores)) {
- listaOrdenada := listaOrdenada ++ [minimoElemento(listaDeValores)]
- listaDeValores := sinElMínimoElemento (listaDeValores)
- }return (listaOrdenada)
- }
- /*Ejercicio 37
- Escribir la función agrupar_deA_(lista,cantidad) que, dada lista y cantidad, describe la lista de
- listas que agrupa los elementos de lista en grupos de cantidad elementos. El último grupo
- puede no tener cantidad de elemento, y tener menos.
- Ejemplo: agrupar([1,2,3,4,5,6,7,8, 9, 10, 11], 3) denota [[1,2,3], [4,5,6], [7,8, 9], [10, 11]].*/
- function agrupar_deA_ (lista, cantidad) {
- /* PROPOSITO: Devuelve una lista que agrupa en listas "cantidad" de elementos
- con los elementos de "lista"
- PRECONDICIÓN: "Lista" debe tener al menos "cantidad" de elemntos
- PARAMETROS: "lista" es una lista de elementos de cualquier tipo
- "cantidad" corresponde a la cantidad de elementos que debe poseer la lista de resultado
- RESULTADO: Denota una lista que contiene los elementos de "lista" repartidos según "cantidad" como
- parámetros para definir la cantidad de elementos de cada lista*/
- listaSuperior := []
- listaDeValores := lista
- while (not esVacía (listaDeValores) && quedanAlMenos_(listaDeValores, cantidad)){
- listaSuperior := listaSuperior ++ elemDeListaASumar(listaDeValores, cantidad)
- repeat (cantidad){listaDeValores := resto(listaDeValores)}
- }return (listaSuperior++ [listaDeValores])
- }
- function quedanAlMenos_ (lista, cantidad){
- /*PROPOSITO: Denota si al menos queda "cantidad" elementos en la lista
- PRECONDICIÓN: NINGUNA
- PARAMETROS: "lista" corresponde a una lista de valores de cualquier tipo
- "cantidad" denota un número*/
- return (longitud(lista) >= cantidad)
- }
- function elemDeListaASumar(lista, cantidad) {
- /*PROPOSITO: Devuelve una lista con cantidad de elementos según "cantidad"
- PRECONDICIÓN: Ninguna
- PARAMETROS: "lista" corresponde a una lista de valores de cualquier tipo
- "cantidad" denota un número*/
- listaDeValores := lista
- listaDeElemASumar := []
- while (not esVacía(listaDeValores) && longitud(listaDeElemASumar) /= cantidad) {
- listaDeElemASumar := listaDeElemASumar ++ [primero(listaDeValores)]
- listaDeValores := resto (listaDeValores)
- }return ([listaDeElemASumar])
- }
- program { return (desagruparLista([[1,2,3,4],[5,6,7],[8,9,10]]))}
- /*Ejercicio 38
- Escribir la función desagruparLista(listaDeListas) que, dada listaDeListas, describe una lista
- que contiene cada uno de los elementos de las listas internas de listaDeListas.
- Ejemplo: desagruparLista([[1,2,3],[4,5,6],[7,8,9]]) describe [1,2,3,4,5,6,7,8,9].*/
- function desagruparLista (listaDeListas){
- /*PROPOSITO: Denota una nueva lista con todos los elementos de cada lista que cotiene
- PRECONDICIÓN: Ninguna
- PARAMETROS: "listaDeListas" corresponde a una lista con listas todas del mismo tipo*/
- listaCompleta := []
- foreach lista in listaDeListas {
- listaCompleta := listaCompleta ++ lista
- }return (listaCompleta)
- }
Add Comment
Please, Sign In to add comment