Está en la página 1de 13

PROGRAMACIÓN PARA PRIMER SEMESTRE

DOCENTE TUTOR: GABRIEL DEMERA URETA

TEMA: Validaciones y gestión de las cadenas de caracteres


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. ¿Cuáles son las diferencias entre las condiciones de caso en
Pseudocódigo y el switch del lenguaje C?
2. ¿Qué es la estructura de repetición while y cómo funciona?
3. ¿Qué es la estructura de repetición for y cómo funciona?
4. ¿Qué utilidad tiene la instrucción break en lenguaje C?
Objetivos de esta clase:

• Aplicar validaciones en el registro de datos mediante


“Hacer … mientas (do ... while())”
• Conocer y aplicar el almacenamiento mediante la
definición de arreglos de datos.
Estructura  de control do-while
Esta estructura do while() es similar a la aplicada en los apartados anteriores como el “Repetir… Hasta que o Hacer… mientras”, este control
primero realiza el proceso para después evaluar la condición que permitirá o no que se vuelva a repetir dicho proceso.
do
do{ Observe que si existe más de una instrucción si se necesita
Instrucción;
Instrucciones; del uso de llaves para agrupar las instrucciones
while (condición_expresión);
}while (condición_expresión);
Observe que si es una sola instrucción no El siguiente algoritmo permite al usuario mostrar una tabla de multiplicar entre el 2 y el 12, el programa aplica la herramienta
necesita el uso de llaves para agrupar las do…while() para validar que el número de la tabla sea el correcto y además para controlar la escritura de la tabla por la
instrucciones del do while() pantalla.

#include <stdio.h> Tabla cont Pantalla: Ingrese un número entre 2 y 12:_


