Está en la página 1de 15

PROGRAMACIÓN PARA PRIMER SEMESTRE

DOCENTE TUTOR: GABRIEL DEMERA URETA

TEMA: Gestión de las cadenas de caracteres y estructura de arreglos


Retroalimentación:

Interrogantes de la clase anterior, el estudiante debe


contestar estas preguntas con sus propias palabras y
ejemplos, subirlos al aula virtual en el repositorio
“Retroalimentación unidad 3”:
1. ¿Porqué no se puede utilizar =, ==, >, <, con las cadenas de
caracteres?
2. ¿Para qué sirve la función strlen()?
3. ¿Cuál es la función que reemplaza a la asignación para las
cadenas de caracteres?
4. ¿Cómo se compara dos cadenas de caracteres?
Objetivos de esta clase:

• Aplicar técnicas de gestión para administrar las cadenas


de caracteres y obtener resultados de análisis.
• Conocer las diferentes estructuras de los arreglos de
datos e introducción a la gestión de vectores.
Gestión de búsqueda carácter a carácter:
El siguiente programa permite ingresar una frase cualquiera, el programa muestra el número de vocales a, e, i, o y u, que existen en la frase
ingresada (Este programa lo puede descargar del aula virtual con el nombre C29.cpp).
#include <stdio.h> frase
#include <stdlib.h> N o   s o l o   d e   p a n n o s a l i m e n t a m o s
#include <string.h> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

int main(){
char *frase; i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i
int ca,ce,ci,co,cu; 30

ca=ce=ci=co=cu=0; Pantalla: ca ce ci co cu
system(“cls”); ingrese una frase preferida: _ 0 0 0 0 0
printf("ingrese una frase preferida: "); gets(frase); Totales a=3 e=2 i=1 o=5 u=0 1 1 1 1
for (int i=0 ; i < strlen(frase); i++) 2 2 2
switch(frase[i]){ 3 3
case ‘A’: case ‘a’: ca++; break; 4
case ‘E’: case ‘e’: ce++; break; 5
case ‘I’: case ‘i’: ci++; break;
case ‘O’: case ‘o’: co++; break; Al tratarse de un arreglo se puede recorrer una cadena de texto
case ‘U’: case ‘u’: cu++; break; posición a posición y realizar cualquier proceso sobre cada
} ubicación de la cadena
printf("Totales a=%d\t e=%d\t i=%d\t o=%d\t u=%d\n",ca,ce,ci,co,cu);
system(“pause”);
return 0;
}
Gestión de búsqueda carácter a carácter:
Una palabra palíndroma es una palabra que se lee igual de izquierda a derecha como de derecha a izquierda sin considerar tildes o mayúsculas, por
ejemplo: Aérea, Ama, Ana, Anilina, Nadan, Neuquén, Ojo, Orejero, Oro, Erigiré, Radar, Rajar, Rallar, Reconocer, Rodador, Rotomotor, Rotor,
Salas, Sedes, entre otras palabras. Este programa permite el ingreso de una palabra cualquiera y muestra si es o no palíndroma:
tolower(int c): Esta función pertenece a la librería ctype.h sirve para transformar de
mayúscula a minúscula, recuerde que las variables del tipo char almacean códigos ASCII, la
C30.cpp función tolower() le suma 32 al número entero correspondiente al código ASCII del
#include <stdio.h> carácter, por ejemplo “A” tiene código ASCII 65, si le sumamos 32 dará 97 que es el código
ASCII de “a”.
#include <stdlib.h> palabra
#include <string.h> O r e  j e r o  
#include <ctype.h> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
int main(){
char palabra[50]; Pantalla:
iz iz iz iz de de de
int iz, de; ingrese una palabra: _
de
system("cls"); la palabra Orejero si es palíndroma
printf("ingrese una palabra: "); gets(palabra);
for (iz=0, de=strlen(palabra)-1; iz<de && de>iz ; iz++,de--)
if (tolower(palabra[iz]) != tolower(palabra[de])) break;
if (iz < de)
printf("la palabra %s no es palíndroma\n ",palabra);
else
printf("la palabra %s si es palíndroma\n ",palabra);
system("pause");
return 0;
}
Gestión de búsqueda carácter a carácter:
El siguiente programa permite contar cuantas palabras tiene una frase cualquiera :
cp frase
#include <stdio.h> 0 A m o  r e s   u n a  d e c i s i ó n
#include <stdlib.h> 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include <string.h> 2
int main(){ 3 i i i i i i i i i i i i i i i i i i i i i
char *frase; 4
Pantalla:
int i=0, cp=0; Ingrese una frase preferida:_
system("cls"); Hay 4 palabras en la frase
printf("Ingrese una frase preferida: "); gets(frase);
while (i<strlen(frase)) { El algoritmo utiliza 3 while() para contar las palabras, el primer while() o el
externo repetirá mientras i no llegue al final de lo escrito, la lógica aplicada
while (frase[i]!=' ') i++;
se basa en avanzar por palabra, contar y por último avanzar por espacios
if(i) cp++;
while (frase[i]==' ') i++; El segundo while() incrementará i mientras sea diferente de un espacio, es
decir avanza mientras exista la palabra
}
printf("Hay %d palabras en la frase\n ",cp); El tercer while() repetirá mientras el carácter que apunta i sea igual al
espacio en blanco, tenga en cuenta que se pueden escribir entre palabras
system("pause");
varios espacios sin notarlo
return 0;
} La condición if(i) cp++; esta ubicada porque el texto ingresado puede
empezar con un espacio y contaría una palabra demás, observe que primero
avanza al existir una palabra, pero si hay un espacio avanzará y contará como
una palabra y dará un resultado equivocado.
Estructura y organización de los arreglos
Recordemos que un arreglo es un grupo de espacios de memoria (grupos de variables) que comparten un mismo nombre y se identifican por su
ubicación (índice) con la finalidad de almacenar información del mismo tipo de dato y con el mismo propósito.
El siguiente ejemplo declara un vector de 10 elementos de tipo entero:
int A[10]; // El número de elementos se ubican en secuencia en una sola fila

                   
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]

