Vous êtes sur la page 1sur 6

Facultad Politcnica - Dpto. de Informtica Algoritmo (Ing. en Electrnica / Ing. en Electricidad ) Prof.

Cristian Cappo 4/05/2012 Introduccin a vectores o arreglos unidimensionales

Arreglos unidimensionales: sintaxis, uso, acceso a componentes Declaracin


vector [ <tamao_constante> ] <tipo_dato> vector [ * ] <tipo_dato> //Vector abierto

Ejemplo: declarar un vector de 10 componentes numricos


v : vector [10] numerico

Acceso a componentes
v[<indice_entero>]

Arreglos estticos y arreglos dinmicos (que crecen programticamente) Funciones asociadas dim() : dimensiona un vector declarado abierto.
Ejemplo: var v : vector [*] numerico inicio dim(v, 10) v[1] ..

alen()

: determina el tamao del vector que se le pasa como parmetro.

Leer los componentes de un vector de tamao N e imprimirlos. N se lee al principio (ejemplo de uso de arreglo dinmico) Ejemplos sencillos para desarrollar en clase:

Dado un vector de 20 elementos imprimir la suma, el promedio, el mayor y el menor valor de sus elementos. Ahora hacer una subrutina que reciba un arreglo de tamao desconocido y devuelva todos los clculos en un registro (suma, promedio, mayor, menor). Leer 100 valores y colocarlos en un vector, luego imprimir los valores ledos en el orden inverso del que fueron introducidos. Leer una serie de nmeros enteros no negativos mayores a cero. Luego imprimir la cantidad de nmeros ledos mltiplos de 2, 3, 5, 7, 11,.., 97 (fjese que son nmeros primos). Leer como mximo 1000 nmeros.
Ejemplo: Dado 30, 23, 21, 29, 19, 20, 39 2 : 2 nmeros mltiplos 3 : ..

Debe imprimirse

Leer 10 palabras y colocarlas en un vector. Luego imprimir las mismas palabras pero convertidas a maysculas. Inicializar un vector X de 13 elementos de la siguiente manera: En la posicin menor cargar un 1, en la posicin mayor cargar un 2, en la posicin menor no ocupada cargar un 3, en la posicin mayor no ocupada cargar un 4 y as sucesivamente hasta que no haya posicin donde poner ningn nmero. Imprimir el vector. El vector quedara as:
X = {1, 3, 5, 7, 9, 11, 13, 12, 10, 8, 6, 4, 2}

Leer una serie de palabras hasta introducir la palabra FIN (que no forma parte). Imprimir la frecuencia de aparicin de los caracteres alfabticos (a..z) sin importar que este en maysculas o minsculas. No imprimir el caracter si tiene frecuencia cero.
Ejemplo: algo parece bien a : 2 b : 1 c : 1

Leer una serie de nmeros en forma consecutiva mientras que el nmero no sea negativo. Cargar los elementos ledos en un vector. Luego imprimir los nmeros en orden ascendente indicando el nmero de orden en que fueron ledos (que no coincide precisamente con el orden ascendente). Como mximo deben leerse 100 nmeros.
Ejemplo: se leen 10,4,3,2,3,5,2,7,-1

Se imprimira = 2(4),2(7),3(3),3(5),4(2),5(6),7(8),10(1)

Ejemplos desarrollados en clase:


// Leer un vector de 100 elementos e imprimir el mayor, menor, suma y promedio var A : vector[100] numerico suma, prom, menor, mayor : numerico k : numerico inicio //lectura del vector desde k=1 hasta alen(A) { leer(A[k]) } menor = A[1] mayor = A[1] suma = A[1] desde k=2 hasta alen(A) { suma = suma + A[k] si ( A[k] < menor ) { menor = A[k] } si ( A[k] > mayor ) { mayor = A[k] } } prom = suma / n imprimir(suma, prom, menor, mayor) fin // Ordenar un vector por burbuja y por seleccin var A : vector[100] numerico k,j : numerico menor: numerico inicio leer(A) // Ordenamos por burbuja desde k=1 hasta alen(A) desde j=k+1 hasta alen(A) si ( A[k] > A[j] ) { intercambiar(A[k],A[j]) } } } imprimir(A) fin var A : vector[100] numerico k,j : numerico menor: numerico inicio leer(A) // Ordenamos por seleccion desde k=1 hasta alen(A) menor = k desde j=k+1 hasta alen(A) si ( A[j] < A[menor] ) { menor = j } } intercambiar (A[k], A[menor]) } imprimir(A) fin

