Vous êtes sur la page 1sur 33

PROGRAMACION DIGITAL FIEE-UNI PARTE II

1) Codifique un programa que permita generar en una funcin, una matriz de


orden NxM elementos con nmeros enteros random. Luego en otra funcin sumar
los valores de los elementos que forman la letra R ms grande en el arreglo y
adems imprimirla utilizando el carcter - para indicar las posiciones que
demarquen la letra R. En una funcin debe imprimir la matriz y la suma de los
elementos que forman la letra R.
Sol: Elegimos por comodidad una matriz cuadrada y nmeros entre 0 y 9.

#include<fstream.h>
#include <conio.h>
#include<stdlib.h>
void generaMatriz(int a[80][80],int &n);
void muestraMatriz(int a[80][80],char c[80][80],int n);
void main(){
int a[80][80],n,s;char c[80][80];
generaMatriz(a,n);
muestraMatriz(a,c,n);
getch();
}
void generaMatriz(int a[80][80],int &n){
cout<<"ingrese dimencion:\n";cin>>n;

while(n<2){
cout<<"dimencion no valida,reingresa:\n";cin>>n; //validamos el ingreso.
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
a[i][j]=rand()%(10);
}
}
cout<<"\n";
}
void muestraMatriz(int a[80][80],char c[80][80],int n){
int s1,s2,s3;
cout<<"la matriz orignal es: \n\n";
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cout <<a[i][j]<<"

";

}
cout << "\n\n";
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){

//usamos cdigo ASCII (ASCII del 0 es 48)

c[i][j]=(char)(a[i][j]+48); //pasamos la matriz entera a una matriz tipo


char(caracteres) para poner el -.
if(j==0||i==0||(i==n/2 && j>=n/2)||(j==n-1&&i<=n/2)||(j>=n/2&&i==j)){
c[i][j]='-'; // ponemos el - en las posiciones de la letra R mas grande.
}
}
}
cout<<"\nLa matriz R es:\n\n";
incluido.
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cout <<c[i][j]<<"
}
cout << "\n\n";
}
s1=0;s2=0;s3=0;

";

//imprimimos la matriz carcter con el -

