# data[].attributes.attachment_link.readable_text
// Tipo: Librería para C++
// Autor: Rafael Dalzotto
// Versión: 1.0 (WIP)
// Tema principal: Distintas funciones útiles para distintos casos (No hay un tema central)
// Instalación: El archivo Utilidades.h debe estar en la misma carpeta que el código fuente (.cpp)

/****************************************************************************************************
 *		ACLARACIÓN: Esta librería debe ser incluída luego de declarar el using namespace std;		*
 * 		de la siguiente forma:																		*
 *																									*	
 *																									*
 *																									*
 *			//INICIO DE TU PROGRAMA.CPP																*
 *			#include <iostream> // estas tres librerías son necesarias								*
 *			#include <stdio.h>																		*
 *			#include <stdlib.h>																		*
 *																									*
 *			using namespace std;																	*
 *																									*
 *			#include "Utilidades.h"	// aquí se incluye la librería Utilidades						*
 *																									*
 ****************************************************************************************************/

// Importantes LIB
#include <ctype.h>
#include <string>
#include <vector>


string ToString(vector<char> INPUT){	 // Utilizar la función ToString(vector<char>); permite convertir de Vector<char> (char array) a string, devuelve una variable tipo string
	return string(INPUT.data(), INPUT.size());
}
// EJ: VariableString = ToString(VariableVector);


vector<char> ToVector(string INPUT){	// Utilizar la función ToVector(string); permite convertir de string a Vector<char> (char array), devuelve una variable tipo vector<char>
  	vector<char> OUTPUT(0);
  	for (int i = 0; i < INPUT.size(); i++)
  	{
  		OUTPUT.push_back(INPUT[i]);
  	}
  	return OUTPUT;
}// EJ: VariableVector = ToVector("ASD");
// EJ2: VariableVector = ToVector(VariableString);






/* las funciones p(); (print) y pl(); (print + salto de linea) son funciones sobrecargadas para imprimir información en la consola utilizando un único comando
las funciones p(variable); pueden imprimir información de los tipos STRING, INT y VECTOR<CHAR> sin el salto de línea (Enter)
las funciones pl(var); pueden imprimir información de los mismos tipos que la funcion p(var); pero agregan un salto de línea al final (Enter)

las funciones p() y pl() que además de ingresar la variable, se les ingresa un valor booleano ej: pl(var, bool); sirven para gestionar la impresión de información, es decir,
para desactivar el uso de la función o activarla con una variable booleana central, a estas funciones las utilizo cuando tengo muchos comandos p() o pl() distribuídos
de forma desordenada y quiero desactivar su funcionamiento o activarlos modificando el valor de una variable booleana

de esta forma, si p(var,bool) tiene como valor booleano en bool el valor TRUE (verdadero), la función print estará activada,
caso contrario, estará desactivada y no imprimirá nada

A esta función la utilizo cuando quiero desactivar o activar el Debug de un problama, modificando el valor de la variable global booleana que ingreso en la función

p(); y pl(); facilitan el uso de el comando cout << VAR; para una escritura más veloz
*/
//---- sin salto de linea [ p(); ]
void p(string A){
	cout << A;
}
void p(string A,bool O){
	if(O){cout << A;}
}
void p(int A){
	cout << A;
}
void p(int A, bool O){
	if(O){cout << A;}
}
void p(vector<char> INPUT){
	cout << ToString(INPUT);
}
void p(vector<char> INPUT, bool O){
	if(O){cout << ToString(INPUT);}
}
//---- con salto de línea [		pl();	]:
void pl(string A){
	cout << A << "\n";
}
void pl(string A,bool O){
	if(O){cout << A<< "\n";}
}
void pl(int A){
	cout << A<< "\n";
}
void pl(int A, bool O){
	if(O){cout << A<< "\n";}
}
void pl(vector<char> INPUT){
	cout << ToString(INPUT)<< "\n";
}
void pl(vector<char> INPUT, bool O){
	if(O){cout << ToString(INPUT)<< "\n";}
}// Ejemplo: pl("Ingrese valor X");



