Ejercicios Sobre Vectores, Hileras y Matrices

42
¡Ejercicios de sobre vectores, hileras y matrices! Prof. Enrique Vílchez Quesada

Transcript of Ejercicios Sobre Vectores, Hileras y Matrices

Page 1: Ejercicios Sobre Vectores, Hileras y Matrices

¡Ejercicios de sobre vectores, hileras y matrices!

Prof. Enrique Vílchez Quesada

Page 2: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #1

Dado un vector, implemente un método que inserte un elemento en una posición dada del vector. Nota: insertar un elemento en el vector desplaza una posición hacia la derecha a los elementos del vector que han de quedar detrás del elemento insertado. Además, la inserción ocasiona la “desaparición” del último elemento del vector

Page 3: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float [] InsertarElem(float v[], int n; int m) float element; float ve[n]; int i, j = 0; print(“Digite el elemento a insertar en el vector”); read(element); if(m <= n) for(i=0;i<n;i++)

if(i == m) ve[i] = element;

else ve[i] = v[j]; j++;

return(ve); else

return(v);

Page 4: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #2

Una cadena de ADN se representa como una secuencia circular de bases (adenina, timina, citosina y guanina) que es única para cada ser vivo, por ejemplo:

Page 5: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #2

Dicha cadena se puede representar como un vector de caracteres recorriéndola en sentido horario desde la parte superior izquierda:

Se pide diseñar un método que represente una secuencia de ADN e incluya un método booleano que nos devuelva true si las dos cadenas de ADN coinciden

Page 6: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

char [] ADN(char A[], int n) char VADN[8]; int i, j, h=0; for(i=0;i<n;i++)

for(j=0;j<n;j++) if(i == 0)

VADN[h] = A[i,j]; h++;

if(i == 1) if (A[i,j] != “”)

VADN[h+5] = A[i,j]; h = h­4;

if(i == 2) VADN[h+12] = A[i,j]; h­­;

return(VADN);

¡Recibe la cadena ¡Recibe la cadena y la convier te a y la convier te a vector, se asume vector, se asume

que n=3! que n=3!

Page 7: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

int [] Cuenta(char v[], int n) int i, ctA=0, ctT=0, ctG=0, ctC=0; int vc[4]; for(i=0;i<n;i++) if(v[i] == “A”)

ctA = ctA+1; if(v[i] == “T”)

ctT = ctT+1; … vc[0] = ctA; vc[1] = ctT; vc[2] = ctG; vc[3] = ctC; return(vc);

¡Se asume que n=8! ¡Se asume que n=8!

Page 8: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

bool ComparaADN(char A[], B[], int n) char vA[8], vB[8]; int vcA[4], vcB[4]; n=3; vA = ADN(A,n); vB = ADN(B,n); vcA = Cuenta(vA,8); vcB = Cuenta(vB,8); return(SonIguales(VcA,VcB,4,4));

¡Se invoca al ¡Se invoca al método booleano método booleano SonIguales SonIguales que se que se encuentra en la encuentra en la diapositiva 32! diapositiva 32!

n = 3

Page 9: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #3

Dado un vector de números reales, escriba un método que ordene los elementos del vector de tal forma que los números pares aparezcan antes que los números impares. Además, los números pares deberán estar ordenados de forma ascendente, mientras que los números impares deberán estar ordenados de forma descendente. Esto es, el vector 1,2,3,4,5,6 quedará como 2,4,6,5,3,1

Page 10: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float [] OrdeneVectorPI(float v[], int n) int i, np=0, nimp=0, m=0, h=0; for(i=0;i<n;i++)

if(v[i]%2==0) np++;

else nimp++;

float vp[np], vimp[nimp]; for(i=0;i<n;i++)

if(v[i]%2==0) vp[m]=v[i]; m++;

else vimp[h]=v[i]; h++;

vp = OrdeneVectorA(vp, np); vimp = OrdeneVectorD(vimp, nimp); return(ConcatenacionV(vp, np, vimp, nimp));

