0% encontró este documento útil (0 votos)
36 vistas39 páginas

Sesion 74 - Cadenas

El documento aborda conceptos fundamentales de programación orientada a objetos, centrándose en arreglos unidimensionales y bidimensionales, así como en el uso de vectores en C++. Se explican las declaraciones, acceso a elementos, asignación, recorrido y algoritmos de ordenamiento, incluyendo el método de la burbuja. Además, se presentan ejercicios prácticos para aplicar los conocimientos adquiridos.

Cargado por

Leonardo S SC
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas39 páginas

Sesion 74 - Cadenas

El documento aborda conceptos fundamentales de programación orientada a objetos, centrándose en arreglos unidimensionales y bidimensionales, así como en el uso de vectores en C++. Se explican las declaraciones, acceso a elementos, asignación, recorrido y algoritmos de ordenamiento, incluyendo el método de la burbuja. Además, se presentan ejercicios prácticos para aplicar los conocimientos adquiridos.

Cargado por

Leonardo S SC
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE INGENIERÍA MECÁNICA

MB545-PROGRAMACIÓN ORIENTADA A OBJETOS

SESION 4: ARREGLOS Y CADENAS

Ing. Julián Ramírez Tenorio


ARREGLO
3

1 2

Disposición ordenada de elementos, siguiendo un patrón numérico ordenado.


ARREGLOS UNIDIMENSIONALES

Disposición ordenada de elementos, de cualquier tipo definido

Ejemplo:
𝐴 = [3, 5, 0, −9, 4, 6, 8, 13, −25]
A, es un arreglo unidimensional de 9 elementos del tipo entero

Declaraciones :
int numeros[]{2, 5, 8, 2, 5, 6, 9, 10, 1, 3};
int numeros[]={2, 5, 8, 2, 5, 6, 9, 10, 1, 3};
int numeros[4]={2, 5, 2, 5};
int numeros[10]{2, 5, 2, 5}; //inicializa {2, 5, 2, 5,0 ,0 ,0, 0, 0, 0};
char letras[5]={‘c’, ‘u’, ‘r’, ‘s’, ‘o’};
float decimales[]={2.3 , 1.45 , 3.56};

Acceso a los elementos :


int numeros[4]={3, 5, 7, 1};
int valor;
cout<<numeros[1]; //imprime 5
cout<<numeros[2]; //imprime 7
cout<<numeros[3]; //imprime 1
Arreglos unidimensionales y memoria:
Cada elemento de un array ocupa un espacio de memoria definido en el array, esta asignación se hace
secuencial y ordenadamente.

int numeros[3]={-3,0,7};
Tamaño del Cantidad de
bloque bloques

4 bytes 4 bytes 4 bytes

numeros[0] numeros[1] numeros[2]


Ordinalidad :
Los elementos de un array unidimensional, están ordenados mediante un identificador entero
(índice), que comienza de CERO, y aumenta de 1 en 1 hasta completar el número de elementos.

0 1 2 3 4 5 n-1 Índices

C U R S O - . . . A Elementos

n elementos

int numeros[4]={3, 5, 7, 1};


int valor;
cout<<numeros[0]; //imprime 3
cout<<numeros[1]; //imprime 5
cout<<numeros[2]; //imprime 7
cout<<numeros[3]; //imprime 1
cout<<numeros[4]; //imprime -345 o cualquier cosa !cuidado!
Asignación de elementos :

int numeros[4]={3, 5, 7, 1};


int valor;
numeros[3]=524; // numeros ahora : {3, 5, 7, 524};
numeros[0]=-145; // numeros ahora : {-145, 5, 7, 524};
numeros[2]=-68; // numeros ahora : {-145, 5, -68, 524};
numeros[1]=178.45; // numeros ahora : {-145, 178, -68, 524};
numeros[3]=‘A’; // numeros ahora : {-145, 178, -68, 65};
numeros[4]=23; //!cuidado! Está sobreescribiendo en un terreno
//que no es el suyo;
numeros[-1]=180; //!cuidado!
//Está sobreescribiendo en un terreno que no es el suyo

Obteniendo el tamaño :

int numeros[4]={3, 5, 7, 1};


int tamano;
tamano=sizeof(numeros) / sizeof(numeros[0]);
int numeros[7]={3, 5, 7, 1, -45,50,11,34};
Recorrido de elementos :

