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(). Con
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
#include
int main()
{
int i, j = 2;
double x, y = 355.0 / 113;
i = 3 * j;
cout
Pgina 14
x = 2 * y;
x = x * x;
cout
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
#include
#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 > horas;
cout > minutos;
cout > segundos;
totalseg = ((horas * min_en_hor + minutos) * seg_en_min + segundos);
cout
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
#include
int main()
{
int entero1, entero2;
long largo1, largo2, largo3, largo4, largo5;
float x, y, real1, real2, real3, real4;
cout entero1;
cout entero2;
cout
Lenguaje C
Pgina 17
cout
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
#include
int main()
{
int i, j;
double x, y;
cout > i;
cout > j;
i += j;
j -= 6;
i *= 4;
j /= 3;
i++;
j--;
cout
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
#include
#include
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
#include
#include
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: oF = (9/5*oC) + 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
#include
void main()
{
int x;
cout > x;
if (x > 15)
cout x;
if (x > 15)
{
y = x * .3;
cout
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
#include
void main()
{
int x;
cout > x;
if (x > 45)
cout 5000)
{
Pgina 36
impuesto = salario * .15;
ahorro = salario * .05;
}
else
{
impuesto = salario * .1;
ahorro = salario * .02;
}
cout
Lenguaje C
Pgina 37
cout A;
if (A10)
if (A20) cout
Pgina 38
cin >> salario;
if (salario
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
#include
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
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 dimtam 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 ciclo510; 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 ; elem100 ; 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 ; fila10 ; fila++)
for (columna=0 ; columna20 ; 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
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 cad120;
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:
cad10 = A ; cad11 = \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
Lenguaje C
Pgina 53
main( )
{ int i;
for (i=0 ; i
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)