Page 11: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

Float [] OrdeneVectorA(float v[], int Tam) int i, j; float aux; for(i = Tam − 1;i > 0;i−−) for(j = 0;j < i;j++)

if (v[j] > v[j + 1]) aux = v[j]; v[j] = v[j + 1]; v[j + 1] = aux;

return(v);

¡Este método se ¡Este método se puede modificar puede modificar para generar para generar

un ordenamiento un ordenamiento descendente. descendente. Simplemente Simplemente

cambie > por <, cambie > por <, llamamos a este llamamos a este nuevo método nuevo método OrdeneVectorD OrdeneVectorD! !

Page 12: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float [] ConcatenacionV(float v[], int n; float w[], int m) float vw[n+m]; int i, j=0; for(i=0;i<n+m;i++) if(i<n)

vw[i] = v[i]; else

vw[i] = w[j] j++;

return(vw);

Page 13: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #4

Crear un programa para jugar a las 7 y media. Se trata de un juego de cartas (con baraja española) en el que el objetivo es alcanzar una puntuación de 7.5. Cada carta del 1 al 7 tiene su valor nominal y cada figura (sota, caballo y rey) vale 0.5 puntos. Nota: para barajar, mezcle los elementos de un vector de cartas intercambiando en repetidas ocasiones cartas elegidas al azar con la ayuda de la función random()

¡http://www.consultacartas.com/baraja_espanola.html! ¡http://www.consultacartas.com/baraja_espanola.html!

Page 14: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

Los Naipes de la Baraja española proporcionan un método de adivinación del futuro

Están formadas por bastos (1), copas (2), espadas (3) y oros (4), con doce cartas por palo

Page 15: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

void SieteyMedia() int jugada[2]; float puntaje = 0, int p = 1; while(p != 0)

print(“Desea una carta: 1 (Si), 0 (No)”); read(p); if(p != 0)

jugada[0] = random(1,4); jugada[1] = random(1,12); if(jugada[1]>=10)

puntaje = puntaje + 0,5; else

puntaje = puntaje + jugada[1]; if(puntaje >7,5)

print(“Perdió”); p=0;

else print(“Su puntaje es de: ”, puntaje);

Enrique Vílchez
Sticky Note
No es 12, es 10
Enrique Vílchez
Sticky Note
No es 10, es 8
Page 16: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #5

Escribir un método que lea una matriz de enteros de 4 filas y 4 columnas y a continuación intercambie la fila i con la fila j, siendo i y j dos valores introducidos por teclado

Page 17: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float [,] Intercambiar() int i, j, h, w; float A[4,4], B[4,4]; for(h=0;h<4;h++)

for(w=0;w<4;w++) read(A[h,w]);

print(“Digite las filas que desea intercambiar”); read(i,j); for(h=0;h<4;h++)

for(w=0;w<4;w++) if(h == i)

B[h,w] = A[j,w]; if(h == j)

B[h,w] = A[i,w]; if ((h != i) and (h != j))

B[h.w] = A[h,w]; return(B);

Page 18: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #6

Escribir un método que calcule el producto escalar de dos vectores

Page 19: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float ProdEscalar(float v[], w[], int n) int i; float pesvw=0; for(i=0;i<n;i++) pesvw=pesvw+v[i]*w[i]; return(pesvw);

Page 20: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #7

Escribir un método para leer dos números X y K y un vector A de dimensión “n”. Ordenar el vector e insertar el número X en la posición K de manera que siempre quede ordenado

Page 21: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float [] OrdenInsert() int i, K; float A[n], C[n], B[n+1]; print(“Digite la posición”); read(K); for(i=0;i<n;i++)

read(A[i]); C = InsertarElem[A,n,K]; for(i=0;i<n+1;i++)

if(i==n) B[i]=A[i];

else B[i]=C[i];

B = OrdeneVectorA(B, n+1); return(B);

Page 22: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #8

Leer una matriz A cuadrada de tamaño “n”. Escribir los elementos de la diagonal principal, secundaria, de la matriz triangular superior y de la matriz triangular inferior