El siguiente ejemplo declara y crea una matriz (dos índices) de 8 filas y cada una de las filas con 10 columnas, esta matriz podrá almacenar valores
con decimales:
float B[8][10]; // el primer elemento es para las filas y el segundo para las columnas
  0 1 2 3 4 5 6 7 8 9
0 B[0][0] B[0][1] B[0][2] B[0][3] B[0][4] B[0][5] B[0][6] B[0][7] B[0][8] B[0][9]
1 B[1][0] B[1][1] B[1][2] B[1][3] B[1][4] B[1][5] B[1][6] B[1][7] B[1][8] B[1][9]
2 B[2][0] B[2][1] B[2][2] B[2][3] B[2][4] B[2][5] B[2][6] B[2][7] B[2][8] B[2][9]
3 B[3][0] B[3][1] B[3][2] B[3][3] B[3][4] B[3][5] B[3][6] B[3][7] B[3][8] B[3][9]
4 B[4][0] B[4][1] B[4][2] B[4][3] B[4][4] B[4][5] B[4][6] B[4][7] B[4][8] B[4][9]
5 B[5][0] B[5][1] B[5][2] B[5][3] B[5][4] B[5][5] B[5][6] B[5][7] B[5][8] B[5][9]
6 B[6][0] B[6][1] B[6][2] B[6][3] B[6][4] B[6][5] B[6][6] B[6][7] B[6][8] B[6][9]
7 B[7][0] B[7][1] B[7][2] B[7][3] B[7][4] B[7][5] B[7][6] B[7][7] B[7][8] B[7][9]
Estructura y organización de los arreglos
Para declarar una matriz de tres dimensiones (tres índices) o también conocidos como cubos, se utilizan
tres pares de corchetes:
long c[7][7][6]; //las dimensiones se representan en x (filas), y (columnas), z (nivel)
¿Cuál es el espacio físico que ocupa en memoria un arreglo?
• El vector “A” de tipo entero “int”, reserva en memoria 10 espacios, 2 byte de memoria por cada celda o
variable, el compilador reservaría 20 byte en la memoria principal.
• La matriz “B”, de tipo float, separa 4 byte por cada celda, esto reservar 8x10x4, dando como resultado
320 byte de memoria RAM.
¿Dónde se aplican los arreglos?
Vector Los vectores se los aplica para dar la secuencia de aterrizaje de un
avión, para almacenar una lista, para definir una secuencia, etc

Cubo En la actualidad el cubo es utilizado


para crear animaciones 3D, estas
animaciones se las puede aplicar en
películas como Advengers, superman,
etc.
Matriz
Uno de los usos mas notables de la matriz
es a fotografía digital, donde cada punto de
la foto (pixel) es una celda de la matriz que
posee un color.
Estructura y organización de los arreglos
• Los arreglos con tipo de dato numérico no utilizan ‘\0’ para finalizar la estructura int vector1[5] = { 10, 20, 30, 40, 50 };
• La inicialización de un arreglo numérico es igual que la cadenas de caracteres: int vector2[] = { 10, 20, 30, 40, 50 };