for (int i=0;i<n;i++){


//hallamos la suma de los elementos que forman la
letra R en la matriz entera original
for (int j=0;j<n;j++){
if(j==0||(j==n-1&&i<=n/2)){
s1=s1+a[i][j];
}
else if(i==0||(i==n/2 && j>=n/2)){
s2=s2+a[i][j];
}
else if(j>=n/2&&i==j){
s3=s3+a[i][j];
}
}
}
cout<<"\nLa suma de los elementos que forman R es: "<<s1+s2+s3<<"\n";
}
2) Codifique un programa que calcule el promedio final del curso MA713, de N
alumnos. El promedio final se calcula como la suma del promedio de las 4 mejores
notas de un total de 5 practicas, ms examen parcial, ms examen final dividido
entre 3. La nota aprobatoria mnima es 10, si el promedio final es menor que 10, si
el promedio de prcticas es mayor de 6,1, tiene opcin de rendir examen
sustitutorio, que reemplaza a la nota mas favorable entre el examen parcial o
final . Utilice:
Practicamenor();Calcula la menor nota de prctica
Promediofinal(): calcula el promedio del curso
Visualizar(): imprime la matriz y el promedio final del curso
Sol: Elegimos por comodidad 10 alumnos. Las filas serian 10 y las columnas serian
8(5 practicas, 1 parcial, un final y un sustitutorio que es opcional).
Sol:
#include<fstream.h>//problema de las notas finales
#include<conio.h>
#include<stdlib.h>
#include <math.h>
int N=10,E=8;int notaMenor[80]; //declaramos variables universales
float proPrac[80],proFinal[80];
void practicaMenor(int matriz[80][80]);
void promedioFinal(int matriz[80][80]);
void visualisa(int matriz[80][80]);
void main(){
int matriz[80][80];

for(int i=0;i<N;i++){
matriz[i][E-1]=0;
//primeramente ponemos 0 al sustitutorio porque no
sabemos si el alumno lo rendir o no.
for(int j=0;j<E-1;j++){
matriz[i][j]=rand()%(12);
}
}
cout<<"\nLa matriz de notas iniciales es: \n";
for(int i=0;i<N;i++){
for(int j=0;j<E;j++){
cout<<matriz[i][j]<<"\t";
}
cout<<"\n\n";
}
practicaMenor(matriz);
promedioFinal(matriz);
visualisa(matriz); // el cero en el examen sustitutorio(ultima columna) significa
que el alumno aprob
getch();

// y no es necesario rendir el sustitutorio

}
void visualisa(int matriz[80][80]){
cout<<"\narreglo de las menores notas de las practicas de los alumnos es:\n";
for(int i=0;i<N;i++){
cout<<notaMenor[i]<<"\t";
}
cout<<"\n\nel promedio de practicas es:\n";
for(int i=0;i<N;i++){
cout<<proPrac[i]<<"\t";
}
cout<<"\n\nel promedio final es:\n";
for(int i=0;i<N;i++){
cout<<ceil(proFinal[i]*100)/100<<"\t";
}
cout<<"\nLa matriz de notas finales es: \n";
for(int i=0;i<N;i++){
for(int j=0;j<E;j++){
cout<<matriz[i][j]<<"\t";

}
cout<<"\n\n";
}
}
void practicaMenor(int matriz[80][80]){
int menor;
for(int i=0;i<N;i++){
menor=matriz[i][0];
for(int j=0;j<5;j++){
if(matriz[i][j]<=menor)
menor=matriz[i][j];
}
notaMenor[i]=menor;
}
}
void promedioFinal(int matriz[80][80]){
int suma;float pf;
for(int i=0;i<N;i++){
suma=0;
for(int j=0;j<5;j++){
suma=suma+matriz[i][j];
}
proPrac[i]=1.0*(suma-notaMenor[i])/4;
pf=1.0*(proPrac[i]+matriz[i][5]+matriz[i][6])/3;
if(pf<10){
if(proPrac[i]<=6.1){
proFinal[i]=pf;
}
else{
matriz[i][E-1]=rand()%(21); //una vez que cumpla los requisitos, recin podr
rendir el sustitutorio
if(matriz[i][5]<matriz[i][6])
proFinal[i]=1.0*(proPrac[i]+matriz[i][6]+matriz[i][7])/3;
else
proFinal[i]=1.0*(proPrac[i]+matriz[i][5]+matriz[i][7])/3;
}
}

else
proFinal[i]=pf;
}
}

3)Construya un programa que permita cargar dos arreglos unidimensionales con N


y M elementos. Con ellos generar un tercer arreglo que incluya los datos de los dos
anteriores de tal forma que se encuentren ordenados. No es posible realizar
ningun metodo de ordenamiento luego de haber creado el arreglo final. El
programa debe imprimir los tres arreglos.
#include<fstream.h>
#include<conio.h>
#include<stdlib.h>
void main(){
int a[80], b[80], c[80],m,n,aux,pos,k;

cout<<"ingrese cantidad de elemntos del arreglo A:\n";cin>>n;


for(int i=0;i<n;i++){
a[i]=10+rand()%81;
}
cout<<"el arreglo A es:\n";
for (int i=0;i<n;i++){
cout<<a[i]<<", ";
}
cout<<"\n\n";
cout<<"ingrese cantidad de elemntos del arreglo B:\n";cin>>m;
for(int i=0;i<m;i++){
b[i]=10+rand()%81;
}
cout<<"el arreglo B es:\n";
for (int i=0;i<m;i++){
cout<<b[i]<<", ";
}
cout<<"\n\n";
for (int i=0;i<n;i++){
for (int j=i+1;j<n;j++){
if (a[j] < a[i]){
aux = a[j];
a[j] = a[i];
a[i] = aux;
}
}
}
for (int i=0;i<n;i++){
c[i]=a[i];
}
for(int j=0;j<m;j++){
pos=0;k=0;
while(c[k]<b[j] && k<n){
k++;pos++;
}
for(int i=n-1;i>=pos;i--){
c[i+1]=c[i];

}
c[pos]=b[j];
n++;
}
cout<<"\n";
for(int i=0;i<n;i++){
cout<<c[i]<<", ";
}
getch();
}

