Está en la página 1de 35

República Bolivariana de Venezuela

Ministerio del Poder Popular para la Educación Universitaria, ciencia y


Tecnología
Universidad Politécnica Territorial del Estado Bolívar
Programa Nacional de Formación en Informática
T1-INF-1M
Algorítmica y programación.

Tratamiento de Cadena de
Caracteres.

Profesor: Bachilleres:

José Jiménez Uver Sánchez. C.I: 30.421.789


Alejandro Acosta. C.I: 28.579.245
Luis Rondón. C.I: 28.504.645
Yetsimar Montilla C.I: 30.248.957
Leopoldo Lares C.I: 30.343.062
Jorhvis Laya C.I: 28. 395. 290
Mónica García C.I: 28.631.380

Ciudad Bolívar, Julio de 2020.


INDICE
Introducción………………………………………………………………………3
Tratamiento de cadenas de cordenadas………………………………………...4
Funciones asociadas……………………………………………………………...4
Operaciones con
cadenas……………………………………………………………………………5
Funciones y procedimiento………………………………………………………9
Deaclaracion…………………………………………………………………….14
Variables locales y globales…………………………………………………….18
Conclucion………………………………………………………………………25
Referencia electrónicas…………………………………………………………26
Anexo…………………………………………………………………………….27
Introducción

El lenguaje C es un lenguaje de programación creado en 1972 por Dennis M.


Ritchie en los Laboratorios Bell. Es un lenguaje cuyo origen es la implementación
del sistema operativo Unix. C es valorado por la eficiencia del código que produce
y es el lenguaje de programación más popular para crear software de sistemas,
aunque también se utiliza para crear aplicaciones. Se trata de un lenguaje de
medio nivel pero con muchas características de bajo nivel. Dispone de las
estructuras de control típicas de los lenguajes de alto nivel pero, a su vez, dispone
de sentencias y operadores que permiten un control a muy bajo nivel, esto es,
cercano a la máquina. La compilación de un programa C se realiza en varias fases
que normalmente son automatizadas y ocultadas por el IDE: 1. Pre compilación,
consistente en modificar el código fuente en C según una serie de instrucciones
(denominadas directivas de pre compilación), simplificando de esta forma el
trabajo del compilador. Algunas de las tareas de las que se encarga el pre
compilador son la inclusión de ficheros y la expansión de macros. 2. Compilación,
que genera el código objeto a partir del código ya pre procesado.
Tratamiento de Cadena de Caracteres

Las cadenas de caracteres son vectores de tipo carácter (char) que reciben un
tratamiento especial para simular el tipo de datos “string”, presente en otros
lenguajes de programación. Para que un vector de caracteres pueda ser
considerado como una cadena de caracteres, el ´ultimo de los elementos útiles del
vector debe ser el carácter nulo (código ASCII 0).

Según esto, si se quiere declarar una cadena formada por N caracteres, deberá
declararse un vector con N + 1 elementos de tipo carácter. Por ejemplo, la
declaración char cadena, reserva suficiente espacio en memoria para almacenar
una cadena de 5 caracteres, como la palabra "casco". En C pueden definirse
constantes correspondientes a cadenas de caracteres. Se usan comillas dobles para
delimitar el principio y el final de la cadena, a diferencia de las comillas simples
empleadas con las constantes de tipo carácter

Funciones Asociadas al Manejo de cadenas de caracteres

Aunque C no incorpora en su definición operadores para el manejo de cadenas


de caracteres, todo compilador de C proporciona una librera estándar (string.h)
con funciones para facilitar su utilización. Entre algunas de las más destacadas
tenemos las siguientes:

 Strcpy: La función strcpy se encuentra en la biblioteca <string.h> y se


utiliza para copiar una cadena de caracteres (fuente) en el lugar que
ocupaba otra (destino). Esta copia es destructiva, en otras palabras, todos
los caracteres que estaban en la cadena destino desaparecen, aunque la
cadena destino fuera más larga que la cadena fuente. La cadena destino se
pone como primer argumento de la función y la cadena fuente como
segundo. Ver Anexo 1.

 Strcat: La función strcpy es desctructiva, pero hay otra función en la