/* La función ToInt(Valor); devuelve un valor de Entero (Int) y permite convertir tanto desde String como de Vector<char> a Int, esta funcion tiene 2 sobrecargas (String y Vector<char>)
una de las particularidades de esta función es que está diseñada para ignorar los caracteres alfabéticos (a-z & A-Z) por lo cual
puede convertir valores de por ejemplo "A1B23C" a el valor numérico 123 */
int ToInt(string INPUT){ // De string a Int
	vector<char> vBUF(0);
	char cBUF[128];
	int out;

	vBUF = ToVector(INPUT);
	vector<char> Filter(0);


	for(int i=0; i<vBUF.size(); i++){
		if(isalpha(vBUF[i]) == 0){
	    	Filter.push_back(vBUF[i]);
		}
	}

	for(int i=0; i<Filter.size(); i++){
	    cBUF[i] = Filter[i];
	}
  	out = atoi (cBUF);
  	return out;
}// EJ: VariableInt = ToInt("230");
//EJ2: VariableInt = ToInt(VariableString);


/*int ToInt(char C){
	;// Función sin terminar (WIP)
}*/


int ToInt(vector<char> INPUT){ // De vector<char> a Int
	char cBUF[128];
	int out;
	vector<char> Filter(0);


	for(int i=0; i<INPUT.size(); i++){
		if(isalpha(INPUT[i]) == 0){
	    	Filter.push_back(INPUT[i]);
		}
	}

	for(int i=0; i<Filter.size(); i++){
	    cBUF[i] = Filter[i];
	}

  	out = atoi (cBUF);
  	return out;
}




// la función KnowUourPos(tamañoSubcadena, posiciónEnCadena) devuelve el desfase de una subcadena repetida dentro de una cadena
// tomando el valor en el que se posiciona la subcadena (pos) dentro de la cadena y el valor del tamaño de la subcadena (size)
// KnowYourPos devulve en qué posicion dentro de la cadena comienza la subcadena (EJ: para la subcadena "ABC", hallada al final de la cadena "BCABCABCABC", la subcadena "ABC" comienza en el valor 2 de la cadena si se toma que la primera posición es 0)
// el funcionamiento es el siguiente: se toma la posición dentro de una cadena (ejemplo: pos=20) y el tamaño de una cadena (ejemplo: size=3)
// entonces se va restando el 3 (size) a el 20 (pos) de forma repetitiva hasta que el valor sea menor que size (3), el valor obtenido (Que deberá ser menor que size) será
// el offset de el comienzo de la subcadena dentro de la cadena, para este ejemplo, el valor del offset sería el 2.
// otra forma de hacer esto es con el operador módulo (%), pero de esta forma queda más didáctico
int KnowYourPos(unsigned int size, unsigned int pos){
	for(pos; pos>=size; pos=pos-size){;}
	return int(pos);
}



// esta función encripta en cifrado vignere (desplazamiento de caracteres), el texto a encriptar es TEXT y la contraseña que puede ser tanto numérica (ej:2353) como alfabética (ej:DBHS) es el KEY
string VignereEncrypter(string sTEXT, string sKEY){
	vector<char> vTEXT = ToVector(sTEXT), vKEY = ToVector(sKEY), OUTPUT(0);
	vector<int> encryptOffset(0);
	

    for(int i=0; i<vKEY.size(); i++){
		if(isalpha(vKEY[0])){	
        	encryptOffset.push_back(int(vKEY[i]-65));
        	
        }else{
        	encryptOffset.push_back(int(vKEY[i]-48));
        	
        }
    }
    for(int x=0; x<vTEXT.size(); x++){
    	if((int(vTEXT[x]) + int(encryptOffset[KnowYourPos(vKEY.size(),x)]))> 65+25){
    	    OUTPUT.push_back(char(int(vTEXT[x]) + int(encryptOffset[KnowYourPos(vKEY.size(),x)]))-26);
    	}else{
    		OUTPUT.push_back(char(int(vTEXT[x]) + int(encryptOffset[KnowYourPos(vKEY.size(),x)])));
    	}
        
    }
    return ToString(OUTPUT);

}
//EJ:  TextoEncriptado = VignereEncrypter("HolaComoEstas", "123");
// Nota: Todavía no tuve tiempo para solucionar el tema de los espacios, por ahora solo funciona con textos sin espacio

# data[].attributes.body
# Castigando un rato al noble procesador

a = 0

b = 0

cont = 0

c = 0

from random import randint

while (cont < 100000):
a = randint(500,10000)

print a

b = pow(randint(3000,4000),90)
c = c + pow(b, randint(20,80))
print b
print c

cont = cont + 1

# data[].attributes.body
#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;

cout << "\nPrimer número:";
cin >> a;