4) Cuantos digitos de cinco digitos son multiplos de 11 y capicua al mismo tiempo.


#include<fstream.h>
#include<conio.h>
void main(){
int a,b,min,max,i,num,inv,cif;
cout<<"ingrese valores extremos: \n";
cin>>a>>b;
if(a>b){
min=b;
max=a;
}
else{
min=a;
max=b;
}

cout<<"los numeros capicuas y multiplos de 11 son: \n";


for(i=min;i<=max;i++){
num=i;
inv=0;
while(num>0){
cif=num%10;
inv=10*inv+cif;
num=num/10;
}
if(inv==i && inv%11==0)
cout<<inv<<"

";

}
getch();
}

4) Codificar un programa para calcular la determinante de una matriz cuadrada de


orden NxN.
#include<fstream.h>
#include <conio.h>
void ingrezaMatriz(float a[80][80],int &n);
float determinante(float a[80][80],int n);
void muestraMatriz(float a[80][80],int n);
void main(){
float a[80][80],det;int n;
ingrezaMatriz(a,n);
cout<<"la matriz es: \n\n";

muestraMatriz(a,n);
det=determinante(a,n);
cout<<"el determinante es: "<<det;
getch();
}
void ingrezaMatriz(float a[80][80],int &n){
cout<<"ingrese orden de la matriz:\n";cin>>n;
while(n<2){
cout<<"orden no valido, reingrese:\n";cin>>n;
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cout << "Ingrese la posicion ["<<i+1<<"] ["<<j+1<<"]: ";cin >> a[i][j];
}
}
cout<<"\n";
}
float determinante(float a[80][80],int n){
Joyanes Aguilar-pag. 281)

//Fundamentos de programacin(Luis

int sig, t, r; float aux, cs, dt;


sig = 1;
for (int i = 0; i < n-1; i++){
t = 1;
if (a[i][i] == 0){
do{
if (a[i + t][i] != 0){
sig = sig*(-1);
for (int j = 0; j < n; j++){
aux = a[i][j];a[i][j] = a[i + t][j];a[i + t][j] = aux;
}
}
t++;
} while (a[i][i] == 0 && t != n - i);
}
r = i - 1;
do{
r++;

} while (a[i][r] == 0 && r != n-1);


if (a[i][r] != 0){
for (int u = i + 1; u < n; u++){
if (a[u][r] != 0){
cs = a[u][r];
for (int j = r; j < n; j++){
a[u][j] = a[u][j] - a[i][j] * 1.0*cs / a[i][r];
}}}}}
dt = sig;
for (int i = 0; i < n; i++){
dt = dt*a[i][i];
}
return dt;
}
void muestraMatriz(float a[80][80],int n){
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cout <<a[i][j]<<"\t";
}
cout << "\n\n";
}
}

5)Hacer un programa que halle e imprima los valores de n incognitas (x) de un


sistema de m ecuaciones lineales, utilizando el metodo de gauss se reduce el
sistema a una matriz triangular equivalente que a su vez se resuelve facilmente
por sustitucion inversa. Sea el sistema de ecuaciones:

