Академический Документы
Профессиональный Документы
Культура Документы
1.2.1 Procedurales
Es tambin conocido como paradigma imperativo, el cual define a la
programacin como el desarrollo de procedimientos. Aqu se puede hacer la
siguiente divisin: Lenguajes simples de procedimientos y Lenguajes de
procedimientos estructurado en bloques.
saludo(
)
i;
}
Observaste que en la funcin main() se invoca a la funcin
saludo()?. En este paradigma la manera de escribir programas es
crear estructuras de datos y funciones como entidades separadas
.
TRIVIAL
i
CALL
SALUDO(
"HOLA
SALUDO
MUNDO"
program
trivial
var
i=integer;
procedure
begin
writeline
("hola
end;
begin
i:=2;
if
(i=2)
then
end.
(input,output);
saludo;
mundo");
saludo;
1.2.2 Lgicos
(juan,
(juan,
libros)
X)
libros;
mara;
1.2.3 Funcionales
Como lenguajes representativos de este paradigma podemos mencionar a
Lisp, ML, Scheme , entre otros. Este tipo de lenguajes est destinado a
programarse en forma aplicativa.
Lisp fue creado por John McCarthy y un grupo del Massachussets Institute
of Technology en 1960 (MIT), el lenguaje se ha utilizado en la investigacin en
ciencias de la computacin, sobre todo en la Inteligencia Artificial (robtica,
procesamiento de lenguaje natural, prueba de teoremas, etc.). En seguida se
muestra un cdigo ejemplo Lisp:
>
(define
((cond
(eq
i
(T
>
> hazlo
(define
2)
(hola
i)
(print
"Hola
mundo"))
(print
"Adios
mundo")))
(hazlo)(hola
2))
"Hola mundo"
1.2.5 Otros
PARADIGMA RELACIONAL
EL PARADIGMA DE POA
tabla con una lista de lenguajes que existen. Cabe mencionar que no son todos
los lenguajes, ya que en la actualidad existen mas de 2500.
1.3.2.1. Preprocesador
Los preprocesadores producen la entrada para un compilador y puede
realizar las funciones siguientes:
1. Procesamiento de Macros. Un preprocesador puede permitir a un usuario
definir macros y abreviaturas para representar una parte del programa y utilizar
esa abreviatura cuantas veces lo necesite. Cada vez que aparece la
abreviatura o macro llamada, el preprocesador la reemplaza con la definicin
original.
2. Inclusin de archivos: Algunos preprocesadores pueden insertar archivos de
encabezamiento en el texto del programa. Por ejemplo: El preprocesdador de C
hace que el archivo <global.h> reemplace a la proporcin #include "global.h"
cuando procesa un archivo que contenga a esa preposicin.
3. Extensiones a Lenguajes: Estos preprocesadores tratan de crear
posibilidades al lenguaje que equivalen a macros incorporados. Ejemplo, el
lenguaje Equel es un lenguaje de consulta de base de datos integrado en C. El
procesador considera las proposiciones que empiezan con # # como
proposiciones de acceso a la base de datos, sin relacin con C y se traducen a
llamadas de procesamiento a rutinas que realizan el acceso a base de datos.
4. Eliminan Comentarios. Por ejemplo: los smbolos para los comentarios en
C, // o / * */
1.3.2.2. Compilador
+
*
expresin2
expresin2
=
=
=
conv_de_entero_a_real
id3
*
id2
+
(60)
temp1
temp2
id3
60.0
AX
BX,
BX,
60.0
id3
AX
DX,
DX,
id2
BX
1.3.2.3 Ensamblador
Algunos compiladores producen cdigo ensamblador, otros realizan el
trabajo del ensamblador, produciendo cdigo de mquina relocalizable que se
puede pasar directamente al editor de carga y enlace. El cdigo ensamblador
es una versin nemotcnica del cdigo de mquina.
En el cdigo mquina se usan nombres en lugar de cdigos binarios para
operaciones y tambin se usan nombres para las direcciones de memoria.
T EMA 2: Lenguaje C
enteros
reales (nmeros de punto flotante)
valores lgicos (false, true)
conjunto de caracteres de escritura.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
Nmero en Binario
base diez negativo
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
11111
11110
11101
11100
11011
11010
11001
11000
10111
10110
10101
10100
10011
10010
10001
10000
Nota: El primer dgito del nmero binario es conocido como bit de signo, 0 para
positivos
y
1
para
negativos. Para obtener los nmeros binarios Negativos utilizar Complemento a
dos, esto es tomar el binario del nmero en su forma positiva, enseguida
cambiarle los unos a ceros y los ceros a unos, y al nmero binario resultante
sumarle un 1.
Las computadoras personales reales son de 32 bits, pero como en el caso
anterior, algo similar sucede en nuestra computadora, es slo que en esta el
tamao designado a los enteros es de 2 bytes (16 bits). Por lo tanto el 15 se
representa en nuestra mquina de la siguiente forma
0 000000000001111
el
Exponente
Mantisa
Precisin Sencilla
23
Doble Precisin
11
52
Extendida
15
64
Puesto que todas las mantisas, excepto por el nmero cero tienen siempre uno
al principio, seguido por los puntos binarios, esos dos elementos nunca se
guardan de manera explcita.
El punto binario permanece implcitamente a la izquierda del bit 22 de la
mantisa y siempre se asume que hay un 1 al principio.
El nmero binario cero se puede especificar al establecer todos los bits de la
mantisa y exponente con cero. Slo para estos casos el bit implcito al principio
de la mantisa es cero.
El algoritmo para representar en memoria a los nmeros de punto flotante es:
1.- Convertir el nmero de punto decimal a binario.
2.- Recorrer el punto decimal tantos lugares a la izquierda hasta antes del
ltimo uno y expresarlo en forma exponencial, en donde el exponente ser el
numero de espacios que fue recorrido el punto. O recorrer el punto tantos
lugares a la derecha hasta encontrar el primer uno, en este caso el exponente
ser negativo. Convertir el exponente tambin a binario.
3.- Colocar cero en el primer bit si el nmero es positivo y si es negativo colocar
un uno.
4.- Para el exponente calcular 127 + exponente o 127 - exponente segn sea el
caso. Al sumar 127 a cada exponente se consigue codificar un exponente
negativo en el campo del exponente sin necesidad de hacer explcito el bit del
signo, por ejemplo, el exponente -3 se almacena utilizando el equivalente
binario 127 - 3 = 124 =1111100.
5.- Para la mantisa colocar todos los nmeros que quedaron despus del
punto, llenar con ceros todas las localidades que quedaron vacas.
Ejemplo:
Para representar el -18.125 en una mquina de 32 bits aplicaremos el algoritmo
descrito previamente
Paso 1: Convertir el nmero de punto decimal a binario es decir el
-18.125 se representa en binario como 1 0 0 1 0 . 0 0 1
Paso 2: recorremos el punto hacia la izquierda 4 posiciones hasta antes del
ltimo uno
1 . 0 0 1 0 0 0 1 E4
Convirtiendo el exponente a binario queda
1 . 0 0 1 0 0 0 1 E100
Paso 5: Del nmero obtenido en el paso 2 colocamos los nmeros que estn
despus del punto en la mantisa quedando el numero de la siguiente forma
1 1000001100100010000000000000000
Caracteres y cadenas
Cada computadora puede leer o escribir cierto nmero de caracteres distintos.
El conjunto ms completo de caracteres incluye letras maysculas y
minsculas, los 10 dgitos, una amplia variedad de signos de puntuacin, una
coleccin de caracteres especiales tiles en matemticas y administracin y, a
veces, hasta letras griegas.
Con el fin de transmitir estos caracteres a las computadoras, se les ha
asignado a cada uno un nmero. La correspondencia entre caracteres y
enteros se denomina cdigo de caracteres.
Un cdigo muy utilizado es el ASCII (American Standard Code for Information
Interchange). Otro cdigo de 8 bits muy ocupado es el ABCDIC de IBM,
utilizado en las grandes macro computadoras de IBM, que aunque ya es
obsoleto, IBM lo sigue usando por motivos de compatibilidad.
Ejemplos de cdigo ASCII:
Para
'
/
' el
nmero
Los
cdigos
de
Para ' @ ' le corresponde el 100
en
cdigo
A-Z
ASCII
son
es
el
134
141-172
Booleanos
El tipo de dato booleano consiste en datos que slo pueden tener uno de dos
valores, cierto o falso (true or false). La representacin de almacenamiento
para un dato de tipo booleano ocupa un slo bit. Puesto que los bits
individuales pueden no ser direccionables por separado en la memoria, esta
representacin de almacenamiento se suele aplicar para que sea una sola
unidad direccionable, como un byte o una palabra.
Normalmente la representacin en la computadora de un dato de tipo booleano
se logra utilizando un bit particular para el valor, con frecuencia es el bit del
signo, con 0 es falso , con 1 es verdadero.
Otra forma de representacin puede ser colocar un valor cero en la unidad de
almacenamiento completa para indicar falso y cualquier otro valor diferente de
cero ser cierto.
Operadores
Una computadora debe de contener un conjunto de operaciones primitivas
interconstruidas. Un conjunto tpico incluir primitivas para aritmtica sobre
cada tipo numrico de datos, por ejemplo, suma, resta, multiplicacin, divisin
de reales y enteros.
Existen operadores binarios y operadores monoario. Los binarios son los que
tienen dos operandos y un operador, por ejemplo
a+b
el operador suma (+) es binario ya que tiene el operando a y el operando b. Los
operadores monoarios son los que tiene un slo operando, por ejemplo el
operador menos para indicar los nmeros negativos
-8
Operador de Asignacin
La asignacin es la operacin bsica para cambiar el valor a una variable. La
asignacin en algunos lenguajes es representada por el operador '=', como es
el caso de C, pero Pascal utiliza el ":=".Veamos el siguiente ejemplo
a=b
en este caso el valor que tenga 'b' ser asignado a la variable 'a', la cual
perder cualquier valor previo que pudiese tener.
Operadores aritmticos
Dentro de los operadores aritmticos podemos mencionar la suma, la resta, la
multiplicacin, la divisin o cociente, el mdulo, la potencia y radicales. Cada
lenguaje emplea sus caracteres especiales para representarlas por ejemplo:
La suma se representa con el smbolo + en casi todos los lenguajes, y se utiliza
para indicar un incremento, por ejemplo
x=a+b
en este caso al valor de a se le incrementar el valor de b y el resultado se
asignar a la variable x.
La resta se representa con el smbolo - , y se utiliza para decrementar, ejemplo
x=a-b
en este caso al valor de a se le resta el valor de b y el resultado se asigna a la
variable x.
En cuanto a la multiplicacin normalmente se representa con el smbolo *, y se
utiliza para multiplicar, ejemplo
x=a*b
en este caso el valor de a es multiplicado por el valor de b y el resultado es
asignado a la variable x.
Operadores relacionales
Los operadores relacionales son operadores binarios y son utilizados para
verificar si una expresin es mayor que otra, o es menor que, o es mayor o
igual, o es menor o igual, o diferente de, o igual que. En el caso de lenguaje C
los smbolos utilizados para ellos son
El "mayor que" se representa con el smbolo >, por ejemplo a > b y da como
resultado un verdadero si el valor de a es mayor estrictamente que el valor de
b, es falso en caso contrario.
El "menor que" se representa con el smbolo <, por ejemplo a < b y da como
resultado un verdadero si el valor de a es absolutamente menor que el valor de
b, es falso en caso contrario.
Por otra parte el "mayor o igual" se representa con el smbolo >= , por ejemplo
a >= b y da como resultado un verdadero si el valor de a es mayor o igual que
el valor de b, es falso en caso contrario.
En cuanto al "menor o igual" se representa con el smbolo <=, por ejemplo a <=
b y da como resultado un verdadero si el valor de a es menor o igual que el
valor de b, es falso en caso contrario.
Para verificar si dos expresiones son diferentes se utiliza el operador !=, por
ejemplo a != b y da como resultado un verdadero si el valor de a es diferente al
valor de b, es falso en caso contrario.
De manera similar, para verificar si dos expresiones son iguales se utiliza el
operador ==, por ejemplo en la expresin a == b y da como resultado un
verdadero si el valor de a es igual al valor de b, en caso contrario es falso.
En FORTRAN el "mayor que" se representa con .GT., el "menor que" se
representa con .LT., el "mayor o igual" .GE., el "menor o igual" con .LE., el
"diferente " con .NE. y el "igual" con EQ. Por lo tanto se debe averiguar la
forma de representar a los operadores relacionales en el lenguaje que se est
utilizando.
Operadores lgicos
Estos operadores estn conformados por el AND, OR y NOT, y su resultado es
uno de los valores lgicos (Falso o Verdadero). Los resultados de evaluacin
se muestran en la siguiente tabla de verdad.
a b a OR a AND NOT a NOT b
b
b
0 00
0 11
1 01
1 11
(para nmeros
^ (exponente)
* / %
Mas baja
+ -
! (negacin)
==
!=
respectivamente)
< > >= <=
&&
Mas baja
||
Uso de parntesis
El orden de precedencia de los operadores puede ser cambiada con el uso de
los parntesis, vemoslo en el siguiente ejemplo
En la expresin
a-b+c*d
Por la precedencia de operadores, primero se ejecutar el producto c * d, en
seguida el resultado se sumar a b y el valor obtenido se restar a la variable
a. Es decir, si a=5, b=3, c=2 y d=4 entonces el resultado de la operacin de la
primera expresin sera c*d= 2*4 = 8, en seguida se ejecutara b+8=3+8=11 y
este resultado ser restado a a -11= 5-11= - 6.
Pero si a la misma expresin le agregamos los parntesis
(a - b + c) * d
independientemente de las reglas de precedencia de operadores, primero se
ejecutar lo que est entre parntesis (a - b + c) ,en seguida el resultado se
multiplicar con la variable d. Es decir, si a=5, b=3, c=2 y d=4 entonces el
resultado de la operacin (a - b + c) = (5-3+2)= 4 , luego se ejecutar
4*d=4*4=16. Como se puede observar el uso de los parntesis no slo altera el
orden de precedencia de los operadores sino tambin altera el resultado de las
operaciones.
{lzklmlzkmzl
k
2.4
Tipos
de
datos
definidos
por
el
usuario
2.4.1 struct
mivar
30 bytes
nombre
50 bytes
direccin
3 bytes
estado
4 bytes
cdigo
Este cdigo define un tipo de estructura llamado dire y declara las variables
info_dire, binfo y cinfo del mismo tipo.
El formato general de una definicin de estructura es:
struct nombre_de_estructura
{
tipo
nombre_variable1;
tipo
nombre_variable2;
tipo
nombre_variable3;
.
.
.
} variables_estructuras ;
Donde se puede omitir el nombre de la estructura tipo nombre_de_estructura y
las variables_estructura, pero no ambas
Se referencian elementos individuales de la estructura usando el operador
punto (.). Por ejemplo, el siguiente cdigo asignara el cdigo postal 12345 al
campo correspondiente de la variable estructura info_dire que se declar antes
info_dire. codigo = 12345 ;
2.4.2 typedef
Turbo C permite definir nuevos nombres de datos explcitamente usando la
palabra clave typedef. Realmente no se est creando una nueva clase de
datos, sino un nuevo nombre para un tipo existente. Este nuevo proceso puede
ayudar a hacer programas independientes de la mquina, i.e. ms portables;
slo se necesita cambiar las sentencias typedef, el formato general es:
typedef nombre_de_tipo;
donde nombre_de_tipo es cualquier tipo de dato y nombre es el nuevo nombre
para ese tipo. El nombre que se define es adems, y no reemplazable, por el
nombre de tipo existente.
Por ejemplo, se podra crear un nuevo nombre para float usando
typedef float balance;
Esta sentencia le dice al compilador reconocer balance como otro nombre para
float . Despus podra crear una variable float usando balance:
balance over_due;
Aqu over_due es una variable en punto flotante de tipo balance, que es otra
palabra para float.
Se puede usar typedef para crear nombres para tipos mas complejos, todava
como se muestra aqu:
typedef struct client {
float due;
int over_due;
char name [40];
};
clien clist [NUM_CLIENTS]; /*define el array clist de estructuras de tipo struct
client*/
Usando typedef puede ayudar a que el cdigo sea ms legible y fcil de portar
a una mquina nueva. Sin embargo, recordar que no se est creando ningn
tipo de datos nuevo.
Ahora que se ha visto el poder de personalizar los tipos de datos de Turbo C,
se esta preparando para pasar a los operadores avanzados de este mismo
2.4.3 unin
En C, una unin es una posicin de memoria que se usa para varias variables
similares, que pueden ser de tipos diferentes. La definicin de unin es similar
a la de una estructura, como se demuestra a continuacin:
union u_tipo {
int i;
char ch;
};
Como con una declaracin de estructura, esta definicin no declara ninguna
variable. Se puede declarar una variable poniendo su nombre al final de la
definicin o usando una sentencia separada de declaracin. Para declarar una
variable unin cnvt de tipo u _ tipo usando la definicin, que se escribira:
unin u_tipo cnvt
En cnvt, tanto el entero i y carcter ch comparten la misma posicin de
memoria. (sin embargo , ocupa dos bytes y ch solo uno). La figura siguiente
muestra la forma en que i y ch comparten la misma direccin.
cnvt
i=10;
(unin
/*asigna
1-
cnvt
u_tipo
usando
un
*un){
puntero
*/
2.5.1 if
La sentencia if funciona de la misma manera en casi todos los lenguajes.
Su forma ms sencilla es
if (condicin) sentencia
donde condicin es una expresin que se evala de falsa o verdadera (en el
lenguaje C, verdadero es no cero y falso cero). Ejemplo
if (10 < 11) printf ("10 es menor que 11")
En la lnea anterior, la condicin es verdadera por lo tanto se imprimir
en pantalla el mensaje dado en la instruccin printf de C.
Otra forma de manejar a la sentencia if es recurriendo al else que se lee
"si no", y en su caso ejecutar las instrucciones en caso de que la condicin
sea falsa, su estructura general es
if
(condicin)
ejecuta sentencia(s) si la condicin es verdadera
else
ejecuta sentencia(s) si la condicin es falsa
Ejemplo
if
(n
<
printf ("%d es menor que 11", n);
11)
else
printf ("%d es mayor o igual que 11", n);
En el ejemplo depender del valor que tome n para ejecutar la instruccin
indicada.
(condicin
1)
ejecuta sentencia(s) si la condicin 1 es verdadera
else
ejecuta
...
if
sentencia(s)
si
(condicin
la
condicin
2)
es
verdadera
else
if
(condicin
ejecuta sentencia(s) si la condicin-n es verdadera
n)
else
ejecuta sentencia(s) si las condiciones de la 1 a la n fueron falsas
Ejemplo
if
((n>=0)&&(n
<
11))
printf ("%d es mayor o igual que 0 pero menor que 11", n);
else
if
((n>=11)&&(n
<
20))
printf ("%d es mayor o igual que 11 pero menor que 20", n);
else
if
((n>=21)&&(n
<
30))
printf ("%d es mayor o igual que 21 pero menor que 30", n);
else
printf ("%d es mayor o igual 30", n);
En el ejemplo depender del valor que tome n para ejecutar la instruccin
indicada.
2.5.2 for
El bucle for presenta la siguiente estructura en su forma ms sencilla es
for (inicializacin, condicin, incremento) sentencia;
donde inicializacin establece la variable de control del bucle a un valor. La
condicin es una expresin que se evala de falsa o verdadera cada vez que
se repite el bucle. Se mantiene el bucle en funcin mientras la condicin es
verdadera. La porcin incremento incrementa la variable de control. Ejemplo
int contador;
for(contador =1; contador<=100; contador++) printf (" % d", contador);
En la lnea anterior, el contador se inicializa con 1, cada vez que se repite
el bucle, el programa comprueba la condicin contador <=100. Si la condicin
es verdadera, el program ejecuta la sentencia printf() e incrementa en uno al
2.5.3 while
El bucle while presenta la siguiente estructura en su forma ms sencilla es
while (condicin) sentencia;
donde sentencia puede ser una sentencia vaca, una sentencia nica o un
bloque de sentencias que se repetirn. La condicin es una expresin que se
evala de falsa o verdadera cada vez que se repite el bucle. El bucle itera
mientras la condicin sea verdadera. Cuando llega a ser falsa, el control del
programa pasa a la lnea que sigue al bucle. Ejemplo
int con=0;
while(con != -1) scanf(" % d", &cont);
En la lnea anterior, la variable con se estar leyendo indefinidamente
hasta que el usuario introduzca un -1.
El while comprueba la condicin en lo alto del bucle, lo que significa que
el cdigo del mismo no se ejecuta siempre. Por esta razn es necesario
inicializar a con=0 antes del while.
2.5.4 do
Al contrario del while el bucle do-while examina la condicin en la parte
baja. Esta caracterstica provoca que el do-while siempre se ejecute al menos
una vez . La forma general del bucle es
do{
sentencia
} while (condicin) ;
La condicin es una expresin que se evala de falsa o verdadera cada vez
que se repite el bucle. El bucle itera mientras la condicin sea verdadera.
Cuando llega a ser falsa, el control del programa pasa a la lnea que sigue al
bucle. Ejemplo
int con;
do {
scanf(" % d", &cont)
}while(con != -1) ;
En la lnea anterior, la variable con se estar leyendo indefinidamente
hasta que el usuario introduzca un -1 . La diferencia con el ejemplo del while es
que en este caso no necesita inicializarse la variable cont ya que se ejecuta al
menos una vez el cdigo interno del bucle.
2.6 Funciones
El formato general de una funcin en lenguaje C es
tipo_de_dato_que_devuelve_la
(lista_de_parmetros)
_funcion
nombre_de_funcin
{
cuerpo
de
la
funcin
}
El tipo_de_dato_que_devuelve_la _funcion especifica el valor que la funcin
devolver mediante el uso de return. El valor puede ser de cualquier tipo valido.
Si no se especifica un valor, entonces la computadora asume por defecto que
la funcin devolver un resultado entero.
La lista_de_parmetros es una lista de nombres de variables separados por
comas que recibe los valores de los argumentos cuando se llama a la funcin.
El tipo de dato de la declaracin debe anteponerse a las variables.
Las funciones terminan y devuelven el control automticamente al
procedimiento que las invoca, precisamente a la siguiente lnea de donde
fueron llamadas.
(int
p)
resul;
(resul);
Las variables globales son tiles cuando se usa el mismo dato en muchas
funciones del programa. Sin embargo se debera evitar el uso innecesario de
las variables globales por tres razones: primera, ocupan memoria durante toda
la ejecucin del programa y no slo cuando se necesita; segunda, el uso de la
variable global en lugar de una local restringir la generalidad de una funcin
ya que depende de una variable que debe definirse fuera de s misma; tercera,
usando una serie grande de variables globales se pueden conducir a errores de
programa con efectos laterales desconocidos e indeseables.
Ejemplo:
/*prototipo
de
la
int potencia (int base, int potencia);
funcin*/
void
main(
)
{
int
y;
/*variable
local*/
clrscr(
);
for
(y=1;
y<=10;
y++)
{
printf("El cuadrado de %d es %d",y);
potencia (y, 2);
/*parmetros reales*/
}
getch(
);
}
int
potencia
(int
base,
int
potencia)
/*base y potencia son parmetros formales*/
{ int
x;
int
prod=1;
for
(x=1;x<=potencia
;x++)
{
prod=
prod*
base;
}
return(prod);
}
/*prototipo de la funcin*/
imprime(int num[10]);
main(
)
{
int t [10], i;
for(i=0;
i<10;i++)
t[i]=1;
imprime(
t
);
}
imprime(int
{
int
for(i=0;
printf ("
}
num[10])
%d
i;
i<10;i++)
", num[i)];
/*prototipo
de
la
funcin*/
imprime(int num[10]);
main(
)
{
int t [10], i;
for(i=0;
i<10;i++)
t[i]=1;
imprime(
t
);
}
imprime(int
num[
])
{
int
i;
for(i=0;
i<10;i++)
printf (" %d ", num[i)];
}
El ltimo camino en que se puede declarar un parmetro arreglo,
y la forma ms comn en los programas C escritos profesionales,
es un puntero. Ejemplo:
/*prototipo de la funcin*/
imprime(int num[10]);
main(
)
{
int t [10], i;
for(i=0; i<10;i++) t[i]=1;
imprime(
t
);
}
imprime(int
*num)
{
int
i;
for(i=0;
i<10;i++)
printf (" %d ", num[i)];
}
y395@
40bjbj22404040404040404040404040404040404040
41
.X41X4141X4141`Z
4141414141414141414141414141414141414141414141414141414141 4
14141414141414141 414141414141414141 4141414141414141414141
414141414141414141414141414141414141414141414141414141414141414
141414141414141414141414141
4141414141414141414141414141414141
4141414141
4141414141
414141414141414141414141414141`b 41
4141414141
4141415@
42bjbj22424242424242424242424242424242424242
43.X43X4343X4343`Z
4343434343434343434343434343434343434343434343434343434343 4
34343434343434343 434343434343434343 434343434343434343434
343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343 434343434343434343434343434343434
3 4343434343 4343434343 4343434343 4343be usar un proceso de dos
pasos. Primero, se debe dar un especificador explcito de tipo a una funcin;
segundo, se puede identificar el tipo de la funcin antes de hacer la primera
llamada. Este proceso es la nica manera para que el compilador C pueda
generar el cdigo correcto para funciones que devuelven valores no enteros.
Se puede declarar las funciones para devolver cualquier tipo valido de datos. El
mtodo de declaracin es similar al mtodo que se usa para las variables: el
especificador de tipo precede al nombre de funcin. El especificador de tipo le
dice al compilador que tipo de datos devolver la funcin. Esta informacin es
crtica si el programa va a funcionar correctamente ya que diferentes tipos de
datos tienen tamaos y representaciones internas diferentes.
Antes de poder usar una funcin que envuelve un tipo no entero, se debe dar a
conocer el tipo al resto del programa. La razn para hacer esto es fcil de
entender. Mientras no se indique lo contrario, Turbo C asumir que una funcin
va a devolver un valor entero. Si el programa llama a una funcin que devuelva
un tipo diferente antes de la declaracin de la funcin, entonces el compilador
generar el cdigo errneo para la llamada de la funcin. Para prevenir este
fallo se debe poner cerca de principio del programa un formato especial de la
sentencia de declaraciones para decirle al compilador que valor de la funcin
se devuelve realmente. Ejemplo:
float
sum(
);
main(
)
{
float
primero,
segundo;
primero=
123.23;
segundo=
99.09;
printf("
%f
",sum(primero,
segundo));
}
float sum(float a, float b)
{
return
a+b;
/*suma
de
flotantes*/
}
);
)
*p,ch;
);
s);
",p);
encontrada");
);
)
)
x,
y;
y=10;
y);
struct
char
int
float
char
} mike;
fred{
x;
y;
z;
s[10];
prueba{
a,b;
ch;
main
{
arg.a=1000;
f1
}
()
(arg);
2.7 Arreglos
Un arreglo (array) es una coleccin de variables del mismo tipo que se
referencian utilizando un nombre comn. Normalmente los arreglos constan de
posiciones de memoria contiguas. Un arreglo puede tener una o varias
dimensiones. Para acceder a un elemento especfico de un arreglo se usa un
ndice.
Los arreglos son estructuras estticas de almacenamiento, ya que el tamao
que se les designa en tiempo de compilacin no puede aumentar o disminuir en
tiempo de ejecucin.
En el lenguaje C, Java, etc., los arreglos usan cero como ndice del primer
elemento. Por ejemplo, el programa siguiente carga un arreglo de enteros con
los nmeros del 0 al 9.
main()
{
int x[10];
int i;
for (i=0; i<10; i=i+1)
{
x[i]=i;
}
for (i=0; i<10; i=i+1)
{
printf(" %i ", x[i]);
}
}
En este ejemplo, num[0] almacenar el valor 1, num[1] guardar el valor 2,
num[2] almacenar el valor 3, y as sucesivamente como se observa en la
imagen:
un
programa
incorrecto
crash[10],
i<100;
*/
i;
crash[i]=i;
i++)
ch[2]
ch[3]
ch[4]
ch[5]
ch[6]
5.5 Cadenas
En C, una cadena consta de un arreglo unidimensional de caracteres que
termina en un nulo '\0' (generalmente cero), por lo tanto, se debern declarar
los arreglos de caracteres con un carcter ms que la cadena ms larga que se
vaya a guardar. Esto es:
Si se quiere declarar una arreglo str que guarde una cadena de diez
caracteres, se escribir de la siguiente forma:
char str[11];
str);
este programa solo repite la cadena que se teclea. Se puede usar str como un
argumento para printf(). El programa usa el nombre del arreglo sin ndices. Si
se introduce una cadena ms larga que el tamao del arreglo, sta se
sobrescribe.
5.7 Algunas funciones de cadena de la biblioteca
Turbo C reconoce un amplio rango de funcin de manipulacin de cadenas, las
mas comunes son:
strcpy(
strcat(
strcmp(
strlen( )
)
)
)
str[80];
"hola");
La
funcin
strcat(
utiliza
el
siguiente
formato:
strcat(s1,s2);
esta funcin aade s2 al final de s1; s2 no se altera. Ambas cadenas terminan
con un nulo y el resultado termina en nulo. Por ejemplo:
main()
{
char first[20], second[10];
strcpy(first, "hola");
strcpy(second, "amigos");
strcat(s1, s2);
printf("%s",
}
Este programa imprimir hola amigos en la pantalla.
- La funcin strcmp( ) utiliza el siguiente formato:
s1);
strcmp(s1, s2);
sta funcin compara dos cadenas y devuelve 0 si son iguales. Si s1 es
lexicogrficamente mayor que s2, entonces la funcin devuelve un nmero
positivo; si s1 es menor que s2, la funcin devuelve un nmero negativo.
Tambin se puede utilizar como una rutina de verificacin de palabra de
acceso:
/* devuelve verdad si acepta la palabra de paso, falso */
password()
{
char s[80];
printf("introducir palabra de paso: ");
gets(s);
if(strcmp(s, "palabra de paso"))
{
printf("palabra de acceso invlida\n");
return 0;
}
return 1;
}
strcmp devuelve falso cuando coinciden las cadenas y por lo tanto tambin se
puede usar el operador NOT si se quiere hacer algo cuando las cadenas son
iguales, por ejemplo:
main()
{
char s[80];
for(;;)
{
printf(": ");
gets(s);
if(!strcmp("salir", s)) break;
}
}
contina pidiendo entradas hasta que se teclea quit.
- La funcin strlen( ) tiene el siguiente formato:
strlen(s);
strlen(s));
}
}
for (i=0; i<3; i=i+1)
{
for (j=0; j<4; j=j+1)
{
printf("%d ", num[i][j]);
}
printf (" \n");
}
}
struct
dire
{
char
nombre
[30];
char direccion [50];
char
estado
[3];
unsigned
long
int
codigo;
};
struct dire arreglo_dire
[5];
ste cdigo crea 5 conjuntos de variables que se organizan como se defini en
la estructura dire.
arreglo_dire [5]
arreglo_dire [0].nombre
arreglo_dire [0].direccion
arreglo_dire [0].estado
arreglo_dire [0].codigo
arreglo_dire [1].nombre
arreglo_dire [1].direccion
arreglo_dire [1].estado
arreglo_dire [1].codigo
arreglo_dire [2].nombre
arreglo_dire [2].direccion
arreglo_dire [2].estado
arreglo_dire [2].codigo
arreglo_dire [3].nombre
arreglo_dire [3].direccion
arreglo_dire [3].estado
arreglo_dire [3].codigo
arreglo_dire [4].nombre
arreglo_dire [4].direccion
arreglo_dire [4].estado
arreglo_dire [4].codigo
nombre
direccin
estado
cdigo
arreglo_dire [0].direccion
arreglo_dire [0].estado
arreglo_dire [0].codigo
arreglo_dire [1].nombre
arreglo_dire [1].direccion
arreglo_dire [1].estado
arreglo_dire [1].codigo
arreglo_dire [2].nombre
arreglo_dire [2].direccion
arreglo_dire [2].estado
01410
arreglo_dire [3].nombre
arreglo_dire [3].direccion
arreglo_dire [3].estado
arreglo_dire [3].codigo
arreglo_dire [4].nombre
arreglo_dire [4].direccion
arreglo_dire [4].estado
arreglo_dire [4].codigo
nombre
direccin
estado
cdigo
AN SIN HABILITAR
(struct
tm
tm
*t);
{
hours;
minutes;
seconds;
tm
(;;)
hora;
{
(&hora);
(&hora);
}
/*versin 1 - explica la s referencias de puntero */
actualiza(struct
tm
*t)
{
t->seconds++;
if
(t->seconds==60)
{
t->seconds=0;
t->minutes++;
}
if
( t->minutes==60)
t->minutes=0;
t->hours++;
}
if
(t->hours==24)
t->hours=0;
delay
();
}
visualiza
{
printf
printf
printf
}
delay(
{
long
for
}
(struct
tm
("%d:",
("%d:",
("%d:",
*t)
t->hours)
;
t->minutes);
t->seconds);
)
int
t;
(t=1;t<128000;t++);