El siguiente programa almacena 5 números enteros cualesquiera y muestra primero los números pares y después los números impares:
C31.cpp vector 4 7 6 9 8 Pantalla:
#include <stdio.h> ingresa el número 1: _
0 1 2 3 4
#include <stdlib.h>
ingresa el número 2: _
int main() Aquí el usuario i i i i i i ingresa el número 3: _
{ int i, vector[5]; ingresa los 10 5
system("cls"); números ingresa el número 4: _
for(i = 0; i < 5; i++){ ingresa el número 5: _
printf("ingresa el número %d: ",i+1); Los números pares ingresados son:
scanf("%d",&vector[i]); 4 8
6
}
Los números impares ingresados son:
printf("\nlos números pares ingresados son:\n");
7 9
for(i = 0; i < 5; i++)
if(vector[i]%2 == 0) printf("%d\t",vector[i]); Normalmente se debe utilizar un for() para desarrollar el proceso de ingreso de datos a un
vector, y otro for() para aplicar un recorrido y realizar procesos con dichos datos
printf("\nlos números impares ingresados son:\n");
for(i = 0; i < 5; i++) El contador del for() siempre se lo utiliza como índice de ubicación de cada elemento del
if(vector[i]%2 != 0) printf("%d\t",vector[i]); vector (vector[i]).
printf("\n"); En el ejemplo existe un for() para el ingreso de datos, otro for() para encontrar los números
system("pause"); pares y un último for() para encontrar los números impares.
return 0;
}
Generación de números aleatorios:
Un número aleatorio o al azar, es cualquier numero proporcionado por la computadora, recuerde que una computadora no puede pensar, por lo
que existe un mecanismo matemático que aplicado genera un número cualquiera en un rango específico, esto igual requiere de un valor que sirva
de semilla para generar otros valores, este valor es tomado de los ciclos del reloj interno de la computadora utilizando las siguientes funciones:
randomize(); Esta función que pertenece a la librería stdlib.h, sirve para generar un valor inicial por el cual se podrá generar una serie de número
al azar, para lograrlo usa el reloj interno de la computadora como semilla.
Rand(); Sirve para tomar un número al azar de una serie de valores iniciados por randomize();
rand(); //Al utilizar solo rand() de esta forma, la función devolverá un número entre 0 y 2.147’483.647.
#include <stdio.h> Para limitar el número a devolver se necesita hacer lo siguiente:
C32.cpp
#include <stdlib.h> rand()%101; //Al utilizar la función de esta forma, devolverá números entre 0 y 100.
int main() Aquí la función genera los
10+(rand()%91); //Este método le permite aplicar límite inferior y superior,
{ int i, vector[10]; 10 números uno a uno por
devuelve números entre 10 y 100
cada ciclo de repetición
system("cls");
randomize(); En el ejercicio anterior los datos eran ingresados por el teclado, en este ejercicio los
for(i = 0; i < 10; i++) vector[i]= rand()%101; datos son llenados por la computadora de forma automática, al probar este programa
printf("\nlos números pares tomados son:\n"); notará que, cada vez que se ejecuta se obtendrán siempre números diferentes
for(i = 0; i < 10; i++)
if(vector[i]%2 == 0) printf("%d\t",vector[i]); Si usted quita la función randomize del código fuente, notará que cada vez que
printf("\nlos números impares tomados son:\n"); ejecute este programa siempre le dará la misma secuencia de números.
for(i = 0; i < 10; i++)
if(vector[i]%2 != 0) printf("%d\t",vector[i]);
printf("\n");
system("pause");
return 0;
}
Ejemplo de aplicación de vectores:
El siguiente programa permite ingresar una lista de N elemento con una longitud máxima de hasta 100 elementos, el programa no debe permitir ingresar números
repetidos: C33.cpp
b b b b b

#include <stdio.h> encontrado max vector 7  6  69   8 1                                             …   