Sol:
#include<fstream.h>
#include <conio.h>
void ingrezaMatriz(float a[80][80],int &n,int &m);
void trianguliza(float a[80][80],int n,int m);
bool sustitucionInversa(float a[80][80],float x[80],int n,int m);
void visualizar(float x[80],int m);
void muestraMatriz(float a[80][80],int n,int m);
void main(){
float a[80][80],x[80];int n,m;
ingrezaMatriz(a,n,m);
cout<<"la matriz de coeficientes y terminos independiestes es: \n\n";
muestraMatriz(a,n,m);
trianguliza(a,n,m);
cout<<"la amtriz triangulizada es:\n\n";
muestraMatriz(a,n,m);
if(!sustitucionInversa(a,x,n,m)){
cout<<"El sistema de ecuaciones es inconsistente";
}else{
visualizar(x,m);
}
getch();
}
void ingrezaMatriz(float a[80][80],int &n,int &m){
cout<<"ingrese numero de ecuaciones y de variables del sistema:\n";cin>>n>>m;
while(n<2 || m<2 || m!=n){
cout<<"la matriz debe ser cuadrada, reingrese:\n";cin>>n>>m;
}
for (int i=0;i<n;i++){

for (int j=0;j<m+1;j++){


independientes

//en la ultima columna van los terminos

cout << "Ingrese la posicion ["<<i+1<<"] ["<<j+1<<"]: ";cin >> a[i][j];


}
}
cout<<"\n";
}
void trianguliza(float a[80][80],int n,int m){
int t,r;float aux,cs;
for(int i=0;i<n-1;i++){
t=1;
if(a[i][i]==0){
do{
if(a[i+t][i]!=0){
for(int j=0;j<m+1;j++){
aux=a[i][j];a[i][j]=a[i+t][j];a[i+t][j]=aux;
}
}
t++;
}while(a[i][i]==0 && t!=n-i);
}
r=i-1;
do{
r++;
}while(a[i][r]==0 && r!=m-1);
if(a[i][r]!=0){
for(int k=i+1;k<n;k++){
if(a[k][r]!=0){
cs=a[k][r];
for(int j=r;j<m+1;j++){
a[k][j]=a[k][j]-a[i][j]*(1.0*cs/a[i][r]);
}}}}}}
void visualizar(float x[80],int m){
for(int i=0;i<m;i++){
cout<<"x["<<i+1<<"]="<<x[i]<<"\n";
}
}

bool sustitucionInversa(float a[80][80],float x[80],int n,int m){


int sw=0;
for(int i=n-1;i>=0;i--){
if(a[i][i]==0){
//esto quiere decir que la determinante es cero y eso hace
inconsistente el sistema.
sw=1;i=-1;
inconsistente

//frenamos el ciclo y retornamos false para despues decir que es

}else{
float suma=0;
for(int j=i+1;j<n;j++){
suma=suma+x[j]*a[i][j];
}
x[i]=1.0*(a[i][m]-suma)/a[i][i];
}
}
if(sw==0){
return true;
}else{
return false;
}
}
void muestraMatriz(float a[80][80],int n,int m){
for (int i=0;i<n;i++){
for (int j=0;j<m+1;j++){
cout <<a[i][j]<<"\t";
if(j==m-1)cout << "| ";
}
cout << "\n\n";
}
}

6)Ahora resolver el sistema de ecuaciones por el metodo de cramer.


