You are on page 1of 67

Lenguaje C

Pgina 1


Objetivo general del curso:

El alumno desarrollar algoritmos computacionales y programar en un lenguaje de programacin
estructurado.

PROGRAMA

UNIDAD I
INTRODUCCIN

1.1 Lenguajes de programacin.
1.2 Diseo de algoritmos
1.3 Diagramas de flujo
1.4 Pseudocdigo.
1.5 Resolucin de problemas.

UNIDAD II
FUNDAMENTOS BASICOS

2.1 Estructuras de control.
2.2 Identificadores, Constantes y Variables.
2.3 Operadores.
2.4 Expresiones.
2.5 Funciones de Entrada y Salida

UNIDAD III
ESTRUCTURAS DE CONTROL SELECTIVAS Y REPETITIVAS

3.1 Sentencias condicionales
3.2 Sentencias repetitivas.


UNIDAD IV
ESTRUCTURAS DE DATOS (LOS ARRAYS)

4.1 Declaracin de arreglos.
4.2 Inicializacin y acceso a elementos.
4.3Arreglos de cadenas.
4.4 Nmeros aleatorios.
4.5 Funciones matemticas.

UNIDAD V
FUNCIONES
5.1 Definicin.
5.2 Caractersticas.

Pgina 2
5.3 Valores devueltos.
5.4 Paso de argumentos.
5.5 Paso de arreglos como argumentos.







BIBLIOGRAFA:

Luis Joyanes Aguilar
Programacin en Turbo Pascal
Ed. McGraw Hill.

Luis Joyanes Aguilar, Luis Rodrguez Baena, Matilde Fernndez Azuela
Fundamentos de programacin
Ed. McGraw Hill

Aprenda Turbo C
Jess Prez Reynoso
Ed.

Como programar en C++
H.M. Deitel / P.J. Deitel
Ed. Prentice Hall

Curso de programacin con C
Fco. Javier Ceballos
Ed. Macrobit / Ra-ma

Aprendiendo Borland C++ 5 en 21 das
Craig Arnush
Ed. Prentice Hall

Lenguaje C


Pgina 3
Unidad .

INTRODUCCIN

LENGUAJES DE PROGRAMACIN
Los lenguajes utilizados para escribir programas de computadoras que puedan ser entendidos por
ellas se denominan lenguajes de programacin.
Los lenguajes de programacin se califican en tres grandes categoras: lenguaje mquina, de bajo
nivel (ensamblador) y alto nivel.
Lenguaje mquina.- Son aquellos cuyas instrucciones son directamente entendibles por la
computadora y no necesitan traduccin posterior para que la Unidad Central de Proceso (UCP) pueda
comprender y ejecutar el programa. Las instrucciones en lenguaje mquina se expresan en trminos de la
unidad de memoria ms pequea, que es el bit (dgito binario 0, o bien 1), en esencia de bits que especifican
la operacin y las celdas de memoria implicadas en una operacin. Una serie de instrucciones en lenguaje
mquina son:
0010 0000 0000 1001
1001 0001 1001 1110
Como se puede observar, estas instrucciones sern fciles de leer por la computadora y difciles
para un programador. Esta razn hace difcil escribir programas en cdigo o lenguaje mquina y requiere
buscar otro lenguaje para comunicarse con la computadora, pero que sea ms fcil de escribir y leer por el
programador. Para evitar la tediosa tarea de escribir programas en lenguaje mquina se han diseado otros
lenguajes de programacin que facilitan la escritura y posterior ejecucin de los programas. Estos
lenguajes son los de bajo y alto nivel.
Lenguajes de bajo nivel (ensambladores).- La programacin en lenguaje mquina es difcil, por
ello se necesitan lenguajes que permitan simplificar este proceso. Los lenguajes de bajo nivel han sido
diseados para este fin.
Estos lenguajes son generalmente dependientes de la mquina, es decir, dependen de un conjunto
de instrucciones especficas de la computadora. Un lenguaje tpico de bajo nivel es el lenguaje
ensamblador. En este lenguaje las instrucciones se escriben en cdigos alfabticos conocidos como
nemotcnicos (abreviaturas de palabras inglesas o espaolas). As por ejemplo nemnicos tpicos Son:
ADD suma MPY multiplicar LDA cargar acumulador
SUB resta DIV dividir STO almacenar
Las palabras nemticas son mucho ms fciles de recordar que las secuencias de dgitos 0 y 1. Una
instruccin tpica en ensamblador puede ser:
ADD x,y,z
Esta instruccin significa que se deben sumar los nmeros almacenados en las direcciones x y y y
almacenar el resultado en la direccin z. El programa ensamblador traducir la instruccin a cdigo
mquina. Por ejemplo ADD se puede traducir a 1110, x se puede traducir por 1001, y por 1010, z por 1011.
La instruccin traducida sera:
1

Pgina 4
1110 1001 1010 1011 (ADD x,y,z)
Despus que un programa ha sido escrito en lenguaje ensamblador se necesita un programa llamado
ensamblador- que lo traduzca a lenguaje mquina.
Lenguaje de alto nivel. Los lenguajes de programacin de alto nivel (ADA, BASIC, FORTRAN,
Modula-2, Pascal, etc.) son aquellos en los que las instrucciones o sentencias a la computadora son escritas
con palabras similares a los lenguajes humanos (en general el lenguaje ingls como es el caso de C++ ), lo
que facilita la escritura y la fcil comprensin por el programador.
Por ejemplo, las lneas siguientes son una lnea de un programa en C++ y su lnea equivalente en
preudocdigo:
If (x==y) and (z==w) printf (Esto es una prueba);
si (x=y) y (z=w) escribir (Esto es una prueba)
Esta lnea se puede comprender fcilmente conociendo la traduccin de las palabras inglesas if (si)
and (y) printf (escribir/imprimir) y sin necesidad de mucha explicacin. Es posible escribir tambin
operaciones como:
z = x + y; la suma de x mas y se asigna a la variable z
Los lenguajes de programacin son en general transportables. Esto significa que un programa
escrito en un lenguaje de alto nivel se puede escribir con poca o ninguna modificacin en diferentes tipos
de computadoras. Otra propiedad de estos lenguajes es que son independientes de la mquina, esto es, las
sentencias del programa no dependen del diseo hardware de una computadora especfica.
Los programas escritos en lenguaje de alto nivel no son entendibles directamente por la mquina.
Necesitan ser traducidos a instrucciones en lenguaje mquina que entiendan las computadoras. Los
programas que realizan esta traduccin se llaman compiladores, y los programas escritos en un lenguaje de
alto nivel se llaman programas fuente. El compilador traduce el programa fuente en un programa llamado
programa objeto. Este programa objeto se utiliza en la fase de ejecucin del programa. El proceso de
traduccin de un programa fuente se denomina compilacin y tras la fase de enlace se obtiene un
programa ejecutable directamente por la computadora.
DISEO DE ALGORITMOS.
En el proceso de resolucin de problemas por medio de una computadora conduce a la escritura de
un programa y a su ejecucin en la misma. Aunque el proceso de disear programas es esencialmente un
proceso creativo, se pueden considerar una serie de fases o pasos comunes, que generalmente deben seguir
todos los programadores. Las fases de resolucin de un problema con computadoras son:
Anlisis del problema
Diseo del algoritmo
Codificacin
Compilacin y ejecucin.
Verificacin.
Depuracin.
Documentacin.
Lenguaje C


Pgina 5
Las dos primeras fases conducen a un diseo detallado escrito en forma de algoritmo. Durante la
tercera etapa se implementa el algoritmo en un cdigo escrito en un lenguaje de programacin, reflejando
las ideas desarrolladas en las fases de anlisis y diseo.
La fase de compilacin y ejecucin traduce y ejecuta el programa. En las fases de verificacin y
depuracin el programador busca errores de las etapas anteriores y los eliminara. Comprobar que
mientras ms tiempo se gaste en la fase de anlisis y diseo, menos tiempo se gastar en la depuracin del
programa. Por ltimo, se debe realizar la documentacin del programa.
Un algoritmo es un mtodo para resolver un problema mediante una serie de pasos precisos, definidos y
finitos. En resumen todo algoritmo debe ser:
Preciso.- Indicar el orden de realizacin de cada paso.
Definido.- Si se siguen dos veces o ms, se debe obtener el mismo resultado cada vez.
Finito.- Debe tener un fin, es decir un nmero determinado de pasos.
Ejemplos de algoritmos son: instrucciones para hacer una receta de cocina, obtener el mximo
comn divisor de dos nmeros, etc. Los algoritmos se pueden expresar por medio de diagramas de flujo
o pseudocdigos. Esta ltima representacin es la mas utilizada en lenguajes estructurados como el
caso de C++.
Anlisis del problema.- La primera fase de la resolucin de un problema por medio de la
computadora es el anlisis del problema. Esta fase requiere una clara definicin, donde se contemple
exactamente lo que debe hacer el programa y el resultado o solucin deseada.
Dado que se busca una solucin por computadora, se precisan especificaciones detalladas de
entrada y salida.
Para poder definir bien un problema es conveniente responder a las siguientes preguntas:
Qu entradas se requieren? (tipo y cantidad)
Cul es la salida deseada? (tipo y cantidad)
Qu mtodo produce la salida deseada?
Por ejemplo, se desea obtener una tabla con las depreciaciones acumuladas y los valores reales de
cada ao, de un automvil comprado en $166,000.00 en el ao 2005, durante los seis aos siguientes
suponiendo un valor de recuperacin o rescate de $58,000.00. Realizar el anlisis del problema, conociendo
la formula de la depreciacin anual constante D para cada ao de vida til.
Costo Valor de recuperacin 166000 -58000 108000
D= = = = 18000
Vida til 6 6
Datos de Entrada:
Costo original
Vida til
Valor de recuperacin
Datos de Salida:
Depreciacin anual por ao
Depreciacin acumulada en cada ao

Pgina 6
Valor del automvil en cada ao
Proceso:
Depreciacin acumulada
Calculo del automvil en cada ao
La tabla siguiente muestra la salida solicitada:
Ao Depreciacin Dep. Acumulada Valor Anual
1 (2005) 18000.00 18000.00 148000.00
2 (2006) 18000.00 36000.00 130000.00
3 (2007) 18000.00 54000.00 112000.00
4 (2008) 18000.00 72000.00 94000.00
5 (2009) 18000.00 90000.00 76000.00
6 (2010) 18000.00 108000.00 58000.00

Diseo del algoritmo:
En la etapa de anlisis del proceso de programacin se determin qu hace el programa. En la etapa
de diseo se determinar como hace el programa la tarea solicitada. Los mtodos ms eficaces son el
diagrama de flujo y el pseudocdigo.
DIAGRAMA DE FLUJO.
Los diagramas de flujo se utilizan tanto para la representacin grfica de las operaciones
ejecutadas sobre los datos a travs de todas las partes de un sistema de procesamiento de informacin,
diagrama de flujo del sistema, como para la representacin de la secuencia de pasos necesarios para
describir un procedimiento particular, diagrama de flujo de detalle. En la actualidad se siguen usando los
diagramas de flujo del sistema, pero ha decado el uso de los diagramas de lujo de detalle al aparecer oros
mtodos de diseo estructurado ms eficaces para la representacin y actualizacin de los algoritmos. Los
diagramas de flujo de detalle son, no obstante, uno de nuestros objetivos prioritarios y, a partir de ahora,
los denominaremos simplemente diagrama de flujo.
El diagrama de flujo utiliza unos smbolos normalizados, con los pasos del algoritmo escritos en el
smbolo adecuado y los smbolos unidos por flechas, denominados lneas de flujo, que indican el orden en
que los pasos deben ser ejecutados. Los smbolos principales se muestran a continuacin:
Lenguaje C


Pgina 7











Resulta necesario indicar dentro de los smbolos la operacin especfica concebida por el
programador. Como ejemplo considere un diagrama de flujo bsico, que represente la secuencia de pasos
necesarios para que un programa lea una temperatura en grados centgrados y calcule y escriba su valor en
grados kelvin.











PSEUDOCODIGO.
El pseudocodigo es un lenguaje de especificacin de algoritmos que utiliza palabras reservadas y
exige la identacin, o sea, sangra en el margen izquierdo, de algunas lneas. En nuestros pseudocodigos
usaremos determinadas palabras en espaol como palabras reservadas. El pseudocodigo se concibi para
superar las dos principales desventajas del diagrama de flujo: lento de crear y difcil de modificar sin un
nuevo redibujo. Es una herramienta muy buena para el seguimiento de la lgica de un algoritmo y para
transformar con facilidad los algoritmos a programas, escritos en un lenguaje de programacin especfico.
El pseudocodigo comenzar siempre con la palabra inicio y terminar con la palabra fin. Cuando se
coloque un comentario de una sola lnea se escribir precedida de //. Si el comentario es multilnea lo
pondremos entre /* y */. Para introducir un valor o serie de valores desde el dispositivo estndar y
Inicio y fin del algoritmo
Proceso
Entrada / Salida
Decisin
inicio
Leer
(Celsius)
Kelvin celsius
+ 273.15
Escribir
(kelvin)
fin

