¡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
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
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
Solución … bool ComparaADN(char A[], B[], int n) {char vA[8], vB[8]; n = 3 int vcA[4], vcB[4]; n=3; ¡Se invoca al método booleano vA = ADN(A,n); SonIguales que se SonIguales vB = ADN(B,n); encuentr a en la diapositiva 32! vcA = Cuenta(vA,8); vcB = Cuenta(vB,8); return(SonIguales(VcA,VcB,4,4));}
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
Solución … Float [] OrdeneVectorA(float v[], int Tam) {int i, j; ¡Este método se float aux; puede modificar for(i = Tam − 1;i > 0;i−−) par a gener ar un or denamiento for(j = 0;j < i;j++) descendente. if (v[j] > v[j + 1]) Simplemente {aux = v[j]; cambie > por <, v[j] = v[j + 1]; llamamos a este v[j + 1] = aux;} nuevo método Or deneVector D! D ! return(v);}
Solución … float [] ConcatenacionV(float v[], int n; float w[], int m) {float vw[n+m]; int i, j=0; for(i=0;i
Ejercicio #4 ¡http://www.consultacartas.com/baraja_espanola.html! ¡http://www.consultacartas.com/baraja_espanola.html!
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()
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);}}
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
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
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;ij) && (j =! n1i)) 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 … ¡Se asume que la cadena no tiene car acteres alfanumér icos, en caso contr ar io se debe añadir un if debe añadir un con todas las consonantes y contar !!
int nConVoc() {string n; int i, cont=0; print(“Digite la cadena”); read(n); for(i=0;i
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
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 ¡Recuer de el que el método ER s=ER(“.”, “ ”, s); de la diapositiva s=ER(“,”), “ ”, s); 75, sustituye un s=ER(“;”), “ ”, s); car ácter por otro s=ER(“ ”, “”, s); en una hiler a! a! for(i=0;i
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
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
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 …
¡Convertidor!
¡http://www.vivir.com/vivir/universidad/index.htm?http://www.vivir.com/vivir/universidad/convnumromanos.htm!
int RomanoDecimal(string s) {int i, p, n=length(s), decimal=0; for(i=0;i=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;}
Solución …
Por ejemplo: XCLXIIV: 155 XCIXXV: 114 XCIXXV: 114
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);}
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);}