Está en la página 1de 6

Instituto Tecnológico Superior “SAN GABRIEL”

REGISTRO INSTITUCIONAL No. 224 CONESUP / RUC : 0691731650001

EXAMEN PRINCIPAL CALIFICACIÓN:

CARRERA: ________________________________________
SEMESTRE: ________________________________________
ASIGNATURA: ________________________________________
ESTUDIANTE: ________________________________________ TIEMPO ESTIMADO:
FECHA: ________________________________________ 10 minutos

PRIMERA PARTE: PREGUNTAS DE TEORÍA

CONTESTE LAS SIGUIENTES PREGUNTAS. (0,5 PUNTO CADA PREGUNTA)

1. ¿EXPLIQUE EN PALABRAS, CUÁL ES LA SALIDA DEL SIGUIENTE PROGRAMA?


#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
// cout << "Hola mundo!\n";
system("PAUSE");
return EXIT_SUCCESS;
}
El programa no produce ningún mensaje y únicamente realiza una pausa antes de salir, ya que la sentencia cout
está como comentario, y por tanto no se ejecuta.

2. SUBRAYE LOS IDENTIFICADORES VÁLIDOS


 N 85 Nombre
 MiProblemaAAAAAAAAAA
 Mi Juego Nombre_Apellidos
 MiJuego Saldo_Actual
 write 92
 m&m Universidad Pontificia
 registro Set 15
 143Edad

3. ¿EXPLIQUE EN PALABRAS, QUÉ ERRORES DE SINTAXIS TIENE LA


SIGUIENTE SENTENCIA?
if x > 25.0
y=x
else
y = z;
La expresión correcta debe ser la siguiente:
if (x > 25.0 )
y = x;
else
y = z;
Por tanto, le falta los paréntesis en la expresión lógica y un punto y coma después de la sentencia de asignación y
=x

4. ¿EXPLIQUE EN PALABRAS, CUÁL ES LA SALIDA DE ESTE BUCLE?