// Leer una serie de nmeros y ver cuantos son mltiplos de primos entre 2 y 97. // Aqu se muestra el programa Completo ya funcionando. En clase faltaban implementar algunas // cosas. programa _verCntPrimos var vPrimo : vector[100] numerico vNros : vector[1000] numerico maxPrimos, cntNros, k, j, n : numerico cntPrimo : numerico inicio maxPrimos = generarPrimos() cntNros = alen(vNros) desde k=1 hasta alen(vNros) { leer(n) si ( n > 0 ) { vNros[k] = n sino cntNros = k-1 salir } } cls() desde k=1 hasta maxPrimos { cntPrimo = 0 desde j=1 hasta cntNros { si ( vNros[j] % vPrimo[k] == 0 ) { inc(cntPrimo) } } si ( cntPrimo > 0 ) { imprimir(vPrimo[k], ":", cntPrimo, "\n") } } fin sub generarPrimos() retorna numerico var k,c : numerico n : numerico inicio c = 0 desde k=2 hasta 97 { si ( esPrimo(k) ) { inc(c) vPrimo[c] = k } } retorna c fin sub esPrimo( n : numerico ) retorna logico var f : numerico primo = SI inicio desde f=2 hasta sqrt(n) { si ( n % f == 0 ) { primo = NO salir } } retorna primo fin

// Hacer una subrutina que reciba un vector numrico y retorna la desviacin

// estndar de los nmeros. La frmula es

=
var A : vector [*] numerico inicio A = { 10,20,30,40,20} imprimir(A, \n La ds=, desv_standard(A)) fin

x x i 2
i =1

sub desv_standard ( ref A : vector [*] numerico ) retorna numerico var suma, media, k, n : numerico ds : numerico inicio n = alen(A) desde k=1 hasta n { suma = suma + A[k] } media = suma / n suma = 0 desde k=1 hasta n { suma = suma + (A[k] media )^2 } ds = sqrt ( suma / n ) retorna ds fin

Dpto. de Informtica - Algoritmos ( Ing. en Electrnica / Ing en Electricidad ) Ao 2012 Tarea #5 Ejercicios con vectores. ( A entregar por EDUCA: mircoles 16-mayo-2012 23:55 )

1) Encontrar los cinco elementos de mayor valor de un vector de 100 elementos diferentes. Cada elemento debe leerse desde el teclado debindose controlar que no se introduzca un elemento cuyo valor ya exista dentro del arreglo. Adems debe imprimir en que posicin fueron ledos estos cinco elementos. 2) Dado dos vectores A y B numricos producir un tercer vector C que contenga en la posicin 1 el resultado de sumar el ultimo elemento de A con el primer elemento de B, en la posicin 2 el penltimo elemento de A sumado con el 2do elemento de B y as sucesivamente. A y B son de tamao 20. 3) Leer una serie de nmeros enteros positivos mayores a cero. Se lee un mximo de N nmeros o hasta que el mismo no sea un nmero positivo. N se lee al principio del proceso. Imprimir la secuencia de nmeros pares ms larga en orden de mayor suma de sus elementos (ver ejemplo para la forma). Si existen varias imprimir todas. Ejemplo: Dada la siguiente secuencia { 4, 6, 8, 5, 2, 4, 8, 7, 11, 9, 2, 6, 12}, se imprimira (entre parntesis la suma, fijarse que se encuentra ordenado en forma decreciente por la suma de sus elementos )
2, 6, 12 4, 6, 8 2, 4, 8 (20) (18) (16)

4) Leer los elementos de un vector V de elementos numricos de tamao 50 como mximo. Eliminar todos los elementos de V que son cero o negativos dejando siempre el resto de los elementos en el orden en que fueron ledos inicialmente. Ejemplo se lee: 10, 0, -1, 3, 3, 5, -2, 0, 0, -1, 10 el vector debe quedar con 10, 3, 3, 5, 10 OBS:La lectura de los elementos es hasta llegar el lmite (50) o hasta que el usuario introduzca el nro. 99999 que NO deber formar parte del vector. 6) Leer los elementos para un vector A de tamao N. Hacer que los elementos de A queden ordenados de la siguiente manera: El menor elemento colocarlo en la posicin 1 del vector, el menor de los restantes N-1 elementos colocarlo en la posicin N, el menor de los restantes N-2 elementos colocarlo en la posicin 2, el menor de los restantes N-3 elementos colocarlo en la posicin N-1 y as sucesivamente. En el momento de la lectura validar que los elementos ledos sean siempre diferentes (igual que el ejercicio 2)
Ejemplo: A = {12, 3, 4, 5, -1, 20 } Debe quedar A = { -1, 4, 12, 20, 5, 3 }