cout << "\nSegundo número:";
cin >> b;

cout << "\nTercer número";
cin >> c;

cout << "Ingrese la operación(1 suma, 2 resta, 3 multiplicación, 4 división)?";
cin >> c;

if (c==1)
{d=a+b;}
if (c==2)
{d=a-b;}
if (c==3)
{d=a*b;}
if (c==4)
{d=a/b;}

cout << "El resultado de la operación es: " << c << endl;

return 0;
}

# data[].attributes.body
#include<iostream>
#include<math.h>
#include<cstdlib>
#include<time.h>
#include<stdlib.h>

using namespace std;

int main()
{
int a = 0;
int b = 0;
int c = 0;
float d = 0;
int e = 0;
srand(time(NULL));

cout << "Ingrese a: ";
cin >> a;
cout << "Ingrese b: ";
cin >> b;
cout << "Ingrese c: ";
cin >> c;

//rand();
e = (rand() % (11-0));

d = pow((a+b+c), e);

cout << "El resultado es : " << d << endl << "Y el random es " << e << endl;

return 0;

}

# data[].attributes.body
https://elrincondelc.com/curso-programacion-c
https://www.tutorialpython.com/
http://docs.python.org.ar/tutorial/3/index.html
http://www.mclibre.org/consultar/python/index.html
http://edupython.blogspot.com.ar/
https://showthebytes.wordpress.com/2011/04/13/python-uso-de-input-y-raw_input/

# data[].attributes.body
// Asignar un valor a una variable string.

#include<stdio.h> //Incluye el encabezado para las IO mas comúnes, como printf.

int main() // Función principal.
{
char palabra[10]; // Defino la variable char, en este caso de 10 espacios.

sprintf(palabra, "%s", "Mate amargo"); // Tranfiero sonre palabra la cadena de caractéres "Mate amargo".

printf ("\n%s\n\n", palabra); // Imprimo por pantalla palabra.

return 0; // Si el programa termina su ejecución bien, la función principal devuelve un cero como valor.
}

/*

Compilación:
Con GCC:
gcc string.c -o string

Con make:
make string

Con cc:
cc string.c -o string

*/

# data[].attributes.body
//Ejercicio de preguntas sobre sumas.

#include<stdio.h>
int main()
{
int a;
int c;
int mal;
mal=0;
c=0;
printf("BIENVENIDOS A ESTE JUEGOS DE PREGUNTAS Y RESPUESTAS\n \n");
printf("___________________________________________________\n \n");
printf("Cuanto da como resultado la suma de 2 mas 2? ");
scanf("%i", &a);
if (a == 4)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}

printf("Cuanto es la suma de 3 mas 5? ");
scanf("%i", &a);
if (a == 8)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}
printf("Cuanto es la suma de 30 mas 5? ");
scanf("%i", &a);
if (a == 35)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}
printf("Cuanto es la suma de 10 mas 7? ");
scanf("%i", &a);
if (a == 17)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}
printf("Cuanto es la suma de 7 mas 11? ");
scanf("%i", &a);
if (a == 18)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}
printf("Cuanto es la suma de 1 mas 1? ");
scanf("%i", &a);
if (a == 2)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}

printf("Cuanto es la suma de 45 mas 5? ");
scanf("%i", &a);
if (a == 50)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}

printf("Cuanto es la suma de 4 mas 3? ");
scanf("%i", &a);
if (a == 7)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}

printf("Cuanto es la suma de 6 mas 6? ");
scanf("%i", &a);
if (a == 12)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}

printf("Cuanto es la suma de 89 mas 1? ");
scanf("%i", &a);
if (a == 90)
{
printf("Correcto!\n");
c++;
}
else
{
printf("INCORRECTO\n");
mal++;
}

printf("La cantidad de respuestas correctas fue de %i\n", c);
printf("La cantidad de respuestas incorrectas fue de %i\n", mal);
printf("MUCHAS GRACIAS\n");
printf("Enrique Redondo 2018\n");
return 0;

}

# data[].attributes.body
//Programa de máximos y mínimos con un while.
//Entrar diez números por teclado, acumularlos, dar máximos y mínimos, y mostrar por pantalla.

#include<stdio.h>
#include<stdlib.h>

