You are on page 1of 4

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA INDUSTRIAL


SOLUCIN EXAMEN PARCIAL DE ALGORITMOS Y PROGRAMACIN (2008-2)
TIEMPO: 1 Hr. 50 Min.
Indicaciones
1) Resuelva cada pregunta en pginas diferentes.
2) Cualquier funcin adicional que requiera en su solucin; debe escribirla
necesariamente.
3) No se aceptarn reclamos en exmenes desarrollados con lpiz ni con
correctores lquidos.

Pregunta 1: (5 puntos)
Jos se encuentra preocupado acaba de cumplir los 65 aos de edad y es posible que pronto ir al asilo de ancianos, por lo
que lleva a su yerno, su s hijos y nietos a una visita al albergue ms cercano. Al entrar se encuentran reunidos de la siguiente
forma segn sus edades
74, 14, 21, 44, 38, 97, 11, 78, 65, 88, 31
Ubquelos en forma ascendente de tal manera que puedan dialogar de acuerdo a su edad e intereses generacionales para
evitar que se incomoden y no tengan tema de conversacin. Utilice el Mtodo de Shell aplicndolo manualmente. Presente
todas sus iteraciones paso a paso.

Pregunta 2: (5 puntos)
Dime cual es tu nombre y te dir tu nmero
de suerte que esta comprendido entre 1 y 9.
Puedes sorprender a tus amigos, a tu pareja
o a tu compaero. El procedimiento consiste
en escribir el nombre y a cada letra se le
asigna un nmero (entre 1 y 9; ver programa
adjunto), luego se procede a sumar los
nmeros y se reduce la suma total hasta que
esta, sea solo de una cifra. Dado el programa
principal con el resultado de una corrida tal
como se muestra en el ejemplo, se pide implementar la funcin:
NumeroSuerte(char *n, char *a, int *v, int &Suerte), resuelva aplicando punteros.
#include <iostream>
#include <string.h>
using namespace std;
// . . .En esta parte debe ir la funcion
//Programa principal
int main()
{
char Alfa[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
int V[]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8};
int nSuerte;
char nom[30];
cout<<"nCual es tu nombre :"; gets(nom);
strupr(nom);
NumeroSuerte(nom, Alfa, V, nSuerte);
cout<<"\nHola \""<<nom<<"\" tu numero de suerte es:"<<nSuerte<<ende<<endl;
system("pause");
}

Solucion: FELIX HUARI E.


void NumeroSuerte(char *n,char *a,int *v,int &Suerte)
{ int k;Suerte=0;
bool t=false;
while(*n!='\0')
{
k=0;
for(;((*a!='\0') &&(t==false));)
{
if(*n==*a)
{ Suerte=Suerte + (*v);
t = true;
}
k++;
a++;
v++;
}
a=a-k;
v=v-k;
t=false;
n++;
}
while(Suerte>=10)
Suerte=Suerte%10+Suerte/10;
}

Pregunta 3: (5 puntos)
Escribir un programa que utilice la macro denominada BUCLES(n) de tal manera que, muestre la figura que se indica a
continuacin, ingresando por teclado el nmero de lneas del tringulo.
a) Programa principal (1p)
b) Definicin de la macro (4p)

Solucin: OSCAR TINOCO G.


#include <iostream.h>
#include <conio.h>
#define BUCLE(n) for(lineas = 1; lineas<= n; lineas++)\
{for(cont = 1; cont<= n-lineas; cont++)putchar(' ');\
for(cont = 1; cont<= 2*lineas - 1; cont++) putchar('*');\
cout<<"\n";}
main()
{
int cont, lineas, n;
cout<<"numero lineas=";
cin>>n;
cout<<"\n";
BUCLE(n);
getche();
}

Pregunta 4: (5 puntos)
Dados dos arrays A y B de nmeros enteros de longitud n y m respectivamente, con n>=m, determinar recursivamente, si el
array B esta contenido en el array A. Por ejemplo:

A = {2,3,4,5,6,7,-3}
B = {7,-3}; luego B esta contenido en A
B = {3,2}; luego B no esta contenido en A
B = {3,4,5}; luego B esta contenido en A
Dado el siguiente programa principal, escribir la funcin recursiva esSubarray.
#include<iostream>
#include <conio.h>
using namespace std;
// . . . function(es) recursivas aqui
int main()
{
int A[] = {2, 3, 4, 5};
int B[] = {3, 4, 5};
int n = sizeof(A)/sizeof(int);
int m = sizeof(B)/sizeof(int);
int desp = 0; // desplazamiento desde indice 0 del array
if (esSubarray(A, B, n, m, desp)==true)
cout<<"\nB esta contenido en A"<<endl;
else
cout<<"\nB no esta contenido en A"<<endl;
getche();
return 0;
}
Nota: Es posible que su solucin requiera de otra funcin, si es as, esta otra tambin debe ser recursiva.

SOLUCIN
bool contenido(int A[], int B[], int m, int pos, int desp)
{
if (pos == m)
return true;
else
if (A[desp+pos] == B[pos])
return contenido(A,B,m, pos+1, desp);
else
return false;
}
bool esSubarray(int A[], int B[], int n, int m, int desp)
{
if ((desp+m) > n)
return false;
else if (contenido(A, B, m, 0, desp))
return true;
else
return esSubarray(A, B, n, m, desp+1);
}
 Los profesores 2008-2

You might also like