Está en la página 1de 80

Definición de arreglos.

Un arreglo, también conocidos como array, es un conjunto de valores que


están relacionados por un nombre en común. (Que se almacenan bajo un mismo
nombre).

“Estos también se pueden definir como una colección finita, homogénea y


ordenada de elementos.” (Programacion Basica VB, 2019)

Colección finita: Se determina el número de elementos que formarán parte


de un arreglo.

Colección homogénea: Todos los elementos de un arreglo son del mismo


tipo, ya sea enteros, flotantes, caracter, entre otros.

Colección ordenada: Se debe determinar el orden de los elementos, del


primero al último.

Los arreglos se componen de dos partes principales que son:

Los componentes: hacen referencia a los elementos que forman parte de


los arreglos.

Los índices: son los que permiten acceder a cualquier elemento del arreglo
de manera individual. (Programacion Basica VB, 2019)

Definición de arreglos unidimensionales.


Arreglos unidimensionales, también llamados vectores, son un conjunto de
ubicaciones en memoria relacionadas entre sí ya que todas son del mismo tipo
y están guardadas con el mismo nombre.

Un arreglo que almacene los días de la semana:


"Lunes" "Martes" "Miércoles" "Jueves" "Viernes"

Un arreglo que almacene 10 notas de estudiantes:

7 8 9 10 5 8 4 9 6 2

En pseudocódigo los datos del vector se empiezan a almacenar desde el


índice uno, pero en un lenguaje de programación, los datos se almacenan desde
el índice cero.

En la siguiente imagen se presenta un arreglo (vector) de datos de


tipo int (enteros) llamado Arreglo. Este arreglo consta de 10 elementos.
Cualquier elemento puede ser referenciado con el nombre del vector seguido de
la posición en particular que se desea referenciar expresada entre corchetes. El
primer elemento de un vector es el elemento cero (0). Entonces, el primer
elemento del vector Arreglo se conoce como Arreglo[0], el segundo como
Arreglo[1], y en general, un elemento de orden o del Arreglo se conoce como
Arreglo [n-1]. Donde n (número de elementos). Los nombres de los arreglos
unidimensionales o vectores cumplen con las mismas reglas comunes de los
demás nombres de variables.

Declaración.
En pseudocódigo un arreglo es declarado de la siguiente manera; el usuario
coloca dimensión, el nombre del arreglo y el tamaño, como se muestra en la
siguiente imagen.

En C++ el programador define el tipo de dato de cada elemento y el número


de elementos (tamaño del vector) requerido para cada arreglo unidimensional,
de tal manera que el computador pueda guardar la cantidad necesaria de
memoria.

Sintaxis:

Tipodato nombre[tamaño];

La memoria puede ser reservada para muchos arreglos dentro de una misma
declaración. Los arreglos pueden ser declarados de cualquier tipo de dato
primitivo (int, float, bool, double, etc.).
Inicialización y Asignación
Un arreglo unidimensional puede ser inicializado a través de
sus índices o automáticamente con un ciclo repetitivo que recorra todo el
arreglo unidimensional.

Inicialización directa por índices en un arreglo definido.

Ejemplo: Arreglo de 4 elementos de tipo entero (Ejemplo [4] ;).

PSEUDOCÓDIGO

La sintaxis es la siguiente:

dimension ejemplo [4];

ejemplo [1] <- 1;

ejemplo [2] <- 23;

ejemplo [3] <- 45;

ejemplo [4] <- 169;

DIAGRAMA DE FLUJO

Figura 5.Diagrama de flujo inicialización. Fuente: Pseint-Autoría propia

CODIFICACION EN C++
La sintaxis es la siguiente:

Ejemplo [4];

Ejemplo [0]=1;

Ejemplo [1]=23;

Ejemplo [2]=45;

Ejemplo [3]=169;

Inicialización automática en un arreglo definido

Ejemplo: Arreglo de 1 de 6 elementos de tipo float (Ejemplo1 [6];) la sintaxis es


la siguiente:

PSEUDOCODIGO

definir i, ejemplo1 como entero;

dimension ejemplo1[6];

Para i <- 1 hasta 6 Con Paso 1 Hacer

Ejemplo1 <- i;

FinPara

DIAGRAMA DE FLUJO

Figura 6. Diagrama de flujo. Fuente: Pseint-Autoría propia

CODIFICACION EN C++

#include < iostream>


using namespace std;

int main() {

int i;

int Ejemplo1[6];

for (int i=0; i<6; i++)

Ejemplo1 [ i ]=i;

} return 0;

De la misma manera que se ha inicializado el arreglo como se muestra en


los ejemplos, se asigna valores o datos al respectivo Arreglo Unidimensional.

Lectura y Escritura.
Escritura en pseudocódigo:

Figura 7. Escritura. Fuente: Pseint-Autoría propia

Lectura en pseudocódigo:

Figura 8. Lectura. Fuente: Pseint-Autoría propia

Escritura en diagrama de flujos:


Figura 9. Escritura en diagrama de flujo. Fuente: Pseint-Autoría propia

Lectura en diagrama de flujos:

Figura 10. Lectura en diagrama de flujo. Fuente: Pseint-Autoría propia

Escritura en C++:

Figura 11. Escritura en C++. Fuente: Pseint-Autoría propia

Lectura en C++:

Figura 12. Lectura en C++. Fuente: Pseint-Autoría propia

Ejemplo 1
Elaborar un programa en pseudocódigo, diagrama de flujo (utilizando la
herramienta pseint) y su respectiva codificación en lenguaje C++ (usando el
editor CodeBlocks) que pida al usuario el ingreso de tres números, y después la
aplicación deberá mostrar en pantalla los números digitados.

PSEUDOCÓDIGO

Proceso arreglos

definir i como entero;

definir num como entero;

dimension num[3];

para i<-1 Hasta 3 Con Paso 1 Hacer //i recorrerá desde 1 hasta 3

escribir "inserte un numero ",i,":";//la i recorrerá hasta llegar a 3

leer num[i]; //los numeros digitados serán almacenados de

//manera ordenada de 1 a 3

FinPara

escribir "";//se le da un espacio para que en la ejecución no esté unida

escribir "";

para i<-1 hasta 3 con paso 1 hacer// ciclo repetitivo

escribir "El numero ",i," fue: ", num[i]; //los numeros aparecerán
en la pantalla

// conforme fue
digitado

FinPara

FinProceso

DIAGRAMA DE FLUJO:
Figura 13. Diagrama de flujo ejemplo. Fuente: Pseint-Autoría propia

CODIFICACION EN C++

#include< iostream>
using namespace std;
int main() {
int i;
int num[3];
for (i=1;i<=3;i++) {
cout << "inserte un numero " << i << ":" << endl;
cin >> num[i-1];
}
cout << endl; //salto de línea
cout << endl;
for (i=1;i<=3;i++) {
cout << "El numero " << i << " fue: " << num[i-1] << endl;
}
return 0;
}

Autoevaluación
1. ¿Cuáles son los componentes de un arreglo?

Nombre y tipo

Elemento e índice

Tamaño y tipo

2. ¿Qué se necesita para definir un vector en C++?

Tipo de dato, nombre, tamaño

Tipos de datos, nombres, tamaño

Ninguna de las anteriores

3. ¿Qué tipo de ciclo se usa para recorrer un Arreglo?

While

For y while

For

4. ¿De qué maneras se puede inicializar un Arreglo?

Directa o inversa

Sistemática

Índices o automática

5. Crear un arreglo en c++ de tipo entero llamado notas, y con un tamaño de 30


elementos:
Int notas(30);

Int notas[30];

Int notas{30};

6. ¿En pseudocódigo desde qué casilla se almacenan los datos del vector?

Última

Casilla cero

Primera

7. Definir un arreglo en pseudocódigo de tipo caracter llamado vector con diez


espacios

definir vector como caracter;

dimensión nombres [10];

definir vector como entero;

dimensión nombres[10];

char vector[10];

8. ¿En C++ desde qué casilla se almacenan los datos del vector?

Casilla cero

última

primera

9. ¿Qué es un Arreglo o Array?

Conjunto de valores relacionados por un nombre en común

Cadena de caracteres que almacenan valores mixtos

Conjunto de valores enteros

10. Seleccione una característica de un arreglo


Posee una colección homogénea

Se puede declarar de manera desordenada

Cadena de caracteres infinita

9.1. Introducción
Partiendo de un vector, el cual se considera como una matriz fila, se concluye
entonces que un arreglo bidimensional es una variable única con dos subíndices:
el primero especifica las filas y el otro las columnas y deben estar separados por
corchetes. Por ello se los conoce también con el nombre de matrices.

En los arreglos bidimensionales el número total de elementos es igual al


producto del número de filas por el número de columnas. Entonces una matriz
de N filas y M columnas se dice que tiene dimensión N, M y la forma de definir
una matriz es indicando el nombre, la cantidad de filas y la cantidad de columnas,
por ejemplo: A[N][M]

9.2. Estructura y declaración de un arreglo bidimensional


La estructura de una matriz está dada por:

PSEUDOCODIGO

Tipo Nombre_Matriz[Filas,Columnas];

DIAGRAMA DE FLUJO

Figura 1. Diagrama de flujo: Estructura y declaración de un arreglo.Fuente: Autoria propia.

CODIFICACION EN C++:

Tipo Nombre_Matriz[Filas][Columnas];

9.3. Inicialización y asignación


