Professional Documents
Culture Documents
PROGRAMA ACADÉMICO
TÉCNICO EN SISTEMAS DIGITALES
UNIDAD DE APRENDIZAJE
LENGUAJE DE PROGRAMACIÓN
SEMESTRE / NIVEL
4° SEMESTRE
DOCENTE
ING. LUIS ERNESTO ROSALES SÁNCHEZ
1
UBICACION DEL TURBO C EN EL AMBIENTE DE LA COMPUTACION
Programas de aplicación
al usuario.
Sistema Operativo
BIOS
(Basic, Input, Output; System)
Lenguaje Maquina
1 y 0 (BIT)
2
CARACTERISTICAS BASICAS DEL LENGUAJE C:
Sus orígenes el primer C usaba el S.O UNIX se utilizo durante muchos años siendo compatible con las nuevas
implementaciones a nivel de código fuente.
Posteriormente Borland creo el turbo c con las siguientes metas principales.
1) Implementar el estándar completo de ANSI (American National Standards Institute) de manera que
se tuviera disponible el compilador de C mas actualizado.
C Frente A C ++
C + + es una versión ampliada y mejorada de C, que ha sido diseñada para la programación orientada a objetos
(POO).
C + + contiene y admite el lenguaje C, además de un conjunto de ampliaciones orientadas a objetos.
Así todos los compiladores que puedan compilar programas en C + + también compilaran programas en C.
C ES UN LENGUAJE ESTRUCTURADO
- El termino lenguaje estructurado por bloques no se aplica estrictamente al C., se le llama así debido a su
estructura.
- Un lenguaje estructurado por bloques permite declarar subrutinas dentro de otras subrutinas y C no lo
3
permite.
LENGUAJES ESTRUCTURADOS
- PASCAL
- ADA
-C
- MODULA - 2
LENGUAJES NO ESTRUCTURADOS
-FORTRAN
- BASIC
- COBOL
FUNCION
BLOQUES DE CODIGO
- Grupo de sentencias de un programa conectados en forma lógica que es tratado como una unidad.
- Se crean colocando una serie de sentencias entre ( ) (llaves).
CREACION DE UN PROGRAMA
4
biblioteca necesitan Enlazador ------ Bibliotecas
ESTRUCTURA DE UN PROGRAMA
Declaraciones globales
Funciones
Variable
Función principal
main ( )
Declaraciones Locales
Sentencias
{
Definición de otras funciones
Func 1 (...)
{
:
}.
LA BIBLIOTECA Y EL ENLACE
- C no proporciona en la definición real. Ningún método para llevar a cabo las operaciones
de entrada / salida ( I / O )
- Los programas incluyen llamadas a funciones contenidas en la biblioteca Standard.
5
- Los compiladores de C incorporan una biblioteca que proporciona las funciones más
Usuales.
- Se comportan como bloques constitutivos que solo hay que combinar.
- El enlazador es un programa que combina en programa con las funciones necesarias de la biblioteca.
COMPILACION DE UN PROGRAMA EN C
- C permite partir un programa en muchos archivos y que cada uno sea compilado por separado.
- Una vez compilados los programas se enlazan entre si junto con las rutinas de la biblioteca para formar el
código objeto.
- La ventaja de lo anterior es que un cambio en el código de uno de los archivos no requiere re compilación del
programa entero.
a) Creación del programa (con un editor)
b) Compilación del programa
c) Enlace del programa con las funciones necesarias de la biblioteca.
- Sistemas Operativos
- Interpretes
- Editores
- Ensambladores
- Compiladores
- Administradores de base de datos
Pero a medida que ha crecido en popularidad, mucho se utiliza para programar cualquier tipo de tarea debido
a su portabilidad y eficiencia.
- Pocas restricciones
- Pocas quejas
- Código rápido
- Eficiencia
INTERPRETE: Lee el código fuente del programa línea a línea y realiza las instrucciones específicas que están
en esa línea.
COMPILADOR: Lee el programa entero y entonces lo convierte a un código objeto, que es traducción del
código fuente del programa a una forma que puede ser ejecutada directamente-
te por la computadora.
El código objeto se conoce como código binario o máquina.
6
- Cuando se usa un intérprete el código fuente debe estar presente cada vez que se quiera
ejecutar el programa.
- Un compilador convierte el programa en código objeto que pueda ser directamente ejecutado
por la máquina.
TERMINOS BASICOS
1.- Tiempo de Compilación: se refiere a los sucesos que ocurren durante el proceso de
Compilación.
2.- Tiempo de Ejecución: Se refiere a los sucesos que ocurren mientras se ejecuta el
Programa.
3.- Código Fuente: Texto de un programa que un usuario puede leer en forma natural
considerado como el programa. Es la entrada al compilador.
4.- Código Objeto: La traducción del código fuente de un programa a código maquinaria
que es el que la computadora puede leer y ejecutar directamente. Es la entrada al
enlazador.
5.- Enlazador: Programa que enlaza funciones compiladas por separado, para producir un
solo programa. Combina las funciones de la biblioteca estándar de C con el código que
se ha escrito la salida es un programa ejecutable.
6.- Biblioteca: Archivo que contiene las funciones estándar que se pueden usar en los
programas.
Esas funciones incluyen todas las operaciones de E / S así como otras rutinas útiles.
7
ELEMENTOS DE UN PROGRAMA
SENTENCIA:
- ESPECIFICA LA ACCIÓN A LLEVAR A CABO POR EL PROGRAMA
- SON LAS QUE REALIZAN LAS OPERACIONES
- TERMINAN SIEMPRE CON ( ; )
- EL ( ; ) SIGNIFICA QUE ES UN FINALIZADOR DE SENTENCIA.
- NO EXISTEN RESTRICCIONES, SE PUEDEN SITUAR DOS O MAS SENTENCIAS EN UNA
LÍNEA.
-PARA ESCRIBIR UN PROGRAMA, PRIMERO SE CREAN LAS FUNCIONES Y DESPUÉS SE PONEN JUNTAS.
- UNA FUNCIÓN DEBE LLEVAR UN PARÉNTESIS ( ) DESPUÉS DEL NOMBRE DE LA FUNCIÓN.
3) FUNCIONES DE BIBLIOTECA:
4) ARCHIVOS DE CABECERA:
8
PREPROCESADOR: REALIZA DISTINTAS MANIPULACIONES EN EL ARCHIVO FUENTE ANTES DE
COMPILARLO.
- ARCHIVOS DE CABECERA MAS FRECUENTES < stdio.h > , < conio.h > , < math.h > .
DIRECTIVAS:
- INSTRUCCIONES QUE DA EL PROGRAMADOR AL COMPILADOR.
- LE DICE AL PREPROCESADOR QUE LEA EN OTRO ARCHIVO Y LO INCLUYA EN EL
PROGRAMA.
- NO TERMINAN EN ( ; ) POR QUE NO SON PALABRAS CLAVES QUE DEFINAN UNA
SENTENCIA.
VARIABLES:
- POSICIÓN DE MEMORIA CON NOMBRE QUE PUEDE GUARDAR DISTINTOS
VALORES.
- SE DEBEN DECLARAR ANTES DE UTILIZARLAS.
- LE DICE AL COMPILADOR QUE TIPO DE DATO SE ESTA UTILIZANDO.
DECLARACIÓN:
TIPO nombre_var ;
VARIABLES GLOBALES:
- DECLARADAS FUERA DE TODAS LAS FUNCIONES Y CUALQUIER FUNCIÓN PUEDE
ACCEDER A ELLAS.
VARIABLES LOCALES:
- DECLARADAS DENTRO DE UNA FUNCIÓN, SOLAMENTE ES CONOCIDA POR LA
FUNCIÓN.
LLAMADA A UNA FUNCIÓN: - EN LA DECLARACIÓN DE LOS PARÁMETROS FORMALES DE UNA
FUNCIÓN.
DECLARACIÓN
9
nombre_variable = valor;
7) CONSTANTES:
-Punto flotante: Requieren del uso del punto decimal seguido por el componente fraccional. Ejemplo: 11.23, 245.0
Comentario = Es una anotación que se pone en el código fuente el compilador ignora todos los comentarios.
Se utilizan para documentar el significado y propósito del código fuente.
/ * * /
Ejemplo:
/ * Comentario */
10
ORDENES BÁSICAS
A) SENTENCIA if :
SU DECLARACIÓN ES:
if (condición ) sentencia
POR EJEMPLO:
if ( 10 11 ) printf ( “ 10 es menor que 11 “ ) ;
B) BUCLE for:
SU DECLARACIÓN ES :
CONDICIÓN.- ES UNA EXPRESIÓN QUE EL COMPILADOR COMPRUEBA CADA VEZ QUE REPITE EL
BUCLE.( SE MANTIENE EL BUCLE EN FUNCIÓN MIENTRAS LA CONDICIÓN SEA
VERDAD )
POR EJEMPLO:
main ( )
{
int contador ;
for ( contador 1 ; contador 100 ; contador ++) printf ( “%d” , contador ) ;
11
Comprueba la condición 100
Si es verdad incrementa contador en uno con ++
FUNCIONES:
-UNA FUNCIÓN ES UNA SUBRUTINA QUE CONTIENE UNA O MAS SENTENCIAS DE C
-ELLAS REALIZAN UNA O MAS TAREAS. CADA FUNCIÓN REALIZA UNA SOLA TAREA.
-CADA FUNCIÓN TIENE UN NOMBRE Y UNA LISTA DE ARGUMENTOS QUE RECIBE LA
FUNCIÓN.
-UNA FUNCIÓN TENDRÁ UN PARÉNTESIS DESPUÉS DEL NOMBRE DE LA FUNCIÓN.
POR EJEMPLO:
main ( )
{
hola ( ) ; / LLAMA A LA FUNCIÓN HOLA /
}
hola ( )
{
printf ( “ hola “ ) ;
}
ARGUMENTO:
-EL TERMINO ARGUMENTO SE REFIERE AL VALOR USADO PARA LLAMAR A LA FUNCIÓN.
-ASÍ LAS FUNCIONES QUE TOMAN ARGUMENTOS SE LLAMAN FUNCIONES PARAMETRIZADAS .
-LA VARIABLE UTILIZADA COMO ARGUMENTO EN UNA LLAMADA DE FUNCIÓN NO TIENE QUE
VER CON EL PARÁMETRO FORMAL QUE RECIBE SU VALOR.
- EL TIPO DE ARGUMENTO QUE SE UTILIZA PARA LLAMAR A UNA FUNCIÓN DEBE SER DEL
MISMO TIPO QUE EL PARÁMETRO FORMAL QUE RECIBE ESE ARGUMENTO.
LOS ARGUMENTOS SE SEPARAN CON ( , ).
12
POR EJEMPLO:
main ()
{
mul ( 10, 11) ;
}
mul (a, b ) ;
int a, b ;
{
printf ( “ %d”, a b) ;
}
13
FUNCIONES DE ENTRADA / SALIDA
A) printf ( )
SE UTILIZA PARA MOSTRAR VALORES DE CARACTERES ENTEROS Y EN PUNTO
FLOTANTE.
DECLARACIÓN:
printf ( “ cadena de control “, argumentos ) ;
CADENA DE CONTROL:
- CONTIENE LOS CARACTERES QUE SE VERÁN EN PANTALLA.
- LAS ORDENES QUE LE DICEN A printf COMO VISUALIZAR EL RESTO DEL
ARGUMENTO.
- CÓDIGOS DE FORMATO.
CÓDIGOS DE FORMATO:
- DETERMINA COMO SE MOSTRARA EL ARGUMENTO COINCIDENTE.
- COMIENZA CON UN %
- SE EMPAREJAN CON SUS ARGUMENTOS DE IZQUIERDA A DERECHA Y DEBE
HABER EL
MISMO NUMERO DE ARGUMENTOS COMO DE ESPECIFICADORES.
CÓDIGO SIGNIFICADO
%d VISUALIZA UN ENTERO EN FORMATO DECIMAL
%f VISUALIZA UN float EN FORMATO DECIMAL
%c VISUALIZA UN CARACTER
%s VISUALIZA UNA CADENA
B) scanf ( )
ES UNA DE LAS FUNCIONES DE ENTRADA, PUEDE LEER ENTEROS, NÚMEROS EN PUNTO
DECIMAL
DESDE TECLADO.
DECLARACIÓN:
scanf ( “ cadena de control “, & argumentos (nom-var) )
CADENA DE CONTROL:
-CONTIENE CÓDIGO DE FORMATO
- EL CÓDIGO INDICA QUE TIPO DE VALOR VA A RECIBIR
14
- LA LISTA DE ARGUMENTOS DEBE CONTENER EXACTAMENTE EL MISMO
NUMERO DE
ARGUMENTOS QUE DE CÓDIGOS DE FORMATO EN LA CADENA DE CONTROL.
- LAS VARIABLES CONTIENEN LOS VALORES INTRODUCIDOS DESDE TECLADO.
- EL & DEBE PRECEDER A LAS VARIABLES QUE RECIBIRÁN LOS VALORES
LEIDOS
DESDE TECLADO.
- & AYUDA A LOS CÓDIGOS DE FORMATO A DETERMINAR EL MODO EN QUE SE
LEERÁ
LA INFORMACIÓN EN LAS VARIABLES A LAS QUE APUNTAN LOS ARGUMENTOS
QUE
SIGUEN A LA CADENA DE CONTROL
CÓDIGO SIGNIFICADO
%c LEE UN ÚNICO CARÁCTER
%d LEE UN ENTERO DECIMAL
%f LEE UN ENTERO EN PUNTO FLOTANTE
OPERADOR SIGNIFICADO
( ) OPERADOR DE AGRUPACIÓN
* MULTIPLICACIÓN
/ DIVISIÓN
+ SUMA
- RESTA
% MODULO
++ INCREMENTO ( SIN ESPACIOS )
-- DECREMENTO ( SIN ESPACIOS )
1) ES EL OPERADOR DE RESTA.
2) SE PUEDE UTILIZAR PARA INVERTIR EL SIGNO DE UN NUMERO.
15
p ejem:
RESPUESTA = 100 * 10 ;
OPERADORES RELACIONALES
OPERADOR SIGNIFICADO
MAYOR QUE
MAYOR O IGUAL QUE
MENOR QUE
MENOR O IGUAL QUE
IGUAL
DISTINTO DE
OPERADORES LÓGICOS
OPERADOR SIGNIFICADO
Y ( AND )
O ( OR )
16
! NO ( NOT )
TABLA DE VERDAD
P Q P && Q P Q
!Q
0 0 0 0
1
0 1 0 1
1
1 1 1 1
0
1 0 0 1
0
CÓDIGO SIGNIFICADO
\b RETROCESO
\f AVANCE DE PAGINA
\n NUEVA LÍNEA
\r RETORNO DE CARRO
\t TABULADOR HORIZONTAL
\ COMILLAS DOBLES
\‘ COMILLA SIMPLE
\0 NULO
\\ BARRA INVERTIDA
\v TABULADOR VERTICAL
\a PITIDO
17
\N CONSTANTE OCTAL
\ xN CONSTANTE HEXADECIMAL
LOS TIPOS BÁSICOS DE DATOS EXCEPTO void SE PUEDEN MODIFICAR UTILIZANDO MODIFICADORES
DE TIPO.
MODIFICADORES DE TIPO:
signed
unsigned
long PRECEDEN AL NOMBRE DEL TIPO
short
A) signed: SE UTILIZA CON char PARA CREAR UN ENTERO PEQUEÑO CON SIGNO.
B) char : CUANDO SE UTILIZA COMO UN ENTERO PUEDE CONTENER LOS NÚMEROS POSITIVOS EN
EL RANGO
DE 0 . . 255
SI SE ESPECIFICA COMO signed PUEDE CONTENER NÚMEROS EN UN RANGO DE -128 . . 127
18
SE PUEDE UTILIZAR PARA CREAR UN ENTERO CON signo.
* SE PERMITE UNA NOTACIÓN ABREVIADA PARA LA DECLARACIÓN DE ENTEROS unsigned, short O long.
BASTA CON UTILIZAR EL NOMBRE DEL MODIFICADOR SIN EL int. *
DEBIDO A QUE LA FUNCIÓN printf Y scanf DEBEN SABER CON EXACTITUD EL TIPO DE DATOS QUE
TRABAJA SE DEBE ANTEPONER UN MODIFICADOR:
19
- UN BLOQUE PUEDE APARECER EN CUALQUIER PARTE DE UNA FUNCIÓN.
- PARA CREAR UN BLOQUE DE CÓDIGO, SE RODEAN LAS SENTENCIAS EN EL BLOQUE CON LLAVES DE
APERTURA Y CIERRE.
ASÍ LAS SENTENCIAS FORMAN UNA UNIDAD LÓGICA QUE SE PUEDE UTILIZAR EN CUALQUIER LUGAR
DONDE PUEDA HACERLO UNA SENTENCIA SENCILLA.
EJEMPLO:
FORMA GENERAL DE if CON BLOQUES DE CÓDIGO:
if ( expresión ) {
sentencia1 ;
sentencia2 ;
.
sentencia n ;
}
else {
sentencia1 ;
. .
sentencia n ;
}
SI LA EXPRESIÓN SE EVALÚA COMO VERDADERA SE EJECUTARAN LAS SENTENCIAS CONTENIDAS EN
EL
BLOQUE DE CÓDIGO ASOCIADO CON if.
INTRODUCCIÓN DE CARACTERES
FUNCIÓN getchar ( ):
DEVUELVE UN CARACTER INTRODUCIDO DESDE TECLADO.
UNA VEZ LLAMADA , LA FUNCIÓN ESPERA A QUE SE PULSE UNA TECLA, ASÍ HACE
ECO
DE LA PULSACIÓN DE TECLA EN LA PANTALLA Y DEVUELVE EL VALOR DE LA
TECLA AL
SOLICITANTE.
FUNCIÓN getche ( ):
DEVUELVE EL VALOR INMEDIATAMENTE DESPUÉS DE QUE SE PULSE LA TECLA.
CONTROL DE FLUJO
-SON QUIENES DETERMINAN DE QUE FORMA SE VAN APLICANDO LAS TRANSFORMACIONES A LOS
DATOS.
PROPOSICIONES DE CONTROL:
20
ES AQUELLA CONSTRUCCIÓN SINTÁCTICA DE UN LENGUAJE QUE PERMITE ESPECIFICAR UN
ORDEN
PARA LA EJECUCIÓN DE INSTRUCCIONES.
ESTE ORDEN PUEDE SER SENCILLO ( EJECUCIÓN SECUENCIAL : AL TERMINAR LA PROPOSICIÓN
ACTUAL SE EJECUTA LA SIGUIENTE ) O COMPLEJO ( CONDICIONES MÚLTIPLES Y REPETICIÓN
DE
UNA SERIE DE INSTRUCCIONES ).
if ( expresión ) sentencia1
else
sentencia2
ANIDAMIENTO DE SENTENCIAS if :
CUANDO UNA SENTENCIA if ES EL OBJETIVO DE OTRO if O else SE DICE QUE ESTA ANIDADA DENTRO
DEL if
MAS EXTERNO.
if ( p )
if ( q ) printf ( a y b son verdaderos ) ;
else printf ( ¿a que sentencia se destina else ? ) ;
PROPOSICIONES ITERATIVAS
BUCLE while :
SINTAXIS:
while ( expresión ) sentencia ;
BUCLE do - while :
SINTAXIS:
do {
21
sentencias
} while ( expresión ) ;
do ES ÚNICO YA QUE SIEMPRE EJECUTA EL CÓDIGO DE DENTRO DEL BUCLE AL MENOS UNA VEZ,
DADO QUE LA EXPRESIÓN QUE CONTROLA EL BUCLE SE COMPRUEBA AL FINAL DEL MISMO.
BUCLES ANIDADOS
CUANDO EL CUERPO DE UN BUCLE CONTIENE OTRO, SE DICE QUE EL SEGUNDO ESTA ANIDADO EN EL
PRIMERO.
LOS BUCLES PUEDEN ESTAR ANIDADOS AL MENOS 15 NIVELES.
SENTENCIA break
-LA SENTENCIA break PERMITE SALIR DE UN BUCLE DESDE CUALQUIER PUNTO, PASANDO POR ALTO
SU EXPRESIÓN DE FINALIZACIÓN NORMAL.
EJEMPLO:
{
int i;
for ( i = 1 ; i 100 ; i++) {
printf ( “%d” , i ) ;
if ( i== 10 ) break ; /* sale del bucle */
}
}
SENTENCIA continue
22
- EN LOS BUCLES while Y do - while , UNA SENTENCIA continue HARÁ QUE EL CONTROL VAYA
DIRECTAMENTE A LA CONDICIÓN DE PRUEBA Y QUE CONTINUÉ EL PROCESO DEL BUCLE.
SINTAXIS:
swittch ( variable ) {
case constante1:
secuencia de sentencias
break ;
case constante2:
secuencia de sentencias
break ;
.
.
.
default
secuencia de sentencias
break ;
}
ARRAYS
Un array es una lista de variables del mismo tipo que sé referencia por un nombre común.
A una variable individual del array se le llama elemento del array.
Constituyen un modo adecuado de gestionar grupos de datos relacionados.
DECLARACION:
tipo nombre_de_variable tamaño
23
A un elemento de un array se accede mediante un índice utilizando el número del elemento.
Todos los arrays empiezan por 0.
Por ejemplo: Si se quiere acceder al primer elemento de un array se utiliza 0 para el índice.
Para acceder por índice a un array se especifica dentro de corchetes el número de índice del elemento deseado.
Por ejemplo:
miarray 1
Para asignar un valor a un elemento del array se coloca el array al lado izquierdo de la sentencia de asignación.
Por ejemplo:
miarray0 100;
Almacena los arrays unidimensionales en una posición de memoria contigua con el primer elemento en la posición más
baja.
Por Ejemplo:
int i5;
int j;
for ( j 0 ; j 5 ; j++) i j j
Se puede utilizar el valor de un elemento de un array en cualquier lugar en el que se utilizaría una variable o una constante.
Cuando se quiere utilizar scanf ( ) para introducir un valor numérico en un elemento del array basta con poner & delante
del
nombre del array.
Ejemplo:
scanf ( "% d" , &count 9 )
No realiza ninguna comprobación de los límites de los arrays, esto significa que es posible que se sobrepase los límites del
array.
Si se quieren copiar los valores de todos los elementos de un array en otro array se debe hacer copiando cada elemento por
separado.
Los arrays son muy útiles en programación cuando se tienen que administrar listas de información.
Los arrays son especialmente útiles cuando se quieren ordenar la información.
TIPOS DE ARRAYS:
Unidimensional: listas o vectores tipo nomb_var[tamaño]
Bidimensional: matriz o tabla tipo nomb_var[tamaño] [tamaño]
Multidimensional: tipo nomb_var[tamaño] [tamaño] [tamaño]...
Array Unidimensional: Acceso: Por medio de un índice y el número del elemento: i[0], i[1]
O en su defecto por medio de un índice y una variable que represente a los elementos: i[j], x[y]
UTILIZACIÓN DE CADENAS
24
FUNCIONES RELACIONADAS CON CADENAS
Función strcpy ( )
sintaxis: strcpy( hacia, desde ) ;
Función strcat ( )
sintaxis: strcat ( hacia, desde ) ;
Función strcmp ( )
sintaxis: strcmp ( c1, c2 ) ;
Función strlen ( )
sintaxis: strlen ( str ) ;
Función strlwr
Sintaxis strlwr (cad)
Convierte una cadena a letras minúsculas.
Función strupr ()
Sintáxis strupr (cad)
Convierte una cadena a letras mayúsculas.
Para añadir una dimensión basta con especificar su tamaño dentro de corchetes rectangulares.
Por ejemplo:
int count 1012
25
Un array bidimensional es básicamente un array de arrays unidimensionales y es más fácil imaginarlo en un formato
matricial de filas, columnas.
Se puede acceder a ella fila a fila , de izquierda a derecha. Esto quiere decir que el índice de más a la derecha cambia más
rápido que el de más a ala izquierda, cuando se accede a los elementos del array en el orden en el que se han almacenado en
memoria.
INICIALIZACION DE ARRAYS
donde: lista_de_valores: Es una lista de constantes separadas por comas de tipo compatible con el tipo base del
array.
La primera constante se colocará en la primera posición del array, la segunda constante
en
la segunda posición y así sucesivamente.
Ejemplo:
int i 5 1, 4, 9, 16, 25 ;
así i0 1; i4 25;
b) Si el array de caracteres va a contener una cadena: Se puede inicializar el array utilizando una cadena entrecomillada.
Ejemplo:
char nombre 5 "Herb" ;
En esta forma de inicialización no se utilizan los corchetes.
Dado que las cadenas deben terminar con un carácter nulo se debe cerciorar de que el array que se declare sea lo
suficientemente grande para incluir el carácter nulo.
Los arrays multidimensionales sé inicializan del mismo modo que los unidimensionales:
Ejemplo:
int sqr 3 3 { así sqr0 0 tiene el 1
1, 2, 3 sqr0 1 tiene el 2
4, 5, 6 sqr0 2 tiene el 3
7, 8, 9
};
Si sé inicializa un array unidimensional no se tiene que especificar el tamaño del array, basta con no poner nada dentro de
los corchetes rectangulares.
Así el compilador solo cuenta él numero de constantes de inicialización y lo toma como tamaño para el array.
Ejemplo:
int pwr { 1, 2, 4, 8, 16, 32, 64, 128 }
Los arrays que no tienen especificadas sus dimensiones se llaman arrays de tamaño indeterminado.
Un array de tamaño indeterminado es útil ya que es más fácil cambiar el tamaño de la lista de inicialización sin tener que
contarla y después cambiar la dimensión del array.
Para los arrays multidimensionales se tienen que especificar todas menos la dimensión de más a la izquierda, para permitir
que el compilador indexe el array adecuadamente.
Así se pueden construir tablas de longitud variable, asignando el compilador automáticamente espacio de almacenamiento
suficiente para ellas.
Ejemplo:
26
int sqr 3 {
1, 2, 3
4, 5, 6
7, 8, 9
};
Los arrays de cadenas , a menudo llamados tablas de cadenas son muy comunes.
Una tabla de cadenas bidimensional se crea como cualquier otro array bidimensional.
Ejemplo:
char nombres 10 40;
Tabla que contiene:
10 cadenas cada hasta con 40 caracteres de longitud(incluyendo el carácter
de terminación nulo.
Para acceder a una cadena dentro de la tabla , se especifica el primer índice.
P U N T E R O S
( APUNTADORES )
27
FUNDAMENTOS DE LOS PUNTEROS
Ejem:
Si una variable p contiene la dirección de otra variable llamada q , entonces se dice que p apunta a q.
tipo *nombre-de-variable;
donde:
tipo = es el tipo base del puntero.
El tipo base especifica el tipo del objeto al que puede apuntar el puntero.
El asterisco que precede al nombre de la variable indica que se esta creando una variable de puntero.
Ejem:
int *p;
& devuelve la dirección de la variable a la que precede. ( se puede expresar como “dirección de”).
* devuelve el valor almacenado en la dirección a la que precede.( se puede expresar como “ en la dirección “).
Es posible utilizar el operador * al lado izquierdo de una sentencia de asignación para asignar un nuevo valor a una
variable utilizando un puntero a ella.
Aunque C permite que cualquier puntero apunte a a cualquier lugar de memoria, el tipo base es lo que determina como se
tratara el objeto apuntado.
En general el compilador utiliza el tipo base para determinar cuantos bytes hay en el objeto al que apunta el puntero.
Así es como se sabe cuantos bytes habrá de copiar cuando se hace una asignación indirecta, o cuantos bytes comparar
cuando se hace una comparación indirecta.
**No utilizar nunca un puntero de un tipo para apuntar a un objeto de un tipo distinto. **
La declaración de una variable de puntero simplemente crea una variable capaz de contener una dirección de memoria.
Operadores aritméticos Los punteros se pueden utilizar como otras variables. Pero existen algunas restricciones:
Solamente hay cuatro operadores que se pueden aplicar a las variables de puntero:
28
Los operadores aritmeticos : + , ++ , - , -- .
Ejem:
No se puede sumar u numero en punto flotante a un puntero.
Dado que los caracteres tienen una longitud de un byte, un incremento aumenta el valor del puntero en uno y un decremento
reduce su valor en uno.
Aparte de sumar o restar de un entero, no se puede realizar ningún otro tipo de operación aritmética ( no se puede
multiplicar, dividir o sacar el modulo de un puntero).Pero se puede restar un puntero de otro para hallar el numero de
elementos que los separa.
Se pueden aplicar los operadores de incremento o decremento bien al propio puntero o al objeto al que apunta.
Para incrementar a lo que un puntero apunta se debe hacer de la siguiente forma:
(*p)++;
Pero las comparaciones de puntero solo tienen sentido si los punteros se relacionan entre si.
Se puede utilizar printf( ) para mostrar la dirección de memoria contenida en un puntero utilizando el especificador de
formato
%p.
29
Existe una estrecha relación entre los punteros y los arrays. A menudo son intercambiables.
Esta relación entre los dos es la que hace su implementación sea única y potente.
Cuando se utiliza un nombre de array sin índice se esta generando un puntero al principio del array . Esto es por lo que no se
utilizan índices cuando se lee una cadena utilizando gets( ).
En C no se puede pasar un array a una función solamente se puede pasar un puntero al array.
La función gets ( ) utiliza el puntero para cargar el array al que apunta con los caracteres que se introducen por teclado.
Como un nombre de array sin índice es un puntero al principio del array, se puede asignar ese valor a otro puntero y acceder
al array utilizando aritmética de punteros.
Para utilizar un puntero como medio de acceso a arrays multidimensionales, se debe hacer manualmente lo que el
compilador hace en forma automática.
Ejem:
float balance [10] [5];
Para acceder a balance [3][1], se debe hacer lo siguiente:
*( p + (3 * 5) + 1)
Para alcanzar el elemento deseado, se debe multiplicar el numero de fila por el numero de elementos de la fila
y después sumar el numero del elemento dentro de la fila.
Los punteros y arrays están vinculados por mas que el simple hecho de que se pueda acceder a los elementos del array por
aritmética de punteros.
Un puntero se puede indexar como si fuese un array pero, solamente se debe indexar un puntero cuando ese puntero apunta
a un array.
Se puede utilizar aritmética de punteros en lugar de indexación de arrays para acceder a los elementos del array.
No se puede sin embargo, modificar el valor del puntero que se ha generado utilizando un nombre de array.
C permite que se utilicen constantes de cadena encerradas entre dobles comillas en un programa.
Cuando el compilador encuentra una cadena así la almacena en la tabla de cadenas del programa y genera un puntero a la
cadena.
Ejem:
#include <stdio.h>
main ( )
{
char *p;
p = “uno dos tres”; /* p se declara como un puntero a carácter */
printf (p);
}
30
Los punteros pueden estructurarse como arrays igual que cualquier otro tipo de dato.
Ejem:
int *pa[20];
pa[80] = &mivar;
INDIRECCION MÚLTIPLE
Es posible hacer que un puntero apunte a otro puntero. A lo anterior se le llama Indireccion Múltiple.
Cuando un puntero apunta a otro puntero, el primer puntero contiene la dirección del segundo puntero, el cual apunta a la
posición que contiene el objeto.
Para declarar un puntero a un puntero se coloca un asterisco adicional delante del nombre del puntero.
Ejem:
char **mp;
El acceso al valor objetivo al que apunta indirectamente un puntero a puntero requiere que se aplique dos veces el operador
asterisco.
La indireccion múltiple no se limita solamente a puntero a puntero. Se puede aplicar el * tanto como se necesite, pero no
es recomendable.
Cuando se pasa un puntero a una función , la función se debe declarar como receptora de un puntero del mismo tipo.
Cuando se pasa un puntero a una función, el código dentro de esa función tiene acceso a la variable a la que apunta el
parámetro.
Esto es que la función puede cambiar la variable utilizada para llamar a la función.
FUNCIONES ESPECIALES
31
Numeros aleatorios
Para obtener números aleatorios normalmente se usa la función rand(); que devuelve un entero entre 0 y RAND_MAX
numero = x + rand() % y;
donde x es el primer elemento del intervalo deseado de valores aleatorios y y es el número de elementos del intervalo
deseado. Por ejemplo, un número aleatorio de 2 a 5, el intervalo empieza en 2 y está formado por cuatro números:
numero = 2 + rand() % 4;
int MiRandom(int x)
{
srand(1);
int Numero=0;
Numero=(rand()%x);
return Numero;
}
COLOR
32
Si queremos cambiar el color del texto o fondo a la hora de ejecutar un código de programa en Dev C++, podemos seguir
estos sencillos pasos:
Paso 1:
Ingresamos la librerÌa stdlib.h al inicio del código de programa de la siguiente forma:
#include <stdio.h>
Paso 2:
Donde en color de fondo y color de letra son números hexadecimales (De 0 a F) que equivalen a un color.
Paso 3:
0 = Negro 8= Gris
Por Ejemplo si queremos que a la hora de ejecutar un código de programa con fondo de color azul y texto de color rojo,
ingresamos:
system(color 14);
SONIDO
FUNCIÓN: BEEP
33
DO--523
RE--587
MI--659
FA--699
SOL--784
LA--880
SI--988
Velocidad: Es la frecuencia en mSeg., mientras más alta sea la velocidad de reproducción será menor.
BEEP (523,500);
(Sound)
>>
#include <windows.h>
#include <mmsystem.h>
#include <cstdlib>
int main()
{
system("PAUSE");
return 0;
}
<<
** Nota: Es necesario especificar al linker la inclusión de la librería winmm para la función PlaySound
RETARDO
FUNCIÓN: SLEEP
Hace que la ejecución del programa sea lenta, entre mas grande sea el valor mas lenta será la salida, está dada en mS
#include <Windows.h>
Sleep(500);
FUNCIONES DE ESCRITURA
34
Uso del archivo de cabecera
#include <ctype.h>
toupper
sintaxis toupper (variable);
Cambia un carácter a mayúsculas.
tolower
sintaxis tolower (variable);
Cambia un carácter a minúsculas.
isalpha
sintaxis if (isalpha (c) ¡= 0 );
isdigit
islower
isupper
fflush
Operador
+= ------- m += n------------m = m + n;
-= -------- m -= n ------------m = m – n;
*= ---------m *= n ------------m = m * n;
/= ----------m /= n ------------m = m / n;
%= --------- m % = n ---------m = m % n;
35