#include<fstream.h>
#include <conio.h>
void copiaMatriz(float a[80][80],float b[80][80],int n);
float determinante(float a[80][80],int n);
void main(){
float a[80][80],b[80][80],x[80], d[80],sw;int n;
cout<<"ingrese dimencion:\n";cin>>n;
while(n<2){
cout<<"dimencion no valida,reingresa:\n";cin>>n;
}
for (int i = 0; i<n; i++){
for (int j = 0; j<n+1; j++){
independientes

//en la ultima columna van los terminos

cout << "Ingrese la posicion [" << i + 1 << "] [" << j + 1 << "]: ";
cin >> a[i][j];
}
}
cout << "\n";
copiaMatriz(a,b,n);

// guardamos la matriz original en una matriz b

d[0] = determinante(a,n);
modificada

//al calcular la det de a, esta se trianguliza y queda

copiaMatriz(b,a,n); //devolvemos a su estado original la matriz a.


if (d[0] == 0){
solucion.

// si el det de la matriz coeficientes principal es cero, no tiene

cout << "El sistema no tiene solucin\n";


}else{
for(int j=0;j<n;j++){
for(int i=0;i<n;i++){
sw=a[i][j];a[i][j]=a[i][n];a[i][n]=sw;
columna de T. independientes

//cambiamos columas de variables y

}
d[j+1]=determinante(a,n);
x[j]=1.0*d[j+1]/d[0];

//definicion de cramer

copiaMatriz(b,a,n);
}
cout << "Las soluciones son:\n";
for (int i = 0; i < n; i++){
cout << "x[" << i + 1 << "]= " << x[i] << "\n";
}
}
getch();
}
void copiaMatriz(float a[80][80],float b[80][80],int n){
for(int i = 0; i<n; i++){
for (int j = 0; j<n+1; j++){
b[i][j]=a[i][j];
}
}
}
float determinante(float a[80][80],int n){
int sig, t, r; float aux, cs, dt;
sig = 1;
for (int i = 0; i < n-1; i++){
t = 1;
if (a[i][i] == 0){
do{
if (a[i + t][i] != 0){

sig = sig*(-1);
for (int j = 0; j < n; j++){
aux = a[i][j];a[i][j] = a[i + t][j];a[i + t][j] = aux;
}
}
t++;
} while (a[i][i] == 0 && t != n - i);
}
r = i - 1;
do{
r++;
} while (a[i][r] == 0 && r != n-1);
if (a[i][r] != 0){
for (int u = i + 1; u < n; u++){
if (a[u][r] != 0){
cs = a[u][r];
for (int j = r; j < n; j++){
a[u][j] = a[u][j] - a[i][j] * 1.0*cs / a[i][r];
}}}}}
dt = sig;
for (int i = 0; i < n; i++){
dt = dt*a[i][i];
}
return dt;
}

7)Codifique un programa que permite leer una palabra, el programa inicialmente


debe mostrar con guiones cantidad de caracteres que tiene la palabra. Luego el
programa debe pedir que se ingresen caracteres determinando e imprimiendo el
numero de veces que se encuentra en la palabra, a continuacion debe mostrar
donde se ubica en la palabra dicho carcter, solo tiene la posibilidad de digitar
hasta 5 caracteres que no existen dentro de la palabraluego de lo cual se emite un
mensaje indicando que no adivino la palabra. Ejemplo:
La palabra a adivinar es: MARIANIA
Mostrara la cantidad de caracteres: - - - - - - - Se ingresa un carecter: A
El programa responde: A se repite 3 veces
Se ingresa un carecter: T no existe en el texto.
Sol:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
void main(){
char cad[50],a[50],h[1];
int c[50],cont=0,j=0,t=0,n;
cout<<"la palabra a adivinar es:\n";
cin.getline(cad,80);
n=strlen(cad);
for(int i=0;i<n;i++){
a[i]='-';
}
a[n]='\0';
cout<<"\nla canditad de caracteres es:\n";
cout<<a<<"\n";
j=0;
do{
cout<<"\nIngrese caracter:\n";
cin>>h[0];
cont=0;
for(int i=0;i<n;i++){
if(cad[i]==h[0]){
c[cont]=i;
cont++;
}
}

-A--A--A

if(cont==0){
cout<<"el caracter "<<h[0]<<" no esta en la cadena\n";j++;
}
else if(cont>0){
cout<<"el caracter "<<h[0]<<" se repite "<<cont<<" veces\n";
for(int i=0;i<n;i++){
for(int k=0;k<cont;k++){
if(i==c[k])
a[i]=h[0];
}
}
cout<<a<<"\n";
}
}while(j!=5 && strcmp(cad,a)!=0);
if(strcmp(cad,a)==0)
cout<<"\nAdivino la palabra\n";
else if(j==5)
cout<<"\nNo adivino la palabra\n";
system("PAUSE");

8)Codifique un programa que permite leer una cadena de texto, luego guardar en
un arreglo cada palabra contenido en la cadena de texto original. Ejemplo:
char[80]=esto es un mensaje; deseamos guardar las palaras en un arreglo:
cop[4][8]={esto,es,un,mensaje}.
Sol:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
void main(){
char cad[80],copia[80][80];
cout<<"Ingrese frase:\n";
cin.getline(cad,80);

int max,w=0,con=0,u=0,d[50];
for(int i=0;i<strlen(cad);i++){
if(cad[i]!=' '){
copia[con][u]=cad[i];u++;
}
else{
copia[con][u]='\0';con++;u=0;
}
}
copia[con][u]='\0';
cout<<"\nel arreglo es:\n";
for(int i=0;i<=con;i++){
cout<<copia[i]<<"\n";
}
cout<<"\n";
system("PAUSE");
}