librería <string.h> que copia una cadena (fuente) en otra (destino) sin
destruir ésta, es decir, que copia una cadena detrás de la otra esta función
es conocida como strcat. Ver Anexo 2.

 Strlen: esta función devuelve el total (entero) de caracteres que conforman


una cadena (excluyendo el caracter nulo \0). Ver Anexo 3.

 Strcmp:strcmp (abreviatura de ((string comparison))). La función strcmp


recibe dos cadenas, a y b, devuelve un entero. El entero que resulta de
efectuar la llamada strcmp (a, b) codifica el resultado de la comparación:

Es menor que cero si la cadena a es menor que b,

Es 0 si la cadena a es igual que b, y

Es mayor que cero si la cadena a es mayor que b.

Naturalmente, menor significa que va delante en orden alfabético, y mayor


que va detrás. Ver anexo 4.

Operaciones con cadenas


 Entrada/salida de cadenas: Las cadenas se muestran con printf y la
adecuada marca de formato sin que se presenten dificultades especiales.
Lo que resulta problemático es leer cadenas. La función scanf presenta una
seria limitación: solo puede leer ((palabras)), no ((frases)). Ello obliga a
presentar una nueva función (gets).
 Salida con printf: Empecemos por considerar la función printf, que
muestra cadenas con la marca de formato %s. Por ejemplo: ver anexo 5
Figura 1. Resultado de salida con prIntf

Se puede alterar la presentación de la cadena con modificadores: ver anexo 6

Figura 2. Presentación de Cadenas con modificadores

Si se desea mostrar una cadena carácter a carácter, se Puede hacer llamando a


printf sobre cada uno de los caracteres, pero debe recordar que la marca de
formato asociada a un carácter es %c: ver anexo 7

Este es el resultado de la ejecución:

 Entrada con scanf: La función scanf es un reto mayor. A continuación un


ejemplo que pretende leer e imprimir una cadena en la que se observa
guardar hasta 80 caracteres (sin contar el terminador nulo): ver anexo 8

Debe notar que con las cadenas no hay que poner el caracter & del
identificador al usar scanf. Recordar: cadena[0] es un char, pero cadena, sin mas,
es la dirección de memoria en la que empieza el vector de caracteres. Al ejecutar
el programa introduciendo la cadena "una" se obtiene el siguiente resultado por
pantalla.
Hay un problema práctico con scanf: solo lee una (palabra), es decir, una
secuencia de caracteres no blancos. Si al ejecutar el programa tecleamos un par de
palabras (una prueba), sólo se muestra la primera. Por pantalla se obtendría lo
siguiente:

 Entrada con gets: La función gets lee todos los caracteres que hay hasta
encontrar un salto de línea. Dichos caracteres, excepto el salto de línea, se
almacenan a partir de la dirección de memoria que se indique como
argumento y se añade un terminador. Ver anexo 9

Este es el resultado de la ejecución:

 Entrada con sscanf: La función sscanf es similar a scanf (se diferencia en


la ((s)) inicial), pero no obtiene información leyéndola del teclado, sino
que la extrae de una cadena. Un ejemplo para entender el procedimiento:
ver anexo 10

En el programa se ha definido una variable auxiliar, linea, que es una cadena


con capacidad para 80 caracteres mas el terminador (puede resultar conveniente
reservar mas memoria para ella en según que aplicación). Cada vez que deseamos
leer un valor escalar, leemos en línea un texto que introduce el usuario y
obtenemos el valor escalar (numérico) con la función sscanf. Dicha función
recibe, como primer argumento, la cadena en línea; como segundo, una cadena
con marcas de formato; y como tercer parámetro, la dirección de la variable
escalar en la que queremos depositar el resultado de la lectura.
Figura
 Escritura en cadenas sprintf: Hay una función que puede simplificar
notablemente la creación de cadenas cuyo contenido se debe calcular a
partir de uno o mas valores: sprintf , disponible incluyendo la cabecera
stdio.h (se trata, en cierto modo, de la operación complementaria de sscanf
). La función sprintf se comporta como printf , salvo por un ((detalle)): no
escribe texto en pantalla, sino que lo almacena en una cadena

