Turbo C

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 52

TURBO C++

LUIS ARIAS HIDALGO

IDAT

SEPARATA TURBO C
1.- Ubicacin del Turbo C.2.- Uso del Turbo C
3.- Teclas de Funcion:
4.- Estructura de un Programa en C++.5.- Tipos de datos
6.- Libreras y funciones . sentencia PRINTF.Sentencia SCANF.CLRSCR()
GETCH()
7.- Algunas diferencias entre compiladores.
8.- Operadores Aritmticos, de Asignacin, relacionales y Lgicos
9.- constantes
10.- Sentencias Condicionales .if
doble if
switch
11.- Bucles .
Sentencia FOR (PARA HASTA)
Sentencia WHILE y DO WHILE (HACER MIENTRAS)

-1Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

1.- Ubicacin del Turbo C.- El archivo que ejecuta el Turbo C se llama TC.EXE
esta dentro de la carpeta BIN y esta carpeta esta dentro de la carpeta TC que a la vez se
encuentra a la unidad C:

Ademas debemos de tener en cuenta que debe haber una carpeta llamada TMP que debe
encontrase tambien en la unidad C:
El lenguaje C se conoce como un lenguaje compilado. Existen dos tipos de lenguaje:
interpretados y compilados. Los interpretados son aquellos que necesitan del cdigo
fuente para funcionar (P.ej: Basic). Los compilados convierten el cdigo fuente en un
fichero objeto y ste en un fichero ejecutable. Este es el caso del lenguaje C.
Es un lenguaje estructurado, ya que permite crear procedimientos en bloques dentro de
otros procedimientos. Hay que destacar que el C es un lenguaje portable, ya que permite
utilizar el mismo cdigo en diferentes equipos y sistemas informticos: el lenguaje es
independiente de la arquitectura de cualquier mquina en particular.
Por ltimo solo queda decir que el C es un lenguaje relativamente pequeo; se puede
describir en poco espacio y aprender rpidamente.

2.- Uso del Turbo C

Cuando hacemos doble clic en el archivo TC.EXE o accedemos a un acceso directo nos
saldr esta pantalla que es en la cual vamos a poder programar.

3.- Teclas de Funcion:


-2Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
1.- Para maximizar la pantalla se presiona la tecla ALT+Enter
2.- Para acceder a cualquiera de las opciones del menu se presiona la tecla ALT + la
letra que esta de color amarillo.
Ejemplo: Si queremos ir a la opcin FILE presionamos ALT + F
Nota: El mouse no se emplea mucho en este programa.
3.- ABRIR UN ARCHIVO.- presionamos la tecla ALT + F luego escogemos la opcin
OPEN

Por ejemplo aqu se ha puesto la unidad C y en la parte inferior saldr los archivos que
estan dentro de C.
4.- NUEVO ARCHIVO.- se presiona la tecla ALT + F luego se escoge NEW
5.- GRABAR UN ARCHIVO.-

-3Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Se presiona la tecla ALT + F luego se escoge la opcin Save y se pone la ruta donde se
va a grabar por ejemplo aqu se va a grabar en la unidad A en una carpeta llamada
carpeta y el archivo se va a llamar EJER1.C
Nota: Los archivo solo pueden tener como mximo 8 caracteres para su nombre y la
extensin debe ser .C
6.- CERRAR UNA VENTANA.- Se presiona la tecla ALT + F3
7.- PARA EJECUTAR UN PROGRAMA .- Se presiona la tecla CTRL. + F9
8.- SALIR.- Se presiona la tecla ALT + X

4.- Estructura de un Programa en C++.Todo programa en C consta de una o ms funciones, una de las cuales se llama main. El
programa comienza en la funcin main, desde la cual es posible llamar a otras
funciones. Para poder llamar a esas funciones primero se debe llamar a la librera
que posee dichas funciones.
En C
Inclusin de Libreras
Declaracin de Variables
void main( ) {
Bloque
}

En Pseudocodigo
Entorno
Declaracin de Variables
Inicio
Bloque
fin

En otras palabras todo lo que programaremos ser dentro del main()


MUY IMPORTANTE:
Toda instruccin lleva punto y coma(;) Al final.
Cuando se abre una llave ({) quiere decir que se van a ejecutar una serie de
sentencias hasta cuando se cierre la llave(})
Las palabras reservadas se escriben tal como son es decir no es lo mismo
escribir main() que MAIN() o que Main() son sensibles a las maysculas y
minsculas. Casi todas las palabras se escriben en minsculas.
No olvidar que las funciones siempre devuelven un valor si en caso queremos
que no devuelva nada se escribe la palabra reservada VOID o simplemente no
se pone nada
Si el teclado no esta configurado debemos configurarlo en el panel de control,
teclado, idiomas y escogemos espaol-Per

5.- Tipos de datos


En 'C' existen bsicamente cuatro tipos de datos, aunque como se ver despus,
podremos definir nuestros propios tipos de datos a partir de estos cuatro. A continuacin
se detalla su nombre, el tamao que ocupa en memoria

-4Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
TIPO
char
int
float
double

Tamao
1 byte
2 bytes
4 bytes
8 bytes

Ejemplo:
int num1=4,num2,num3=6;//Aqu se declara 3 variables de tipo int y la variable num1
y num3 se le esta dando un valor.
char nombre[30];//Aqu se declara una variable de tipo char en la cual se podra
guardar una cadena de 30 caracteres
char sexo;//Se podra guardar un caracter
float suel;//Se podra guerdar un entero con decimales

6.- Libreras y funciones . - Llamadas tambin ficheros de cabecera son archivos a


los cuales se les debe hacer referencia antes de empezar a programar ya que estas
contendrn las diferentes funciones que utilizaremos al programar estos archivos tienen
extensin H.
Para declarar una librera es de la siguiente forma:
# include iostream.h
En este ejemplo s esta llamando a la librera iostream.h. Tambin se puede poner en
ves de las comillas los signos < y > es decir #include <iostream.h>
Principales libreras con sus principales Funciones:
stdio.h
printf Escribe en la pantalla Sintaxis: printf(formato, arg1,...);
scanf Lee datos del teclado Sintaxis: scanf(formato, arg1,...);
puts Escribe una cadena y salto de lnea. Sintaxis: puts(cadena);
gets Lee una cadena Sintaxis: gets(cadena); y otras mas
conio.h
clrscr Borra la pantalla. Sintaxis: clrscr( );
gotoxy Cambia la posicin del cursor a las coordenadas indicadas. Sintaxis:
gotoxy(columna , fila);
textcolor Selecciona el color de texto (0 - 15) Sintaxis: textcolor(2);
string.h
strlen Calcula la longitud de una cadena. Sintaxis: longitud=strlen(cadena);
strcpy Copia el contenido de una cadena sobre otra. Sintaxis: strcpy(copia , original);
strcat Concatena dos cadenas. Sintaxis: strcat(cadena1 , cadena2);
strcmp Compara el contenido de dos cadenas. Si cadena1 < cadena2 retorna un nmero
negativo. Si cadena1 > cadena2, un numero positivo, y si cadena1 es igual que cadena2
retorna 0 ( o NULL ).
Sintaxis: valor=strcmp(cadena1 , cadena2);
MUY IMPORTANTE: en este caso vamos a utilizar funciones como PRINTF, SCANF
y para eso se debe hacer referencia a la librera que contiene dichas funciones en este
caso (STDIO.H), tambien utilizaremos funciones como GETCH y CLRSCR y estas
estan contenidas por la librera CONIO.H.
No olvidar que todo es con minusculas

-5Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Sentencia PRINTF.La rutina printf permite la aparicin de valores numricos, caracteres y cadenas de texto
por pantalla.
La sentencia printf maneja los sgtes caracteres especiales que se conocen como
secuencia de escape.
A continuacin vemos una tabla de las ms significativas:
\n
salto de lnea
\t
tabulacin horizontal
\\
contrabarra
\f
salto de pgina
\'
apstrofe
\"
comillas dobles
\0
fin de una cadena de caracteres
Ejemplo: printf("Arriba\n \"Peru\" \tcaracho");//el resultado seria:
Arriba
Peru
Caracho
Sentencia SCANF.Esta sentencia permite leer un dato desde el teclado
Para lo cual se necesita algunos modificadores que debemos de tomar en cuenta.
%c
%d
%f
%s
%ld
%lf

Un nico carcter tipo Char


Un entero tipo int
Un nmero float , double
Una cadena de caracteres tipo char
Un Entero largo
Un Float/Double largo

Tanto para imprimir como para leer un dato se debe usar los modificadores que son los
arriba mencionados.
NOTA IMPORTANTE : Para leer un dato nmerico siempre debemos anteponer el &
antes de la variable asi como tambin si la variable es tipo char para solo un carcter.
Si la variable es de tipo char para varios caracteres no se pone el &
Para visualizar o imprimir no se pone & en ningun tipo de variables
Ejemplo Printf
Turbo C
1.- Visualizar "Hola Mundo"
printf("hola Mundo");
2.- Visualizar "Hola "
printf("hola \nMundo");
"Mundo"
3.- Visualizar "El sueldo de ana es 150" printf("El sueldo de %s es %d",nom,suel);
Tomando en cuenta que nom="ana" y
suel = 150
-6Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Ejemplo Scanf
1.- Leer una variable de tipo int x
2.- Leer las sgtes. variables
int a;
float b;
char cat
char nom[10]
int long num;
float long num;

Turbo C
scanf("%d",&x);
scanf("%d",&a);
scanf("%f",&b);
scanf("%c",&cat);
scanf("%s",nom);
scanf("%ld",&num);
scanf("%lf",&num);

CLRSCR() .- Esta funcin nos permite limpiar la pantalla en el caso de Turbo C es


necesario poner esta funcin ya que sin ella saldran datos anteriormente ingresados.
GETCH() .- Esta Funcin permite retener la pantalla hasta que se presione alguna tecla.
Esta funcin es esencial en Turbo C ya que el compilador ejecuta linea por linea de una
manera tan rapida que el resultado se muestra por pantalla e inmediatamente termina el
programa.
Es por eso que se debe retener la pantalla antes de terminar el programa.
Para GETCH y CLRSCR() se necesita la librera CONIO.H

7.- Algunas diferencias entre compiladores.


La programacin en turbo C es la misma a la de Borland C habiendo algunas de las
siguientes diferencias:
1
2
3
4
5

BORLAND C
TURBO C
La pantalla se limpia Automaticamente
Se tiene que limpiar la pantalla con la funcin CLRSCR();
La funcion para leer un dato es CIN>>
La funcion para leer un dato es SCANF();
La funcion Para visualizar un dato es COUT<< La funcion para visualzar un dato es PRINTF()
El instalador ocupa 41 mb
El instalador ocupa 1.5 mb(zipeado)
Hay dificultades para usos de algunas funciones
Las funciones son faciles de acceder
CPRINTF,SOUND(),DELAY()

8.- Operadores Aritmticos, de Asignacin, relacionales y Lgicos