Pgina 8
almacenarlo en una o varias variables utilizaremos leer(<lista de variables>). Con <nombre_de_variable
<expresin> almacenamos en una variable el resultado de evaluar una expresin. Hay que tener en cuenta
que una nica constante, variable o funcin, constituyen una expresin. Para imprimir en el dispositivo
estndar de salida una o varias expresiones emplearemos escribir(<lista_de_expresiones).
Las distintas estructuras de control se representarn de la siguiente manera:
Decisin simple:
si <condicin>
<acciones1>
fin_si
Decisin doble:
si <condicin>
<acciones1>
si-no
<acciones2>
fin-si
Decisin mltiple:
segun_sea <expresin ordinal> hacer
<lista_de_valores_ordinales : <acciones1>
.
[si_no // El corchete indica opcionalidad
<accionesN>
fin_segun_sea
Repetitivas:
mientras <condicion>
<acciones>
fin_mientras
repetir
<acciones>
hasta_que <condicion>
desde variablevalor inicial hasta <v_final> incremento | decremento
<acciones>
fin_desde

inicio, fin, leer, escribir y las palabras que aparecen en negritas en las distintas estructuras se
consideran palabras reservadas y no debern utilizarse en su lugar otras similares. El ejemplo ya citado que
transforma grados Celsius en Kelvin, escrito en pseudocodigo quedara de la siguiente forma:

inicio
leer(celsius)
kelvin celsius + 273.15
Lenguaje C


Pgina 9
escribir (kelvin)
fin

RESOLUCIN DE PROBLEMAS
1.- Escribir un algoritmo en diagrama de flujo y pseudocodigo para determinar el mximo comn
divisor de dos nmeros enteros por el algoritmo de Euclides.
Anlisis del problema:
Datos de salida: mximo comn divisor
Datos de entrada: dos nmeros enteros (a, b)
Datos auxiliares: resto
Para hallar el mximo comn divisor de dos nmeros se debe dividir uno entre otro. Si la divisin es
exacta, es decir si el resto es cero, el mximo comn divisor es el divisor. Si no, se deben dividir otra vez
los nmeros, pero en este caso el dividendo ser el antiguo divisor y el divisor el resto de la divisin
anterior. El proceso se repetir hasta que la divisin sea exacta.
Para disear el algoritmo se deber crear un bucle o ciclo que se repita mientras que la divisin no
sea exacta. Dentro del bucle se asignarn nuevos valores al dividendo y al divisor.













2.- Disear un algoritmo en diagrama de flujo y pseudocodigo que lea e imprima una serie de
nmeros distintos de cero. El algoritmo debe terminar con un valor cero que no se debe imprimir.
Finalmente se desea obtener la cantidad de valores ledos distintos de cero.
Restoa mod b
a b
b resto
mcd b
escribir
(mcd)
fin
a mod b <> 0
Leer (a,b)
inicio
no
si
Pseudocodigo:

inicio
leer (a,b)
mientras a mod b <> 0
resto a mod b
a b
b resto
fin_mientras
mcd b
escribir (mcd)
fin

Pgina 10




















3.- Disear un algoritmo en diagrama de flujo y pseudocodigo que sume la serie de nmeros
3,6,9,12, ,99.
4.- Escribir un algoritmo en diagrama de flujo y pseudocodigo que lea cuatro nmeros y a
continuacin escriba cual es el mayor de todos.
5.- Disear un algoritmo en diagrama de flujo y pseudocodigo para calcular la velocidad en metros /
segundo de los corredores de una carrera de 1500 metros. La entrada sern parejas de nmeros (minutos,
segundos) que darn el tiempo de cada corredor. Por cada corredor se imprimir el tiempo en minutos y
segundos, as como la velocidad media expresada en Kilmetros / hora. El bucle se ejecutar hasta que
demos una entrad de 0,0 que ser la marca de fin de dtos.
6.- Disear un algoritmo en diagrama de flujo y pseudocodigo para determinar si un numero n es
primo (un nmero primo slo es divisible por l mismo y por la unidad).
7.- Disear un algoritmo en diagrama de flujo y pseudocodigo que calcule la superficie de un
triangulo en funcin de la base y la altura.
cont 0
inicio
leer (num)
num <> 0?
escribir (num)
cont cont + 1
leer (num)
escribir (cont)
fin
no
si
Pseudocodigo:

inicio
cont 0
leer (num)
mientras num <> 0
escribir (num)
cont cont + 1
leer (num)
fin_mientras
escribir (cont)
fin
Lenguaje C


Pgina 11
Unidad .

FUNDAMENTOS BSICOS

ESTRUCTURAS DE CONTROL.

Cada lenguaje tiene sus propias herramientas de trabajo que lo identifican por sus habilidades y
que le permiten realizar diversas tareas de programacin. Para poder utilizar estas herramientas, es
necesario conocer las reglas que las rigen.
El lenguaje de programacin de Borland C++, tiene una caracterstica especial en cuanto a su
filosofa, y que es la base para el desarrollo de cualquier programa, esta caracterstica es que Borland C++
est basado en el desarrollo de funciones, es decir cada uno de los mdulos deber estar encerrado dentro
de una funcin, as sea el programa principal. Tomando esto en consideracin y explorando el entorno de un
programa en C, observaremos que la primera funcin que debemos declarar es la funcin main( ). En
seguida se muestra el formato general de un programa en Borland C++:

declaraciones globales;
main( )
{
variables locales;
secuencia de sentencias;
}
funcion_1( )
{
variables locales;
secuencia de sentencias;
}
funcion_2( )
{
variables locales;
secuencia de sentencias;
}
.
.
funcion_n( )
{
variables locales;
secuencia de sentencias;
}

Como podr observarse, existen declaraciones que se pueden utilizar en todo el programa como es
el caso de las declaraciones globales que se pueden utilizar en la funcin main( ) y el resto de funciones
declaradas. Las declaraciones realizadas en cada una de las funciones tendr validez slo dentro de la
funcin que lo declar.
2

Pgina 12
Para iniciar las operaciones dentro de una funcin se deber insertar la llave que se abre {, y para
terminar la funcin se deber insertar la llave que se cierra }. Cabe mencionar que estas llaves se utilizan
para delimitar bloques de sentencias en algunas instrucciones de Borland C++.

IDENTIFICADORES, VARIABLES Y CONSTANTES.

Los identificadores son aquellos que se utilizan para referirse a las variables, las funciones,
etiquetas y tipos de datos definidos por el usuario.
Los nombres de los identificadores pueden contener letras, nmeros y el smbolo (_). El primer
carcter, deber ser siempre una letra o el smbolo de subrayado y los siguientes caracteres ya podrn ser
letras, nmeros o subrayado. La longitud de los identificadores puede variar desde 1 hasta 32 caracteres.
Los identificadores son sensibles a maysculas y minsculas en C++. Por lo tanto, los nombres OPCION,
opcion y Opcion se refieren a tres identificadores diferentes. Los identificadores no pueden ser palabras
reservadas, como int, double, switch, por nombrar algunas cuantas.

Tipos de datos.- Existen cinco tipos de datos bsicos en Borland C++. Estos son: carcter (char),
entero (int), coma flotante (float), coma flotante de doble precisin (double) y sin valor (void).
El tipo char acepta valores definidos en el conjunto de caracteres ASCII as como cualquier
cantidad de 8 bits (es decir que se pueda tener un control de los bits dentro del byte).
El tipo int acepta valores enteros en el rango de -32768 a 32767, es decir cubre rangos de
nmeros positivos y negativos.
El tipo float y double aceptan valores reales (contienen una parte entera y una fraccionaria) y sus
rangos de valores son: 3.4E-38 a 3.4E+38 para float y 1.7E-308 a 1.7E+308 para double.
El tipo void tiene dos usos:
1 Declarar explcitamente una funcin que no devuelve valor.
2 Declarar explcitamente una funcin sin parmetros.

A los tipos de datos existentes se les puede colocar un modificador para alterar su dominio y de
esta manera ajustarlo a determinadas necesidades. Especficamente lo que se obtiene es modificar el
rango de valores que el tipo de dato tiene como base.
Con excepcin del tipo void, al resto de tipos de datos bsicos se les puede agregar un modificador.
Los modificadores que se pueden aplicar son los siguientes:

- signed (signo) - Unsigned (sin signo)
- long (largo) - short (corto)

A continuacin se presenta una tabla con todos los tipos de datos bsicos, as como su
interpretacin con modificadores:
Lenguaje C


Pgina 13

tipo Tamao en bits Rango
char 8 -128 a 127
unsigned char 8 0 a 255
int 16 -32768 a 32767
unsigned int 16 0 a 65535
short int 16 -32768 a 32767
unsigned short int 16 0 a 65535
long int 32 -2147483648 a 2147483647
float 32 3.4E-38 a 3.4E+38
double 64 1.7E-308 a 1.7E+308
long double 64 1.7E-308 a 1.7E+308

Variables.- Una variable es el elemento en el cual se almacena informacin y la cual se puede
modificar a lo largo del programa. Es decir que su contenido puede ser variable y as poderse modificar en
cualquier parte del programa.
Las variables se accesan por medio del identificador con el que se declar y la informacin que se
puede almacenar en el, deber ser compatible con el tipo de dato con el que se haya declarado.
Esto quiere decir que las variables a utilizar debern estar compuestas por un identificador y un
tipo de dato, mismos que ya se han definido en la seccin anterior.

Declaracin de variables.- Antes de utilizar una variable dentro del programa, se deber
declarar la misma. Para poder declarar una variable se deber seguir el siguiente formato general:

tipo_de_dato lista_de_variables;

Tipo_de_dato = Un tipo de dato vlido (int, char, float, etc.).
Lista_de_variables = Uno o ms nombres de identificadores separados por comas.

Nota: Debe utilizar nombres descriptivos para las variables. Si emplea continuamente nombres de
una sola letra para las variables, tendr momentos difciles imaginndose lo que quiso decir, si es que tiene
que regresar al cdigo. No Debe declarar variables dentro de la misma unidad de programa con nombres
diferentes en maysculas y minsculas (como Opcion y opcion).

Listado cdigo fuente del programa var.cpp
//programa de C++ que ilustra variables sencillas

#include <iostream.h>
#include <stdio.h>

int main()
{
int i, j = 2;
double x, y = 355.0 / 113;

i = 3 * j;
cout << i = << i << \n;
cout << j = << j << \n;


Pgina 14
x = 2 * y;
x = x * x;
cout << y = << y << \n;
cout << x = << x << \n
return 0;
}

Como se vio en el formato general de un programa, existen dos reas dentro de la forma general de
un programa en C++; estas reas las podemos situar o identificar como rea de declaraciones globales y
rea de declaraciones locales. Las declaraciones globales son todas aquellas que se realizan fuera de las
funciones y las locales, las que se hacen dentro de las funciones.
Teniendo lo anterior presente, podemos clasificar las variables como variables globales y locales,
mismas que cubren las siguientes caractersticas:


Variables Globales:
Se declaran fuera de las funciones.
Tienen validez en cualquier parte del programa (incluso dentro de las funciones, siempre y
cuando no se haya declarado la misma variable como local).
Mantiene su valor durante toda la ejecucin del programa.

Variables Locales:
Se declaran dentro de las funciones.
Tienen validez nicamente dentro de la funcin que la declara.
Al terminar de ejecutarse la funcin, estas se destruyen.

Nota: Si una variable global y una variable local tienen el mismo nombre, todas las referencias a
ese nombre de variable dentro de la funcin donde se ha declarado la variable local, se refiere a esa
variable local y no tiene efecto sobre la variable global.
Nota: No se pueden declarar dos variables globales o dos variables locales con el mismo
identificador. Pero s se pude declarar una variable global y una variable local con el mismo identificador,
con la interpretacin de la nota anterior.

Constantes.- Las constantes son aquellas que almacenan valores que permanecern fijos a lo largo
del programa, es decir que no pueden ser alterados y pueden ser de cualquier tipo de datos. Su formato es
el siguiente:

const lista_de_variables_constantes;

const = Definicin de constantes
lista_de_variables_constantes = lista {identificador = constante } separados por coma.
Constante = valor a asignar.

Las constantes son identificadores asociados a valores fijos. C++ proporciona constantes en dos
variedades: basadas en macros y formales. Las formales son aquellas que se declaran en la forma indicada
anteriormente y las constantes basadas en macros se heredaron de C y usa la directiva #define.

Lenguaje C


Pgina 15
Consideremos un ejemplo de constantes que se basan en constantes formales y constantes basadas
en macros. El siguiente listado muestra el cdigo fuente del programa const1.cpp, el cual le indica que
teclee la cantidad de horas, minutos y segundos a partir de la media noche. Luego el programa calcula y
despliega el total de segundos desde media noche.

Listado cdigo fuente del programa const1.cpp
// programa C++ que ilustra constantes

#include <iostream.h>
#include <stdio.h>

#define seg_en_min 60 //constante basada en macro

int main()
{
const int min_en_hor = 60; //constante formal

long horas, minutos, segundos, totalseg;

cout << Ingrese las horas ;
cin >> horas;
cout << Ingrese los minutos ;
cin >> minutos;
cout << Ingrese los segundos ;
cin >> segundos;

totalseg = ((horas * min_en_hor + minutos) * seg_en_min + segundos);

cout << \n\n << totalseg << Segundos desde la medianoche;
return 0;
}


OPERADORES.

Un operador es un smbolo que indica que se debern llevar a cabo ciertas manipulaciones
matemticas o lgicas con uno o dos operandos.
En Borland C++ existen tres clases de operadores: Operadores Aritmticos, Relacionales y
Lgicos, y de Manipulacin de Bits. Adicional a estas tres clases que son los tradicionales, existen
operadores de asignacin y otros operadores de propsito especial.

Operadores Aritmticos.- A continuacin se presentan los operadores aritmticos que se pueden
utilizar en Borland C++:

Operador Accin
+ Suma
- Resta
* Multiplicacin
/ Divisin
% Mdulo
-- Autodecremento
++ Autoincremento

Pgina 16

Al usar estos operadores, observe los siguientes comentarios:
- Cuando se utiliza el operador (/) con enteros o carcter, el resto de la divisin es truncado. As el
resultado de 8/3 ser 2.
- El operador mdulo al igual que en otros lenguajes, nos dar como resultado el resto de la divisin
entera. Por ello % no puede aplicarse a los tipos de coma flotante.
Los operadores de autodecremento y Autoincremento se vern con ms detalle en una seccin
posterior a esta.
Veamos un ejemplo que usa operadores matemticos con nmeros enteros y de punto flotante. El
siguiente listado muestra el cdigo fuente del programa oper1.cpp, el cual solicita que ingrese dos nmeros
enteros y aplica los operadores +, -, * , / y % a los enteros guardando el resultado en variables separadas y
despliega los resultados de las operaciones de enteros. Posteriormente solicita dos nmeros de punto
flotante y realiza operaciones similares a las de nmeros enteros.

Listado cdigo fuente del listado del programa oper1.cpp
// programa C++ sencillo para ilustrar las operaciones matemticas sencillas

#include <iostream.h>
#include <stdio.h>

int main()
{
int entero1, entero2;
long largo1, largo2, largo3, largo4, largo5;
float x, y, real1, real2, real3, real4;

cout << \n << Teclee el primer entero ;
cin >> entero1;
cout << \n << Teclee el segundo entero ;
cin >> entero2;
cout << \n;
largo1 = entero1 + entero2;
largo2 = entero1 entero2;
largo3 = entero1 * entero2;
largo4 = entero1 / entero2;
largo5 = entero1 % entero2;
cout << entero1 << + << entero2 << = << largo1 << \n;
cout << entero1 << << entero2 << = << largo2 << \n;
cout << entero1 << * << entero2 << = << largo3 << \n;
cout << entero1 << / << entero2 << = << largo4 << \n;
cout << entero1 << % << entero2 << = << largo5 << \n;
cout << \n\n;
cout << Teclee el primer numero real ;
cin >> x;
cout << Teclee el segundo numero real ;
cin >> y;
cout \n;
real1 = x + y;
real2 = x y;
real3 = x * y;
real4 = x / y;
cout << x << + << y << = << real1 << \n;
cout << x << << y << = << real2 << \n;
cout << x << * << y << = << real3 << \n;
Lenguaje C


Pgina 17
cout << x << / << y << = << real4 << \n;
return 0;
}


Operadores lgicos y relacionales.- Una operacin lgica y una operacin relacional dan como
resultado un valor booleano (es decir falso o verdadero), los operadores lgicos, tiene operandos lgicos o
expresiones cuyo resultado es lgico. Con los operadores relacionales se comparan cantidades, de la cual se
obtiene un resultado lgico (Cierto o Falso).
La siguiente tabla muestra los operadores lgicos y relacionales que se pueden utilizar en Borland
C++:

Operador lgico Accin
&& And (Y)
|| Or (O)
! Not (No)

Operador relacional Accin
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual
!= No igual

Nota: Los operadores lgicos y relacionales tienen como base la idea de Cierto y Falso. En Borland
C++, Cierto es cualquier valor distinto de cero y Falso es cero. No use el operador = como operador
relacional de igualdad. Este error comn es el origen de errores lgicos en un programa C++. En C++ debe
usar el operador ==.

Operadores de asignacin.- El operador de asignacin esencial de Borland C++ es el smbolo igual
(=) y por medio de este asignamos valores a una variable. Este operador de asignacin tiene abreviaturas en
Borland C++, que facilitan la escritura de los programas. El uso de estas abreviaturas se pueden utilizar con
los operadores binarios (es decir los que necesitan dos operandos) aritmticos y de manipulacin de bits.
Para explicar estas abreviaturas se muestra enseguida una asignacin comn y su correspondiente
abreviatura:

Asignacin tradicional Abreviatura
a = a * 29 a * = 29
c = c - 1 c - = 1
tot = tot + c tot + = c

Autoincremento y Autodecremento.- Entre los operadores verstiles que tiene implementado
Turbo C++, se encuentran los operadores de autoincremento (++) y Autodecremento (--), estos operadores
incrementan o decrementan en un solo operando lo que este utilizando y equivale a escribir una operacin
de contador ascendente o descendente.

Pgina 18
Si deseamos incrementar en uno la variable x, esto se hace de la siguiente manera, en forma tradicional:
x=x+1, y si deseamos decrementar x=x-1; esto se puede sustituir por la operacin x++ y x--
respectivamente.


Listado cdigo fuente del listado del programa oper2.cpp
// programa C++ sencillo para ilustrar las operaciones matemticas de
// asignacin.

#include <iostream.h>
#include <stdio.h>

int main()
{
int i, j;
double x, y;

cout << Teclee el primer entero: ;
cin >> i;
cout << Teclee el segundo entero: ;
cin >> j;
i += j;
j -= 6;
i *= 4;
j /= 3;
i++;
j--;
cout << i = << i << \n;
cout << j = << j << \n;

cout << Teclee el primer nmero real ;
cin >> x;
cout << Teclee el segundo nmero real ;
cin >> y;
// En C++ las asignaciones abreviadas tambin funcionan con dobles
x += y;
y -= 4.0;
x *= 4.0;
y /= 3.0;
x++;
y--;
cout << x = << x << \n;
cout << y = << y << |n;
return 0;
}


Procedencia de operadores.- Los operadores que se han visto, tienen prioridad para poder
determinar quien se evala antes que otro, esta procedencia de los operadores se presenta en la siguiente
tabla:

Mayor prioridad ( )
! ++ --
* / %
Lenguaje C


Pgina 19
+ -
< <= > >=
== !=
&&
||
Menor prioridad = += -= *= /=

EXPRESIONES.

Una expresin es cualquier combinacin valida cuyo componente son los operadores, constantes y
las variables. Las siguientes son expresiones:

x/2 a+b/3 c/4*(20-c) r+30-2*y a+b

Moldes.- Un molde, es la convencin arbitraria de una expresin para que se evale segn el tipo
de dato determinado. El formato de un molde es el siguiente:

(tipo) expresin

tipo = Cualquier tipo de datos valido (int, float,..)

por ejemplo: (double) s/5 se forza a que la expresin s/5 se evale como double.

Palabras reservadas.- Todo lenguaje de programacin, tiene un conjunto de palabras que define
previamente y que constituyen la base de las sentencias, funciones, expresiones y ordenes que forman un
programa. En el caso de Borland C++, estas palabras reservadas se presentan en seguida:

auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

Todas las palabras reservadas de Borland C++, estn en minsculas, de tal forma que ELSE no es
una palabra reservada.
Nota: Una palabra reservada NO debe ser utilizada para otro propsito en un programa, NO debe
servir como variable o como funcin.

Biblioteca de Borland C++.- Una de las caractersticas que resaltan a Borland C++, es su biblioteca
de funciones estndar, la cual es diversa y se conforma de implementaciones ANSI, UNIX y TURBO C.
La biblioteca estndar de Borland C++ define un conjunto de funciones grande y diversificado,
donde muchas de estas interactan con el sistema operativo.
Las funciones que se encuentran en la biblioteca de Borland C++, trabajan con sus propios tipos de
datos y variables, a los que el programa deber acceder. Estas variables y tipos de datos estn definidos

Pgina 20
en archivos llamados de CABECERA, que se proporcionan con el compilador y que deben de incluirse
(utilizando la directiva #include) en los programas que utilicen las funciones de la biblioteca de Borland
C++. Estas cabeceras tienen la extensin .h y cada cabecera contiene funciones o definiciones, mismas que
se podrn acceder en el programa que las incluya.
Una cabecera se incluye en el programa aadiendo la directiva #include y el archivo de cabecera,
de la siguiente forma:

#include encabezado
o
#include <encabezado>

Si el archivo est entre comillas, primero se busca en el directorio actual, en caso de que no se
encuentre, se busca en los directorios especificados en el entorno integrado (options, directories o include
directories del men principal del editor).
Si el archivo est entre ngulos < >, se busca en los directorios especificados en el entorno
integrado (options, directories o include directories del men principal del editor) pero no se busca en el
directorio actual.
Se puede especificar la ruta donde se encuentra el archivo en forma explcita, al introducir el
nombre. Por ejemplo:

#include c:\tc\include\stdio.h

Sentencias en Borland C++.- Una sentencia es una instruccin que se escribe en el programa y
que indica las tareas que se van a realizar. Consta de una o mas palabras reservadas (por ejemplo: case,
for, if,...) o funciones (por ejemplo: printf, delline, clrscr) y esta normalizado por una sintaxis que describe
la forma en la que se deber implementar correctamente la instruccin.
En estos apuntes, las definiciones de las sentencias se representarn por medio de letras bold y la
sintaxis en bold itlica como en el siguiente ejemplo:

int putch (int c,FILE *pa);

la sentencia es putch y el resto es la sintaxis de esta funcin.

Separador de sentencias ; Para separar las sentencias, se utiliza el carcter punto y coma (;), de
esta manera se puede escribir mas de una sentencia en una misma lnea, sin embargo tambin es posible
escribir una sentencia en varias lneas, cuidando de no dejar instrucciones o cadenas de caracteres
incompletas en una lneas.

Comentarios.- Los comentarios se debern colocar entre los caracteres /* y */. Todo lo que se
encuentre como comentario no se incluir como parte del programa al compilar este, de tal manera que se
pueden utilizar comentarios que abarquen varias lneas e inclusive pginas, sin que el tamao del archivo
objeto que se obtiene se incremente.
Cada inicio de comentario /* deber tener un fin de comentario */. NO debern utilizarse
comentarios anidados, es decir que dentro de un comentario no debe de haber otro comentario.
Lenguaje C


Pgina 21
Otra manera de presentar comentario exclusivamente en Borland C++ es utilizando el doble
diagonal (//) al principio de la lnea, teniendo el cuidado de antepones estos caracteres por cada lnea del
comentario que se est realizando.

Bloques de cdigo { }.-El programa principal de un programa en C++, que est contenido dentro de
la funcin main( ), est delimitada por las llaves { }.
El hecho de utilizar estas llaves en la funcin principal, no implica que solo en esta se pueda
implementar, sino que es la base sobre la cual se apoya Borland C++ para agrupar sentencias dentro de
bloques. Estas llaves, entonces, indican que lo encerrado ah, puede interpretarse como un bloque de
sentencias. Estas llaves son indispensables para los siguientes casos:
Para indicar el principio y el final de una funcin, como el caso de la funcin main( ).
Cuando una instruccin necesite agrupar ms de una sentencia.
Se pueden utilizar estas llaves con una sola instruccin an cuando no es necesaria encerrarla entre
llaves, salvo en casos especiales que posteriormente se analizarn.

La directiva #define.- La directiva #define se utiliza para definir un identificador y una cadena,
misma que ser sustituida por el identificador cada vez que se encuentre en el archivo fuente. Al
identificador se le denomina nombre de macro y al proceso de reemplazamiento sustitucin de macro.
El formato de esta directiva es:

#define nombre_de_macro cadena

nombre_de_macro = Es el identificador.
cadena = Contenido por el que reemplazar el identificador en el programa en el momento de compilar el
mismo.
A continuacin se presenta un ejemplo en donde se hace uso de la directiva #define:

#define ita Programacin en Borland C++

main( )
{ printf (ita); }

En este ejemplo el identificador es ita y el contenido de la cadena es Programacin en Borland C++. El
ejemplo anterior es equivalente al siguiente ejemplo que no usa la directiva #define:

main( )
{ printf (Programacin en Borland C++); }

Consideraciones de la directiva:
Como podr observar en el ejemplo, las cadenas de caracteres se encierran entre comillas ( ).
Si el identificador aparece dentro de una cadena no se llevan a cabo sustituciones. De esta forma si en
nuestro ejemplo colocsemos la instruccin:

printf(ita)

en lugar de desplegarse Programacin en Borland C++ se desplegar simplemente ita

Pgina 22
Si usted escribe una cadena muy larga, esta se puede continuar en la siguiente lnea, colocando una
barra invertida (\), al final de la lnea de la siguiente forma:

#define lin_larga Este mensaje ocupa ms de una \
lnea ya que es muy larga

Funciones de entrada y salida en pantalla.

Existen dos funciones bsicas para la Entrada/Salida de datos por pantalla, estas son las funciones
printf y scanf. Estas funciones ofrecen posibilidades con formatos de datos variados. Al utilizar la funcin
printf, se puede especificar en ella lo siguiente:

El texto que desee escribir.
El formato de escritura (entero, cadena, nmero de decimales, espacios e imprimir).
Los nombres de las variables (o expresiones aritmticas).

En el caso de scanf se puede especificar el formato de lectura de datos, as como algunos
modificadores que permiten cambiar la forma de captura.
Adicional a estas funciones existen otras cuatro funciones tambin de

Funcin: printf() stdio.h .- Escribe en la salida estndar los argumentos que componen las
variables, con el formato especificado. Sintaxis:

printf(const char formato, arg1, arg2,...);

arg1, arg2,... = Nombre de las variables o expresiones, cuyos valores o resulta dos se desplegarn, estos
debern corresponder al orden que guarde el formato.
formato = Consta de dos tipos de elementos, los caracteres que se muestran en pantalla y las rdenes de
formato que indican como se mostrarn los argumentos.

Los caracteres que se muestran en pantalla, incluyen espacios, signos de puntuacin y cualquier
carcter que se pueda desplegar en pantalla.
Las rdenes de formato comienzan con el signo de tanto por ciento (%) y le sigue el cdigo de
formato. Las rdenes de formato se presentan en la siguiente tabla:

Cdigo Formato

%c Carcter nico
%d Enteros decimales con signo
%i Enteros decimales con signo
%ld Enteros largos con signo
%e Notacin cientfica (e minscula)
%E Notacin cientfica (E mayscula)
%f Coma flotante
%o Octal sin signo
%s Cadena de caracteres
Lenguaje C


Pgina 23
%u Enteros decimales sin signo
%x Hexadecimales sin signo (letras minsculas)
%X Hexadecimales sin signo (letras maysculas)
%% Imprimir el signo %

Consideraciones que se deben tomar en cuenta con los formatos

Debe haber exactamente el mismo nmero de argumentos que rdenes de formato.
Los argumentos se asocian en el mismo orden expuesto en el formato, es decir si el primer argumento
es entero y el segundo es float, entonces el formato deber guardar el mismo orden.
Si no hay suficientes argumentos que asociar a las rdenes de formato, la salida queda indefinida.
Si hay ms argumentos que rdenes de formato, se descarta el resto de los argumentos.


Funcin: scanf( ) stdio.h .- Lee de la entrada estndar los argumentos que componen las
variables, con el formato especificado y los convierte de acuerdo a este. Sintaxis:

scanf (formato, &arg1, &arg2,...);

&arg1, &arg2,... = Nombre de las variables, donde se guardar el valor introducido. Estos debern
corresponder al orden que guarde el formato. El smbolo & (ampersand) indica, el calculo
de la direccin, donde se macenar la variable. Este operador es indispensable para
cualquier tipo de variable, excepto para cadenas de caracteres (an cuando si se puede
incluir).
formato = Consiste de tres clases de caracteres. Los caracteres que no sean caracteres en blanco, los
espacios en blanco y los especificadores de formato que indican como se convertirn los
argumentos.

Nota: Un error muy persistente, al escribir programas en Borland C++, es OLVIDAR colocar el
prefijo & a las variables que se utilicen con la funcin scanf( ). Tome muy en cuenta esta precaucin al
escribir el cdigo de su programa.
Las rdenes de formato comienzan con el signo de tanto por ciento (%) y le sigue el cdigo de
formato. Las rdenes de formato se presentan en la siguiente tabla. Tome muy en cuenta que al capturar
los datos, estos pueden estar separados por espacios, tabuladores o retornos de carro (.). El ltimo dato
que se capture deber de terminarse con la tecla Enter (.).

Cdigo Formato

%c Leer un nico carcter
%d Leer un entero decimal
%i Leer un entero decimal
%e Leer un nmero de tipo de coma flotante
%f Leer un nmero de tipo de coma flotante
%h Leer un entero corto
%o Leer un nmero octal
%s Leer una cadena

Pgina 24
%x Leer un nmero hexadecimal

Consideraciones que se deben de tomar en cuenta con los formatos:

Todas las variables utilizadas para recibir valores, se deben pasar por sus direcciones (precedindolos
con el smbolo &).
Debe haber exactamente el mismo nmero de argumentos que de rdenes de formato.
Los argumentos se asocian en el mismo orden expuesto en el formato, es decir si el primer argumento
es entero y el segundo es float, entonces el formato deber guardar el mismo orden.
Si no hay suficientes argumentos que asociar a las rdenes de formato, se solicitan todos los datos
especificados en el formato, pero slo se asignan los de los argumentos especificados.
Si hay ms argumentos que rdenes de formato, slo se solicitarn los valores especificados en el
formato sin que los argumentos de ms obtengan algn valor.
Los espacios en blanco del comienzo de un dato no se tienen en cuenta, excepto si el formato es %c.
En una cadena la conversin se interrumpe en el primer carcter en blanco o en el primer retorno de
carro.
Un carcter que no sea espacio en blanco, ocasiona que se lea este carcter al introducir los datos y
que scanf( ) no lo tome en cuenta como dato valido. Por ejemplo, %d;%d da lugar a que scanf() lea
primero un entero, seguidamente lea y descarte el punto y coma(;) y, finalmente, lea otro nmero. Cabe
mencionar que si scanf( ) no encuentra el caracter (;), entonces no se asignara el valor del siguiente
entero a su variable.

Funciones de Video.

Funcin: gotoxy( ) conio.h .- Sita el cursor en la posicin que se indica por col,fil. Si alguna de
ellas fuera invlida entonces no ocurre nada. Sintaxis:

void gotoxy(int col,int fil)

col = Columna donde se colocar el cursor.
fil = Fila donde se colocar el cursor.

Funcin: clreol( ) conio.h .- Limpia desde la posicin del cursor hasta el final de la lnea. La
posicin del cursor no cambia. Sintaxis:

void clreol(void)

Funcin: insline( ) conio.h .- Inserta una lnea en blanco en la posicin actual del cursor. Las
lneas siguientes, se desplazan hacia abajo y la ltima se pierde. Sintaxis:
void insline(void)

Funcin: delline( ) conio.h .- Elimina la lnea donde se encuentra el cursor. Las lneas
siguientes se desplazan hacia arriba una posicin rellenando el hueco de la lnea borrada. Sintaxis:

void delline(void)
Lenguaje C


Pgina 25

Uso de cadenas de caracteres.

En Borland C++, no existe un tipo cadena definido, este se puede obtener como un arreglo de
caracteres. An cuando no se va a profundizar en esta seccin acerca del uso de arreglos, si se comentarn
algunos conceptos para manipular arreglos de caracteres a los que les vamos a nombrar cadenas. El
siguiente, es el formato para declarar cadenas de caracteres:

char nombre_variable [tamao|

char = Tipo de carcter.
nombre_variable = Nombre de la variable.
tamao = Longitud de la cadena

Consideraciones para manejar cadenas:

Se deber considerar al declarar cadenas, que la longitud deber ser un nmero mayor a la longitud que
se desea almacenar. Es decir, si desea una cadena de 10 caracteres, deber declarar un tamao de 11
caracteres.
Lo anterior se debe a que es necesario indicar la terminacin de la cadena, y esto se realiza con el
carcter \0 (diagonal cero), misma que Turbo C reconoce como la terminacin de la cadena.
NO se pueden hacer asignaciones directas. Para ello se deber utilizar la funcin strcpy de la biblioteca
o crear una funcin para copiar cadenas.
Para capturar cadenas desde el teclado con la funcin scanf( ), deber utilizar la orden de formato %s.

Inicializacin de cadenas.- As como es posible inicializar variables numricas o carcter al
momento de declararlas, tambin es posible inicializar cadenas en la declaracin de las mismas. Esto se
realiza encerrando entre comillas el texto que se desea asignar a la cadena. por ejemplo:

char cad[24| = Adelante! eres el mejor;

Asignacin con la funcin: strcpy( ) string.h .- Ya se mencion que no se puede asignar
texto directamente a un variable del tipo cadena, en lugar de ello se puede utilizar la funcin strcpy( )
misma que permite copiar una cadena en otra cadena. Sintaxis:

char strcpy (char cad_destino, const char cad_origen)

cad_destino = variable a donde se copiar
cad_origen = variable o constante que se copiar.

Nota: Cuando en la sintaxis se incluya el tipo const char, se puede utilizar una variable tipo cadena
o una cadena encerrada entre comillas. Al utilizar esta funcin se puede emplear como origen, una cadena
constante o una variable de tipo cadena.

Funcin: puts( ) stdio.h .- Despliega en pantalla una cadena. El caracter nulo de la cadena,
sirve para generar un salto de lnea. Sintaxis:

Pgina 26

int puts (const char *cad)

*cad = cadena a desplegar

Funcin: gets( ) stdio.h .- Solicita caracteres, mismos que se asignarn a una cadena. El
salto de lnea se convierte en caracter nulo. Sintaxis:

char gets(char *cad)

*cad = Cadena donde se almacenarn los caracteres.

Otras funciones.- Se describirn en este apartado, dos funciones que utilizaremos en nuestros
primeros ejercicios, a la vez que incluiremos una instruccin que nos servir para hacer una pausa al final
del programa.

Funcin sleep( ) dos.h .- Esta funcin suspende la ejecucin del programa durante cierta
cantidad de segundos. Sintaxis:

sleep(tiempo)

tiempo = La cantidad de segundos de espera.

Funcin: kbhit( ) string.h .- Verifica si se ha presionado alguna tecla. Sintaxis:
int kbhit( );

Si se ha presionado alguna, tecla, devuelve un valor diferente de cero, en caso contrario devuelve 0.
Esta funcin la utilizaremos en combinacin con la instruccin while, y nos permitir detener el
programa hasta que se presione alguna tecla.

Lenguaje C


Pgina 27
Errores ms comunes:

Indefined symbol xxxx in function main
Indefinido el smbolo xxxx en la funcin main
Este error se debe a que se pretende utilizar alguna variable que no ha sido declarada previamente,
declare esta variable con algn tipo.

Undefined symbol yyyy in module NOMPROG.CPP
Indefinido el smbolo yyyy en el mdulo NOMPROG.CPP
Este error puede implicar la inexistencia del smbolo yyyy, mismo que podra estar mal escrito o no
encontrarse dentro de las funciones de Borland C++. Por ejemplo en lugar de escribir clrscr,
escribir clrscr. Otra causa puede ser, el no haber declarado con la directiva #include, el
encabezado de la funcin.

Udeterminated string or characters constant in function main
Indeterminada la string o constante caracter en la funcin main
Esto puede ser ocasionado por haber escrito una cadena de caracteres y no haberla cerrado o bien
un caracter y no haber cerrado la definicin del mismo.

Function call ) missing in function main
En una funcin invocada con parntesis ), en la funcin main
Se utiliz una funcin con parmetros y no se cerr el correspondiente parntesis de esta funcin.

Compound statement missing } in function main
Falta la llave } correspondiente el la funcin main
Al agrupar funciones por medio de llaves, falta cerrar algn bloque de instrucciones por medio de la
llave }.