for(int i=0 ; i <sizeof(numeros)/sizeof(numeros[0]); i++) {


std::cout << “Elemento “ << numeros[i]<<std::endl;
}
//Iteración simple
for(int elemento: numeros) {
std::cout<<elemento<<std::endl;
}
Encontrando un valor determinado :
for( int i=1 ; i <=7; i++) {
if(numeros[i]<0) {
std::cout << “Elemento negativo “ << numeros[i]<<std::endl;
break;
}
}
//Con el iterador simple
for( int elem:numeros
if(elem <0) {
std::cout << “Elemento negativo “ << elem <<std::endl;
break;
}
}
Ejercicios:

Cree un arreglo unidimensional que contenga 10 elementos numéricos, rellene el


arreglo con valores aleatorios y luego imprima:

• El menor valor
• El mayor valor
• Los valores que se repiten, si es que los hay
Algoritmos y criterios de ordenamiento :

Existen varios criterios para ordenar los elementos de un array.

Método de la burbuja:

Primera barrida:

5 < 3 : El 5 pasa a la siguiente posición y el 3 a la primera

5 < 7 : Todo bien, aquí no se intercambian posiciones


7 < 1 : El 7 pasa a la siguiente posición y el 1 pasa a la del 7

7 < 4 : El 7 pasa a la siguiente posición y el 4 pasa a la del 7

Primera ancla

! Se completó la primera barrida …!


Segunda barrida:

3< 5 ?:No hay intercambio, pasa a la siguiente posición

5 < 1 ? : El 5 avanza una posición y el 1 toma la del 5

5 < 4 ? : El5 se adelanta y el 4 baja un posición

Segunda ancla

! Se completó la segunda barrida …!


Recapitulando :
Hay una primera ronda de comparación entre los elementos del array, comenzando de la primera
posición (0) hasta la penúltima posición (n-2) . Al terminar la ronda colocaremos un ancla de derecha
a izquierda,

0 1 2 3 4

Escribiendo el algoritmo de la primera barrida:


int numeros[]={5,3,7,1,4};
int i,j,temp;
for (i=0 ; i <=3; i++){
If( numeros[i] > numeros[i+1]) {
temp=numeros[i];
numeros[i]=numeros[i+1];
numeros[i+1]=temp;
}
}
Hemos colocado la primera ancla
Escribiendo el algoritmo de la segunda barrida:
for (i=0 ; i <=2; i++){

if( numeros[i] > numeros[i+1]) {


temp=numeros[i];
numeros[i]=numeros[i+1];
numeros[i+1]=temp;
}
}
Hemos colocado la segunda ancla

Escribiendo el algoritmo de la tercera barrida:


for (i=0 ; i <=1; i++){
if( numeros[i] > numeros[i+1]) {
temp=numeros[i];
numeros[i]=numeros[i+1];
numeros[i+1]=temp;
}
}
Hemos colocado la tercera ancla
Los barridos se van realizando de la siguiente manera :

Hasta el índice 3: 4-1

Hasta el índice 2: 4-2

Desde índice 1: 4-3

Desde índice 0: 4-4

Array ordenado:
Los barridos se van realizando de la siguiente manera :

int numeros[]={5,3,7,1,4};
int i,j,temp;

