Professional Documents
Culture Documents
LENGUAJE DE PROGRAMACIN I
CAPITULO I
CONCEPTOS BSICOS
HISTORIA DEL LENGUAJE C CARACTERSTICAS DEL C
VENTAJAS DE C DESVENTAJAS DE C
ESTRUCTURA Y ELEMENTOS DE UN PROGRAMA INSTRUCCIONES DE E/S
Laboratorios BELL, basndose en el lenguaje B, creado por Ken Thompson. En 1983 el Instituto de Estndares Americanos estableci un estndar que definiera al lenguaje C, conocido como ANSI C. Los principales compiladores de C llevan implementado el estndar ANSI C.
LOS CREADORES
Ken Thompson (* Nueva Orleans- 4 de febrero de 1943) (izda.) y Dennis Ritchie (* Nueva York- 9 de septiembre de 1941 - 12 de octubre de 2011) (dcha.) Creadores del sistema operativo UNIX (LINUX) En Japn 2011 dos leyendas de la INFORMTICA reciben reconocimiento , una medalla de oro conmemorativa y un premio unos 450.000 euros.
CARACTERSTICAS DEL C
C es un lenguaje de nivel medio. El cdigo C es muy portable. No es un lenguaje de tipos fuertes. C tiene slo 32 palabras reservadas.
27 por parte del estndar de Kernighan y Ritchie 5 incorporadas por el comit de estandarizacin ANSI
C es un lenguaje estructurado. C es un lenguaje para programadores. Ventajas respecto al lenguaje ensamblador. Portabilidad del C, Eficiencia del C. Compiladores frente a intrpretes. Distingue entre maysculas y minsculas. (pi != PI)
VENTAJAS DE C
Enorme flexibilidad y adaptabilidad.
Slo tiene 32 palabras reservadas. Bibliotecas
universitarios. Eficiencia en la produccin de cdigo objeto. Amplio juego de operadores. Auge de los PCs y compiladores para DOS y Windows.
DESVENTAJAS DE C
No se comprueban los lmites de los vectores.
La precedencia de los operadores no es
i=i+1
i++ i+=i)
concisa.
COMENTARIOS
Comentarios de una sola lnea
Comienzan al principio de la lnea con //
Ejemplo : //Esto es un comentario
Comentarios multi-lnea
Comienzan con /* y terminan con */ No puede anidarse un comentario dentro de otro.
Ejemplo:
IDENTIFICADORES
Se utilizan para nombrar variables, funciones,
etiquetas y elementos definidos por el usuario. Los primeros seis caracteres deben ser significativos (distinguirse de otro similar) y mximo puede tener hasta 31 caracteres. El primer carcter debe de ser una letra o subguin (_). Posteriormente pueden ser letras, nmeros, signos de subrayado. Existe diferencia entre maysculas y minsculas.
IDENTIFICADORES
No pueden emplearse palabras reservadas como
identificadores. No pueden emplearse nombres de funciones que ya existan en el programa o en la librera de funciones de C. No puede llamarse main.
EJEMPLOS DE IDETIFICADORES
Vlidos:
camiones
No vlidos:
numero a1 _sueldo
1abc
Nota:
nombre?
suel-bas
Maysculas para definir constantes. PI = 3.141516. Los identificadores deben referir al contenido que manejan.
32 PALABRAS RESERVADAS
char int float double void if else do default break continue goto return auto extern register
long
short signed unsigned
while
for switch case
struct
union enum typedef
const
static volatile sizeof
VARIABLES
Cuando usamos un programa es muy importante manejar datos. En C podemos almacenar los datos en variables. El contenido de las variables se puede ver o cambiar en cualquier
momento. Estas variables pueden ser de distintos tipos dependiendo del tipo de dato que queramos entrar. No es lo mismo guardar un nombre que un nmero. Para poder usar una variable primero hay que declararla (definirla) Por ltimo es interesante sealar que el C distingue entre maysculas y minsculas. Por lo tanto: seran tres variables distintas. Nombre nombre NOMBRE
VARIABLES
Una variable es una localidad de memoria cuyo valor
puede ser cambiado durante la ejecucin del programa. Todas las variables deben de ser declaradas para se utilizadas. <tipo de dato> espacio(s) <identificador>; Ejemplo:
int a; float area, radio, volumen;
DECLARACIN DE VARIABLES
Ejemplos
unsigned int anio_nacimiento, numero_socios; float importe, total_compra; double distancia_sol, peso; char letra, digito ;
2 bytes
de -32768 a 32767
char
caracteres nums. reales en coma flotante de simple precisin nums. reales en coma flotante de doble precisin (ms cifras significativas y posibilidad de mayor exponente)
1 byte
float
4 bytes
double
8 bytes
de ~2.2E-308 a ~1.7E+308
Tipo de datos
Intervalo tpico de valores de -32.768 a 32.767 de -2.147.483.647 a +2.147.483.648 de 0 a 65535 de 0 a 4.294.967.295 de 0 a 255
short int long int unsigned int unsigned long int unsigned char
enteros
en
son
llamados
como parmetro.
Su sintaxis es:
sizeof( nombre_de_tipo ) sizeof expresin
Ejemplo:
main() { printf( El tamao de short es %d bytes\n, sizeof(short) ); }
CONSTANTES
C soporta las constantes de tipo cadena que se encierran entre comillas dobles. Las constantes de tipo carcter se encierran entre comillas simples (apstrofos). Las cadenas son simplemente vectores de caracteres, se tratarn ms adelante. Algunos caracteres son imposibles de introducir desde el teclado. C utiliza las constantes de carcter especiales de barra invertida que equivale a un carcter nico.
CONSTANTES
Cdigo
\n \t \v \b \ \r \ \f
Significado
nueva lnea tabulador horizontal tabulador vertical retroceso apstrofo retorno de carro comillas salto de pgina
\0
\a \ooo \xhh \\
carcter nulo
alarma constante octal (ooo = valor octal) constante hexadecimal (hh = valor hexadecimal) barra atrs
EJEMPLOS DE CONSTANTES
Tipo de dato char int long int Ejemplos a \n 9 974 21000 -345 20000L -15000L
short int
unsigned int
-100 120
20000U 50000U
float
double
475.231F 9.87e2
987.654 -0.00345
EJEMPLOS DE CONSTANTES
Constantes de carcter. Ej. a, 0, \0x5, \0, \n, \t, $, \\, NULL Constantes enteras. Ej. 5, +5, -5, \05, \0x5, 5L, 5U, 5lu, etc. Constantes reales. Ej. 0.5f, 0.5, 5e-01f, 5.0e-01, (float)5, etc. Constantes de texto (Cadenas o Strings) Esto es una cadena
DECLARACIN DE CONSTANTES
Se utiliza para asignar un identificador a una constante. #define PI 3.1416 #define NCOLS 20
El pre-procesador de C, sustituye la ocurrencia de PI por
el valor 3.1416 en todo el programa antes de efectuar la compilacin, del mismo modo se sustituye NCOLS por 20.
CONVENCIONES
Empezar los nombres de funciones y de variables con
una letra minscula. Las constantes escritas con #define van con maysculas como #define PI 3.1416 Las palabras intermedias comienzan con maysculas.
sumaMatrices
DECLARACIN DE CONSTANTES
#include <stdio.h> #include <conio.h> #define PI 3.1415 /* ejemplo de manejo de constantes */ const int valor=12; int main () { //valor=23; printf("VISUALIZA CONSTANTE \n\n"); printf(" El valor de PI=%f\n",PI); printf("El valor de constante = %d",valor); getch(); }
printf
printf(<cadena_formato>,<item1>,<item2>, );
cadena_formato
es una tira de caracteres que contiene aquellos que se han de imprimir tal como aparecen en el entrecomillado y/o los especificadores de formato (% ).
item1, item2,..
son las distintas variables, constantes o expresiones, cuyo valor se quiere imprimir. No tienen que aparecer obligatoriamente. De este modo, la funcin printf() describe la manera en que han de imprimirse los items en caso de que existan. Debe aparecer una especificacin de conversin por cada item.
printf
Octal sin signo Cadenas de caracteres Enteros decimales sin signo Hexadecimales sin signo (min.) Hexadecimales sin signo (may.) Puntero Argumento asociado es un ptro. Imprime smbolo %
printf
Modificadores Son apndices que se agregan a los especificadores de conversin bsicos para modificar la salida. Se colocan entre el smbolo % y el carcter que define el tipo de conversin:
X
Anchura mnima del campo; si no es suficiente se usa
uno mayor.
.Y
Nmero de decimales o mximo nmero de caracteres a
printf
Consejos.
Para imprimir columnas de datos utilizar campos de
anchura fija lo suficientemente grandes. Cuando un nmero deba aparecer dentro de una frase conviene usar un campo igual o menor que el esperado que eviten blancos innecesarios.
06/04/2014 12:04 Administracin de Sistemas Informticos
EJEMPLO: printf
printf(Ingrese el dato); printf(Ingrese el dato\n); printf(\n); printf(el resultado es %f y %d, y,j); printf(el resultado es %5.3f y %2d, y,j); printf(el resultado es %2c y %d ,c);
scanf
Permite leer todos los tipos de datos predefinidos y convierte los nmeros automticamente al formato interno apropiado. El prototipo de la funcin scanf() se encuentra en stdio.h.
scanf(<cadena-formato>, <lista-argumentos>);
La cadena-formato determina cmo se deben leer los valores y cmo se almacenan en la variables apuntadas por los argumentos de la lista.
scanf
La funcin scanf() devuelve el nmero de campos que constituyen la entrada. Especificadores de formato.
Van precedidos por el signo % e indican el tipo de dato
que se va a leer. Se asocian de izquierda a derecha con los argumentos de la lista de argumentos.
scanf
scanf
Para un nmero decimal %d o %i . Para un entero sin signo %u. Para un nmero en coma flotante %e, %f o %g. Para enteros en octal y hexadecimal %o y %x. La funcin scanf() detiene la lectura de un nmero cuando encuentra un carcter no numrico. Ejemplo: int aux; float aux1; Scanf(%d %f, &aux,&aux1);
Se
Cuando se leen otros tipos de datos, los espacios en blanco, tabuladores y caracteres de nueva lnea
son separadores de campo. Cuando se lee un nico carcter, los caracteres de espacio en blanco se leen como cualquier otro carcter.
cout<<variable1<<variable2<<...<<variablen;
No olvidemos que las cadenas de texto son variables y se ponen entre " "
(comillas dobles).
cin>>variable1>>...>>variablen;
< iostream.h>
del flujo cin (a la izquierda del operador) y las almacena en las variables indicadas a la derecha). Se encuentran en : iostream.h
#include <stdio.h> #include <conio.h> #include <iostream.h> /* ejemplo de manejo de cadenas */ char cadena[]= "esto es una prueba"; int main () { printf("-%s-\n", cadena); printf("-%10s-\n", cadena); printf("-%10.5s-\n", cadena); printf("-%-10.5s-\n", cadena); cout <<cadena <<"\n"; getchar(); }
#include <stdio.h> #include <conio.h> /* ejemplo de manejo de cadenas */ char cadena[20]; int main () { printf("INGRESE UNA CADENA = "); scanf(%s,cadena); printf(%s,cadena); getch(); }
#include <stdio.h> #include <conio.h> /* ejemplo de manejo de cadenas */ char cadena[20]; int main () { printf("INGRESE UNA CADENA = "); gets(cadena); puts(cadena); getch(); }
cambiarse el valor volatile: le indica al compilador que su contenido puede variar mas all del flujo del programa (no son optimizables)
ENUMERADOS
Enumeracin: es una lista de valores enteros constantes.
enum dia {LUNES=1, MARTES=2, ...DOMINGO=7} dia k; dia=LUNES; dia=3;
CAPITULO II
OPERADORES Y EXPRESIONES
OPERADORES ARITMTICOS
Operador * / Nombre Multiplicacin Division definicion Multiplica x por y Divide x por y
% + ++ -+
Resto de x dividido y Suma x mas y Resta y de x ++X X++ --X X-Multiplica x por -1
OPERADORES LGICOS
Operador > >= < <= == != Ejemplo x>y x >= y x<y x <= y x == y x != y Definicin 1 si x es mayor que y, en caso contrario es 0 1 si x es mayor o igual a y, en caso contrario es 0 1 si x es menor que y, en caso contrario es 0 1 si x es menor o igual a y, en caso contrario es 0 1 si x es igual que y, en caso contrario es 0 1 si x no es igual que y, en caso contrario es 0
OPERADORES LGICOS
! && || !x x && y x || y 1 si x es 0, en caso contrario es 0 0 si x o y es 0, en caso contrario 1 0 si x e y son 0, en caso contrario 1
MANEJO DE OPERADORES
#include <stdio.h> #include <conio.h> #define PI 3.1415 /* objetivo:ejemplo de manejo de operaores en expresiones fehca: 04-04-2010 */ enum dias {LUNES=1, MARTES,MIERCOLES,JUEVES,VIERNES,SABADO,DOMINGO}; enum dias dia=LUNES; main () { printf("VISUALIZA RESULTADO DE EXPRESIONES\n\n"); printf("El valor de LUNES>MARTES%d\n",LUNES>MARTES); printf("El valor de DIA<MARTES%d\n",dia<MARTES); printf("El valor de !(5<=6)= %d\n",!(5<=6)); printf("El valor de (1<=2)||(3==4) = %d\n",(1<=2)||(3==4)); getch(); }
este tipo de variable es global y se puede utilizar en cualquier parte del programa.
Dentro de las funciones; estas variables se denominan
del programa.
Especifica la forma en que se deben almacenar las
ALMACENAMIENTO : EXTERN
El lenguaje permite que se enlacen distintos mdulos de
de
haber
sido
compilados
forma de indicar cules son las variables globales de un programa para que exista una sola copia de las mismas.
La solucin es el especificador extern, que indica que las
ALMACENAMIENTO STATIC
Cuando se define como static una variable interna se genera
almacenamiento permanente para ella de tal forma que mantiene su valor entre ejecuciones sucesivas del bloque en que est definida, y su mbito se limita a este bloque.
Cuando se define como static una variable externa se genera
almacenamiento permanente para ella y su mbito se limita al fichero en que est definida.
ALMACENAMIENTO STATIC
#include <stdio.h> #include <conio.h> /* objetivo:prueba tipos de almacenamientos fehca: 04-04-2010 extern int j=12; int prueba () { static int j=20; printf("El valor de funcion j=%d\n",j); j++; return 0; } main () { printf("PRUEBA DE TIPOS DE ALMACENAMIENTO\n\n"); printf("El valor del programa j=%d\n",j); prueba(); prueba(); printf("El valor del programa j=%d\n",j); getch(); } */
ALMACENAMIENTO AUTO
Las variables (locales) automticas se crean cada vez
que se entra en el bloque en el que han sido definidas y desaparecen cuando se sale de l
No conservan su valor de una ejecucin del bloque a la siguiente, y slo son accesibles en el interior del bloque en el que se definen. Una variable por defecto se toma por auto.
ALMACENAMIENTO AUTO
#include <stdio.h> #include <conio.h> /* objetivo:prueba tipos de almacenamientos int j=12; fehca: 04-04-2010 */
int prueba () { auto int j=20; printf("El valor de funcion j=%d\n",j); j++; return 0; } main () { printf("PRUEBA DE TIPOS DE ALMACENAMIENTO\n\n"); printf("El valor del programa j=%d\n",j); prueba(); prueba(); printf("El valor del programa j=%d\n",j); getch(); }
ALMACENAMIENTO REGISTER
Cuando a una variable se aade el especificador register se indica al compilador que la almacene en algn registro de la CPU. El especificador register slo se puede aplicar a variables automticas, o a los parmetros formales
de una funcin.
Cuando las variables declaradas como register no se pueden almacenar en registros de la CPU se toman por auto y se almacenan en memoria. Dado que el acceso a variables de este tipo es muy rpido son ideales para el control de bucles
GENERALIDADES
Las variables estticas y externas se inicializan una
inicializan cada vez que se ejecuta el bloque donde estn definidas. Si la inicializacin no es explcita, se inicializan con valores indefinidos (basura)
EXPRESIONES CONDICIONALES
expresin1 ? expresin2 : expresin3
Se evala expresin1 y si es distinta de 0 (true) el resultado de la expresin condicional es expresin2. Si el resultado de expresin1 es 0 (false) el resultado es expresin3.
Se asigna al identificador de la izquierda el valor de la expresin condicional.
min = ( f < g ) ? f : g;
PRECEDENCIA DE OPERADORES
Precedencia
( ) [ ] -> . - ! ++ -- (tipo) & sizeof * * / % + -
PRECEDENCIA DE OPERADORES
Precedencia
^ (or exclusiva a nivel de bits) | (or a nivel de bits) && || ? : (operador condicional) = += -= *= /= %= >>= <<= &= ^= |= ,
CONVERSIONES DE TIPOS
En
cualquier operacin en que se mezclan operandos de diferentes tipos se produce una conversin del tipo inferior al tipo superior antes de efectuarse la operacin, siendo este ltimo el tipo del resultado.
El rango o categora de tipos de mayor a menor es: double, float , long, int, short, char En una sentencia de asignacin, el resultado final de
operadores unarios.
Ejemplo:
(int) 4.5/6.4
(float) 5/4
conlleva una promocin o prdida de rango del valor asignado, segn el tipo de la variable a la que se asigna.
La promocin suele ser inocente, suele pasar inadvertida.
La prdida de rango puede provocar autnticas catstrofes
CONVERSIN DE TIPOS 1
Para Obtener
char char char char
Desde
unsigned char short int int long int
Observaciones
Si el valor > 127, el resultado es negativo Se pierden los 8 bits ms significativos Se pierden los 8 bits ms significativos Se pierden los 24 bits ms significativos
short int
int
long int
float
float
double
CONVERSIONES DE TIPOS 2
Para Obtener Desde Valor Resultado
unsigned unsigned
int int long long unsigned unsigned
short short
unsigned unsigned unsigned unsigned long long
positivo negativo
FUNCIONES DE BIBLIOTECA 1
FUNCIONES DE BIBLIOTECA 2
FUNCIONES DE BIBLIOTECA 3
FUNCIONES DE BIBLIOTECA 4
FUNCIONES DE BIBLIOTECA 5
FUNCIONES DE BIBLIOTECA 6
EJERCICIO 1: DETERMINE EL VALOR RESULTANTE DE CADA UNA DE LAS SIGUIENTES EXPRESIONES ARITMTICAS:
a) 2+3+45/23 b) 24+12*5/6 c) 16/.5-12 d) 45.8/3 e) 16+ int(34) f) 3.0+6/8*2-4 g) 12%int(2*A/2) h) 8+a-34/2
a) = 6 b) = 34 c) = 20.0 d) = 15.266667 e) = 50 f) = -1.0 g) = 12 h) = 88
EJERCICIO 2:CONSIDERANDO LAS VARIABLES a=12, b=4.0 Y c=2 OBTENGA EL VALOR QUE GENERA CADA UNA DE LAS SIGUIENTES EXPRESIONES ARITMTICAS:
a) ++a+--b b) -a+--c c) a<12 && c>1.5 d) c!=45 || b/3 >= 2.5 e) 2*a+(a==12)*c f) !(48!=a*int(12/3)) g) c*sqrt(int(b)/2) h) 5*c!=20/a==b/2 >3/.5
= 16.0 = 37 =0 =1 = 73 =1 = 69.296 =0
EJERCICIO 2:DETERMINE EL RESULTADO DE LAS SIGUIENTES EXPRESIONES QUE COMBINAN FUNCIONES DE BIBLIOTECA:
a) abs(45.5)- abs(-45.7) b) sqrt(4/78.9/4) c) isdigito(c) d) pow(34%4, 45/8-4) e) floor((4.9*5)/45%13) f) toascii(65+5/4) g) ceil(abs(8-12.16)+7%2) h) exp(short(6*(4%5)/9))
SWITCH
WHILE DO WHILE
FOR
BREAK Y CONTINUE GOTO Y ETIQUETA
IF ELSE
if ( Condicin) sentencia V; else sentencia F;
IF ELSE
if ( Condicin) sentencia V;
IF ELSE
if (expresin) { sentencia V1; sentenciaV2; } else { sentencia F1; sentencia F2; }
IF ELSE
if (expresin) { sentencia V1; sentenciaV2; }
SWITCH
switch(expresin) { case <const1>: { sentencias; break; } case <cten>: { sentencias; break; }
WHILE
while (condicin) { Bloque (modifica condicin) }
DO WHILE
do {
Bloque (modifica condicin)
} while (condicin);
FOR
For (exp1;expr2;exp3) { Bloque }
exp1 : Expresin que sirve para la Inicializacin de variables. exp2 : Es la expresin que se ha de cumplir para ejecutar las iteraciones. exp3 : Sirve para modificar las variables contadoras de iteraciones
do { cout<<"\nINGRESE EL NUMERO (N >0) ="; cin>>n; } while(n<0); while ( n>0) { digito=n%10; numero=(numero*potencia+digito); n=n/10; } cout<<" EL NUMERO INVERTIDO ES= " << numero; cout<<"\nREPETIR CALCULO (S/N)"; continuar=toupper(getch()); } }
EJECUTANDO
EJEMPLO SWITCH
#include <stdio.h> #include <ctype.h> #include <string.h> /* Objetivo: ESCRIBIR EL DIA DE LA SEMANA MANEJO DE SWITCH */ char continuar='S'; char pdia[13], orden[]=" "; int dia; main() { printf("ESCRIBE EL DIA DE LA SEMANA \n\n"); while (toupper(continuar)=='S') { printf("INGRESE EL NUMERO DEL DA (1<=X<=7) : "); scanf("%d",&dia);
switch (dia) { case 1: { strcpy(pdia," ES LUNES"); strcpy(orden,"er."); break; } case 2: { strcpy(pdia,"ES MARTES"); strcpy(orden,"do."); break; }
case 3: { strcpy(pdia,"ES MIERCOLES"); strcpy(orden,"er."); break; } case 4: { strcpy(pdia,"ES JUEVES"); strcpy(orden,"to."); break; } case 5: { strcpy(pdia,"ES VIERNES"); strcpy(orden,"to."); break; } case 6: { strcpy(pdia,"ES SABADO"); strcpy(orden,"to."); break; } case 7: {strcpy(pdia,"ES DOMINGO");strcpy(orden,"mo."); break; } default: { strcpy(pdia,"NO !!EXISTE!!"); break; } } printf("\nEL %d%s DIA DE LA SEMANA %s",dia,orden,pdia); printf("\n\nDESEA INGRESAR NUEVOS DATOS (S/N) ? "); scanf(" %c",&continuar); strcpy(orden," "); }}
EJECUTANDO
EJEMPLO SWITCH
. int esvocal; char letra; cin >> letra; switch(letra) { case 'a': case 'e': case 'i': case 'o': case 'u': esvocal = 1; break; default: esvocal = 0; }
GOTO ETIQUETA
La instruccin goto permite pasar a ejecutar el cdigo a partir de una instruccin cuya etiqueta se indica en el goto. La sintaxis de uso de esta instruccin es: goto <etiqueta>; <etiqueta>:
GOTO ETIQUETA
#include <stdio.h> #include <ctype.h> #include <iostream.h> /* Objetivo: MANEJO GOTO */ int main() { char opcion; arriba: // etiqueta cout << "MANEJO DE ETIQUETAS" << endl; cout << endl; cout << "QUIERES SALIR? (Y/N)"; cin >> opcion; if (opcion == 'N') goto arriba; // salta a etiqueta arriba return 0; }
EJECUTANDO
RECURSIVIDAD
programador puede definir sus propias funciones que realicen determinadas tareas.
<nombre> ( [Parmetros] )
Por ejemplo:
cout << cuadrado(25); cout << cuadrado(X); R = cuadrado(X); // guardar en R el cuadrado de X
TIPOS DE PARMETROS
PARMETRO POR VALOR O COPIA El mismo puede pasarse como una constante literal o como una variable No pueden ser alterados por la funcin que los recibe, es decir, la funcin puede manipular a su antojo al parmetro, pero ningn cambio hecho sobre este se reflejar en el parmetro original.
Ejemplo
x=cuadrado(25); r=cuadrado(x);
IMPLEMENTACIN
#include <stdio.h> #include <conio.h> // Objetivo: MANEJO DE FUNCIONES int numero1,numero2,n; cuadrado(int n) { n*=n; return(n); } main() { printf("MANEJO DE FUNCIONES\n"); printf("INGRESE EL NUMERO:"); scanf("%d",&n); numero1=cuadrado(n); printf("\nEL CUADRADO DE %d ES %d",n,numero1); printf("\nEL CAUDRADO DE %d ES %d",n,cuadrado(n)); printf("\nEL CAUDRADO DE %d ES %d",n,numero2=cuadrado(n)); printf("\nEL CAUDRADO DE 2 ES %d",2+cuadrado(2)); printf("\nEL CAUDRADO DE %d MENOS %d ES %d ",n,n,cuadrado(n)-n); printf("\n\nUNA TECLA PARA CONTINUAR "); getche(); }
EJECUTANDO
PROTOTIPO DE FUNCIONES
#include <stdio.h> #include <conio.h> // Objetivo: MANEJO DE FUNCIONES; int numero1,numero2,n; cuadrado(int n); main() { printf("MANEJO DE FUNCIONES\n"); printf("INGRESE EL NUMERO:"); scanf("%d",&n); numero1=cuadrado(n); printf("\nEL CUADRADO DE %d ES %d",n,numero1); printf("\nEL CAUDRADO DE %d ES %d",n,cuadrado(n)); printf("\nEL CAUDRADO DE %d ES %d",n,numero2=cuadrado(n)); printf("\nEL CAUDRADO DE 2 ES %d",2+cuadrado(2)); printf("\nEL CAUDRADO DE %d MENOS %d ES %d ",n,n,cuadrado(n)-n);
EJECUTANDO
EJEMPLO: ENCUENTRA EL MAYOR DGITO QUE TIENE UN NMERO ENTERO (CON FUNCIONES)
#include <stdio.h> #include <ctype.h> EJECUTANDO // Objetivo: DETERMINAR EL DIGITO MAYOR DE UN NUMERO int numero; char continuar='s'; int digitomayor(int numero) { int digito=0; while (numero>0) { if (digito< numero%10) digito=numero%10; numero=numero/10; } return(digito); } main() { printf("ENCUENTRA DGITO MAYOR DE UN NUMERO USANDO FUNCIONES\n"); while (toupper(continuar)=='S') { printf("INGRESE EL NUMERO: "); scanf("%d",&numero); printf("EL DIGITO MAYOR DE %d ES %d ",numero, digitomayor(numero)); printf("\n\n EJECUTAR NUEVAMENTE (S/N) ? "); scanf(" %c",&continuar); }}
EJEMPLO: ENCUENTRA EL MAYOR DGITO QUE TIENE UN NMERO ENTERO ( CON PROTOTIPO DE FUNCIN)
#include <stdio.h> #include <ctype.h> // Objetivo: DETERMINAR EL DIGITO MAYOR DE UN NUMERO int digitomayor(int numero); int numero; char continuar='s'; main() { printf("ENCUENTRA DGITO MAYOR DE UN NUMERO USANDO FUNCIONES\n"); while (toupper(continuar)=='S') { printf("INGRESE EL NUMERO: "); scanf("%d",&numero); printf("EL DIGITO MAYOR DE %d ES %d ",numero, digitomayor(numero)); printf("\n\n EJECUTAR NUEVAMENTE (S/N) ? "); scanf(" %c",&continuar); }} int digitomayor(int numero) { int digito=0; while (numero>0) { if (digito< numero%10) digito=numero%10; numero=numero/10; } return(digito); }
EJECUTANDO
B=4
1) 2) 3)
MULTIPLIQUE DOS NMEROS ENCUENTRE EL MAYOR DE TRES NMEROS INVIERTA UN NMERO ENTERO X=INVNUM(345) => X= 543 CUENTE CUANTOS DGITOS PARES TIENE UN NMERO P=DIGPAR(7654)=> P= 2
RECURSIVIDAD
Qu es la recursividad?
La recursividad es un concepto fundamental en matemticas y en computacin. Es una alternativa diferente para implementar estructuras de repeticin (ciclos). Los mdulos se hacen llamadas de si mismos. Se puede usar en toda situacin en la cual la solucin pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas.
Funcin recursiva
Las funciones recursivas se componen de:
Caso base: una solucin simple para un caso particular (puede haber ms de un caso base). Ejemplo : Factorial N=5 F= 5*4*3*2*1 caso base: Nmero=1 f=1
Funcin recursiva
Caso recursivo: una solucin que involucra volver a utilizar la funcin original, con parmetros que se acercan ms al caso base. Los pasos que sigue el caso recursivo son los siguientes:
El procedimiento se llama a s mismo El problema se resuelve, resolviendo el mismo problema pero de tamao menor La manera en la cual el tamao del problema disminuye asegura que el caso base eventualmente se alcanzar
Ejemplo: Factorial F= n! n!= n* (n-1)!
CONSIDERACIONES RECURSIVIDAD
Una funcin es recursiva cuando se define en funcin de si
misma.
Deben estar diseadas especialmente para que sean
recursivas, de otro modo podran conducir a bucles infinitos, o a que el programa termine Inadecuadamente.
NO TODOS LOS LENGUAJES DE PROGRAMACIN
CONSIDERACIONES RECURSIVIDAD
Cada vez que se llama a una funcin, se crea un juego de variables locales, de este modo, si la funcin hace una llamada a si misma, se guardan sus variables y parmetros, usando la pila, y la nueva instancia de la funcin trabajar con su propia copia de las variables locales. Cuando esta segunda instancia de la funcin retorna, recupera las variables y los parmetros de la pila y continua la ejecucin en el punto en que haba sido llamada.
Caso simple (su respuesta no requiere clculo)
Var
Var
Var
Var
Var
Var
RECURSIVIDAD: Factorial
n! = n * (n-1) * (n-2) * (n-3) .. * 1 5! = 5 * 4 * 3 * 2 * 1
n! = n* (n-1)! 5! = 5 * 4!
(n-1)!=(n-1)*(n-2)!
(n-2)!=(n-2)*(n-3)! (n-3)!=(n-4)*(n-5)! (n-5)!=1
4! = 4 * 3!
3! = 3 * 2! 2! = 2 * 1! 1! = 1
120 24 6 2 1
RECURSIVIDAD: Factorial
#include <conio.h> #include <iostream.h> // CALCULA EL FACTORIAL DE N double factorial(double n) { double f=1.0; if( n>1) f=n*factorial(n-1); return(f); } main() { double n,f; cout<<"CALCULA EL FACTORIAL" ; cout<<"INGRESE EL NUMERO = " ; cin >>n; f= factorial(n); cout<<"EL FACTORIAL DE "<< n << " ES= " <<f<<endl; getche(); }
EJECUTANDO
EJERCICIOS:
1. FUNCIN RECURSIVA QUE SUME LOS DGITOS DE UN NMERO ENTERO 2. FUNCIN RECURSIVA QUE LEA UNA LNEA DE TEXTO Y ESCRIBA LOS CARACTERES EN ORDEN INVERSO
invierte(cadena); putchar(cadena); }
CAPITULO V: PUNTEROS
DECLARACIN DE PUNTEROS
PASO DE PUNTEROS A UNA FUNCIN PUNTEROS Y FORMACIONES OPERACIONES CON PUNTEROS
Qu es un PUNTERO?
Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la direccin de memoria de otra variable.
No hay que confundir una direccin de memoria con el contenido de esa direccin de memoria. int x = 25;
Direccin 1502 1504 1506 1508 1510 1512
...
...
25
...
...
...
...
DECLARACIN DE PUNTEROS
Deben de ser declarados antes de que puedan ser
utilizados. El tipo de un apuntador lo proporciona implcitamente el tipo de la variable a la que apunta. La sintaxis general de declaracin es: <tipo> * <variable> = <expresin>; Ejemplos: int *ptr, var; float *res=1.0; unsugned int *nosigno; char *mensaje =ESTO ES VERDAD;
MANEJO DE ARREGLOS
ASIGNACIN: <n_variable>[ndice] = <expresin del tipo>; Ejemplo: v[i]=v[i-1]+4; LECTURA: En C el ndice de los elementos va desde 0 hasta N-1, siendo N scanf(%<>, <nvariable>[ndice]); el nmero de componentes (elementos) del vector. cin>> <nvariable>[ndice]; Ejemplo: scanf(%d,v[i++]); cin>>v[i]; ESCRITURA: printf(%<>, <nvariable>[ndice]); cout<< Declaracin: int v[3]; Ejemplo: printf(%d,v[i]); cout<<v[i]<<endl;
main() EJECUTANDO { char continuar='S'; int i,n, vector[80]; printf("ORDENA UN VECTOR EN FORMA ASCENDENTE\n"); do { printf("\n CUANTOS ELEMENTOS TIENE EL VEC?: "); scanf("%d",&n); for (i=0; i<n;i++) { printf("INGRESE EL ELEMENTO V[%d]: ", i); scanf("%d",&vector[i]); }
EJECUTANDO
*(vector+i)=*(vector+j);
printf("ORDENA UN VECTOR EN FORMA ASCENDENTE\n"); do { printf("\n CUANTOS ELEMENTOS TIENE EL VEC ?: "); scanf("%d",&n); vector=(int *) malloc(n*sizeof(int)); for (i=0; i<n;i++) { printf("INGRESE EL ELEMENTO V[%d]: ", i); scanf("%d",(vector+i)); } ordenar(vector, n); visualizar(vector,n); printf("\n\n EJECUTAR NUEVAMENTE(S/N) ? "); scanf(" %c",&continuar); } while(toupper(continuar)=='S'); }
return 0; }
int i,n, vector[12]; printf("LEE VECTOR\n"); do { printf("\n CUANTOS ELEMENTOS TIENE EL VECTOR ?: "); scanf("%d",&n);
} while(toupper(continuar)=='S'); }
EJECUTANDO
VECTORES DE CARACTERES
char cadena[20]; Scanf (%scadena); gets(cadena); cin>>cadena;
EJERCICIOS
REALICE UN PROGRAMA QUE LEA UNA CADENA
DE CARACTERES Y LA ORDENE REALICE UN PROGRAMA QUE LEA N NUMERO DE NOTAS (ENTRE 0 Y 20) LAS ORDENE Y ENCUENTRE CUANTAS VECES SE REPITEN LOS VALORES INGRESADOS EJEMPLO: N= 6 1, 12, 10, 12, 13, 15 => 1,10,12,12,13,15 EL 1 SE REPITE 1 VEZ EL 10 SE REPITE 1 VEZ EL 12 SE REPITE 2 VECES, ETC.
main() {
REGISTROS
// ARREGLOS DE VARIABLES REGISTROS struct libros { char titulo[20]; char autor[15]; char editorial[5]; int anio; float valor; };
REGISTROS EN FUNCIONES
ordenaregistro(struct libros vector[],int n) { int i,j; struct libros aux; for (i=0; i<n;i++) for (j=i; j<n;j++) if (strcmp(vector[i].titulo,vector[j].titulo)>=0) { aux=vector[i]; vector[i]=vector[j]; vector[j]=aux; } return 0; }
UNIONES
#include <stdio.h> #include <conio.h>
DETERMINAR EL MANEJO DE LAS UNIONES EN C
union tiposdedatos
{ int entero; float real; char caracter; char arreglo[15]; };
union tiposdedatos { int entero; float real; char caracter; char arreglo[15]; };
visualizar(prueba);
printf("\n\n PARA CONTINUAR (S)+ <ENTER>"); scanf(" %c", &continuar); }
EJERCICIOS
Realice un programa en c con vectores de registros y mens
permita manejar el inventarios de una ferretera ( (descripcin, stock, stock max, stock min, precio ) Las opciones a desarrollar: Ingresos Egresos Consultas: por elemento stock mx. stock mn cero stock salir
ARCHIVOS
#include <stdio.h> #include <ctype.h> #include <string.h> #include <math.h> #include <conio.h> // Objetivo: MANEJAR NOTAS ARCHIVOS MATERIA struct notas { char nombre[20]; int nota1,nota2,nota3; };