#include <stdlib.h> 1
0 5 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 99
int main() Pantalla:
{ int vector[100]; i i i i i i
ingrese el número de elementos del vector:_
int max, encontrado, i; ingresa el número 1: _
system("cls"); ingresa el número 2: _
printf("ingrese el número de elementos del vector:\n"); scanf("%d",&max); ingresa el número 3: _
for(i = 0; i < max; i++){ número repetido…!
printf("ingresa el número %d: ",i+1); vuelva a ingresarlo:_
do { scanf("%d", &vector[i]); ingresa el número 4: _
encontrado=0; ingresa el número 5: _
for(int b=0; b < i && encontrado==0; b++) El control for (i) externo se encargará de ubicar el índice posición a
if (vector[b]==vector[i]) encontrado=1; posición hasta completar el número max de elementos.
if(encontrado) printf("número repetido…! \nvuelva a ingresarlo: "); El proceso del do…while verifica o valida que no este repetido el dato, es
} while(encontrado); cado de estar repetido no saldrá del bucle hasta que lo vuelva a ingresar
} sin que se encuentre duplicado
system("cls");
El control for (b) interno se chequear si el valor se encuentra en las celdas
for(i = 0; i < max; i++) printf("%d \t", vector[i]); anteriores a la posición de (i)
system("pause");
El uso de la variable encontrado es importante ya que de encontrarlo
return 0; saldrá del for (b) interno, mostrará el mensaje repetido y evitará que salgo
} del do..while
Vectores de cadenas de caracteres
Cuando se desea utilizar una lista de palabras de forma similar al uso de un vector numérico, se encontrará que una cadena de caracteres como
tal, es un vector o un arreglo unidimensional, por lo tanto, cada elemento de la cadena solo tiene el espacio para contener un carácter y no una
palabra.
N o   s o l o   d e   p a n n o s a l i m e n t a m o s
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Para crear una lista de palabras, se debe generar tecnicamente una matriz como si se tratase de un vector, donde el primer índice corresponde a la
ubicación de cada fila (palabra), y el segundo índice corresponde a la posición de la columna (cada letra) de la palabra. Por ejemplo, los siguientes
son vectores, uno contiene los días de la semana y el otro vector contiene los diferentes estados civiles, observe como se puede inicializar un vector
de cadenas de caracteres:
char dia[8][10]={"Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"};
El vector es de 8 elementos de máximo 9 letras, cada elemento se encierra entre comillas dobles, y todo el contenido del vector se agrupa con llaves
char estcivil[6][13] = {{'s',111,'l','t','e','r','o'}, {'c',97,'s','a','d',111}, {'d','i','v',111,'r','c','i',97,'d','o'},{'v','i','u','d','o'}, {'u','n','i','ó','n'}};
El vector es de 6 elementos, cada elemento se encierra entre llaves, los caracteres se pueden encerrar entre apostrofes (‘’) o utilizar sus códigos numéricos
Por ejemplo, suponga que se desea crear una lista de nombres, registrarlos y extraerlos se podría realizar lo siguiente:

char nombres[10][20]; // Crea un vector para 10 nombres y máximo 19 caracteres


strcpy(nombres[0], "Gabriel"); // con cadenas no se puede utilizar el igual(=) para asignación
strcpy(nombres[1], "Paola");
strcpy(nombres[2], "Alejandro"); nombres
strcpy(nombres[3], "María"); Gabriel Paola Alejandro María      
printf(“Ingrese un nombre”); gets(nombres[4]); 0 1 2 3 4 5 …… 9
printf(“Ingrese otro nombre”); scanf(“%s”,nombres[5])
puts(nombres[0]);
puts(nombres[3]);
printf(“%s”,nombres[4]);
La pantalla
La computadora originalmente solo trabajaba y mostraba caracteres ya que no existía la pantalla gráfica como en la actualidad, todas las instrucciones se
las tenía que escribir y los efectos para mostrar la información se basaban en el número de caracteres por filas y columnas como una matriz, el estándar
mas utilizado eran las pantallas de 25 filas x 80 columnas
1 2 3 4 5 6 7 8 9 1 1 12 13 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 80
0 1 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
1 e s t o e s un a p r u e b a d e c o mo s e p u e d e mo s t r a r la i n f o r ma c i ó n e n l a p a n t  a l l a