Asignación y copia de cadenas:


Para efectuar una copia de una cadena, has de hacerlo carácter a carácter, o en su
defecto usar las función strcpy correspondiente incluidas en <string.h>. ver anexo
11

Se Debe notar que el bucle recorre los 10 caracteres que realmente hay en original
pero, de hecho, solo se requieren copiar los caracteres que hay hasta el
terminador, incluyéndole a él. Ver anexo 12

Este sería el resultado:

Longitud de una cadena:


El convenio de terminar una cadena con el carácter nulo permite conocer
fácilmente la longitud de una cadena: ver anexo 13

Calcular la longitud de una cadena es una operación frecuentemente utilizada, así


que está predefinida en la biblioteca de tratamiento de cadenas <string.h> (strlen).
Acá un ejemplo de conteo de caracteres usando strlen (conteo de vocales
minúsculas) leída la cadena desde teclado. Ver anexo 14

Concatenación:
En C existe la posibilidad de concatenar cadenas con bucles. Este programa, por
ejemplo, pide dos cadenas y concatena la segunda a la primera: ver anexo 15

Escribamos como ejemplo "casa grande" y veamos lo que pasa:

Otras Funciones útiles para operar cadenas de caracteres.


No sólo string.h contiene funciones útiles para el tratamiento de cadenas.
En ctype.h se encuentran unas funciones que permiten hacer cómodamente
preguntas acerca de los caracteres, como si son mayúsculas, minúsculas, dígitos,
etc

Manejo de cadenas
Funciones y procedimientos de manejo de cadenas.

1. Función Concat
Además del uso de “+” para concatenación, Turbo Pascal tiene la función concat
que permite concatenar una secuencia de cadenas.
Ejemplo: Cad :=  Concat (Cad1, Cad2);
2. Función Lenght (longitud)
La función lenght proporciona la longitud lógica de una cadena de caracteres y
devuelve un valor entero.
Ejemplo:
Length (‘esto es un ejemplo’)   proporciona el valor 18
Length(“)                                                 proporciona cero (cadena vacía)
3. Función Pos (Posición)
Esta función permite determinar si una cadena está contenida en otra. La función
devuelve la posición donde comienza la cadena buscada en la cadena fuente.  Si la
cadena no existe, se devuelve el resultado 0.
Formato
Pos (cadena buscada, cadena fuente)
Ejemplo:
Ch := ‘uno dos tres cuatro cinco’;
Writeln (Pos (‘tres’, Ch));
Writeln (Pos (‘seis’, ch));

Al ejecutarse estas sentencias se visualiza