int i = 1 ; j *= 2;
while (i * i < 10) }
{ i++;
int j = i; cout << endl;
while (j * j < 100) }
{ cout << "\n*****\n";
cout << i + j << " ";

En los bucles anidados la variable i , toma los valores 1 , 2 , 3 . En el momento que i toma el valor de 4 , se sale
del bucle ya que 4 * 4 no es menor que 10. En el bucle controlado por la variable j , se observa que j se inicializa
en los valores 1 , 2 , 3 , respectivamente, y en cada iteración se va multiplicando por dos. Así cuando i vale 1 los
valores que toma la variable j son 1 , 2 , 4 , 8 , y cuando toma el valor de 16 se sale del bucle ya que 16 * 16 es
mayor que 100 . Por consiguiente, se escriben los valores de i + j = 2 , 3 , 5 , 9 . Cuando i vale 2 , los valores que
toma la variable j son 2 , 4 , 8 , y cuando toma el valor de 16 se sale del bucle al igual que antes. Por tanto, se
escriben los valores de i + j = 4, 6, 10 . Cuando i vale 3 , la variable j toma los valores 3 , 6 , y cuando toma el
valor 12 se sale del bucle. De esta forma se escriben los valores 6 , 9 . Si se introducen los bucles anteriores en
un programa principal y se ejecuta se obtiene el siguiente resultado:

5. ¿EXPLIQUE EN PALABRAS, CUÁL ES LA SALIDA DEL SIGUIENTE


PROGRAMA?

#include <cstdlib> for(i = 0; i < 11; i++)


#include <iostream> Primero[i] = 2 * i + 2;
using namespace std; for(j = 0; j < 6; j++)
int main(int argc, char *argv[]) Segundo[j] = Primero[2 * j] + j;
{ CAPÍTULO 7 Arrays (ar reglos, listas o
int i, j ,k, Primero[11], Segundo[11]; tablas) 148
for(k = 3; k < 6; k++) return EXIT_SUCCESS;
cout << Primero[k + 1]<< " " << Segundo [k – 1] << endl; }
system("PAUSE");
6. ENCUENTRE LOS ERRORES DEL SIGUIENTE CÓDIGO, Y ESCRIBA EL CÓDIGO
CORRECTO EN FRENTE DE CADA LINEA:

//UNA POSIBLE SOLUCIÓN PODRÍA SER:


#include <stdio.h> #include <stdio.h>
void escribe(struct fecha f);
int main()
{
struct fecha struct fecha // declaración global
{ {
int dia; int dia;
int mes; int mes;
int anyo; int anyo;
char mes[]; char mesc[10]; // se cambia el nombre
} ff; }
ff = {1,1,2000,"ENERO"}; ff = {1,1,2000,"ENERO"}; // incialización

escribe(ff); void escribe(fecha f) // fecha ya está declarada


return 1; {
} ....
}
int main()
{ ....
escribe(ff);
return 1;
}
EXPLICACIÓN

La inicialización de una estructura puede hacerse solamente cuando es una variable estática o
global. No se puede definir un array de caracteres sin especificar el tamaño y, además, hay
coincidencia de nombres. La mayor parte de los compiladores tampoco permite asignar valores a
estructuras tal y como queda reflejado; hay que hacerlo miembro a miembro. Sería conveniente
hacerlo mejor en la inicialización. Por último, la función escribe tiene como parámetro la
estructura fecha , que no es global, ya que se declara localmente en el programa principal.
PARTE PRACTICA (3,5 PTOS C/U)

EJERCICIO 1:

Escribir una función que reciba como parámetro dos matrices cuadradas de orden n y decida si son
simétricas, si lo son hallar su producto. Una matriz cuadrada de orden n es simétrica si
a[i][j]=a[j][i] para todos los valores de los índices i, j.

SOLUCIÓN

#include <iostream>
using namespace std;
void simetrica (float a[20][20], float b[20][20], int m) {
bool bandera1=true, bandera2=true;
float c[20][20];

for (int i = 0; i < m; i++)


for (int j = i; j < m; j++){
if (a[i][j]!=a[j][i])
bandera1 = false;
if (b[i][j]!=b[j][i])
bandera2 = false;
}
if((bandera1==true) && (bandera2==true)){
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++) {
float aux=0;
for (int k = 0; k < m; k++) {
aux=aux+a[i][k]*b[k][j];
}
c[i][j]= aux;
}
for (int i = 0; i < m; i++){
for (int j = 0; j < m; j++)
cout<<c[i][j]<<endl;
cout<<endl;
}
}
}
int main(int argc, char *argv[]) {
cout<<"**** EXAMEN PRINCIPAL - EJERCICIO 1 ******"<<endl;
int n;
cout<<"ingrese la dimencion de las matrices cuadradas: ";
cin>>n;
float mat1[20][20], mat2[20][20];
cout<<"Llene los datos de la primera matriz"<<endl;
for (int i = 0; i < n; i++){
for (int j = 0;j < n; j++)
cin>>mat1[i][j];
cout<<endl;
}
cout<<"Llene los datos de la segunda matriz"<<endl;
for (int i = 0; i < n; i++){
for (int j = 0;j < n; j++)
cin>>mat2[i][j];
cout<<endl;
}
simetrica(mat1,mat2,n);
return 0;
}

EJERCICIO 2:

Escribir un programa para simular una pequeña calculadora que permita leer expresiones enteras
terminadas en el símbolo = y las evalué de izquierda a derecha sin tener en cuenta la prioridad de
los operadores. Ejemplo 4*5-8=12.

Nota. Usar un array de funciones para realizar las operaciones (suma, resta, producto, cociente
resto)

#include <cstdlib>
#include <iostream>
#define maxoperadores 5
using namespace std;
int sumar(int x, int y) {
return x + y;
}
int restar(int x, int y) {
return x - y;
}
int multiplicar(int x, int y) {
return x * y;
}
int dividir(int x, int y) {
return x / y;
}
int resto ( int x, int y) {
return x % y;
}
int main(int argc, char *argv[]) {
char operador, operadores[] = {'+', '-', '*', '/', '%'};
int (*arrayfunc[]) (int, int) = {sumar, restar, multiplicar, dividir, resto};
int i, operando1, operando2;
cout << "******* Calculador de una expresion entera **********.\n";
cout << "Introduzca la expresion pudiendo usar sumar(+), resta(-), multiplicar(+)"<<endl;
cout<<"dividir(/), resto(%) o (=) para finalizar"<<endl<<endl;
cout<<"Expresion: "; cin >> operando1 >> operador;
while (operador != '=') {
cin >> operando2;
for (i = 0; i < maxoperadores; i++)
if (operador == operadores[i])
operando1 = arrayfunc[i](operando1,operando2);
cin>>operador;
}
cout << "valor de la expresion "<< operando1<< endl;
system("PAUSE");
return EXIT_SUCCESS;
}

También podría gustarte