UNIVERSIDAD NACIONAL
DE INGENIERÍA
FACULTAD DE INGENIERÍA
ELÉCTRICA Y ELECTRÓNICA
ESCUELA PROFESIONAL DE
INGENIERÍA ELÉCTRICA
INFORME DE INFORMÁTICA
AUTOR
SÁNCHEZ MALPICA, Douglas Giampeare
20171267F
CÁTEDRA
INFORMATICA
CB411 - “P”
PERIODO ACADEMICO 2018-I
DOCENTE
VILCA ROMAN, Arturo Dionisio
LIMA – PERÚ
2018
ANALISIS:
Problema1: En este problema lo que debemos hacer simplemente crear 2 funciones
donde una realice el cifrado y el otro lo descifre (proceso inverso) para el cual no es
tan complicado para aquella persona que posee conocimientos matemáticos para
poder aplicarlo en un problema de este tipo ya que todo se basa en lógica y
transformar ese lenguaje matemático al lenguaje de programación utilizando las
herramientas que tenemos para programar.
PSEUDOCODIGO:
Pseudocódigo principal:
INICIO
//variables
a, b, c : entero
//entrada
Leer a, b, c
//salida
cifrar(a)
descifrar(a)
cifrar(b)
descifrar(b)
cifrar(c)
descifrar(c)
FIN
Pseudocódigo de las funciones:
Funcion
cifrar (E: r: entero): entero
//variables locales
Numcifrado, vector [4], a1, a2: entero
//proceso
vector [0]=r/1000;
vector [1]=(r/100) %10
vector [2]← (r%100)/10
vector [3]←r%10
para i=0 hasta i<4 inc 1
vector[i]=vector[i]+7
vector[i]=vector[i]%10
fin para
a1← vector[0]
vector[0] ← vector[2]
vector[2]← a1
a2←vector[1]
vector[1]←vector[3]
vector[3]←a2
numcifrado←vector[0]*1000+vector[1]*100+vector[2]*10+vector[3]
//salida
Retornar numcifrado
Fin funcion
Funcion
decifrar(E: r: entero): entero
//variables locales
Numdecifrado, vector[4], a1, i, a2: entero
//proceso
vector[0]←r/1000;
vector[1]← (r/100)%10;
vector[2]← (r%100)/10;
vector[3]←r%10;
a1←vector[0], vector[0]←vector[2], vector[2]←a,
a2←vector[1], vector[1]←vector[3], vector[3]←a2
para i←0 hasta i<4 inc 1
si vector[i]+3>10 entonces
vector[i]←vector[i]-7
sino
vector[i]←vector[i]+3
fin si
fin para
numdecifrado=vector[0]*1000+vector[1]*100+vector[2]*10+vector[3]
//salida
Retorna numdecifrado
Fin funcion
CODIFICACION:
/*POGRAMA: problema1
AUTOR: Douglas Sánchez Malpica
CODIGO Y SECCION DEL CURSO: CB411-O2
*/
#include<stdio.h>
int cifrar(int);
int decifrar(int);
int main(){
int a,b,c;
printf("ingresando 3 numeros de 4 digitos:\n");
printf("Numero 1: ");
scanf("%d",&a);
printf("el numero cifrado sera: %d \n", cifrar(a));
printf("el numero decifrado sera: %d \n", decifrar(a));
printf("Numero 2: ");
scanf("%d",&b);
printf("el numero cifrado sera: %d \n", cifrar(b));
printf("el numero decifrado sera: %d \n", decifrar(b));
printf("Numero 3: ");
scanf("%d",&c);
printf("el numero cifrado sera: %d \n", cifrar(c));
printf("el numero decifrado sera: %d \n", decifrar(c));
printf("\n");
return 0;
}
int cifrar(int r){
int numcifrado;
int vector[4];
int a1,a2;
vector[0]=r/1000;
vector[1]=(r/100)%10;
vector[2]=(r%100)/10;
vector[3]=r%10;
for(int i=0;i<4;i++){
vector[i]=vector[i]+7;
vector[i]=vector[i]%10;
}
a1=vector[0]; vector[0]=vector[2]; vector[2]=a1; a2=vector[1];
vector[1]=vector[3]; vector[3]=a2;
numcifrado=vector[0]*1000+vector[1]*100+vector[2]*10+vector[3];
return numcifrado;
}
int decifrar(int r){
int numdecifrado;
int vector[4];
int a1,a2;
vector[0]=r/1000;
vector[1]=(r/100)%10;
vector[2]=(r%100)/10;
vector[3]=r%10;
a1=vector[0]; vector[0]=vector[2]; vector[2]=a1; a2=vector[1];
vector[1]=vector[3]; vector[3]=a2;
for(int i=0;i<4;i++){
if(vector[i]+3>10){
vector[i]=vector[i]-7;
}else{
vector[i]=vector[i]+3;
}
numdecifrado=vector[0]*1000+vector[1]*100+vector[2]*10+vector[3];
return numdecifrado;
}
PRUEBA:
COMENTARIO:
Bueno en este problema no tuve tanta dificultad en hacerlo pero si me demore en
pensar bien el código que estructura iba a tener que pasos debía llevar a seguir quizás
la dificultad radica en el poco conocimientos que se pueda tener sobre funciones y
operaciones aritméticas ya que el algoritmo amerita un análisis de operaciones
aritméticas de ida y vuelta.
ANALISIS:
Problema2: En este problema nos piden desarrollar un programa (un juego) que se
llame “adivina el número” donde el número que nos piden adivinar esta entre el 1 al
1000 para ello tenemos que tener conocimiento de la funcion rand y su librería para
poder procesar valores nuevo al azar el cual es tenemos que tener conocimiento de la
funcion rand y su librerías para poder procesar valores nuevo al azar el cual es
#include<time.h> y #include<stdlib.h> luego lo demás es aplicar los fundamentos de
programación y sus respectivas estructuras.
PSEUDOCODIGO:
INICIO
//variables
numero,intento←1,opción,cont←10: enteros
respuesta: carácter
//proceso
numero←random(1,1000)
hacer mientras cont↚0
leer opción
si opción<numero entonces
con←cont-1
intento inc 1
fin si
si opción>numero entonces
cont←cont-1
intento inc 1
fin si
si opción = numero entonces
leer respuesta
si respuesta = ‘s’ entonces
intento←1
cont←10
sino
cont=0
fin si
fin si
si cont=0 entonces
cont=0
fin si
FIN
CODIFICACION:
/*POGRAMA: problema2
AUTOR: Douglas Sánchez Malpica
CODIGO Y SECCION DEL CURSO: CB411-O2
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(0));
int numero,intento=1;
int opcion;
char respuesta;
int cont=10;
printf("\t\t##### ADIVINA EL NUMERO #####\n");
numero=rand()%1000+1;
printf("Tengo un numero entre el 1 y el 1000\n");
printf("Puedes adivinar el numero?\n");
printf("solo tienes 10 intentos..!\n");
do{
printf("intento %d: ",intento);
scanf("%d",&opcion);
if(opcion<numero){
printf("\tmas alto\n");
cont=cont-1;
intento++;
}
if(opcion>numero){
printf("\tmas bajo\n");
cont=cont-1;
intento++;
}
if(opcion==numero){
printf("excelente! adivinaste el numero! quieres jugar de
nuevo? (s/n): ");
scanf("%s",&respuesta);
if(respuesta=='s'){
intento=1;
cont=10;
}else{
cont=0;
}
}
if(cont==0){
printf("se acabaron tus intentos GAME OVER...!");
cont=0;
}
}while(cont!=0);
return 0;
}
PRUEBAS:
COMENTARIOS:
Bueno en este problema tuve un inconveniente con el while ya que había puesto
WHILE(cont!=0 || respuesta!=’n’) pero en la ejecución no me botaba del programa
cuando ponía el carácter ‘n’ al final cuando debería terminar la ejecución ya que en el
WHILE ya lo había puesto para cuando la respuesta sea igual ‘n’ se terminara el bucle
pero no accedía pero OJO si me compilaba pero hablo en el tiempo de ejecución del
programa pero cuando lo “cambie” quitándole la variable de tipo caracter del while y
solo poniendo variables enteras si me ejecutaba correctamente el programa por eso
ese día quería preguntarle a que se debe eso error, estuve investigando por mis
medios pero no encontré alguna solución para ello…si supiera hágamelo saber por
favor.
ANALISIS:
Problema3: En lo particular creo que fue el problema más complejo ya que no lo
entendía tan bien que digamos sin embargo lo hice a mi entendimiento ya que había
varias formas de hacerlo y yo opté en hacerlo de la manera más objetiva y concisa así
también lo complicado estuvo en los métodos de ordenamiento ya que existen
diversas formas de ordenar un array en este caso yo elegí en el ordenamiento por el
método de la burbuja o bubblesort y el método de inserción ya que también existen
ordenamientos “quicksort”, “shellsort” y también con funciones recursivas que son más
avanzadas, laboriosas y ameritan de un mayor análisis y conocimientos(punteros,
funciones recursivas, etc.) lo demás simplemente es estructurar bien las partes que te
piden y listo.
PSEUDOCODIGO:
INICIO
//variables
i,j,respuesta,opción,numero,a1=0,a2=0,método: enteros
v[5],v1[5],v2[5],sum[5],terminado=0: enteros
//proceso
hacer
leer opción
si opción=1 entonces
para i=0 hasta i<5 inc 1
leer v[i]
fin para
fin si
si opción=2 entonces
leer numero
para i=0 hasta i<5 inc 1
si numero=v[i] entonces
a1=1
fin si
fin para
si a1==0 entonces
escribir “el numero no ha sido encontrado”
fin si
fin si
si opción =3 entonces
leer método
si método=1 entonces
para i=1 hasta i<=5 inc 1
para j=0 hasta j<4 inc 1
si v[j]>v[j+1] entonces
a2=v[j], v[j]=v[j+1], v[j+1]=a2
fin si
fin para
fin para
si método =2 entonces
para i=j hasta j<5 inc 1
si (j-1)>=0 entonces
para k=j hasta k>=1 dec 1
si v[k-1]>v[k] entonces
a2=v[k], v[k]=v[k-1], v[k-1]=a2
fin si
fin para
fin si
fin para
fin si
si opción=4 entonces
para i=0 hasta i<5 inc 1
leer v1[i]
fin para
para i=0 hasta i<5 inc 1
leer v2[i]
fin para
para i=0 hasta i<5 inc 1
sum[i]=v1[i]+v2[i]
fin para
leer respuesta
si respuesta== ‘n’ entonces
terminado=1
fin si
mientras terminado=0
CODIFICACION:
/*POGRAMA: problema3
AUTOR: Douglas Sánchez Malpica
CODIGO Y SECCION DEL CURSO: CB411-O2
*/
#include<stdio.h>
int main(){
int i,j,respuesta,opcion,numero,a1=0,a2=0,metodo;
int v[5],v1[5],v2[5],sum[5],terminado=0;
do{
printf("\t\t##### MENU #####\n");
printf("1.ingresar un vector de tamano 5 con numeros enteros\n");
printf("2.buscar un numero en el vector\n");
printf("3.ordenar el vector de menor a mayor\n");
printf("4.sumar 2 vectores\n");
printf("opcion: ");
scanf("%d",&opcion);
if(opcion==1){
printf("\ningresando el vector\n");
for(i=0;i<5;i++){
printf("valor %d: ",i+1);
scanf("%d",&v[i]);
}
printf("el vector sera: [%d,%d,%d,%d,%d]\n",v[0],v[1],v[2],v[3],v[4]);
}
if(opcion==2){
printf("\ningrese el numero a buscar: ");
scanf("%d",&numero);
for(i=0;i<5;i++){
if(numero==v[i]){
printf("El numero %d ha sido encontrado en el
vector...!\n",numero);
a1=1;
}
}
if(a1==0){
printf("El numero %d no ha sido encontrado en el
vector...!\n", numero);
}
if(opcion==3){
printf("\t\n###ordenando el vector de menor a mayor ###\n");
printf("tiene dos metodos para ordenarlos: \n");
printf("1.metodo de la burbuja o bubblesort\n");
printf("2.metodo de insercion \n");
printf("eliga el metodo por el cual desea ordenar el vector: ");
scanf("%d",&metodo);
if(metodo==1){
for(int i=1;i<=5;i++){
for(int j=0;j<4;j++){
if(v[j]>v[j+1]){
a2=v[j]; v[j]=v[j+1]; v[j+1]=a2;
}
}
}
printf("el vector ordenado de menor a mayor sera: [%d,%d,%d,
%d,%d]\n",v[0],v[1],v[2],v[3],v[4]);
}
if(metodo==2){
for(int j=0;j<5;j++){
if((j-1)>=0){
for(int k=j;k>=1;k--){
if(v[k-1]>v[k]){
a2=v[k];
v[k]=v[k-1];
v[k-1]=a2;
}
}
}
}
printf("el vector ordenado de menor a mayor sera: [%d,%d,%d,
%d,%d]\n",v[0],v[1],v[2],v[3],v[4]);
}
if(opcion==4){
printf("\ningresando los valores del primer vector \n");
for(i=0;i<5;i++){
printf("valor %d: ",i+1);
scanf("%d",&v1[i]);
}
printf("el primer vector sera: [%d,%d,%d,%d,
%d]\n\n",v1[0],v1[1],v1[2],v1[3],v1[4]);
printf("ingresando los valores del segundo vector \n");
for(i=0;i<5;i++){
printf("valor %d: ",i+1);
scanf("%d",&v2[i]);
}
printf("el segundo vector sera: [%d,%d,%d,%d,
%d]\n\n",v2[0],v2[1],v2[2],v2[3],v2[4]);
for(i=0;i<5;i++){
sum[i]=v1[i]+v2[i];
}
printf("la suma de ambos vectores sera un nuevo vector el cual
es: [%d,%d,%d,%d,%d]\n\n",sum[0],sum[1],sum[2],sum[3],sum[4]);
printf("\ndesea usted continuar? (s/n): ");
scanf("%s",&respuesta);
if(respuesta=='n'){
terminado=1;
}
}while(terminado==0);
return 0;
}
PRUEBAS:
COMENTARIOS:
Pienso que este problema fue el más complejo de todos ya que no era nada fácil el
cómo hacerlo pero el análisis si estaba accesible para el que ya conoce estos temas
Más que nada en este problema también me paso algo similar con el problema 2 ya
que en el WHILE también le puse un expresión lógica donde estaba presente una
variables tipo carácter pero no me cerraba la ejecución cada vez que ponía un caracter
donde finalizara el WHILE sin embargo no se finalizaba por ello opte hacerlo con
variables de tipo entero y así me salió el problema