#include <conio.h> 14 1 Ingrese un número entre 2 y 12:_
main() 8 2
8x1=8
{ int tabla, cont=1; 3 8 x 2 = 16
clrscr(); 4 8 x 3 = 24
do{ printf(“Ingrese un número entre 2 y 12:"); 5
8 x 4 = 32
8 x 5 = 40
scanf("%d",&tabla); 6 8 x 6 = 48
} while(tabla<2 || tabla>12); 7 8 x 7 = 56
do{ 8 x 8 = 64
8
printf("%d x %d = %d\n", tabla, cont, tabla*cont); 8 x 9 = 72
cont++; 9 8 x 10 = 80
} while(cont<=10); 10
getch(); 11
return 0; Considerando que el do..while() fue construido para realizar procesos de validación, también puede ser utilizado para
} controlar procesos repetitivos como las otras estructuras de control
Estructura  de control do-while
El siguiente programa permite ingresar una cantidad N de números enteros positivos, antes de terminar el programa debe mostrar
el mayor se todos los números. Para limitar el numero de elementos a ingresar se considera que el valor 0 es para salir:

#include<stdio.h>
#include<stdlib.h> mayor n Pantalla:
0 9 Ingrese un número entero positivo <0 para salir>:_
int main(){
9 4 Ingrese un número entero positivo <0 para salir>:_
int n, mayor=0;
36 36
system("cls"); Ingrese un número entero positivo <0 para salir>:_
-54
do{ printf("Ingrese un número entero positivo <0 para salir>:"); Ingrese un número entero positivo <0 para salir>:_
do{ 0
El mayor es: 36
scanf("%d",&n);
}while(n < 0);
if(n > 0 && n > mayor) mayor = n;
}while(n != 0);
printf("El mayor es: %d\n",mayor);
system("pause");
return 0;
}

Este ejercicio muestra dos validaciones anidadas la externa valida hasta cuando se
ingresan números y la validación interna para obtener solo datos enteros positivos
Estructura  de control do-while
El siguiente algoritmo aplica la herramienta do…while() para mostrar por la pantalla los códigos de las diferentes teclas, para probarlo se requiere tener a la mano los
códigos ASCII para verificar la numeración al presionar una determinada tecla, este ejercicio lo puede descargar del aula virtual con el nombre C17.cpp

#include <stdio.h> Tecla Código Pantalla: La función getch() es idéntica a la función getchar()
#include <conio.h> porque cumplen el mismo propósito, capturar el
A 65 65
Espacio 32 código y sólo un código de la tecla presionada, se
main() 32 diferencia porque getchar() si tiene reflejo es decir si
{ int tecla; Enter 13 13
presiona la tecla A pues esa tecla se verá en pantalla,
clrscr(); Backspace 8 8 mientras que getch() no tiene reflejos, es decir si
do{ tecla=getch(); 1 49 49 presiona la tecla A, ésta no se verá en pantalla, por
printf("%d\n",tecla); M 77 77 esta razón la función getch() es utilizada en juegos,
} while (tecla!=27);.//ESC K 75 75 ya que puede presionar cualquier tecla y no se verá
return 0; en pantalla
0
} Derecha(🡪) 077 77 Aparentemente el código de la M y de la 🡪 son iguales la
0 diferencia radica en que algunas teclas de función utilizan los
Este do while() estará repite y repite Izquierda(🡨) 075
75 mismos códigos pero se les antepone el cero(0) para
mientras la tecla presionada sea
identificar la función
diferente de Escape (Esc código 27), una Esc 27 27
vez que presione Esc, saldrá y terminará.
Estructura  de control do-while
El siguiente programa permite simplificar cualquier quebrado, cada simplificación se mostrará por pantalla, además antes de
finalizar se mostrará por pantalla el máximo común divisor (MCD) de todas las simplificaciones.
Suponga que se #include<conio.h> num den mcd i Pantalla:
tiene 18/6, #include<stdio.h> 1
24 18 2 Ingrese numerador:_
como ambos void main() 3
12 9 2 Ingrese denominador:_
son pares se los
divide para 2
{ int num, den,mcd=1,i=2; 4 3 6 4
24/18
quedando 9/3, clrscr();
12/9
como ambos printf("Ingrese numerador:");scanf("%d",&num);
son divisibles printf("Ingrese denominador:");scanf("%d",&den); 4/3
los volvemos a printf("%d/%d\n",num,den); mcd: 6
simplificar do{
dividiéndolos if (num%i==0 && den%i==0) { 4%3 ==
12%3 ==000&& 3%3==0
&&3%2==0
9%3==0
24%2
12%2
4%2 == && 18%2==0
9%2==0
para 3 que Este propuesta de simplificación de quebrado consiste en verificar
001 100
10
dando 3/1 = 3;
mcd=mcd*i; si el numerador y el denominador son divisibles para 2, si no es así
el MCD sería num=num/i; se incrementa y verificará otra vez si es divisible, este proceso irá
2x3 = 6, note den=den/i; incrementándose hasta encontrar el número divisible o hasta ser
que el 2 printf("%d/%d\n",num,den); mayor que el denominador o el numerador.
corresponde a i=2; }
la primera else i++;
simplificación }while(i<=den);
y el 3
corresponde a
printf("mcd:%d",mcd);
la segunda getch();
simplificación. }
Administración y gestión de arreglos
Recuerde que las variables son recursos que utilizan los algoritmos para almacenar los datos que serán procesados y para obtener resultados
mientras el algoritmo este en funcionamiento, estos espacios de memoria solo almacenan un valor o dato por variable. Esto quiere decir, por
ejemplo, que si necesito almacenar 5 notas se necesitará crear 5 variables, una por cada nota.
a
Si se declara una variable 🡪 int a; Internamente se lo podría graficar como un repositorio, por ejemplo: Valor / Dato
a
Si se desea almacenar un valor en esta variable se aplica una asignación 🡪 a=123; se lo podría graficar : 123

Cuando se presenta la necesidad de utilizar un grupos de valores o un grupo de datos, el uso de estas variables independientes no es
recomendable, ya que se tendría que declarar cuantas variables sean necesarias para trabajar con el grupo de datos, considere que cada valor
tiene su propio nombre:
Si se desae almacenar 10 valores diferentes se debe declarar 10 variables 🡪 int a,b,c,d,e,f,g,h,i,j; Esta declaración se la puede graficar así:
a f
456 b=321; Observe que resulta cada vez más complicado gestionar los datos cuando se
f=456; incrementa la necesidad de almacenar abundante cantidad de información, por esta
b g
razón se crearon los arreglos, esta forma de almacenar los datos permiten gestionar
321 e=789; gran cantidad de información mediante un nombre que permite el acceso a varias
c h celdas de almacenamiento
h=654;
654
Por ahora solo se trabajará con el tipo de datos char, recuerde que este tipo de dato
d i solo puede contener un código que corresponde a un carácter, así que se necesita
trabajar con el arreglo para almacenar varios caracteres como un nombre o una frase.
e j
789
Administración y gestión de arreglos
Los arreglos ofrece la posibilidad de utilizar varias variables organizadas en una sola estructura que comparte un mismo nombre pero se
individualizan mediante el uso de índices numéricos únicos que empieza en la posición 0 y termina en la posición N-1, la letra N es una
representación que puede ser cualquier número, por ejemplo, si es un arreglo de 10 elementos (Empieza en 0 y termina en 10-1):

Esto es un arreglo unidimensional o vector (utiliza un índice para referenciar cada celda)
En este ejemplo se observan 10 espacios de almacenamiento, observe que no se declaran 10 variables sino un arreglo con 10 espacios de
almacenamiento, la creación de estas estructuras es simple solo basta con escribir el tipo de dato que almacenará, un nombre que debe
cumplir las mismas reglas impuestas para los nombres de variables y entre corchete el número de espacios que desea crear.
Para guardar los datos en estos arreglos se aplica la misma asignación utilizada con las variables, la diferencia está en indicar la posición donde
quiere guardarlo, a esta posición se le llama índice, por ejemplo:

La diferencia entre una variable y un arreglo se basa en lo siguiente:


• La variable solo puede almacenar un solo dato o valor, los arreglos pueden almacenar más de un valor
• La variable no utiliza índice el arreglo obligatoriamente necesita utilizarlo encerrándolo entre corchetes

• Las variables y los arreglos deben cumplir con a misma reglas de creación de nombres de variables
Uso de cadenas de caracteres
La gestión de cadenas de caracteres está íntimamente ligado al uso de múltiples variables de tipo char, recuerde que las variables de tipo char
solo pueden almacenar un byte de espacio de memoria, es decir solo un carácter, por ejemplo:

Al momento de que se desea almacenar más de un carácter en una variable se propone el uso de cadenas de caracteres, que consiste en
utilizar una variable tipo char organizada en forma de arreglo o vector.
A diferencia de otros lenguajes de programación que tiene tipos de datos para almacenar texto en una sola variable, el lenguaje C no contiene
un tipo de dato que satisfaga esta necesidad como los tipos de dato string que poseen otros lenguajes de programación, pero si incluye
algunas funcionalidades que se encuentran en la biblioteca <string.h>.
Para crear una cadena de caracteres se aplican los mismos criterios utilizados para crear un arreglo o vector, es decir el nombre de la variable y
entre corchetes la cantidad de caracteres +1 que desea almacenar, el +1 sirve para un espacio extra que será utilizado lara un carácter especial
'\0' llamado fin de cadena:

Observe que la grafica muestra una cadena de caracteres que está terminada obligatoriamente por el símbolo '\0' en la posición [n-1] y sirve
para demarcar el final de una cadena de caracteres, por lo que, se recomienda reservar el espacio extra de tal forma que se incluya dicho
carácter agregando un espacio más "n+1”; el carácter '\0' es un elemento implícito (lo pone de forma automática el lenguaje) o explícito (lo
pone el programador a conveniencia) en una cadena de caracteres. éste carácter no es imprimible por lo tanto al utilizar cualquier función
como el printf() o otra no se mostrará.
Uso de cadenas de caracteres
La inicialización es un proceso que consiste en asignar un valor a una variable al momento de declararla o crearla, en lenguaje C este
procedimiento es recomendable hacerlo para aquellas variables como los contadores o cualquier otra variable que será utilizada en un cálculo, ya
que cuando se declara una variable el lenguaje solo indica que ese espacio esta disponible sin importar que valor contenga.
Para agrupar caracteres en una inicialización de utilizan las comillas al igual que las llaves, recuerde que cada carácter en realidad se trata de un
valor o código, por lo tanto, las comillas (“”) agrupan varios caracteres, los apostrofes (‘’) solo un carácter y las llaves ({}) varios caracteres
individuales. Por ejemplo, el siguiente programa muestra como se puede inicializar una cadena de caracteres: (este programa lo puede descargar
con el nombre C24.cpp)
En este ejemplo S1[5] es un arreglos o cadena de texto que podrá almacenar hasta 4 caracteres,
#include <stdio.h> recuerde que la última posición es para contener el fin de cadena. Observe que la inicializa con la
#include <stdlib.h> palabra “hola” sin definir el fin de la cadena, se lo puede hacer porque lo hará el lenguaje de
void main () forma automática.
{ char s1[5] = "Hola"; // ’\0’ esta implícito
char s2[5] = {'H','o','l','a',0}; // ’\0’ esta explícito en forma de código
char s3[5] = {'H','o','l','a','\0'}; S2[5] al igual que S1 es un arreglos o cadena de texto que podrá almacenar hasta 4 caracteres,
system("cls"); observe que la inicializa con la palabra {'H','o','l','a',0} definiendo de forma explicita el fin de
printf ("\nlas cadena son:\n"); cadena con el código ASCII 0 (fin de la cadena), recuerde que los caracteres pueden ser
printf ("%s\n%s\n%s\n",s1,s2,s3); reemplazados por sus códigos de esta forma: {72,111,108,97,0}
system("pause");
}
S3[5] al igual que S1 y S2 es un arreglos o cadena de texto que podrá almacenar hasta 4
caracteres, aquí se utiliza '\0‘, el carácter \ es utilizado por lenguaje C para definir las acciones de
los primeros 33 códigos ASCII
Uso de cadenas de caracteres
El uso de los corchetes vacíos “[ ]” es para variables cuya limitación de caracteres al inicializar no está definida, esto quiere decir que, la
inicialización puede contener cualquier número de caracteres (este programa lo puede descargar con el nombre C25.cpp):

