C++

# Idioma Español

// Funciones

int bits\_64() {
 int a;
 a = numeric\_limits<unsigned long long>::digits;
 return a;
}

int bits\_32() {
 int a;
 a = numeric\_limits<unsigned long int>::digits;
 return a;
}

int bits\_32\_2() {
 int a;
 a = numeric\_limits<unsigned int>::digits;
 return a;
}

int bits\_31() {
 int a;
 a = numeric\_limits<int>::digits;
 return a;
}

int bits\_16() {
 int a;
 a = numeric\_limits<unsigned short int>::digits;
 return a;
}

int bits\_15() {
 int a;
 a = numeric\_limits<short>::digits;
 return a;
}

int bits\_8() {
 int a;
 a = numeric\_limits<unsigned char>::digits;
 return a;
}

int bits\_7() {
 int a;
 a = numeric\_limits<signed char>::digits;
 return a;
}

int getProcesador\_bits\_2(int a) {
 if (a==64) {
 return bits\_64();
 } else
 if (a==32) {
 // Opcion 1
 return bits\_32();
 // U
 // Opcion 2
 return bits\_32\_2();
 } else
 if (a==31) {
 return bits\_31();
 } else
 if (a==16) {
 return bits\_16();
 } else
 if (a==15) {
 return bits\_15();
 } else
 if (a==8) {
 return bits\_8();
 } else
 if (a==7) {
 return bits\_7();
 } else
 {
 return 0;
 }
}

int getProcesador\_Bits() {
 int a;
 if (getProcesador\_bits\_2(64) == 64) {
 a=1;
 // #include "lib\_64.h"
 } else
 if (getProcesador\_bits\_2(32) == 32) {
 a=2;
 // #include "lib\_32.h"
 } else
 if (getProcesador\_bits\_2(31) == 31) {
 a=3;
 // #include "lib\_31.h"
 } else
 if (getProcesador\_bits\_2(16) == 16) {
 a=4;
 // #include "lib\_16.h"
 } else
 if (getProcesador\_bits\_2(15) == 15) {
 a=5;
 // #include "lib\_15.h"
 } else
 if (getProcesador\_bits\_2(8) == 8) {
 a=6;
 // #include "lib\_8.h"
 } else
 if (getProcesador\_bits\_2(7) == 7) {
 a=7;
 // #include "lib\_8.h"
 } else
 {
 cout << "Otro procesador" << endl;
 //pausa\_intro();
 a=0;
 }
 return a;
}

int getProcesador\_Bits\_return() {
 if (getProcesador\_bits\_2(64) == 64) {
 return 64;
 } else
 if (getProcesador\_bits\_2(32) == 32) {
 return 32;
 } else
 if (getProcesador\_bits\_2(31) == 31) {
 return 31;
 } else
 if (getProcesador\_bits\_2(16) == 16) {
 return 16;
 } else
 if (getProcesador\_bits\_2(15) == 15) {
 return 15;
 } else
 if (getProcesador\_bits\_2(8) == 8) {
 return 8;
 } else
 if (getProcesador\_bits\_2(7) == 7) {
 return 7;
 } else
 {
 cout << "Otro procesador" << endl;
 //pausa\_intro();
 return 0;
 }
}

int retorno\_bits(int a) {
 if (a==1) {
 return 64;
 } else
 if (a==2) {
 return 32;
 } else
 if (a==3) {
 return 31;
 } else
 if (a==4) {
 return 16;
 } else
 if (a==5) {
 return 15;
 } else
 if (a==6) {
 return 8;
 } else
 if (a==7) {
 return 7;
 } else
 if (a==1) {
 return 2;
 } else
 {
 return 0;
 }
}

/\*\*/
/\*\*/
/\*\*/

// Creamos una estructura "struct" y una clase "class".

/\*\*/
/\*\*/
/\*\*/

struct arquitecturay
{
 unsigned long long a;
 unsigned long int b;
 int c;
 unsigned short int d;
 short e;
 unsigned char f;
 signed char g;
 bool h;
};

typedef struct arquitecturay arquitecturay;

class arquitectura
{
private:
 int a;
 arquitecturay b;
public:
 arquitectura() : a() {
 this->a=getProcesador\_Bits();
 }
 void get\_Bits(int a);
 void get\_Input(unsigned long long a);
 int retorno\_bits\_op();
 int retorno\_bits();
 unsigned long long retorno();
};

void arquitectura::get\_Bits(int a) {
 this->a=a;
}

int arquitectura::retorno\_bits\_op() {
 return this->a;
}

int arquitectura::retorno\_bits() {
 return retorno\_bits(this->a);
}

void arquitectura::get\_Input(unsigned long long a) {
 if(this->a==1)
 {
 this->b.a=a;
 } else
 if(this->a==2)
 {
 this->b.b=a;
 } else
 if(this->a==3)
 {
 this->b.c=a;
 } else
 if(this->a==4)
 {
 this->b.d=a;
 } else
 if(this->a==5)
 {
 this->b.e=a;
 } else
 if(this->a==6)
 {
 this->b.f=a;
 } else
 if(this->a==7)
 {
 this->b.g=a;
 } else
 {
 this->b.h=a;
 }
}

unsigned long long arquitectura::retorno() {
 if(this->a==1)
 {
 return this->b.a;
 } else
 if(this->a==2)
 {
 return this->b.b;
 } else
 if(this->a==3)
 {
 return this->b.c;
 } else
 if(this->a==4)
 {
 return this->b.d;
 } else
 if(this->a==5)
 {
 return this->b.e;
 } else
 if(this->a==6)
 {
 return this->b.f;
 } else
 if(this->a==7)
 {
 return this->b.g;
 } else
 {
 return this->b.h;
 }
}

