Está en la página 1de 10

UNIVERSIDAD NACIONAL DE INGENIERÍA

Facultad de Ingeniería Química y Textil Período 2020-2


DEPARTAMENTO ACADÉMICO DE CIENCAS BÁSICAS 06/03/2021
Introducción a la Computación –BIC01

TEMA DE EXAMEN SUSTITUTORIO


TODAS LAS SECCIONES

NO SE ARRIESGUE A QUE SE LE DESCUENTE PUNTAJE


Siga las indicaciones entregadas previamente en el archivo:
BIC01-202-ES-Instrucciones.PDF
Tiempo: 01 Hora 45 minutos

PROBLEMAS

P1: (4 puntos) Hacer un programa en C++ que sume 2 números enteros de 20 dígitos cada uno
P2: (6 puntos) Hacer un programa que NO SUPERE un máximo 500 de iteraciones, USE FUNCIONES y evalúe el
volumen molar del SO2, usando la Ecuación de Estado de Van Der Waals
𝑎
(𝑃 + 2 ) (𝑣 − 𝑏) = 𝑅𝑇
𝑣
DATOS
Para el gas pedido, las contantes a= 6.7, b=0.056
Las condiciones de operación son: T = 27 °C y P = 20 atm
Constante universal de los gases R= 0.082 Lt-atm/°K.mol
ALGORITMO POR SUSTITUCIONES SUCESIVAS TENTATIVO
1. Leer datos de presión y temperatura
𝑅𝑇
2. Se inicia la iteración hallando el volumen molar como GAS IDEAL... 𝑣 = 𝑃
𝑅𝑇
3. Despejando 𝑣 de Van Der Waals se evalúa con el valor anterior un nuevo 𝑣1 = 𝑎 +𝑏
(𝑃+ 2 )
𝑣
4. Se halla un ERROR ABSOLUTO entre el valor anterior 𝑣 y el nuevo eavluado 𝑣1
5. Si el ERROR ABSOLUTO es mayor que 0.0001, el nuevo valor de 𝑣 es el valor 𝑣1 , y se regresará al
punto (3)
SINO reporta el volumen molar obtenido
6. Terminar

P3: (6 puntos) Escriba un programa que calcule todos los números primos menores o iguales que N (dato), para ello
se tiene el siguiente algoritmo:

1. Sea un arreglo lineal con N-1 elementos


2. Almacenar k en A, esto es A[0] = 2, A[1] = 3, A[2] = 4, ... A[N-2] = N
3.- Mostrar (Imprimir) A[0] y luego haga todos los multiplos de 2 iguales a cero
4.- Mostrar el siguiente elemento diferente de 0 en el arreglo, el cual es A[1], y luego hacer todos los
multiplos de 3 iguales a cero.
5.- Continuar el proceso anterior mientras que A[k]<= √𝑁
6.- Cuando A[k]> 20 imprimir todos los elementos diferentes de ceros de A.

P4: (4 puntos) Escriba un programa que determine el menor valor que toma 𝑚𝑛𝑝
̅̅̅̅̅̅, si
̅̅̅̅̅̅̅
𝑚𝑛𝑝 ̅̅̅̅̅̅̅
7𝑥 𝑚𝑛𝑝
5 + = 36𝑘 + 11
2
Leer 36k como múltiplo de 36, k es un numero natural y no hay dato alguno (el residuo de dividir la expresión
del lado izquierdo entre 36 es 11)
1.-

Programa

/* Pb 01 ES 2020 II
Sumar dos numeros de 20 cifras c/u
Archivo: ES120II.cpp */
#include<iostream>
#include<string.h>
using namespace std;
int loncad(string cad, int n[]);
int suma(int m, int v[], int N, int w[], int s[]);
void imprime(string x, string y, int n);
void impSuma(int n, int v[]);
int main() {
string a, b;
int i, nv, nw, n, v[50], w[50], s[50];
system("color f1");
cout << "\n\n\tSUMA DE NUMEROS GRANDES";
cout << "\n\n\tIngrese un NUMERO: "; cin >> a;
cout << "\n\tIngrese otro NUMERO: "; cin >> b;
nv = loncad(a, v);
nw = loncad(b, w);
if (nw > nv) {
n = suma(nv, v, nw, w, s);
imprime(b, a, n - nv);
}
else {
n = suma(nw, w, nv, v, s);
imprime(a, b, n - nw);
}
cout << "\n\t";
impSuma(n, s);
cout << "\n\n\t"; system("pause");
return 12;
}

