Post on 19-Jun-2015
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
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]
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
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
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
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
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
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]
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
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
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
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
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
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
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
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
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
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
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
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
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
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