9          posición de tres
0          no existe la cadena seis
4. La función Copy (Copiar)
Esta función devuelve una cadena de caracteres (subcadena) extraída de una
cadena.
Formato
Copy (S, Posición, número)
S es una  expresión tipo cadena (fuente)
posición es la posición del primer carácter a extraer (tipo entero)
número es el total de caracteres a extraer (tipo entero)
Si posición es mayor que la longitud de S, se devuelve una cadena vacía; si
número especifica más caracteres que los indicados desde posición, sólo se
devuelve el resto de la cadena.
Ejemplo:
Ch := ‘Esto es una cadena de caracteres en español’;
Ch2 := Copy (Ch, 1, 18);
Write (Ch2)
produce la cadena de caracteres ‘Esto es una cadena’.
5. Función de conversión a mayúsculas (Upcase):
Turbo Pascal tiene una función de cadena interna, denominada Upcase, que
permite cambiar letras minúsculas a mayúsculas.  La función Upcase toma un
argumento de tipo char y devuelve la correspondiente equivalencia en mayúscula.
Si el carácter ya está en mayúscula o no tiene ningún carácter mayúscula
equivalente (números, símbolos, etc.), se devuelve el carácter sin modificar.
Formato
Upcase(s)
s debe ser un carácter, esto es, su tipo debe ser char.
Ejemplo:
Upcase (‘a’)   devuelve   ‘A’
6. El procedimiento Borrar (Delete)
Delete borra o elimina una subcadena de una cadena. Una subcadena es una
cadena contenida en otra cadena de mayor longitud.
Ejemplo: ‘Hola’ es una subcadena de ‘Hola amigos’.
Delete, en esencia, borra uno o varios caracteres de una cadena a partir de una
posición dada.
Formato
Delete (s, posición, número)
S es la  cadena.
posición es una expresión entera que indica la posición del primer carácter a
suprimir.
número es la cantidad de caracteres a suprimir (expresión entera).
Si el parámetro posición es mayor que la longitud de la cadena, no se borra ningún
carácter.  Si el parámetro número especifica más caracteres que los existentes
desde la posición inicial hasta el final de la cadena, sólo se borran tantos
caracteres como estén en la cadena.
Ejemplo:
1.         cad1:= ‘computadora’
delete(cad1, 4, 9)      { proporciona la cadena “com “, observa que sólo se
pueden borrar 8 caracteres }
7. El procedimiento Insertar (insert).
Insert inserta una subcadena en una cadena.
Formato
Insert (cad1, s, posición)
Cad1 es la cadena a insertar.
S es la cadena donde se insertará la nueva cadena.
posición es una expresión entera que indica la posición a partir de la que se
insertará la subcadena Cad1.
Ejemplos:
S:= ‘José Rodríguez’;
Insert (‘García ‘, S, 6);   produce la cadena ‘José García Rodríguez’
Si al insertar texto en una cadena, resultan más caracteres de los que pueda
contener, se trunca la cadena a su longitud máxima.
Conversiones con otros tipos de datos.
Procedimientos de conversión de números a cadenas y viceversa.
Recordemos que un número y su cadena equivalente no son intercambiables.  En
otras palabras, el entero 65 y la cadena ’65’ son dos datos diferentes.
Turbo Pascal incorpora dos procedimientos (str y val) que permiten convertir
datos numéricos a datos tipo cadena y viceversa.
8. Procedimiento Str (cadena).
Este procedimiento efectúa la conversión de un valor numérico en una cadena.
Formato
str(valor, s)
valor es una expresión numérica.
S es una cadena.
Ejemplo:
Numero := 486.45;
Str (Numero, Ch);
WriteLn (Ch);
El resultado de la última instrucción es la cadena de caracteres ‘486.45’.
9. Procedimiento Val (valor).
Este procedimiento convierte una cadena de caracteres en variable numérica.  Para
que esta conversión sea efectiva, el contenido de la cadena de caracteres debe
corresponderse a las reglas de escritura de números: ningún espacio en blanco
debe existir en primera o en última posición.
Formato
val (S, variable, código)
S es una cadena.
variable es una variable numérica de tipo entero o real.
código es una variable numérica, si la conversión ha podido ser efectuada, toma el
valor cero; en caso contrario contiene la posición del primer carácter de la cadena
S que impide la conversión y en ese caso la variable no queda definida.
Ejemplo:
Ch := ‘23.7’;
Val (Ch, Nombre, Codigo);
ifCodigo = 0
thenWriteLn (Nombre:5:1, Codigo)
elseWriteLn (Codigo)
el resultado de la ejecución de estas instrucciones es:  23.70
por el contrario, si se sustituye ch por:  Ch := ’23X.7′
la ejecución producirá la visualización de 3 (posición del carácter X).
10. Función Ord (ordinal).
Ord convierte un carácter a su correspondiente código ASCII.
Ejemplo: Ord(¨’A’) devuelve 65
11.  Función Chr (carácter). nt
Chr convierte un número e ero tipo Byte a su correspondiente carácter, con
relación al código ASCII.
Ejemplo: Chr(48) devuelve @

Declaración E

Funciones

En un programa Pascal, las funciones deben ser definidas antes del begin que indica el comienzo de
La sintaxis para definir una función es la siguiente:
function nombre_funtion;(parámetros formales);
var
{variables locales}
begin
{código de la función}
end;

Procedimientos
La sintaxis para crear un procedimiento es la siguiente:
procedure nombre_procedimiento;(parametros formales);
var
{variables locales}
begin
{cuerpo   del procedimiento}
end;

Ejemplo de un procedimiento
Program global;              {Programa principal}
Var
X:integer;                      {Definición de variables locales}
Procedure cambiar;       {Definición de procedimientos}
Begin
x:=1;                              {Cuerpo del procedimiento}
End;