9) Codifique un programa que permite leer una cadena de texto, el programa debe
convertir la primera letra de cada palabra de la cadena en mayuscula. El programa
debe funcionar para multiples espacios entre palabra y palabra.
Sol.
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
void main(){
char cad[80];

cout<<"Ingrese frase:\n";
cin.getline(cad,80);
int st=0;
for(int i=0;i<strlen(cad);i++){
if(cad[i]==' '){
st=0;
}
else if(st==0){
st=1;
cad[i]=cad[i]-32;
}
}
cout<<"\n";
cout<<cad<<"\n\n";
system("PAUSE");
}

10)Elabore un programa que permita leer una palabra y en funciones diferentes


realice lo siguiente:
a)Leer un carcter e imprimir en pantalla en que posiciones de la palabra se
encuentra este
b)Imprimir la palabra al reves reemplazando las vocales por la z
c)imprimir la palabra al reves a partir de la primera vocal encontrada.
Sol:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>

void posiscion(char cad[50]);


void reves(char cad[50],char cp[80]);
void revesVocal(char cad[50],char cp[80],char cr[80]);
void main(){
char cad[50],cp[80],cr[80];
cout<<"Ingrese palabra:\n";
cin.getline(cad,80);
posiscion(cad);
reves(cad,cp);
revesVocal(cad,cp,cr);
system("PAUSE");
}
void posiscion(char cad[50]){
int c[80],cont;char h[1];
cout<<"\nIngrese caracter de busqueda:\n";
cin>>h[0];
cont=0;
for(int i=0;i<strlen(cad);i++){
if(cad[i]==h[0]){
c[cont]=i+1;
cont++;
}}
if(cont==0){
cout<<"el caracter no esta en la cadena\n";
}
else if(cont>0){
cout<<"el caracter "<<h[0]<<" se repite "<<cont<<" veces y sus posiciones
son:\n";
for(int k=0;k<cont;k++){
cout<<c[k]<<"\t";
}}}
void reves(char cad[50],char cp[80]){
cout<<"\n\nLa palabra al reves reemplazando vocales por z:\n";
for(int i=0;i<strlen(cad);i++){
cp[i]=cad[strlen(cad)-i-1];
}cp[strlen(cad)]='\0';
for(int i=0;i<strlen(cad);i++){

if(cp[i]=='a'||cp[i]=='e'||cp[i]=='i'||cp[i]=='o'||cp[i]=='u')cp[i]='z';
}
cout<<cp<<"\n\n";
}
void revesVocal(char cad[50],char cp[80],char cr[80]){
int u,t;
for(int i=0;i<strlen(cad);i++){
cp[i]=cad[strlen(cad)-i-1];
}cp[strlen(cad)]='\0';
for(int i=0;i<strlen(cp);i++){
if(cp[i]=='a'||cp[i]=='e'||cp[i]=='i'||cp[i]=='o'||cp[i]=='u'){
t=i;i=strlen(cp); //encontramos la posicion de la primera vocal y paramos el ciclo.
}}
u=0;
for(int j=t;j<strlen(cp);j++){
cr[u]=cp[j];u++;
}cr[u]='\0';
cout<<"La palabra impresa al reves desde la primera vocal:\n";
cout<<cr<<"\n\n";
}