Se puede hacer ingresando los datos directamente en la matriz, o mediante
asignación de variables e ingreso de las mismas en consola como se muestra a
continuación:

PSEUDOCODIGO

Dimension num1[2,2];

num1[1,1]<-1;

num1[1,2]<-2;

num1[2,1]<-3;
num1[2,2]<-4;

DIAGRAMA DE FLUJO

Figura 2. Diagrama de flujo: Inicialización y asignación.Fuente: Autoría Propia

CODIFICACION EN C++:

int num1[2][2] = {{1,2},{3,4}}; //Inicialización y asignación.

O de esta manera:

int m[2][2]; //Creación de la matriz.

m[1][1]= 1; //Asignación de valores.

m[1][2]= 2;

m[2][1]= 3;

m[2][2]= 4;

9.4. Lectura
Para la lectura de datos se utiliza 2 estructuras “PARA” anidadas, la primera para
recorrer las filas y la segunda recorre las columnas.

A continuación, tenemos un ejemplo de cómo ingresar por pantalla los valores


que se asignan a una matriz ordenada por filas y columnas.

PSEUDOCODIGO

Para i<-1 hasta 2 con paso 1 hacer

Para j<-1 hasta 2 con paso 1 hacer

escribir "Ingrese el valor para la fila ",i," y columna ",,j," : ";

leer num1[i,j];
FinPara

FinPara

DIAGRAMA DE FLUJO

Figura 3. Diagrama de flujo: Lectura.Fuente: Autoría Propia

CODIFICACION EN C++:

int filas=2,columnas=2;

int matriz[filas][columnas]; //Creación de la matriz

cout<<"Introduzca los valores de la matriz"<<endl;< span=""></endl;<>