Type mismatch in redeclaration of a
Tipos diferentes en la redeclaracin de a
Se ha declarado ms de una vez con tipos de datos diferentes, la variable o constante a, utilice
otra variable para poder utilizarla.

Declaration sintax error
Error de sintaxis en la declaracin
El compilador ha detectado un error en la forma de escribir instrucciones o palabras reservadas.
Puede ser que en lugar de escribir double, escribi douvle o bien que falt un ; al final.

Statement missing ; in function main
Falta el punto y coma ; al final de la declaracin.
En este caso es probable que el error se marque una lnea posterior a donde falta el smbolo.




Correccin de errores.- Cuando ocurre un error, el control del entorno de programacin se mueve a la
ventana de mensajes, donde se muestran los errores que se detectaron en la compilacin, y en forma

Pgina 28
simultnea se marca en el editor, la lnea en la que se encuentra el error. Para corregir el error siga los
siguientes pasos:

Paso 1 Lea el error ocasionado (puede utilizar las flechas , para desplazar el texto del error y
observarlo completamente, para aquellos mensajes muy largos.
Paso 2 Una vez ledo el mensaje de error, puede pasar a corregirlo, presionando la tecla de conmutacin
F6 y de esta forma estar en la lnea del programa donde se detect el error.
Paso 3 Proceda a corregir el error. Puede tomar la tabla anterior como gua para corregir errores.
Paso 4 En caso de que existiesen ms errores y desee observar cual el siguiente error de la lista,
presione la combinacin Alt+F8 y si desea el error anterior, presione la combinacin Alt+F7. Si
existen ms errores contine en el paso 4, en caso contrario contine en el paso 5.
Paso 5 Una vez corregido el error, puede volver a compilar el programa, presionando la tecla F9.

Manejo de advertencias.- En el caso de las advertencias, estas no son tan fatales, como podran
ser los errores, y es posible hacer algunas modificaciones al programa para eliminarlas, sin embargo, hay
algunas que son inherentes de algunas instrucciones o funciones y no tienen necesidad de ser eliminadas,
pero si canceladas por medio de las opciones options, compiler, errors, o warnings del men principal.
Lenguaje C


Pgina 29
// programa que ilustra el uso de las funciones printf y scanf

#include <iostream.h>
#include <stdio.h>
#include <conio.h>

void main()
{
int entero1, entero2;
long largo1, largo2;
float real1, real2;
char caracter1, caracter2;
clrscr();
printf("Ingrese dos valores enteros ");
scanf("%i %d",&entero1,&entero2);
printf("\n\nIngrese dos valores largos ");
scanf("%ld %ld",&largo1, &largo2);
printf("\n\nIngrese dos valores reles ");
scanf("%f %f",&real1, &real2);
printf("\n\nIngrese dos caracteres ");
cin >> caracter1 >> caracter2;
printf("\n\n\nLos dos valores enteros multiplicados por 2 son %d y %i"
,entero1 * 2, entero2 * 2);
printf("\n\nLos enteros largos son %15ld y %3ld",largo1, largo2);
printf("\n\nLos numeros reales divididos por dos son %f y %9.3f", real1/2,
real2/2);
printf("\n\nLos dos caracteres capturados son %c y %c",caracter1, caracter2);
getch();
}


Pgina 30
#include <stdio.h>
#include <conio.h>
#include <dos.h>

void main()
{
clrscr();
printf("Primera linea de la pantalla ");
gotoxy(10,10); printf("Linea numero diez de la pantalla");
gotoxy(10,11); printf("Linea numero once de la pantalla");
gotoxy(10,12); printf("Linea numero doce de la pantalla");
gotoxy(10,25); printf("Ultima linea de la pantalla");
gotoxy(40,20); printf(".........Presione cualquier tecla ");
while(!kbhit());
gotoxy(20,11); clreol();
gotoxy(1,20); printf("Se limpio la linea once a partir de la columna 20");
sleep(10);
gotoxy(1,20); delline();
gotoxy(1,5); printf("Se elimino la linea 20, observe la linea 25");
sleep(10);
gotoxy(40,13); insline();
gotoxy(1,13); printf("Se acaba de insertar esta linea, observe la linea 25");
sleep(10);
}

Lenguaje C


Pgina 31
Ejercicios de Programacin
Unidad II

1. Realizar un programa que lea cualquier temperatura dada en grados centgrados y los convierta en
los correspondientes grados Fahrenheith. La ecuacin para efectuar la conversin est dada por:
o
F = (9/5*
o
C) + 32
2. Calcular el resultado de la siguiente expresin, debiendo solicitar al usuario los valores de la
variable g y la variable a las cuales deben ser del tipo real, y deber de formatear la salida de
manera que el resultado se despliegue con slo tres valores decimales despus del punto:
M = (25+g)
2
-(g-2)*a
3. Calcular la velocidad de un auto que recorre D kilmetros en T minutos. El resultado lo debe de
representar en unidades de Km/hr.
4. Cual es el inters generado y el capital acumulado durante un ao, por un capital C, a una tasa de
inters I anual. (Inters = (C*I)/100. Capital = C + Inters)
5. En una rifa cuyos nmeros constaban de cuatro dgitos se vendieron n boletos, si cada boleto se
vendi a p pesos y el costo fue de c pesos. Cual fue la ganancia y cual es el costo de los boletos no
vendidos?. (Suponga que el boleto premiado fue vendido).
6. Se necesita calcular la cantidad a pagar por el consumo de energa elctrica. Los datos que se
necesitan son los siguientes: Precio por KW, %de cargo de mantenimiento, % IVA y consumo de
energa.
7. Capture el radio de un crculo y determine el rea y longitud de su circunferencia.
8. Se desea construir una barda con medidas de b1 x b2 mts. con tabiques, de t1 x t2 cm. Que
cantidad de tabiques se necesitan y cual sera el costo por la compra del tabique si cada uno cuesta
p pesos.
9. Una persona tiene un salario quincenal de Q pesos, y labora D das, si se le retiene el 2.35% a su
salario, cual es la cantidad que esta persona percibe?
10. Realice un programa en el cual obtenga una pantalla de presentacin personal en la cual se indique el
nombre de la escuela, la especialidad, sus datos personales, etc. De manera que se presente
centrado en la pantalla y de preferencia utilice colores para su presentacin.
Lenguaje C


Pgina 33
Unidad .

ESTRUCTURAS DE CONTROL

El flujo de instrucciones de cualquier aplicacin de programacin, contiene como parte fundamental,
el uso de sentencias de control, mismas que le permiten marcar el camino que tendr el programa. Esto
quiere decir que las sentencias de control, permiten decidir cul ser el camino a seguir dentro del
programa, de acuerdo al resultado de la evaluacin de alguna o algunas condiciones. Esto se logra por medio
de dos sentencias primarias, que son la sentencia if y la sentencia switch. A estas sentencias tambin se
les llega a nombrar sentencias selectivas, ya que esta seleccin la hacen por medio de resultados lgicos
basndose en una evaluacin. Recordemos que los valores lgicos en Borland C++ son indicados por la
presencia o ausencia de valor.
Adicional a las sentencias primarias se estudiarn tambin los ifs y switchs anidados, as como la
forma de reemplazar la sentencia if por el operador ?.
Dentro de esta misma unidad trataremos los ciclos, dentro de los cuales se incluyen las sentencias
for, while, y do/while. Adems se incluyen las sentencias break y continue as como la funcin exit,
mismas que sirven para alterar la forma en la que puede operar o terminar un ciclo o programa.

Sentencias condicionales.

Las sentencias condicionales son aquellas que permiten ejecutar uno u otro grupo de sentencias en
funcin del resultado de una evaluacin. Esta evaluacin se hace por medio de expresiones lgicas y/o
relacionales, y el resultado se obtiene como un valor lgico que permite decidir el flujo que se seguir.
Nuestra primer sentencia condicional que observaremos es la sentencia if que tiene los siguientes
formatos:

if(condicin)sentencia;

if(condicin)
{ secuencia_de_sentencias; }

if(condicin)sentencia1;
else sentencia2;

if(condicin)
{ secuencia_de_sentencias1; }
else
{ secuencia_de_sentencias2; }

An cuando se trata de una sola sentencia if, se muestran las variaciones que puede contener,
utilizndola para ejecutar una o ms de una sentencia.

3

Pgina 34
if con una sla sentencia.- En este caso se evala la condicin y en caso de ser cierta, entonces se
ejecuta la sentencia, en caso contrario se sigue el flujo de instrucciones con la siguiente instruccin a la
sentencia if.

Ejemplo: Declare una variable entera, asgnele un valor y evale si es mayor que 15, desplegando un
mensaje en caso afirmativo.

Listado cdigo fuente del programa IF1.cpp
// Programa que muestra el enunciado if de una sola sentencia

#include <iostream.h>
#include <stdio.h>

void main()
{
int x;
cout << Ingrese un valor entero cualquiera ;
cin >> x;
if (x > 15)
cout << \nEl valor ingresado es mayor a 15 ;
}


if con una secuencia de sentencias.- En este caso, al igual que en el caso anterior, se evala la
condicin y si el resultado es verdadero, se puede ejecutar la sentencia. Solo que en esta caso es una
secuencia de sentencias, es decir que estn agrupadas.

Ejemplo: Declare una variable entera y una flotante, asgnele un valor a la entera y determine si
este es mayor que 15, en caso afirmativo multiplique la variable entera por .3 y el resultado asgnelo a una
variable flotante. Finalmente despliegue el valor entero y el flotante.

Listado cdigo fuente del programa IF2.cpp
// Programa que muestra el enunciado if de una secuencia de sentencias

#include <iostream.h>
#include <stdio.h>

void main()
{
int x;
float y;
cout << Ingrese un valor entero cualquiera ;
cin >> x;
if (x > 15)
{
y = x * .3;
cout << \nEl valor entero es << x << y el valor flotante es <<
y;
}
}
Lenguaje C


Pgina 35



if-else con una sola sentencia.- En este primer caso de if-else, se tiene la doble alternativa de
ejecutar una sentencia, ya sea sentencia1 o sentencia2, en funcin del resultado de la evaluacin.

Ejemplo: Declare una variable de tipo entero y asgnele un valor y evale si este es mayor que 45.
En caso de que sea verdadero que despliegue un mensaje mostrando el valor de la variable y diciendo que es
mayor que 45. En caso contrario que despliegue el mensaje de que el valor es menor que 45.

Listado cdigo fuente del programa IF3.cpp
// Programa que muestra el enunciado if-else de una sola sentencia

#include <iostream.h>
#include <stdio.h>

void main()
{
int x;
cout << Ingrese un valor entero cualquiera ;
cin >> x;
if (x > 45)
cout << \nEl valor ingresado es mayor a 45 ;
else
cout << \nEl valor ingresado es menor o igual a 45 ;
}


if-else con secuencia de sentencias.- Este caso es parecido al segundo formato de if, con la
variante que ahora se agrega la secuencia de sentencias de else. Nuevamente se evala la condicin y en
caso de resultar verdadero se ejecuta secuencia_de_sentencias1, de lo contrario se ejecuta
secuencia_de_sentencias2.

Ejemplo: Se necesita calcular el impuesto a pagar y la cantidad de la caja de ahorro, en funcin del
salario bruto del trabajador. Si el salario es mayor que 5000 el impuesto y ahorro ser de 15 y 5%
respectivamente, en caso contrario el impuesto y ahorro ser del 10 y 2%.

Listado cdigo fuente del programa IF4.cpp
// Programa que muestra el enunciado if-else de una secuencia de sentencias

#include <iostream.h>
#include <stdio.h>

void main()
{
float salario, ahorro, impuesto;
cout << Ingrese el salario del trabajador ;
cin >> salario;
if (salario > 5000)
{

Pgina 36
impuesto = salario * .15;
ahorro = salario * .05;
}
else
{
impuesto = salario * .1;
ahorro = salario * .02;
}
cout << \nEl impuesto es de << impuesto << y el ahorro de <<
ahorro;
}


ifs anidados.- En algunas ocasiones, es necesario determinar ciertas condiciones de un elemento,
de tal manera que para determinar algn resultado final, es necesario realizar evaluaciones sucesivas sobre
el mismo. Tal es el caso de determinar, a partir de tres nmeros dados, cual es el mayor. Una forma de
analizar esto es de la siguiente forma: Supongamos que los tres elementos son A, B y C.; podramos realizar
las siguientes preguntas:

inicio
si (A>B)
si (A>C) imprime (A es el mayor)
sino imprime (C es mayor)
sino
si (B>C) imprime (B es el mayor)
sino imprime (C es mayor)
fin

Es posible anidar la sentencia if, de tal forma que se evale una expresin, despus de haber
evaluado otra expresin de la misma cadena.
Para realizar ifs anidados es necesario tener en cuenta la siguiente consideracin:
En ifs anidados, un else hace referencia al if precedente ms prximo que no tenga ya asociada una
sentencia else, as en el siguiente caso el else corresponde al if(A>20).

main()
{ int A;
A=5;
if (A>10)
if (A>20) cout << A es mayor que 20;
else cout << A es mayor que 10 y menor que 20;
}

Si ejecutamos este programa no se desplegar resultado alguno debido a que A tiene valor de 5. Si
deseamos que el ltimo else pertenezca a if (A>10), debemos encerrar el segundo if en un bloque con llaves,
hasta el primer cin de la siguiente manera:

main()
{ int A;
A=5;
if (A>10)
{
if (A>20)
Lenguaje C


Pgina 37
cout << A es mayor que 20;
}
else cout << A es menor que 10; }

Si deseamos determinar si el nmero es:

- menor o igual que 10
- mayor que 10 y menor o igual que 20
- mayor que 20

tendramos que incluir el else en cada if, de la siguiente forma:

main()
{ int A;
cin >> A;
if (A>10)
if (A>20)
cout << A << es mayor que 20;
else
cout << A << es mayor que 10 y menor o igual a
20;
else
cout << A << es menor o igual que 10;
}

De esta forma el primer else corresponde a if(A>20), y el segundo else corresponde a if(A>10).

Sentencia if-else-if.- Al igual que los ifs anidados, en los que algunos elementos son evaluados en
forma sucesiva, tambin se presentan casos, en los que es necesario determinar el rango en el cual se
encuentra algn elemento y en los que es necesario realizar comparaciones sucesivas. La construccin de la
sentencia if-else-if, que se utiliza para resolver este tipo de comparaciones sucesivas, no es mas que un
caso especial del formato de la sentencia if.
Un ejemplo clsico de este tipo es el que se utiliza en los clculos de impuestos, en donde se hace
uso de una tabla con porcentajes, que se aplican de acuerdo al salario que se percibe. Aun cuando no
entraremos en detalle en el calculo real de impuestos, si vamos a utilizar una tabla de porcentajes para
calcular impuestos. Supongamos que el impuesto es el porcentaje sobre el salario bruto del trabajador, y
que esta regida por la siguiente tabla:

salario <= $ 700.00 0%
$ 700.00 < salario <= $ 1000.00 3%
$ 1000.00 < salario < 1200.00 7%
salario >= $1200.00 9%

si tomamos la variable salario, como el salario bruto del trabajador, entonces para determinar su salario
neto se necesita utilizar la sentencia if-else-if, como se muestra en seguida:
Listado cdigo fuente del programa IF4.cpp
//Programa que muestra los enunciados ifs anidados
main()
{ float salario = 0, impuesto;

Pgina 38
cin >> salario;
if (salario<=700)
impuesto=0.0;
else if ((700<salario)&(salario<=1000)
impuesto=.03*salario;
else if ((1000<salario)&(salario<1200))
impuesto=.07*salario;
else impuesto=.09*salario;
printf (Impuesto %5.2f,impuesto);
printf (\nSalario neto %6.2f, salario-impuesto);
}

Observe como el ultimo else, no necesita evaluar la condicin salario>=1200, ya que se supone que si
no es menor que las dems condiciones, entonces por deduccin ser mayor o igual a 1200.

La sentencia switch.- La sentencia if-else-if, puede servir para las opciones multicamino, como
podra ser al determinar que opcin fue seleccionada dentro de un men. Sin embargo, existe otra
herramienta que puede hacer de las opciones multicamino una forma ms sencilla de programar. La
sentencia que nos ocupa y que permite determinar las acciones a realizar en funcin de una variable es
switch.

El formato de switch es el siguiente:

switch (variable) {
case constante1 : secuencia_de_sentencias1;
break;
case constante2 : secuancia_de_sentencias2;
break;
.
.
case constanteN-1 : secuencia_de_sentenciasN-1;
break;
default : secuencia_de_sentenciasN;
break;
}

Donde la sentencia default se ejecuta, en caso de que no se encuentre ninguna correspondencia entre la
variable y alguna constante case.
La sentencia default es opcional y en caso de que no se encuentren correspondencias, no se llevar
a cabo ninguna accin.
En caso de encontrarse alguna correspondencia entre la variable y alguna constante case, se
ejecuta la secuencia de sentencias correspondientes hasta encontrarse con la sentencia break.
Consideraciones que se deben de tomar en cuenta para trabajar con la sentencia switch:

Con la sentencia switch slo se puede comprobar la igualdad, mientras que con if puede evaluar
expresiones lgicas y relacionales
No puede haber dos constantes case en le mismo switch con los mismos valores.
Lenguaje C


Pgina 39
Si se utilizan constantes carcter, estas se convertirn automticamente a sus valores enteros.
El case puede contener sentencias vacas, entonces y por lo tanto se puede hacer con esto sentencias
comunes. En este caso el control contina en el siguiente case hasta encontrar una sentencia break o el
final de switch.
Si la secuencia de sentencias de un case, no tiene sentencia break, el flujo del programa contina por
los siguientes case hasta encontrar una sentencia break o el final del switch.

Una sentencia Switch es muy utilizada en la seleccin de opciones dentro de un men, como se
ilustra en el siguiente ejemplo:

Ejemplo: Despliegue el siguiente men y permita capturar una opcin:

1. Operacin de suma
2. Operacin de resta
3. Operacin de divisin
4. Operacin de multiplicacin
Opcin ==>
Si la opcin no se encuentra en el rango de 1 a 4, entonces lo deber atrapar por medio de la opcin
default que se puede incluir en el switch y deber reflejar un mensaje en el que se debe seleccionar alguna
opcin indicada.
Recuerde que es necesario colocar una sentencia break al terminar la secuencia de sentencias para
que el programa termine de ejecutar las instrucciones correspondientes al case.



Switchs anidados.- As como se puede anidar la sentencia if, tambin es posible anidar la
sentencia switch. Esta se realiza dentro e los case.

Pgina 40
Estructuraras repetitivas.

Las estructuras repetitivas, tambin conocidas como ciclos o bucles, son las que permiten
implementar acciones que deben ejecutarse en forma repetitiva. Permiten entonces que un conjunto de
instrucciones se repitan hasta que se alcance cierta condicin. Las estructuras repetitivas que contiene
Borland C++ son el for, while y do/while.

Sentencia for.- Esta estructura repetitiva, varia en su funcionamiento con respecto a otros
lenguajes como Turbo Pascal, BASIC, modula,... etc., mismos en los que el numero de iteraciones es
conocido de antemano. En Borland C++, el for es una estructura muy verstil, que proporciona potencia y
flexibilidad. El formato de esta sentencia es:

for (inicializacin ; condicin ; incremento) sentencia;

inicializacin : Asignacin que se permite para inicializar la variable o las variables de control del
ciclo.
condicin : Expresin relacional que determina cuando finaliza el ciclo. Este continuara mientras la
condicin sea verdadera.
incremento: Determina como cambia la variable de control despus de cada iteracin.
Sentencia: Puede ser una sentencia o una secuencia de sentencias como bloque entre llaves.

El enunciado del bucle for tiene tres partes opcionales. La primera que inicializa las variables de
control del bucle (C++ permite que utilice ms de una variable de control del bucle). La segunda parte del
bucle es la condicin que determina si ste realza otra iteracin (algo parecido a la sentencia if sin la
palabra clave if). La ltima parte del bucle for es la clusula que modifica las variables de control del bucle,
y a menudo esto simplemente es una operacin de autoincremento y/o decremento.

El listado siguiente contiene el cdigo fuente del programa FOR1.CPP. Este programa le pide que
defina un rango de enteros especificando los lmites inferior y superior. Luego el programa calcula la suma
de los enteros, as como el valor promedio en el rango que especific.

Listado cdigo fuente del programa FOR1.CPP
// Programa que calcula una suma y su promedio de un rango de
// enteros usando un bucle for

#include <iostream.h>
#include <stdio.h>

int main()
{
int cont = 0;
double sum = 0.0;
int inicio, fin, temp;

printf(Teclee el primer entero );
scanf(%d,&inicio);
printf(\nTeclee el segundo entero );
scanf(%d,&fin);
if (inicio > fin)
{
Lenguaje C


Pgina 41
temp = inicio;
inicio = fin;
fin = temp;
}
for (i = inicio; i <= fin; i++, cont++)
sum += (double)i;
printf(\nLa suma de los enteros desde %d hasta %d es igual a %f
\n,inicio, fin, sum);
printf(El promedio de los valores es %f.5.2,suma/cont);
return 0;
}

Ejemplo.- Realice un programa en el cual muestre la tabla de multiplicar de cualquier numero
entero, del 1 al 20.

Como se menciono anteriormente en la inicializacin del for, es posible utilizar mas de una variable
en una inicializacin independientemente de que se utilicen como variables de control. Para realizar esto se
utiliza el operador coma (,) como separador de variables de inicializacin.

Ejemplo.- Realice un programa en el cual se desplieguen en pantalla los nmeros entre 25 y 200,
con un incremento de 4.

Sentencia while.- Esta estructura repetitiva, evala la condicin al principio de la sentencia y el
cuerpo del mismo se repetir en tanto la condicin sea verdadera. El formato de esta sentencia es:

while (condicin) sentencia;

condicin: Cualquier expresin que determine cuando finaliza el ciclo. Este continuara mientras la
condicin sea verdadera.
sentencia: Puede ser una sola sentencia, o una secuencia de sentencias.

Ejemplo: Realice un programa en el cual introduzca informacin hasta que se presione la letra z.

Sentencia do-while.- Esta estructura contiene la condicin al final del ciclo, a diferencia de las
sentencias for y while que lo contienen al principio. Esto nos lleva a deducir que en una sentencia do-while,
el cuerpo del programa se ejecutar por lo menos una vez. El formato de esta sentencia es:

do sentencia while condicin

condicin: Cualquier expresin que determina cuando finaliza el ciclo. Este continuar mientras la
condicin sea verdadera.
sentencia: Puede ser una sola sentencia, o una secuencia de sentencias.

El ciclo termina cuando la condicin sea falsa.

Ejemplo: Despliegue los primeros 20 nmeros de la serie 30, 33,36,39,42...


Pgina 42
Sentencia break.- Cuando se estudi la sentencia switch, se utiliz la sentencia break para
terminar un case. Esta sentencia tambin se puede utilizar con cualquier estructura repetitiva, en cuyo
caso forza a la terminacin del ciclo, continuando el control en la siguiente lnea de este.

Ejemplo: Del rango de nmeros del 43 al 100, genere nmeros con incrementos de 4 y despliegue
nicamente los 10 primeros. Realice este programa usando la sentencia break y con las sentencias for y do-
while.


Sentencia continue.- Esta sentencia es similar a la sentencia break, con la diferencia que en lugar
de truncar la ejecucin del ciclo, enva el control a la lnea donde se evala la condicin. Saltando las
instrucciones siguientes a la sentencia. Cabe mencionar que no reinicializa la cuanta del ciclo, sino
nicamente traslada el control.

Ejemplo: Tomando la serie 3, 7, 11, 15, 19,... despliegue los 30 primeros nmeros, excepto los que se
encuentran en el rango del 20 al 35. Utilice la sentencia for y la sentencia do-while.
Lenguaje C


Pgina 43
Ejercicios de Programacin
Unidad III

1. Realizar un programa en el cual el usuario debe de proporcionar valores al azar y en cuanto de
entrada a un valor que est comprendido entre el valor 20 a 35, en ese momento debe de abandonar
el programa. Mientras no se de un valor comprendido entre este rango, el programa deber
despegar un mensaje indicando que el programa contina.
2. Escribir un programa en el cual se imprima un * en el primer rengln, en el segundo rengln dos
asteriscos, en el tercero tres y as sucesivamente hasta completar un nmero el cual lo debe de
indicar el usuario.
3. En un da (24 horas) se toma cada hora la temperatura. Realizar un programa que lea las
temperaturas del da, determine y muestre la temperatura media, la temperatura mas alta y la
temperatura mas baja.
4. Escriba un programa que calcule la suma 1+1/2+1/3+1/4+....+1/n donde n se especifica por el usuario.
5. Realice un programa en el cual se pida al usuario que introduzca una serie de nmeros enteros
positivos y negativos, dando por terminada la entrada de datos cuando se introduzca el nmero cero
(0). El programa deber determinar el total de los nmeros introducidos a acepcin del cero y
debiendo adems de indicar cuantos son positivos y cuantos son negativos.
6. Escribir un programa que encuentre el primer valor de n para el cual la siguiente suma exceda a
10000: 1+2+3+4+.....+n.
7. Escriba un programa que sume una serie de enteros. Suponga que el primer entero ledo desde el
teclado especifique el numero de valores que faltan por introducirse. Su programa deber leer un
valor cada vez que sacnf sea ejecutado. Una secuencia de entrada tpica pudiera ser:
5 100 200 300 400 500
8. Escriba un programa que calcule e imprima el promedio de varios enteros. Suponga que el ltimo
valor ledo mediante scanf es el centinela 9999. Una secuencia tpica sera: 10 8 11 7 9 9999
indicando que debe calcularse el promedio de todos los valores que preceden al 9999.
9. La funcin factorial se utiliza con frecuencia en problemas de probabilidades. Escriba un programa
que evale los factoriales de los enteros del 1 al 5. Imprima el resultado el resultado en forma
tabular.
10. Escriba un programa que imprima los siguientes patrones por separado, uno debajo del siguiente.
Utilice ciclos for para generar los patrones. Todos los asteriscos debern ser impresos por un solo
enunciado printf(*):

* ********** ********** *
** ********* ********* **
*** ******** ******** ***
**** ******* ******* ****
***** ****** ****** *****
****** ***** ***** ******
******* **** **** *******
******** *** *** ********
********* ** ** *********
********** * * **********
Lenguaje C


Pgina 45
Unidad .

ARREGLOS

En esta unidad estudiaremos los arreglos unidimensionales que son llamados tambin vectores,
arreglos bidimensionales llamados tambin matrices y los arreglos multidimensionales.
Para poder utilizar arreglos es necesario realizar una declaracin de los mismos; proceso en el
cual se define el tipo, tamao y nombre del arreglo.
An cuando no lo podamos ver, en forma explcita, los arreglos se almacenan en localidades
consecutivas de memoria y son accesadas por medio de una base, misma que es la direccin del primer
elemento y desde esta se realizan accesos relativos para leer/escribir informacin en el arreglo.
Los elementos que participan en el manejo de arreglos son: El nombre del arreglo, el o los
ndices por medio del cual se accesa la informacin relativa a un elemento del arreglo.
Para operar de forma adecuada los arreglos, estos se deben de iniciar con ceros o con los
valores que se necesiten. Es posible trabajar con ms de un arreglo de diferente tipo y con informacin
diferente cada arreglo, es decir que se puede tener un vector de nmeros enteros y una matriz de
valores tipo flotante.
Como un complemento al estudio de los arreglos, se ha introducido en esta unidad el uso de
nmeros aleatorios. Estos nos servirn como apoyo en la captura de datos numricos.

Declaracin de arreglos.

Un arreglo es una estructura de datos que es utilizada para almacenar un conjunto de datos del
mismo tipo. Para utilizar arreglos es necesario declararlos e introducirles datos iniciales, debido a que
cuando se declaran, tienen valores indefinidos (basura).
Los arreglos se almacenan ntegramente en memoria RAM, y se pierden al apagar la
computadora.

Un arreglo se identifica por su nombre, mismo que es un identificador vlido. Los componentes
individuales de un arreglo se llaman elementos y se distinguen entre ellos por el nombre del arreglo
seguido del ndice o ndices entre corchetes | |.
Los arreglos que se pueden declarar son unidimensionales, bidimensionales y
multidimensionales.

Arreglo unidimensional.- El formato para declarar los arreglos unidimensionales es el
siguiente:

tipo nom_variable |tamao|;

tipo = Tipo de datos vlido (int, float, char, double, etc.)
nom_variable = Nombre de identificador vlido
tamao = Nmero de elementos que contiene el arreglo.

Podemos definir a tipo como la base que tendr el arreglo, es decir de que tipo va a almacenar
cada elemento.
El espacio que ocupa un arreglo depende del tipo de datos y de la cantidad de elementos que
tenga el mismo.
4

Pgina 46
En el siguiente ejemplo se declara un arreglo llamado Meses con 20 elementos enteros.

int Meses |20|;

Esta declaracin es un arreglo unidimensional, tambin llamados vectores o listas. Su representacin
grfica es la siguiente:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Meses

Donde Meses es el nombre del arreglo, y los nmeros superiores son el ndice de cada elemento.
Nota: Los ndices inician con el valor cero, de tal forma que si declara una lista de 10
elementos, el primer elemento tiene ndice cero y el ltimo 9.

Arreglo bidimensional.- Este tipo de arreglos, se basa en el concepto de dos dimensiones y su
formato es el siguiente:

Tipo nom_variable |tam 1 dim||tam 2 dim|.

Tipo = Tipo vlido de datos (int, char, float, ...)
nom_variable = Identificador de la variable
tam 1 dim = Tamao de la primera dimensin
tam 2 dim = Tamao de la segunda dimensin

La diferencia entre esta definicin bidimensional y la unidimensional estriba, en el nmero de
dimensiones, mismas que se definen por separado. Cuando trabajamos con arreglos bidimensionales, la
primera dimensin indica las filas y la segunda las columnas.
La declaracin: double ciclo|5||10|; define a la variable ciclo con dos dimensiones (5 y 10). La
siguiente es su representacin grfica:

0 1 2 3 4 5 6 7 8 9
0
1 x Filas
Ciclo 2 (1 Dim)
3 x
4 x
Columnas (2 Dim)

Consta de 5x10=50 elementos, y los elementos que estn marcados con una x son: ciclo[1|[2|,
ciclo[3|[5| y ciclo[4|[9|. El total de espacio que ocupa esta variable es de 50*4=200 bytes, tomando en
consideracin 50 elementos del tipo double (cada double ocupa 4 bytes).

Nota: La interpretacin que tomaremos para las dos dimensiones son: Para la 1 dimensin filas
y para la 2 dimensin columnas. As ciclo[2|[4| denota el elemento que se encuentra en la fila 2 y
columna 4.

Arreglos multidimensionales.- Estos arreglos son los que se definen con ms de dos
dimensiones. En Borland C++, no existe lmite para el nmero de dimensiones que se puedan declarar
para un arreglo ms que el limitado por la memoria que puedan ocupar los mismos.
Lenguaje C


Pgina 47
A los arreglos de tres dimensiones se les conoce como tridimensionales y por lo general es hasta
este tipo de dimensin que se utiliza comnmente, ya que mas de tres, ocupan una mayor cantidad de
memoria y se puede perder el control de los mismos de parte del usuario por la interpretacin de cada
dimensin.
El formato del arreglo tridimensional es el siguiente:

tipo nom_var [tam 1 dim| [tam 2 dim|... [tam N dim|

La siguiente declaracin define un arreglo tridimensional:

int arbol [5|[5|[4|

Esta declaracin contiene 5x5x4=100 elementos y ocupa un total de 100*2=200 bytes de memoria.

Inicializacin y acceso a elementos.

Borland C++ no inicializa en forma automtica los arreglos, pero permite que estas se inicializen
al momento de declararlas, encerrando los valores de inicio entre llaves y separando a cada elemento
por comas.

Unidimensionales.- Si queremos declarar la variable maq con 5 elementos e inicializar cada
elemento con cero, lo podemos hacer de la siguiente manera:

int maq[5| = {0,0,0,0,0}

Sin embargo si la variable se declara de 100 elementos en lugar de 5, tenemos el inconveniente
de escribir cien veces el cero entre llaves para poder inicializar el arreglo. En lugar de esto podemos
utilizar un ciclo for para que lo haga elemento por elemento:

int maq [100|, elem ;
for (elem=0 ; elem<100 ; elem++ ) maq[elem|=0;

Observe como no hay necesidad de inicializar cada elemento por separado, debido a que los
elementos de un arreglo se accesan por medio del ndice numrico.
Como se observ en el ciclo for, se puede accesar cualquier elemento de un arreglo
unidimensional especificando el nombre de la variable y el ndice que se desea accesar, del cual podemos
deducir que se puede almacenar cualquier valor en cualquier elemento o leer el contenido de cualquier
elemento. Por ejemplo si deseamos almacenar el valor 5 en el elemento 75 del arreglo maq, escribimos:

maq[75|=5;

o si queremos copiar el valor almacenado en el elemento 37 del arreglo maq en la variable b, escribimos:

b = maq[37|;

Bidimensionales.- Si tenemos un arreglo de 2x2, lo podemos inicializar en la declaracin de la
siguiente manera:

int tot [2|[2| = {0,0,0,0};


Pgina 48
Donde los dos primeros ceros corresponden a las posiciones 0,0 y 0,1, es decir que se inicializa por
orden de filas, siendo los dos ltimos ceros para los elementos 1,0 y 1,1.
Sin embargo al igual que con los arreglos unidimensionales, si tenemos un arreglo grande,
resultara tedioso escribir tanto cero entre llaves, por lo tanto se puede proceder a utilizar el ciclo for
para inicializar el arreglo, pero ahora con una variante. En lugar de un ciclo for, necesitaremos dos
ciclos for, uno para controlar la variable de las filas y otro para las columnas.

int tot [10|[20|, fila, columna;
for (fila=0 ; fila<10 ; fila++)
for (columna=0 ; columna<20 ; columna++)
tot[fila|[columna| = 0;

Si analizamos este ciclo anidado, podemos observar que el arreglo se inicializa por orden de filas, de la
siguiente manera:

0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 ....... 0,19
1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9 1,10 ....... 1,19
2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 2,9 2,10 ....... 2,19
......................
......................
......................
9,0 9,1 9,2 9,3 9,4 9,5 9,6 9,7 9,8 9,9 9,10 ....... 9,19

Si deseamos almacenar el valor 62 en el elemento de la quinta fila y cuarta columna, lo hacemos
indicando los ndices correspondientes por fila y columna de la siguiente manera:

tot[5|[4|=62;

Si queremos almacenar el valor del elemento 5,7 en la variable c:

c = tot[5|[7|;

Multidimensionales.- En general podemos deducir que los arreglos se inicializan por orden de
dimensiones, es decir, la primera dimensin que se inicializa completamente es la 1, despus la 2,
despus la 3 y as sucesivamente. Si tenemos un arreglo tridimensional: tridi[2|[2|[2|, podemos
determinar que contiene 8 elementos 2x2x2=8 y su inicializacin correspondiente sera:

int tridi [2|[2|[2| = {0,0,0,0,0,0,0,0}

siendo el orden de los elementos el siguiente:

0,0,0 0,0,1 0,1,0 0,1,1
1.0,0 1,0,1 1,1,0 1,1,1

Utilizando ciclos anidados, necesitamos implementar tres ciclos for de la siguiente manera:

int tridi[5|[4|[3|,dim1,dim2,dim3;
for (dim1 = 0 ; dim1<5 ; dim1++ )
for (dim2 = 0 ; dim2<4 ; dim2++ )
for (dim3 ; dim3<3 ; dim3++ )
Lenguaje C


Pgina 49
tridi[dim1|[dim2|[dim3| = 0;

Para asignar el valor 19 en el elemento con dimensiones 3,3,1 escribimos:

tridi[3|[3|[1| = 19;

Arreglo de cadenas.

Una cadena de caracteres (string), est compuesta por caracteres alfanumricos. En el caso de
Borland C++, se toma como un caso especial de un vector de caracteres (es decir como un arreglo de
caracteres). La cadena de caracteres deber terminar con un carcter nulo \0 y por lo tanto al
declarar una variable tipo cadena, esta deber ser lo suficientemente grande para contener este
carcter. Recuerde que un carcter corresponde a un byte de informacin. Borland C++ no tiene
operaciones que comprueben los lmites del arreglo, por lo tanto es tarea del programador que no se
rebasen los lmites declarados en el mismo.
Una cadena de caracteres se declara como un arreglo de caracteres. La siguiente es la
declaracin de cad1 como una cadena con longitud de 20 caracteres incluyendo el carcter nulo \0.

char cad1|20|;

Cabe mencionar que no podemos hacer asignaciones directas de cadenas, pero s podemos
asignar directamente un carcter a cualquier elemento de la cadena. Esto se traduce de la misma
definicin de la cadena como un arreglo de caracteres, es decir que se puede tener control de cada
carcter de la cadena. Entonces si tenemos que cad1 es una cadena de 20 caracteres, podemos hacer la
asignacin de los siguientes caracteres:

cad1|0| = A ; cad1|1| = \0

De esta forma cad1 tiene como contenido la letra A, misma que se puede desplegar como una string con
la sentencia:

printf(%s,cad1);

Como podr observar, de la asignacin anterior una cadena deber terminar con un caracter nulo \0.
En seguida se muestra una representacin grfica que se utilizar para los arreglos de cadenas:

0 1 2 3 4 5 6 7 8 9 10 11 12 13
cad2 C O M P U T A C I O N \0 ~ ~

En esta grfica se muestra la cadena cad2, cuyo contenido es COMPUTACIN. Observe que
esta cadena termina con el carcter nulo (\0), y slo ocupa las primeras doce posiciones de la cadena, el
resto de posiciones que no se ocupan estn indefinidas y para representar esto utilizaremos el smbolo
~. Esta cadena tiene una longitud de 14 e inicia dentro del arreglo de caracteres con la posicin 0 y
termina en la 13.
En esta unidad se han incluido las funciones de cadena y de carcter debido a que se pueden
utilizar en conjunto en algunas aplicaciones.
Las funciones de manipulacin de cadenas, realizan tareas como copiar el contenido de una
cadena, comparar cadenas, concatenar cadenas, verificar la longitud,...etc.
Las funciones de caracteres son de validacin en su mayora, permitiendo determinar si un
carcter es un numrico, letra, alfanumrico, etc.


Pgina 50
Funciones para el manejo de cadenas.- Borland C++ contiene para el manejo de cadenas de
caracteres, una variada cantidad de funciones, que le permiten entre otras cosas, copiar cadenas,
comparar cadenas, concatenar cadenas,...etc.
Estas funciones se enlistan a continuacin con una breve descripcin de su funcin.

Funcin Descripcin

strcpy( ) Copiar cadenas.
strncpy( ) Permite copiar N caracteres de una cadena a otra.
strcat( ) Concatena dos cadena.
strncat( ) Concatena N caracteres de una cadena a otra cadena.
strchr( ) Encuentra la primera ocurrencia de un caracter en una cadena.
strrchr( ) Encuentra la ltima ocurrencia de un caracter en una cadena.
strpbrk( ) Encuentra la primera ocurrencia de un caracter en una cadena, siendo
este caracter perteneciente a otra cadena.
strstr( ) Encuentra la primera ocurrencia de una subcadena en una cadena.
strcmp( ) Compara dos cadena considerando diferentes las maysculas y minsculas.
stricmp( ) Compara dos cadenas, lexicogrficamente, ignorando el tamao (maysculas y
minsculas).
strlen( ) Determina la longitud de una cadena.
strlwr( ) Convierte una cadena a minsculas.
strupr( ) Convierte una cadena a maysculas.
strset( ) Fija un determinado caracter en todos los caracteres de una cadena.
strnset( ) Fija un determinado caracter en los primeros N caracteres de una cadena.
strrev( ) Invierte todos los caracteres de una cadena.
strtok( ) Permite separar palabras de una cadena.

Nota: Todas estas funciones invocan al archivo de encabezado string.h.

Funciones para el manejo de caracteres.- Existen ciertas situaciones especiales, en las que
es necesario analizar o verificar el contenido de un carcter. Para esto Borland C++ ha implementado
una serie de funciones con las cuales se puede obtener informacin acerca del contenido de un
carcter. Se puede determinar si el contenido es un carcter alfabtico, numrico, alfanumrico, etc..
Las funciones que se utilizan para la validacin son las siguientes:

Funcin Descripcin

isalpha( ) Determina si el carcter es una letra del alfabeto
isdigit( ) Determina si el carcter es un dgito
isxdigit( ) Determina si el carcter es un hexadecimal
isalnum( ) Determina si el carcter es una letra del alfabeto o un dgito
isascii( ) Comprueba si pertenece al conjunto de caracteres ASCII
iscntlr( ) Determina si es un carcter de control
isgraph( ) Determina si el carcter es imprimible
isprint( ) Determina si el carcter es imprimible, incluyendo el espacio
ispunct( ) Determina si el carcter es un smbolo de puntuacin
isspace( ) Determina si el carcter es un espacio en blanco
islower( ) Determina si es una letra minscula
isupper( ) Determina si es una letra mayscula
tolower( ) Convierte una letra en minscula
Lenguaje C


Pgina 51
toupper( ) Convierte una letra en mayscula

Nota: Todas estas funciones invocan al archivo de encabezado ctype.h.

Arreglos de cadenas bidimensionales.- Si queremos un arreglo de caracteres seguimos el
formato de la declaracin de arreglos bidimensionales. Si deseamos un arreglo llamado texto con 2
cadenas de 10 caracteres cada una, la declaramos e inicializamos de esta manera:

char texto [2|[10| = {Primer cadena,Segunda cadena};

En el caso del acceso, los arreglos de caracteres tienen un mtodo, en el que no se necesita
indicar la segunda dimensin para disponer de la informacin. La siguiente instruccin despliega en
pantalla las dos cadenas previamente inicializadas:

prinf(%s %s,texto[0|,texto[1|);

Como se puede observar solo se indic una dimensin y esta corresponde a la primera y segunda
lnea, ya que por default la cadena supone que la columna tiene ndice cero.
La siguiente es una representacin grfica de un arreglo de cadenas:

0 1 2 3 4 5 6 7 8 9
0
datos 1 filas
2 (1 dim)
3
Columnas (2 Dim)

En esta grfica se muestra la variable datos, que es un arreglo de 4 cadenas con 10 caracteres
cada cadena. An cuando esta representacin elimin las celdas de cada carcter, se puede accesar
cada carcter de cualquiera de las cuatro cadenas. Por ejemplo si deseamos accesar el carcter 7 de la
tercera cadena podemos escribir la instruccin:

a = datos [2|[6|

Debe tener cuidado a las indicaciones; Como indicamos la tercera cadena es la nmero dos y no
la tres, debido a que la numeracin inicia desde cero, lo mismo sucede con las columnas.

Pgina 52
Nmeros aleatorios.

Con el fin de ayudar la compresin de los arreglos, evitando una captura exhaustiva de los
elementos de los mismos en arreglos muy grandes, se ha incorporado el uso de los nmeros aleatorios.
Existen dos funciones que generan nmeros aleatorios, una de ellas genera valores entre 0 y
32767 y la otra funcin, valores entre 0 y un determinado valor menos uno. Estas funciones son rand y
random.
Para utilizar nmeros aleatorios, es necesario inicializar el generador de nmeros aleatorios, la
funcin que realiza esto es randomize. Estas funciones se detallan a continuacin:

Funcin rand() stdlib.h .- Genera una secuencia de nmeros pseudo-aleatorios.

int rand( )

devuelve un valor entero entre 0 y 32767. El siguiente ejemplo genera 10 nmeros aleatorios:

int main()
{ int i;
for (i=0 ; i<10 ; i++);
printf(%d ,rand( ));
printf (\n);
return 0;
}

An cuando el ejemplo puede generar diez nmeros aleatorios, tiene una inconveniencia; cada
vez que se ejecuta el programa, los nmeros aleatorios generados son los mismos. Para evitar esto es
necesario reinicializar la semilla de los nmeros aleatorios, cada vez que se ejecute el programa. Esto
se logra con la inclusin de la funcin randomize, que siembra la semilla que indiquemos. Esta funcin
utiliza internamente la funcin time, por lo tanto deber incluir el encabezado time.h a la que
pertenece esta funcin.
El ejemplo anterior se puede implementar con esta funcin de la siguiente manera:

#include time.h

int main()
{ int i;
randomize()
for (i=0 ; i<10 ; i++);
printf(%d ,rand());
printf (\n);
return 0;
}

Cada vez que se ejecute el programa, los nmeros aleatorios generados sern diferentes. La
funcin randomize no tiene parmetros, y deber incluir antes de utilizar la funcin de generacin de
nmeros

Funcin random( ) stdlib.h.- Genera una secuencia de nmeros aleatorios desde 0 hasta
un valor dado menos uno.

int random( int num )

Devuelve un nmero aleatorio entre 0 y num-1. El siguiente ejemplo genera diez nmeros
aleatorios entre 0 y 80:
Lenguaje C


Pgina 53


main( )
{ int i;
for (i=0 ; i<10 ; i++);
printf(%d ,random(81));
printf (\n):
return 0;
}

Al igual que la funcin rand, cada vez que se ejecute el programa, los nmeros aleatorios
generados sern los mismos, por lo tanto puede utilizar con este la funcin randomize para generar
nmeros distintos cada vez que se ejecute.
Desarrolle el programa necesario que incluya la funcin randomize en el ejemplo anterior.
Se pueden utilizar los nmeros aleatorios para asignar valores a los elementos de los arreglos
suficientemente grandes en lugar de estar capturando los valores de los elementos. Por ejemplo si se
necesitara un arreglo unidimensional de 20 elementos, y por cada ejecucin del programa capturaremos
los 20 elementos, se perdera mucho tiempo en esta operacin. Por lo tanto se puede hacer uso de los
nmeros aleatorios para asignar dichos valores.

Ejemplo: Por medio de un programa genere un vector de 20 elementos y rellnelo con valores
entre 0 y 300 y despliegue el vector.

Funciones matemticas.

Las funciones matemticas, hacen uso en su mayora del tipo de datos double. En esta seccin
se cubren las funciones trigonomtricas, funciones logartmicas y otras funciones matemticas.
El uso de funciones trigonomtricas requieren del conocimiento de las medidas de los ngulos y
algunas relaciones que los gobiernan. Adems debe de tenerse en cuanta que en las funciones
trigonomtricas, los ngulos se deben de expresar en radianes y no en grados sexagesimales.


Funciones trigonomtricas:

Funcin: sin( ) Calcula en seno de un valor, dado en radianes

Sintaxis: double sin(duoble arg)

Funcin: cos( ) Calcula el coseno de un valor, dado en radianes

Sintaxis: double cos(double arg)

Funcin: tan( ) Calcula la tangente de un valor, dado en radianes

Sintaxis: double tan(double arg)

Funcin: asin( ) Calcula el arco seno un valor, dado en radianes

Sintaxis: double asin(double arg)

Funcin: acos( ) Calcula el arco coseno de un valor, dado en radianes


Pgina 54
Sintaxis: double acos(double arg)
Funcin: atan( ) Calcula el arco tangente de un valor, dado en radianes

Sintaxis: double atan(double arg)

Funcin: hypot( ) Calcula la longitud (hipotenusa) de un tringulo rectngulo, dados sus
lados.

Sintaxis: double hypot(double x double y)


Funciones Logartmicas

Funcin: log( ) Calcula el logaritmo neperiano (logaritmo natural) de un valor.

Sintaxis: double log(double num)

num = argumento que debe ser mayor que cero.

Funcin: log10( ) Calcula el logaritmo de base 10 de un valor dado.

Sintaxis: double log10(double num)


Otras funciones matemticas:

Funcin: pow( ) Eleva un nmero dado, a una potencia dada.

Sintaxis: double pow(double base, double exp)

base = Base que se elevar a exp.
exp = Exponente a la que se elevar la base.

Funcin: pow10( ) Eleva el valor de 10 a una potencia dada.

Sintaxis: double pow10(int exp)

exp = Exponente entero al que se elevar la base 10.

Funcin: sqrt( ) Calcula la raz cuadrada de un nmero.

Sintaxis: double sqrt(double num)

num = nmero mayor que cero.

Funcin: fmod( ) Calcula el mdulo de un valor, mismo que es el resto de la divisin entera
de dos valores.

Sintaxis: double fmod(double x, double y)

Lenguaje C


Pgina 55
x, y = Divisor y Dividendo.

Funcin: modf( ) Descompone un nmero en su parte entera y fraccionaria.

Sintaxis: double modf (double num, int *i)

num = Nmero a descomponer en sus partes entera y fraccionaria.
i = Apuntador donde se guarda la parte entera.

Funcin: abs( ) Calcula el valor absoluto de un nmero entero. El valor absoluto es la
conversin a positivo del mismo nmero.

Sintaxis: int abs(int num)

Funcin: labs( ) Calcula el valor absoluto de un nmero entero largo.

Sintaxis: long labs(long num)

Funcin: fabs( ) Calcula el valor absoluto de un nmero entero doble.

Sintaxis: double abs(double num)

Funcin: ceil() Determina el menor entero que sea mayor o igual a un nmero. Si el
nmero es 2.03 devuelve 3.0 y si es -2.89 devuelve -2.0

Sintaxis: double ceil(double num)

num = Nmero del cual se determinar su nuevo valor.

Funcin: floor( Determina el mayor entero que sea menor o igual a un nmero. Si el
nmero es 2.03 devuelve 2.0 y si es -2.89 devuelve -3.0

Sintaxis: double floor(double num)

num = Nmero del cual se determinar su nuevo valor.

NOTA: Todas las funciones que se han descrito anteriormente invocan a la librera math.h.

Pgina 56
Ejercicios de Programacin
Unidad IV

1. Genere un vector de 50 elementos en forma aleatoria en el cual sus elementos se encuentren en el
rango de 150 a 450 y determine cual es el elemento mayor, el elemento menor, cual es la posicin
del elemento mayor y cual es la posicin del elemento menor.
2. Genere dos matrices iguales con dimensiones aleatorias entre 6 y 10 para filas y columnas y realice
la operacin de suma de matrices.
3. Se tiene la calificacin de 5 materias de 20 alumnos. Calcule el promedio de cada uno de ellos y de
cada una de las materias.
4. Dada una matriz de 15 x 10 de nmeros reales determine cuantos son positivos y cuantos son
negativos.
5. Genere un vector de 150 elementos y ordnelos en forma descendente.
6. Dado un vector de 60 elementos determinar cuantos elementos de este vector son cero, cuantos
son negativos y cuantos son positivos.
7. Dada una lista L de N elementos disear un programa que calcule de forma independiente la suma
de los nmeros pares y la suma de los nmeros impares
8. Dado un vector X compuesto por N elementos, se desea disear un programa que calcule la
desviacin estndar D dada por la siguiente expresin:



9. Visualizar la matriz transpuesta de una matriz M de 6 x 7 elementos. Una matriz transpuesta (MT)
a otra es aquella que tiene intercambiadas las filas y las columnas. Si una matriz M tiene 6 filas y 7
columnas, MT tendr 7 filas y 6 columnas. Mientras que se lee la matriz M se puede obtener la
matriz MT ya que a cualquier elemento M[][j] le corresponder MT[j][i en la matriz transpuesta.]
10. Genere dos matrices iguales con dimensiones aleatorias entre 3 y 7 para filas y columnas y realice
la operacin de suma de matrices y despliguelas en su forma.
11. Se tienen las calificaciones de 6 materias de 15 alumnos, determine el promedio de cada uno de los
alumnos y el promedio de cada una de las materias. Despliegue las calificaciones y sus promedios en
forma tabular, incluyendo cabeceras.
12. Dada una matriz de 10 x 10 con nmeros reales generados aleatoriamente entre positivos y
negativos, determine cuantos de ellos son positivos.
13. Genere un vector de 100 elementos, asgneles nmeros aleatorios entre 100 y 700 y marque con un
smbolo los nmeros que son primos.
14. Genere una matriz de 15 x 15 con valores aleatorios y ordnelos en forma asendente por orden de
filas.
15. Genere un arreglo de 10 x 10 con valores aleatorios y sume los elementos que se encuentran en la
diagonal principal. Despliegue la matriz y la diagonal principal en su forma.
16. Genere un arreglo de 10 x 10 con valores aleatorios y sume los elementos que se encuentran en la
diagonal principal invertida. Despliegue la matriz y la diagonal principal invertida en su forma.
17. Genere un arreglo de 10 x 10 con valores aleatorios y sume los elementos que se encuentran debajo
de la diagonal principal. Despliegue la matriz y los elementos debajo de la diagonal principal en su
forma.
18. Determine la distancia de sombra que proyecta un rbol que mide 3.7 mts. si los rayos del sol caen a
37 grados con respecto a la horizontal.
19. Para calcular un lado de un octgono regular inscrito en una circunferencia se utiliza la siguiente
formula:
2 * 2 * lado r =
Lenguaje C


Pgina 57
donde r es el radio de la circunferencia. Realice el programa donde le pida al usuario que ingrese el
radio y el programa determine cual es la longitud de uno de los lados.
20. Una forma de calcular con logaritmos de base 10, el rea de un triangulo rectngulo dados la
hipotenusa y un ngulo es en base a la formula:
log2) logB (2logh
10 Area
+
=
donde h es la hipotenusa y B es el ngulo dado. Realice el programa de manera que el usuario ingrese
el valor de la hipotenusa y el del ngulo.
21. Declare una variable de tipo cadena de longitud 15 y copie en esta Primer cadena y a continuacin
copie los primeros 14 caracteres de Segunda cadena de datos.
22. Defina dos cadenas una de 14 y otra de 5, a la primera le copia el ttulo Unin del y a la segunda
sol, imprmalos por separado y despus concatnelos, finalmente despliegue la cadena
concatenada.
23. Declare dos cadenas de 10 y 8 caracteres, asgneles un texto y concatene 5 caracteres de la
segunda a la primera.
24. Defina una variable de tipo cadena y pida al usuario que introduzca datos en ella. Determine cual es
la longitud de la cadena introducida por el usuario.
25. Defina una cadena, solicite datos para esta cadena y convierta su contenido en maysculas.
26. Defina dos cadenas y solicite datos. Determine cual de las dos cadenas es la de menor longitud.
27. Escriba un carcter desde el teclado y despliegue a que grupo o grupos pertenece dicho carcter
(numrico, alfanumrico, control, etc).


Pgina 58
Unidad .

FUNCIONES

Cuando iniciamos el estudio del lenguaje C, se coment que este es un lenguaje modular, el cual
es un mtodo de diseo en el que se permite resolver problemas por medio de descomposicin del mismo
en problemas ms simples o mdulos que pueden resolverse de forma independiente.
Este tipo de programacin modular consiste en un programa principal y subprogramas. El
programa principal es el que contiene las operaciones fundamentales y se encarga de enlazar el control
a los otros subprogramas.
Borland C++, es un lenguaje cuya filosofa descansa sobre el uso de las funciones. Como se
coment con anterioridad, cada uno de los mdulos es una funcin incluyendo al programa principal
(main). Una de las caractersticas de las funciones de Borland C++, es que no se pueden declarar
funciones dentro de funciones (funciones anidadas), es decir que se debes de declarar funciones
independientes.
En esta unidad observaremos las caractersticas de las funciones, la forma en que son devueltos
los valores de las funciones o bien como se deben de pasar los argumentos a las funciones.

Definicin.

Una funcin es un subprograma que proporciona un valor o resultado. Sirve para descomponer un
programa en mdulos ms pequeos por medio del cual se obtienen programas mas legibles y fciles de
entender.
Una funcin se invoca cuando se le hace referencia, mediante su nombre y la lista de
parmetros actuales en cualquier instruccin.
El formato de las funciones es el siguiente:

especificador_de_tipo Nombre_de_la_funcin (lista_de_parametros)
{
cuerpo_de_la_funcion
}

especificador de tipo = Especifica el tipo de valor que devuelve la funcin, este debe ser un tipo
valido (int, float, double,...)
lista_de_parametros = Lista de nombres de variables separados por comas con sus tipos asociados.
cuerpo_de_la_funcion = Conjunto de instrucciones que forman parte de la funcin.

Las diferencias de una funcin en Borland C++ con respecto a un procedimiento en Turbo Pascal
son las siguientes:

Borland C++ no distingue entre procedimiento y funcin; un procedimiento no es ms que una
funcin que no devuelve valores.
Borland C++ no permite anidamientos de funciones; es decir, no puede declararse una funcin
dentro de otra funcin, an cuando una funcin si puede llamar a otra funcin.
En Borland C++, los parmetros por referencia se pasan por su direccin con el operador &.

5
Lenguaje C


Pgina 59

Caractersticas de las funciones.

Las siguientes son las caractersticas que distinguen a las funciones de Borland C++:

Las funciones pueden estar en el mismo mdulo en donde se encuentra el programa principal (main)
o bien puede encontrarse en otro archivo e incluirse con la directiva #include.
Una funcin puede ser llamada por el programa principal (main) por otra funcin o por ella misma
(recursividad).
Puede o no llevar argumentos.
Devolver o no un valor.
Tener sus propias variables e incluso algunas pueden conservar su valor entre llamadas sucesivas.
Tienen un solo punto de entrada pero pueden tener ms de un punto de salida.

Retorno de una Funcin.- Existen dos formas en las que una funcin puede finalizar su
ejecucin y retornar al sitio en la que se llam.

* La primera ocurre cuando se alcanza la ltima sentencia de la funcin, indicando el fin de la
misma, al encontrar la llave }.

El siguiente ejemplo muestra un retorno de la funcin al alcanzar la ltima sentencia:

void despliega_menu();

void main()
{ clrscr();
printf(Ejemplo de funciones....);
despliega_menu();
gotoxy(1,20); printf(.......Fin del programa principal);
}

void despliega_menu()
{ gotoxy(28,11); printf(1.- Primera Opcin);
gotoxy(28,13); printf(2.- Segunda Opcin);
gotoxy(28,15); printf(3.- Tercera Opcin);
}

En este ejemplo la funcin despliega_menu termina hasta que se encuentra la ltima llave } y no
se devuelve ningn valor al programa principal, al terminar de ejecutarse la funcin despliega_menu, el
control pasa a la siguiente instruccin de donde se llam.

* La segunda es la que se obtiene con la sentencia return que permite retornar al punto donde
se llam la funcin, teniendo la posibilidad de devolver un valor con esta sentencia.

Ejemplo: Creando una funcin rango, genere un nmero aleatorio entre 0 y 30, si el nmero
generado es menor que 16 devuelva el valor 100 y en caso contrario devuelva el nmero 200.

#include stdlib.h
#include time.h

main()
{ int valor;
clrscr();
printf(Ejemplo de funciones....);
valor = rango(); /*El valor devuelto se asigna a valor */

Pgina 60
gotoxy(29,13); printf(Valor devuelto = %d,valor);
}

rango()
{ int num;
randomize();
num = random(31); /*Calcula el nmero aleatorio */
gotoxy(25,10); printf(Nmero aleatorio generado %d,num);
if(num<16) return 100;
else return 200;
}

Como se puede observar, este programa permite atrapar el nmero 100 o 200 que devuelve la
funcin rango, por medio de la asignacin que realiza a la variable rango, por lo tanto tiene dos puntos
de finalizacin, cada uno es por medio de la sentencia return.

Valores devueltos.

La definicin inicial de una funcin es la siguiente: Una funcin es un subprograma que
proporciona un valor o resultado. Por lo tanto nos debemos de preocupar por el resultado que deseamos
que una funcin nos devuelva.
Existen tres formas de indicar el valor que devuelve una funcin; estas son:

*Valores default *Valores Explcitos *Sin Valor

Valores default.- Cuando no se especifica ningn tipo vlido a retornar (int, float, char, ...)
al momento de declarar una funcin, esta devolver por default un valor entero int.

Ejemplo: Utilizando una funcin genere un nmero aleatorio entre 0 y 99.

main()
{ int valor;
clrscr();
printf(Ejemplo de valores devueltos por default...);
valor = aleatorio();
gotoxy(29,13); printf(Valor devuelto = %d,valor);
}

aleatorio()
{ int num;
randomize();
return random(100); }

Valores explcitos.- Cundo necesitamos que una funcin devuelva un valor diferente de
entero, es necesario indicar en la declaracin el tipo que deseamos obtener. Este tipo puede ser algn
tipo predefinido de Borland C++ (como int, float, double) o bien algn tipo definido por el usuario como
por ejemplo una estructura. Para especificar el tipo a retornar por la funcin, debemos de anteponer el
tipo al nombre de la funcin cuando se declare esta.
Cuando se utilizan funciones con valores explcitos, despus de la funcin principal (main), es
necesario declarar la misma antes de la funcin main( ). Esto se ilustra en el siguiente ejemplo en el cual
se devuelve un nmero flotante, el cual es el resultado de la divisin de dos nmeros que han sido
obtenidos como nmeros aleatorios:

#include stdlib.h

Lenguaje C


Pgina 61
float division();

main()
{ float divide;
clrscr();
printf(Ejemplo de valores devueltos explcitos...);
divide = divisin();
gotoxy(27,13); printf(Valor devuelto = %5.2f,divide);
}

float division()
{ int num1, num2;
randomize();
num1 = 1+random(50);
num2 = 1+random(50);
gotoxy(22,10);
printf(Los nmeros a dividir son: %d y %d,num1, num2);
return (float) num1/num2;
}

En este ejemplo, es necesario convertir el resultado de la divisin al tipo float, y por eso en la
funcin division se oblig este por medio del molde (float).

Nota: Cuando se utilizan funciones con valores explcitos despus de la funcin main( ) es
necesario declarar la funcin antes de main. Slo la declaracin.

Sin valor.- Existen funciones, en las que no es necesario devolver algn valor, sin embargo si no
anteponemos algo al declarar la funcin, esto se tomar como que devuelve un valor entero. Por lo tanto
existe un tipo representativo que implica la inexistencia de valores devueltos por parte de la funcin.
Este es el tipo viod, el cual se antepone al nombre de la funcin para indicar que esta no devuelve
ningn valor. Cuando se utiliza el tipo void, no se puede asignar a alguna variable.
Por ejemplo: Si tenemos una funcin llamada hola, misma que se defini como del tipo void, no
podemos realizar esto al llamar a la funcin: dato = hola( ).
El siguiente es un ejemplo clsico de una funcin que no devuelve valor:

void despliega_menu (void);

main()
{ clrscr();
printf(*** Elementos de Trabajo ***);
despliega_menu();
gotoxy(1,24); printf(..........Fin del programa principal);
}
void despliega_menu()
{ gotoxy(32,10); printf(1.- Materiales);
gotoxy(32,12); printf(2.- Mano de obra);
gotoxy(32,14); printf(3.- Equipo);
gotoxy(36,16); printf(Opcin ==>);
}



Paso de argumentos.

Los argumentos son los valores que se pueden pasar a la funcin para que sean utilizados dentro
de la misma. Si una funcin va a utilizar argumentos, estos se debern declarar por medio de variables y

Pgina 62
con el tipo correspondiente. Estas variables, slo pueden utilizarse dentro de la funcin a menos que se
indique lo contrario (S es global por ejemplo). Existen dos formas de pasar a los argumentos:

- Por valor o - Por referencia

A continuacin se expondrn las consideraciones que deber tomar en cuenta al utilizar
argumentos, para explicar cada consideracin nos basaremos en la siguiente declaracin y llamada.

Declaracin: float cargos (int a, float b)
Llamada: suma = cargos(d,e);

CONSIDERACIONES:

- La cantidad de argumentos a utilizar, deber ser la misma al momento de llamar a la funcin. Es
decir, si declar una funcin con tres argumentos, entonces al momento de utilizarlas deber incluir
tambin tres argumentos.
En nuestro ejemplo se tienen dos variables en la declaracin (a y b) y tambin se utilizan dos
variables al llamar a la funcin (d y e).
- No importa que los nombres de las variables utilizadas en la declaracin de la funcin sean
diferentes al momento de llamarlas. En nuestro ejemplo se declararon las variables a y b, pero se
utilizaron como d y e. En donde la variable a corresponde a la d y la variable b a la variable e.
- Al llamar a una funcin se deber tener en cuenta la correspondencia de tipos, es decir si la primera
variable es un entero, entonces la primera variable de la funcin deber tambin ser un entero y as
sucesivamente por cada variable. En nuestro ejemplo en la funcin se declar a como entero y b
como flotante, entonces al llamar a esta funcin la variable d deber ser entera y la variable e
deber ser flotante.

Llamadas por valor.- Este tipo de llamadas es cuando se utilizan argumentos que pueden ser
modificados por la funcin, pero cuyos cambios no repercuten al regresar de la llamada, es decir del
punto de donde se llam.
Para utilizar este tipo de argumentos, basta con declarar las variables con sus tipos
respectivos.
El siguiente ejemplo ilustra las llamadas por valor, para esto se despliegan los valores
intermedios de las variables y el resultado que devuelve la funcin.
Ejemplo: Sumar dos nmeros utilizando una funcin y desplegar el resultado.

main()
{ int a=10,b=20,c;
clrscr();
printf(Los valores de a y b antes de la funcin son %d y %d,a,b);
c = suma (a,b);
printf(\n\nLos valores de a y b despus de la funcin son %d y
%d,a,b);
printf(\n\nEl resultado de la suma es %d,c);
}

suma (int prim, int seg)
{ int res;
res = prim + seg;
prim = 200;
seg = 300;
return res
}
Lenguaje C


Pgina 63

Como se puede observar en la funcin, despus de realizar la suma, se cambiaron los valores de
prim y seg, sin embargo esto no afect a las variables a y b correspondientes en la funcin principal.

Llamadas por referencia.- Las llamadas por referencia, permiten que la funcin modifique la
variable que se pasa y los cambios efectuados se reflejen en el modulo en el que fue llamada.
Esto se obtiene en dos partes, la primera es modificando los argumentos de donde se llama a la
funcin; y la segunda consiste en modificar los argumentos de la funcin en su declaracin.

Las modificaciones son las siguientes:

En donde se llama a la funcin.- Deber anteponer el nombre del argumento, el operador &
(calcula direccin), es decir que se enva a la funcin la direccin del argumento.
Por ejemplo: resultado = suma (&a, &b);

En la declaracin de la funcin.- Deber anteponer al nombre del argumento, el operador *
(Apuntador), es decir que se declara la variable o argumento como un apuntador.

El siguiente ejemplo ilustra la llamada por referencia, modificando el ejemplo de las llamadas
por valor.

Ejemplo: Sumar dos nmeros utilizando una funcin y desplegar el resultado.

main()
{ a=10, b=20, c;
clrscr();
printf(Los valores de a y b antes de la funcin son %d y %d,a,b);
c = suma (&a,&b);
printf(\n\nLos valores de a y b despus de la funcin son %d y
%d,a,b);
}

suma (int *prim, int *seg)
{ int res;
res = *prm + *seg;
*prim = 200;
*seg = 300;
return res;
}

En este ejemplo los parmetros se pasaron por referencia y las variables en la funcin principal
se modificaron despus de ejecutarse la funcin. Una forma de interpretar el operador * en las
operaciones, es definirlas como el contenido de tal variable. Por ejemplo la sentencia res = *prim + *seg,
podramos interpretarla como asignar a res el contenido de prim mas el contenido de seg.
Los valores de a y b fueron modificados por la funcin. Inicialmente los valores eran de 10 y 20
respectivamente, pero al entrar a la funcin, estos fueron modificados a 200 y 300, entonces como
estas variables se pasaron por referencia los cambios se reflejaron al retornar a la funcin principal.

Es posible que exista una combinacin de argumentos locales y por referencia en una sola
llamada.

Ejemplo: Modifique el ejemplo de la suma de dos nmeros, pasando la variable a por valor y b
por referencia.


Pgina 64
main()
{ a=10, b=20, c;
clrscr();
printf(Los valores de a y b antes de la funcin son %d y %d,a,b);
c = suma (a,&b);
printf(\n\nLos valores de a y b despus de la funcin son %d y
%d,a,b);
printf(\n\nEl resultado de la suma es %d,c);
}

suma (int prim, int *seg)
{ int res;
res = prm + *seg;
*prim = 200;
*seg = 300;
return res;
}

Para lograr esto, tan solo basta con quitar los operadores & y *, en el o los argumentos de la
funcin que llama, en la declaracin y en cada operacin en la que se utilice tal argumento.

Paso de arreglos como argumentos.

Los arreglos son un conjunto de elementos que constan de un nombre de arreglo y un ndice por
medio del cual se puede acceder a los elementos del mismo. La forma en que Borland C++ almacena un
arreglo es por medio de localidades de memoria sucesivas, correspondindole al primer elemento la
primera direccin o la direccin base de inicio. Esta direccin base es la que se encuentra apuntada por
el nombre del arreglo.
Cuando se usan los arreglos con funciones, es posible pasar un solo elemento del arreglo o bien
la direccin de todo el arreglo con lo que podemos modificar el arreglo completo.
Debido a que se pasa la direccin del arreglo, en forma emplazada el paso de argumentos se
hace por referencia.
En esta llamada por referencia de arreglos, no es necesario utilizar los operadores & y * para
indicar direcciones y contenido por la misma razn que con los arreglos se utilizan estos implcitamente.
Cuando utilizamos arreglos unidimensionales, no es necesario indicar el tamao del arreglo en la
declaracin de la funcin, pero si el arreglo es bidimensional o multidimencional, entonces debemos
especificar el tamao que tiene cada dimensin del arreglo.
El siguiente ejemplo clarifica el uso de arreglos en las funciones.

Ejemplo: Declare un arreglo de 10 x 20, inicialicelo con nmeros aleatorios entre 20 y 80 y
despliegue el contenido de la misma. Utilice funciones para cargar la matriz y desplegar el contenido.

#include stdlib.h

void inicializa_matriz (int matriz [10][20|);
void despliega_matriz (int matriz [10|[20|);

main()
{ int matriz [10|[20|;
clrscr();
inicializa_matriz (matriz);
despliega_matriz (matriz);
}

viod inicializa_matriz (int matini [10|[20|)
Lenguaje C


Pgina 65
{ int i,j;
randomize();
for (i=0 ; i<10 ; i++)
for (j=0 ; j<20 ; j++) matini [i|[j| = 20+random(60);
}

void despliega_matriz (int mates [10|[20|)
{ int i,j;
for (i=0 ; i<10 ; i++);
{for (j=0 ; j<20 ; j++); printf(%d,mates[i|[j|);
printf (\n);
}
}

Las variables i y j de las funciones inicializa_matriz y despliega_matriz son locales a estas
funciones y por lo tanto al terminar la funcin estas se destruyen.

Ejemplo: Utilice un vector de 20 elementos, y crguelo con nmeros aleatorios entre 10 y 90. Se
necesita determinar cual es el elemento mayor de este vector.

#include stdlib.h

main()
{ int mayor,vector[20|;
inicializa_vector (vector);
mayor = busca_mayor (vector);
printf(\n\nEl nmero mayor del vector es %d,mayor);
}

inicializa_vector (int[|)
{ int i,mayor;
randomize(); clrscr();
for(i=0 ; i<20 ; i++)
{a[i| = 10+random(81); printf(%d, a[i|); }
}

busca_mayor (int a[|)
{ int i,mayor=a[0|;
for (i=0 ; i<20 ; i++) if (a[i|>mayor) mayor = a[i|;
return mayor;
}

Ejemplo: Genere un vector de 5 elementos y determine si el tercer elemento es par o impar.

#include stdlib.h

main()
{ int par,vector [5|;
inicializa_vector (vector);
par = busca_par (vector [2|); /*2 es el tercer elemento */
if (par) printf (\n\nEl tercer nmero es PAR);
else printf(\n\nEl tercer nmero es IMPAR);
}

inicializa_vector (int a[|)
{ int i;
randomize(); clrscr();
for (i=0 ; i<5 ; i++) { a[i| = 10+random(71); printf(%d, a[i|); }

Pgina 66
}

busca_par (int a)
{ int par;
par = a/2;
if (par*2==a) return 1; else return 0;
}

Resumiendo, cuando se usan los arreglos, en las funciones estos se pasan por referencia. Se
puede pasar un elemento del arreglo o el arreglo completo.

Lenguaje C


Pgina 67
Ejercicios de Programacin
Unidad V

1.- Escriba un programa que dibuje un cuadro, utilizando una funcin en la cual se deben incluir
las coordenadas de las esquinas superior izquierda e inferior derecha.

2.- Escriba un programa que incluya una funcin que reciba como parmetros 2 nmeros enteros
y devuelva un valor indicando cual es el mayor.

3.- Escriba un programa que incluya una funcin para desplegar un mensaje en la esquina inferior
derecha de la pantalla, que especifique lo siguiente: Presione cualquier tecla para continuar.

4.- Escriba una funcin que devuelva el factorial de un nmero.

5.- Escriba una funcin que permita intercambiar el valor de dos variables.

6.- Escriba un programa que permita obtener el mximo comn divisor de dos nmeros ledos del
teclado. Implemntelo con una funcin.

7.- Escriba una funcin que acepte un vector de nmeros enteros y devuelva la media de ellos.

8.- Escriba un programa que incluya una funcin que calcule el rea de un tringulo.