int main()
{
system( "clear" );
int num;
int cont;
int acu;
int max;
int min;
min=100000000;
max=-100000000;
acu=0;
cont=0;

while (cont<10)
{
cont++;
printf("\nIntroduzca un número: ");
scanf("%i", &num);

if (num>max)
{
max=num;
}

if (num<min)
{
min=num;
}

acu=acu+num;

}

printf("El valor máximo es %i\n", max);
printf("El valor mínimo es %i\n", min);
printf("El total acumuado es %i\n", acu);
printf("La cantidad de números entrados es %i\n", cont);
//system( "sleep 10");
//system( "read -n 0 -ers" );
printf("Pulse cualquier tecla para continuar..\n");
getchar();
getchar();
system( "clear" );
printf("Muchas gracias!\n\n");

return 0;

}

# data[].attributes.body
#include<stdio.h>
#include<stdlib.h>

int main()
{
double a, b, c;
a = 0;
b = 0;
c = 0;
int oper = 0;
char tipo[20];

system("clear");

printf("\nIntroduzca la primera variable: ");
scanf("%lf", &a);
printf("\nIntroduzca la segunda variable: ");
scanf("%lf", &b);
printf("\nQue operación quiere realizar? (1-suma, 2-resta, 3-multiplicación, 4-división: ");
scanf("%i", &oper);

switch(oper)
{
case 1 :
c = a + b;
sprintf(tipo,"%s", "SUMA");
break;
case 2 :
c = a - b;
sprintf(tipo,"%s", "RESTA");
break;
case 3 :
c = a * b;
sprintf(tipo,"%s", "MULTIPLICACION");
break;
case 4 :
c = a / b;
sprintf(tipo,"%s", "DIVISION");
break;
}

printf("El resultado de la operación %s es : %lf\n\n", tipo, c );

return 0;

}

# data[].attributes.body
#include<stdio.h>

int main()

{
printf("\n\E[41m Color rojo \E[00m\n\n");

printf("\n\E[42m Color verde \E[00m\n\n");

printf("\n\e[41m Color rojo \e[00m\n\n");

printf("\n\E[0;31m Letra color rojo \E[00m\n\n");

printf("\n\E[0;32m Letra color verde \E[00m\n\n");

printf("\n\E[0;4m Subrayado \E[00m\n\n");

printf("\n\E[0;1m Negrita \E[00m\n\n");

printf("\n\e[3m Cursiva \E[00m\n\n");

return 0;
}

/*

Colores de letra (foreground)
------------------------------

Combinación Color
========================
0;30 Negro
0;31 Rojo
0;32 Verde
0;33 Marrón
0;34 Azul
0;35 Púrpura
0;36 Cian
0;37 Gris claro
1;30 Gris oscuro
1;31 Rojo claro
1;32 Verde claro
1;33 Amarillo
1;34 Azul claro
1;35 Púrpura claro
1;36 Cian claro
1;37 Blanco

Colores de fondo (background)
------------------------------

Combinación Color
========================
40    Negro
41    Rojo
42    Verde
43    Marrón
44    Azul
45    Púrpura
46    Turquesa
47    Gris

Efectos de carácter
-------------------------------

Combinación Estilo
========================
0;4   Subrayado
0;5   Titilante (blink)(puede que no funcione)
0;1   Negrita
0;8   Transparente (?)

echo -e "\e[3mTexto en cursiva\e[0m"

*/

# data[].attributes.body
// Introduzca nombre y apellido y muestrelo en una línea por pantalla.

#include<stdio.h>
#include<stdlib.h>

int main()
{
system( "clear" );

char nombre[20];
char apellido[20];

printf("\nIntroduzca el nombre: ");
scanf("%s", nombre);

printf("\nIntroduzca el apellido: ");
scanf("%s", apellido);

//printf("El nombre es: %s\n", nombre);
//printf("El apellido es: %s\n", apellido);
printf("El nombre completo es %s %s\n", nombre, apellido);
printf("Presione cualquier tecla para continuar..");
getchar();
getchar();
system("clear");
printf("Muchas gracias!\n");

return 0;

}

# data[].attributes.body
https://www.w3schools.com/js/

# data[].attributes.body
#include <stdio.h>
int main()
{
int nivel, c, max, min;
c = 0;
max = -5000;
min =  5000;

do {
printf( "Ingrese el nivel:" );
scanf( "%d" , &nivel );
c++;

if ( nivel > max )
{
max = nivel;
}

if (nivel < min)
{
min = nivel;
}
} while( c < 6);

printf("el mayor es: %d\n", max);
printf("el menor es: %d\n", min);
return 0;
}