30
UNIVERSIDAD CESAR VALLEJO - PIURA ESCUELA DE INGENIERIA DE SISTEMAS ARREGLOS (UNIDIMENSIONALES, BIDIMENSIONALES) 1. Definición de Arreglo. Un Arreglo es una estructura homogénea de datos que almacena bajo el mismo nombre (variable) a una colección de datos del mismo tipo. Los arreglos se caracterizan por: Almacenan los elementos en posiciones contiguas de memoria Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo. Unidimensionales (Vectores) Tipo de Arreglos Bidimensionales (Matrices) 2. Tipos de Arreglos 2.1 Vectores. Es un conjunto de elementos dispuestos a continuación de otro, donde cada elemento conserva su propio espacio. Además el espacio de cada elemento es igual pata todos y lo que se puede almacenar en cada uno de ellos si bien pueden ser de diferente valor, el tipo de información es el mismo. Para poder referirnos a un elemento del arreglo en particular es necesario utilizar un índice que vendría a ser la numeración consecutiva de cada espacio que ocupa un dato en el arreglo. Esta numeración generalmente empieza en 1; sin embargo, que da ésta sujeto a la iniciativa del programador y los requerimientos del algoritmo que se emplee. Cuando un arreglo tiene una única numeración (un sólo índice) se le conoce como un Arreglo Unidimensional, aunque algunos preferimos usar el nombre de Vector. Características. 1. Almacena los elementos en la memoria, ocupando posiciones contiguas. 2. Tiene un único nombre de variable que represente a todos los elementos, diferenciándose cada uno por un índice. 3. Cada elemento puede ser accesado en forma individual. Curso: Metodología de la Programación Docente: Ing. CIP. Hoower A. Puicón Zapata

Vectores y Matrices - Cadenas

  • Upload
    zuck4

  • View
    1.305

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO - PIURAESCUELA DE INGENIERIA DE SISTEMAS

ARREGLOS (UNIDIMENSIONALES, BIDIMENSIONALES)

1. Definición de Arreglo.Un Arreglo es una estructura homogénea de datos que almacena bajo el mismo nombre

(variable) a una colección de datos del mismo tipo.Los arreglos se caracterizan por:

Almacenan los elementos en posiciones contiguas de memoria Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer

referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo.

Unidimensionales (Vectores)Tipo de Arreglos

Bidimensionales (Matrices)

2. Tipos de Arreglos 2.1 Vectores.

Es un conjunto de elementos dispuestos a continuación de otro, donde cada elemento conserva su propio espacio. Además el espacio de cada elemento es igual pata todos y lo que se puede almacenar en cada uno de ellos si bien pueden ser de diferente valor, el tipo de información es el mismo.

Para poder referirnos a un elemento del arreglo en particular es necesario utilizar un índice que vendría a ser la numeración consecutiva de cada espacio que ocupa un dato en el arreglo. Esta numeración generalmente empieza en 1; sin embargo, que da ésta sujeto a la iniciativa del programador y los requerimientos del algoritmo que se emplee.

Cuando un arreglo tiene una única numeración (un sólo índice) se le conoce como un Arreglo Unidimensional, aunque algunos preferimos usar el nombre de Vector.

Características.1. Almacena los elementos en la memoria, ocupando posiciones contiguas.2. Tiene un único nombre de variable que represente a todos los elementos,

diferenciándose cada uno por un índice.3. Cada elemento puede ser accesado en forma individual.4. Un índice puede ser un valor explícito, una variable o una expresión algebraica.

Declaración de un vector.Tipo_de_dato Nombre_Arreglo [tamaño];

Donde:- Tipo_de_dato : Cualquiera de los tipo de datos utilizados en algoritmos y

lenguajes de programación.- Nombre_Arreglo : Es un identificar válido, con el cual nos vamos a referir al

arreglo o vector.- Tamaño : Representa la cantidad de elementos que puede almacenar el arreglo

o vector.

Uso del Indice de un Vector.El índice el vector hace referencia a la posición del elemento dentro del conjunto de

datos, lo que permite que se pueda utilizar en cualquiera de las operaciones que se desarrollen en el algoritmo.

Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes), el cual indica una posición en particular del vector.

Curso: Metodología de la Programación Docente: Ing. CIP. Hoower A. Puicón Zapata

Page 2: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Nombre_arreglo [ i ]

El valor del índice o posición numérica de un elemento dentro del vector puede expresarse como:

- Constante entera o valor literal (por ejemplo 3).- Variable entera (por ejemplo x).- Expresión entera (por ejemplo x + y - 1). En cualquiera de los casos, el valor del

índice debe ser un entero mayor o igual a cero.

El valor del índice puede varia de 0 a n-1, donde n es el número de elementos del vector.

En general, para tener acceso al i-ésimo elemento del vector se escribe nombre_vector[n-1].

Ejemplo:

Altura_personas1.39 1.57 1.56 2.02 1.89 1.66

0 1 2 3 4 5