#include <stdio.h> Cuando se necesita una variable de ilimitados números de caracteres que no necesita una
#include <stdlib.h> inicialización, lo recomendable es utilizar el asterisco (*) anteponiéndoselo al nombre de la
void main () variable, por ejemplo:
{ char s1[5] = "Hola";
char s2[5] = {'H','o','l','a',0}; char *nombre;
char s3[5] = {'H','o','l','a','\0'}; printf( "ingrese nombres y apellidos:"); gets(nombre);
char c1[] = "Chao hasta pronto...!"; printf( "Usted ha ingresado:%s", nombre );
char c2[] = {'H','a','s','t','a',' ','l','u','e','g','o',0};
char c3[] = {'B', 'y','e',' ','b','y', 'e','\0'};
system("cls"); Observe que en el ejemplo se está utilizando la función gets(), esta función es similar a
printf ("\nlas cadena son:\n"); scanf() pero solo para leer cadenas de caracteres, pertenece a la librería stdio.h, tenga en
printf ("%s\n%s\n%s\n",s1,s2,s3); cuenta que los caracteres se almacenan en forma de códigos y no sus gráficas, así que para
printf ("%s\n%s\n%s\n",c1,c2,c3); mostrar y guardar sus equivalencias deben ser transformados de código a carácter (para ser
system("pause"); mostrados) y de carácter a código (Para ser almacenados) utilizado %s
}