int loncad(string cad, int n[]) {


int i;
for (i = 0; cad[i] != '\0'; i = i + 1)
switch (cad[i]) {
case '0': n[i] = 0; break;
case '1': n[i] = 1; break;
case '2': n[i] = 2; break;
case '3': n[i] = 3; break;
case '4': n[i] = 4; break;
case '5': n[i] = 5; break;
case '6': n[i] = 6; break;
case '7': n[i] = 7; break;
case '8': n[i] = 8; break;
case '9': n[i] = 9;
}
return i;
}
//
Programa

//
int suma(int m, int v[], int N, int w[], int s[]) {
// el que tiene mas elementos es w
int i, j, S = 0; // S es lo que lleva
for (i = N, j = m; i > 0; i = i - 1) {
if (j < 1)S = w[i - 1] + S;
else S = w[i - 1] + v[j - 1] + S;
if (S > 9) {
s[i] = S - 10;
S = 1;
}
else {
s[i] = S;
S = 0;
}
j = j - 1;
}
s[0] = S;
return N + 1; //retorna un elemento mas, pero s[0]
puede ser 0
}
void imprime(string x, string y, int n) {
int i; // x tiene mas digitos
cout << "\n\n\t " << x << " +\n\t";
for (i = 0; i < n; i = i + 1)cout << " ";
cout << y;
}
void impSuma(int n, int v[]) {
int i;
for (i = 0; i < n + 4; i = i + 1)cout << "-";
cout << "\n\t";
if (v[0])cout << v[0];
else cout << " ";
for (i = 1; i < n; i = i + 1) cout << v[i];
}

Resultado de la compilación y ejecución


Otra forma de resolver:

Programa

/* Pb 01 ES 2020 II
Sumar dos numeros grandes maximo 50 cifras c/u)
Archivo: ES120IIv2.cpp */
#include<iostream>
#include<conio.h>
using namespace std;
int leeNum(int a[]);
int suma(int m, int v[], int N, int w[], int s[]);
void imprime(int nv, int v[], int nw, int w[]);
void impSuma(int n, int v[]);
int main() {
int i, nv, nw, n, v[50], w[50], s[50];
system("color f1");
cout << "\n\n\tSUMA DE NUMEROS GRANDES";
cout << "\n\n\tIngrese un NUMERO: ";
nv = leeNum(v);
cout << "\n\tIngrese otro NUMERO: ";
nw = leeNum(w);
if (nw > nv) {
n = suma(nv, v, nw, w, s);
imprime(nv, v, nw, w);
}
else {
n = suma(nw, w, nv, v, s);
imprime(nw, w, nv, v);
}
cout << "\n\t";
impSuma(n, s);
cout << "\n\n\t"; system("pause");
return 12;
}

// para leer los numeros grandes


int leeNum(int a[]) {
int i = -1;
char op;
do {
op = _getch(); // en Dev C++ es getch()
if (op != 13) { // 13 es el ascii de ENTER
i = i + 1;
cout << op;
a[i] = op - 48;
}
} while (op != 13);
return i + 1;
}
//
Programa