begin
X:=0;
cambiar;                       {Llamar al procedimiento}  } Cuerpo del programa principal
writeln(x);
End.

PROCEDIMIENTOS Y FUNCIONES
La resolución de problemas complejos se facilita considerablemente si se dividen
en problemas mas pequeños; y la resolución de estos subproblemas se realiza
mediante subalgoritmos.

Los subalgoritmos son unidades de programa o módulos que están diseñados para
ejecutar laguna tarea específica. Éstos, constituidos por funciones o
procedimientos, se escriben solamente una vez, pero pueden ser referenciados en
diferentes puntos del programa, de modo que se puede evitar la duplicación
innecesaria del código.

El módulo principal se ejecuta en una primera instancia, que da la orden de inicio


de ejecución de los subprogramas. Puede ser ejecutado n veces. Es importante
saber que datos se van a compartir entre los programas.
El subprograma es un programa en sí mismo, ejecutado por la solicitud del
programa principal o de otro subprograma, una n cantidad de veces. Cuando
realiza la solicitud, el programa se detiene hasta que el subprograma deja de
realizar su tarea, luego continúa; esto se conoce como control de ejecución.
FUNCIONES
Una función es un subprograma que recibe, como argumentos o parámetros, datos
de tipo numérico o no numérico, y devuelve un único resultado.
Las funciones incorporadas al sistema se denominan funciones internas, o
intrínsecas; las funciones definidas por el usuario se llaman funciones externas.
El algoritmo o programa invoca la función con el nombre de esta última en una
expresión seguida de una lista de argumentos que deben coincidir en cantidad,
tipo y orden con los de la función que fue definida.
Declaración de funciones
En pseudocódigo:
SINTAXIS
Funcionnombrefun(lista de parámetros): Tipo
..
…(Declaraciones locales)
..
Hacer
..(cuerpo ejecutable de la función)

nombrefun:= <valor de la función> // 1 //
Fin Hacer
Fin Funcion
DESCRIPCIÓN
nombrefun : es el nombre indicatorio de la función.
lista de parámetros : es la lista de parámetros formales. Esta lista NO puede ser
vacía.
Tipo: es el tipo de resultado que devuelve la función.
// 1 // En el cuerpo de la función debe existir una sentencia que asigne valor
explícitamente al nombre de la función.
Para que las acciones descritas en un subprograma función sean ejecutadas, se
necesita que éste sea invocado desde un programa principal o desde otros
subprogramas a fin de proporcionarle los argumentos de entrada necesarios para
realizar estas acciones.
Invocación a las funciones
Una función definida por el usuario se llama haciendo referencia a su nombre. En
pseudocódigo:
..
… //líneas de programa//

nombrefun(lista de parámetros reales o actuales)