Primer elemento : altura_persona[0] = 1.39Segundo elemento : altura_persona[1] = 1.57...........Sexto elemento : altura_persona[5] = 1.66

Representación gráfica de un vector

78910

Vec[1] = 7Vec[2] = 8Vec[3] = 9Vec[4] = 7Vec[5] = 7

Altura_personas1.39 1.57 1.56 2.02 1.89 1.66

0 1 2 3 4 5

Primer elemento : altura_persona[0] = 1.39Segundo elemento : altura_persona[1] = 1.57Tercer elemento : altura_persona[2] = 1.56Cuarto elemento : altura_persona[3] = 2.02Quinto elemento : altura_persona[4] = 1.89Sexto elemento : altura_persona[5] = 1.66

Operaciones con vectores.

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Vec[1]Vec[2]Vec[3]Vec[4]Vec[5]

Page 3: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Los vectores no se pueden leer o escribir e un solo operación, la lectura y escritura se debe hacer elemento por elemento. En forma genérica la lectura/escritura se realiza siempre dentro de un bucle de que varia entre los límites del índice.

Para (i = 1; i <= N; i++)Leer (vector [ i ] );

Cada elemento del vector puede intervenir en cualquier operación. En cuanto al vector en su conjunto sólo puede ser asignado a otro vector del mismo tipo y tamaño.

Inicialización de un Vector.- Inicializar con valores constantes.

Inicializar los elementos de un vector de N elementos enteros en cero.

Variable Entero N = 100;Entero vector[N], i;Para (i = 1; i <= N; i++) Vector [ i ] = 0;Fin_para

// Inicialización de cada elemento del vector en 0.0 0 0 0 0 0 . . . . 0

0 1 2 3 4 5 . . . . 99

- Inicializar usando variables.Inicializar los elementos de un vector de 10 elementos enteros con valores del 1 al 10.

Variable Entero vector[10], i;Para (i = 1; i <= 9; i++) Vector [ i ] = i +1;Fin_para

// Inicialización de cada elemento del vector .1 2 3 4 5 6 7 8 9 100 1 2 3 4 5 6 7 8 9

- Inicializar mediante lectura. Inicializar los elementos de un vector de 30 elementos de tipo carácter con valores introducidos por el usuario.

Variable Caracter frase[30], car;Entero i;

Para (i = 0; i < 30; i++)Imprimir (“Introduzca un carácter :”;Leer (car);frase[i] = car;

Fin_para

‘f’ ‘r’ ‘a’ ‘s’ ‘e’ ‘ ‘ ‘c ‘ ‘o’ ‘r’ ‘t’ ‘a’0 1 2 3 4 5 6 7 8 9 10

- Todos los elementos del vector no tienen asignado valores iniciales.

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 4: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Entero vector [ 8] = { 1, 2 , 3};Vector [0] = 1 Vector [1] = 2 Vector [2] = 3Vector [3] = 0 Vector [4] = 0 Vector [5] = 0Vector [6] = 0 Vector [7] = 0

Real vector [ 5] = { 0.25, 0.00 , 0.30};Vector [0] = 0.25 Vector [1] = 0.00 Vector [2] = 0.30Vector [3] = 0.00 Vector [4] = 0.00

Caracter Cdn[ 8] = { ‘S’, ’I’ , ’ ‘ , ’A’ , ’L’ , ’L’ , ’I’, ‘ , ‘};Cdn [0] = ‘S’ Cdn [1] = ‘I’ Cdn [2] = ’ ‘Cdn [3] = ‘A‘ Cdn [4] = ‘L’ Cdn [4] = ‘L’Cdn [4] = ‘I’ Cdn [4] = ‘ , ‘

Formas de llenado de un Vector Para (I = 1; I <= 10; I++)

Leer (vec[I] );Fin-para

Mientras (I <= 10) Leer (vec[I] );Fin-mientras

I=1Repetir Leer (vec[I] );

I = I + 1; Hasta-que (I>10)

Problemas Desarrollados

1) Diseñar un algoritmo que permita leer N números, almacénelos en un vector e imprímalos.

Variables Real vector[50];Entero i, num;

InicioImprimir (“Ingrese numero de terminos :”);Leer (num);Para (i = 1; i <= num; i++)

Imprimir (“Ingrese un numero : ”);Leer (vector[ i ]);

Fin_paraPara (i = 1; i <= num; i++)

Imprimir (“Elemento “,i, “ : ”, vector[ i ]);Fin_para

fin

2) Diseñar un algoritmo que permita determinar la media aritmética de un conjunto de datos.

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 5: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Variables Real vector[50], suma = 0;Entero i, num;

InicioImprimir (“Ingrese numero de terminos :”);Leer (num);Para (i = 1; i <= num; i++)

Imprimir (“Ingrese un numero : ”);Leer (vector[ i ]);

Fin_paraPara (i = 1; i <= num; i++)

suma = suma + vector[ i ];Fin_paraImprimir (“La media aritmética es : ”, suma/num);

Fin