//
int suma(int m, int v[], int N, int w[], int s[]) {
// el que tiene mas elementos es w
int i, j, S = 0; // S es lo que lleva
for (i = N, j = m; i > 0; i = i - 1) {
if (j < 1)S = w[i - 1] + S;
else S = w[i - 1] + v[j - 1] + S;
if (S > 9) {
s[i] = S - 10;
S = 1;
}
else {
s[i] = S;
S = 0;
}
j = j - 1;
}
s[0] = S;
return N + 1; //retorna un elemento mas, pero s[0] puede ser 0
}
void imprime(int nv, int v[], int nw, int w[]) {
int i, n; // w tiene mas elementos
n = nw - nv;
cout << "\n\n\t ";
for (i = 0; i < nw; i = i + 1)cout << w[i];
cout << " +\n\t ";
for (i = 0; i < n; i = i + 1)cout << " ";
for (i = 0; i < nv; i = i + 1)cout << v[i];
}
void impSuma(int n, int v[]) {
int i;
for (i = 0; i < n + 4; i = i + 1)cout << "-";
cout << "\n\t";
if (v[0])cout << v[0];
else cout << " ";
for (i = 1; i < n; i = i + 1) cout << v[i];
}

Resultado de la compilación y ejecución


2.-

Programa
/* Pb 02 ES 2020 II
Calculo del VOLUMEN MOLAR, usando la ECUACION
de Estado de Van Der Waals: (P+a/v^2)(v-b)=RT
Metodo de SUSTITUCIONES SUCESIVAS
Archivo: ES220II.cpp */
#include<iostream> // en Dev C++ incluir math.h
using namespace std;
float SustSu(float R, float a, float b, float P, float T, float v);
int main() {
float v, a, b, v1, R, T, P, error;
int i;
system("color f1");
// al momento de ingresar los datos tenga cuidado con las unidades
cout << "\n\n\tCALCULO DEL VOLUMEN MOLAR de un gas";
cout << "\n\n\tIngrese la constante a: "; cin >> a;
cout << "\n\tIngrese la contante b: "; cin >> b;
cout << "\n\tIngrese R: "; cin >> R;
cout << "\n\tIngrese la PRESION: "; cin >> P;
cout << "\n\tIngrese la Temperatura: "; cin >> T;
cout << "\n\tIngrese el ERROR permitido: "; cin >> error;
T = T + 273.15;
v1 = R * T / P;
for (i = 1; i < 501; i = i + 1) {
v = v1;
v1 = SustSu(R, a, b, P, T, v);
if (fabs(v - v1) < error)break;
}
cout << "\n\tVOLUMEN CALCULADO: " << v1;
cout << "\n\t";
system("pause");
return 12;
}
// declaracion de la funcion que CALCULA EL VOLUMEN MOLAR
float SustSu(float R, float a, float b, float P, float T, float v)
{
float v1;
v1 = R * T / (P + a / (v * v)) + b;
return v1;
}

Resultado de la compilación y ejecución


Otra forma de resolver:

Programa
/* Pb 02 ES 2020 II
Calculo del VOLUMEN MOLAR, usando la ECUACION
de Estado de Van Der Waals: (P+a/v^2)(v-b)=RT
Metodo de SUSTITUCIONES SUCESIVAS
Archivo: ES220IIv2.cpp */
#include<iostream>
#include<cmath>
using namespace std;
// Halla en volumen molar
float vmolar(float p, float v, float t) {
// ---- Constantes de Van Der Waals
float a = 6.7, b = 0.056;
// ---- Constante universal de los gases atm-lt/°K-mol
float r = 0.082;
float vx = r * t / (p + a / pow(v, 2)) + b;
return vx;
}
// METODO DE SUSTITUCIONES SUCESIVAS DE V
int main() {
// DEFINICION DE CONSTANTES Y VARIABLES LOCALES!!!
float err, errmax, p, tc, tk, v, vx;
int maxiter, numiter;
// ---- Constantes para control de iteraciones
errmax = 0.0001;
numiter = 0;
maxiter = 500;
system("color f1");
// ********** INGRESO DE DATOS ***************
cout<<"EVALUACIÓN DE VOLUMEN MOLAR DEL SO2 POR VAN DER WAALS"<<endl;
cout << "Ingrese temperatura en C: ";
cin >> tc;
cout << "Ingrese presion en atm: ";
cin >> p;
// ********** PROCESAMIENTO DE DATOS ***********
float r = 0.082;
tk = tc + 273.15;
v = r * tk / p; //Valor inicial de VMolar
// SALIDA PARCIAL - Para mejorar las presentaciones
cout << "\nIter.\t V.Molar \t Error" << endl;
do {
vx = vmolar(p, v, tk);
err = abs(v - vx);
numiter = numiter + 1;
// SALIDA PARCIAL - Para presentar datos intermedios
//cout <<"\n"<<numiter <<"\t"<< v <<"\t\t"<< err << endl;
printf("\n %2i \t %5.3f \t%10.6f\n", numiter, v, err);
v = vx;
} while (!((err <= errmax || numiter > maxiter)));
// SALIDA FINAL DE DATOS
cout<<"========================================================="<<endl;
cout<<"\t"<<"Volumen molar del SO2 = "<<v<<" a "<<tc<<" C y "<<p <<" atm";
cout<<"\n=========================================================="<<endl;
system("pause");
return 0;
}
Resultado de la compilación y ejecución