for (j=4 ; j >=1; j--){


for
for (i=0
(i=0 ;
; i
i <=3; i++){
<=j-1; i++){
if( numeros[i] > numeros[i+1]) {
temp=numeros[i];
numeros[i]=numeros[i+1];
numeros[i+1]=temp;
}
}
}
Algoritmo caso general:

int numeros[]={15,2,-10,8,4,23,11,78};
int i,j,temp;
n=sizeof(números)/sizeof(numeros[0]);

for (j=n-1 ; j >0; j--){ //Controla hasta dónde debo comparar

forfor (i=0
(i=0 ; i; <i j<=3; i++){
; i++){//Controla las comparaciones e intercambia
if( numeros[i] > numeros[i+1]) {
temp=numeros[i];
numeros[i]=numeros[i+1];
numeros[i+1]=temp;
}
}
}
ARREGLOS BIDIMENSIONALES
Arreglos bidimensinales o matrices :
Son estructuras que almacenan elementos en filas y columnas. En resumen son el resultado de colocar
filas de arrays unidimensionales ordenadamente.

Fila 0
int matriz[4][5]=
{ {5,6,2,0,5},//FILA 0
Fila 1
{6,4,8,1,1},//FILA 1

Fila 2 {1,3,4,5,7},//FILA 2
{9,3,2,7,2},//FILA 3
};
Fila 3

Col 0 Col 1 Col 2 Col 3 Col 4


Acceso a los elementos de una matriz :

Se debe de indicar el número de fila y columna respectivamente

cout<<matriz[0][3]; //imprime 0
cout<<matriz[3][1]; //imprime 3
cout<<matriz[1][0]; //imprime 6
cout<<matriz[4][3]; //¡Cuidado!

La memoria que ocupa la matriz es :

4 x 5 x 4= 80 bytes

?
En general:

𝑵 = 𝒏𝒇𝒊𝒍𝒂𝒔 × 𝒏𝒄𝒐𝒍𝒖𝒎𝒏𝒂𝒔 × 𝑻𝒂𝒎𝒂𝒏𝒐_𝒕𝒊𝒑𝒐


Recorriendo los elementos de una matriz :

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


for (i=0; i < 4; i++){
std::cout<<
std::cout<<matriz[i][0];
std::cout<<
std::cout<<
std::cout<< matriz[i][j];
matriz[i][2];
matriz[i][1];
matriz[i][3];
matriz[i][4];
}
}

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

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


std::cout<<
std::cout<<
std::cout<< matriz[2][i];
std::cout<<matriz[0][i];
matriz[1][i];
matriz[3][i];
matriz[j][i];
std::cout<<
}
}
Almacenamiento en memoria de una matriz :

int matriz[2][3]={ {1,3,4},//FILA 0


{5,6,2},//FILA 1
};

matriz[0,0] matriz[0,1] matriz[0,2] matriz[1,0] matriz[1,1] matriz[1,2]

… …
Ejercicios:

Dadas la siguientes matrices:

2 −3 4 0 1 4
𝐴= 1 0 1 B= 5 2 3
4 3 2 −1 0 2

Encontrar la suma y multiplicación de dichas matrices:


Vectores:
Son contenedores de elementos y para casos particulares, tienen ciertas similitudes a los arreglos
unidimensionales. Los vectores usados como tal,son una evolución de los arreglos unidimensionales
originales de C.