Page 23: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

float [,] Leer() int i, j; float A[n,n]; for(i=0;i<n;i++)

read(A[i,i]); for(i=0;i<n;i++)

if(i != n­1­i)read(A[i,n­1­i]);

for(i=0;i<n;i++) for(j=0;j<n;j++)

if((i<j) && (j =! n­1­i)) read(A[i,j]);

for(i=0;i<n;i++) for(j=0;j<n;j++)

if((i>j) && (j =! n­1­i)) read(A[i,j]);

return(A);

Page 24: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #9

Escribir un método que lea del teclado una cadena y muestre en la pantalla la cantidad de consonantes y de vocales que contiene

Page 25: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

int nConVoc() string n; int i, cont=0; print(“Digite la cadena”); read(n); for(i=0;i<length(n);i++) if((n[i] == “a”) or (n[i] == “e”) or …)

cont++; return(cont, length(n)­cont);

¡Se asume que la ¡Se asume que la cadena no tiene cadena no tiene caracteres caracteres

alfanumér icos, en alfanumér icos, en caso contrar io se caso contrar io se debe añadir un debe añadir un if if con todas las con todas las consonantes y consonantes y

contar ! contar !

Page 26: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #10

El sistema siguiente se usa para cifrar y descifrar mensajes. Cada letra del alfabeto se sustituye por la que está tres posiciones adelante. Así, A se reemplaza por D, B por E, y así sucesivamente, siendo X sustituida por A, Y por B y Z por C. Escriba un programa para codificar un mensaje de tipo string. Sugerencia: construya una cadena que contenga el alfabeto. Para cada letra del mensaje original, encuentre su posición en el alfabeto y súmele 3; si el resultado es mayor que 26, se debe volver a empezar con el inicio del alfabeto

Page 27: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

string Codificacion1(string s) int i, j; string alfabeto, codigo=“”; alfabeto=“abcdefghi…”; for(i=0;i<length(s);i++)

for(j=0;j<26;j++) if(s[i] == alfabeto[j]) if(j+3<26)

codigo=codigo+alfabeto[j+3]; else

codigo=codigo+alfabeto[j+3­26]; return(codigo);

Page 28: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #11

Escriba un algoritmo que inserte los caracteres “******” exactamente en la mitad de un string

Page 29: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

string InsertaAster(string s) string aster=“******”; int n if(length(s)%2==0) insert(aster, s, length(s)/2);

else insert(aster, s, (length(s)­1)/2);

return(s);

Page 30: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #12

Escriba un programa que reciba como entrada una línea de texto, que sustituya todos los signos de puntuación con espacios y segmente el string en palabras individuales

Page 31: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

void Segmentacion(string s) int i; string s=ER(“.”, “ ”, s); s=ER(“,”), “ ”, s); s=ER(“;”), “ ”, s); s=ER(“ ”, “­”, s); for(i=0;i<length(s);i++) if(i<n­1)

if((s[i]==“­”) && (s[i+1] ==“­”)) delete(s,i+1,1);

return(s);

¡Recuerde el ¡Recuerde el que el método ER que el método ER de la diapositiva de la diapositiva 75, sustituye un 75, sustituye un carácter por otro carácter por otro en una hilera! en una hilera!

Page 32: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #13

Escriba un método para implementar el siguiente esquema de codificación: la primera letra del mensaje se sustituye por el resultado del desplazamiento en una posición, la segunda letra del mensaje se desplaza dos posiciones, la tercera letra se desplaza 3 posiciones, etc. Los caracteres que no son letras se reproducen sin modificación. Así, “EN EL CIRCO” se transformaría en “FP HP HOYKX”

Page 33: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

string Codificacion2(string s) int i, j, t=1; string alfabeto, codigo=“”; alfabeto=“abcdefghi…”; for(i=0;i<length(s);i++)

for(j=0;j<26;j++) if(s[i] == alfabeto[j]) if(j+t<26)