for(int i=0;i<filas;i++){< span=""></filas;i++){<>

for(int j=0;j<columnas;j++){< span=""></columnas;j++){<>

cout<<"Posicion ["<<i+1<<"]"<<"["<<j+1<<"]: ";<=""


span=""></i+1<<"]"<<"["<<j+1<<"]:>

cin>>matriz[i][j]; //asignación valores en posición[i][j]

9.5. Escritura
Para la escritura de datos se utiliza 2 estructuras “PARA” anidadas, la primera
para recorrer las filas y la segunda recorrer las columnas.

A continuación, tenemos un ejemplo de cómo se muestra en pantalla el


contenido de una matriz ordenada por filas y columnas:

PSEUDOCODIGO
Escribir 'Su matriz es: ';

Para i<-1 Hasta 2 con paso 1 Hacer

Para j<-1 Hasta 2 con paso 1 Hacer

Escribir num1[i,j] Sin Saltar;

FinPara

Escribir "";

FinPara

DIAGRAMA DE FLUJO

Figura 4.Diagrama de flujo:Lectura.Fuente: Autoría Propia

CODIFICACION EN C++:

for(int i=0;i<filas;i++){< span=""></filas;i++){<>

for(int j=0;j<columnas;j++){< span=""></columnas;j++){<>

cout<<matriz[i][j];< span=""></matriz[i][j];<>

cout<<" ";

cout<<"\n";

Acceso a un arreglo bidimensional por fila


Se puede acceder a una matriz por filas o columnas para leer, escribir o modificar
los valores de los elementos que pertenecen a la misma.

PSEUDOCODIGO

Para i<-1 Hasta 2 con paso 1 Hacer


Para j<-1 Hasta 2 con paso 1 Hacer

Escribir num1[i,j] Sin Saltar;

FinPara

FinPara

DIAGRAMA DE FLUJO

Figura 5.Diagrama de flujo: Acceso a un arreglo bidimensional por filas.Fuente: Autoría Propia

CODIFICACION EN C++:

for(i=0; i<filas; i++)<span="" style="font-size: 12pt; font-family: arial, helvetica,


sans-serif;"> {</filas;>
for(f=0; f<columnas; f++){<span="" style="font-size: 12pt; font-family:
arial, helvetica, sans-serif;"> </columnas;>

cout<<num1[i,j];
}</num1[i,j];

9.7. Acceso a un arreglo bidimensional por columnas


PSEUDOCODIGO

Para j<-1 Hasta 2 con paso 1 Hacer

Para i<-1 Hasta 2 con paso 1 Hacer


Escribir num1[i,j] Sin Saltar;

FinPara

FinPara

DIAGRAMA DE FLUJO

Figura 6.Diagrama de flujo:Acceso a un arreglo bidimensional por columnas. Autoría Propia

C++:

for(j=0; j<columnas; j++)<span="" style="font-size: 12pt; font-family: arial,


helvetica, sans-serif;">{</columnas;>
for(i=0; i<filas; i++){<span="" style="font-size: 12pt; font-family: arial,
helvetica, sans-serif;"> </filas;>

cout<<num1[i,j];< span=""></num1[i,j];<>

9.8. Mostrar elementos de un arreglo bidimensional


PSEUDOCODIGO

Escribir 'Su matriz es: ';

Para i<-1 Hasta 2 con paso 1 Hacer


Para j<-1 Hasta 2 con paso 1 Hacer

Escribir num1[i,j] Sin Saltar;

FinPara

Escribir "";

FinPara

DIAGRAMA DE FLUJO

Figura 7. Diagrama de flujo: Mostrar elementos de un arreglo bidimensional. Autoría Propia

CODIFICACION EN C++:

cout<<”Los datos de la matriz ingresada son”<<endl;< span=""></endl;<>

for(int i=0;i<filas;i++){< span=""></filas;i++){<>

for(int j=0;j<columnas;j++){< span=""></columnas;j++){<>

cout<<matriz[i][j];< span=""></matriz[i][j];<>

cout<<" ";

cout<<"\n";

9.9. Ejemplo 1
Diseñar un algoritmo en pseudocódigo con su respectivo diagrama de flujo y su
codificación en lenguaje C++ para generar una matriz 3x2 que me permita
ingresar datos a cada una de sus celdas por teclado y luego mostrar los
elementos de la matriz.
PSEUDOCODIGO

Proceso Arreglo_bidimensional

Definir num1,i,j Como entero;

Dimension num1[3,2];

Para i<-1 hasta 3 con paso 1 hacer

Para j<-1 hasta 2 con paso 1 hacer

escribir "Ingrese el valor para la fila ",i," y columna",,j,":";

leer num1[i,j];

FinPara

FinPara

Escribir "Su matriz es: ";

Para i<-1 Hasta 3 con paso 1 Hacer

Para j<-1 Hasta 2 con paso 1 Hacer

Escribir num1[i,j] Sin Saltar;

FinPara

Escribir "";

FinPara

FinProceso

La matriz se mostrará de la siguiente forma:

[3 filas, 2columnas] 0 1
0 xx xx
1 xx xx
2 xx xx

DIAGRAMA DE FLUJO
Figura 8. Diagrama de flujo: Ejemplo 1. Fuente: Autoría Propia

CODIFICACION EN C++:

#include

using namespace std;

int main() {

int i;

int j;

int num1[3][2];

for(i=0;i<3;i++){

for(j=0;j<2;j++){

cout<<"Ingrese el valor para la fila"<<i<<"y columna"<<j<<"=""


:"<<endl;<="" span=""></i<<"y>

cin>>num1[i][j];

cout<<"Su matriz es: "<<endl;< span=""></endl;<>

for(i=0;i<3;i++) {

for(j=0;j<2;j++){

cout<<num1[i][j];< span=""></num1[i][j];<>
}

cout<<""<<endl;< span=""></endl;<>

return 0;

Explicación:

Se debe plantear todas las variables a usar: los iteradores i y j y la matriz a la


cual se le asigna un tamaño.

Se tiene 2 estructuras “for” anidadas, una para con el iterador i, que será la
variable para las filas de la matriz, y otro para el iterador j, que será la variable
para las columnas, seguidos de un “cout” que indica la posición en la matriz
donde se guardarán los datos. Con eso se completa la parte del guardado de
datos dentro de la matriz. Para mostrar el contenido de la matriz por pantalla se
usan 2 ciclos “for” seguidos por un “cout” y la variable de la matriz.(num1[i][j]).

Autoevaluación
1.Como sabemos cuántos elementos en total tiene un arreglo bidimensional?

A. Contando el número de filas.

B. Multiplicando el número de filas por el número de columnas.

C. Contando el número de columnas.

2. Cuál es la estructura de un arreglo bidimensional en C++?

A. tipo nombre[filas,columnas];

B. tipo nombre[filas][columnas];

C. tipo nombre{filas,columnas};

3. Como asignamos un valor a un espacio de memoria dentro del arreglo en


pseudocodigo?
A. Nombramos el arreglo, seguido por el espacio de memoria entre
corchetes y separados por coma y el valor asignado después de los símbolos
“<-“.

B. Nombramos el arreglo, seguido por el espacio de memoria y el valor


asignado entre llaves.

C. Nombramos el arreglo, con el espacio de memoria entre llaves y el valor


asignado después de los símbolos “<-“.

4. Se puede asignar el tamaño a una matriz mediante la asignación de_____.

A. valores.

B. caracteres

C. variables.

5. cuantas funciones “for” usamos para lectura y escritura de arreglos


bidimensionales?

A. Una para leer todo el arreglo.

B. Dos, una para las filas y otra para las columnas.

C. Tres, una para las filas, otra para las columnas y otra para el ingreso de
variables.

6. Un solo arreglo bidimensional “A” puede tener distintos tipos de dato


(numero, carácter, flotantes).

A. Verdadero.

B. Falso.

7.De qué tipo de dato se pueden declarar los arreglos bidimensionales?

A. Primitivos.

B. Estructurados.

C. Todas la anteriores.

D. Ninguna de las anteriores.


8. ¿Cuál es el error en el siguiente fragmento de código?

1 int main() {

2 int i;

3 int j;

4 int num1[3],[2];

5 for(i=0;i<3;i++){

6 for(j=0;j<2;j++){

7 cout<<"Ingrese el valor para la fila"<<i<<"y


columna"<<j<<":"<<endl;

8 cin>>num1[i][j];

9 }

10 }

A. Los “for” tienen el rango incorrecto.

B. Al inicializar la matriz, no debería tener una coma entre sus corchetes.

C. El “cin” no esta cogiendo el dato.

9. Cuantos iteradores (ejemplo i y j) empleamos al trabajar con arreglos


bidimensionales?

A. Uno, pues se necesita una sola dimensión.

B. Dos, pues se emplean 2 dimensiones.

C. Tres, pues se emplean 3 dimensiones.

10. Como cambiamos el orden o forma de una matriz?

A. Cambiamos el orden de escritura de los iteradores i y j con sus


respectivos rangos.

B. Cambiamos el orden de las funciones “for”.

C. Escribimos de forma distinta en consola.


10.1 Introducción
La mayoría de técnicas más habituales y usadas para el procesamiento de
datos, es la clasificación y la ordenación de los mismos. Ordenar es el proceso
de reorganizar todo un conjunto de datos en una secuencia específica o
planteada con el fin de agilitar la búsqueda de uno o más elementos
pertenecientes a un conjunto.

Figura 1. Ordenamiento de datos, Fuente: http://ordendata.blogspot.com/


Ordenación de Datos
La Ordenación o clasificación es una operación que dispone de un conjunto de
datos establecido por un orden de por medio de uno de sus campos de
elementos del conjunto.

Figura 2. Ordenamiento de Datos. Fuente: Wikipedia Ordenamiento Burbuja.

10.3 Tipos de ordenación


Hay varias maneras de clasificar los datos y para ello se necesita una
clasificación o secuencia, la cual es el proceso de organizar específicamente los
datos que uno desea, ya sea en forma ascendente o descendente, para datos
numéricos, alfabéticos o caracteres.

Figura 3. Tipos de ordenamiento. Fuente: https://juncotic.com/ordenamiento-por-insercion-


algoritmos-de-ordenamiento/
10.3.1 Ordenamiento por el método burbuja
Este método se basa en la búsqueda de todo el arreglo avanzando y
comparando dos elementos, de esta manera, cada que encuentre elementos que
no estén en el lugar apropiado, los ordenará.

Este algoritmo se llama así por la manera con la que los elementos ascienden
por la lista durante los intercambios, como si fueran unas pequeñas “burbujas”,
ya que en un vaso de gaseosa las burbujas que son más livianas que el líquido
suben a la superficie, y de igual manera, todos los elementos de menor peso
subirán. Además, a este tipo de ordenación se lo conoce como método de
intercambio directo; ya que solo usa comparaciones para ordenar elementos y
por ende es el más simple de usar, sin embargo, es el que más intercambios
realiza.

PSEUDOCODIGO

Proceso Burbuja

Definir array,i,j,aux Como Entero;

Dimension array[5];

//Inicializamos el arreglo con valores

array[1]<-2;

array[2]<-3;

array[3]<-1;

array[4]<-5;

array[5]<-4;

//Metodo de ordenamiento Burbuja

Para i<-1 Hasta 5 Con Paso 1 Hacer

Para j<-1 Hasta 4 Con Paso 1 Hacer

Si array[j] < array[j+1] Entonces

//Se intercambian valores

aux<-array[j];

array[j]<-array[j+1];

array[j+1]<-aux;
FinSi

FinPara

FinPara

//Impresion del arreglo ordenado

Escribir "Arreglo ordenado Descendentemente";

Para i<-1 Hasta 5 Con Paso 1 Hacer

Escribir Sin Saltar array[i]," ";

FinPara

FinProceso

Consiste en comparar dos elementos sucesivos del arreglo para


intercambiarlos dependiendo de la forma de ordenamiento, sea ascendente o
descendente.

El proceso de este ordenamiento es:

Durante el primer recorrido se compara Array[1] y Array[2], intercambiándose


si no están ordenados; esto se repite para los elementos Array[2] y Array[3],
Array[3] y Array[4], y así sucesivamente con cada elemento restante.

En la segunda pasada, se realiza el mismo proceso y así sucesivamente hasta


cumplir n-1 pasadas, porque en este ordenamiento el primer elemento se ubicará
en la posición correcta 1 en la pasada n-1. Después de la primera pasada el
elemento con el mayor valor quedará situado en el enésimo lugar, en las
siguientes pasadas los elementos con los siguientes valores mayores se siguen
ubicando en las posiciones n-1, n-2, n-3,.., 1, sucesivamente.

Codificación en C++:
#include

#include

using namespace std;

int main() {

int n=5;// Numero de elementos del vector

int array[n];
int i,j,aux;

// Metodo de ordenamiento Burbuja

for (i=1;i<=n;i++) {

for (j=1;j<=n-1;j++) {

if (array[j-1]<array[j]) {<="" span=""></array[j])>

// Se intercambian valores

aux = array[j-1];

array[j-1] = array[j];

array[j] = aux;

// Impresion del arreglo ordenado

cout << "Arreglo ordenado Descendentemente" << endl;

for (i=1;i<=5;i++) {

cout << array[i-1] << " ";

getch();

return 0;

<
10.3.2 Ordenamiento por el método de inserción
Es una manera muy natural de ordenar para un ser humano, y puede usarse
fácilmente para ordenar un mazo de cartas numeradas en forma arbitraria.
Requiere O(n²) operaciones para ordenar una lista de n elementos.

Inicialmente se tiene un solo elemento, que obviamente es un conjunto


ordenado. Después, cuando hay k elementos ordenados de menor a mayor, se
toma el elemento k+1 y se compara con todos los elementos ya ordenados,
deteniéndose cuando se encuentra un elemento menor (todos los elementos
mayores han sido desplazados una posición a la derecha). En este punto se
inserta el elemento k+1 debiendo desplazarse los demás elementos.

PSEUDOCODIGO

Proceso Insercion

Dimension vector[5];

Definir vector Como Entero;

Definir i,j,aux Como Enteros;

Escribir "ordenar los numeros de un vector .";

Para i<-1 Hasta 5 Con Paso 1 Hacer

Escribir "ingrese el siguiente numero: ";

Leer vector[i];

finPara

Para i<-1 Hasta 5 Con Paso 1 Hacer

aux<-vector[i];

j<-i-1;

Mientras (j>=1) & (vector[j]>aux) Hacer

vector[j+1]<-vector[j];

j<-j-1;

FinMientras

vector[j+1]<-aux;

FinPara

Para i<-1 Hasta 5 Hacer


Escribir "posicion ",i," es: ",vector[i];

FinPara

FinProceso

CODIFICACION EN C++:

#include

#include

using namespace std;

int main() {

int i,j,aux;

int vector[5];

cout << "ordenar los numeros de un vector ." << endl;

for (i=1;i<=5;i++) {

cout << "ingrese el siguiente numero: " << endl;

cin >> vector[i-1];

for (i=1;i<=5;i++) {

aux = vector[i-1];

j = i-1;

while ((j>=1) && (vector[j-1]>aux)) {

vector[j] = vector[j-1];

j = j-1;

vector[j] = aux;

for (i=1;i<=5;i++) {
cout << "posicion " << i << " es: " << vector[i-1] << endl;

return 0;

10.3.3 Ordenamiento por selección.


La idea del método de selección es la siguiente: en la pasada i-esima
seleccionamos el elemento menor entre A[i], . . . , A[n] y lo intercambiamos con
el A[i]. Como resultado, luego de i pasadas los menores i elementos ocuparán
las posiciones A[1], . . . , A[i] y además los elementos de dichas posiciones
estarán ordenados.

Este es el algoritmo de ordenamiento de más rápido funcionamiento debido


al método que emplea para ordenar. Este consiste en seleccionar un elemento
del arreglo, al cual se lo llamará pivote, el cual es luego comparado con los
demás elementos del arreglo mediante 2 contadores (uno de posición inicial y
otro final) para su respectivo ordenamiento.

Es el más rápido pues a diferencia de los otros dos, este no analiza las celdas
de memoria ya ordenadas, sino que una vez ya analizados y ordenados ciertos
elementos, estos permanecen estáticos en sus posiciones, que, al ya estar
ordenadas, el algoritmo deja de contarlas como una zona activa de análisis y
solo procede a analizar los elementos restantes.

Pseudocódigo

Proceso Ordenamiento_seleccion

Definir i,j,aux,TAM,minimo,vector Como Enteros;

//Definicion del arreglo

Dimension vector[5];

TAM<-5;

Escribir "ordenar los numeros de un vector .";

//Ingreso de datos

Para i<-1 Hasta TAM Con Paso 1 Hacer

Escribir "ingrese el siguiente numero: ";

Leer vector[i];

finPara
//Ordenamiento por seleccion

Para i<-1 Hasta TAM-1 Con Paso 1 Hacer

minimo<-vector[i];

aux<-i;

Para j<-i+1 Hasta TAM Con Paso 1 Hacer

//validacion si el numero es menor

Si vector[j]< minimo Entonces

minimo <- vector[j];

aux<-j;

FinSi

FinPara

//asignacion de los nuevos valores

vector[aux]<-vector[i];

vector[i]<-minimo;

FinPara

//Impresion del contenido de valores

Para i<-1 Hasta TAM Hacer

Escribir "posicion ",i," es: ",vector[i];

FinPara

FinProceso

CODIFICACION EN C++:

#include

using namespace std;

int main() {
int aux, i, j, minimo, tam;

int vector[5];

// Definicion del arreglo

tam = 5;

cout << "ordenar los numeros de un vector ." << endl;

// Ingreso de datos

for (i=1;i<=tam;i++) {

cout << "ingrese el siguiente numero: " << endl;

cin >> vector[i-1];

// Ordenamiento por seleccion

for (i=1;i<=tam-1;i++) {

minimo = vector[i-1];

aux = i;

for (j=i+1;j<=tam;j++) {

// validacion si el numero es menor

if (vector[j-1]<minimo) {<="" span=""></minimo)>

minimo = vector[j-1];

aux = j;

// asignacion de los nuevos valores

vector[aux-1] = vector[i-1];

vector[i-1] = minimo;

// Impresion del contenido de valores

for (i=1;i<=tam;i++) {
cout << "posicion " << i << " es: " << vector[i-1] << endl;

return 0;

10.3.4 Otros tipos de ordenamiento


Existen otros tipos de ordenamiento que son más complejos, pero es necesario
mencionarlos:

1. Merge sort: Divide un arreglo de n elementos a n arreglos de dimensión


1(Cada arreglo tendrá un elemento).
2. Shell sort: Permite el intercambio de valores lejanos, además es una
variación del ordenamiento por inserción.
3. Heap sort: Es similar al ordenamiento de selección, done primero
encontramos el elemento máximo y lo colocamos al final.
4. Tim sort: Basado en la ordenación por inserción y por fusión.

5. 10.4 Búsqueda de datos


El proceso de hallar un elemento específico dentro de un arreglo se lo
conoce como búsqueda. Es una secuencia de pasos para encontrar un
elemento en una lista de datos determinada, dependiendo de los algoritmos
de búsqueda que cambian con frecuencia los métodos para encontrar estos
datos.

Figura 4. Búsqueda de datos. http://www.dcerca.es/oferta-formativa/cursos-administracion-


y-gestion-de-empresas/sistemas-de-archivo-y-clasificacion-de-documentos/
10.4.1 Búsqueda binaria
Para este método de búsqueda se asume que todos los elementos del arreglo
han sido previamente ordenados en forma ascendente o descendente, para lo
cual puede usarse cualquiera de los algoritmos de ordenamiento.

El método de búsqueda binaria consiste en localizar aproximadamente la


posición media del arreglo y examinar el valor ahí encontrado, si este valor es
igual al argumento, su posición ha sido determinada y finaliza la búsqueda. Si
ese valor es mayor que el argumento, se lo busca en la primera mitad del arreglo;
si por el contrario, el valor es menor que el del argumento, se prosigue su
búsqueda en la segunda mitad del arreglo. Continuando con este procedimiento
en cualquiera de las dos mitades correspondientes, hasta haber encontrado el
argumento, o bien, el intervalo de búsqueda haya quedado vacío, lo que significa
que el argumento no se encuentra en el arreglo.

Pseudocódigo:
Proceso Busqueda_Lineal

Definir n,i,array,elemento,inf,sup,cen Como Entero;

Definir flag como logico;

n<-5;//Tamanio del vector

inf<-1;

sup<-n;

Dimension array[n];

//Ingreso de datos

Para i<-1 Hasta n Con Paso 1 Hacer

Escribir "array[",i,"]:";

Leer array[i];

FinPara

Escribir "Ingrese el elemento a Buscar";

Leer elemento;

Repetir

cen<-trunc((inf+sup)/2);

Si array[cen]
inf<-cen+1;

SiNo

sup<-cen-1;

FinSi

Hasta Que inf>sup o array[cen]=elemento;

Si array[cen]= elemento Entonces

Escribir elemento," SE ENCUENTRA EN LA POSICION ",cen;

SiNo

Escribir elemento," NO SE ENCUENTRA EN EL VECTOR ";

FinSi

FinProceso

Codificación en C++:
#include < iostream >

#include < math.h >

using namespace std;

int main() {

int cen,elemento,i,n,inf,sup;

bool flag;

// Tamanio del vector

n = 5;

inf = 1;

sup = n;

int array[n];

// Ingreso de datos

for (i=1;i<=n;i++) {
cout << "Array[" << i << "]:" << endl;

cin >> array[i-1];

cout << "Ingrese el elemento a Buscar" << endl;

cin >> elemento;

do {

cen = int((inf+sup)/2);

if (array[cen-1]<elemento) {<="" span=""></elemento)>

inf = cen+1;

} else {

sup = cen-1;

} while (!(inf>sup || array[cen-1]==elemento));

if (array[cen-1]==elemento) {

cout << elemento << " SE ENCUENTRA EN LA POSICION " <<


cen << endl;

} else {

cout << elemento << " NO SE ENCUENTRA EN EL VECTOR "


<< endl;

return 0;

}
10.4.2 Búsqueda secuencial
Este tipo de búsqueda secuencial, consiste en usar una “clave”, después
recorrer todo el arreglo buscando la “clave”, para que de esta manera al
encontrarla nos despliegue un mensaje o a su vez realice alguna acción
específica.

El problema con este algoritmo es el tiempo, si el elemento que estamos


buscando no está cerca, la búsqueda tardará demasiado.

Ejemplo:

El siguiente es un ejemplo de búsqueda secuencial.

Pseudocódigo:
Proceso Busqueda_Lineal

Definir n,i,array,elemento Como Entero;

Definir flag como logico;

n<-5;//Tamanio del vector

Dimension array[n];

//Ingreso de datos

Para i<-1 Hasta n Con Paso 1 Hacer

Escribir "Array[",i,"]:";

Leer array[i];

FinPara

Escribir "Ingrese el elemento a Buscar";

Leer elemento;

i<-1;

flag<-falso;

Mientras (i<=n) Y NO flag Hacer

Si elemento=array[i] Entonces
flag<-Verdadero;

SiNo

i<-i+1;

FinSi

FinMientras

SI flag ENTONCES

Escribir elemento," SE ENCUENTRA EN LA POSICION ",i;

SiNo

Escribir elemento," NO SE ENCUENTRA EN EL VECTOR";

FINSI

FinProceso

Codificación en C++:
#include

#define N 5 //Constante para el tamanio del vector

using namespace std;

int main() {

int array[N];

int elemento,i;

bool flag;

// Ingreso de datos

for (i=1;i<=N;i++) {

cout << "Array[" << i << "]:" << endl;

cin >> array[i-1];


}

cout << "Ingrese el elemento a Buscar" << endl;

cin >> elemento;

i = 1;

flag = false;

while ((i<=n) && !flag) {

if (elemento==array[i-1]) {

flag = true;

} else {

i = i+1;

if (flag) {

cout << elemento << " SE ENCUENTRA EN LA POSICION " <<


i << endl;

} else {

cout << elemento << " NO SE ENCUENTRA EN EL VECTOR"


<< endl;

return 0;

}
Autoevaluación
1.-¿Cual es una de las opciones más comunes y usadas en el procesamiento
de datos?

A.-Ordenación de datos.

B.-Diagramas.

C.-Resúmenes.

2.-¿En que consiste ordenar?

A.-Desordenar elementos.

B.-Reorganizar un conjunto de elementos.

C.-Cambiar variables.

3.-¿Cuáles son los tipos de ordenación simple más utilizados?

A.-Burbuja, inserción, Quicksort.

B.-Burbuja, inserción, selección.

C.-Inserción, Quicksort, ordenación.

4.-¿La forma en la que se vaya ordenar y el método a usar depende del


programador/usuario?

A.-Verdadero.

B.-Falso.

5.-¿En que consiste el método burbuja?

A.-Cambiar el orden entre elementos de 2 arreglos.

B.-Intercambiar elementos menos pesados hacia la izquierda.

C.-Comparar elementos adyacentes e intercambiarlos entre sí.

6.-¿Con que otro nombre se le conoce al método burbuja?

A.-Método de intercambio directo.


B.-Método de inserción.

C.-Quicksort.

7.-¿En que consiste el método de inserción?

A.-Analizar y comparar cada elemento con su elemento izquierdo

B.-Reemplazar sucesivamente.

C.-Comparar y desplazar sucesivamente.

8.-¿En que se basa el método de Selección?

A.-Seleccionar un pivote y compararlo con los demás elementos del


arreglo.

B.-Reemplazar sucesivamente los elementos del arreglo

C.-Intercambiar directamente.

9.-¿En que consiste la búsqueda secuencial?

A.-Buscar en orden secuencial.

B.-Recorrer un arreglo secuencialmente para encontrar el elemento clave.

C.-Identificar elementos ordenadamente.

10.-¿Desde donde empieza la búsqueda binaria?

A.-desde el medio.

B.-desde el inicio.

C.-desde el final.
11.1. Funciones
Las funciones en los lenguajes de programación permiten que la codificación sea
más simple y que fragmentos de código puedan ser reutilizados.

Figura 1. Ejemplo de función en PSeInt. Fuente: Autoría propia

11.1.1. ¿Qué son? ¿Para qué sirven?


Una función realiza una tarea específica que puede retornar un valor. Está
formada por un conjunto de líneas de código.

Las funciones se utilizan para sub-dividir varias tareas complejas en funciones


simples y de esa manera reducir código. Cuando una función es llamada pasa el
control a la misma, al terminar de realizar la tarea asignada el control regresa al
punto de donde se llamó la función.

Es decir, son un grupo de sentencias bajo el mismo nombre que realizan una
tarea específica.

Ejemplo:

Funcion resultado <- Maximo( n1, n2)

Si n1 > n2 Entonces

resultado <- n1

Sino

resultado <- n2
FinSi

FinFuncion

Algoritmo Funciones01

Escribir "El máximo de 5 y 12 es:"

Escribir Maximo(5,12)

Escribir "El máximo de 25 y 12 es:"

Escribir Maximo(25,12)

FinAlgoritmo

Este programa crea una función que calcula cuál es el mayor de los dos números
que se le indican como parámetro, y la usa dos veces, para mostrar el máximo
de dos valores prefijados.

11.1.2. Beneficios
Las funciones son esenciales para un programador porque permite escribir
un código ordenado y eficiente. Al implementar las funciones en los programas
se reduce el tiempo de codificación y el tiempo de depuración, acortando el
tiempo total de desarrollo.

Beneficios:

• Aislar mejor los problemas.


• Escribir programas correctos más rápido.
• Producir programas más fáciles de mantener.
• Reducción del tiempo de codificación.
• Reducción del tiempo de depuración

Al repetir un mismo código en el programa en diferentes lugares será difícil


realizar una modificación ya que se deberá realizar ese cambio en todas las
líneas de código donde se repita. Por lo tanto esto hace que en el programa sea
difícil encontrar el problema y eliminarlo o modificarlo de todos los lugares.

• Efectos de mantenimiento

Al realizar el mantenimiento tenemos efectos los cuales pueden ser buenos


como malos, si el programador que escribió el código, usó procedimientos y
funciones en exceso, el programa será difícil de comprender y por ende se
necesita más tiempo para arreglar.
11.1.3. Conceptos

• Función: Conjunto de sentencias que permiten resolver una tarea


específica.
• Llamada de una función: Ejecuta el conjunto de sentencias de una
función.
• Retorno: Una vez “llamada” la función, esta hace su tarea, y retorna al
punto donde fue llamada.

11.1.4. ¿Cómo se declaran funciones?


De la misma forma que las variables se declaran, las funciones cumplen el
mismo procedimiento:

La declaración de una función generalmente es especificada por un nombre


único en el ámbito, el cual se debe identificar y distinguir de otras.

FUNCIONES EN PSEUDOCODIGO

La forma correcta de declarar una función mediante la herramienta PSeInt es


la siguiente:

Figura 2. Declaración de funciones en PSeInt.Fuente: Autoría propia

Cabe recalcar que la herramienta PSeInt ubica las funciones creadas, arriba
de la Función principal.

Pasos para usar funciones

1. Las funciones en pseudocódigo se implementan y se diseñan en la misma


línea.
2. Se procede a llamar a la función.

EJEMPLO 1.1 (Suma de dos números enteros con retorno)

Figura 3. Suma de dos números enteros con retorno.Fuente: Autoría propia


FUNCIONES EN CODIFICACION C++

Para declarar una función en C++ debe tener la siguiente estructura:

tipoDatoRetorno nombreFuncion (lista parámetros);

tipo de dato de retorno: Tipo de dato del valor que la función retornara al
terminar su ejecución.

nombre Función: Nombre de la función con el que se identifica. Es


recomendable que sea un verbo en infinitivo como: sumar, intercambiar,
procesar, etc.

Lista de parámetros: Especificación del conjunto de argumentos (pueden


ser cero, uno o más) que la función debe recibir para realizar su tarea.

Por ejemplo:

int potencia(int base, int exponente);

float farenheitACelsius(double celsius);

Pasos para usar funciones

1. Después de haber llamado las librerías, diseñar el prototipo de la función.


2. Implementar la función en el código.
3. Llamar a la función.

EJEMPLO 1.2

Figura 4. Pasos para usar Funciones.Fuente: Autoría propia


11.1.5. Retorno de la función
-En pseudocódigo no existe la palabra return.

Para retornar un valor en pseudocódigo con el software PseInt, lo hacemos


de la siguiente manera.

Figura 5. Declaración de funciones en PSeInt.Fuente: Autoría propia

Línea 1: Se asigna al nombre de la función a una variable que será de retorno


y se declararán los argumentos.

Línea 2: Deberá definirse el tipo de dato del retorno.

-En c++ si existe el return.

La instrucción return nos permite retornar un dato al finalizar la tarea de la


función. Al terminar de ejecutarse la función, regresa a la línea de código donde
fue llamada.

Si no existe la instrucción return en la función, realiza la tarea asignada y


regresa automáticamente a la misma línea per son reotnar ningún dato.

A estas funciones se les llama indefinidas por el valor devuelto.

En resumen:

• Al generar un valor la función, se debe retornar un dato, utilizando la


función return.

La forma es: return (variable o expresión que se debe retornar);

• Al poner return indica que la función termina y retornara el dato


generado.
• Si la función no retorna un dato, se utiliza return pero sin regresar ningún
dato.

return;

Ejemplo:

int sum(int a, int b)

return a + b;

}
11.1.6. Tipos de funciones
Existen 4 tipos de funciones:

1. No retorna valores ni tiene parámetros.


2. Retorna un valor, pero no tiene parámetros.
3. No retorna valores, pero tiene parámetros
4. Retorna valores y tienen parámetros.

A continuación, se presentarán cada tipo de función en Pseudocódigo y su


codificación en C++.

1. No retorna valores ni tiene parámetros.

Figura 6 . No retorna valores ni tiene parámetros.Fuente: Autoría propia

Figura 7. No retorna valores ni tiene parámetros.Fuente: Autoría propia

2. Retorna un valor, pero no tiene parámetros.

Figura 8. Retorna un valor, pero no tiene parámetros.Fuente: Autoría propia


Figura 9. Retorna un valor, pero no tiene parámetros.Fuente: Autoría propia

3. No retorna valores, pero tiene parámetros

Figura 10. No retorna valores, pero tiene parámetros.Fuente: Autoría propia


Figura 11. No retorna valores, pero tiene parámetros.Fuente: Autoría propia

4. Retorna valores y tienen parámetros.

Figura 12. Retorna valores y tienen parámetros.Fuente: Autoría propia


Figura 13. Retorna valores y tienen parámetros.Fuente: Autoría propia

Existen 2 formas de hacer el llamado a una función que tiene retorno.

1. Asignar a una variable el llamado a una función.


2. Mandar directamente a una salida (Impresión).

11.2. Pasos de parámetros por valor


Dentro de la mayoría de lenguaje de programación con los que contamos,
poseemos dos formas de trasladar variables a una función por valor o por
referencia.

• POR VALOR: Su connotación se refiere a que la función (o subrutina)


admite únicamente una copia del valor que comprende la variable, o sea
que no la puede alterar.

No obstante, dicha divergencia queda retirada casi por completo del


compilador, por lo que podemos pasar programando sin percibir en lo más
mínimo lo manifestado.

Los parámetros usados por una función pueden declararse con un valor por
defecto. Un parámetro que ha sido declarado con valor por defecto es opcional
a la hora de hacer la llamada a la función.
11.3. Implementación pasos de parámetro por valor
Implementación en Pseudocódigo

Con la herramienta Pseint se puede definir el tipo de paso de parámetros.

En el caso del paso de parámetros por valor no es necesario especificarlo.

Figura 13. Implementación de pasos de parámetros. Autoría propia

Implementación en C++

La función (o subrutina) recibe sólo una copia del valor que tiene la variable,
o sea que no la puede modificar.

Ejemplos:

int potencia (int base, int exponente)


{
sentencias;
}

float farenheitACelsius(double celsius)


{
sentencias;
}
Autoevaluación
1. Representa la operación o conjunto de operaciones que permiten comunicar
al exterior el o los resultados alcanzados

A. Datos de Entrada.

B. Procesamiento de Datos.

C. Impresión de Resultados.

2. Los beneficios de una función son:

A. Estructura Selectiva en Cascada (anidadas).

B. Reducción del tiempo de depuración.

C. Polimorfismo en un programa.

3. ¿Selecciona la manera correcta de declarar funciones en C++?

A. real farenheitACelsius(toupper(x));

B. char farenheitACelsius(toupper(c))

C. float farenheitACelsius(double celsius);

4. Seleccione las maneras correctas de llamar a la función en C++.

A. La llamada a la función se realizará desde la función principal main ().

B. La llamada a la función se podrá hacer desde otra función.

C. Creamos una variable fuera del main y la llamamos.

5. ¿Defina correctamente, Subproceso es?

A. Es un conjunto de actividades que tienen una secuencia lógica para


cumplir un propósito.

B. Procesamiento o conjunto de operaciones a que se somete una cosa


para elaborarla o transformarla.

C. Método combinado, los múltiples hilos de una aplicación se pueden


ejecutar en paralelo en múltiples procesadores.
6. Escoja el enunciado correcto:

A. El paso de parámetros por valor retorna únicamente un valor.

B. El paso de parámetros por valor retorna únicamente una constante.

C. El paso de parámetros por valor retorna dos o más valores.

7. Seleccione el concepto de “Función”.

A. Acción de avanzar o ir para adelante, al paso del tiempo y al conjunto de


etapas sucesivas.

B. Grupo de sentencias bajo el mismo nombre que realizan una tarea


específica.

C. Procesos cognitivos para hacer referencia a los mecanismos


psicológicos que se encuentran vinculados con la percepción.

8. Señale el error del siguiente código:

1.#include<iostream>
2.#include<conio.h>
3.using namespace std;
4.char f(char caracter);
5.
6.int main(){
7. char letra;
8. letra = ‘g’;
9. f(letra);
10.}
11.
12.char f(char caracter){
13. caracter = ‘C’;
14. return carácter;
15.}

A. El argumento enviado a la función es incorrecto.

B. No se ha asignado una variable a la función.

C. No existe error en el código.

9. Hay funciones que no retornan datos, en este caso, ¿cuál de las siguientes
instrucciones es una forma de no retornar datos en C++?

A. return (variable);
B. return;

C. return expresión;

10. ¿Los parámetros por valor consisten en?

A. La función (o subrutina) admite únicamente una copia del valor que


comprende la variable

B. La función (o subrutina) admite varias copias del valor que comprende la


variable

C. El Proceso(o subrutina) admite varias copias del valor que comprende la


variable

12.1. ¿Qué es paso de parámetros por referencia?


“Se llama paso de parámetros por referencia ya que la función llamada
puede tener acceso a la variable cuya dirección se ha transmitido.

Debe transmitir como argumento las direcciones de memoria de las


variables que no son de tipo puntero” (Bronson, 2006).

Uso de parámetros por referencia


Existen dos casos en los que podemos usar:

1. Si se requiere modificar valores de otras funciones.

2. Si la función debe retornar dos o más valores.


12.2. ¿Qué son punteros?
Punteros: Son variables que almacenan la dirección de memoria de otra
variable. Los punteros también se los conoce como “apuntadores” ya que
“apuntan” al contenido de una variable mediante su dirección de memoria.

Fig.1. Punteros en la memoria. Autoría propia.

12.3. Operadores & y *


Operador de dirección &: Es un operador que devuelve la dirección de
memoria de una variable cualquiera.

int c, *pc,r; //declaración de variables y puntero

pc=&c; //inicialización de puntero

se asigna a pc la dirección de memoria de c.

Operador de indirección *: Devuelve el contenido de la variable ubicada


en la dirección que se especifica.

int c, *pc,r; //declaración de variables y puntero

pc=&c; //inicialización de puntero

r=*pc; //asignación de contenido a r de lo que apunta pc

12.4. Inicialización de puntero

1. Asignar memoria (estáticamente): Definir una variable y hacer que el


puntero apunte al valor de la variable.

int i;// declaración de una variable

int *p; // declaración de un puntero

p=&i; // en la variable p se asigna la dirección de memoria que contiene i

Un puntero puede inicializarse con una dirección de memoria o puede


apuntar a NULL.

2. Asignar en la dirección de memoria un valor:


int i;// declaración de una variable

int *p; // declaración de un puntero

p=&i; // en la variable p se asigna la dirección de memoria que contiene i

*p=50;// p apunta la dirección de memoria de i,es decir asigna el valor de


50 a i

12.5. Ejemplo 1
Realizar un programa con codificación en C++ que permita intercambiar los
valores entre 2 números enteros.

1. #include
2. #include
3. using namespace std;
4. void intercambiar(int *num1, int *num2);
5. int main ()
6. {
7. int numero_1,numero_2,*pta,*ptb;
8. pta=&numero_1;
9. ptb=&numero_2;
10. cout<<” Ingrese el primer numero: “;
11. cin>>numero_1; cout<<endl; < span=""></endl; <>
12. cout<<” Ingrese el segundo numero: “;
13. cin>>numero_2; cout<<endl;< span=""></endl;<>
14. intercambiar(&numero_1,&numero_2);
15. cout<<” Valor nuevo 1: “<<numero_1<<endl;<
span=""></numero_1<<endl;<>
16. cout<<” Valor nuevo 2: “<<numero_2<<endl;<
span=""></numero_2<<endl;<>
17. getch ();
18. return 0;
19. }
20. void intercambiar (int *num1, int *num2)
21. {
22. int aux;
23. aux=*num1;
24. *num1=*num2;
25. *num2= aux;
26. }

Repaso del código

Línea 4: Declaración del prototipo de la función intercambiar. Se declara dos


variables puntero de tipo entero llamado “num1” y “num2”.

Línea 7: Se declaran 2 variables de tipo entero y 2 variables puntero.

Línea 8: inicialización del puntero pta.


Línea 9: Inicialización del puntero ptb.

Línea 16: Llamada a la función intercambiar, como argumentos se le pasa las


direcciones de memoria de las variables numero_1 y numero_2.

Línea 22: Implementación de la función intercambiar.

Línea 24: Se crea una variable auxiliar para almacenar el puntero *num1.

Línea 25: Coloca el valor de num1 a la variable aux.

Línea 26: Coloca el valor de num2 a num1.

Línea 27: Coloca el valor a la variable de aux a num2.

Fig. 2. Programa ejemplo 1.6. Autoría propia.

12.6. Ejemplo 2
Realizar un programa con codificación en C++ que separa la parte entera y
decimal de un número de tipo float. Diseñar e implementar una función llamada
separar (), la cual debe retornar 2 valores, la parte entera y la parte decimal. Por
ejemplo

Numero=12.35

Entero=12

Decimal=35;

1. #include
2. #include
3. using namespace std;
4. int separar(float num, int *entero, int *decimal);
5. int main()
6. {
7. int *ent,*dec,entero,decimal;
8. float numero;
9. //almacenar direcciones de memoria en los punteros
10. ent=&entero;
11. dec=&decimal;
12. cout<<”Ingrese un numero real con dos decimales: “;
13. cin>>numero;
14. separar(numero,&entero,&decimal);
15. cout<<”El numero original: “<<numero<<” parte="" entera:=""
“<<entero<<” ="" la="" decimal:="" “<<decimal<<endl;<=""
span=""></numero<<”>
16. getch();
17. return 0;
18. }
19. //función que separa la parte entera y decimal
20. int separar(float num, int *entero, int *decimal){
21. float dec1;
22. *entero=num;
23. dec1=(num-*entero)*100;
24. *decimal=dec1;
25. }

Repaso del código

Línea 4: Diseño de la función separar, como parámetros tenemos un


número float, dos punteros de tipo int.

Línea 7: Declaración de 2 variables puntero y 2 variables normales de tipo int.

Línea 8: Declaración de una variable tipo float.

Línea 10: Inicialización del puntero, se coloca la dirección de memoria de la


variable entero a ent.

Línea 11: Inicialización del puntero, se coloca la dirección de memoria de la


variable decimal a dec.

Línea 15: Llamado a la función separar. Se pasan argumentos a la


variable número además de la dirección de memoria de las variables entero y
decimal.

Línea 22: Implementación de la función separar.

Línea 23: Declaración de la variable dec1 de tipo float.

Línea 24: Asignar el valor de la variable num a donde apunta entero, Es decir

Entero=num

Línea 25: Se toma la parte decimal del número, se la transforma a entero y se


la asigna a la variable dec1.

Línea 26: Se asigna dec1 a donde apunta decimal.

Fig.3. Programa ejemplo 1.7. Autoría propia.


Autoevaluación
1. En el paso de parámetros por referencia, los parámetros son:

Variables puntero

Cualquier tipo de variables

Variables enteras

2. Los punteros almacenan:

Direcciones de memoria de otra variable

Direcciones de archivos del computador

Direcciones de memoria ROM

3. El operador “&” indica:

Devuelve el contenido de la variable

Devuelve la dirección de memoria de la variable

Devuelve el contenido y dirección de memoria de la variable

4. Las funciones con paso de parámetros por referencia:

Retornan solamente un dato

Modifican variables de otras funciones

Modifican el nombre de una función

5. El error en la siguiente instrucción es:

1. #include<stdlib.h>
2. int main (){
3. int *numero_1;
4. float *numero_2;
5. int num1;
6. float num2;
7. numero_1=&num1;
8. *numero_1=34;
9. *numero_2=115;
10. return 0;
11. }
La variable puntero *numero_2 no puede almacenar el valor porque el tipo de
dato no coincide

La instrucción de la línea 6 inicializa de forma incorrecta un puntero

La variable puntero *numero_2 no ha sido inicializada

6. ¿Cuál es el operador que permite devolver el contenido de la variable ubicada


en la dirección de memoria que se especifica?

&

<>

7. Determine el error que existe en el siguiente código

1. #include<iostream>
2. void valnuevo(int *xnum,int *ynum);//Prototipo de la función
3. int main()
4. {
5. int *numero_1,*numero_2,num1,num2;
6. numero_1=&num1;
7. numero_2 =&num2;
8. cin>>num1;
9. cin>>num2;
10. valnuevo(num1,num2);
11. return 0 ;
12. }
13. void valnuevo(int *xnum,int *ynum){
14. *xnum=15;
15. *ynum=20;
16. }

Se inicializan de manera incorrecta los punteros

La función no puede retornar los valores porque es de tipo void

Los argumentos de la llamada de la función no son direcciones de memoria

8. Los pasos para inicializar un puntero son:

Asignar memoria (dinámicamente) definiendo una variable y a continuación


hacer que el puntero apunte al valor de la variable y asignar un valor a la dirección
de memoria
Asignar memoria (estáticamente) definiendo una variable y a continuación
hacer que el puntero apunte al valor de la variable y asignar un valor a la dirección
de memoria

Asignar memoria (estáticamente) definiendo una constante y a continuación


hacer que el puntero apunte al valor de la variable

9. Las direcciones de memoria que usa el computador están en el sistema


numérico:

Sexagesimal

Hexadecimal

Heptadecimal

10. ¿Cuál de los siguientes enunciados es correcto?

Un puntero almacena una variable

La función: int cambio(*&num1) es un paso de parámetros por referencia

La única manera de pasar valores por referencia es mediante el uso de


punteros
13.1. Definición de bibliotecas
“Los compiladores suelen ir acompañados de una serie de bibliotecas,
también llamadas librerías” (Acera Garcia, 2010).

Las bibliotecas o también conocidas como librerías son cierto tipo de archivo
que podemos incluir en nuestros programas que contienen especificaciones de
diferentes funciones que ya están establecidas y podemos incluirlas para facilitar
la realización de nuestros programas.

Las bibliotecas nos permiten crear programas más modulares y reutilizables


facilitando a la creación de estos, y pasando de códigos complejos a programas
con pocas líneas de código.

A las librerías se las puede clasificar por diferentes aspectos los cuales
pueden ser bibliotecas de entrada y salida, por el tipo de trabajos que realizan,
bibliotecas matemáticas, de manejo de memoria, de manejo de textos, entre
otras.

Existen un gran número de librerías y cada una de ellas cuenta con una
función específica, que al poder incluirlas en los programas nos facilitara su
creación y nos ahorra tiempo.

13.2. Sintaxis para declarar librerías


Las declaraciones de las librerías deben ir al principio de nuestro código
porque debemos indicarle a nuestro compilador las librerías que vamos a usar.

Para hacer uso de las funciones de una librería debemos llamarla con la
siguiente sintaxis:
1. #include

Se debe tener en cuenta que siempre el nombre de la librería debe ir entre


los signos <>.

Para realizar un programa se pueden incluir un número de librerías sin algún


tipo de limite, pero hay que tener en cuenta que es mejor declarar solo las que
vamos a utilizar y son necesarias.

13.3. ¿Cómo llamar una librería?


En la siguiente imagen se puede apreciar la forma de llamar a las librerías
en C++

Figura 1. Llamada a las librerías, Fuente: Autoría propia.

En estas líneas de códigos podemos observare como llamamos a las


librerías tomando en cuenta que debe ir al principio de nuestro código seguido
de la línea del using namespace que nos ayuda a crear un espacio de nombre.

13.4. El namespace std


Todas las librerías estándar de C++ contienen una declaración del espacio
de nombre std, que lo declaramos por medio del "using namespace std;", para
así evitar estar escribiendo std::cout o std::cin, en nuestro código.

El espacio de nombre std no es una librería, por esta razón no reemplaza a


las librerías del código, sólo facilita la escritura.
Algunas de las librerías de uso más común en C++ son las siguientes:

• fstream:

Flujos hacia-desde ficheros que permiten la manipulación de archivos tanto


para leer como escribir en ellos.

• iostream:

Contiene los algoritmos estándar, es una de las librerías más usadas e


importantes del C++, y es utilizada para operaciones de entrada y salida.

Su nombre es un acrónimo de Input/Output Stream

Algunas de las funciones de esta librería son:

• cin: Flujo de entrada.


• cout: Flujo de salida.
• cerr: Flujo de error no almacenado.
• clog: Flujo de error almacenado.

Todos los objetos derivados de la librería iostream parten del espacio de


nombre std

Ejemplo:

//Este programa nos muestra la impresión en pantalla de la frase “hola


mundo”

#include

using namespace std;

int main(){

cout<<"hola mundo";

return 0;

• math:

Contiene funciones y o definiciones para el uso y manipulación de


funciones para operaciones básicas matemáticas.

La librería math.h tiene algunas de las siguientes funciones:

• acos: arco de seno


• asin: arco seno.
• atan: arco de cotangente.
• floor: menor entero no menor al parámetro.
• cosh: coseno hiperbólico.
• log: logaritmo natural.
• pow: eleva un valor a un exponente dado.

El programa de la figura 2, hace uso de la función de potenciación en la


librearía “math.h”:

Figure 2 Librería math.h, función potenciación.

Para usar esta función debemos darle como argumento, una base y un exponente,
la función potenciación los asocia a variables tipo double ya que los resultados
pueden ser muy grandes ya que, si dejamos vacío cualquiera de los dos campos,
el compilador nos mostrará un mensaje de error como la figura 3:

Figure 3 error al omitir argumentos

• stdio:

Esta librería significa “standard input-output header”, es un archivo de


cabecera que contiene las definiciones de las macros, constantes,
declaraciones para hacer operaciones, estándar, de entrada y salida.

Las funciones más populares declaradas en la stdio.h son:

• printf: imprime salida de datos.


• scanf: introducir entrada de datos.
• puts: imprime una cadena de caracteres.
• getc: devuelve un carácter desde un fichero.
• ferror: comprueba el indicador de errores.

Ejemplo:

//Este programa retorna la palabra hola mundo

// Inclusión de la librería

#include

int main ()

// Impresión por pantalla y salida del programa

printf("Hola mundo\n");

return 0;

• stdlib:

Contiene los prototipos de las funciones, macros, y tipos para utilidades de


uso general conteniendo archivo de cabecera que contiene funciones para la
gestión de memoria dinámica, control de procesos, entre otras.

Las funciones del stdlib.h pueden clasificarse en:

• Conversión
• Memoria
• Control de procesos
• Ordenación
• Búsqueda
• Matemáticas

Algunos ejemplos de las funciones de la librería stdlib.h pueden ser:

• atof: cadena de caracteres a flotante


• rand: genera un número aleatorio
• free: liberan memoria
• system: ejecuta comandos externos
• exit: termina la ejecución del programa
Ejemplo:

//Este programa nos permite crear números aleatorios en un rango de 10


números

#include

#include

#include

using namespace std;

int main()

int num, c;

srand(time(NULL));

for(c = 1; c <= 10; c++)

num = 1 + rand() % (11 - 1);

cout << num<< " ";

return 0;

• string:

Contiene la definición de constantes, funciones y tipos de operaciones de


manipulación de memoria, una generalización de las cadenas alfanuméricas
para albergar cadenas de objetos. Muy útil para el fácil uso de las cadenas de
caracteres

Las funciones para cadenas de caracteres que trabajan conjuntamente de


caracteres ASCII

Algunas de las funciones de esta librería son:


• null: macro que representa la constante de un puntero nulo.
• strcpy: copia una cadena en otra.
• strcat: añade una cadena al final de otra.
• strrev: invierte una cadena.
• strstr: busca una cadena dentro de otra.

Ejemplo :

//Este programa retorna el valor de S1 que es la copia de la cadena S2

#include

#include

int main()

char s2[8] = "abcdefg";

char s1[8];

strcpy( s1, s2 );

printf( "s2=%s\n", s2 );

printf( "s1=%s\n", s1 );

return 0;

}
13.6. ¿Cómo crear una librería propia?
Para poder crear una librería debemos seguir los siguientes pasos:

1. Entramos al programa Codeblocks.

2. Vamos a la opción de File.

3. Damos clic en New y buscamos la opción file.

4. Buscamos la opción C/C++ header.

5. Cuando hacemos clic en esa opción debemos ponerle el nombre a


nuestra librería y damos a finalizar.

6. Como podemos ver en la siguiente imagen ya está creada nuestra librería


y lista para implementar funciones en ella.

7. Para poder implementar nuestras funciones debemos escribirlas en el


espacio vacío de las líneas de código.

Existen dos formas para llamar a nuestra librería creada, la primera es


guardarla en la misma carpeta donde se encuentra nuestro código, y llamarle
con comillas antes de utilizar nuestro programa.

Y la segunda forma es buscar la carpeta de Codeblocks en nuestro


ordenador.

Buscamos la carpeta MinGw.


En la carpeta MinGw pasamos el archivo de nuestra librería hacia la carpeta
include. que es la carpeta general de las librerías de codeblocks

Y para poder utilizar nuestra librería solo tenemos que llamarla antes de
empezar a utilizar nuestro programa entre comillas dobles.

Ejemplo:

Seguimos los pasos anteriores de cómo crear una librería.

Creamos una librería para la operación matemática de la suma.

Llamamos a nuestra función entre comillas dobles antes de empezar


nuestro programa.

Escribimos nuestro código.

Compilamos nuestro programa

Autoevaluación
1. Una estructura secuencial es:

a. Ejecutar instrucciones de modo que se da una después de otra, se


agrupan en una serie ordenada.

b. Procedimiento o método para establecer el mecanismo de


transformación del mundo que nos lleve a satisfacer ciertos requerimientos.

c. Escritura en un lenguaje de programación de la representación del


algoritmo

2. Un ejemplo de asignación de variables puede ser:

a. Una lectura previa del problema

b. Se desea asignar un número entero a una variable se debe declarar que


la variable sea de tipo entero
c. Es ayudar al programador para llegar a una cierta comprensión de la
naturaleza del problema.

3. La estructura Si-Entonces es una instrucción de:

a. Secuencia

b. Condición

c. Todas las anteriores

4. ¿Qué función cumple una estructura condicional anidada?

a. Errores de sintaxis

b. Errores de semántica

c. La inclusión de un condicional dentro de otro de modo que permite la


especificación de varias condiciones simultáneas

5. ¿Cuál es el uso que se le da principalmente a la estructura Según – Hacer?

a. División por cero

b. Creación de funciones.

c. Creación de menús

6. La estructura correcta para hacer uso del condicional Si –Entonces en


Pseudocódigo es:

a. Según <variable> Hacer

<número1>: <instrucciones>

a. Si <condición> Entonces

<instrucciones>

SiNo

<instrucciones>

FinSi

c. Ninguna de las anteriores


7. En el lenguaje C++ que función cumple la función break:

a. Permite inicializar una instrucción.

b. Permite finalizar la instrucción.

c. Corregir posibles errores futuros.

8. ¿Qué pasa cuando no se cumple una condición en la estructura Si-


Entonces?

a. El programa se ejecuta exitosamente.

b. El programa se cierra.

c. El programa te avisa que no hay errores.

9. La estructura secuencial que orden sigue:

a. Orden numérico.

b. Orden jerárquico.

c. Orden anti sistémico.

10.¿Que lenguaje de programación te permite hacer escritura de la


forma cout<<”Hola Mundo”<<endl;

a. Java

b. C

c. C++
14.1 Introducción
La recursividad en los lenguajes de programación son técnicas que se utilizan
para realizar una llamada a una función desde ella misma, de ahí proviene su
nombre y va a tener un sentido jerárquico y disciplinario. (Castro, 2019)

Una función o procedimiento que se puede llamar a sí mismo se llama


recursivo. “La recursión puede ser utilizada como una alternativa a la repetición
o estructura repetitiva. El uso de la recursión es particularmente idóneo para la
solución de aquellos problemas que pueden definirse de modo natural en
términos recursivos”. (Obaldia, 2019)

La recursividad se puede encontrar en estructuras de datos, problemas


matemáticos y en muchos más.

Una función recursiva también se puede encontrar en dos casos:

a) En el caso que se llame a sí misma.

b) En el caso que no se llame a sí misma.

Los pasos que sigue los casos recursivos:

⮚ La función se convoca a sí misma.

⮚ El problema se llega a resolver, tratando el problema, de forma reducida.

⮚ La manera en la cual el tamaño del problema disminuye asegurando que el


caso base eventualmente se alcanzará.

Se clasifican de dos formas:

Recursividad directa.

Cuando en el desarrollo se incluye llamadas a ella misma.

Recursividad indirecta.

Existen varias subrutinas y éstas se llaman unas a otras formando


ciclos. (Castro, 2019)
14.2 Semejanza de recursivo e interactivo
1- Ambas realizan una repetición:

a) Solución iterativa repite el cuerpo del bucle.

b) Solución recursiva repite las llamadas al método recursivo.

2- Ambas tienen una condición de terminación.

a) Solución iterativa: termina cuando se incumple la condición de continuación


del bucle.

b) Solución recursiva: se termina cuando una llamada alcanza el caso base


(inducción) desencadenando una secuencia de vuelta atrás.(Castro, 2019)

14.3 Algoritmo Recursivo


La implementación de algoritmos recursivos en un lenguaje de programación
utiliza una acción que se cite a si misma con datos más simples, basada en datos
previamente clasificados.

La recursividad en una función se ejecuta con el fin de solucionar un


problema, esta función se ejecuta en base al caso más simple, (caso base).

En el campo de la programación para la resolución de problemas complejos,


la técnica divide y vencerás se implementa, descomponiendo al problema en
subproblemas del mismo tipo. Generalmente la función desintegra el problema
en dos partes claves: la parte donde la función ya sabe cómo ejecutar, y una
parte donde la función no sabe cómo ejecutar, para hacer posible la recursión,
la última parte debe parecerse al original, se convierte más simple o una versión
más pequeña. (Programación orientada a objetos, 2019)

Tabla 1

Partes del algoritmo

Algoritmo recursivo:“Es un algoritmo que expresa la solución de un problema en términos de


una llamada a sí mismo. La llamada a sí mismo se conoce como llamada recursiva o
recurrente”. (Course hero, 2019)

Caso base: El caso para el cual una respuesta es explícitamente conocida, un resultado más
simple.
4.4 Estructura
El ejemplo más comprensible de cálculo recursivo en el campo de la
programación es la factorial del número (n).

n! = { si n = 0 0! = 1 como caso base

n!={ nx(n–1)x(n–2)x ... x3x2x1 si n > 0 n. (n–1) . (n–2)....3.2.1 recursividad

Si se observa la fórmula anterior cuando n > 0, es fácil definir n! en función de


(n–1)!

Por ejemplo, 5!.

Descomposición de un numero factorial como caso base

5! = 5x4x3x2x1 = 120

4! = 4x3x2x1 = 24

3! = 3x2x1 = 6

2! = 2x1 = 2

1! = 1x1 = 1

0! = 1 = 1

Descomposición de un numero factorial de manera recursiva.

5! = 5x4!

4! = 4x3!

3! = 3x2!

2! = 2x1!

1! = 1x0!

En términos generales

n! = { 1 si n=0 caso base

n! = {n(n–1)! Si n>0 recursiva

La función factorial de n expresada en términos recursivos sería:

factorial ← n* factorial (n – 1).

Algoritmo recursivo que calcula la factorial de n en la herramienta


codebloks.
Figura 1. Algoritmo recursivo. Fuente: Autoría propia

1. Definir la librería iostream para el cin y cout.


2. Definir una variable entera.
3. Poner texto en pantalla y leer la variable n.
4. Llamar la función factorial con el parámetro.
5. Pausa para que la recursividad no sea infinita.
6. Declarar la función de tipo double y una variable entera como parámetro.
7. Si n es igual a cero este retornara en uno si no retornara en la función que
resta la variable n menos uno y multiplicado por la variable n.

En pseint se permite la recursividad.

Esta sería la estructura en pseint del algoritmo factorial de un numero n.

Figura 2. Pseudocódigo recursividad. Fuente: Autoría propia

1. Declaramos una variable entera y la igualamos a cero dentro de un


condicional si, entonces en donde si n es igual a cero pasa y si no la
variable n se multiplicara por la función factorial restando menos uno.
Para demostrar la factorial de un numero n=3.

Figura 3. Proceso factorial. Fuente: Autoría propia

14.5 Ventajas y desventajas de implementar la recursividad en


la resolución de problemas
Ventajas

• Se asemejan a la descripción matemática


• Al subdividirse en problemas más simples son más fáciles de analizar
• Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y
elegantemente simples.
• Para solucionar cualquier problema la secuencia de pasos a definir
puede no ser exacto.

Desventajas

• Sobrecarga asociada a las funciones.


• El valor de la recursividad reside en el hecho de que se puede usar para
resolver problemas sin fácil solución iterativa

14.6 Propiedades de los algoritmos recursivos


No debe generar una secuencia infinita de llamadas así mismo, dicho de
otro modo, existirá un caso base por lo menos.

• Una función recursiva (f) debe definirse en términos que no impliquen a


(f) al menos en un argumento o grupo de argumentos.
• Debe existir una "salida" de la secuencia de llamadas recursivas.
• Cada llamada periódica se debería precisar en una dificultad no tan
complicada.

14.7 Codificación de un programa


• Ejemplo: Realizar un programa que simule la cadena Fibonacci en
pseudocódigo y en C++
• Pseudocódigo.
• Proceso recursion //nombre de la
función
• Funcion val<-recursion(n){ //función val
• si( n = 0 o n = 1) Entonces // condición
• val<-n; // guardar n en
variable val
• SiNo
• val<-recursión(n-1) + recursión(n-2); //función
recursión guardada
en la
variable val.
• FinSi // fin del
ciclo sí.
• FinFuncion
• Escribir "favor ingrese la cantidad de terminos:";
• leer n; //leer
variable n
• para x<-0 hasta n-1 Hacer
• Escribir "fibo",x+1,"es:",recursion(x); //variable aumentada
en uno y llama la función
• FinPara // fin para la estructura
“para”
• FinProceso //fin para el algoritmo
• C++
• #include< iostream>
• #include< conio.h> //declaración de librerías
• using namespace std;
• int fibonacci (int v1); //función para la sucesión, variable entera
• int main (){
• int v1= 0; //variable igualada cero
• cout<<"\n\t Ingrese un valor : "<<endl;< span=""></endl;<>
• cin>>v1; //leer la variable
• cout<<"\n\tLa serie fibonacci es : "<<endl;< span=""></endl;<>
• for (int i=1;i<=v1;i++){ // utilizamos el ciclo for cuando sabemos el
valor
• cout<<fibonacci(i)<<"\t"; ="" llamando="" la="" función="" con=""
el="" parámetro="" necesario<="" span=""></fibonacci(i)<<"\t"; >
• }
• getch (); // detener el código
• return 0;
• }
• int fibonacci (int v1) //funcion para la recursión
• {
• if(v1==1||v1==0){
• return v1; // retorna cuando sea v1
igual a 1 o 0
• }
• else
• {
• return fibonacci(v1-1)+fibonacci(v1-2); // sino retorna la función
• }
• }

También podría gustarte