..
La sentencia nombrefun acompañada de los parámetros es la que inicia la
ejecución de la función. El control de ejecución lo toma la función, ejecuta
secuencialmente cada una de sus sentencias, y cuando termina de ejecutarse, le
devuelve el control al programa llamador, ejecutándose la secuencia
inmediatamente siguiente a la de la llamada. El resultado lo devuelve en el
nombre de la función; el mismo se refiere a la zona de memoria que contiene el
valor devuelto por la ejecución de la función.
Cada vez que se llama a una función desde el algoritmo principal, se establece
automáticamente una correspondencia entre los parámetros formales y los reales.
Debe haber exactamente el mismo número de parámetros reales que de formales
en la declaración de la función, y se presupone una correspondencia uno a uno de
izquierda a derecha entre los parámetros formales y reales.
Una llamada a una función implica los siguientes pasos:
1. A cada parámetro formal se le asigna el valor real de su correspondiente
parámetro actual (cabe destacar que digo “real” refiriéndome al valor
verdadero con el cual va a trabajar el subprograma, y no al tipo de dato).
2. Se ejecuta el cuerpo de acciones de la función.
3. Se devuelve el valor de la función al nombre de la función y se retorna al
punto de llamada.
PROCEDIMIENTOS
Un procedimiento es un subprograma que ejecuta una tarea determinada. Está
compuesto por un conjunto de sentencias, a las que s le asigna un nombre, o
identificador. Constituyen unidades del programa, y su tarea se ejecuta siempre y
cuando encuentre el nombre que se le asignó a dicho procedimiento.
Los procedimientos deben ser declarados obligatoriamente antes de que puedan
ser llamados en el cuerpo del programa principal. Para ser activados o ejecutados,
deben ser llamados desde el programa en que fueron declarados.
Pueden recibir cero o mas valores del programa principal que lo llama y lo activa,
y devolver cero o mas valores a dicho programa llamador.
Todo procedimiento, al igual que un programa principal, consta de una cabecera,
que proporciona su nombre y sus parámetros de comunicación; de una sección de
declaraciones locales y el cuerpo de sentencias ejecutables. Las ventajas mas
destacables de usar procedimientos son:
1. Facilitan el diseño top-down.
2. Se pueden ejecutar mas de una vez en un programa, con solo llamarlos las
veces que así desee. Con esto se ahorra tiempo de programación.
3. El mismo procedimiento se puede usar en distintos programas.
4. Su uso facilita la división de tareas entre los programadores de un equipo.
5. Se pueden probar individualmente e incorporarlos en librerías o
bibliotecas.
Declaración de procedimientos
Al igual que cualquier otra variable, los procedimientos se deben declarar dentro
del cuerpo del programa que los usa. La declaración del mismo NO indica que
debe ejecutarse ese procedimiento, sino que le indica a la computadora cuales son
las instrucciones del mismo y donde están localizadas.
VARIABLES LOCALES Y GLOBALES
Las variables utilizadas en los programas principales y subprogramas se clasifican
en dos tipos:  locales y globales.
Una variable local es una variable que está declarada dentro de un subprograma, y
se dice que es local al subprograma. Una variable local sólo está disponible
durante el funcionamiento del subprograma que la declara, y su valor se pierde
una vez que finaliza la ejecución del subprograma.
Las variables declaradas en el programa principal se llaman globales, pues pueden
ser utilizadas en el programa principal y en todos los subprogramas en él
declarados. Si existen dos variables con el mismo nombre, pero una es global y la
otra es local, dentro del subprograma tiene prioridad la variable local de igual
nombre. La variable global deja de existir cuando finaliza la ejecución del
programa.
//ERROR DE EFECTO LATERAL: Se produce al realizarse un cambio de
nombre, de naturaleza, o eliminación de una variable global, que afecta al
subprograma. Esto se logra evitar utilizando parámetros.//
COMUNICACIÓN CON SUBPROGRAMAS: PASO DE PARÁMETROS
Cuando un programa llama a un subprograma, la información entre ellos se
comunica a través de la lista de parámetros, y se establece una correspondencia
automática entre los parámetros formales y los reales.
Un parámetro es un método de pasaje de valores de variables desde el programa
principal al procedimiento y viceversa; es una variable cuyo valor debe ser
proporcionado por el programa llamador al procedimiento, o bien ser devuelto
desde el procedimiento, con un valor, hasta el programa que lo llama.
Cada subprograma tiene un encabezamiento, en el cual se indican los parámetros
formales En el momento en que un subprograma realiza la llamada a otro módulo,
se indican los parámetros reales Los parámetros reales son utilizados por el
subprograma en lugar de los parámetros formales.
Paso de parámetros
Existen diferentes métodos para el paso de parámetros a subprogramas. Es preciso
conocer el método adoptado por cada lenguaje, ya que la elección puede afectar a
la semántica del código. Los parámetros pueden ser clasificados como:
 Entradas (E): las entradas proporcionan valores desde el programa que
llama, y se utilizan dentro del procedimiento.
 Salidas (S): las salidas proporcionan los resultados del subprograma.
 Entradas/Salidas (E/S): un solo parámetro se utiliza para mandar