3) Diseñar un algoritmo que permita determinar la cantidad de números positivos, negativos e iguales a 0, que se encuentra en un vector de “n” elementos.Variables

Entero i, n, cont1 = 0, cont2 = 0, cont3 = 0, vector[50];Inicio

Imprimir (“Ingrese cantidad de numero :”);Leer ( n );Para (i = 1; i <= n; i++) Imprimir (“numero [" , i , "] : "); Leer (vector[i]);Fin_paraPara (i = 1; i <= n; i++) si (vector[i] > 0)

cont1 = cont1 + 1; si_no si (vector [i] < 0)

cont2 = cont2 + 1; si_no si (vector [i] == 0)

cont3 = cont3 + 1;fin_para imprimir ("Cantidad de numero positivos : ", cont1);imprimir ("Cantidad de numero negativos : ", cont2);imprimir (“ Cantidad de numero = a cero : ", cont3);

fin

4) Diseñar un algoritmo que permita suma “n” números menores a 50.Variables

Entero i, n, vector[50], suma = 0; Inicio

Imprimir (“Ingrese cantidad de numeros :”);Leer (n);Para (i = 1; i <= n; i++) Imprimir (“numero [" , i , "] : "); Leer (vector[i]);Fin_paraPara (i = 1 hasta n)

si (vector[i] < 50)

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 6: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

suma = suma + vector[i];fin_para Imprimir ("Las suma es : ", suma);

Fin

5) Diseñar un algoritmo que permita mostrar la posición del elemento mas pequeño de un vector.Variable

Entero i, n, menor = 100, num[50],pos=0; Inicio

Imprimir (“Ingrese cantidad de numeros :”);Leer (n);Para (i = 1; i <= n; i++) Imprimir (“numero [" , i , "] : "); Leer (vector[i]);Fin_paraPara (i = 1; i <= n; i++)

si (num[i] < menor) menor = num[i]; pos = i;

fin_sifin_para imprimir ("El elemento mas pequeño menor es : " , menor);imprimir ("Se encuentra en la posicion : " , pos);

fin

6. Diseñar un algoritmo que permita determinar el mayor y menor de “n” números y luego intercambiarlos.Variables

Entero i, n, mayor = 0, menor=100, num[50], aux = 0;Inicio

Imprimir (“Ingrese cantidad de numeros :”);Leer (n);Para (i = 1; i <= n; i++) Imprimir ( “numero [" , i , "] : "); Leer (vector[i]);Fin_paraPara (i = 1; i <= n; i++) si (num[i] > mayor)

mayor = num[i]; Para i = 1 hasta n

si (num[i] < menor) menor = num[i]; fin_para

fin_paraImprimir (“El menor es : " , menor);Imprimir (“El mayor es : " , mayor);Imprimir (“Los elementos intercambiados son ");Para (i = 1 hasta n)

si (num[i] == num[1])aux = num[i]; num[i] = num[n]; num[n] = aux;

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 7: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

fin_siImprimir (“elemento [" , i ,"]: " , num[i]);

fin_para fin

7. Diseñar un algoritmo que permita determinar el mayor de “n” números ingresados.Variables Entero i, n, mayor = 0, num[50];Inicio Imprimir (“Ingrese cantidad de numeros :”);

Leer (n); Para (i = 1; i <= n; i++) Imprimir (“numero [" , i , "] : ");

Leer (vector[i]); Fin_para

Para (i = 1; i <= n; i++) si (num[i] > mayor)

mayor = num[i]; fin_para imprimir ("El mayor es : " , mayor);fin

8. Diseñar un algoritmo que permita determinar el menor de “n” números ingresados.Variables Entero i, n, menor = 100, num[50];Inicio Imprimir (“Ingrese un numero : ”);

Leer (n); Para (i = 1; i <= n; i++) Imprimir (“numero [" , i , "] : ");

Leer (vector[i]); Fin_para

Para (i = 1 hasta n ) si (num[i] < menor)

menor = num[i]; fin_para Imprimir ("El menor es : " , menor);fin

2.2. Arreglos Bidimensionales (Matriz).

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 8: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Es un arreglo de M * N elementos organizados en dos dimensiones donde “M” es el numero de filas o reglones y “N” el numero de columnas.

Una matriz o tabla es un vector de dos dimensiones, cada una de ellas con un índice. La forma de concebir este vector es imaginando una tabla de filas y columnas, donde cada dato ocupa una posición indicada por una fila y una columna.

Declaración de una matriz o tabla.

Tipo_de_dato Nombre_Tabla [tamaño1][tamaño2];

Donde:- Tipo_de_dato : Cualquiera de los tipo de datos utilizados en algoritmos y lenguajes

de programación.- Nombre_Tabla : Es un identificar válido, con el cual nos vamos a referir al arreglo o

vector.- Tamaño1, Tamaño2 : Representa la cantidad de elementos que puede almacenar el

arreglo o vector.

Uso del Indice de un Vector.Los índices permiten identificar un elemento dentro de un conjunto. Para las tablas, después del nombre del identificador se adiciona un corchete con los dos índices separados por corchetes.

Entero matriz[10][10];Los tipos deben ser un tipo ordinal y se pueden colocar como valores explícitos, variables o expresiones matemáticas.Para hacer referencia a un elemento de la tabla o matriz se usa el nombre del mismo, seguido de los índices (entre corchetes), el cual indica una posición en particular de la tabla o matriz.

Nombre_arreglo [ i ][j]Donde i indica el renglón y j indica la columna, donde se encuentra almacenado el dato.

Representación gráfica de una matriz

Mat [i]I[j]

1,1 1,2 1,3 1,42,1 2,2 2,3 2.43,1 3,2 3,3 3,44,1 4,2 4,3 4,4

Llenado de una matrizCada elemento de la tabla se puede utilizar en las operaciones dentro de un

algoritmo, hasta identificarlo correctamente. En lo que respecta a todo el conjunto la única operación posible es la asignación, para lo cual la variable receptor tendría que ser del mismo tamaño y tipo. Para leer/escribir elementos en la tabla se utilizan bucles anidados que tienen variables de control entre los límites inferior y superior de los índices.

Por renglones

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Fila o Renglón

[i]

Columna[j]

Page 9: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

para (i = 1 hasta 5) para (j = 1 hasta 5)

Leer (Mat [i][j]); Fin-paraFin-para

Por columnas para (j = 1 hasta 5) para (i = 1 hasta 5)

Leer (Mat ([i][j]); Fin-paraFin-para

Nota: Para hacer el llenado de una matriz se deben de usar dos variables para los índices y se utilizan 2 ciclos uno para los renglones y otro para las columnas; a estos ciclos se les llama ciclos anidados (un ciclo dentro de otro ciclo).

Problemas Desarrollados

1) Diseñe un algoritmo que permita ingresar los datos de una matriz de orden 3 x 5 y luego se mostrar sus valores en la siguiente forma:

Matriz original Matriz final4 7 1 3 5 4 2 32 0 6 9 7 7 0 1 3 1 2 6 4 1 6 2

3 9 6 5 7 4

Variables Entero Matriz[3][5];Entero i, j;

InicioImprimir (“Ingrese los elementos de la matriz : ”);Para ( i = 1hasta 3)

Para (j = 1 hasta 5) Imprimir (“Elemento [ “, i , “][“, j , “] = ” ); Leer (Matriz[i][j]);Fin_para

Fin_paraImprimir (“Matriz invertida : ”);Para ( j = 1hasta 5)

Para (i = 1 hasta 3) Imprimir (“Elemento [ “, i , “][“, j , “] = ” , Matriz[i][j]);Fin_para

Fin_paraFin

2) Diseñe un algoritmo que permita determinar la suma de 2 matrices de orden MxN.

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 10: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Variables Entero Matriz1[20][20], Matriz2[20][20], Matiz3[20][20];Entero i, j, fil, col;

InicioImprimir (“Ingrese numero de filas : ”);Leer (fil);Imprimir (“Ingrese numero de columnas : ”);Leer (col);Imprimir (“Ingrese los elementos de la primera matriz : ”);Para ( i = 1 hasta fil)

Para (j = 1 hasta col) Imprimir (“Elemento [ “, i , “][“, j , “] = ” ); Leer (Matriz1[i][j]);Fin_para

Fin_paraImprimir (“Ingrese los elementos de la segunda matriz : ”);Para ( i = 1 hasta fil)

Para (j = 1 hasta col) Imprimir (“Elemento [ “, i , “][“, j , “] = ” ); Leer (Matriz2[i][j]);Fin_para

Fin_paraPara ( i = 1 hasta fil)

Para (j = 1 hasta col)Matriz3[i][j] = Matriz1[i][j] + Matriz2[i][j];Fin_para

Fin_paraImprimir (“Matriz Resultante : ”);Para ( j = 1 hasta fil)

Para (i = 1 hasta col) Imprimir (“Elemento [ “, i , “][“, j , “] = ” , Matriz3[i][j]);Fin_para

Fin_paraFin

3) Diseñe un algoritmo que permita multiplicar una matriz de orden M*N, por un valor constante ingresado por el usuario.Variables

Entero Matriz1[20][20], Matriz2[20][20];Entero i, j, fil, col, K;

InicioImprimir (“Ingrese numero de filas : ”);Leer (fil);Imprimir (“Ingrese numero de columnas : ”);Leer (col);Imprimir (“Ingrese los elementos de la matriz : ”);Para ( i = 1 hasta fil)

Para (j = 1 hasta col) Imprimir (“Elemento [ “, i , “][“, j , “] = ” ); Leer (Matriz1[i][j]);Fin_para

Fin_para

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 11: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Imprimir (“Ingrese valor de la constante : ”);Leer (K);Para ( i = 1 hasta fil)

Para (j = 1 hasta col)Matriz2[i][j] = Matriz1[i][j] * K;Fin_para

Fin_paraImprimir (“Matriz Resultante : ”);Para ( j = 1 hasta fil)

Para (i = 1 hasta col) Imprimir (“Elemento [ “, i , “][“, j , “] = ” , Matriz2[i][j]);Fin_para

Fin_paraFin

4) Diseñe un algoritmo que permita sumar los elementos que se encuentran en la diagonal principal de una matriz cuadrada. Variables

Entero Matriz[20][20];Entero i, j, filcol, suma = 0;

InicioImprimir (“Ingrese numero de filas y columnas : ”);Leer (filcol);Imprimir (“Ingrese los elementos de la matriz : ”);Para ( i = 1 hasta filcol)

Para (j = 1 hasta filcol) Imprimir (“Elemento [ “, i , “][“, j , “] = ” ); Leer (Matriz1[i][j]);Fin_para

Fin_paraPara ( i = 1 hasta filcol)

Para (j = 1 hasta filcol) Si (i = =j )

Suma = suma + Matriz[i][j];Fin_para

Fin_paraImprimir (“La suma de los elementos de la diagonal es : ”, suma);

Fin

5) Diseñe un algoritmo que permita sumar los elementos que no pertenecen a la diagonal principal de una matriz cuadrada. Variables

Entero Matriz[20][20];Entero i, j, filcol, suma = 0;

InicioImprimir (“Ingrese numero de filas y columnas : ”);Leer (filcol);Imprimir (“Ingrese los elementos de la matriz : ”);Para ( i = 1 hasta filcol)

Para (j = 1 hasta filcol) Imprimir (“Elemento [ “, i , “][“, j , “] = ” ); Leer (Matriz1[i][j]);

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 12: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Fin_paraFin_paraPara ( i = 1 hasta filcol)

Para (j = 1 hasta filcol) Si (i != j )

Suma = suma + Matriz[i][j];Fin_para

Fin_para

Imprimir (“La suma de elementos que no estan en la diagonal es : ”, suma);Fin

6) Diseñar un algoritmo que permita realizar las siguientes operaciones con matrices:

Menú de Opciones 1. Ingreso de datos2. Ver matriz3. Suma de filas4. Suma de columnas5. Valor mayorUtilizar funciones.

Variables Entero nfil = 50, col = 50;Entero n = 0,m = 0, pfila, pcol;Real matriz[nfil][ncol];Real sfilas[nfil]={0};

Real scolumnas[ncol]={0};Real mayor,may;Real vector[20];Caracter r;

Inicio Repetir menu(&r); segun_sea ( r ) Inicio case '1': Imprimir ("1. Ingreso de datos");

Imprimir ("Ingrese el numero de filas : "); Leer (n);

Imprimir ("Ingrese el numero de columnas : "); Leer (m); ingreso(matriz,n,m); break;

case '2': Imprimir ("2. Ver matriz"); si (n!=0 && m!=0) vermatriz(matriz,n,m,1,3); si_no

Imprimir ("ERROR. Ingrese los datos de la matriz"); break; case '3' : Imprimir (“3. Sumar por filas ");

si(m!=0 && n!=0) vermatriz(matriz,n,m,1,3);

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 13: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

sumarfilas(matriz,sfilas,m,ncol); vervector(matriz,sfilas,scolumnas,m); si_no

Imprimir ("ERROR, Ingrese los datos de la matriz"); break;

case '4' : Imprimir ("4. Sumar por columnas "); si (m!=0 && n!=0) vermatriz(matriz,n,m,1,3); vervector(matriz,sfilas,scolumnas,m); sumarcolumnas(matriz,scolumnas,m,ncol); si_no Imprimir ("ERROR, Ingrese los datos de la matriz"; break;

case '5': Imprimir ("5. Valor mayor "); si (n!=0 && m!=0)

valormayor(matriz,n,m,&mayor,&pfila,&pcol); vermatriz(matriz,n,m,1,3); Imprimir (“El valor mayor 1 es: ", mayor);

Imprimir (“Esta en la posicion [", pfila, "][" , pcol, "]"); si_no

Imprimir ("ERROR. Ingrese los datos de la matriz"); break;hasta (r != ' 6 ');

fin

void ingreso(Real matriz[nfil][ncol], Entero n, Entero m)Inicio Variables

Entero i, j; Para (i = 1; i <= n; i++)

Para ( j = 1 hasta m) Imprimir ("Ingrese el elemento [", i ,"][“, j ," ] :";

Leer (matriz[i][j]);Fin_para Fin_para

Fin

void vermatriz(Real matriz[nfil][ncol], Entero n, Entero m, Entero a, Entero b)Inicio Variables Entero i, j, a2 = a;

Para (i = 1; i <= n; i++) Para ( j = 1 hasta m)

gotoxy(a2, i + b); Imprimir (matriz[i][j]); a2 = a2 + 4;

fin_para a2 = a;

fin_para fin

void valormayor(Real matriz[nfil][ncol],Entero n,Entero m,Real *mayor,Entero *pfila,Entero*pcol)

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 14: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Inicio Variables Entero may, i , j; *mayor = matriz[1][1]; *pfila = *pcol = 1;

Para (i = 1; i <= n; i++) Para ( j = 1 hasta m)

si (*mayor < matriz[i][j]) *mayor = matriz[i][j];

*pfila = i; *pcol = j; fin_si fin_para fin_para fin

void menu(Caracter *op)Inicio

gotoxy(6,4);Imprimir(" OPERACIONES EN UNA MATRIZ ");gotoxy(7,6); Imprimir("1. Ingreso de datos");gotoxy(7,7); Imprimir("2. Ver matriz");gotoxy(7,8); Imprimir("3. Suma de filas");gotoxy(7,9); Imprimir("4. Suma de columnas");gotoxy(7,10); Imprimir("5. Valor mayor");gotoxy(7,11); Imprimir("6. Salir");gotoxy(7,13); Imprimir("Su opcion ");*op = getch();

fin

void sumarfilas(Real matriz[nfil][ncol], Real sfilas[nfil], Entero m, Entero n)Inicio Variables

Real s = 0;Para (Entero i = 1 hasta m)

Para (Entero j = 1 hasta n)s = s + matriz[i][j];sfilas[i] = s;

fin_para fin_para fin

void sumarcolumnas(Real matriz[nfil][ncol], Real scolumnas[nfil], Entero m, Entero n)Inicio

Variables Real s = 0;

Para (Entero i = 1 hasta m) Para (Entero j = 1 hasta n)

s = s + matriz[i][j];scolumnas[i] = s;

fin_para fin_parafin

void vervector(Real matriz[nfil][ncol], Real sfilas[], Real scolumnas[], Entero m)

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 15: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Inicio Variables Entero x = 1; Para (i = 1 hasta m )

x = x + 20; Para (j = 1 hasta ncol)

gotoxy(x, i + 10);Imprimir ("la suma de las filas es :" , sfilas[i]);x = 1;

fin_para x = 21; Para (i = 1 hasta ncol)

gotoxy(x, m + 10); Imprimir ("la suma de las columnas es :" , scolumnas[i]); x = x + 8;

fin_para fin

7) Diseñar un algoritmo que permita calcular el promedio de la diagonal principal de una matriz cuadrada de orden n*n Variables Entero nfilcol = 10, n, m; Real matriz[nfilcol][nfilcol]; Caracter rpta;Inicio Repetir Imprimir ("Ingrese el valor n : "); Leer (n); ingreso(matriz,n); Imprimir ("La matriz ingresada es : "); vermatriz(matriz,m,n,8,n*n+3); Imprimir ("El promedio de la matriz es : ", prommatriz(matriz,n)); Imprimir ("Desea continuar (S/N)"); rpta = toupper(getch()); hasta (rpta = = 'S' );fin

Real prommatriz(Real matriz[nfilcol][nfilcol], Entero n) Inicio Variables Real prom = 0;

Enetero i , j; Para (i = hasta n) Para (j = 1 hasta n )

si (i = = j) prom = prom + matriz[i][j];

fin_para fin_para devolver (prom/n); finvoid vermatriz(Real matriz[nfilcol][nfilcol], Entero m, Entero n, Entero x, Entero y)

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 16: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Inicio Variable Entero x2 = x, i, j; Para (i = 1 hasta n ) Para (j = 1 hasta n)

gotoxy(x2,i + y); Imprimir (matriz[i][j]); x2 = x2 + 7; fin_para x2 = x;

fin_para fin

void ingreso(Real matriz[nfilcol][nfilcol], Entero n)Inicio Variables

Entero i, j; Para (i = 1; i <= n; i++)

Para ( j = 1 hasta n) Imprimir ("Ingrese el elemento [", i ,"][“, j ," ] :";

Leer (matriz[i][j]);Fin_para Fin_para

Fin

8) Diseñe un algoritmo que permita obtener los dos elementos más altos de una matriz de orden M*N.

Variables Entero FIL = 50, COL = 50;

Entero matriz[FIL][COL], n, m;

Inicio Imprimir ("Ingrese numero de filas : "); Leer (n); Imprimir ("Ingrese numero de columnas : "); Leer (m); ingreso(matriz,n,m); mayores(matriz,n,m);

fin

void ingreso(Entero matriz[FIL][COL], Entero n, Entero m) Inicio Varaibles

Entero i , j; Para ( i = 0 hasta n)

Para (j = 0 hasta m)Imprimir ("Ingrese el elemento [" , i , "][", j ,"]: ");Leer (matriz[i][j]);

Fin_para Fin_para Fin void mayores(Entero matriz[FIL][COL], Entero n, Entero m)

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 17: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Inicio Variables

Entero mayor1, mayor2, i , j;mayor1=matriz[0][0];mayor2=matriz[0][0];

Para ( i = 0 hasta n )Para ( j = 0 hasta m)

si (matriz[i][j] >= mayor1)mayor2 = mayor1;mayor1 = matriz[i][j];

si_nosi (matriz[i][j] >= mayor2)

mayor2 = matriz[i][j];fin_para

fin_paraImprimir ("El Primer numero mayor es: " ,mayor1);Imprimir ("El Segundo numero mayor es: " ,mayor2);fin

9) Diseñe un algoritmo que permite sumar los números mas pequeños de una tabla dado un valor ingresado por el usuario.Variables

Entero tabla[20][20]; Entero i, j, s = 0 ,n, m, num; Inicio

Imprimir ("Ingrese numero de filas : ");Leer (n);Imprimir ("Ingrese numero de columnas : ");Leer (m);ingreso(tabla, n, m);Imprimir ("Ingrese un numero : ");Leer (num);

sumar(tabla, n, m,num); fin

Entero ingreso(Entero tabla[20][20], Entero n, Entero m)Inicio Variables Entero i, j; Para (i = 1; i <= n; i++) Para (j = 1 hasta m)

Imprimir ("elemento [" , i , "][" , j , "] : "); Leer (tabla[i][j]);

Fin_para Fin_para Fin

Entero sumar(Entero tabla[20][20], Entero n, Entero m, Entero num) Inicio

Variables Entero i, j, suma = 0; Para (i = 1; i <= n; i++)

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 18: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Para (j = 1 hasta m) si(tabla[i][j] < num)

suma = suma + tabla[i][j];fin_para

fin_para Imprimir ("La suma es : " , suma); Fin

10) Diseñar un algoritmo para intercambiar el primer y ultimo elemento de una tabla.Variables

Entero i, j, aux = 0, tabla[20][20], n, m; Inicio

Imprimir ("Ingrese numero de filas de la tabla : ");Leer (n);Imprimir ("Ingrese numero de columnas de la tabla : ");Leer (m);ingreso(tabla,n,m);Imprimir ("Elementos Intercambiados");intercambiar(tabla,n,m);

fin Entero ingreso(Entero tabla[20][20], Entero n, Entero m) Inicio Variables

Entero i, j;Para (i = 1; i <= n; i++)

Para (j = 1 hasta m) Imprimir ("elemento [" , i , "][" , j , "] : ");

Leer (tabla[i][j]); Fin_paraFin_para

Fin

Entero intercambiar(Entero tabla[20][20], Entero n, Entero m) Inicio Variables Entero i, j, aux = 0; Para (i = 1; i <= n; i++) Para (j = 1 hasta m )

si (tabla[i][j] = = tabla[1][1])aux = tabla[i][j]; tabla[i][j] = tabla[n][m]; tabla[n][m] = aux;

fin_siImprimir ("elemento [" , i ,"][" , j , "] : " , tabla[i][j]);

Fin_para Fin_paraFin

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 19: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

3. Manejo de Cadenas de Caracteres.

Una cadena es una serie de caracteres de longitud variable de 0 a 255. Una variable tipo cadena está declarada como Carácter, seguida de la longitud máxima entre corchetes. Una cadena nula es aquella que no tiene caracteres (longitud 0) y se asigna con dos comillas seguidas “.

Ejemplo Caracter nombre[21, direccion[31];

La dimensión de una cadena debe considerar un carácter adicional para controlar internamente el FIN de la cadena (‘\0’), por ejemplo si necesitamos una cadena para almacenar 20 caracteres, la dimensión debe ser 21; si necesitamos una cadena para almacenar 30 caracteres, la dimensión debe ser de 31.

Un arreglo de cadena viene hacer una matriz de puro caracteres. Por ejemplo para representar un arreglo de 25 cadenas para nombres de personas, su declaración sería:

Caracter nombres[25][21]

Representa una matriz de 25 cadenas de 20 caracteres cada uno.

Se puede inicializar una cadena de la siguiente forma:

Caracter cadena[81] = “ ”; ==> cadena vacíaCaracter cadena2[41]

cadena2[0] = ‘\0’; ==> cadena vacía cadena2[0] = 0; ==> cadena vacía

Caracter cadena2[] = {‘ a ’, ‘ e ’,’ i ’,’ o ’,’ u ’};

Se puede inicializar un arreglo de cadenas de la siguiente forma:

Caracter arreglo[4][21] = {“Pedro”, “Silvia”, “RoseMary”, “Sergio”};Caracter arreglo[4][ ] = {“Pedro”, “Silvia”, “RoseMary”, “Sergio”};

Nótese que una cadena de n caracteres requerirá un vector de n + 1 elementos, debido al carácter nulo ‘\0’ que se añade automáticamente al final de la cadena.

Ejemplo : Carácter nulo

Caracter fecha[11] = {‘1’, ’2’, ‘‘ , ’d ’,’ e’, ’ ‘, ‘M ’ ,’ a ’,’ y’, ’o’}

‘1’ ‘2’ ‘ ’ ‘d’ ‘e’ ‘ ‘ ‘M ‘ ‘a’ ‘y’ ‘o’ ‘\0’ 0 1 2 3 4 5 6 7 8 9 10

Almacenar la cadena “Merida” en un vector llamado Ciudad.

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 20: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Nro. de Elementos

Valor del Índice

Elemento del Vector

Carácter de la Cadena

1234567

0123456

Ciudad[0]Ciudad[1]Ciudad[2]Ciudad[3]Ciudad[4]Ciudad[5]Ciudad[6]

‘M’‘e’‘r’‘i’‘d’‘a’‘\0’

‘M’ ‘e’ ‘r ’ ‘i’ ‘d’ ‘a ‘ ‘\0‘

Carácter nulo

3.1. Lectura y Escritura de Cadenas de Caracteres.

- Leer una cadena introducida por teclado.

Leer (palabra);gets (palabra);

- Escribir una cadena en la pantalla.

Imprimir (palabra);Puts ( palabra);

3.2. Funciones para Manipulación de Cadenas de Caracteres.

- Strcmp(cadena1,cadena2); Compara el contenido de las cadenas devolviendo el valor 0 si ambas cadenas son iguales, si la cadena 1 es mayor que la cadena 2 devuelve un valor mayor a 0 y si la cadena 1 es menor a la cadena 2 devuelve un valor menor a 0.

- strcpy(cadena1,cadena2); Asigna el contenido de la cadena 2 en la cadena 1.

- strlen (cadena); Devuelve el número de caracteres que contiene la Cadena dada como parámetro. Si la cadena estuviese vacía devuelve el valor 0.

- strlwr(cadena); Convierte una cadena ingresada en mayúsculas a minúsculas.

- strupr(cadena)Convierte una cadena ingresada en minúsculas a mayúsculas.

- strcat(cadena1,cadena2);Junta o concatena el contenido de la cadena2 con la cadena1, almacenando el resultado en cadena1.

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 21: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

Caracter cadena1[31];

strcpy (cadena1, “Hola”);strcat (cadena1, “Amigos”);imprimir (cadena1); //Hola Amigos

- strrev (cadena);Invierte el contenido de una cadena ingresada.

Caracter cadena[21] = “hola”;

strrev(cadena);puts (cadena); // aloh

Problemas Desarrollados

1) Diseñar un algoritmo que permita comparar dos cadenas y determinar si las cadenas son iguales, si la cadena1 es mayor a la cadena2 o si la cadena2 es mayor a la cadena1.

Variables Caracter cadena1[21] = “hola”;Caracter cadena2[21] = “HOLA”;

Inicio si (strcmp(cadena1,cadena2) = = 0)

puts (“Son iguales”);si_no

si (strcmp(cadena1,cadena2) = = 0) puts (“Cadena 1 es mayor”);

si_no puts(”Cadena2 es mayor”);

fin

2) Diseñar un algoritmo que permita ingresar dos cadenas, se concatenen y luego sea almacenada en un tercera cadena para imprimirla.

Variables Caracter cadena1[31], cadena2[31], cadena3[31];

Inicio Imprimir (Ingrese primera cadena :”);gets(cadena1);Imprimir (Ingrese segunda cadena :”);gets(cadena2); strcat(cadena1,cadena2);strcpy(cadena3,cadena1);Imprimir (“la cadena final es : ”,cadena3);

Fin

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata

Page 22: Vectores y Matrices - Cadenas

UNIVERSIDAD CESAR VALLEJO – PIURAESCUELA DE INGENIERIA DE SISTEMAS

3) Diseñar un algoritmo que permita imprimir la cantidad de elementos que contienen una cadena ingresada.