11)Codidifique un programa que permita leer una cadena de caracteres con


multiplos espacios. Luego el programa debe eliminar los espacios de mas. Ejemplo:

e
e
Sol:

t
t

o
o

m
m

g
g

s
s

t
t

a
a

#include <iostream.h>
#include <stdlib.h>
#include <string.h>
void main(){
int i,j;
char cad[80];
cout << "Introduce cadena con multiples espacios:\n";
cin.getline(cad,80);
i=0;j=0;
while((cad[i] = cad[j++]) != '\0'){
if(cad[i] != ' ' || (cad[j] != ' ' && i > 0)){
i++;
}
}
cout<<"\nLa cadena sin espacios de mas es:\n";
cout <<cad<<"\n\n";
system("PAUSE");
}

12)Elabore un programa que permita leer una primera cadena y otra segunda
cadena. Luego el programa debe verificar si la segunda cadena es o no una
subcadena de la primera. En case de serlo, el programa debe indicar en que
posicion de la primera empiesa la subcadena.
Sol:

#include <iostream.h>
#include <stdlib.h>

#include <string.h>
void main(){
char cad1[80], cad2[80],cop[80];
int r, con,k;
cout << "Ingrese primera cadena:\n";
cin.getline(cad1, 80);
cout << "\nIngrese segunda cadena:\n";
cin.getline(cad2, 80);
if (strlen(cad1) < strlen(cad2)){
cout << "\nLa cadena dos no es una subcadena de la primera\n";
}else{
r = 0;
while (r < strlen(cad1) - strlen(cad2) + 1){
k = 0;
for (int i = r; i < r + strlen(cad2); i++){
cop[k] = cad1[i]; k++;
}
cop[k] = '\0';
if (strcmp(cop, cad2) == 0){
cout << "\nLa cadena dos si es una subcadena del primero y empieza en
"<<r+1<<"\n";
r = strlen(cad1);
}
r++;
}
if(r == strlen(cad1) - strlen(cad2) + 1){
cout << "\nLa cadena dos no es una subcadena de la primera\n";
}
}
cout<<"\n";
system("PAUSE");
}

13)Crear un programa tal que cifre y descifre un mensaje utilizando el cifrado


cesar. El cifrado cesar consiste en el que una letra en el texto original es
reemplazada por otra letra que se encuentra un numero fijo de posiciones mas
adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A seria
sustituida por la D, la B por la E, etc. , el programa debe pedir ingresar el numero
de desplamientos en el alfabeto para cifrar el mensaje.
Sol:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
void codifica(char cad[80],int n);
void descodifica(char cad[80],int n);
void main(){
char cad[80];int n;
cout << "Introduce el mensaje a codificar:\n";
cin.getline(cad,80);
cout << "\nIntroduce el numero de desplazamiento deseado:\n";
cin >> n;
cout << "\nEl mensaje cifrado o codificado es:\n";
codifica(cad,n);
cout <<cad<<"\n";
cout << "\nEl mensaje descifrado es:\n";
descodifica(cad,n);
cout <<cad<<"\n\n";
system("PAUSE");
}
void codifica(char cad[80],int n){

for (int i = 0; i < strlen(cad); i++) {


if (cad[i] >= 'a' && cad[i] <= 'z') {
if (cad[i] + n > 'z') {
cad[i] = 'a' - 'z' + cad[i] + n - 1;
} else if (cad[i] + n < 'a') {
cad[i] = 'z' - 'a' + cad[i] + n + 1;
} else {
cad[i] += n;
}
} else if (cad[i] >= 'A' && cad[i] <= 'Z') {
if (cad[i] + n > 'Z') {
cad[i] = 'A' - 'Z' + cad[i] + n - 1;
} else if (cad[i] + n < 'A') {
cad[i] = 'Z' - 'A' + cad[i] + n + 1;
} else {
cad[i] += n;
}}}}
void descodifica(char cad[80],int n){
codifica(cad,-n);
}