argumentos a un programa y para devolver resultados.
Los métodos mas empleados para realizar el paso de parámetros son:
o Paso por valor (parámetro valor)
o Paso por referencia o dirección (parámetro variable)
o Paso por nombre
o Paso por resultado
Los parámetros formales (locales al subprograma) reciben como valores iniciales
los valores de los parámetros reales, y con ellos se ejecutan las acciones descritas
en el subprograma.
Paso por valor
Son los parámetros unidireccionales, que se usan para dar información al
subprograma, pero no pueden devolver valores desde el mismo. Aunque el
procedimiento les cambie su valor, este nuevo valor no se refleja en el programa
llamador. Esto se debe a que en la llamada al subprograma, se le asigna el valor
del parámetro real a la variable que representa al parámetro formal
correspondiente, dicho de otra forma, se crea una copia del parámetro real. Todo
parámetro que NO esté calificado con la palabra reservada ref. es tomado como
parámetro valor.
Paso por referencia
Son los parámetros que están precedidos por la palabra reservada ref., que indica
que sólo reciben valor en el subprograma, o bien proporcionan valor al
subprograma y reciben un valor nuevo en el mismo. Así, todo cambio realizado
sobre los parámetros formales precedidos por “ref.”, se refleja en los parámetros
reales correspondientes. Se los considera como parámetros bidireccionales o
variables, ya que son de Entrada y/o Salida.
EFECTOS LATERALES
Las modificaciones que se produzcan mediante una función o procedimiento en
los elementos situados fuera del subprograma se denominan efectos laterales.
En procedimientos
Si un procedimiento modifica una variable global (distinta de un parámetro real),
éste es un efecto lateral. Por ello, excepto en contadas ocasiones, no debe aparecer
en la declaración del procedimiento. Si se necesita una variable temporal en un
procedimiento, se debe utilizar una variable local, no una global. Si se desea que
el procedimiento modifique el valor de una variable global, utilícela como el
parámetro real en una llamada al procedimiento.
En Funciones
Una función puede tener parámetros variables además de parámetros valor en la
lista de parámetros formales. Una función puede cambiar el contenido de una
variable global y ejecutar instrucciones de entrada/salida. Estas operaciones se
conocen como parámetros laterales, y se deben evitar.
RECURSIÓN (recursividad)
Un subprograma 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. La
escritura de un procedimiento o función recursiva es similar a sus homónimos no
recursivos; sin embargo, para evitar que la recursión continúe indefinidamente, es
preciso incluir una condición de terminación variables locales y globales.

 
 
 Las reglas de ámbito de un lenguaje son las reglas que controlan si un fragmento
de código conoce o tiene acceso a otro fragmento de código o de datos.
 
 
 Una variable local es aquella cuyo ámbito se restringe a la función que la
ha declarado se dice entonces que la variable es local a esa función. Esto
implica que esa variable sólo va a poder ser manipulada en dicha sección,
y no se podrá hacer referencia fuera de dicha sección. Cualquier variable
que se defina dentro de las llaves del cuerpo de una función se interpreta
como una variable local a esa función.
 
 Cuando una variable x es local a una función func1, significa que la
función func1 es la propietaria de dicha variable, y puede acceder a ella y
modificarla. Si cualquier otra función del programa necesita conocer el valor de la
variable x, es la función func1 la que debe transferir el valor de x a través del paso
de argumentos en la llamada a la función. Si además esta función desea modificar
el valor de dicha variable, entonces tendrá que devolver el nuevo valor a func1, y
será func1 quien se encargue de asignar el valor devuelto a su variable x.
 
  El argumento formal (los veremos en la siguiente sección) ámbito de un
argumento formal es el mismo que el de una variable local; el argumento formal
definido en la cabecera de una función sólo podrá ser accedido dentro del cuerpo
de dicha función, y no en otros lugares del programa.
 
 
 
 Una variable global es aquella que se define fuera del cuerpo de