VariablesCaracter cadena[41];Entero longitud = 0;

Inicio Imprimir (“Ingrese una cadena : ”);gets(cadena);Longitud = strlen(cadena);Imprimir (“La longitud de la cadena es :”, longitud);

Fin

4) Diseñar un algoritmo que haga avanzar en forma horizontal una cadena por la pantalla.

Variables Caracter cadena1[30] = {“Universidad Cesar Vallejo”}; Caracter cadena2[30];

Inicio longitud = strlen(cadena1); y = 1;

gotoxy(y,12); puts(cadena1); para ( i = 1 hasta (79 - longitud))

cadena2 = “ “ + cadena1; gotoxy(y,12); puts(cadena2); para (j = 1 hasta 10000)

y = y + 1; fin_parafin

5) Determinar si una cadena de caracteres es un palíndromo (un palíndromo es un texto que se lee igual hacia la derecha o hacia a la izquierda) ejemplo : radar.

Variables Caracter cadena[20], nuevacadena[20]; Entero poscar;Inicio Imprimir (“Ingrese una cadena :”); gets(cadena); strcpy(nuevacadena, cadena); strrev(cadena); si (strcmp(nuevacadena, cadena) = = 0)

imprimir (“Si es palindromo”);si_no

imprimir (“No es palindromo”);fin

Curso: Algoritmos Docente: Ing. CIP. Elmer Chunga Zapata