/* Asignatura: Programación II 
   Curso: Curso 2020-2021
   Ejercicios: Ejercicios de clase
 */ 
#include <iostream>  // Operaciones básicas de E/S
#include <stdlib.h>  // Generación de números aleatorios: srand(), rand() 
#include <time.h>    // Información de fecha y hora del sistema: time()
#include <iomanip>   // Manipuladores con parámetros
using namespace std;
const int N=10;
const int COTA_INFERIOR=0;
const int COTA_SUPERIOR=100;

// Ejercicio 4: Número piritiguay
int divisibilidad_i(int n,int i) {
    int exponente=0;
    while (n%i==0) {
        exponente=exponente+1;
        n=n/i;
	}
    return exponente;    
}
bool esNumeroPiritiguay(int n) {
    return divisibilidad_i(n,2)>=divisibilidad_i(n,3);
}
bool esListaPiritiguay(int lista[N]) {     // Todos los elementos de la lista son pirituguays
    int posicion=0;
    while ((posicion<N) && esNumeroPiritiguay(lista[posicion])) {
        posicion=posicion+1;
    }
    return posicion==N;
}
bool esListaCasiPiritiguay(int lista[N]) { // Existe un elemento de la lista que es piritiguay
    int posicion=0;
    while ((posicion<N) && (not esNumeroPiritiguay(lista[posicion]))) {
        posicion=posicion+1;
	}
    return posicion<N;
}
// Ejercicio 5: Acotación
bool esListaAcotada(int lista[N],int cotaInf,int cotaSup) {     // Todos los elementos de la lista son pirituguays
    int posicion=0;
    while ((posicion<N) && (cotaInf<=lista[posicion]) && (lista[posicion]<=cotaSup)) {
        posicion=posicion+1;
    }
    return posicion==N;
}
// Ejercicio 6: Espejo
void intercambiar(int &x,int &y) {
	int auxiliar=x;
	x=y;
	y=auxiliar;
}
void listaEspejo(int lista[N]) {
	for (int i=0; i<N/2; i++) {
		 intercambiar(lista[i],lista[N-i-1]);
	}
}
void mostrarLista(int lista[N],int longitud) {
   cout << "[";
   for (int i=0;i<longitud;i=i+1)	
      cout << fixed << setprecision(1) << setw(4) << lista[i]; 
   cout << " ]" << endl;   
}
/* Programa principal */
int main() {
   int vector1[N]={2,4,6,8,7,1,12,24,36,4};
   cout << "Lista piritiguay: " << esListaPiritiguay(vector1) << endl;
   cout << "Lista acotada: " << esListaAcotada(vector1,0,40) << endl;
   cout << "Espejo -ANTES-: " << endl; mostrarLista(vector1,N);
   listaEspejo(vector1);
   cout << "Espejo -DESPUES-: " << endl; mostrarLista(vector1,N);   
}