```
```
int main() {
 arquitectura a;
 a.Input(12345); // Se introduce en esta sección cualquier número que soporte la estructura
 cout << "Dato: " << a.retorno() << endl;
}

```

### Ejemplos de macros

```
#define FOR(A,B) for(arquitectura i=A;i<=B;i++)
#define FOR\_INVERSA(A,B) for(arquitectura i=B;i>=A;i--)
#define repite(A) FOR(1,A)
#define repite\_inversa(A) FOR\_INVERSA(1,B)

#define FOR\_j(A,B) for(arquitectura j=A;j<=B;j++)
#define FOR\_INVERSA\_J(A,B) for(arquitectura j=B;j>=A;j--)
#define repite\_j(A) FOR\_j(1,A)
#define repite\_inversa\_J(A) FOR\_INVERSA\_j(1,B)

#define FOR\_k(A,B) for(arquitectura k=A;k<=B;k++)
#define FOR\_INVERSA\_k(A,B) for(arquitectura k=B;k>=A;k--)
#define repite\_K(A) FOR\_K(1,A)
#define repite\_inversa\_k(A) FOR\_INVERSA\_k(1,B)

```
```
#define FOR(A,B) for(arquitectura i=A;i<=B;i++)
#define FOR\_REVERSE(A,B) for(arquitectura i=B;i>=A;i--)
#define repeat(A) FOR(1,A)
#define repeat\_reverse(A) FOR\_REVERSE(1,B)

#define FOR\_j(A,B) for(arquitectura j=A;j<=B;j++)
#define FOR\_REVERSE\_J(A,B) for(arquitectura j=B;j>=A;j--)
#define repeat\_j(A) FOR\_j(1,A)
#define repeat\_reverse\_J(A) FOR\_REVERSE\_j(1,B)

#define FOR\_k(A,B) for(arquitectura k=A;k<=B;k++)
#define FOR\_REVERSE\_k(A,B) for(arquitectura k=B;k>=A;k--)
#define repeat\_K(A) FOR\_K(1,A)
#define repeat\_reverse\_k(A) FOR\_REVERSE\_k(1,B)

```

### Ejemplos de funciones

##### Algoritmos de pausa usados

```
// Pausa
void pausa\_intro() {
 char a;
 bool salir=false;
 while ( salir != true ) {
 a = getch();
 if ( a == '\r' ) {
 salir = true;
 }
 }
}

```
DETALLES: Ideada por el creador de Supramegapedia para facilitar la tarea de no depender de "system("pause");" o "system("pause>NUL");".
 pausa\_key(Nat key);
```
// Pausa
void pausa\_key(string key) {
 char a;
 string b;
 bool salir=false;
 while ( salir != true ) {
 a = getch();
 b = convertiratexto(a);
 if ( b == key ) {
 salir = true;
 }
 }
}

```
```
// Pausa
void pausa\_no\_intro() {
 char a;
 string b;
 bool salir=false;
 while ( salir != true ) {
 a = getch();
 b = convertiratexto(a);
 if ( b != "\r" ) {
 salir = true;
 }
 }
}

```
```
// Pausa
void pausa\_no\_key(string key) {
 char a;
 string b;
 bool salir=false;
 while ( salir != true ) {
 a = getch();
 b = convertiratexto\_desde\_char(a);
 if ( b != key ) {
 salir = true;
 }
 }
}

```

##### Algoritmos de teclado y mouse usados

```
int key\_presionadas(bool modo, int key) {
 int sol;
 sol = 0;

 repite(key) {
 if (key\_state(modo,i)) {
 sol++;
 }
 }

 return sol;
}

```
```
int key\_presionadas\_mouse(bool modo, int key) {
 int sol;
 sol = 0;

 repite(key) {
 if (key\_state\_mouse(modo,i)) {
 sol++;
 }
 }

 return sol;
}

```

### Algoritmos de operadores con intento de evitar el desbordamiento

```
unsigned int suma\_32\_bits(unsigned int a, unsigned int b) {
 unsigned int sol;

 cout << "a= " << a << endl;
 cout << "b= " << b << endl;

 // valores utilizables 2^32-2, porque el ultimo numero sirve para
 // indicar que esta/(ha estado) fuera de rango
 unsigned int tope=((pow(2,32-1)-1)+(pow(2,32-1)))-1;
 cout << "tope= " << tope << endl;

 if (a<=tope && b<=tope) {
 if (a==tope) {
 if (b==0) {
 sol=tope;
 } else
 {
 cout << "error tope b" << endl;
 sol=tope+1;
 }
 } else
 if (a<b) {
 sol=suma\_32\_bits(b,a);
 } else
 {
 unsigned temp=tope-a;
 if (temp<b) {
 cout << "error tope" << endl;
 sol=tope+1;
 } else
 {
 sol=a+b;
 }
 }
 } else
 {
 cout << "error tope fuera de rango" << endl;
 sol=tope+1;
 }

 cout << "sol= " << sol << endl;

 return sol;
}

```

### Véase también

* Codificación de caracteres
* Código
* Enésimo número primo
* Fórmula de los números primos
* Fórmula general de los números primos
* JLeng
* Lenguaje de programación
* Número primo
* Optimización
* Optimización de código
* Programación