TRABAJO 1
Participantes:
Ejercicio 1:
-ENUNCIADO-
Implementar el siguiente algoritmo que usa la SUNAT para validar si un
número de RUC es correcto. Haga uso de arreglos para ingresar los
dígitos del ruc y los otros valores que requiera.
El número de RUC es un dato de 11 dígitos en el cual el onceavo digito
es el verificador, este dígito verificador se calcula al sumar el producto
de las diez primeras cifras por sus respectivos factores, luego se obtiene
el residuo de dividir esta suma entre 11, finalmente el digito de
verificación es el resultado de calcular 11 menos el residuo
anteriormente calculado, pero si esta resta da 10 el digito verificador es
0 y si da 11 entonces es 1.
-RESOLUCION-
Algoritmo EJERCICIO_1
//Dimensionamos los vectores, colocamos al factor su correspondientes
valores//
Dimensionar ruc[11] , factor[10]
Factor[1]<-5
factor[2]<-4
factor[3]<-3
factor[4]<-2
factor[5]<-7
factor[6]<-6
factor[7]<-5
factor[8]<-4
factor[9]<-3
factor[10]<-2
//Esta parte valida los datos, comprobar que el RUC tenga los 11 digitos//
Repetir
Escribir "ingrese el codigo(este contiene 11 digitos)"
leer cod
si cod<10^10 o cod>10^11 entonces
Escribir "ruc invalido"
escribir "El ruc debe tener 11 digitos"
FinSi
Hasta Que cod>=10^10 y cod<10^11
// Se divide el RUC en sus diferentes dígitos, y se los almacena en un
vector//
Para i=1 hasta 11 Con Paso 1 Hacer
ruc[11-i+1]<-cod mod 10
cod<-(cod-cod mod 10)/10
FinPara
// Multiplica cada digito del factor y el RUC, sumándolos y luego
almacenándolos//
// en una variable//
co=0
Para i=1 Hasta 10 Con Paso 1 Hacer
co=ruc[i]*factor[i]+co
FinPara
//La variable “co” que almacena la suma de la multiplicación de cada
digito es//
//dividida entre 11 y el resultado se le resta 11, siendo aquel numero el
verificador//
re<-co mod 11
resta<-11-re
escribir "el residuo es: ",re
escribir "la resta es: ",11-re
escribir "El codigo verificador es: ", ruc[11]
si 11-re<>11 y 11-re<>10 Entonces
si 11-re=ruc[11] Entonces
Escribir "codigo valido "
SiNo
Escribir "ruc no valido"
FinSi
FinSi
// Si el numero restado equivale a 11 o 10 es reemplazado por 1 o 0
respectivamente//
// Siendo ahora este numero el verificador
si 11-re=11 Entonces
si ruc[11]=1 Entonces
Escribir "ruc valido"
SiNo
Escribir "ruc no valido"
FinSi
FinSi
si 11-re=10 Entonces
si ruc[11]=0 Entonces
Escribir "ruc valido"
SiNo
Escribir "ruc no valido"
FinSi
FinSi
FinAlgoritmo
Ejercicio 2:
-ENUNCIADO-
Elabore un algoritmo que indique la frecuencia con la que se repiten los
elementos de un vector.
El algoritmo debe ser tal que se obtengan dos vectores: uno con el
número y el otro con la frecuencia.
-RESOLUCION-
Algoritmo EJERCICIO_2
Escribir "INGRESE LA CAPACIDAD DEL VECTOR"
Leer max
Dimensionar A[max]
Dimensionar B[max]
Dimensionar repeticion[max]
Para i = 1 hasta max Hacer
Escribir Sin Saltar"INGRESE EL VALOR A[",i,"]"
Leer A[i]
FinPara
k=1
para i<-1 hasta max hacer
si A[i]=0 Entonces
B[k] <- A[i]
set <- 0
Para j = 1 Hasta max Hacer
Si A[i] = A[j] Entonces
set = set + 1
FinSi
FinPara
repeticion[k] = set
FinSi
FinPara
Para i = 1 Hasta max Hacer
contado = 0
Para j = 1 Hasta i Hacer
Si A[i] = B[j] Entonces
contado <- 1
FinSi
FinPara
Si contado = 0 Entonces
k=k+1
B[k] <- A[i]
set <- 0
Para j = 1 Hasta max Hacer
Si A[i] = A[j] Entonces
set = set + 1
FinSi
FinPara
repeticion[k] = set
FinSi
FinPara
Escribir "El número", " frecuencia"
Para i <- 1 Hasta k Hacer
Si repeticion[i] <> 0 Entonces
Escribir B[i], " ", repeticion[i]
FinSi
FinPara
FinAlgoritmo
Ejercicio 3:
-ENUNCIADO-
Leer los n elementos de un arreglo X y ordenarlos MIENTRAS SE ESTAN
LEYENDO, de tal forma que al terminar la lectura el arreglo ya esté
ordenado. Deberá imprimirlo después de haberlo leído.
-RESOLUCION-
Algoritmo Ejercicio3
//El usuario inserta la capacidad maxima del vector//
Escribir "Inserte el número de elementos"
leer n
//El usuario inserta el valor de cada posición del vector//
Escribir "Inserte los valores del vector"
Dimensionar A[n]
Escribir Sin Saltar"Ingrese valor de A[1]"
leer A[1]
auxiliar<-0
//Debido al bucle que almacena 2 para, se llega a ordernar mientras se
lee el vector//
para i<-2 Hasta n Hacer
Escribir Sin Saltar"Ingrese valor de A[",i,"]"
Leer a[I]
para J<-1 hasta i Hacer
si A[j]>A[i] Entonces
auxiliar<-A[j]
A[j]<-A[i]
A[i]<-auxiliar
FinSi
FinPara
FinPara
Escribir ""
//El usuario ingresa como quiere ordenado el vector, ascendente o
descendente//
Repetir
Escribir "quiere su vector en forma ascendente o
descendente? (asc/dsc)"
leer res
si res<> "asc" y res<> "dsc" Y res<> "ASC" y res<> "DSC"
Entonces
Escribir "elija una opcion de acuerdo al parentesis"
FinSi
hasta que res= "asc" o res="dsc" o res= "ASC" o res="DSC"
SI res= "asc" o res= "ASC" Entonces
//Según lo que indique el usuario se escribe en la orientación adecuada//
para i<-1 Hasta p Hacer
Escribir A[i]
FinPara
SiNo
para i<-1 Hasta p Hacer
Escribir A[p-i+1]
FinPara
FinSi
FinAlgoritmo
Ejercicio 4
-ENUNCIADO-
Diseñe un algoritmo que lea dos vectores A y B de n elementos cada uno
y multiplique el primer elemento de A con el último elemento de B y
luego el segundo elemento de A por el penúltimo elemento de B y así
sucesivamente hasta llegar al último elemento de A por el primer
elemento deB. El resultado de la multiplicación almacenarlo en un vector
C y luego imprimir los elementos de este vector C.
-RESOLUCION-
Algoritmo Ejercicio4
//Ingresa la capacidad del vector//
Escribir "Ingrese la capacidad maxima de los vectores"
Leer max
Dimensionar A[max]
Dimensionar B[max]
Dimensionar C[max]
//Ingresamos el numero que almacena cada posicion del vector//
Para i <- 1 Hasta max
Escribir Sin Saltar"Ingrese valor de A[",i,"]"
Leer A[i]
FinPara
Escribir ""
Para i = 1 Hasta max
Escribir Sin Saltar"Ingrese valor de B[",i,"]"
Leer B[i]
FinPara
Escribir ""
//Se encarga de hacer la multiplicacion de cada numero y
almacenarla en un vector//
Para i = 1 Hasta max
C[i] = A[i] * B[max - i + 1]
FinPara
Escribir "Los valores del vector C son"
//Imprime los valores del nuevo vector//
Para i = 1 Hasta max
Escribir "[", i, "] = ", C[i]
FinPara
FinAlgoritmo
Ejercicio 5
-ENUNCIADO-
Una compañía ha clasificado a sus n (1 ≤ n ≤ 50) empleados dentro de
los grupos 1 y 2. Cada empleado del grupo 1 recibirá, a partir de ahora,
un aumento de $250.00 a la semana sobre su sueldo actual, mientras
que a cada uno de los del grupo 2 sólo se le dará $150.00 adicionales
por semana. La información que se proporciona de cada empleado es:
clave del empleado (comprendida entre 100 y 2500, inclusive), grupo al
que pertenece (1 o 2) y sueldo semanal actual (entre $300.00 y
$6000.00). Si un empleado del grupo 1 con el nuevo sueldo gana
semanalmente más que el sueldo promedio del grupo, entonces debe
cambiar al grupo 2.
Elabore un algoritmo que:
a) Lea la información de los n empleados e imprima la clave, grupo y
sueldo semanal nuevo para cada empleado, actualizando el grupo si es
el caso.
b) Calcule el sueldo promedio de los empleados por grupo y calcule
también el promedio general de todos, sin considerar el grupo.
c) Indique cuántos empleados cambiaron del grupo 1 al 2.
-RESOLUCION-
Algoritmo sin_titulo
//Validamos los datos de la cantidad de empleados sea correcta//
Repetir
Escribir "------------------------"
Escribir "Ingrese cantidad de empleados"
leer n
si n<0 o n>50 Entonces
Escribir "cantidad de empleados no aceptada"
Escribir "Ingrese una cantidad entre 1 y 50"
FinSi
Hasta Que n>=1 y n <=50
Dimensionar SUELDO[n]
Dimensionar GRUPO[n]
Dimensionar CODIGO[n]
Escribir "------------------------"
//El usuario ingresa el codigo del empleado y lo valida//
//Si el codigo ya esta en uso lo declina y pide que se ingrese otro//
para i<-1 hasta n Hacer
Repetir
c<-0
Escribir "Ingrese codigo del empleado",i
leer CODIGO[i]
si CODIGO[i]<=99 o CODIGO[i]>=2501 Entonces
Escribir "codigo no aceptado"
Escribir "su codido debe estar entre 100 y 2500"
FinSi
para j <-1 hasta i Hacer
si CODIGO[i]=CODIGO[j] Entonces
c<-c+1
FinSi
FinPara
si c=2 Entonces
Escribir "codigo no aceptado"
Escribir "este codigo ya esta en uso"
Escribir "ingrese otro codigo"
FinSi
Hasta Que c=1 y (CODIGO[i]>=100 y CODIGO[i]<=2500)
//Se ingresa el grupo del empelado hasta que sea un grupo
correcto//
Repetir
Escribir "Ingrese grupo del empleado",i
leer GRUPO[i]
si GRUPO[i]<1 o GRUPO[i]>2 Entonces
Escribir "numero de grupo no aceptado"
Escribir "debe escribir el numero de grupo en el
que esta(grupo 1 o grupo 2)"
FinSi
Hasta Que GRUPO[i]=1 o GRUPO[i]=2
//Se ingresa el sueldo del empleado//
Repetir
Escribir "Ingrese el sueldo del empleado",i
leer SUELDO[i]
si SUELDO[i]<300 o SUELDO[i]>6000 Entonces
Escribir "salario no aceptado"
Escribir "el salario debe estar comprendido entre
300 y 6000"
FinSi
Hasta Que SUELDO[i]>=300 y SUELDO[i]<=6000
escribir "------------------------"
FinPara
//Variables calculadoras de promedio//
prom_grupo1<-0
prom_grupo2<-0
prom_gen<-0
c1<-0
c2<-0
//Se van sumando los sueldos en las variables//
//las variables contadoras se encargaran luego de calcular//
//el promedio independiente de los grupos//
para i<-1 hasta n Hacer
prom_gen<-prom_gen+SUELDO[i]
si grupo[i]=1 Entonces
prom_grupo1<-prom_grupo1+SUELDO[i]
c1<-c1+1
SUELDO[i]<-SUELDO[i]+250
SiNo
prom_grupo2<-prom_grupo2+SUELDO[i]
c2<-c2+1
SUELDO[i]<-SUELDO[i]+150
FinSi
FinPara
//Se encarga de ver si hay empleados en los grupos//
//Para calcular el promedio//
si c2<>0 Entonces
prom_grupo2<-prom_grupo2/c2
FinSi
si c1<>0 Entonces
prom_grupo1<-prom_grupo1/c1
FinSi
//se encarga de escribir los datos del empleado y su respectivo
sueldo//
prom_gen<-prom_gen/n
para i<-1 hasta n Hacer
si SUELDO[i]>prom_grupo1 y grupo[i]=1 Entonces
grupo[i]<-2
SUELDO[i]<-SUELDO[i]-100
cambio<-cambio+1
Escribir "Datos del empleado ",i
escribir "Perteneciente al grupo 1 con el codigo:
",CODIGO[i]
escribir "Su sueldo excede el promedio del grupo 1"
escribir "Por eso usted ha sido cambiado al grupo 2"
Escribir "Tras el cambio su sueldo ahora es de: ",
SUELDO[i]
SiNo
Escribir "Datos del empleado ",i
Escribir "codigo id: ", CODIGO[i]
Escribir "perteneciente al grupo: ", grupo[i]
Escribir "Ahora con un saldo de :", SUELDO[i]
FinSi
Escribir "---------------------------"
FinPara
//Se encarga de escribir el promedio general y de cada grupo//
//Cuantos se han cambiado de grupo//
Escribir "El promedio general de sueldos es: ",prom_gen
Escribir "---------------------------"
Escribir "El promedio general de los sueldos del grupo 1 es:
",prom_grupo1
Escribir "El promedio general de los sueldos del grupo 2 es:
",prom_grupo2
Escribir "---------------------------"
Escribir "Han cambiado de grupo una camntidad de ",cambio,"
empleados"
FinAlgoritmo
Ejercicio 6
-ENUNCIADO-
Se tienen dos vectores ordenados y se desea unirlos en un tercero pero
manteniendo los datos ordenados. Deberá usar la siguiente lógica: El
vector se debe ordenar conforme se van comparando los dos vectores,
además considerar que en el nuevo vector no se deben repetir los
números y esta validación también se debe realizar en el momento que
se está construyendo el tercer vector.
-RESOLUCION-
Algoritmo ejer_6_arreglado
//Ingresa la capacidad de los vectores//
Escribir Sin Saltar "Ingrese cuantos elementos tiene el vector A:"
Leer n
Escribir Sin Saltar"Ingrese cuantos elementos tiene el vector B:"
Leer m
Escribir ""
p<-n+m
Dimension A[n], B[m], C[p]
//El usuario ingresa los elementos de cada vector//
Para i = 1 Hasta n Hacer
Escribir Sin Saltar "Ingrese el elemento A[", i, "]: "
Leer A[i]
FinPara
Escribir ""
Para j = 1 Hasta m Hacer
Escribir Sin Saltar"Ingrese el elemento B[", j, "]: "
Leer B[j]
FinPara
Escribir ""
// Ordenamos A y B con el metodo de burbuja//
Para i = 1 Hasta n - 1 Hacer
Para j = 1 Hasta n - i Hacer
Si A[j] > A[j+1] Entonces
aux = A[j]
A[j] = A[j+1]
A[j+1] = aux
FinSi
FinPara
FinPara
Para i = 1 Hasta m - 1 Hacer
Para j = 1 Hasta m - i Hacer
Si B[j] > B[j+1] Entonces
aux = B[j]
B[j] = B[j+1]
B[j+1] = aux
FinSi
FinPara
FinPara
// Se escribe el vector A ordenado//
Escribir "Vector A ordenado:"
Para i = 1 Hasta n Hacer
Escribir A[i]
FinPara
// Se escribe el vectro B ordenado//
Escribir "Vector B ordenado:"
Para i = 1 Hasta m Hacer
Escribir B[i]
FinPara
// Colocamos variables que estaran en la posicion de cada vector//
i=1
j=1
k=1
Mientras i <= n Y j <= m Hacer
//Si el valor del vector A es menor se inserta en el nuevo
vector//
//El valor de A//
Si A[i] < B[j] Entonces
C[k] = A[i]
k=k+1
i=i+1
Sino
//Si el valor del vector A es mayor se inserta en el
nuevo vector//
//El valor de B//
Si A[i] > B[j] Entonces
C[k] = B[j]
k=k+1
j=j+1
Sino
//Si los valores son iguales se agrega al vector//
Si A[i] = B[j] Entonces
C[k] = A[i]
k=k+1
i=i+1
j=j+1
FinSi
FinSi
FinMientras
// Agregar los elementos faltantes de A y B""
Mientras i <= n Hacer
C[k] = A[i]
k=k+1
i=i+1
FinMientras
Mientras j <= m Hacer
C[k] = B[j]
k=k+1
j=j+1
FinMientras
//Se encarga de eliminar los numeros repetidos en el vecto//
Para i <- 1 Hasta p Con Paso 1
j <- i + 1
Mientras j <= p Hacer
Si C[i] = C[j] Entonces
Para k <- j Hasta p - 1 Con Paso 1
C[k] <- C[k + 1]
FinPara
p<- p - 1
Sino
j<-j+1
FinSi
FinMientras
FinPara
Repetir
//El usuario ingresa como quiere que su vector este
ordenado//
//De forma ascendentemente o descendentemente//
Escribir "quiere su vector en forma ascendente o
descendente? (asc/dsc)"
leer res
si res<> "asc" y res<> "dsc" Y res<> "ASC" y res<> "DSC"
Entonces
Escribir "elija una opcion de acuerdo al parentesis"
FinSi
hasta que res= "asc" o res="dsc" o res= "ASC" o res="DSC"
Escribir ""
Escribir "El vector C es:"
//Se escribe el vector segun el orden//
SI res= "asc" o res= "ASC" Entonces
para i<-1 Hasta p Hacer
Escribir c[i]
FinPara
SiNo
para i<-1 Hasta p Hacer
Escribir c[p-i+1]
FinPara
FinSi
FinAlgoritmo