Operadores Aritmticos .- Existen dos tipos de operadores aritmticos:
Los binarios:
+
Suma
Resta
*
Multiplicacin
/
Divisin
%
Mdulo (resto)
Ejemplo
z = b + c;
z = b % c;

z va a ser igual a b mas c


z va a ser igual a b mod de c

y los unarios:
-7Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
++
--

Incremento (suma 1)
Decremento (resta 1)

Ejemplo:
a++;
aqu la variable a se esta incrementando en 1 es lo mismo que decir a = a + 1,lo ,mismo
sucede para decrementar una variable seria a--; aqu la variable a se esta disminuyendo
en 1 que es lo mismo que decir a= a 1;
Operadores de Asignacin .=
Asignacin simple
+=
Suma
-=
Resta
*=
Multiplicacin
/=
Divisin
%=
Mdulo (resto)
Con estos operadores se pueden escribir, de forma ms breve, expresiones del tipo:
n=n+3 se puede escribir n+=3
k=k*(x-2) lo podemos sustituir por k*=x-2
x =x/3 se puede escribir x/=3
Operadores relacionales .Los operadores relacionales se utilizan para comparar el contenido de dos variables.
En C existen seis operadores relacionales bsicos:
>
Mayor que
<
Menor que
>=
Mayor o igual que
<=
Menor o igual que
==
Igual que
!=
Distinto que
Operadores Lgicos .Los operadores lgicos bsicos son tres:
&&
AND
||
OR (Alt + 124)
!
NOT (El valor contrario)
Nota : A la hora de programar es conveniente aadir comentarios (cuantos ms mejor)
para poder saber que funcin tiene cada parte del cdigo, en caso de que no lo
utilicemos durante algn tiempo. Adems facilitaremos el trabajo a otros programadores
que puedan utilizar nuestro archivo fuente.
Para poner comentarios en un programa escrito en C usamos los smbolos /* y */:
/* Este es un ejemplo de comentario */
// Este tambien es un comentario
/* Un comentario tambin puede
estar escrito en varias lneas */

-8Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
El smbolo /* se coloca al principio del comentario y el smbolo */ al final.
El comentario, contenido entre estos dos smbolos, no ser tenido en cuenta por el
compilador.
Ejercicio:
Ingrese el nombre y el sueldo de un trabajador luego calcular y mostrar
A . - Una bonificacin de 20% por Navidad
B . - Un descuento de 10% por AFP
C . y su Sueldo Final.
En Pseudocodigo
Entorno
Variables
sueldo ,boni ,desc ,final numerico
nombre alfanumerico
Inicio
Ingresar sueldo,nombre
Calcular Boni=sueldo * 0.20
Calcular Desc=sueldo * 0.10
Calcular Final=sueldo + boni desc
visualizar boni,desc,final
fin

En Borland C++
#include stdio.h
void main(){
float sueldo,boni,desc,final;
char nombre[10];
clrscr();
printf(Nombre: );scanf(%s,nombre);
printf(Sueldo: );scanf(%f,&sueldo);
boni = sueldo * 0.20;
desc = sueldo * 0.10;
final = sueldo + boni desc;
printf(\nBonificacion : %f,boni);
printf(\nDescuento : %f,desc);
printf(\nFinal
: %f,final);
getch();
}

9.- Constantes
Al contrario que las variables, las constantes mantienen su valor a lo largo de todo el
programa.
Para declara una constante, se usa #define:
Ejemplo:
#include "stdio.h"
#define inicio main()
#define escribir printf
#define leer scanf
#define limpiar clrscr()
inicio{
char nom[10];
limpiar;
escribir("Ingrese Nombre :");leer("%s",nom);
escribir("\nEl nombre que ingreso es :%s",nom);
escribir("\nEl nombre que ingreso es :\b\b%s",nom);
escribir("\n\tEl nombre que ingreso es :%s",nom);
escribir("\n\"El nombre que ingreso es :%s\"",nom);
getch();
}

-9Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

10.- Sentencias Condicionales .Sentencia IF_ELSE (SI SINO)