Cada fila de la pantalla podía tener máximo 80 caracteres y máximo 25 líneas de escritura, con el paso del tiempo de fue mejorando y ampliando la matriz
de la pantalla, lenguaje C utiliza muchas librerías que permiten administrar la pantalla y mejorar algunas presentaciones, en este curso se utilizará la
librería <conio.h> del IDE de BorlandC que cuentan con funciones como:
textcolor() que sirve para definir un color con que se mostrará el texto en pantalla, por ejemplo: textcolor(YELLOW); o textcolor(14); son iguales y sirven
para establecer el color amarillo para las letras
textbackground() que sirve para definir un color de fondo con que se mostrará el texto en pantalla, por ejemplo: textbackground (BLUE); o textbackground
(1); son iguales y sirven para establecer el color azul de fondo para las letras
gotoxy() que sirve para ubicar el cursor (Carácter que siempre esta parpadeando e indica donde se escribirá al presionar cualquier tecla) en una posición
de la matriz de la pantalla, primero la columna (x) y después la fila (y), por ejemplo, se escribirá FCI en la columna 30 fila 8:
1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
0 1 12 13 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 80
8 FC I
cprint() es igual que el printf() que se ha estado utilizando pero este muestra con color, por ejemplo, se desea mostrar Universidad Técnica de Manabí con
fondo verde y letras amarillas:
_setcursortype() que sirve para cambiar la apariencia del cursor, por ahora se utilizará
textbackground(GREEN);
_NOCURSOR para que no se vea y _NORMALCURSOR para volverlo visible, por
textcolor(YELLOW);
ejemplo, si se desea desaparecer al cursor se usa: _setcursortype(_NOCURSOR);
cprintf(“Universidad Técnica de Manabí ”);

Universidad Técnica de Manabí


El siguiente programa crea un menú con cinco opciones, utiliza las teclas de dirección (077 🡪, 075 🡨) para ubicarse en cada opción de la pantalla, la tecla
Enter (13) para seleccionar cualquier opción y solo sale cuando se selecciona Salir:
1 1 1 1 1 1 1 1 2 2 2 2 22 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7
1 2 3 4 5 6 7 8 9 0 1 12 13 4 5 6 7 8 9 0 1 2 3 4 5 26 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 80

2  S u ma t o r i a             S u s t r a c c i o n         Mu l t i p l i c a c i ó n   D i v i s i ó n               S a l i r                            
#include <stdio.h> //proceso de chequear la tecla presionada Este ejercicio lo puede
#include <conio.h> switch(tecla){ descargar del aula virtual
#include <stdlib.h> case 77: if (indice==4){col=2; indice=0;} con el nombre C35.cpp
void main() else {col+=15; indice++;} y se recomienda probarlo
{ char menu[5][15]={"Sumatoria","Sustracción", break; para entender su
"Multiplicación","División","Salir"}; case 75: if (indice==0){col=62; indice=4;} funcionamiento
int tecla, col=2, i, indice=0; else {col-=15; indice--;}
int a,b; break;
clrscr(); case 13: _setcursortype(_NORMALCURSOR);
//proceso de imprimir el menú en pantalla if (indice==0){gotoxy(10,10);printf("ingrese un número:");
for (i=0;i<5;i++){ gotoxy(col,2);cprintf("%s",menu[i]); scanf("%d",&a);
col+=15;} gotoxy(10,11);printf("ingrese otro número:");
col=2;i=1; scanf("%d",&b);
//proceso de controlar el movimiento gotoxy(10,12);printf("la sumatoria da:%d\n",a+b);
do{ gotoxy(10,13);system("pause");
do{ _setcursortype(_NOCURSOR); }
textbackground(6); if (indice==1){}
gotoxy(col,2); cprintf("%s",menu[indice]); if (indice==2){}
tecla=getch(); if (indice==3){}
}while(tecla!=77 && tecla!=75 && tecla!=13); if (indice==4) i=0;
textbackground(0); }
gotoxy(col,2); cprintf("%s",menu[indice]); }while(i);
}
CONCLUSIONES
✔ Se puede gestionar las cadenas de caracteres de la misma forma que se gestiona un vector es decir carácter a
carácter de acuerdo a su posición
✔ Los caracteres son código numéricos únicos por lo que se puede pasar de mayúscula a minúscula sumando 32
y de minúscula a mayúscula restando 32.
✔ En un envío de datos se puede aplicar operaciones matemáticas sobre los códigos de caracteres de tal forma
que no sean interpretables de tal forma que se transformen en texto basura en una transmisión, el proceso
inverso lo debe hacer el receptor para que se convierta en la información original
✔ Los vectores, matrices y cubos son estructuras de almacenamiento que son muy útiles en la actualidad para la
generación secuencias de procesos, listas, imágenes digitales con capacidad de ampliarse o reducirse,
animaciones en 3D y simulaciones científicas.
✔ Los vectores de cadenas de texto en realidad son una matriz, pero lenguaje C permite administrarlos con un
solo índice como si se tratara de una vector de palabras.

También podría gustarte