3.-

Programa /* Pb 03 ES 2020II
Archivo: ES320ii.cpp */
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main() {
int A[1000], i, j, N, m, c = 0;
system("color F1");
cout << "\n\n\tNUMEROS PRIMOS MENORES O IGUALES A N";
cout << "\n\n\tIngrese N: "; cin >> N;
for (i = 0; i < N - 1; i = i + 1) {
A[i] = i + 2;
}
cout << "\t";
for (i = 0; A[i] < sqrt(N); i = i + 1) {
if (A[i]) {
m = A[i];
cout.width(4);
cout << A[i];
c = c + 1;//cambiar de linea depues de imprimir 25 numeros
if (c % 25 == 0)cout << "\n\t";
for (j = i; j < N; j = j + 1) {
if (A[j] % m == 0)
A[j] = 0;
}
}
}
for (i = 0; i < N - 1; i = i + 1)
if (A[i]) {
cout.width(4);
cout << A[i];
c = c + 1;//cambiar de linea depues de imprimir 25 numeros
if (c % 25 == 0)cout << "\n\t";
}
cout << "\n\n\t"; system("pause");
return 1;
}
Resultado de la compilación y ejecución

4.-

Programa
/* Pb04 ES 2020-ii
Calcular el menor numero N de tres cifras tal que
5^(n) + 7 n/2 = 36k + 11 ; donde 36k es multiplo de 36
ES420II.cpp */
#include<iostream> // incluir math.h en Dev C++
using namespace std;
int gaussiano(int N, int d);
int main() {
int i, g, R;
bool C = true;
system("color F1");
cout << "\n\n\n\tCALCULO DEL RESIDUO";
g = gaussiano(5, 36);
for (i = 100; C; i = i + 2) {
R = pow(5, i % g);
R = (R + 7 * i / 2) % 36;
if (R == 11)C = false;
}
cout<<"\n\n\t"<<"El menor NUMERO de tres cifras: "<<i-2<<"\n\n\t";
system("pause");
return 1;
}
int gaussiano(int N, int d)
{
int n, R;
bool C = true;
for (n = 1; C; n = n + 1) {
R = pow(N, n);
R = R % 36;
if (R == 1) C = false;
}
return n - 1;
}
Resultado de la compilación y ejecución

Otra forma de resolver:

Programa
/* Pb04 ES 2020-ii
Calcular el menor numero N de tres cifras tal que
5^(n) + 7 n/2 = 36k + 11 ; donde 36k es multiplo de 36
ES420IIv2.cpp */
#include<iostream>
using namespace std;
int calculaR(int N, int n, int d);
int main() {
int n, R;
bool C = true;
system("color F1");
cout << "\n\n\n\tCALCULO DEL RESIDUO";
for (n = 100; C; n = n + 2) {
R = (calculaR(5, n, 36) + (7 * n / 2) % 36) % 36;
if (R == 11)C = false;
}
cout<<"\n\n\t"<<"El menor NUMERO es: "<<n - 2 << "\n\n\t";
system("pause");
return 1;
}
int calculaR(int N, int n, int d)
{
if (n == 1)return N % d;
else return (calculaR(N, n - 1, d) * N) % d;
}

Resultado de la compilación y ejecución

También podría gustarte