La sentencia solo se ejecuta si se cumple la condicin. En caso contrario el programa
sigue su curso sin ejecutar la sentencia.
Otro formato:
if (condicin){
}
Si se cumple la condicin ejecutar la sentencia1, sin ejecutar la sentencia2. En
cualquier caso, el programa continuar a partir de la sentencia2.
Nota: Si hubiera mas de una sentencia dentro del If o el else se abrir con llaves
Ejemplo:
if (condicin) {
sentencia1;
sentencia2;
}
else{
sentencia3;
sentencia4;
}
Ejemplo 1: Ingrese por teclado una contrasea si esta es igual a 2002 se debe
visualizar el mensaje Acceso Permitido en caso contrario visualizar el mensaje
Acceso Denegado
#include stdio.h
void main(){
int clave;
clrscr();
printf("Introduce tu clave: ");scanf(%d,&clave);
if(clave==2002)
printf("Acceso permitido");
else
printf("Acceso denegado");
getch();
}
Nota: no se abre llave en el IF ni en el ELSE ya que solo ejecuta una linea.
Ejemplo 2: Ingrese tres nmeros por teclado y visualice el mayor.
#include "stdio.h"
void main(){
int n1,n2,n3,mayor;
clrscr();
printf(Ingrese Num 1 :);scanf(%d,&n1);
printf(Ingrese Num 2 :);scanf(%d,&n2);
printf(Ingrese Num 3 :);scanf(%d,&n3);
if(n1>n2 && n1>n3){
mayor = n1;
}
if(n2>n1 && n2>n3){
mayor = n2;
}
- 10 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
if(n3>n1 && n3>n1){
mayor = n3;
}
printf("El mayor es %d",mayor);
getch();
}
NOTA: && siginifica Y y || significa o.
DOBLE IF
Tambien se puede aplicar el doble IF
Ejemplo:
a=10,b=20;
ma=(a>b)?a:b;//aqu se esta preguntando si a es mayor que b en la variable ma se
guarda la variable a si no se guarda la variable b.
Sentencia SWITCH (EN CASO)
switch (variable){
case contenido_variable1:
sentencias;
break;
case contenido_variable2:
sentencias;
break;
default:
sentencias;
}
Cada case puede incluir una o ms sentencias sin necesidad de ir entre llaves, ya que se
ejecutan todas hasta que se encuentra la sentencia BREAK la variable evaluada slo
puede ser de tipo entero o caracter. default ejecutar las sentencias que incluya, en caso
de que la opcin escogida no exista.
Ejemplo1: Ingrese un nmero del 1 al 7 y visualize que da es.
#include stdio.h
void main(){
int dia;
clrscr();
printf("Introduce el da: ");scanf(%d,&dia);
switch(dia){
case 1: printf("Lunes"); break;
case 2: printf("Martes"); break;
case 3: printf("Mircoles"); break;
case 4: printf("Jueves"); break;
case 5: printf("Viernes"); break;
case 6: printf("Sbado"); break;
case 7: printf("Domingo"); break;
default : printf("El da no existe); break;
}
getch();
}
- 11 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

11.- Bucles .
Sentencia FOR (PARA HASTA)
FOR (Para Hasta)
Su sintaxis es:
for (inicializacin;condicin;incremento o decremento){
sentencia1;
sentencia2;
}
El FOR necesita una variable que controle las vueltas que se da
Esta variable guardara el inicio, la condicin y el incremento o decremento.
Ejemplo 1:
For(i=0;i<=10;i++){
}
En este for se esta empezando de 0 y la condicion es que mientras i sea menor o igual
que 10, finalmente i se incrementara en 1 por cada vuelta que se de.
(se dar 11 vueltas)
Ejemplo 2:
For(i=2;i<=10;i=i+2){
}
En este FOR se empieza de 2 mientras que i sea menor o igual que 10, finalmente i se
incrementara de 2 en 2. (se dar 5 vueltas).
Ejemplo 3:
For(i=10;i>0;i--){
}
En este FOR se empieza de 10 mientras que i sea mayor que 0, finalmente i se
decrementar en 1 (se dar 10 vueltas).
Ejercicio 1:
Ingrese un nmero y ver la tabla de multiplicar de ese numero.
#include "stdio.h"
void main(){
int num,i;
clrscr();
printf("Ingrese Numero a Multiplicar :");scanf(%d,&num);
for(i=1;i<=12;i++){
printf(%d * %d = %d\n,i,num,i*num);
}
getch();
}
En este ejercicio se ingresara un nmero y se almacenar en la variable num luego se
tendr que multiplicar esa variable por 1,2,3,4,5,6,7,8,9,10,11,12
La sentencia
printf(%d * %d = %d\n,i,num,i*num);
Significa que primero se escribir el valor de i luego se escribira el carcter * luego
se va a escribir el valor de num luego se escribe el carcter = luego se escribe el
valor de i * num y finalmente se escribira un salto de linea. Esto se repetira 12 veces.
Ejercicio 2
Visualizar los nmeros pares o impares hasta el 100 en forma ascendente o descendente.
- 12 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Para eso se ingresara por teclado que clase de numero se quiere ver P par o I impar y
tambien se ingresara por teclado la forma de visualizacion si es A ascendente y si es
D descendente.
#include "stdio.h"
void main(){
char clase,forma;
int i,vini,vfin;
clrscr();
printf("Ingrese Clase de Numero P/I(Par/Impar) :");scanf(%c,&clase);
printf("Ingrese Forma A/D (Ascendente/Descendente) :");scanf(%c,&forma);
if(clase=='P'){
vini = 2;
vfin = 100;
}else{
vini = 1;
vfin = 99;
}
if(forma=='A'){
for(i=vini;i<=vfin;i=i+2){
printf(%d\t",i);
}
}else{
for(i=vfin;i>=vini;i=i-2){
printf(%d\t",i);
}
}
getch();
}
Ejercicio 3: Visualizar la tabla de multiplicar de un numero x para lo cual se deber
ingresar primero el numero que se va a multiplicar luego desde donde empieza la tabla y
tambin hasta donde termina la tabla
#include "stdio.h"
main(){
int num,ini,fin,i;
printf("Ingrese Numero a Multiplicar =>");scanf(%d,&num);
printf("Ingrese Inicio de la tabla =>"); scanf(%d,& ini);
printf("Ingrese Fin de la tabla =>"); scanf(%d,&fin);
for(i=ini;i<=fin;i++){
printf(%d * %d = %d\n",num,i,num*i);
}
}
El resultado ser el siguiente:

- 13 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

Sentencia WHILE y DO WHILE (HACER MIENTRAS)


Ambas sentencias son las mismas con la unica diferencia que el WHILE controla la
condicin antes de entrar en el bucle. Si sta no se cumple, el programa no entrar
en el bucle. Y el DO WHILE controla la condicin al final del bucle. Si sta se
cumple, el programa vuelve a ejecutar las sentencias del bucle.
Sintaxis del WHILE es:
while (condicin) {
sentencia;
}
Esto se define Mientras que la condicion se cumpla hacer.
Sintaxis del DO WHILE es:
do{
sentencia1;
sentencia2;
}while (condicin);
Esto se define Hacer mientras que la condicion se cumpla.
/* Uso de la sentencia DO...WHILE. */
Ejemplo 1:
#include <stdio.h>
void main() /* Muestra un men si no se pulsa 4 */
{
char seleccion;
do{
clrscr();
printf("1.- Comenzar\n");
printf("2.- Abrir\n");
printf("3.- Grabar\n");
printf("4.- Salir\n");
printf("Escoge una opcin: ");
seleccion=getch();
switch(seleccion){
case '1':printf("Opcin 1");
break;
case '2':printf("Opcin 2");
break;
case '3':printf("Opcin 3");
}
}while(seleccion!='4');
}
- 14 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Ejemplo 2:
#include <stdio.h>
main() /* Escribe los nmeros del 1 al 10 */
{
int numero=1;
while(numero<=10)
{
printf("%d\n",numero);
numero++;
}
}

- 15 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

12.- Funciones
Las funciones son bloques de cdigo utilizados para dividir un programa en partes ms
pequeas, cada una de las cules tendr una tarea determinada.
Su sintaxis es:
tipo_funcin nombre_funcin (tipo y nombre de argumentos)
{
bloque de sentencias
}
tipo_funcin: puede ser de cualquier tipo de los que conocemos. El valor devuelto por la
funcin ser de este tipo. Por defecto, es decir, si no indicamos el tipo, la funcin
devolver un valor de tipo entero ( int ). Si no queremos que retorne ningn valor
deberemos indicar el tipo vaco ( void ).
nombre_funcin: es el nombre que le daremos a la funcin.
tipo y nombre de argumentos: son los parmetros que recibe la funcin. Los argumentos
de una funcin no son ms que variables locales que reciben un valor. Este valor se lo
enviamos al hacer la llamada a la funcin. Pueden existir funciones que no reciban
argumentos.
bloque de sentencias: es el conjunto de sentencias que sern ejecutadas cuando se
realice la llamada a la funcin.
Las funciones pueden ser llamadas desde la funcin main o desde otras funciones.
Nunca se debe llamar a la funcin main desde otro lugar del programa. Por ltimo
recalcar que los argumentos de la funcin y sus variables locales se destruirn al
finalizar la ejecucin de la misma.
Ejemplo:
int mayor(int n1,int n2,int n3){
menor(int n1,int n2){
}
}
float calcula(char msg[255]){
char *mensaje(){
}
}
Aqu tenemos 4 funciones la primera se llama mayor y recibe 3 parametros de tipo
entero y retorna un valor de tipo entero.
La funcion mensaje es de tipo char noten que cuando es de tipo char se pone un * antes
de la funcion, en este caso no recibe parmetros.
La funcion menor viene a ser un procedimiento recibe 2 parametros y no retorna nada.
La funcion calcula recibe un parmetro de tipo char y retorna valor de tipo flota.
Ejemplo de Funciones:
/*Ingresar un numero y mediante una funcion retornar si es perfecto o no*/
#include "stdio.h"
#include "conio.h"
char *perfecto(int num){
int i,suma=0;
for(i=1;i<num;i++){
if(num%i==0)suma +=i;
}
- 16 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
if(suma==num) return "Es perfecto";
else return "No es perfecto";
}
void main(){
int n;
clrscr();
printf("Ingrese Numero.....");scanf("%d",&n);
printf("El numero %s",perfecto(n));
getch();
}
/*Ingresar 2 numeros y mostrar los primos que hay en ese rango de numeros
mediante una funcion en este caso la funcion es un procedimiento y no retorna nada
ademas se va a repetir ese proceso varias veces*/
#include "stdio.h"
#include "conio.h"
void primos(){
int ini,fin,num,i,cd,cont=0;
printf("Ingrese numero inicial.....:");scanf("%d",&ini);
printf("Ingrese numero final.......:");scanf("%d",&fin);
for(num=ini;num<=fin;num++){
cd=0;
for(i=1;i<=num;i++){
if(num%i==0) cd++;
}
if(cd==2){
printf("%d \t",num);
cont++;
}
}
printf("\nCantidad de primos %d",cont);
}
void main(){
do{
clrscr();
primos();
printf("\n\nDesea Continuar..S/N?===>");
}while(toupper(getch())!='N');
}

13.- Funcion Random.random Retorna un valor aleatorio entre 0 y num-1.se necesita de la librera STDLIB.H
Sintaxis: valor=random(num); /* Tambin necesitamos la funcin randomize */
Ejemplo: n =random(10)+1;//Un numero aleatorio del 1 al 10
N=random(6)+1; // numero aleatorio del 1 al 6
randomize Inicializa el generador de nmeros aleatorios. Deberemos llamarlo al inicio
de la funcin en que utilicemos el random. Tambin deberemos utilizar el include
time.h, ya que randomize hace una llamada a la funcin time, includa en este ltimo
archivo.
- 17 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Sintaxis: randomize( );
Ejemplo: Tener un vector de 10 elementos y luego llenarlo con numeros aleatorios del 1
al 10
#include "stdio.h"
#include "stdlib.h" //Para el random
#include "conio.h"
#include "time.h"//Para el randomize
#define n 10
int i,num[n]={1,2,3,4,5,6,7,8,9,10};
void listar(){
for(i=1;i<n;i++){
printf("%d\t",num[i]);
}
printf("\n\n");
}
void ingresar(){
randomize();
for(i=1;i<n;i++){
num[i]=random(10)+1;
}
}
void main(){
clrscr();
listar();
ingresar();
listar();
getch();
}
Noten que en este ejemplo el vector por defecto esta lleno de ah se generan los numeros
aleatorios y se vuelve a llenar

14 Conversin de Datos.- Para convertir datos de un tipo a otro necesitamos las


siguientes funciones:
(float) convierte a float
x= (float)n;
(int) convierte a entero
x=(int)n;
atof Convierte una cadena de texto en un valor de tipo float.
atof(cadena);
atoi Convierte una cadena de texto en un valor de tipo entero.
atoi(cadena);
itoa Convierte un valor numrico entero en una cadena de texto
itoa(nmero , cadena , base);
donde numero es la variable de tipo numrica que se quiere convertir, cadena es la
variable de tipo char donde de va a guardar el numero y base generalmente ser 10,
aunque se puede indicar otra distinta.
Se necesita la librera stdlib.h
Ejemplo:
#include "stdio.h"
#include "conio.h"
- 18 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
#include "stdlib.h"
void main(){
int n1=10;
float n2=123.45;
char n3[10]="244.45",cad[10];
clrscr();
printf("n1 vale %d\n",n1);
printf("n2 vale %8.2f\n",n2);
printf("n3 vale %s\n",n3);
//Ahora vamos a convertir los valores
printf("n1 convertido a float vale %8.2f\n",(float)n1);
printf("n2 convertido a int vale %d\n",(int)n2);
printf("n3 convertido a float vale %8.2f\n",atof(n3));
printf("n3 convertido a int vale %d\n",atoi(n3));
printf("n1 convertido a char vale %s\n",itoa(n1,cad,10));
getch();
}

15.- ARREGLOS
Los arreglos son una coleccin de variables del mismo tipo que se referencian
utilizando un nombre comn. Un arreglo consta de posiciones de memoria contigua. La
direccin ms baja corresponde al primer elemento y la ms alta al ltimo. Un arreglo
puede tener una o varias dimensiones. Para acceder a un elemento en particular de un
arreglo se usa un ndice.

Arreglos Unidimensionales (Vectores).Es una serie de datos del mismo tipo, tambin conocidos como vectores o rangos. Una
arreglo esta constituido por varias posiciones de memoria de igual tamao consecutivas
que tienen el mismo tipo de variable y se accesan usando el mismo nombre seguido de
un subndice entre corchetes. La cantidad total de espacio que se usa por un arreglo
depende de 2 cosas: El nmero de elementos en el arreglo y El tamao del arreglo.

Declaracin de un Arreglo es igual a como se hara con una variable, a excepcin de


que tambin se especifica la cantidad de elementos en el arreglo encerrado entre
corchetes de la siguiente manera: tipo nombre_del_arreglo[tamao];
Cuando se declara un arreglo, sus valores se pueden inicializar de la siguiente manera:
Int lista[9]= {0, 4, 78, 5, 32, 9, 77, 1, 23}
No trate de engaar al Compilador inicializando mas valores en el arreglo de los que
puede, ya que este no lo obedecer, sin embargo, si inicializa solo una parte del arreglo,
las restantes posiciones se inicializan con 0s.
Si desea imprimir un valor de un arreglo, la lnea luce as: printf ("%d", lista[1]);
Una Caracterstica importante de los arreglos en C es que no se pueden modificar los
limites superior e inferior (y por tanto el rango) durante el programa. El limite inferior
se fija siempre en 0 y el superior lo fija el programador, es decir:

- 19 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
int vector[]={1,2,3,4,5,6,7,8};
char vector[]="programador";
char vector[]={'p','r','o','g','r','a','m','a','d','o','r'};
Una particularidad con los vectores de tipo char (cadena de caracteres), es que
deberemos indicar en que elemento se encuentra el fin de la cadena mediante el caracter
nulo (\0). Esto no lo controla el compilador, y tendremos que ser nosotros los que
insertemos este caracter al final de la cadena.
Por tanto, en un vector de 10 elementos de tipo char podremos rellenar un mximo de
9, es decir, hasta vector[8]. Si slo rellenamos los 5 primeros, hasta vector[4], debemos
asignar el caracter nulo a vector[5]. Es muy sencillo: vector[5]='\0';
Ejemplo 1:
/* Vector de tipo char. */
#include <stdio.h>
main() /* Rellenamos un vector char */
{
char cadena[20];
int i;
for (i=0;i<19 && cadena[i-1]!=13;i++){
cadena[i]=getche( );
}
if (i==19) cadena[i]='\0';
else cadena[i-1]='\0';
printf("\n%s",cadena);
}
Podemos ver que en el for se encuentran dos condiciones:
1.- Que no se hayan rellenado todos los elementos (i<19).
2.- Que el usuario no haya pulsado la tecla ENTER, cuyo cdigo ASCII es 13.
(cadena[x-i]!=13).
Tambin podemos observar una nueva funcin llamada getche( ), que se encuentra en
conio.h. Esta funcin permite la entrada de un caracter por teclado. Despus se
encuentra un if, que comprueba si se ha rellenado todo el vector. Si es cierto, coloca el
caracter nulo en el elemento n20 (cadena[19]). En caso contrario tenemos el else, que
asigna el caracter nulo al elemento que almacen el caracter ENTER.
En resumen: al declarar una cadena deberemos reservar una posicin ms que la
longitud que queremos que tenga dicha cadena.
Ejemplo 2.- Llamadas a funciones con arrays
/* Envo de un array a una funcin. */
#include <stdio.h>
void visualizar(int array[]) /* desarrollo */
{
int i;
for (i=0;i<25;i++) printf("%d",array[i]);
}
main() /* rellenamos y visualizamos */
{
- 20 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
int array[25],i;
for (i=0;i<25;i++)
{
printf("Elemento n %d",i+1);
scanf("%d",&array[i]);
}
visualizar(array);
}
Ejemplo 3.- Mantenimiento a un Vector
#include <stdio.h>
#include <conio.h>
#define MAX 100
int vector[MAX],reg=0,i;
int buscar(int n){
int pos=-1;
for(i=0;i<reg;i++){
if(vector[i]==n){
pos=i;
break;
}
}
return pos;
}
void ingreso(){
do{
clrscr();
printf("Ingrese Elemento[%d]",reg+1);scanf("%d",&vector[reg]);
reg++;
printf("Desea Continuar..S/N?");
}while(toupper(getche())!='N');
}
void listado(){
clrscr();
for(i=0;i<reg;i++){
printf("%d\t",vector[i]);
}
}
void consulta(){
int num,pos;
clrscr();
printf("Ingrese Numero a Consultar...");scanf("%d",&num);
pos=buscar(num);
if(pos>=0)printf("\nEl numero existe");
else printf("\nEl numero no existe");
}
- 21 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
void eliminar(){
int num,pos;
clrscr();
printf("Ingrese Numero a Eliminar...");scanf("%d",&num);
pos=buscar(num);
if(pos>=0){
for(i=pos;i<reg;i++){
vector[i]=vector[i+1];
}
reg--;
}else{
printf("\nNo se econtro el Numero...");
}
}
void modifica(){
int num,pos;
clrscr();
printf("Ingrese Numero a Modificar...");scanf("%d",&num);
pos=buscar(num);
if(pos>=0){
printf("Ingrese Nuevo Numero---->");scanf("%d",&vector[pos]);
}else{
printf("\nNo se econtro el Numero...");
}
}
void main(){
int op;
do{
clrscr();
printf("Menu Principal\n");
printf("==============\n");
printf("1.- Ingreso\n");
printf("2.- Listado\n");
printf("3.- Consulta\n");
printf("4.- Eliminacion\n");
printf("5.- Modificacion\n");
printf("6.- Salir\n");
printf("Escoga Opcion---->");scanf("%d",&op);
switch(op){
case 1:ingreso();break;
case 2:listado();break;
case 3:consulta();break;
case 4:eliminar();break;
case 5:modifica();break;
}
getch();
- 22 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
}while(op!=6);
}

Practica de Vectores
1.- Generar numeros aleatorios del 1 al 100 y llenarlos en un vector de 10 elementos
luego mostrar el mayor de ellos y el menor
2.- Generar un vector de 30 elementos con numeros aleatorios sin que estos se repitan
3.- Generar un vector de 30 elementos con numeros aleatorios sin que estos se repitan y
luego eliminar los primos
4.- Llenar un vector de 10 elementos con cadenas y luego mostrarlas
5.- Llenar un vector con N elementos mximo(50) donde habra un menu de
ingreso(donde los numeros que se ingresan no se pueden repetir), Insercin x
Posicin(donde se ingresa la posicin donde se quiere insertar el numero), Eliminacin
x Posicin y Listado.
6.- Generar un vector de 30 elementos solo con numeros primos
7.- Generar 2 vectores de 30 elementos y de ah se debe llenar en un tercer vector la
suma de los elementos (si el elemento del vector 1 es mayor), o la resta(si el elemento
del vector2 es mayor)
8.- Teniendo 3 vectores paralelos llenar codigo,nombres de artefactos y precios
Luego se debe hacer un menu que tenga las siguientes opciones:
- Ingreso.- donde se ingresa el codigo, nombre del artefacto y precio.
- Listado.- se listan los vectores
- Consulta.- se ingresa el codigo del artefacto y salen sus datos
- Eliminar.- se ingresa el codigo del artefacto y salen sus datos y sale una opcion
desea Eliminar
- Modificar.- se ingresa el codigo del artefacto y salen sus datos y sale una opcion
desea Modificar y si se pulsa Si se ingresa por teclado el nombre y precio y se
modificaran los datos
- Ventas.- Se ingresa el codigo y se muestran los datos luego se ingresa la cantidad
a comprar y sale el monto por esa compra

Arreglos Bidimensionales(Matrices)
Un arreglos bidimensional esta compuesto, por un conjunto de elementos homogneos y
se puede acceder a los datos utilizando dos subndices, este tipo de arreglo es tambin
conocido como matriz.
Un arreglo bidimensional se define as:
int arreglo[10][10];
float matriz[10][10];
tambin podemos utilizar constantes para definir la dimensin del arreglo de dos
dimensiones:
#define N 10
int arreglo[N][N];
INICIALIZACIN
Una matriz o arreglo bidimensional se puede inicializar de este modo:
int matriz[3][3] = {1,2,3,4,5,6,7,8,9};
Con la anterior asignacin se crea en memoria una matriz igual a la de abajo
- 23 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Fil/Col
0
1
2
0
1
2
3
1
4
5
6
2
7
8
9
Tambin podemos utilizar una estructura for dentro de otra estructura for para
inicializar los valores de un arreglo de dos dimensiones como se muestra a
continuacin:
Leer desde teclado una matriz de nmeros enteros de dimensin 3x3.
#include <stdio.h>
#define TAM 10
void main(){
int matriz[TAM][TAM];
for( int i=0; i<TAM ; i++)
{
for( int j=0; j<TAM; j++)
{
printf(Ingrese el elemento [%d] );scanf(%d,&matriz[i][j]);
}
}
}
ACCESO A LOS ELEMENTOS DE UN ARREGLO BIDIMENSIONAL
En un arreglo de dos dimensiones necesitamos tambin dos ndices para acceder a sus
elementos.
Si utilizamos: matriz[i][j], entonces i se refiere a la fila y j a la columna.
Para acceder al elemento de la segunda fila y segunda columna de la matriz
anteriormente creada.
int nro = matriz[1][1];
En la variable nro se guardara el nmero 5.
Las matrices o arreglos bidimensionales se suelen utilizar en clculos matemticos,
operaciones con matrices, recorridos por matrices, y cualquier uso que nosotros le
podamos dar.
Se pueden definir arreglos de ms de 2 dimensiones, pero su manejo se dificultara
enormemente.
Una matriz bidimensional se podra representar grficamente como una tabla con filas y
columnas.La matriz tridimensional se utiliza, por ejemplo, para trabajos grficos con
objetos 3D.En el ejemplo puedes ver como se rellena y visualiza una matriz
bidimensional. Se necesitan dos bucles para cada una de las operaciones. Un bucle
controla las filas y otro las columnas.
/* Matriz bidimensional. */
#include <stdio.h>
main() /* Rellenamos una matriz */
{
int x,i,numeros[3][4];
/* rellenamos la matriz */
for (x=0;x<3;x++)
for (i=0;i<4;i++)
scanf("%d",&numeros[x][i]);
/* visualizamos la matriz */
for (x=0;x<3;x++)
- 24 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
for (i=0;i<4;i++)
printf("%d",numeros[x][i]);
}
Tambin se pueden inicializar cadenas de texto:
char dias[7][10]={"lunes","martes","mircoles","jueves","viernes","sbado",
"domingo"};
Para referirnos a cada palabra bastara con el primer ndice:
printf("%s",dias[i]);
Esto no seria una matriz de cadenas si no mas bien un vector de cadenas;

16 Funcion GOTOXY ,TEXTCOLOR,TEXTATTR,CPRINTF,DELAY


y SOUND
gotoxy(columna,fila).- Ubica el cursor en una determinada posicin.
cprintf .- Escribe se utiliza siempre que se utilize un gotoxy
textcolor(numcolor) .- Establece un color de letra siempre y cuando se imprima con
cprintf
textattr(numcolor) .- Establece un color de sombreado , siempre y cuando se imprima
con cprintf
delay(num) .- Hace una pausa dependiendo del numero que se pone entre los (son
milisegundos) a mayor numero mayor pausa.Se hace referencia a DOS.H
sound(num) .- Emite un sonido dependiendo del num que se le envia como parmetro.
Cuando se utiliza la funcion sound debemos pararla poniendo nosound() al final del
programa.Se hace referencia a DOS.H
Ejemplo:Hacer un programa que emita sonidos aletaoriamente
#include "conio.h"
#include "stdio.h"
#include "dos.h" //Para delay y sound
#include "stdlib.h"//Para el random
#include "time.h" //Para randomize
void main(){
int i,n;
for(i=1;i<50;i++){
n=random(500)+1;
sound(n);
delay(100);//para que se detenga por espacio de 100 milisegundos
}
nosound();
}
Ejemplo:Llenar una matriz de 2 x 5 y luego mostrarla con un gotoxy
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define f 2
#define c 5
int mat[f][c],fil,col;
void ingreso(){
randomize();
for(fil=0;fil<f;fil++){
- 25 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
for(col=0;col<c;col++){
mat[fil][col]=random(100)+1;
}
}
}
void listado(){
clrscr();
for(fil=0;fil<f;fil++){
for(col=0;col<c;col++){
gotoxy(col+5,fil+5);
cprintf("%d",mat[fil][col]);
}
}
}
void main(){
ingreso();
listado();
getch();
}
Ejemplo: Realizar un programa que permita saber el numero de un color.
#include "conio.h"
#include "stdio.h"
void main(){
int i,fil=1,col=5;
clrscr();
for(i=1;i<=200;i++){
gotoxy(col,fil);
textcolor(i);
cprintf("%d",i);
if(fil>24){
fil=0;
col +=5;
}
fil++;
}
getch();
}
NOTA: en este ejemplo hacemos un for de 1 a 200 y al poner textcolor(i) saldra impreso
el numero con el color que le corresponde,ahora el if que vemos ah sirve para que una
vez que se a impreso las 24 primeras filas en la columna 5 se vuelva a imprimir pero
ahora en la columna 10 y la fila empieza de 1 de vuelta.
Ejemplo:Ingrese un Numero y muestre la siguiente estructura.
Por Ejemplo: 3
11111
12221
12321
12221
11111
#include "stdio.h"
- 26 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
#include "conio.h"
void main(){
int n,col,fil,i,num;
clrscr();
printf("Ingrese Numero de Elementos......");scanf("%d",&num);
n=(num*2)-1;
for(i=1;i<=num;i++){
textcolor(i);
for(col=i;col<=n+1-i;col++){
for(fil=i;fil<=n+1-i;fil++){
gotoxy(col+5,fil+5);cprintf("%d",i);
}
}
}
getch();
}

Practica de Matrices.
1.- Se requiere un programa que realice la multiplicacin de dos matrices, para tal efecto
se deben generar las dos matrices con numeros aleatorios y en una tercera matriz
se debe llenar con la multiplicacin de la matriz 1 con la matriz 2
2.- Se debe llenar un vector de 25 elementos con numeros aleatorios luego se debe listar.
Inmediatamente se debe llenar los elementos del vector a una matriz de 5 x 5 la cual se
tiene tambien que listar
3.- Llenar una matriz de 5 x 5 con numeros aleatorios y mostrar los 2 elementos
mayores y los 2 elementos menores.
4.- Tener una matriz de 3 x 3 y llenarlas con cadenas luego mostrarlas.
5.-Llenar una matriz de 5 x 5 y mostrar la suma de sus diagonales y de su periferia
6.-Llenar una matriz de 5 x 5 con nmeros aleatorios sin que estos se repitan.
7.- Los alumnos de 2 ciclo de IDAT son 20. Todos los alumnos toman inicialmente 5
cursos lo que quiere decir que al final del semestre tendrn 5 notas cada alumno.
Escribir un programa que pida las 5 notas de los 20 alumnos y luego devuelva el
promedio de todas las notas, el promedio mas bajo y el mas alto.
8.- Realizar un programa de un bingo.
Generar una matriz de 5 x 5 y de ah cada un segundo generar un numero aleatorio y
buscarlo en la matriz y si se encuentra cambiar de color para saber que ese numero ya
salio, luego cuando haya salido todos los numeros de la matriz debe salir un mensaje de
BINGO indicando cuantos aciertos tuvo y cuantos desaciertos tuvo.

- 27 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
9 Se debe imprimir un cuadrado mgico de tamao N, donde N es un nmero impar
comprendido entre 3 y 11. Un cuadrado mgico esta compuesto de nmeros
enteros entre 1 y N, con las siguientes caractersticas: la sumas de las filas,
columnas, diagonales son iguales, como se ve en el siguiente ejemplo:
8
1
6
3
5
7
4
9
2
El mtodo de generacin del cuadrado mgico consiste en situar el nmero 1 en la
casilla del centro de la primera fila, el siguiente nmero se debe situar en la casilla
ubicada en la fila anterior (por encima) y en la columna de la derecha. Este proceso se
repite hasta colocar los N nmeros.
Es importante saber que el cuadrado mgico es cclico, es decir, la fila anterior (encima)
de la primera fila es la ltima fila y la columna a la derecha de la ltima es la primera
columna. En caso de que un nmero se debe colocar en una casilla que ya esta ocupada,
entonces se elige la casilla que se encuentra debajo (en la siguiente fila, la misma
columna) del nmero que acabamos de ubicar.
16.- BUSQUEDAS
Una bsqueda es el proceso mediante el cual podemos localizar un elemento con un
valor especifico dentro de un conjunto de datos. Terminamos con xito la bsqueda
cuando el elemento es encontrado.
A continuacin veremos algunos de los algoritmos de bsqueda que existen.
Bsqueda Secuencial
A este mtodo tambien se le conoce como bsqueda lineal y consiste en empezar al
inicio del conjunto de elementos , e ir atravez de ellos hasta encontrar el
elemento indicado hasta llegar al final de arreglo.
Este es el mtodo de bsqueda ms lento, pero si nuestro arreglo se encuentra
completamente desordenado es el nico que nos podr ayudar a encontrar el
dato que buscamos.
void secuencial(){
int i,estado=0;
printf("\nBusqueda Secuencial....\n");
printf("Ingese Numero a buscar.....");scanf("%d",&num);
for(i=0;i<MAX;i++){
if(v[i]==num){
estado=1;
break;
}
}
if(estado==1)printf("Se encontro");
else
printf("No se encontro");
}
Bsqueda Binaria
Las condiciones que debe cumplir el arreglo para poder usar bsqueda binaria son que
el arreglo este ordenado y que se conozca el numero de elementos.
- 28 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Este mtodo consiste en lo siguiente: comparar el elemento buscado con el elemento
situado en la mitad del arreglo, si tenemos suerte y los dos valores coinciden, en ese
momento la bsqueda termina. Pero como existe un alto porcentaje de que esto no
ocurra, repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento
que buscamos resulto menor que el de la mitad del arreglo, o en la mitad superior si el
elemento buscado fue mayor.
La bsqueda termina cuando encontramos el elemento o cuando el tamao del arreglo a
examinar sea cero.
void binaria(){
int ini=0,fin=MAX-1,mitad,estado=0;
printf("\nBusqueda Binaria....\n");
printf("Ingese Numero a buscar.....");scanf("%d",&num);
while(ini<=fin&&estado==0){
mitad=(ini + fin) / 2;
if(v[mitad]==num)estado=1;
else{
if(v[mitad]>num) fin=mitad-1;
else ini=mitad+1;
}
}
if(estado==1)printf("Se encontro");
else
printf("No se encontro");
}
18.-ORDENAMIENTO
La importancia de mantener nuestros arreglos ordenados radica en que es mucho ms
rpido tener acceso a un dato en un arreglo ordenado que en uno desordenado.
Existen muchos algoritmos para la ordenacin de elementos en arreglos, enseguida
veremos algunos de ellos.
Seleccin Directa
Este mtodo consiste en seleccionar el elemento ms pequeo de nuestra lista para
colocarlo al inicio y as excluirlo de la lista. Para ahorrar espacio, siempre que vayamos
a colocar un elemento en su posicin correcta lo intercambiaremos por aquel que la est
ocupando en ese momento. El algoritmo de seleccin directa es el siguiente:
void seleccion(){
int i, j,pos,aux,min;
for(i=0;i<MAX-1;i++){
min=v[i];
pos=i;
for(j=i+1;j<MAX;j++){
if(v[j]<min){
min=v[j];
pos=j;
}
}
v[pos]=v[i];
v[i]=min;
}
}
- 29 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Ordenacin por Burbuja
Es el mtodo de ordenacin ms utilizado por su fcil comprensin y programacin,
pero es importante sealar que es el ms ineficiente de todos los mtodos .
Este mtodo consiste en llevar los elementos menores a la izquierda del arreglo los
mayores a la derecha del mismo. La idea bsica del algoritmo es comparar pares de
elementos adyacentes e intercambiarlos entre s hasta que todos se encuentren
ordenados.
void burbuja(){
int i, j,aux;
for(i=0;i<MAX;i++){
for(j=MAX-1;j>i;j--){
if(v[j]<v[j-1]){
aux=v[j-1];
v[j-1]=v[j];
v[j]=aux;
}
}
}
}
Ordenacin por insercin
De la misma forma que se aplican los algoritmos de insercin y de insercin directa
para aadir un nuevo elemento al array, se pueden aplicar para ordenar un array que
estuviera desordenado.En ambos casos, se va tomando siempre un nuevo elemento del
array (empezando por el elemento en en la posicin 1) y se aade al subarray de la
izquierda, que ya est ordenado. Se muestra en primer lugar el mtodo de ordenacin
por insercin de arrays. En este caso, en vez de buscar la posicin de forma lineal de
izquierda a derecha, se hace de derecha a izquierda, a la vez que se van desplazando los
elementos cuyo valor es mayor que el elemento a insertar una posicin a la derecha,
para ir haciendo hueco.
void inserccion(){
int i,j,min;
for(i=1;i<MAX;i++){
min=v[i];
for(j=i;j>0&&min<v[j-1];j--){
v[j]=v[j-1];
v[j-1]=min;
}
}
}
19.-FUNCIONES MATEMTICAS (math.h)
Se usa las definiciones: x,y son de tipo double y n de tipo int. Todas las funciones
regresan double.
sin(x)
seno
cos(x)
coseno
tan(x)
tangente
asin(x)
arcoseno en el rango [-Pi/2,Pi/2], x en [-1,1]
acos(x)
arcocoseno en el rango [0,Pi], x en [-1,1]
atan(x)
arcotangente en el rango [-Pi/2,Pi/2]
- 30 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
atan2(y,x) arcotangente de (y/x) en el rango [-Pi,Pi]
sinh(x)
seno hiperblico
cosh(x)
coseno hiperblico
tanh(x)
tangente hiperblico
exp(x)
funcin exponential
log(x)
logaritmo natural x>0
log10(x) logaritmo base 10
pow(x,y) x a la y , error cuando x=0 y (y=0 o y<0) o cuando x<0 y y no es un int
sqrt(x)
raiz cuadrada
ceil(x)
menorint, no menor que x (como double)
floor(x) mayor int, no mayor que x (como double)
fabs(x)
|x|
ldexp(x,n) x por ( 2 a la n)
fmod(x,z) residuo x/y
Ejemplo:
#include "stdio.h"
#include "conio.h"
#include "math.h"
float n=12.34;
void main(){
clrscr();
printf("n vale %f",n);
printf("\nSeno de n
:%f",sin(n));
printf("\nElevado de n a la 2 :%f",pow(n,2));
printf("\nRaiz Cudrada de n :%f",sqrt(n));
getch();
}
20.-FUNCIONES DE CADENAS (string.h)
Carcter
Un carcter es el tomo de los programas de computadora, un carcter es un smbolo
que puede ser una letra del alfabeto o un carcter especial.Un carcter ocupa 8 bits
en memoria, y existen 256 caracteres diferentes. Cada carcter se lo codifica en un
nmero entero, es decir, que cada carcter tiene su correspondiente representacin
entera, el cdigo ASCII es precisamente esto. Por ejemplo el carcter a tiene
como cdigo ASCII el entero 97. Para ver todos cdigos ASCII vase el anexo A.
Cadenas
Una cadena o cadena de caracteres nos es ms que una serie de caracteres manipulados
como una unidad. Si asemejamos una cadena al lenguaje castellano sera como una
palabra, que es un conjunto de slabas y vocales en donde cada una de estas viene a
ser una carcter.Visto desde otro punto vendra a ser un arreglo de caracteres. Una
cadena puede contener cualquier carcter, puede almacenar un nombre propio una
direccin, es decir, lo que nosotros precisemos.
Declaracin
Una cadena se la define de la siguiente manera
char cadena[20];
La cadena anterior puede contener un mximo de 20 caracteres.
Inicializacin
Se puede inicializar una cadena de la siguiente manera:
cadena = "Hola" ;
- 31 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Cualquier valor que se le asigne a una cadena va entre comillas dobles " ", como en el
ejemplo anterior "Hola" esta entre comillas dobles.
Una cadena siempre finaliza con el carcter de fin de cadena \0, que siempre se aade
al final automticamente, en el ejemplo anterior se aade al final de Hola el carcter
de fin de cadena. Tambin podemos considerar a una cadena como un arreglo de
caracteres, y se puede inicializar de la siguiente manera:
cadena = { H, o, l, a } ;
El arreglo de caracteres se vera de esta forma:
H
o
l
a
\0
0
1
2
3
4
Ntese que en la posicin 4 se aumenta el fin de cadena
Operaciones con Cadenas
GETS.- Lee una cadena,esta funcin nos permite introducir frases enteras, incluyendo
espacios
Ejemplo:
scanf(%s,nom) con gets seria gets(nom);
PUTS.- Escribe y a la vez da un salto de linea
Ejemplo:
printf(Nombre\n) con puts seria puts(Nombre);
Existen muchas operaciones que se pueden realizar utilizando cadenas, la mayora de la
operacin que podemos requerir se encuentran ya a nuestra disposicin dentro de la
librera string.h
STRLEN.la longitud de una cadena la podemos conocer utilizando la funcin strlen.
sintaxis: strlen( cadena ) ;
ejemplo
#include "conio.h"
#include "stdio.h"
#include "string.h"
void main(){
char nom[20];
clrscr();
printf("ingresa tu nombre :");scanf("%s",nom);
printf("tu nombre tiene %d letras",strlen(nom));
getch();
}
STRCMP.para saber si dos cadenas son exactamente iguales utilizamos la funcin strcmp.
sintaxis: strcmp ( cadena1, cadena2 );
esta funcin devuelve un valor de acuerdo al resultado de la comparacin.
devuelve:
0
si la dos cadenas son exactamente iguales
mayor a 0
si la cadena1 es mayor a la cadena2
menor a 0
si la cadena1 es menor que la cadena2

- 32 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
#include "conio.h"
#include "stdio.h"
#include "string.h"
void main(){
char contra1[20],contra2[20];
clrscr();
printf("ingresa tu contrasea :");scanf("%s",contra1);
printf("reingresa tu contrasea :");scanf("%s",contra2);
if(strcmp(contra1,contra2)==0){
printf("\ncontrasea correcta");
}else{
printf("\ncontrasea incorrecta");
}
getch();
}
STRCAT.podemos juntar o concatenar dos cadenas una a continuacin de la otra. utilizamos la
funcin strcat.
sintaxis
strcat( cadenadestino, cadenaorigen );
todo el contenido de la cadenaorigen se aade a continuacin de la cadenadestino, si
esta ltima contiene algo entonces al final contendr lo que contena ms el contenido
de la cadenaorigen.
#include "conio.h"
#include "stdio.h"
#include "string.h"
void main(){
char nom[20],ape[20];
clrscr();
printf("ingresa tu nombre :");scanf("%s",nom);
printf("ingresa tu apellido :");scanf("%s",ape);
strcat(nom," ");//aumenta a la variable nom un " "
strcat(nom,ape);//concatena nom con ape
printf("\ntu nombre completo es %s",nom);
getch();
}
STRCPY.podemos reflejar todo el contenido de una cadena a otra, en otras palabras la copiamos
tal cual, para esto utilizamos la funcin strcpy.
sintaxis
strcpy( cadenadestino, cadenaorigen );
todo el contenido de la cadenaorigen se copia a la cadenadestino, si esta ltima tuviera
algn valor este se borra.
#include "conio.h"
#include "stdio.h"
#include "string.h"
void main(){
char copia[20],origen[20];
clrscr();
printf("ingresa tu nombre :");scanf("%s",origen);
strcpy(copia,origen);
printf("tu nombre es :");scanf("%s",copia);
- 33 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
getch();
}
Ejemplo: Ingrese una cadena y mediante una funcion inviertala
#include stdio.h
#include conio.h
#include string.h
char *inversa(char msg[]){
char str[255];
int i,j=0;
for(i=strlen(msg)-1;i>=0;i--){
str[j]=msg[i];
j++;
}
}
str[j]='\0';
return(str);
}
void main(){
char cad[255];
clrscr();
printf("Ingrese cadena de Caracteres : ");gets(cad);
printf("\nLa cadena Invertida es %s",inversa(cad));
getch();
}
NOTA: tenemos una funcion inversa recibe un parmetro que va a ser la cadena que va
a invertir se pone * por que la funcion devuelve una cadena
Luego declaramos una variable str porque ahi vamos a guardar la cadena invertida
entonces hacemos un for desde la longitud de la cadena hasta o osea desde el ultimo
carcter hasta el primero y como vemos se pasan los valores de msg a str pero str
empieza de 0 al final str le damos \0 que es el fin de la cadena

Practica de Cadenas
1.- Ingrese una cadena y mediante una funcion muestre la longitud(sin usar strlen)
2.- Ingrese una cadena y mediante una funcin diga cuantas vocales tiene
3.- Ingrese una cadena y mediante una funcin invirtala pero solo que muestre las
vocales.Ejemplo: cad=hola el resultado seria ao
4.- Ingrese 2 cadenas y mediante una funcion concatnelas (sin usar strcat)
5.- Ingrese una cadena y muestre sus caracteres ordenados
6.- Ingrese una cadena y convirtala a mayscula y a minscula
7.- Ingrese una cadena y quitarle los espacios en blanco
8.- Ingrese una cadena y diga cuantas palabras tiene
9.- Ingresen dos cadenas y una posicion y luego junten las dos cadenas en orden de la
posicion por ejemplo: cad1=luis cad2=pedro pos=2 entonces la cadena seria
lupedrois
10.- llene un vector de n elementos con cadenas y ordenelo
11.- llene un vector de n elementos con cadenas y cuente cuantas vocales tiene ese
vector
- 34 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
12.- llene un vector de n elementos con cadenas y diga cual elemento del vector es el
que tiene mas caracteres
NOTA: Todo la practica se presenta en un solo archivo utilize funciones
Debe realizar una pantalla de presentacion indicando su nombre y su apellido
21.-APUNTADORES
1.-Un Apuntador es una variable que contiene una direccin de memoria, la cual
corresponder a un dato o a una variable que contiene el dato. Los apuntadores tambin
deben de seguir las mismas reglas que se aplican a las dems variables, deben tener
nombre nicos y deben de declararse antes de usarse.
Cada variable que se utiliza en una aplicacin ocupa una o varias posiciones de
memoria. Estas posiciones de memoria se accesan por medio de una direccin.

En la figura el texto Hello sta guardado en memoria, comenzando en la direccin 1000.


Cada carcter ocupa un espacio de direccin nico en memoria. Los apuntadores
proporcionan un mtodo para conservar y llegar a estas direcciones en memoria. Los
apuntadores facilitan el manejo de datos, debido a que conservan la direccin de otra
variable o ubicacin de datos.
1.1-Por qu son Importantes los Apuntadores?Los apuntadores dan flexibilidad a los
programas en C++ y permiten que estos crezcan dinmicamente. Utilizando un
apuntador hacia un bloque de memoria que se asigna al momento de ejecucin, un
programa puede ser ms flexible que uno que asigna toda su memoria de una sola vez.
Tambin, un apuntador es ms fcil de guardar que una estructura grande o un objeto de
una clase. Debido a que un apuntador slo guarda una direccin, puede fcilmente
pasarse a una funcin. Uno de las desventajas que pueden presentar los apuntadores es
que un apuntador sin control o no inicializado puede provocar fallas en el sistema,
adems de que su uso incorrecto puede generar fallas muy complejas de hallar.
1.2 Operadores de Indireccin y Direccin. Hay 2 operadores que se usan cuando
trabajan con direcciones en un programa C; el Operador de Indireccin ( * ) y el de
Direccin (&). Estos operadores son diferentes de los tratados anteriormente.
El Operador de Direccin ( &) regresa la direccin de una variable. Este operador est
asociado con la variable a su derecha: &h; Esta lnea regresa la direccin de la variable
h.
El Operador de Indireccin ( * ) trabaja a la inversa del operador de Direccin. Tambin
esta asociado con la variable a su derecha, toma la direccin y regresa el dato que
contiene esa direccin. Por ejemplo, la siguiente lnea determina la direccin de la
variable h y luego usa el operador de Indireccin para accesar la variable y darle un
valor de 42:
*(&h)=42;
La declaracin de un puntero de manera general es:
tipo *nombre de apuntador;
Tipo : Especifica el tipo de objeto apuntado y puede ser cualquier tipo.
Nombre de apuntador: Es el identificador del apuntador.

- 35 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
El espacio de memoria requerido para un apuntador, es el nmero de bytes necesarios
para especificar una direccin de memoria, debiendo apuntar siempre al tipo de dato
correcto.
Considere el siguiente programa y observe a las variables de direccin e Indireccin
trabajar:

1.3-La Aritmtica de Apuntadores. Solamente se pueden realizar operaciones de


incremento y decremento, y estos es deacuerdo a la longitud de su tipo de base. Por
ejemplo supngase que una mquina particular utiliza direccionamiento de byte, un
entero requiere 4 bytes y el valor de la variable pi (declarada asi: int *pi) es 100, es
decir, se apunta al entero *pi en la localidad 100. Entonces el valor de pi-1 es 96, el de
pi+1 es 104 y el de pi+2 es 108. El valor de *(pi-1) es el de los contenidos de los 4 bytes
96,97,98, y 99 , el de *(pi+1) es el del contenido de los byte 104, 105,106 y 107, y el de
*(pi+2) es el entero que esta en los bytes 108,109,110 y 111.
De manera parecida, si el valor de la variable pc (declarada asi: char *pc; ) es igual a
100, y un carcter tiene un byte de longitud, pc-1 refiere a la localidad 99, pc+1 a la 101
y pc+2 a la 102.
1.4 Apuntadores a Funciones.Un rea en la cual desempean un papel prominente los
apuntadores es el lenguaje C es la transmisin de parmetros a funciones. Por lo comn,
los parmetros se transmiten por valor a una funcin en C, es decir, se copian los
valores transmitidos en los parmetros de la funcin llamada en el momento en que se
invoca. Si cambia el valor de un parmetro dentro de la funcin, no cambia su valor en
el programa que la llama. Por ejemplo considrese el siguiente fragmento y funcin de
programa (el numero de lnea es solo una gua en el ejemplo):

- 36 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

La lnea 2 imprime el nmero 5 y despus llama a funct. El valor de "x", que es 5, se


copia en "y" y comienza la ejecucin de funct. Despus, la lnea 9 imprime el nmero 6
y regresa funct. Sin embargo, cuando la lnea 8 incrementa el valor de "y", el valor de
"x" permanece invariable. As, la lnea 4 imprime el nmero 5, "x" y "y" refieren a 2
variables diferentes.
Si deseamos usar funct para modificar el valor de "x", debemos de transmitir la
direccin de "x" de la siguiente manera:

La lnea 2 imprime nuevamente el nmero 5, y la lnea 3 llama a funct. Ahora, sin


embargo, el valor transferido no es el valor entero de "x" sino el valor apuntador "&x".
Este es la direccin de "x". El parmetro de funct no es ms y de tipo int, sino py de tipo
int * . (Es conveniente nombrar a las variables apuntadores comenzando con la letra p
para recordar tanto que se trata de un apuntador) la lnea 8 ahora aumenta al entero en la
localidad py; py, sin embargo, no cambia y conserva su valor inicial "&x". As, py
apunta al entero "x" de tal manera que cuando *py, aumenta x. La lnea 9 imprime 6 y
cuando regresa funct, la lnea 4 imprime tambin 6. Los apuntadores son el mecanismo
usado en el lenguaje C para permitir a una funcin llamada modificar las variables de la
funcin que llama.
20.-ESTRUCTURAS DINAMICAS DE DATOS
INTRODUCCIN:
Una de las aplicaciones ms interesantes y potentes de la memoria dinmica y los
punteros son las estructuras dinmicas de datos. Las estructuras bsicas disponibles
en C y C++ tienen una importante limitacin: no pueden cambiar de tamao durante
la ejecucin. Los arreglos estn compuestos por un determinado nmero de
elementos, nmero que se decide en la fase de diseo, antes de que el programa
ejecutable sea creado.
En muchas ocasiones se necesitan estructuras que puedan cambiar de tamao durante
la ejecucin del programa. Por supuesto, podemos hacer 'arrays' dinmicos, pero una
vez creados, tu tamao tambin ser fijo, y para hacer que crezcan o diminuyan de
tamao, deberemos reconstruirlas desde el principio.
- 37 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Las estructuras dinmicas nos permiten crear estructuras de datos que se adapten a las
necesidades reales a las que suelen enfrentarse nuestros programas. Pero no slo eso,
como veremos, tambin nos permitirn crear estructuras de datos muy flexibles, ya
sea en cuanto al orden, la estructura interna o las relaciones entre los elementos que
las componen.
Las estructuras de datos estn compuestas de otras pequeas estructuras a las que
llamaremos nodos o elementos, que agrupan los datos con los que trabajar nuestro
programa y adems uno o ms punteros autoreferenciales, es decir, punteros a objetos
del mismo tipo nodo.
Una estructura bsica de un nodo para crear listas de datos seria:
struct nodo {
int dato;
struct nodo *otronodo;
};
El campo "otronodo" puede apuntar a un objeto del tipo nodo. De este modo, cada
nodo puede usarse como un ladrillo para construir listas de datos, y cada uno
mantendr ciertas relaciones con otros nodos.
Para acceder a un nodo de la estructura slo necesitaremos un puntero a un nodo.
El nodo anterior se representar asi:
Las estructuras dinmicas son una implementacin de TDAs o TADs (Tipos
Abstractos de Datos). En estos tipos el inters se centra ms en la estructura de los
datos que en el tipo concreto de informacin que almacenan.
Dependiendo del nmero de punteros y de las relaciones entre nodos, podemos
distinguir varios tipos de estructuras dinmicas. Enumeraremos ahora slo de los
tipos bsicos:
Listas abiertas: cada elemento slo dispone de un puntero, que apuntar al siguiente
elemento de la lista o valdr NULL si es el ltimo elemento.
Pilas: son un tipo especial de lista, conocidas como listas LIFO (Last In, First Out: el
ltimo en entrar es el primero en salir). Los elementos se "amontonan" o apilan, de
modo que slo el elemento que est encima de la pila puede ser ledo, y slo pueden
aadirse elementos encima de la pila.
Colas: otro tipo de listas, conocidas como listas FIFO (First In, First Out: El primero
en entrar es el primero en salir). Los elementos se almacenan en fila, pero slo
pueden aadirse por un extremo y leerse por el otro.
Listas circulares: o listas cerradas, son parecidas a las listas abiertas, pero el ltimo
elemento apunta al primero. De hecho, en las listas circulares no puede hablarse de
"primero" ni de "ltimo". Cualquier nodo puede ser el nodo de entrada y salida.
Listas doblemente enlazadas: cada elemento dispone de dos punteros, uno a punta
al siguiente elemento y el otro al elemento anterior. Al contrario que las listas abiertas
anteriores, estas listas pueden recorrerse en los dos sentidos.

- 38 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
Arboles: cada elemento dispone de dos o ms punteros, pero las referencias nunca
son a elementos anteriores, de modo que la estructura se ramifica y crece igual que un
rbol.
Arboles binarios: son rboles donde cada nodo slo puede apuntar a dos nodos.
Arboles binarios de bsqueda (ABB): son rboles binarios ordenados. Desde cada
nodo todos los nodos de una rama sern mayores, segn la norma que se haya
seguido para ordenar el rbol, y los de la otra rama sern menores.
Arboles AVL: son tambin rboles de bsqueda, pero su estructura est ms
optimizada para reducir los tiempos de bsqueda.
Arboles B: son estructuras ms complejas, aunque tambin se trata de rboles de
bsqueda, estn mucho ms optimizados que los anteriores.
Tablas HASH: son estructuras auxiliares para ordenar listas.
Grafos: es el siguiente nivel de complejidad, podemos considerar estas estructuras
como rboles no jerarquizados.
.- GESTION DINAMICA DE MEMORIA
15.2.- Estructuras dinmicas de datos
En funcin de la forma en que se relacionan existen varios tipos de estructuras
de datos. Este tipo de estructuras son autorreferenciadas, es decir, contienen entre
sus campos un puntero de su mismo tipo. Las ms utilizadas son:
- pilas
- colas
- listas
Las pilas
Este tipo de estructuras se caracteriza porque todas las operaciones se realizan
en el mismo lado. Es de tipo LIFO ( Last In First Out ), el ltimo elemento en
entrar es el primero en salir.

/* Ejemplo de una pila. */


#include
#include
#include
#include

<stdio.h>
<conio.h>
<stdlib.h>
<alloc.h>

void insertar(void);
void extraer(void);
- 39 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
void visualizar(void);
struct pila
{
char nombre[20];
struct pila *ant;
}*CAB=NULL,*AUX=NULL;
main() /* Rellenar, extraer y visualizar */
{
char opc;
do
{
clrscr(); /* borramos la pantalla */
gotoxy(30,8); /* columna 30, fila 8 */
printf("1.- Insertar");
gotoxy(30,10);
printf("2.- Extraer");
gotoxy(30,12);
printf("3.- Visualizar la pila");
gotoxy(30,14);
printf("4.- Salir");
opc=getch( );
switch(opc)
{
case '1':
insertar( );
break;
case '2':
extraer( );
break;
case '3':
visualizar( );
}
}while (opc!='4');
}
void insertar(void)
{
AUX=(struct pila *)malloc(sizeof(struct pila));
clrscr();
printf("Nombre: ");
gets(AUX->nombre);
if (CAB==NULL)
{
CAB=AUX;
AUX->ant=NULL;
}
else
{
AUX->ant=CAB;
CAB=AUX;
}
}
void extraer(void)
{
if (CAB==NULL) return;
AUX=CAB;
- 40 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
CAB=CAB->ant;
free(AUX);
}
void visualizar(void)
{
if (CAB==NULL) return;
clrscr();
AUX=CAB;
while (AUX!=NULL)
{
printf("Nombre: %s\n",AUX->nombre);
AUX=AUX->ant;
}
getch( );
}

Archivo: pila.c
La estructura tipo que utilizaremos ser sta:
struct pila
{
tipo variables;
struct pila *ant;
}*CAB=NULL,*AUX=NULL;
donde tipo variables sern las diferentes variables que guardaremos en la
estructura, struct pila *ant es un puntero que apunta al elemento de tipo pila
introducido anteriormente, *CAB ser donde guardaremos el ltimo elemento
insertado en la pila y *AUX nos servir para guardar elementos temporalmente y
para recorrer la pila al visualizarla.
Antes de insertar un elemento, deberemos comprobar si la pila est vaca o no.
Si lo estuviera deberemos insertar el primer elemento:
CAB=AUX;
CAB->ant=NULL;
Si ya hubiera algn elemento crearemos uno nuevo apuntado por AUX y
haremos que AUX->ant apunte a CAB, que en este momento contiene la direccin
del elemento insertado anteriormente. Tras esto haremos que CAB apunte al ltimo
elemento insertado, que ser la nueva cabeza de la pila:
AUX->ant=CAB;
CAB=AUX;
Para extraer un elemento de la pila deberemos hacer que AUX apunte a la
misma direccin que CAB, despus haremos que CAB apunte a CAB->ant, con lo
que el elemento anterior pasar a ser la cabeza de la pila. Tras esto, solo queda
liberar la memoria de la zona apuntada por AUX. No olvides controlar si existe
algn elemento ( si CAB es igual a NULL la pila est vaca ):
- 41 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
if (CAB==NULL) return;
AUX=CAB;
CAB=CAB->ant;
free(AUX);
Por ltimo, para visualizar los elementos de la pila, haremos que el puntero
auxiliar AUX apunte a la cabeza de la pila, o sea, a CAB. Tras esto iremos
visualizando el contenido de la pila, haciendo que AUX tome la direccin de AUX>ant, mientras AUX sea distinto de NULL. Tambin es importante controlar que la
pila no est vaca.
if (CAB==NULL) return;
AUX=CAB;
while (AUX!=NULL)
{
printf("%s",AUX->nombre);
AUX=AUX->ant;
};
Estructura grfica de una pila:

Las colas
Este tipo de estructuras se caracteriza porque insertamos los elementos por un
lado y los extraemos por el otro lado. Es de tipo FIFO ( First In First Out ), el
primer elemento en entrar es el primero en salir. Para gestionar la cola utilizaremos
3 punteros ( para la pila solo eran necesarios 2 ).

/* Ejemplo de una cola. */


#include
#include
#include
#include

<stdio.h>
<conio.h>
<stdlib.h>
<alloc.h>

void insertar(void);
void extraer(void);
void visualizar(void);
struct cola
{
char nombre[20];
struct cola *sig;
}*CAB=NULL,*AUX=NULL,*FIN=NULL;
main() /* Rellenar, extraer y visualizar */
- 42 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
{

char opc;
do
{
clrscr();
gotoxy(30,8);
printf("1.- Insertar");
gotoxy(30,10);
printf("2.- Extraer");
gotoxy(30,12);
printf("3.- Visualizar la cola");
gotoxy(30,14);
printf("4.- Salir");
opc=getch( );
switch(opc)
{
case '1':
insertar( );
break;
case '2':
extraer( );
break;
case '3':
visualizar( );
}
}while (opc!='4');

}
void insertar(void)
{
AUX=(struct cola *)malloc(sizeof(struct cola));
clrscr();
printf("Nombre: ");
gets(AUX->nombre);
AUX->sig=NULL;
if (FIN==NULL)
FIN=CAB=AUX;
else
{
FIN->sig=AUX;
FIN=AUX;
}
}
void extraer(void)
{
if (CAB==NULL) return;
AUX=CAB;
CAB=CAB->sig;
free(AUX);
}
void visualizar(void)
{
if (CAB==NULL) return;
clrscr();
AUX=CAB;
while (AUX!=NULL)
{
- 43 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
printf("Nombre: %s\n",AUX->nombre);
AUX=AUX->sig;
}
getch();
}

Archivo: cola.c
La estructura que utilizaremos ser:
struct cola
{
tipo variables;
struct cola *sig;
}*CAB=NULL,*AUX=NULL,*FIN=NULL;
donde tipo variables sern las diferentes variables que guardaremos en la
estructura, struct cola *sig es un puntero que apunta al elemento de tipo cola
introducido a continuacin, *CAB ser donde guardaremos el primer elemento
insertado en la cola, *AUX nos servir para guardar elementos temporalmente y
para recorrer la cola al visualizarla y *FIN tomar la direccin del ltimo elemento
insertado.
Antes de insertar un elemento, deberemos comprobar si la cola est vaca o no.
Si lo est deberemos insertar el primer elemento:
if (FIN==NULL)
CAB=FIN=AUX;
Si ya existiera algn elemento haremos que FIN->sig apunte al elemento de
AUX y a continuacin haremos que FIN tome la direccin de AUX, con lo que FIN
apuntar al ltimo elemento insertado.
FIN->sig=AUX;
FIN=AUX;
Para extraer un elemento de la cola haremos que el puntero auxiliar AUX tome
la direccin del primer elemento insertado, que hemos guardado en CAB. Tras esto
haremos que CAB apunte a CAB->sig, es decir, que tome la direccin del segundo
elemento insertado, que ahora pasar a ser el primero. Luego liberaremos la zona
de memoria apuntada por AUX:
AUX=CAB; /* Deberemos controlar que no est vaca: if
(CAB==NULL) return; */
CAB=CAB->sig;
free(AUX);
Para visualizar la cola comprobaremos que existan elementos, esto es, que FIN
sea distinto de NULL. Hecho esto asignaremos a AUX la direccin de CAB e iremos
recorriendo la cola hasta que AUX sea igual a NULL.
- 44 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
AUX=CAB; /* Deberemos controlar que no est vaca: if
(CAB==NULL) return; */
while(AUX!=NULL)
{
printf("%s",AUX->nombre);
AUX=AUX->sig;
}
Estructura grfica de una cola:

Las listas
Este tipo de estructuras se caracteriza porque los elementos estn enlazados
entre s, de manera que adems de las acciones habituales de insertar, extraer y
visualizar tambin podremos buscar un elemento. Para gestionar la lista
utilizaremos 4 punteros.

/* Ejemplo de una lista. */


#include
#include
#include
#include

<stdio.h>
<conio.h>
<stdlib.h>
<alloc.h>

void insertar(void);
void extraer(void);
void visualizar(void);
struct lista
{
int num;
struct lista *sig;
}*CAB=NULL,*AUX=NULL,*F=NULL,*P=NULL;
main() /* Rellenar, extraer y visualizar */
{
char opc;
do
{
clrscr( );
gotoxy(30,8);
printf("1.- Insertar");
gotoxy(30,10);
printf("2.- Extraer");
gotoxy(30,12);
printf("3.- Visualizar la lista");
gotoxy(30,14);
printf("4.- Salir");
- 45 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

opc=getch( );
switch(opc)
{
case '1':
insertar( );
break;
case '2':
extraer( );
break;
case '3':
visualizar( );
}
}while (opc!='4');

/* A continuacin insertaremos el elemento que


vamos a crear en la posicin que le corresponda,
teniendo en cuenta que la lista deber quedar
ordenada de menor a mayor. El puntero P comprueba
si el campo num de un elemento es menor que el
campo num del elemento introducido. El puntero
F se quedar apuntando al elemento de la posicin
anterior al elemento que hemos insertado */
void insertar(void)
{
AUX=(struct lista *)malloc(sizeof(struct lista));
clrscr( );
printf("Introduce un nmero: ");
scanf("%d",&AUX->num);
AUX->sig=NULL;
if (CAB==NULL)
CAB=AUX;
else if (CAB->num > AUX->num)
{
AUX->sig=CAB;
CAB=AUX;
}
else
{
P=F=CAB;
while (P->num < AUX->num && P!=NULL)
{
if (P==CAB) P=P->sig;
else
{
P=P->sig;
F=F->sig;
}
}
AUX->sig=F->sig;
F->sig=AUX;
}
}
void extraer(void)
{
int var;
if (CAB==NULL) return;
- 46 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

clrscr( );
printf("Introduce el nmero a extraer: ");
scanf("%d",&var);
if (CAB->num==var)
{
P=CAB;
CAB=CAB->sig;
free(P);
}
else
{
P=F=CAB;
while (P->num != var && P!=NULL)
{
if (P==CAB) P=P->sig;
else
{
P=P->sig;
F=F->sig;
}
}
if (P==NULL) return;
F->sig=P->sig;
free(P);
}

void visualizar(void)
{
if (CAB==NULL) return;
clrscr( );
AUX=CAB;
while (AUX!=NULL)
{
printf("Nmero: %d\n",AUX->num);
AUX=AUX->sig;
}
getch( );
}

Archivo: lista.c
La estructura que utilizaremos ser:
struct lista
{
tipo variables;
struct lista *sig;
}*CAB=NULL,*AUX=NULL,*F=NULL,*P=NULL;
donde tipo variables sern las variables que guardaremos en la estructura,
struct lista *sig es un puntero que apunta al elemento de tipo lista introducido a
continuacin, *CAB ser donde guardaremos el primer elemento de la lista, *AUX
nos servir para guardar elementos temporalmente y para recorrer la lista al
visualizarla, *P para comparar los valores introducidos y ordenarlos, y *F, que
- 47 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT

apuntar al elemento anterior al ltimo introducido.


Antes de insertar un elemento, deberemos comprobar si la lista est vaca o no.
Si lo est deberemos insertar el primer elemento:
if (CAB==NULL) CAB=AUX;
Si ya existiera algn elemento haremos que P y F apunten al primero de la lista.
Si el elemento introducido fuera menor que el primero de la lista, haramos que el
nuevo elemento pasara a ser el primero, y el que hasta ahora era el primero,
pasara a ser el segundo.
if (AUX->num < CAB->num){
AUX->sig=CAB;
CAB=AUX;
}
Para extraer un elemento de la lista solicitaremos un nmero, si el nmero
introducido se corresponde con el campo num de uno de los elementos, ste ser
extrado de la lista. Deberemos controlar que la lista no est vaca y que el
elemento con el nmero solicitado exista.
Fjate en el ejemplo, en la funcin extraer. Si CAB es igual a NULL, ser que la
lista est vaca, y si P es igual a NULL al salir del while significar que no se ha
encontrado ningn elemento que contenga el nmero introducido.
Para visualizar la lista comprobaremos que existan elementos, es decir, que CAB
sea distinto de NULL. Hecho esto asignaremos a AUX la direccin de CAB e iremos
recorriendo la lista mientras AUX sea distinto de NULL.
if (CAB==NULL) return;
AUX=CAB;
while(AUX!=NULL)
{
printf("%d",AUX->num);
AUX=AUX->sig;
}
Estructura grfica de una lista:

Aqu finaliza el tema de la gestin dinmica de memoria. Es un tema algo


complejo hasta que se asimila el concepto y funcionamiento de las diferentes
estructuras, pero tras conseguirlo ya no tiene ningn secreto. Si alguna vez no
recuerdas su funcionamiento siempre es una buena solucin coger papel y lpiz,
dibujar una pila, cola o lista grficamente y simular la introduccin de elementos,
escribiendo la situacin de los punteros en cada momento.
Existen otras estructuras, como las listas doblemente enlazadas. La nica
diferencia con la lista que conocemos es que en las primeras cada elemento guarda
la direccin del anterior y del posterior. Sera una estructura como esta:
- 48 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
struct lista_doble
{
char nombre[20];
struct lista_doble *ant;
struct lista_doble *sig;
};
Su funcionamiento es muy similar al de una lista normal. Puedes intentar hacerla
tu
mismo.
Otras estructuras, como los rboles son ms complejas y menos utilizadas.

//Lista enlazadas Simples


#include "stdio.h"
#include "conio.h"
#include "ctype.h"
#include "stdlib.h"
struct Nodo
//registro Nodo
{int dato;
// dato:entero
struct Nodo *sig;
// sig:Nodo
};
//fin-registro
int xdato;
struct Nodo *raiz,*nuevo,*ant,*post,*ptr; //raiz,nuevo,ant,post,ptr:Nodo
//Creacion
void Creacion_FIFO()
{clrscr();
printf("Creacion de Nodos FIFO");
raiz=NULL;
do{
printf("\nIngrese Dato:");scanf("%d",&xdato);
nuevo=(struct Nodo *)malloc(sizeof(struct Nodo *)); //crear(Nodo)
nuevo->dato=xdato;
if(raiz==NULL)
raiz=nuevo;
else
ant->sig=nuevo;
ant=nuevo;
nuevo->sig=NULL;
printf("Otro Dato [S]i o [N]o:");
}while(toupper(getch())!='N');
}
void Creacion_LIFO()
{clrscr();
printf("Creacion de Nodos LIFO");
raiz=NULL;
do{
printf("\nIngrese Dato:");scanf("%d",&xdato);
nuevo=(struct Nodo *)malloc(sizeof(struct Nodo *));
nuevo->dato=xdato;
nuevo->sig=raiz;
- 49 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
raiz=nuevo;
printf("Otro Dato [S]i o [N]o:");
}while(toupper(getch())!='N');
}
void Listado()
{clrscr();
printf("\nListado de los Nodos\n");
ptr=raiz;
while(ptr!=NULL)
{printf("%d\t",ptr->dato);
ptr=ptr->sig;
}
printf("\nPresione cualquier tecla para continuar...");
getch();
}
void Eliminacion()
{clrscr();
printf("\nEliminacion de un Nodo");
printf("\nIngrese Dato:");scanf("%d",&xdato);
if(raiz->dato==xdato)
{ptr=raiz;
raiz=ptr->sig;
free(ptr); //liberar(ptr)
}
else
{ptr=raiz;
while(ptr!=NULL && ptr->dato!=xdato)
{ant=ptr;
ptr=ptr->sig;
}
if(ptr->dato==xdato)
{post=ptr->sig;
ant->sig=post;
free(ptr);
}
}
}
void Insercion()
{int pos,c;
clrscr();
printf("Insercion de un Nodo en una posicion dada\n");
do{
printf("Ingrese Dato:");scanf("%d",&xdato);
printf("Ingrese posicion:");scanf("%d",&pos);
nuevo=(struct Nodo *)malloc(sizeof(struct Nodo *));
nuevo->dato=xdato;
if(pos==1)
{nuevo->sig=raiz;
raiz=nuevo;
}
- 50 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
else
{ptr=raiz;
c=1;
while(ptr!=NULL && pos!=c)
{c++; //c=c+1
ant=ptr;
ptr=ptr->sig;
}
if(pos==c)
{ant->sig=nuevo;
nuevo->sig=ptr;
}
}
printf("Otro Dato [S]i o [N]o:");
}while(toupper(getch())!='N');
}
void Ordenamiento()
{int aux;
clrscr();
ptr=raiz;
while(ptr->sig!=NULL)
{post=ptr->sig;
while(post!=NULL)
{if(ptr->dato > post->dato)
{aux=ptr->dato;
ptr->dato=post->dato;
post->dato=aux;
}
post=post->sig;
}
ptr=ptr->sig;
}
printf("\nDatos ordenados...");
printf("\nPresione cualquier tecla para continuar...");
getch();
}
main()
{int opcion;
do{
clrscr();
printf("Menu de Lista Enlazadas\n");
printf("-----------------------\n");
printf("1.- Creacion de FIFO\n");
printf("2.- Creacion de LIFO\n");
printf("3.- Listado\n");
printf("4.- Eliminacion\n");
printf("5.- Insercion\n");
printf("6.- Ordenamiento\n");
printf("7.- Fin de Programa\n");
printf("\nEliga opcion :");scanf("%d",&opcion);
- 51 Por Luis Arias Hidalgo

TURBO C++

LUIS ARIAS HIDALGO

IDAT
switch(opcion)
{case 1:Creacion_FIFO();break;
case 2:Creacion_LIFO();break;
case 3:Listado();break;
case 4:Eliminacion();break;
case 5:Insercion();break;
case 6:Ordenamiento();break;
}
}while(opcion!=7);
return 0;
}

- 52 Por Luis Arias Hidalgo

También podría gustarte