#include <iostream>
#include <vector> //Debe incluir esta librería
int main(){

vector<float> notas(5);{0.0,0.0,0.0,0.0,0.0}
vector<int> puntos(4,8);//{8,8,8,8}
//Puede inicializar
vector<int> numeros= { 1, 8, 3, 7, 0, 9 };
//El acceso a los elementos es igual al de los arreglos
cout << numeros[2];//Imprime 3
cout << nú[Link]();//Accede al último elemento e imprime
cout << nú[Link]();//Accede al primer elemento e imprime
//Puedes modificar los elementos
numeros[4]=-15; // { 1, 8, 3, 7, -15, 9 }
//Obtiene el tamaño
[Link](); //Devuelve 6
//Agrega un elemento al final
numeros.push_back(-5); //{ 1, 8, 3, 7, -15, 9 ,-5 }
//Elimina el último elemento
numeros.pop_back(); //{ 1, 8, 3, 7, -15, 9 ,-5 }
[Link](); //Booleano devuelve true si el vector está vacío
[Link](); //Borra los elementos del vector
Iterando vectores:
vector<int> numeros= { 1, 8, 3, 7, 0, 9 };
//Forma clásica
for (int i=0; i< [Link]();i++){
cout <<números[i]<<endl;
}
//Forma reducida //Forma reducida general
for ( int elemento: numeros){ for (auto elemento : numeros){
cout <<elemento<<endl; cout <<elemento<<endl;
} }

Iteradores en C++
Son elementos del lenguaje que permiten recorrer un colección de elementos. Una colección
de elementos puede ser un vector, arreglo o lista.

begin end
Uso de iteradores en vectores:
Su uso principal refiere a las iteraciones, ordenamiento y búsqueda de elementos específicos
dentro del vector y pueden simplificar en gran medida la escritura:

[Link]() //Devuelve un iterador con referencia al primer elemento


[Link]() //Devuelve un iterador con referencia al último elemento
Ordenar un vector:
//Para usar esta función es necesario #include <algorithm>
sort([Link](),[Link]());
//Se obtiene el vector ordenado { 0, 1, 3, 7, 8}
Insertar elementos en un vector:
A través de la función insert() puede agregar un elemento indicando un posición
numeros= { 0, 1, 3, 7, 8}
[Link]([Link]() + 2, 25);//Inserta en la tercera posición
numeros= { 0, 1, 25, 3, 7, 8}
[Link]([Link](), 47);//Inserta en la posición inicial
numeros= { 47,0, 1, 25, 3, 7, 8}
[Link]([Link](), 38);//Inserta en la posición final
numeros= { 47,0, 1, 25, 3, 7, 8,38}
[Link]([Link]()-1,51);//Inserta en la penúltima posición
numeros= { 47,0, 1, 25, 3, 7, 8,51,38}

Eliminar elementos de un vector:


Puede borrar elementos a través de la posición o el valor:
numeros= { 47,0, 1, 25, 3, 7, 8,51,38}
[Link]([Link]() + 2);//Borra el elemento de la tercera posición
numeros= { 47,0, 25, 3, 7, 8,51,38}
[Link]([Link]());//Borra el primer elemento
numeros= { 0, 25, 3, 7, 8,51,38}
CADENAS
Una cadena es una secuencia de caracteres, que nos permiten trabajar con textos. Existen 2 grupos de
librerías para trabajar con ellas:

CADENAS

C C++
CLÁSICA MEJORADA
Trabaja con arreglos unidimensionales Trabaja con la librería <string>
de elementos de tipo CHAR Como contenedores de objetos
(Vectores)
Manipulación de cadenas del tipo clásico:

char cadena[]="peruano"; //Se define como array de char


char cadena[4]="peruano"; //Da error por desborde
char cadena[100]="peruano"; //Ya no da error por desborde
Pero…
cout << sizeof(cadena); //Reserva 330 bytes
Opción ganadora
char cadena[]="peruano";
cout sizeof(cadena); //Da 8 ¿Porqué?
Acceso a los elementos de una cadena :

cadena[0] cadena[1] cadena[7]

cout << cadena[0]; //p


cout << cadena[3]; //u
cout << cadena[7]; // nada

Otra manera de declarar una cadena

char cadena={‘p’,’e’,’r’,’u’,’a’,’n’,’o’};//Cuidado
char cadena={‘p’,’e’,’r’,’u’,’a’,’n’,’o’,’\0’};//ok
Funciones de cadena :
Para las siguientes funciones incluya la librería <cstring>
strlen(<cadena>): Devuelve la longitud de la cadena pero sin contar el espacio nulo al final

char cadena={‘p’,’e’,’r’,’u’,’a’,’n’,’o’,’\0’};//ok
cout << strlen(cadena); //imprime 7
char cadena={‘p’,’e’,’r’,’u’,’a’,’n’,’o’};//Cuidado
cout << strlen(cadena); //imprime 7

strcpy(<cadena_destino>, <cadena_origen>) : Copia el contenido de <cadena_origen> en


<cadena_destino>

strcat(<cadena1>, <cadena2>) : Concatena el contenido de <cadena1> en <cadena2>


char cadena1[]="Buenas";
char cadena2[]="tardes";
cout << strcat(cadena1,cadena2) << endl; // "Buenastardes";

strcmp(<cadena1>, <cadena2>) : Compara las dos cadenas y devuelve un 0 si las dos


cadenas son iguales, un número negativo si 4 <cadena1> es menor que (precede alfabéticamente a)
<cadena2> y un número positivo (mayor que cero) si <cadena1> es mayor que <cadena2>
char cadena1[]=“buenas";
char cadena2[]=“buenas";
cout << strcmp(cadena1,cadena2)<<endl; //Devuelve cero

char cadena1[]=“Buenas";
char cadena2[]=“buenas";
cout << strcmp(cadena1,cadena2)<<endl; //Devuelve valor negativo

char cadena1[]=“zaranda";
char cadena2[]=“tardes";
cout << strcmp(cadena1,cadena2)<<endl; //Devuelve valor positivo

char cadena1[]=“tardes";
char cadena2[]=“zaranda";
cout << strcmp(cadena1,cadena2)<<endl; //Devuelve valor negativo
Manipulación de cadenas con la librería <string>:
Gestiona las cadenas mediante la clase string, de modo que las cadenas pasan a ser
objetos con propiedades y métodos. Conservando también el comportamiento original
de las cadenas de C. Debe incluir la librería <string>

Declaración:
string cadena="hola"; //Se define como un tipo string
string cadena("hola"); //Se define como un tipo string

Acceso a los caracteres :


cout << cadena[0]; // h cout << [Link](0); // h
cout << cadena[2]; // l cout << [Link](2); // l
cout << cadena[3]; // a cout << [Link](3); // a
Modificando los caracteres :
cadena[0]=‘c’; // cola
cadena[2]=‘p’; // copa

Longitud de la cadena :
cout << [Link](); // 4
cout << sizeof(cadena); // 32 ¡Cuidado!
Operadores:

+ Concatenación += Asignación/Concatenación
string cadena=“buenas"; string cadena=“buenas";
string cadena2=“tardes"; cadena+=“tardes";
cout << cadena+cadena2;
//cadena vale ”buenastardes”
//”buenastardes”

== Igualdad != diferente
string cadena="hola"; string cadena="hola";
string cadena2="hola"; string cadena2="hola";
cadena2==cadena; //True cadena2!=cadena; //False

=< >= < > de relación << inyección


string cadena=“interes"; string cadena="hola";
string cadena2=“tasa"; cout << cadena;
cadena2>cadena; //True
cadena2>=cadena; //True >> extracción
Cadena2<cadena; //falso
string cadena="hola";
cin >> cadena;
Funciones básicas:

push_back(): Inserta un carácter al pop_back(): Elimina el último caracter


final de la cadena string cadena="hola-";
string cadena="hola"; cadena.pop_back(); //hola
cadena.push_back("-"); //hola-

back(): Obtiene el último caracter front(): Obtiene el primer caracter


string cadena="hola"; string cadena="hola";
[Link](); //a [Link](); //h

clear(): Borra todos los elementos empty(): Verifica si la cadena está vacía
string cadena="hola"; string cadena="hola";
[Link](); [Link]();
cout<<cadena<<endl; cout<<[Link]()<<endl;
cout<<[Link]();// cero //Devuelve true
Funciones de conversión:

stof(<string>): Convierte a float stoi(<string>): Convierte a entero


string cadena=“12.45"; string cadena=“12.45";
cout << stof(cadena);12.45 cout << stoi(cadena);12

stod(<string>): Convierte a double to_string(<num>): Convierte u número a


string cadena=“12.45"; cadena
cout << stof(cadena);12.45 int entero=4568;
cout << to_string(entero);
//Imprime “4568”
Funciones de búsqueda y reemplazo:

insert(<int>,<string>): Inserta una cadena desde la posición indicada

string cadena=“Hola,mucho gusto";


string cadena2=“ a todos ";

cout << [Link](5,cadena2);


erase(<int>,<int>): Borra una porción de cadena desde la posición indicada

string cadena=“Hola,mucho gusto";


string cadena2=“ a todos ";

cout << [Link](5,[Link]());

replace(<int>,<int>,<string>): Reemplaza una cadena dentro de otra,desde una posición


Inicial, dado una longitud de caracteres a reemplazar
replace(<int>,<int>,<string>): Reemplaza una cadena dentro de otra, desde una posición
Inicial, dado una longitud de caracteres a reemplazar

string cadena="Hola,que gusto conocerlos";


string cadena2="AMIGOS";

cout <<[Link](5,3,cadena2)<<endl;//Hola,AMIGOS gusto conocerlos

cadena="Hola,que gusto conocerlos";


cout <<[Link](5,4,cadena2)<<endl;//Hola,AMIGOSgusto conocerlos

cadena="Hola,que gusto conocerlos";


cout <<[Link](5,5,cadena2)<<endl;//Hola,AMIGOSusto conocerlos

cadena="Hola,que gusto conocerlos";


cout <<[Link](5,6,cadena2)<<endl;//Hola,AMIGOSsto conocerlos

cadena="Hola,que gusto conocerlos";


cout <<[Link](5,7,cadena2)<<endl;//Hola,AMIGOSto conocerlos

cadena="Hola,que gusto conocerlos";


cout <<[Link](5,15,cadena2) <<endl;//Hola,AMIGOSerlos
find(<string>,<int>): Busca una cadena desde una posición indicada. Devuelve la posición
de la primera coincidencia. Si no la encuentra devuelve una constante denominada
string::npos

string cadena=“Letreros y pancartas";

cout <<[Link](”tre”,0)<<endl;//Devuelve 2

cout <<[Link](”tre”,5)<<endl;//Devuelve string::npos

substr(<int>,<int>): Extrae caracteres desde una posición indicada y una longitud


dada.

string cadena=“Letreros y pancartas";

cout <<[Link](5,4)<<endl;//Devuelve “eros”

cout <<[Link](0,5)<<endl;//Devuelve “Letre”

cout <<[Link](15,125)<<endl;//Devuelve “artas” con longitud 5

También podría gustarte