Ejercicios Sobre Vectores, Hileras y Matrices

Post on 08-Mar-2015

248 views 4 download

Transcript of Ejercicios Sobre Vectores, Hileras y Matrices

¡Ejercicios de sobre vectores, hileras y matrices!

Prof. Enrique Vílchez Quesada

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

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);

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:

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

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!

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!

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

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

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));

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! !

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);

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!

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

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

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

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);

Ejercicio #6

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

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);

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

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);

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

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);

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

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 !

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

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);

Ejercicio #11

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

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);

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

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!

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”

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);

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

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]);

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

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

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

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

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!

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 + ...

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);