OBS: NO puede usarse ningn vector auxiliar. 8) Dado dos vectores POS y NEG numricos, ambos con tamao MAXTAM; colocar en el vector POS los elementos positivos y en NEG todos los elementos negativos. La comparacin es posicional, es decir el elemento 1 del vector POS se compara con el elemento 1 del vector NEG. OBS: Si en POS existe un negativo y en NEG un positivo, se intercambian. Si en POS existe un positivo y en NEG un positivo, se coloca 0(cero) en NEG y POS mantiene su valor. Si en POS existe un negativo y en NEG un negativo, se coloca 0(cero) en POS y NEG mantiene su valor. Al final imprimir POS y NEG
Ejemplo: Resultado final POS[5] = NEG[5]= POS[5] = NEG[5] = { 9,3,-1,-4,5} {-9,3,-2, 8,6} { 9,3, 0, 8,5} {-9,0,-1,-4,0}

10)Hacer una subrutina que reciba un vector de N elementos y dos nmeros. La subrutina debe retornar la suma de los elementos que se encuentran entre las dos posiciones que se reciben como parmetro.
Ejemplo: dado = {10, 20, 30, 40 , 40 , 40 , 60 , 70 }, pos_1 = 2 se debe retornar 20+30+40+40. y pos_2 = 5

OBS: los nmeros que se reciben como posicin son siempre positivos mayores a cero. Si no indican posiciones reales dentro del vector retornar -1.
Para saber el tamao de un vector puede usar la funcion alen() de SL.

11)Leer un vector de N componentes numricos positivos y negativos. Luego imprimir la mayor suma de elementos contiguos que se puede tener con los elementos del vector.
Ejemplo: dado = { 10 , 5, 6, -7 } Se debe probar 10+5 = 15 10+5+6 = 21 Se debe imprimir 21 10+5+6-7 = 14 5+6 = 11 5+6-7 = 4 6-7 = -1 OBS: N puede ser como mximo 100. Se debe leer N antes del proceso.

13)Dado dos vectores numricos A y B ambos de tamao M imprimir: a) los elementos comunes de A y B. b) los elementos que estn en A y no en B c) los elementos que estn en B y no en A d) los elementos de A y B en forma ordenada, sin repetirse.

Observaciones: No debe usarse ningn vector auxiliar. M debe leerse al principio y como mximo es 100. Deben leerse los componentes de A y B.

14)Dado un vector V de tamao 50 imprimir los elementos ordenados de forma ascendente y luego de forma descendente. a. Primero solucione leyendo los valores para los elementos del vector. b. Luego use la funcin random() para generar valores en forma aleatoria. Ejemplo de uso: random(100) genera valores entre 0 y 100. Lea la ayuda de SL para ms informacin. c. Haga que su programa de ordenacin se convierta en una funcin de ordenacin que recibe como parmetro el vector desordenado y una constante "A" o "D" para indicar si se quiere en forma ascendente o descendente. d. Haga uso de la funcin alen() para determinar el tamao del vector. e. Encuentre al menos dos formas de hacer la ordenacin. 15) Hacer una funcin que reciba como parmetro un vector A nmeros enteros (incluyendo los negativos) y dos variables ini y fin por referencia. Debe retornar la mayor suma que puede obtenerse con alguna subsecuencia de elementos contiguos del vector. En ini y fin debe quedar el ndice inicial y final de la subsecuencia. Ejemplo:
Dado { 10 , -20 , 5, -6, 9 } 10 = 10 10+-20 = -10 10+-20+5 = -5 10+-20+5+-6 = -11 10+-20+5+-6+9 = -2 -20 = -20 -20+5 = -15 -20+5+6 = -21 -20+5+6+9 = -12 5 = 5 5+-6 = -1 5+-6+9 = 8 -6 = -6 -6+9 = 3 9 = 9

Debe retornar 10 y ini=1 y fin=1

Vous aimerez peut-être aussi