codigo=codigo+alfabeto[j+t]; t++;

else codigo=codigo+alfabeto[j+t­26] t++;

else codigo=codigo+s[i];

return(codigo);

Page 34: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #14

En cierto teclado, la tecla de la letra t tiene la tendencia a pegarse. Escriba un método que reciba un mensaje de cadena y reimprima el mensaje de manera que la letra t nunca ocurra más de dos veces consecutivas en el mensaje

Page 35: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

void Letrat(string s) int i; for(i=0;i<length(s);i++) if(i<length(s)­2) if((s[i]==“t”)&&(s[i+1]==“t”)&&(s[i+2]==“t”)) delete(s,i,1); i=0;

for(i=0;i<length(s);i++) print(s[i]);

Page 36: Ejercicios Sobre Vectores, Hileras y Matrices

Ejercicio #15

Escriba un programa que convierta números romanos en sus equivalentes decimales. Suponga un máximo de diez dígitos romanos escogidos de la lista: M–1000, D–500, C–100, L–50, X–10, V–5, I–1

Page 37: Ejercicios Sobre Vectores, Hileras y Matrices

Reglas …

l Si a la derecha de una cifra romana de escribe otra igual o menor, el valor de ésta se suma a la anterior

l La cifra "I" colocada delante de la "V" o la "X", les resta una unidad; la "X", precediendo a la "L" o a la "C", les resta diez unidades y la "C", delante de la "D" o la "M", les resta cien unidades

Page 38: Ejercicios Sobre Vectores, Hileras y Matrices

Reglas …

l En ningún número se puede poner una misma letra más de tres veces seguidas. En la antigüedad se ve a veces la "I" o la "X" hasta cuatro veces seguidas

l La "V", la "L" y la "D" no pueden duplicarse porque otras letras ("X", "C", "M") representan su valor duplicado

Page 39: Ejercicios Sobre Vectores, Hileras y Matrices

Reglas …

l Si entre dos cifras cualesquiera existe otra menor, ésta restará su valor a la siguiente

l El valor de los números romanos queda multiplicado por mil tantas veces como rayas horizontales se coloquen encima de los mismos, así con dos rayas se multiplica por un millón

Page 40: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

int RomanoDecimal(string s) int i, p, n=length(s), decimal=0; for(i=0;i<length(s);i=i+2) n=length(s)­i; p = 1; if(n>=3) if((R(s[i])>=R(s[i+1]))&&(R(s[i+2])>=R(s[i+1]))

decimal=R(s[i+2])­R(s[i+1])+R(s[i]); i++; p=0;

¡http://www.vivir.com/vivir/universidad/index.htm?http://www.vivir.com/vivir/universidad/convnumromanos.htm! ¡http://www.vivir.com/vivir/universidad/index.htm?http://www.vivir.com/vivir/universidad/convnumromanos.htm!

¡Convertidor!

Page 41: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

if(p=1) if(n>=2) swich(R(s[i]))

case 1: if((R(s[i+1]) = 5) || R(s[i+1]) = 10)) decimal=R(s[i+1])­R(s[i]); break;

case 10 : if((R(s[i+1]) = 50) || R(s[i+1]) = 100)) decimal=R(s[i+1])­R(s[i]); break;

case 50 : if((R(s[i+1]) = 500) || R(s[i+1]) = 1000)) decimal=R(s[i+1])­R(s[i]); break;

default: decimal=R(s[i+1])+R(s[i]); break; if(i==length(s)­1) decimal=decimal+R(s[i]); i++;

return(decimal);

Por ejemplo: Por ejemplo: XCLXIIV: 155 XCLXIIV: 155 XCIXXV: 114 XCIXXV: 114

Enrique Vílchez
Sticky Note
En todas es decimal = decimal + ...
Page 42: Ejercicios Sobre Vectores, Hileras y Matrices

Solución …

int R(char s) int n; if(s==“M”) n=1000;

if(s==“D”) n=500;

if(s==“C”) n=100; …

return(n);