14)Disee un programa que permita ingresar un numero entero positivo. El


programa debe mostrar el numero primo inmedatamente menor e inmediatamnte
mayor que dicho numero. Ejemplo:
Numero ingresado: 27

primo mayor:29

primo menor:23

#include<fstream.h>
#include <conio.h>
void main(){
int N,pma,pme,con1,con2;
cout<<"Ingrese numero: ";cin>>N;
while(N<1){
cout<<"Ingreso no valido, reingrese: ";cin>>N;
}
cout<<"\n";
if(N==1){
pma=2;
cout<<"no existe primo menor inmediato.\n";
cout<<"el primo mayor inmediato es: "<<pma<<"\n";
}
if(N==2){
pma=3;
cout<<"no existe primo menor inmediato.\n";
cout<<"el primo mayor inmediato es: "<<pma<<"\n";
}
if(N>2){
pme=pma=N;
con1=0;
while(con1!=2){ //el bucle se repetira hasta encontrar el numero con dos
divisores, el cual seria primo.
pma++;con1=0;
for(int i=1;i<=pma;i++){
if(pma%i==0)con1++;
}
}
con2=0;
while(con2!=2){
pme--;con2=0;
for(int i=1;i<=pme;i++){
if(pme%i==0)con2++;
}
}

cout<<"el primo mayor inmediato es: "<<pma<<"\n";


cout<<"el primo menor inmediato es: "<<pme<<"\n";
}
getch();
}

15) Un jugador tira dos dados. Cada dado tiene seis caras, las cuales contienen 1,
2, 3, 4, 5, 6 puntos negros. Una vez que los dados dejan de moverse, se calcula la
suma de los puntos negros en las dos caras superiores. Si la suma es 7 u 11 en el
primer tiro, el jugador gana. Si la suma es 4, 5, 6, 8, 9 o 10 en el primer tiro, esta
suma se convierte en el punto base del jugador. Para ganar el jugador debe seguir
tirando los dados hasta que salga otra vez su punto base. El jugador pierde si tira
un 7 antes de llegar a su punto. El programa debe imprimir el nombre del jugador,
el valor del punto base generado con la primera tirada de dados y si gana o no.
Sol:
#include<fstream.h>
#include <conio.h>
#include<stdlib.h>
int tirarDados();
void main(){
char nombre[80];
int sumaDados,miPunto,sw=0;
cout<<"Ingrese nombre del jugador: ";cin>>nombre;
sumaDados=tirarDados();
switch(sumaDados){
case 7:case 11:
sw=0;break; //si sw=0, gana.Si sw=1,pierde.si sw=2, continua.
case 2:case 3:case 12:
sw=1;break;

default: sw=2;miPunto=sumaDados;
cout<<"El punto base es "<<miPunto<<"\n";
break;
}
while(sw==2){
sumaDados=tirarDados();
if(sumaDados==miPunto){
sw=0;
}else if(sumaDados==7){
sw=1;
}
}
if(sw==0){
cout<<"El jugador de nombre "<<nombre<<" gana.\n";
}else if(sw==1){
cout<<"El jugador de nombre "<<nombre<<" pierde.\n";
}
getch();
}
int tirarDados(){
int dado1,dado2,suma;
dado1=1+rand()%(6);
dado2=1+rand()%(6);
suma=dado1+dado2;
cout<<"El jugador tiro "<<dado1<<" +"<<dado2<<" = "<<suma<<"\n";
return suma;
}