cualquier función, normalmente al principio del programa, después de la
definición de los archivos de biblioteca (#include), de la definición de
constantes simbólicas y antes de cualquier función. El ámbito de una
variable global son todas las funciones que componen el programa,
cualquier función puede acceder a dichas variables para leer y escribir en
ellas. Es decir, se puede hacer referencia a su dirección de memoria en
cualquier parde del programa.
 
 Ejemplo: Se muestra la diferencia entre las variables locales y globales, con la
consiguiente diferenciación en los ámbitos que abarcan abarcan:
 El uso de variables globales no es aconsejable a pesar de que aparentemente nos
parezca muy útil, esto se debe a varias razones fundamentales:
 
 
Legibilidad menor.
   
Nos condiciona en muchos casos que el programa sólo sirvapara un
conjunto de casos determinados.
   
El uso indiscriminado de variables globales produce efectos
colaterales. Esto sucede cuando existe una alteración no deseada del
contenido de una variable global dentro de una función, bien por
invocación, bien por olvidar definir en la función una variable local o
un parámetro formal con ese nombre. La corrección de dichos errores
puede ser muy ardua.
 
Atenta contra uno de los principios de la programación, la
modularidad. El bajo acoplamiento supone no compartir espacios de
memoria con otras funciones, y potenciar el paso de información
(llamadas) para que la función trate la información localmente.
 
 Las variables declaradas dentro de una función son automáticas por defecto, es
decir, sólo existen mientras se ejecuta la función. Cuando se invoca la función se
crean estas variables en la pila y se destruyen cuando la función termina. La única
excepción la constituyen las variables locales declaradas como estáticas ( static ).
En este caso, la variable mantiene su valor entre cada dos llamadas a la función
aún cuando su visibilidad sigue siendo local a la función.
 
 Una función siempre es conocida por todo el programa, excepto cuando se
declara como estática, en cuyo caso sólo la podrán utilizar las funciones del
mismo módulo decompilacion 
 En C, todas las funciones están al mismo nivel de ámbito. Es decir, no se puede
definir una función dentro de otra función. Esto es por lo que C no es
técnicamente un lenguaje estructurado en bloques.
 
 También puede suceder que en un  mismo ámbito aparezcan variables  locales y
globales con el mismo nombre. Cuando sucede esta situación, siempre son las
variables locales y argumentos formales los que tienen prioridad sobre las
globales. Para ver reflejado todo esto más gráficamente se muestra un ejemplo a
continuación:
Variables Locales y Globales en C - Diferencias y ejemplo
Una variable local es aquella cuyo ámbito se restringe a la función que se declaro.
Una variable global se define fuera del cuerpo de cualquier función.
CONCLUSION
A diferencia de otros lenguajes de programación que emplean un tipo denominado
cadena string para manipular un conjunto de símbolos, en C, se debe simular
mediante un arreglo de caracteres, en donde la terminación de la cadena se debe
indicar con nulo. Un nulo se especifica como '\0'. Por lo anterior, cuando se
declare un arreglo de caracteres se debe considerar un carácter adicional a la
cadena más larga que se vaya a guardar. Por ejemplo, si se quiere declarar un
arreglo cadena que guarde una.
En programación, una cadena de caracteres, o frase (string en inglés) es una
secuencia ordenada de longitud arbitraria (aunque finita) de elementos que
pertenecen a un cierto alfabeto. En general, una cadena de caracteres es una
sucesión de caracteres (letras, números u otros signos o símbolos).
Desde un punto de vista de la programación, si no se ponen restricciones al
alfabeto, una cadena podrá estar formada por cualquier combinación finita de todo
el juego caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los
números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etc).
En este mismo ámbito (el de la programación), se utilizan normalmente como un
tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de
caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de
una sola fila (array en inglés).
Un caso especial de cadena es la que contiene cero caracteres, a esta cadena se la
llama cadena vacía
Referencias electrónicas

http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap6/cap62.htm
https://sites.google.com/site/portafoliodealgyprogdejgii/funciones-
y-procedimientos-definicion-y-declaracion
https://uniwebsidad.com/libros/algoritmos-python/capitulo-
6/operaciones-con-cadenas
https://paginadec.webcindario.com/old/cadenas-operaciones.html
https://cchtexcoco.wordpress.com/manejo-de-cadenas/
https://disenowebakus.net/variables-locales-globales.php
ANEXOS
Anexo 1

Anexo 2
Anexo 3

Anexo 4
Anexo 5

Anexo 6
Anexo 7

Anexo 8

Anexo 9
Anexo 10
Anexo 11
Anexo 12

Anexo 13
Anexo 14

Anexo 15

También podría gustarte