Normal mente los programadores utilizan la inicialización de cadenas cuando se tiene establecido su propósito que por lo general no cambian
su contenido, mientras que el uso del asterisco (*) es para la entrada de datos o cuando no se sabe la longitud de información que registrará el
usuario por teclado.
CONCLUSIONES
✔ La herramienta de control de repetición do…while() es utilizada para procesos de repetición como para validar
procesos y entradas de datos.
✔ Esta herramienta de control de ciclos repetitivos do…while() al menos realiza una vez el proceso y vuelve a
realizar una serie de ciclos repetitivos siempre y cuando la condición sea verdadera.
✔ Al igual que los controles for() y while(), el do…while() requiere de llaves obligatoriamente si hay más de una
instrucción.
✔ Una variable solo puede contener un solo dato o valor, el arreglo puede contener muchos datos o valores del
mismo tipo y con un solo nombre de acceso.
✔ Una cadena de caracteres es un arreglo cuyo índice empieza en 0 y termina en la posición N-1, se utilizan los
corchetes para referenciar la posición que se desea en el arreglo.
✔ Todas las cadenas de texto obligatoriamente limitan el final de la cadena mediante ‘\0’ se lo puede utilizar de
forma explicita (cuando lo pone el programador a conveniencia) como implícita (cuando lo pone el lenguaje de
forma automática).

También podría gustarte