INDICEUNIDAD 1: C++ ELEMENTOS BASICOS1.- INTRODUCCION2.- MODELO DE SOLUCION3.- VARIABLES4.- TIPOS DE DATOS5.- OPERADORES A...
3.- VARIABLES LOCALES Y GLOBALES4.- FUNCIONES5.- ARREGLOS COMO PARAMETROSUNIDAD 5: C++ REGISTROS Y ARCHIVOS SECUENCIALES1....
Programación Lenguaje C++UNIDAD 1: C++ ELEMENTOS BASICOS:IntroducciónLos nuevos sistemas de información son costosos en ti...
información, si es un factor muy importante cuando se pretende construir programas oaplicaciones que deban compartirse o u...
Variables es el nombre de una localidad o dirección interna en la memoria del computadordonde se almacenan los datos, ejem...
Los tipos de datos más comunes en C++ son:TIPO DATO ESPACIO MEMORIA RANGOunsigned char 8 bits 0 a 255char 8 bits -128 a 12...
Como notas importantes a recordar siempre;En problemas de división entre enteros, C++ trunca la parte residual, es decir;<...
Para resolver el problema de raíces, se aprovecha una de las más elementales y conocidade las leyes de exponentes que dice...
Ejemplos:a) // Declaraciónfloat alfa;// Operaciónalfa = float (23)/5;// Pero en estos casos es preferiblealfa=23/5.0;En to...
Ejemplos:2+ 3* 4 = 20(incorrecto)= 14 (correcto)b) si calif1=60 y calif2=80 y si entonces en programa se usapromedio = cal...
Recordar que dentro de este compilador no funciona el ratón o mouse, todas las opcionesse cargan con la tecla ALT y la let...
Reglas para escribir un programa en CPP:a) Comienza con las instrucciones #include y cada una de ellas es una librería dei...
d) Combinación de los tres ejemplos;I. MENSAJE O TEXTO: Printf(“pato”) Printf(”%d”,varentera); Printf(” los datos son %d %...
Para el caso de estos códigos porcientos también es posible agregar lacantidad de entero y decimales que se quiere que se ...
NOTA: DEPENDIENDO DEL SISTEMA OPERATIVO EN OCACIONES UN GETCHAR() NOATRAPA EL CARACTER A LA PRIMERA VEZ, EN ESTE CASO USAR...
PROG2.CPP#include <stdio.h>void main(){//declaracionint var1, var2,var3;char var4[15], var5[15];//captura y observar donde...
Corrida:FORMATO PANTALLA PROGRAMACION C++#include<conio.h> Libreria a usar1. clrscr(); Limpia pantallaESTA INSTRUCCION NO ...
FUNCIONES C++abort() Abort Process and ReturnErrorfarcoreleft() Return Measure ofUnused Memory in Far Heapint86x() Set Seg...
atoi() Convert String to Integer fileno() Get File HandleAssociated with Stream (Macro)isupper() Test for Uppercase setmod...
cgets() Get a Character Stringfrom the Consolefree() Deallocate Memory Block malloc() Allocate Memory Block spawnvpe() Exe...
creatnew() Create a New File getenv() Get a Value from theEnvironment Tableopen() Open a File strcspn() Scan One String fo...
execle() Execute Program Using:Arg List, Environmentgetverify() Get Verify State putch() Write a Character to theConsolest...
_tolower() Convert c to Lowercasetoupper() Convert c to Uppercase, If Appropriate_toupper() Convert c to Uppercasetzset() ...
OPERADORES C++Operador Función( ) llamada a función[ ] subíndice de un arreglo. Punto. Acceso a miembro de una estructura....
UNIDAD 2: C++ INSTRUCCIONES DE CONTROL DEPROGRAMAINTRODUCCIONInstrucciones de control de programa permiten alterar la secu...
Como se observa son cuatro partes bien diferenciadas entre sí;La propia instrucción condicional en siLa condiciónEl grupo ...
NOTA IMPORTANTE, Para el caso de objetos de tipo string, los operadoresmencionados arriba funcionan, es decir es válido us...
CORRIDA:CONDICIONES COMPUESTASEn muchas ocasiones es necesario presentar más de una condición para su evaluación alcomputa...
Tabla de verdad con “y”1RA COND SIMPLE 2DA COND SIMPLEEVALUACIONC FC CC FC FF FF FC FC CC FC FF FF FC FLa evaluación final...
Construir una tabla de verdad para una condición compuesta de tres o más condicionessimples, es también tarea sencilla, so...
INSTRUCCION SWITCHTambién existen ocasiones o programas donde se exige evaluar muchas condiciones a lavez, en estos casos ...
{case a: gotoxy(30,5);puts("aguila");break;case b: case B: gotoxy(30,5);puts("baca");break;case c: gotoxy(30,5);puts("caba...
Su formato general es:for (inicialización; condición; incremento){ instrucción(es); };Ejemplo:for(x=1;x⇐10;x=x+1){ puts(” ...
Corrida:Casos Particulares del ciclo for;1. El ciclo comienza en uno y se incrementa de uno en uno este es el caso masgene...
Un error muy común con el while, es poner un punto y coma (;) después de la(condición) ejemplo while(condicion); ←-esto es...
A este ciclo también se le conoce también como ciclo de condición de entrada o pruebapor arriba porque este ciclo evalúa p...
Corrida progOtra diferencia básica con el ciclo while es que, aunque la condición sea falsa desde unprincipio el cuerpo de...
UNIDAD 3: C++ ARREGLOSINTRODUCCION ARREGLOSUno de los problemas más comunes en los diversos sistemas de información es elt...
ARREGLOSEn programación tradicional siempre se manejan dos tipos de arreglos los arreglos tipolistas, vectores o unidimens...
Ejemplos;int edades[12];float sueldos[10];Char carreras[10][30];Para crear e inicializar una lista usar el siguiente forma...
gotoxy(5, r*2+10); printf("EDAD:=%d",edad[r]);};getchar();}Corrida:Captura este procedimiento es similar para despliegue.S...
Para casos como estos se deberán usar ciertas funciones de manipulación de stringsque provee el lenguaje C, estas funcione...
Se deberá usar un arreglo bidimensional de chars donde el primer subíndicereferenciara la cantidad de strings que tendrá e...
{ if(lista[renglon]>lista[renglon+1]){ temp=lista[renglon];lista[renglon]=lista[renglon+1];lista[renglon+1]=temp; };renglo...
Para efectuar procesos tales como operaciones despliegue con todos los elementos de latabla se deberán usar 2 ciclos un fo...
Corrida:INICIALIZACION DE ARREGLOSSe permite la inicialización de arreglos en C++ de acuerdo al siguiente formato:static t...
UNIDAD 4: C++ PROCEDIMIENTOS Y FUNCIONESPROCEDIMIENTOSUn camino para dividir un gran programa en partes más pequeñas es el...
void proc1(){// area de declaracion de variables y captura de datosint base1,altura; float area;//area de capturaprintf("d...
Donde lista de parámetros es una o más variables separadas por coma, como lo muestrael programa ejemplo.prog12.cpp#include...
Y no olvidar declarar el procedimiento antes del main() incluyendo sus parámetros comolo muestra el ejemplo.Recordar tambi...
En programación en serio no es acostumbrado usar muchas variables globales por variasrazones, una de ellas es que variable...
FUNCIONESUna función es un módulo de un programa separado del cuerpo principal, que realiza unatarea específica y que pued...
//area de capturaprintf(“dame base: ”);scanf(”%d”,&base);printf(“dame altura: ”);scanf(”%d”,&altura);//llamando o invocand...
ARREGLOS COMO PARAMETROSPara pasar un arreglo completo como parámetro a un procedimiento a una función solo semanda el nom...
Corrida:Es de recordar que los cambios que le hagan al arreglo dentro de la función se reflejaranen el arreglo original, e...
UNIDAD 5: C++ REGISTROS Y ARCHIVOS SECUENCIALESINTRODUCCIONAntes de empezar a programar en serio se estudian en esta UNIDA...
Para indicar a “C” durante cualquier proceso que la variable a utilizar es un campo de unaestructura se utiliza el siguien...
ARCHIVOSSi bien es cierto que ya se pueden manejar gran cantidad de datos del mismo y diferentetipo al mismo tiempo el pro...
2. Datos que pueden ser leídos o grabados como una string se usaran funcionesanálogas a gets y puts.3. Datos que se captur...
4. Altas en archivo.- En este proceso se captura una estructura en memoria con susdatos pertinentes y después se graba la ...
CORRIDA:Recordar que la estructura que se usó para crear el archivo se deberá usar siempre y conel mismo orden cuando se a...
GRABACION Y LECTURA DISCOComo ya se mencionó grabar y lectura de registros o estructuras a renglones o registrosde archivo...
Corrida:La primera observación es que se está usando el “fopen()” en modo “at+” en lugar demodo “w” pero es para matar dos...
LECTURA DE REGISTROS Prog19.CPP<code>#include <stdio.h>#include <conio.h>#include <string.h>struct {int matricula;char nom...
Corrida:Las únicas notas son: En fopen() se usó modo “a+”. En lugar de fwrite(), se usafread() con los mismos cuatro parám...
// usar fseek() para posicionarse al principio de registro//buscadofseek (archdisco, (long)(claveb)* sizeof(animalito), 0 ...
RECORDAR QUE ES MUY IMPORTANTE QUE LAS CLAVES GRABADAS EN UN ARCHIVODIRECTO TENGAN LA SECUENCIA 0,1,2,3,4,5…..NFILTROS O C...
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Manual programación lenguaje c
Próxima SlideShare
Cargando en…5
×

Manual programación lenguaje c

634 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
634
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
15
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Manual programación lenguaje c

  1. 1. INDICEUNIDAD 1: C++ ELEMENTOS BASICOS1.- INTRODUCCION2.- MODELO DE SOLUCION3.- VARIABLES4.- TIPOS DE DATOS5.- OPERADORES ARITMETICOS6.- OPERADOR CAST7.- JERARQUIA DE OPERACIONES8.- COMPILADOR-EDITOR C C++9.- APLICACIONES10.- OTRAS FUNCIONES DE ENTRADA/SALIDA11.- FORMATO DE PANTALLAAPENDICE A) PALABRAS RESERVADAS DE C++APENDICE B) FUNCIONES C++UNIDAD 2: C++ INSTRUCCIONES DE CONTROL DE PROGRAMA1.- INTRODUCCION2.- INSTRUCCIONES CONDICIONALES3.- CONDICIONES SIMPLES4.- INSTRUCCION IF5.- CONDICIONES COMPUESTAS6.- INSTRUCCION SWITCH()7.- CICLO FOR8.- CICLO WHILE9.- CICLO DO-WHILE10.- CONCLUSIONES ACERCA DE CICLOSUNIDAD 3: C++ ARREGLOS1.- INTRODUCCION2.- ARREGLOS EN C++3.- ARREGLOS TIPO LISTAS(1)3.- LISTAS(2)4.- STRING5.- LISTAS DE STRING6.- SORTEOS U ORDENAMIENTOS7.- ARREGLOS TIPO TABLA8.- INICIALIZACION DE ARREGLOSUNIDAD 4: C++ PROCEDIMIENTOS Y FUNCIONES1.- PROCEDIMIENTOS2.- PARAMETROS
  2. 2. 3.- VARIABLES LOCALES Y GLOBALES4.- FUNCIONES5.- ARREGLOS COMO PARAMETROSUNIDAD 5: C++ REGISTROS Y ARCHIVOS SECUENCIALES1.- INTRODUCCION2.- ESTRUCTURAS O REGISTROS3.- ARCHIVOS (1)4.- ARCHIVOS (2)5.- CREACION ARCHIVOS6.- GRABACION Y LECTURA DISCO7.- BUSQUEDA EN ARCHIVO DIRECTO8.- FILTROS o CONDICIONES9.- BAJA o ELIMINACION10.- OPERACIONES CON CAMPOS11.- EDICION o MODIFICACION REGISTROSUNIDAD 6: REGISTROS Y ARCHIVOS DIRECTOS1.- INTRODUCCION ARCHIVOS DIRECTOS2- CREACION ARCHIVOS3.- GRABACION Y LECTURA DISCO4.- BUSQUEDA EN ARCHIVO DIRECTO5.- FILTROS o CONDICIONES6.- BAJA o ELIMINACION7.- OPERACIONES CON CAMPOS8.- EDICION o MODIFICACION REGISTROSUNIDAD 7.- VARIABLES APUNTADORES1.- INTRODUCCION2.- APUNTADORES A ESCALARES3.- APUNTADORES A STRINGS4.- APUNTADORES A ARREGLOS5.- APUNTADORES A TABLASUNIDAD 8.- PROGRAMACION ORIENTADA A OBJETOS1.- INTRODUCCION
  3. 3. Programación Lenguaje C++UNIDAD 1: C++ ELEMENTOS BASICOS:IntroducciónLos nuevos sistemas de información son costosos en tiempos y recursos, la soluciónmoderna de sistemas de información exigen nuevas herramientas y metodologías pararesolver rápida, económica y eficiente los problemas de información planteados por lasorganizaciones.Aún más el pleno potencial del hardware no es aprovechado plenamente y existe unconsiderable retraso con el software y sus aplicaciones, generando lo que se conoce como“crisis del software”.En programación tradicional, modular o estructurada un programa describe una serie depasos a ser realizados para la solución de un problema, es decir es un algoritmo, enparticular este modelo de programación se usó mucho para generar programas oaplicaciones en ambientes pcs y con consolas, es decir el programa se ejecutaba en unaconsola de msdos por ejemplo, y el programa o aplicación se tenía que portar físicamentea otras pcs, al final de su ciclo de vida de este modelo se había mejorado y ya era posibleque se ejecutara en alguna ventana-consola de ambientes windows, con mejor interfacecomo fonts, colores, background, etc.En programación orientada a objetos ( OOP ) un programa es considerado como unsistema de objetos interactuando entre sí, ambientes de desarrollo visuales facilitan aúnmás la construcción de programas y solución de problemas, porque permiten abstraer alingeniero de software de todo el GUI (interface gráfica) del problema, que constituye másdel 60% del código normal de un programa, en general este ambiente permitió unamejora en la interface del programa con el usuario de la aplicación ya que en este casosolo se manejaban formas o ventanas llenas de componentes o controles especializadosen alguna tarea específica.A este modelo de programación o construcción de programas los compiladores modernosse adaptaron rápidamente y tenemos aplicaciones fantásticas, en donde alguna forma oventana está llena de controles visibles e invisibles que realizan muchas tareas dondeademás de los componentes o controles que proporciona directamente el compiladorcuando se instala, existen miles de controles o componentes extras en muchas partes delmundo realizados por programadores talentosos y que enriquecen el contenido denuestros programas y aplicaciones visuales.Al principio estas aplicaciones, se construían pensando en que se ejecutaban en una pccon ambiente grafico o en una serie de pcs próximas físicamente sin embargo el rápidoavance de las redes dentro de las empresas u organizaciones conllevan a que losfabricantes de compiladores cada vez incluyeran mas y mas controles o componentes quepermitan ejecutar el programa o aplicación simultáneamente en una red de pcs.Sin embargo cuando se habla de redes actuales estamos hablando de la red de redes(internet) y si en redes internas o intranets el retraso en el tiempo de comunicación entresus pcs internas y la cantidad de información a trasmitir entre las mismas no es algo muyimportante o inmanejable, este problema de tiempo de trasmisión y cantidad de
  4. 4. información, si es un factor muy importante cuando se pretende construir programas oaplicaciones que deban compartirse o usarse por muchas pcs conectadas a internet,desgraciadamente como factor externo que es, no está bajo control de la empresa o delprogramador.C o C++, son los compiladores que permiten usar cualquiera de los tres enfoques en lasolución de problemas de información que puedan y deban ser resueltos empleando elcomputador y el lenguaje aunque se repite este curso está enfocado al primer modelo.MODELO DE SOLUCIONEn general un problema de información es posible entenderlo, analizarlo y descomponerloen todos sus componentes o partes que de una u otra manera intervienen tanto en suplanteamiento como en su solución.Una herramienta rápida que nos permite descomponer en partes un problema para susolución, es el llamado modelo de solución, este consiste de una pequeña caja quecontiene los tres elementos más básicos en que se puede descomponer cualquierproblema sencillo de información, estas tres partes son:1. LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver elproblema, estos datos son almacenados internamente en la memoria delcomputador en las llamadas variables de entrada.2. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicasnecesarias para solucionar el problema, generalmente esta parte del modelo esuna formula (o igualdad matemática, ej. X= y + 5).3. LA TERCERA PARTE es el resultado o solución del problema que generalmente seobtiene de la parte de operaciones del modelo y dichos datos están almacenadosen las llamadas variables de salida.En resumen para todo problema sencillo de información es necesario plantearse lassiguientes preguntas:• ¿Qué datos ocupa conocer el computador para resolver el problema y en cualesvariables de entrada se van a almacenar?• ¿Qué procesos u operaciones debe realizar el computador para resolver elproblema planteado?• ¿Qué información o variables de salida se van a desplegar en pantalla pararesponder al problema planteado originalmente?• ¿Cómo nota importante no confundir los términos datos, variables e información;Datos se refiere a información en bruto, no procesada ni catalogada, por ejemplo“Tijuana”, “calle primera # 213”,”15 años”, ” $2,520.00”, etc.?
  5. 5. Variables es el nombre de una localidad o dirección interna en la memoria del computadordonde se almacenan los datos, ejemplo de variables para los casos del inciso anterior,CIUDAD, DIRECCION, EDAD, SUELDO, ETC.Información son datos ya procesados que resuelven un problema planteado.EJEMPLO DE MODELO DE SOLUCIÓNConstruir un modelo de solución que resuelva el problema de calcular el área de untriángulo con la formula área igual a base por altura sobre dos.o Variable(s) de Entrada Proceso u Operación Variable(s) de Salidao BASE AREA= BASE * ALTURA / 2 AREAo ALTURAVARIABLESIdentificadores son conjuntos de letras y/o números que se utilizan para simbolizar todoslos elementos que en un programa, son definibles por el usuario (programador oingeniero de software) del mismo, como son las variables donde se almacenan datos,funciones (pequeños módulos con código), etiquetas, clases, objetos, etc.En C++ un identificador es una palabra compuesta de letras y/o números de hasta 32caracteres significativos, empezando siempre con una letra.Una variable se define como un identificador que se utiliza para almacenar todos los datosgenerados durante la ejecución de un programa.Existen ciertas reglas en cuanto a variables:• Claras y con referencia directa al problema.• No espacios en blanco, ni símbolos extraños en ellas.• Se pueden usar abreviaturas, pero solo de carácter general.• No deben ser palabras reservadas del lenguaje.• Ejemplos de buenas variables:• Nombre, Edad, SdoDiario, IngMensual, Perímetro, Calif1, etc.TIPOS DE DATOSA toda variable que se use en un programa, se le debe asociar (generalmente al principiodel programa) un tipo de dato específico.Un tipo de dato define todo el posible rango de valores que una variable puede tomar almomento de ejecución del programa y a lo largo de toda la vida útil del propio programa.
  6. 6. Los tipos de datos más comunes en C++ son:TIPO DATO ESPACIO MEMORIA RANGOunsigned char 8 bits 0 a 255char 8 bits -128 a 127short int 16 bits -32,768 a 32,767unsigned int 32 bits 0 a 4,294,967,295int 32 bits -2,147,483,648 a 2,147,483,647unsigned long 32 bits 0 a 4,294,967,295enum 16 bits -2,147,483,648 a 2,147,483,647long 32 bits -2,147,483,648 a 2,147,483,647float 32 bits 3.4 x 10-38 a 3.4 x 10+38(6 dec)double 64 bits 1.7 x 10-308 a 1.7*10+308(15 dec)long double 80 bits 3.4 x 10-4932 a 1.1 x 10+4932void sin valorPara manejar cadenas de caracteres (strings), se deberá usar un arreglo de caracterescon el siguiente formato.Char nombre_string[cant de elementos];Ejemplo:• Char nombre[30];• Char ciudad[20];Para cargar con un dato se usa el siguiente codigo;strcpy(carrera,”ing sistemas”);Variables arreglos de caracteres, tienen que usar sus funciones de manipulación quevienen en la libreria string.h, algunas de estas funciones son: strcpy(), strcat(),strcmp(), strlen(), etc.OPERADORES ARITMETICOSUn operador es un símbolo especial que indica al compilador que debe efectuar unaoperación matemática o lógica.C++ reconoce los siguientes operadores aritméticos:Operador Operación+ SUMA- RESTA* MULTIPLICACION/ DIVISION% MODULO O RESIDUO
  7. 7. Como notas importantes a recordar siempre;En problemas de división entre enteros, C++ trunca la parte residual, es decir;</code> área de declaración de variables float a; área de operacionesa = 10 / 4;área de despliegue de resultados desplegar a; → En pantalla sale ( 2.000000 ) </code>El problema no es el tipo float, sino que por definición de la división entre enteros C++siempre trunca la parte residual, más adelante se indica cómo se resolverá este problema.El operador (%) devuelve el residuo entero de una división entre enteros, ejemplo:<code> área de declaraciónint alfa;área de operaciones alfa = 23 % 4; área de desplieguedesplegar alfa; → El resultado en pantalla es 3Otro ejemplo;alfa = 108 % 10;desplegar alfa; → El resultado en pantalla es 8</code>Para resolver los problemas de potencias y raíces, se usan ciertas instrucciones especialesque proporciona el lenguaje, llamadas funciones matemáticas, en C++ existe toda unalibrería de instrucciones o funciones matemáticas.Recordar que todas las funciones reciben uno o más datos o valores y regresan siempre unresultado, una de estas funciones matemáticas es:#include <math.h>double pow(double base, double exp);Esta función ocupa dos valores o datos (base y exponente) ambos de tipo double, yregresa un resultado también de tipo doublé.Ejemplo;Resolver el problema de calcular 53#include <math.h>// área de declaración de variablesdouble base, exponente, potencia;// área de asignación o carga o inicialización de// variablesbase=5;exponente=3;// área de operacionespotencia =pow( base, exponente);// Desplieguedesplegar potencia; -> El resultado en pantalla es 125.000000000
  8. 8. Para resolver el problema de raíces, se aprovecha una de las más elementales y conocidade las leyes de exponentes que dice:Es decir una raíz cualquiera se puede transformar a una potencia con un exponentefraccionario.Ejemplo:El problema <m> y = 3sqrt{x} </m> esto es equivalente a entoncesusando función powy= 3*pow(x, 0.5);En este ejemplo se está dando por supuesto que no interesa el tipo de dato que requierela función pow() para trabajar correctamenteRESUMEN: En C++ se pueden resolver con la ayuda de estos operadores toda clase deproblemas, ya sean financieros, algebraicos de negocios, contables, etc.OPERADOR CASTSe puede forzar un dato, variable o una expresión a convertirse o cambiarse a un nuevotipo de dato.El operador cast realiza este proceso, es decir convierte datos, variables o expresiones aun nuevo tipo de dato, su formato es:nvotipo (dato , var, exp);Ejemplo:// declaraciónint alfa;// Asignaciónalfa=20;// Cambio de tipofloat (alfa);Ejemplo:int (3.1416);En este ejemplo se está convirtiendo un float a int, recordar que en este caso ya no setendrán los decimales.Como nota importante este operador resuelve los dos problemas pendientes:1. El de la división entre enteros.2. El tipo de dato especifico que requieren las funciones.
  9. 9. Ejemplos:a) // Declaraciónfloat alfa;// Operaciónalfa = float (23)/5;// Pero en estos casos es preferiblealfa=23/5.0;En toda división recordar agregar a uno de los dos valores el (.0), solo que los doselementos sean variables entonces usar el operador cast con una de ellas.b)// Declaracióndouble potencia;// Operaciónpotencia = pow ( double (5), double (3));Como se observa en el ejemplo, se puede usar pow(), directamente con los datos,argumentos o parámetros requeridos , si estos son numéricos, pero transformándolos conel operador cast.Esto también va a permitir evaluar expresiones matemáticas de manera más directa ysencilla, solo recordando usar un pow() por cada potencia y cada raíz de la ecuación,ejemplo:Sea dentro de un programa esto se resuelve con;// área de declaración de variablesdouble y, x;// área de captura de datoscapturar el valor de x;// área de operacionesy = 3 * pow(x, double (3)) - pow(x, (1/3.0)) + 4 * pow(x, double(2));// área de despliegue de resultadosdesplegar x, yJERARQUIA DE OPERACIONESEl problema de no tomar en cuenta la jerarquía de los operadores al plantear y resolveruna operación casi siempre conduce a resultados muchas veces equivocados como estos:
  10. 10. Ejemplos:2+ 3* 4 = 20(incorrecto)= 14 (correcto)b) si calif1=60 y calif2=80 y si entonces en programa se usapromedio = calif1 + calif2/2la pc daría como resultado promedio = 100Recordar siempre, que antes de plantear una formula en un programa se deberá evaluarcontra el siguiente:Orden de operaciones:1. Paréntesis2. Potencias y raíces3. Multiplicaciones y divisiones4. Sumas y restas5. Dos o más de la misma jerarquía u orden, entonces resolver de izquierda a derechaNota: Si se quiere alterar el orden normal de operaciones, entonces usar paréntesis.Tampoco es bueno usar paréntesis de más en una operación, esto solo indica que no seevalúo bien la formula, como en el siguiente ejemplo;En el ejemplo los paréntesis están de más, porque por orden de operaciones,multiplicación y división tienen la misma jerarquía y entonces se resuelven de izquierda aderecha, en otras palabras ni que falten paréntesis ni que sobren paréntesis.COMPILADORPara poder construir programas o aplicaciones se usara el compilador turboc++ que seencuentra en la siguiente dirección de internet: http://community.borland.com/museum/El compilador tiene el nombre de: Antique Software - Turbo C++ versión 1.01Bajarlo, descomprimirlo en un folder o subdirectorio temporal, dentro se encontraran tresfolders llamados disk1, disk2, disk3, copiar el contenido de disk2 y disk3 al folder disk1,luego correr un programa llamado install, esto creara un nuevo folder en el disco durollamado tc, que ya contendrá nuestro compilador a usar.Para correr el compilador y el editor de programas que trae integrado, solo abrir unasesión de msdos prompt en la barra de start de windows y luego navegar al directoriotcbin con la orden:cpp:CD TCBINLuego cargar el compilador con la orden:cpp:TCBINTCDeberá mostrarse la siguiente pantalla con el editor:
  11. 11. Recordar que dentro de este compilador no funciona el ratón o mouse, todas las opcionesse cargan con la tecla ALT y la letra en rojo correspondiente, también se podrán usar lasteclas de flechas del teclado para navegar por las opciones de los menús.APLICACIONESProg1.cpp</code>#include <stdio.h>void main(){//area declaracion variablesint base1, altura; float area;//area captura de datosprintf(“dame base:”);scanf(”%d”,&base1);printf(“dame altura:”);scanf(”%d”,&altura);//area de operacionesarea=base1 * altura / 2.0;//area despliegueprintf(“el area es =%0.2f”,area);getchar();getchar();}</code>
  12. 12. Reglas para escribir un programa en CPP:a) Comienza con las instrucciones #include y cada una de ellas es una librería deinstrucciones especializadas en tareas específicas.b) Todas las palabras reservadas del lenguaje deben ser minúsculas. (main, include,printf, etc.)c) Todo programa comienza con una función llamada void main().d) El cuerpo de instrucciones del programa deberá encerrarse entre llaves.e) Todas las instrucciones ejecutables terminan con punto y coma.f) Los comentarios se ponen encerrados entre /* comentario */g) La declaración de variables ocupa la primera posición.h) Se utiliza una instrucción llamada printf() para desplegar mensajes u otroselementos en el dispositivo de salida estándar (pantalla).i) Se utiliza una instrucción llamada scanf() para capturar datos desde eldispositivo de entrada estándar (teclado).j) Se usa una instrucción getchar(); al final para detener la pantalla hasta que elusuario pulse la tecla “any key” para continuar o el programa responde tan aprisaque no se alcanza a ver y se regresa al editor.k) C es case-sensitive, es decir trata a mayúsculas y minúsculas como caracteresdiferentes. Ya creadas y cargadas las variables normales se efectúan los procesos uoperaciones normales con ellas y al final se construye una página normal html conlos resultados. Este programa se debera crear usando el editor del turboc ygrabarlo como prog1.cpp en el folder de su preferencia, para ejecutarlo usar laopción RUN del propio editor.Corrida:INSTRUCCION PRINTF() Es una de las más poderosas herramientas de desplieguede datos que posee el lenguaje. Su formato completo es: Printf (“string decontrol”, lista de variables); Donde string de control puede ser:a) Mensaje o textob) Secuencias de escapec) Codigos de formato
  13. 13. d) Combinación de los tres ejemplos;I. MENSAJE O TEXTO: Printf(“pato”) Printf(”%d”,varentera); Printf(” los datos son %d %0.f %s”,varent,varfloat,varstring); → ver programa ejemplo.Nota: Se recomienda no más de 70 caracteres.II. SECUENCIAS DE ESCAPE: Estas instrucciones proveen de mecanismosde control para diversas tareas, existe una gran variedad de secuenciasde escape, las más usuales son:n nuevo renglónt tabulador horizontalb backspace o retrocesor carriage returna campanilla” despliega comillas` despliega apóstrofe despliega diagonal inversaa Alarmaf avance de paginav tabulación verticalIII. CODIGOS DE FORMATO: Estos códigos de formatos dentro de lastring de control le indican al compilador que deber sustituir en esaposición el valor de la variable indicada, además se deberá recordar queexiste un código de formato apropiado para cada tipo de datoexistente.IV. CODIGO TIPO DE DATO SALIDA:%d entero enteros con signo%u Unsignedint (enteros sin signo)%f Float y double (parte entera y decimal)%e Float y double (notación exponencial usando eminúscula)%E Float y double (notación exponencial usando Emayúscula)%g ””el compilador decide si usa f o e%G ””el compilador decide si usa f o E%c Char un solo caracter%s variable string conjunto de caracteres
  14. 14. Para el caso de estos códigos porcientos también es posible agregar lacantidad de entero y decimales que se quiere que se despliegue en lasalida con el siguiente formato:%cantentero.cantdecimal caracter apropiadoV. INSTRUCCION SCANF(); Esta instrucción permite que el datoentrado desde el teclado sea capturado y almacenado en la variablecorrespondiente, su formato completo es: scanf(“string decontrol”, lista de variables); los códigos de formato ocódigos %.Observar que a diferencia de printf(), scanf() solopuede llevar los códigos % , dentro de las comillas (” ”). En el casomás sencillo dentro del string de control se pone el porciento con elcaracter apropiado al tipo de dato y en la lista de variables una variableya declarada de ese mismo tipo. Se deberá tener en cuenta siempre losiguiente:a) La cantidad de variables de lista de variables debe ser igual encantidad que los códigos porciento %.b) Todas las variables de tipo numérico dentro de scanf, no deprintf, deberán ser precedidas del signo ampersand (&).EJemplo; scanf(”%d”, &area); –>ver programa ejemplo.c) %s en scanf solo alcanza a capturar de la string hasta elprimer espacio en blanco.d) El formato porciento (%) en scanf y printf para tipos longint sera (%ld).e) El formato porciento (%) para tipos doubles en scanf yprintf es (%lf).OTRAS FUNCIONES DE ENTRADA Y SALIDA (I/O)CAPTURA:Getchar(); Getch(); Getche();Estas tres instrucciones están especializadas en captura de un solo carácter y sustituyen ascanf %c en situaciones especiales.Estas funciones trabajan por igualación, es decir para usarsevarchar=getchar();ejemplo;char vocal;vocal=getchar();
  15. 15. NOTA: DEPENDIENDO DEL SISTEMA OPERATIVO EN OCACIONES UN GETCHAR() NOATRAPA EL CARACTER A LA PRIMERA VEZ, EN ESTE CASO USAR MAS DE UN GETCHAR ENFORMA CONTINUA.En este caso poner más getchar(); después de getchar() hasta que capture elcaracter o también para detener la corrida.A. Getchar es una macro que lee un caracter del teclado y regresa el caracter leído.La diferencia es que getchar y getche devuelven el caracter leído a la pantalla yel getch no devuelve el caracter a la pantalla. Estas instrucciones deberán usarseen las siguientes situaciones:a) Cuando la captura es de un solo caracterb) También para retener pantallas en este caso sin igualdadc) Para evitar los saltos en capturas, cuando se captura un entero y una stringdespués, es este caso es conveniente usar una serie de getchar() para quitar elcaracter de return del teclado, en particular es conveniente usar un getchardespués de un scanf(entero) como lo muestra el ejemplo de abajo prog2.cppB. GETS(); Esta función es la alternativa para captura de strings que tengan espaciosen blanco intermedios cosa que scanf %s no puede hacer.Su formato completo es: gets(variable string);DESPLIEGUE:a) Putch(); Putchar();Estas instruciones despliegan directamente un caracter en el dispositivo de salidastandar.A diferencia de getchar, getch y getche, estas instrucciones si llevan unargumento.Ejemplo;putchar(alfa);putchar(n);putchar(064);b) Puts(variable string); Es la función complemento de gets esta funcióndespliega una string en el dispositivo de salida standar y debe llevar el argumentoo parametro.puts(nombre);puts(“pato”);
  16. 16. PROG2.CPP#include <stdio.h>void main(){//declaracionint var1, var2,var3;char var4[15], var5[15];//captura y observar donde se ponen getchars//unos para limpiar return y otros para parar la pantallaprintf("dame entero1:");scanf("%d",&var1);getchar();printf("dame string1:");scanf("%s",&var4);printf("dame entero2:");printf("dame string2:");scanf("%d",&var2);printf("dame entero3:");scanf("%d",&var3); getchar();gets(var5);//despliegueprintf("entero1 %d n",var1);printf("string1 %s n",var4);printf("entero2 %d n" ,var2);printf("entero3 %d n",var3);printf("string2 %s n",var5);getchar();}Recordar que scanf(”%s”) no quiere espacios en blanco, por eso es mejor usargets(var string).Observar que después de un scanf(entero) que este antes de un gets(varstring)deberán usar un getchar() para quitar el return del teclado o la pc no va a capturar lastring sino que va a saltarse.El último getchar es para parar o detener la pantalla.
  17. 17. Corrida:FORMATO PANTALLA PROGRAMACION C++#include<conio.h> Libreria a usar1. clrscr(); Limpia pantallaESTA INSTRUCCION NO OCUPA ACLARACION2. gotoxy(#de col,#de ren); posiciona cursor en lugar indicadoRECORDAR QUE UNA CONSOLA NORMAL TIENE 24 RENGLONES Y 80 COLUMNASEn particular poner un gotoxy(); antes de cada printf() en el programa.PALABRAS RESERVADAS EN C++auto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static whileAlgunas de las palabras clave en C tienen significados nuevos o se han reemplazado en elmundo de C + +, la siguiente lista muestra las palabras clave que han cambiado.struct conststatic enumLa siguiente lista muestra las palabras clave que se han añadido a C + +.bool inline protectedcatch new publicclass namespace tempatedelete operator thisfriend private throwtry template
  18. 18. FUNCIONES C++abort() Abort Process and ReturnErrorfarcoreleft() Return Measure ofUnused Memory in Far Heapint86x() Set Segment Registersand Execute Software Interruptrewind() Reposition File Pointer toBeginning of Streamabs() Calculate Absolute Value ofIntegerfarfree() Free a Block from FarHeapintdos() Invoke DOS Function,Long Formrmdir() Remove a Directoryabsread() Read Disk Sectors farmalloc() Allocate Memory fromFar Heapintdosx() Set Seg Regs and InvokeDOS Function, Long Formsbrk() Reset Break Value forCalling Processabswrite() Write Disk Sectors farrealloc() Adjust Allocated Blockin Far Heapioctl() Control I/O Device scanf() Read Formatted Data fromStdinaccess() Check File PermissionSettingfclose() Close a Stream isalnum() Test for AlphanumericCharacter (Macro)searchpath() Search the DOS Pathacos() Calculate Arc Cosine fcloseall() Close All Open Streams isalpha() Test for AlphabeticCharacter (Macro)segread() Return Current Valuesof Segment Registersalloca() Allocate Memory Block onStackfcvt() Convert Double to String isascii() Test for ASCII Character(Macro)setblock() Modify Size of DOSMemory Segmentallocmem() Allocate DOS MemorySegmentfdopen() Open a Stream Using aHandleisatty() Check for CharacterDevicesetbuf() Control Stream Bufferingasctime() Convert Time fromStructure to Stringfeof() Detect Stream End-of-File(Macro)iscntrl() Test for Control Character setcbrk() Set Control-BreakSettingasin() Calculate Arc Sine ferror() Test for Error on a Stream(Macro)isdigit() Test for Digit setdate() Set MS-DOS Dateassert() Diagnostic MessageGeneratorfflush() Flush a Stream isgraph() Test for PrintableCharacter Except Spacesetdisk() Set Current Disk Driveatan() Calculate Arc Tangent fgetc() Read a Character from aStreamislower() Test for Lowercase setdta() Set Disk Transfer Addressatan2() Calculate Arc Tangent ofy/xfgetchar() Read a Character fromStdinisprint() Test for PrintableCharactersetftime() Set File Date and Timeatexit() Register Exit Function fgets() Read a String from Stream ispunct() Test for PunctuationCharactersetjmp() Save Program Stateatof() Convert String to Double filelength() Return File Length isspace() Test for White-SpaceCharactersetmem() Assign a Value toMemory
  19. 19. atoi() Convert String to Integer fileno() Get File HandleAssociated with Stream (Macro)isupper() Test for Uppercase setmode() Set File-TranslationModeatol() Convert String to Long findfirst() Search Disk Directory isxdigit() Test for HexadecimalDigitsettime() Set System Timebdos() Invoke DOS Function, ShortFormfindnext() Fetch Files That Matchfindfirst()itoa() Convert Integer to String setvbuf() Control StreamBuffering and Buffer Sizebdosptr() MS-DOS System Call floor() Calculate Floor of Value kbhit() Check Keyboard InputBuffer for Character Waitingsetvect() Set Interrupt VectorEntrybioscom() Communications I/O flushall() Flush All Streams andClear All Bufferskeep() Exit and Remain Resident setverify() Set Verify Statebiosdisk() Hard Disk / Floppy I/O fmod() Calculate Floating-PointRemainderlabs() Calculate Absolute Value ofLong Integersin() Calculate Sinebiosequip() Check Equipment fnmerge() Make New File Name ldexp() Convert Mantissa andExponent to Floating Pointsinh() Calculate Hyperbolic Sinebioskey() Keyboard Interface fnsplit() Split a Full Path Nameinto Its Componentslfind() Linear Search for Key sleep() Suspend Execution forIntervalbiosmemory() Return MemorySizefopen() Open a File localtime() Convert Time from Intto Structure–Local Correctionspawn…() An Overview of theEight Spawn Functionsbiosprint() Printer I/O FP_OFF() Get or Set Offset Portionof a Far Pointer (Macro)lock() Set File Sharing Locks spawnl() Execute Program Using:Arg Listbiostime() Return the Time of Day FP_SEG() Get or Set SegmentPortion of a Far Pointer (Macro)log() Calculate Natural Logarithm spawnle() Execute Program Using:Arg List, Environmentbrk() Change Data-Segment SpaceAllocation_fpreset() Reinitialize Floating-Point Math Packagelog10() Calculate Base 10Logarithmspawnlp() Execute Program UsingArg List, PATHbsearch() Perform Binary Search fprintf() Write Formatted Data toStreamlongjmp() Restore Program State spawnlpe() Execute ProgramUsing Arg List, PATH, Environmentcabs() Calculate Absolute Value ofComplex Numberfputc() Write a Character to aStreamlsearch() Linear Search for Key;Add Key If Not Foundspawnv() Execute Program UsingArg Arraycalloc() Allocate and ZeroMemoryfputs() Write a String to Stream lseek() Reposition File Pointer toSpecified Locationspawnve() Execute Program UsingArg Array, Environmentceil() Calculate Ceiling of Value fread() Read Unformatted Datafrom Streamltoa() Convert Long to String spawnvp() Execute Program UsingArg Array, PATH
  20. 20. cgets() Get a Character Stringfrom the Consolefree() Deallocate Memory Block malloc() Allocate Memory Block spawnvpe() Execute ProgramUsing Arg Array, PATH,Environmentchdir() Change Current WorkingDirectoryfreemem() Free a PreviouslyAllocated DOS Memory Blockmatherr() Handle Math Error sprintf() Write Formatted Data toStringchmod() Change File PermissionSettingfreopen() Reassign a File Pointer _matherr() Floating-Point ErrorHandling Routinesqrt() Calculate Square Root_chmod() Change Access Mode ofFilefrexp() Get Mantissa andExponent of Floating-Point Valuememccpy() Copy Characters fromBuffersrand() Set Random Starting Point_clear87() Get and Clear8087/80287 Status Wordfscanf() Read Formatted Datafrom Screenmemchr() Find Character in Buffer sscanf() Read Formatted Datafrom Stringclearerr() Clear Error Indicator fora Streamfseek() Reposition File Pointer toGiven Locationmemcmp() Compare Charactersfrom Two Buffersssignal() Implement SoftwareSignalsclose() Close File fstat() Get Information aboutOpen Filememcpy() Copy Charactersbetween Buffersstackavail() Return Size ofAvailable Stack Memory_close() Close a File Handle ftell() Get Current File PointerPositionmemicmp() Compare Charactersin Two Buffersstat() Get File-Status Informationon Named Filecoreleft() Return a Measure ofUnused Memoryfwrite() Write Unformatted Datato Streammemmove() Move a Block ofBytes_status87() Get 8087/80287Floating-Point Status Wordcos() Calculate Cosine gcvt() Convert Double to String memset() Initialize Buffer stime() Set Timecosh() Calculate HyperbolicCosinegeninterrupt() Generate SoftwareInterruptmkdir() Create a New Directory strcat() Append a Stringcountry() Return Country-Dependent Informationgetc() Read a Character from aStream (Macro)MK_FP() Make a Far Pointer strchr() Find a Character in aStringcprintf() Formatted Write toConsolegetchar() Read a Character fromStdinmktemp() Create a Unique FileNamestrcmp() Compare Two Strings,Case Sensitivecputs() Write a String to theConsolegetch() Get a Character from theConsole without Echomodf() Split Floating Point intoMantissa and Exponentstrcmpi() Compare Two Strings,Case Insensitivecreat() Create a New File getche() Get a Character fromConsole with Echomovedata() Copy Characters to aDifferent Segmentstricmp() Compare Two Strings,Case Insensitive_creat() Create a New File getcwd() Get Path Name ofCurrent Working Directorymovmem() Move a Block of Bytes strcpy() Copy One String toAnother
  21. 21. creatnew() Create a New File getenv() Get a Value from theEnvironment Tableopen() Open a File strcspn() Scan One String forAnothercreattemp() Create a New File orRewrite an Existing Onegetpid() Get Process ID _open() Open a File For Readingor Writingstrdup() Duplicate Stringcscanf() Read Formatted Datafrom Consolegetcbrk() Get Control-BreakSettingoutport() Output to a HardwarePortstrerror() Save System ErrorMessagectime() Convert Time from LongInteger to Stringgetcurdir() Get Current Directory outportb() Output to a HardwarePortstrlen() Get String Lengthctrlbrk() Set Control-BreakHandlergetdate() Get Date parsfnm() Parse File Name strlwr() Convert String to LowerCasedifftime() Find the Differencebetween Two Timesgetdfree() Get Disk Free Space peek() Examine Memory Location strncat() Append SpecifiedNumber of Characters to a Stringdisable() Disable Interrupts getdisk() Get Current Drive peekb() Examine MemoryLocationstrncmp() Compare n Charactersof Two Strings, Case Sensitivedosexterr() Get DOS ExtendedError Valuesgetdta() Get Disk Transfer Address perror() Print Error Message strnicmp() Compare n Charactersof Strings, Case Insensitivedostounix() Convert Date andTime to UNIX Time Formatgetfat() Get File Allocation TableInformationpoke() Store Value at a GivenMemory Locationstrncpy() Copy a SpecifiedNumber of Charactersdup() Create Second Handle forOpen Filegetfatd() Get File Allocation TableInformationpokeb() Store Value at a GivenMemory Locationstrnset() Initialize n Characters ofStringdup2() Reassign a File Handle getftime() Get File Date and Time poly() Generate a Polynomialfrom Argumentsstrpbrk() Scan String for Characterfrom Character Setecvt() Convert Double to String getpass() Read a Password pow() Calculate X Raised to theYth Powerstrrchr() Scan String for LastOccurrence of Characterenable() Enable Interrupts getpsp() Get the ProgramSegment Prefixpow10() Power Function strrev() Reverse Characters inStringeof() Test for End of File gets() Read a Line from Stdin printf() Write Formatted String toStdoutstrset() Set All Characters in Stringexec…() An Overview of the EightExec Functionsgettime() Get System Time putc() Write a Character toStreamstrspn() Find First Substringexecl() Execute Program Using:Arg Listgetvect() Get Interrupt VectorEntryputchar() Write a Character toStdoutstrstr() Find Substring
  22. 22. execle() Execute Program Using:Arg List, Environmentgetverify() Get Verify State putch() Write a Character to theConsolestrtod() Convert String to Doubleexeclp() Execute Program Using:Arg List, PATHgetw() Read an Integer from aStreamputenv() Create New EnvironmentVariablesstrtol() Convert String to LongDecimal Integerexeclpe() Execute Program Using:Arg List, PATH, Environmentgmtime() Convert Time from LongInteger to Structureputs() Write String to Stdout strtok() Finds Next Token in Stringexecv() Execute Program Using:Arg Arraygsignal() Software Signals putw() Write an Integer to Stream strupr() Convert String toUppercaseexecve() Execute Program Using:Arg Array, Environmentharderr() Establish a HardwareError Handlerqsort() Perform Quick Sort swab() Swap Bytesexecvp() Execute Program Using:Arg Array, PATHhardresume() Hardware ErrorHandler Functionrand() Get Pseudorandom Integer system() Execute DOS Commandexecvpe() Execute Program Using:Arg Array, PATH, Environmenthardretn() Hardware ErrorHandler Functionrandbrd() Random Block Read tan() Calculate Tangentexit() Terminate Process afterCleanuphypot() Calculate the Hypotenuseof a Right Trianglerandbwr() Random Block Write tanh() Calculate HyperbolicTangent_exit() Terminate Process withoutCleanupinport() Input from Hardware Port read() Read Data from File tell() Get Current File PointerPositionexp() Calculate Exponential inportb() Input from HardwarePort_read() Read Data from a File time() Get Current System Timeas Long Integerfabs() Calculate Absolute Value ofFloating-Pointintr() Alternate 8086 SoftwareInterrupt Interfacerealloc() Reallocate Memory Block toascii() Convert c to ASCIICharacterfarcalloc() Allocate Memory fromFar Heapint86() Execute 8086 SoftwareInterruptrename() Rename a File orDirectorytolower() Convert c ToLowercase, If Appropriate
  23. 23. _tolower() Convert c to Lowercasetoupper() Convert c to Uppercase, If Appropriate_toupper() Convert c to Uppercasetzset() Set External Time Variables, Environment Variablesultoa() Convert Unsigned Long to Stringungetc() Push Character Back onto the Streamungetch() Push Back the Last Character Read from the Consoleunixtodos() Convert Date and Time to DOS Formatunlink() Delete a Fileunlock() Release File-Sharing Locksva_arg() Access Variable Number of Arguments, ANSI C Stylevfprintf() Write Formatted Data to Streamvfscanf() Perform Formatted Input from a Streamvprintf() Write Formatted Data to Stdoutvscanf() Perform Formatted Input from Stdinvsprintf() Write Formatted Data to Stringvsscanf() Perform Formatted Input from Stringwrite() Write Data to a File_write() Write Data to a File
  24. 24. OPERADORES C++Operador Función( ) llamada a función[ ] subíndice de un arreglo. Punto. Acceso a miembro de una estructura.-> Flecha. Apunta a miembro " " "! Inversor Lógico- Resta-- Decremento en uno++ Incremento en uno& Obtener la dirección de memoria* Obtiene la indirección (contenido de)/ división% modulo (resto de la división)+ suma< menor que> mayor que<= menor igual>= mayor igual== igualdad de comparación!= desigualdad&& operador lógico AND|| operador lógico OR?: condicional evalúa dos expresiones= asignación,separador de variables, constantes y expresiones dentro de funciones, estructuras decontrol, etc.sizeof Determina el tamaño de una variable o una estructura.
  25. 25. UNIDAD 2: C++ INSTRUCCIONES DE CONTROL DEPROGRAMAINTRODUCCIONInstrucciones de control de programa permiten alterar la secuencia normal de ejecuciónde un programa.Estas instrucciones se dividen en tres grandes categorías:Instrucciones Condicionales que en C++ CPP se implementan con las instrucciones if() yswitch().Instrucciones de ciclos con: for, while, do-while.Instrucción de salto incondicional goto.INSTRUCCIONES CONDICIONALESUna de las más poderosas características de cualquier computador es la capacidad quetiene de tomar decisiones.Es decir al comparar dos alternativas diferentes el computador puede tomar una decisión,basándose en la evaluación que hace de alguna condición.Ejemplo de instrucciones condicionales;a) si sueldo > 3000desplegar “rico”si nodesplegar “pobre”fin-sib) si sexo = mimprime mujersi noimprime hombrefin-siDe los ejemplos observar que los caminos por el computador dependerán de la evaluaciónque el computador hace de la condición.Todo lenguaje de programación debe tener instrucciones que permitan formarcondiciones e instrucciones que pueden evaluar esas condiciones.El formato general de una instrucción condicional es:
  26. 26. Como se observa son cuatro partes bien diferenciadas entre sí;La propia instrucción condicional en siLa condiciónEl grupo cierto de instruccionesEl grupo falso de instruccionesCuando el computador evalúa una condición, el resultado de esa evaluación solo esevaluado de dos maneras o la condición es CIERTA o la condición es FALSA.Esto dependerá del valor que tenga asignado o que se haya capturado para la variable queestá en la condición, por ejemplo si se capturo 6000 en sueldo en el ejemplo a), entoncesel computador indicaría que la condición es CIERTA, pero en otro caso, si a la variablesueldo primero se le asignó un valor de 250 entonces el computador indicaría que lacondición es FALSA.Ya dependiendo del resultado de la evaluación, el computador ejecuta las instruccionescontenidas en la parte CIERTA o en la parte FALSA de la condición.Empezaremos el análisis por la CONDICION.CONDICIONES SIMPLESEn general todas las condiciones simples se forman con:variables operadores relaciónales constante o var.sexo = msueldo > 300000Una condición siempre se define como el conjunto de variables y/o constantes unidas porlos llamados operadores relaciónales.Los operadores relaciónales que reconoce el lenguaje CPP son:OPERADOR SIGNIFICADO == Igual que > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que != No es igual que o es diferente queObservar y tener cuidado sobre todo con el operador de igualdad y el operador relacionalde comparación por igualdad, es decir;sueldo = 500; Se está pidiendo cargar o asignar la variable sueldo con el valor 500sueldo == 500; Se está pidiendo que se compare el valor o dato que se encuentra enla variable sueldo, contra el numero 500.Solo este último formato es válido dentro de una condición en una instruccióncondicional.
  27. 27. NOTA IMPORTANTE, Para el caso de objetos de tipo string, los operadoresmencionados arriba funcionan, es decir es válido usar la siguiente condición:string carrera;if (carrera==“informatica) etc, etc, etc,PERO para el caso de arreglos de caracteres, se tendra que usar la funciónstrcmp(str1,str2) que regresa cero si str1=str2, regresa un positivo sistr1>str2 y regresa un negativo si str1<str2, el mismo ejemplo:char carrera[20];if ( strcmp(carrera,”informatica”)== 0 ) etc, etc, etc.INSTRUCCION IFEs la instrucción condicional más usada en los diversos lenguajes de programación, suformato completo y de trabajo en CPP es:Cargar o asignar la variable de condición;if (condición) - { grupo cierto de instrucciones;}else - { grupo falso de instrucciones; };Primero.- Observar donde van y donde no van los puntos y comas;Secundo.- La condición va entre paréntesis;Tercero.- Si un if no ocupa un grupo falso de instrucciones, entonces no se pone elelse, y la llave antes del else si terminaría con punto y coma.PROG4.CPP#include <stdio.h>#include <conio.h>#include <string.h>void main(){// declaracion variablesint edad;char ciudad[30];//capturandoclrscr();gotoxy(10,5);printf("dame edad : ");scanf("%d",&edad);getchar();gotoxy(10,7);printf("dame ciudad : ");gets(ciudad);//comparandoif( edad>20){ gotoxy(30,5);puts("mayor de 20"); }else{ gotoxy(30,5);puts("menor de 20"); };if( strcmp(ciudad,"tijuana")==0){ gotoxy(35,7);puts("es de tijuana"); };getchar();}
  28. 28. CORRIDA:CONDICIONES COMPUESTASEn muchas ocasiones es necesario presentar más de una condición para su evaluación alcomputador.Por ejemplo que el computador muestre la boleta de un alumno, si este estudia la carrerade medicina y su promedio de calificaciones es mayor de 70.Una condición compuesta se define como dos o más condiciones simples unidas por losllamados operadores lógicos.Los operadores lógicos que CPP reconoce son:OPERADOR SIGNIFICADO TIPO&& “Y” LOGICO! “NO” NEGACIONEjemplo:if ( (sueldo> 700) && ( sexo==m) ) etc, etc, etc.Notas: Observar que cada condición simple lleva sus propios paréntesis.Si la variable es de tipo string el dato va entre comillas (” ”), pero si la variable es detipo char el dato va entre apostrofes ().Recordar además que para comparar arreglos de chars se deberá usar strcmp().Para que el computador evalúe como CIERTA una condición compuesta que contiene eloperador lógico “y”, las dos condiciones simples deben ser ciertas.Para que el computador evalúe como CIERTA una condición compuesta que contiene eloperador lógico “o”, basta con que una de las condiciones simples sea cierta.La cantidad total de casos posibles cuando se unen dos o más condiciones simples estádada por la relación donde n = cantidad de condiciones, la primera mitad de ellosciertos y la segunda mitad falsos.Ejemplo, si formamos una condiciona compuesta con dos condiciones simples y eloperador lógico “y”, la cantidad total de casos posibles serian y se puede construirla siguiente tabla de verdad.
  29. 29. Tabla de verdad con “y”1RA COND SIMPLE 2DA COND SIMPLEEVALUACIONC FC CC FC FF FF FC FC CC FC FF FF FC FLa evaluación final se obtiene usando la regla anteriormente descrita para una condicióncompuesta que contiene el operador “y”.Esta tabla significa lo siguiente;1.- Cualquiera que san la cantidad de datos procesados, siempre caerá en uno de estoscuatro posibles casos.La tabla de verdad para una condición compuesta con “O” es la siguiente;La tabla de verdad con “O”1RA COND SIMPLE 2DA COND SIMPLEEVALUACIONC FC CC CC FF FC FC FC CC CC FF FC FC FComo se observa, una condición compuesta con “O”, es menos restrictiva, o el 75% de loscasos terminarían ejecutando el grupo CIERTO de instrucciones de la instruccióncondicional.
  30. 30. Construir una tabla de verdad para una condición compuesta de tres o más condicionessimples, es también tarea sencilla, solo recordar que;1.- La cantidad posible de casos posibles es la mitad empiezan con cierto y la otramitad empiezan con falso.2.- Para evaluar esta condición triple, primero se evalúan las dos primeras incluyendo suoperador bajo las reglas ya descritas y luego se evalúa el resultado parcial contra la últimacondición y el ultimo operador para obtener la evaluación final.Ejemplo una condición compuesta de tres condiciones simples, donde el primer operadorlógico es el “y” y el segundo operador lógico es el “O”, daría la siguiente tabla de verdad.tabla de verdad para una condición compuesta de tres o más condiciones simples1ra cond 2da cond 3ra condEvaluación 1a Y 2a Evaluación eval O 3raC C FC C FC F FC F FC F FC F CC F CC C FF F FC C FC C FF F FF CC FEn la práctica cada condición simple debe ir encerrada en su propio paréntesis y las doscondiciones simples también deben encerrarse entre sus propios paréntesis, como en elsiguiente ejemplo;if((sueldo> 500)%%(strcmp(departamento,”VENTAS”)==0 ){aquí se construye la página que despliega su cheque semanal} else {aquí seconstruye y despliega la página del bono de despensa o un oficio de motivación} ;• Recordar, cada condición simple debe estar entre paréntesis y las dos condicionessimples también deben estar entre paréntesis.• Observar donde se deben incluir los puntos y comas y donde no se deben incluirlos puntos y comas.
  31. 31. INSTRUCCION SWITCHTambién existen ocasiones o programas donde se exige evaluar muchas condiciones a lavez, en estos casos o se usa una condición compuesta muy grande o se debe intentarconvertir el problema a uno que se pueda resolver usando la instrucción switch();La instrucción switch() es una instrucción de decisión múltiple, donde el compiladorprueba o busca el valor contenido en una variable contra una lista de constantes ints ochars, cuando el computador encuentra el valor de igualdad entre variable y constante,entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra elvalor de igualdad entre variable y constante, entonces ejecuta un grupo de instruccionesasociados a un default, aunque este ultimo es opcional.El formato de esta instrucción es el siguiente;capturar o asignar variable de condición;switch(var int o char){case const1: instrucción(es);break;case const2: instrucción(es);break;case const3: instrucción(es);break; ………………default: instrucción(es);};Ejemplo práctico:Prog5.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){// declaracion variableschar letra;//capturandoclrscr();gotoxy(10,5);printf("dame una letra : ");letra=getchar();getchar();//empieza switch()switch(letra)
  32. 32. {case a: gotoxy(30,5);puts("aguila");break;case b: case B: gotoxy(30,5);puts("baca");break;case c: gotoxy(30,5);puts("caballo ");puts("camello");break;default:gotoxy(30,5);puts("no hay");}getchar();}Corrida:Notas:1. Solo se puede usar como variable de condición una variable entera o variablechar.2. Las constantes que estamos buscando y comparando son de tipo char, por eso sedeben encerrar entre apóstrofes ( ).3. Si se quiere resolver el problema de mayúsculas o minúsculas en el teclado,observar que se usan dos case, pero con un solo break;4. Recordar que switch() solo trabaja con constantes y variables de tipo char oint, en este último caso, solo usar una variable de opción de tipo entero y en loscase poner la constante numérica, sin apóstrofes decir por ejemplocase 5: instrucciones; break;En particular, instrucciones de tipo switch() se usan para construir programas deselección de menús, donde al usuario se le plantean dos o tres problemas distintosy el propio usuario seleccionaba cuál de ellos se ejecuta .CICLO FORInstrucciones para ciclos resuelven el problema de repetir todo el programa o cierta partedel programa más de una vez.Este ciclo es uno de los más usados para repetir una secuencia de instrucciones, sobretodo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute unainstrucción simple o compuesta.
  33. 33. Su formato general es:for (inicialización; condición; incremento){ instrucción(es); };Ejemplo:for(x=1;x⇐10;x=x+1){ puts(” MAMA ”); };En su forma simple la inicialización es una instrucción de asignación que carga la variablede control de ciclo con un valor inicial.La condición es una expresión relacional que evalúa la variable de control de ciclo contraun valor final o de parada que determina cuando debe acabar el ciclo.El incremento define la manera en que la variable de control de ciclo debe cambiar cadavez que el computador repite un ciclo.Se deben separar esos 3 argumentos con punto y coma (;)Codigo prog6.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){clrscr();// declaracion variablesint x;// instruccion forfor(x=1;x<=10;x=x+1){ gotoxy(10, x+4); printf("%d MAMA",x); };getchar();}
  34. 34. Corrida:Casos Particulares del ciclo for;1. El ciclo comienza en uno y se incrementa de uno en uno este es el caso masgeneral.2. Pero el valor inicial puede se diferente de uno, ejemplo;for(x=5;x⇐15;x=x+1){ etc.};3. Incluso el valor inicial puede ser negativo, ejemplo;for (x = -3 ;x⇐ 8; x=x+1) { etc.};4. Los incrementos también pueden ser diferentes al de uno en uno, ej.;for (x=1; x⇐ 20; x=x+3){ etc. };5. Incluso pueden ser decrementos, solo que en este caso, recordar;5.1 el valor inicial de la variable debe ser mayor que el valor final.5.2 cambiar el sentido de la condición.Ejemplo;for (x= 50 ; x >= 10; x= x-4 ) { etcétera };6. Solo para los casos de incrementos y decrementos de una en unaUNIDAD sustituir en el for:el x = x + 1 por x++el x = x - 1 por x–CICLO WHILEEn este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezcacomo verdadera en el momento en que la condición se convierte en falsa el ciclo termina.Su formato general es:cargar o inicializar variable de condición;while(condición){grupo cierto de instrucciones;instrucción(es) para salir del ciclo;};
  35. 35. Un error muy común con el while, es poner un punto y coma (;) después de la(condición) ejemplo while(condicion); ←-esto es y causa un error.Prog7.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){clrscr();// declaracion variablesint x=1;// instruccion whilewhile(x<=10){ gotoxy(10, x+3); printf("%d PATO",x); x++; };getchar();}Corrida:While puede llevar dos condiciones en este caso inicializar 2 variables de condición ycuidar que existan 2 de rompimiento o terminación de ciclo.El grupo cierto de instrucciones puede ser una sola instrucción o todo un grupo deinstrucciones.La condición puede ser simple o compuesta.Los casos generales de for también se aplican a while.
  36. 36. A este ciclo también se le conoce también como ciclo de condición de entrada o pruebapor arriba porque este ciclo evalúa primero la condición y posteriormente ejecuta lasinstrucciones.CICLO DO WHILESu diferencia básica con el ciclo while es que la prueba de condición es hecha al finalizarel ciclo, es decir las instrucciones se ejecutan cuando menos una vez porque primeroejecuta las instrucciones y al final evalúa la condición;También se le conoce por esta razón como ciclo de condición de salida.Su formato general es:cargar o inicializar variable de condición;do {grupo cierto de instrucción(es);instrucción(es) de rompimiento de ciclo;} while (condición);prog8.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){clrscr();// declaracion variablesint x=1;// instruccion do whiledo{gotoxy(10, x+3); printf("%d GATO",x);x++; } while(x<=10);getchar();}
  37. 37. Corrida progOtra diferencia básica con el ciclo while es que, aunque la condición sea falsa desde unprincipio el cuerpo de instrucciones se ejecutara por lo menos una vez.CONCLUSIONES ACERCA DE CICLOS EN C++El problema, de un problema dado, cualesquiera cual ciclo se debe usar se resuelve con:1. Si se conoce la cantidad exacta de veces que se quiere que se ejecute el ciclo o si elprograma de alguna manera puede calcularla usar for.2. Si se desconoce la cantidad de veces a repetir el ciclo o se quiere mayor controlsobre la salida o terminación del mismo entonces usar while.3. Si se quiere que al menos una vez se ejecute el ciclo entonces usar do while.
  38. 38. UNIDAD 3: C++ ARREGLOSINTRODUCCION ARREGLOSUno de los problemas más comunes en los diversos sistemas de información es eltratamiento o procesamiento de un gran volumen de datos o de información.Las variables manejadas hasta ahora no pueden ayudar a resolver este problema.Las variables usadas hasta ahora reciben propiamente el nombre de variables escalares,porque solo permiten almacenar o procesar un dato a la vez.No confundir esto con el tipo de dato o rango de datos que una variable tiene la capacidadde almacenar.Por ejemplo si se quiere almacenar nombre y edad de 15 personas con el métodotradicional se ocuparan 30 variables y esto solo es nombre y edad de 15 personas,agreguen más datos y más personas y ya es tiempo de empezar a analizar otro tipo devariables.Se ocupan entonces variables que sean capaces de almacenar y manipular conjuntos dedatos a la vez.Variables de tipo arreglo si permiten almacenar y procesar conjuntos de datos del mismotipo a la vez.Cada dato dentro del arreglo se le conoce como elemento del arreglo y se simboliza yprocesa (captura, operación, despliegue ) usando el nombre del arreglo respectivo y unsubíndice indicando la posición relativa del elemento con respecto a los demás elementosdel arreglo, solo recordar que en cpp la primera posición, elemento o renglón es el 0(cero), ejemplo:NOMBRESJuan →nombres(0)Pedro → nombres(1)Rosa → nombres(2)Jose → nombres(3)Sin embargo sus problemas son similares a los de variables normales es decir hay quedeclararlos, capturarlos, hacer operaciones con ellos, desplegarlos, compararlos, etc.
  39. 39. ARREGLOSEn programación tradicional siempre se manejan dos tipos de arreglos los arreglos tipolistas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados,matrices o bidimensionales en ambos casos son variables que permiten almacenar unconjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas quecada uno de estos tipos contiene, como en los siguientes ejemplos:a. LISTASEDAD• 18• 34• 22• 15b. TABLASCIA ACMEINGRESOS MENSUALES VENTAS (MILES DE $)MES SUC A SUC B SUC DENE 10 50 90FEB 20 60 100MAR 30 70 110ABR 40 80 120MAY 50 90 130Como se observa la diferencia principal entre un arreglo tipo lista y un arreglo tipo tablason las cantidades de columnas que contienen.NOTA IMPORTANTE.- LOS CONCEPTOS MANEJADOS AQUI ESTAN ENFOCADOS A LOSSISTEMAS DE INFORMACION CONTABLES FINANCIEROS ADMINISTRATIVOSEN ALGEBRA MATRICIAL, SI SON IMPORTANTES LOS CONCEPTOS DE VECTORES YMATRICES, PERO LAS OPERACIONES Y METODOS SON PRECISAMENTE LOS DEL ALGEBRAMATRICIAL.ARREGLO TIPO LISTAUn arreglo tipo lista se define como una variable que permite almacenar un conjunto dedatos del mismo tipo organizados en una sola columna y uno o más renglones.También reciben el nombre de vectores en álgebra o arreglos unidimensionales enprogramación.Los procesos normales con una lista o con sus elementos incluyen declarar toda la lista,capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.Para declarar una lista se usa el siguiente formato;tipodato nomlista[cant de elementos o renglones];
  40. 40. Ejemplos;int edades[12];float sueldos[10];Char carreras[10][30];Para crear e inicializar una lista usar el siguiente formato:Tipodato nomlista[cant reng]={elementos};Ejemplo:Int edad[5] = { 12,18,20,23,30 };Float sueldo[3] = { 1.36, 23.67, 77.90 };Strcpy(carrers[0],”informatica”);strcpy(carreras[1],”sistemas”);etc;etc.Recordar que la primera posición o renglón en una lista es la posición o renglón 0 (cero).LISTASProg9.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){clrscr();// declaracion listaschar nombre[3][20];int edad[3];// capturandofor (int r=0; r<=2; r++){ gotoxy(5, r*2+2);printf("%d NOMBRE: ",r);gets(nombre[r]);gotoxy(5, r*2+3);printf("%d EDAD: ",r);scanf("%d",&edad[r]);getchar();};//operandofor ( r=0; r<=2; r++) edad[r]=edad[r] *12;//desplegandofor ( r=0; r<=2; r++){ gotoxy(5, r*2+9); printf("NOMBRE:= %s", nombre[r]);
  41. 41. gotoxy(5, r*2+10); printf("EDAD:=%d",edad[r]);};getchar();}Corrida:Captura este procedimiento es similar para despliegue.Se deberá usar siempre un ciclo for con una variable de control llamada renglon, mismaque también se usa como índice del arreglo.Recordar que el primer renglon o índice en CPP es el renglon 0.Siempre que se use un elemento de una lista en Cpp con cualquier proceso (captura,despliegue, operaciones) deberá acompañarse de su índice respectivo.Para procesar (hacer operaciones con ellos, o comparaciones, etc.) los elementos de lalista, se deberán usar un ciclo for con una variable de control llamada renglón, mismaque se usara también como índice de la lista.Para desplegar los elementos de la lista, también se usa un ciclo for con su variable decontrol renglón, tal como se muestra en el ejemplo.El mismo ciclo de proceso o despliegue se puede utilizar para procesar o desplegar loselementos de más de una lista, siempre y cuando las listas sean del mismo tamaño.STRINGSTRING COMO ARREGLO DE CARACTERESLas strings no son más que un caso especial de arreglo de caracteres y como talespresentan ciertas peculiaridades que no son posibles de resolver con métodostradicionales.Por ejemplo no es válido usar simples sentencias de asignación o comparación.1. char nombre [30],copia[nombre];copia = nombre; esto no es válido en CPP2. if(opcion==`si`) Tampoco es válido en CPP
  42. 42. Para casos como estos se deberán usar ciertas funciones de manipulación de stringsque provee el lenguaje C, estas funciones son:#include <string.h>a) STRCPY(string destino,string original);Se utiliza para copiar el contenido de un string original en un string de destino.Ejemplo:char nombre[30],copia[30];nombre= getstring(“nombre”);strcpy(copia,nombre);strcpy(nombre,”pato”);b) STRCAT(string1,string2);Encadena o agrega al final de la string1 la string2.Ejemplo: char nombre[30],copia[30];strcpy(nombre,”pepe”);strcat(nombre,”lopez”);c) STRCMP(string1,string2);Se utiliza para comparar 2 strings, esta función regresa cero si ambas stringsson iguales, regresa un número mayor que cero si string1 es mayor questring2 y regresa un número menor que cero si string1 es menoralfabéticamente que string2.Ejemplo: char opcion[3];strcmp(opcion,”si”);if(strcmp(opcion,”si”)==0)d) STRLEN(string);Esta función regresa la cantidad de caracteres que tiene la string.Ejemplo: char nombre[30];strcpy(nombre,”juan”);printf(”%d”,sizeof(nombre)); REGRESA 30printf”%d”,strlen(nombre)); REGRESA 4LISTAS DE STRINGSLas listas de strings en C++ también dependerán del tipo de string que se estéusando, es decir como un arreglo de caracteres o como una lista de strings, en cadacaso se ocupara sus propias instrucciones o métodos de tratamiento de strings:1. Como arreglo de caracteres:• rosa• juan• jose• maria
  43. 43. Se deberá usar un arreglo bidimensional de chars donde el primer subíndicereferenciara la cantidad de strings que tendrá el arreglo y el segundo subíndice indicarael tamaño máximo de cada string.Ejemplo:char nombres[4][30];Para efectuar cualquier proceso (captura, comparación, despliegue), se deberá usar elnombre de la lista y nada más el primer subíndice.Ejemplo:char nombres[4][30];int ren;// capturar o inicializar los elementos// desplieguefor(ren=0;ren<=3;ren++)printf("%s",nombres[reng]);SORTEOS U ORDENAMIENTOSUn proceso muy común en C++ con listas es el llamado sorteo u ordenamiento.Este proceso consiste en reacomodar los elementos de la lista en un nuevo orden, deacuerdo a algún criterio.Lista original Orden crece - Orden decrece• 15 2 15• 2 8 10• 10 10 8• 8 15 3Existen muchos métodos u algoritmos de sorteos, el más común de ellos, es eldenominado sorteo de burbuja que se basa en el siguiente algoritmo:/*area de ordenamiento*/n=cantidad de elementos de la lista;for(k=1;k<=n-1;k++){ renglon=0;while(renglon< n-k)
  44. 44. { if(lista[renglon]>lista[renglon+1]){ temp=lista[renglon];lista[renglon]=lista[renglon+1];lista[renglon+1]=temp; };renglon=renglon+1;};};Las notas a considerar con respecto al algoritmo son:- Las variables n, k, renglón, son variables de control y deberán ser declaradas detipo int.- La variable temp, deberá ser declarada de acuerdo al tipo de dato de loselementos de la lista.- Todas las referencias a LISTA, deberán ser cambiadas por el nombre verdadero dela lista real.- Es el símbolo del if, quien determina el tipo de sorteo, es decir, ascendente (>),descendente (<).- Para el caso de listas de strings, la comparación en el if y el intercambio en laparte cierta de abajo se deberá hacer usando las instrucciones o métodos que seanalizaron en el tema de strings.ARREGLOS TIPO TABLAUn arreglo tipo tabla se define como un conjunto de datos del mismo tipo organizados endos o más columnas y uno o más renglones.Para procesar (recordar solo operaciones y comparaciones) internamente todos loselementos de la tabla se ocupan dos ciclos for() uno externo para controlar renglón yuno interno para controlar columna.Los elementos de la tabla se deberán simbolizar con el nombre de la tabla y 2 subíndices,el primer subíndice referencia al renglon y el siguiente subíndice referencia la columna.La declaración de una tabla será de acuerdo al siguiente formato.tipo nomtabla[cant ren][cant col];Ejemplo:int calif[3][4];long int ingresos [3][4];
  45. 45. Para efectuar procesos tales como operaciones despliegue con todos los elementos de latabla se deberán usar 2 ciclos un for externo para controlar renglon y un for internopara controlar columna.prog10.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){clrscr();// declaracion tablaint calif[3][4];int r,c,nc=5;// capturandoprintf("CALIFICACIONES n");for (r=0; r<=2; r++){for(c=0;c<=3;c++){ gotoxy(nc,r+2); printf("%d %d: ",r,c);scanf("%d",&calif[r][c]);getchar();nc=nc+10;};nc=5;};//operandofor ( r=0; r<=2; r++)for(c=0;c<=3;c++)calif[r][c]=calif[r][c]+10;//desplegandofor (r=0; r<=2; r++){for(c=0;c<=3;c++){ gotoxy(nc,r+6); printf("%d ",calif[r][c]);nc=nc+10;};nc=5;};getchar();}
  46. 46. Corrida:INICIALIZACION DE ARREGLOSSe permite la inicialización de arreglos en C++ de acuerdo al siguiente formato:static tipo numarreglo[cant de elementos]={valores};Ejemplo: static int edades[5]={18,20,19,17,23};static long int tabla num[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};static char nombres [3][30]={“juan”, “jose”, “rosa”};
  47. 47. UNIDAD 4: C++ PROCEDIMIENTOS Y FUNCIONESPROCEDIMIENTOSUn camino para dividir un gran programa en partes más pequeñas es el uso de losllamados procedimientos.Un procedimiento es un grupo de instrucciones, variables, constantes, etc., que estándiseñados con un propósito particular y tiene su nombre propio.Es decir un procedimiento es un módulo de un programa que realiza tareas específicas yque no puede regresar valores a la parte principal del programa u otro procedimiento quelo esté invocando.Después de escribir un procedimiento se usa su propio nombre como una sola instruccióno llamada al procedimiento.Los procedimientos se podrán escribir después del cuerpo principal del programautilizando el formato:void NomProc(){instrucciones;};Pero también los procedimientos deberán declararse antes del main como lo muestra elprograma ejemplo.Sin embargo el procedimiento se construye antes del main() entonces no hay necesidadde declararlo antes.Un programa puede tener tantos procedimientos como se deseen para hacer una llamadao invocación al procedimiento durante la ejecución de un programa solo se deberá escribirel nombre del procedimiento y los paréntesis en blanco.Prog11.cpp#include <stdio.h>#include <conio.h>#include <string.h>void main(){clrscr();// recordar declarar primero proc y funcionesvoid proc1();//llamando o activando procedimientoproc1();} // fin del main
  48. 48. void proc1(){// area de declaracion de variables y captura de datosint base1,altura; float area;//area de capturaprintf("dame base: ");scanf("%d",&base1);printf("dame altura: ");scanf("%d",&altura);// area de operacionesarea = base1 * altura / 2;// area de despliegueprintf("area=%0.2f",area);getchar();getchar();}// fin procRecordar que se pueden crear el procedimiento o los procedimientos (aunque realmentees una función) arriba o abajo de la parte principal del programa.Recordar también que un programa puede tener muchos procedimientos, y estos puedenllamarse o invocarse entre sí.MUCHO OJO con la nota anterior, es válido que un procedimiento se llame o invoque o seactive a sí mismo o usando una referencia circular, por ejemplo proc1, activa proc2 que asu vez llama a proc1 esto se llama recursión y si no se controla con una instrucciónif(condición)break; se va a obtener un hermoso ciclo infinito, muy divertido cuando lepasa a los programas de los compañeros, están avisados.Como se observa un procedimiento puede ser un programa completo.PARAMETROS EN C++Un parámetro en C++ es una variable que puede pasar su valor a un procedimiento desdeel principal o desde otro procedimiento.Existen ocasiones en que es necesario mandar al procedimiento ciertos valores para quelos use en algún proceso.Estos valores que se pasan del cuerpo principal del programa o de un procedimiento aotros procedimientos se llaman parámetros.Entonces la declaración completa de un procedimiento es:Void Nom_Proc(lista de parametros){ cuerpo de instrucciones;};
  49. 49. Donde lista de parámetros es una o más variables separadas por coma, como lo muestrael programa ejemplo.prog12.cpp#include <stdio.h>#include <conio.h>#include <string.h>// recordar declarar primero proc y funciones// y observar como se pasa como parametro una stringvoid proc1(char nom[], int suma);void main(){clrscr();//llamando o activando procedimiento// y pasando dos parametros uno de ellos stringproc1("juan perez", 3 + 4);} //fin main// ya se fijaron como se pasa la stringvoid proc1(char nom[], int suma){//declarando variablesint edad;// capturandoprintf("dame edad: ");scanf("%d",&edad);// operaciones sumando parametroedad = edad + suma;//construyendo y desplegando la pagina de salidaprintf("%s n",nom);printf("EDAD= %d", edad);getchar();getchar();}// fin proc
  50. 50. Y no olvidar declarar el procedimiento antes del main() incluyendo sus parámetros comolo muestra el ejemplo.Recordar también que se pueden mandar como parámetros, datos, variables yexpresiones algebraicas (no formulas o ecuaciones algebraicas)Corrida:Observar que en el procedimiento los parámetros son dos variables locales es decirvariables que solo se pueden usar dentro del procedimiento estas variables son quienesreciben los datos o valores.REGLAS PARA EL USO DE PARAMETROS1. Cuando se usan variables como parámetros, la variable que se manda debe serdeclarada dentro del principal o del procedimiento de donde se está enviando.2. La variable que se manda tiene un nombre, la que se recibe puede tener otronombre o el mismo nombre por claridad de programa, pero recordar queinternamente en la memoria del computador existirán dos variables diferentes.3. La cantidad de variables que se envían deben ser igual en cantidad, orden y tipo alas variables que reciben.4. La variable que se recibe tiene un ámbito local dentro del procedimiento, es decirsolo la puede usar ese procedimiento.5. Se puede mandar a un procedimiento un dato, una variable (como lo muestran losejemplos) o una expresión algebraica (no ecuación o formula, pero siempre sedeberán recibir en una variable.VARIABLES LOCALES Y GLOBALESEl lugar donde sea declarada una variable afectara el uso que el programa quiera hacer deesa variable.Las reglas básicas que determinan como una variable puede ser usada dependen de 3lugares donde se puede declarar una variable.En primer lugar es dentro de cualquier función o procedimiento a estas se les llamavariables locales y solo pueden ser usadas por instrucciones que estén dentro de esafunción o procedimiento.En segundo lugar es como parámetro de una función donde después de haber recibido elvalor podrá actuar como variable local en esa función o procedimiento.En esencia una variable local solo es conocida por el código de esa función oprocedimiento y es desconocida por otras funciones o procedimientos.En tercer lugar es fuera de todas los procedimiento o funciones a este tipo de variables seles llama variables globales y podrán ser usadas por cualquier función o procedimiento delprograma, sin embargo hay que agregarle la palabra reservada STATIC y a partir delmomento en que se declara, acompañada de dicha palabra reservada static seconsidera y puede usarse como variable global.
  51. 51. En programación en serio no es acostumbrado usar muchas variables globales por variasrazones, una de ellas es que variables globales están vivas todo el tiempo de ejecución delprograma y si una global solo la ocupan unos cuantos procedimientos no tiene caso queeste viva para todo el resto, otra razón es que es peligroso tener variables globales porquetodo el conjunto de procedimiento y funciones que componen un programa tienen accesoo comparten su valor y se corre el riesgo de que inadvertidamente alguno de ellosmodifiquen su valor.prog13.cpp#include <stdio.h>#include <conio.h>#include <string.h>// recordar declarar primero proc y funcionesvoid proc1();// variables globalesfloat base, altura, area;void main() {clrscr();//capturando datosprintf("dame base: ");scanf("%f",&base);printf("dame altura: ");scanf("%f",&altura);//llamando procedimientoproc1();}void proc1(){// area de operacionesarea = base * altura / 2;// área de construcción de página de salidaprintf(" area =%0.2f",area);getchar();getchar();}Es muy agradable trabajar sin parámetros pero recordar la nota de arriba que no es muybueno usar muchas variables globales. Corrida:
  52. 52. FUNCIONESUna función es un módulo de un programa separado del cuerpo principal, que realiza unatarea específica y que puede regresar un valor a la parte principal del programa u otrafunción o procedimiento que la invoque.La forma general de una función es:Tipodato Nomfun(parametros){cuerpo de instrucciones;return [dato,var,expresion];}Donde tipodato especifica el tipo de dato que regresara la función.La instrucción RETURN es quien regresa un y solo un dato a la parte del programa que laesté llamando o invocando, sin embargo es de considerar que return puede regresar undato, una variable o una expresión algebraica (no ecuación o formula) como lo muestranlos siguientes ejemplos;a) return 3.1416;b) return area;c) return x + 15/2;La lista de parámetros formales es una lista de variables separadas por comas (,) quealmacenaran los valores que reciba la función, estas variables actúan como locales dentrodel cuerpo de la función.Aunque no se ocupen parámetros los paréntesis son requeridos.INSTRUCCION RETURNDentro del cuerpo de la función deber haber una instrucción return cuando menos pararegresar el valor, esta instrucción permite regresar datos.Recordar además que cuando se llame una función deberá haber una variable que recibael valor que regresara la función, es decir generalmente se llama una función medianteuna sentencia de asignación, por ejemplo resultado=funcion(5, 3.1416);prog14.cpp<code>#include <stdio.h>#include <conio.h>#include <string.h>//todos los proc y funciones deben declararse antes del mainfloat fun1(float b, float, a); void main() { clrscr();//capturando datos//area de declaracion de variables y captura de datosint base, altura; float area;
  53. 53. //area de capturaprintf(“dame base: ”);scanf(”%d”,&base);printf(“dame altura: ”);scanf(”%d”,&altura);//llamando o invocando la funcion fun1area= fun1(base, altura);//desplegandoprintf(” area =%0.2f”,area);getchar();getchar();}float fun1(float b, float a){return b * a / 2;}</codeCorrida:Usar de preferencia solo int y double como parámetros.Es permitido poner más de un return en el cuerpo de instrucciones sobre todo encondiciones, pero solo un return se ejecutara, ejemplo;if (suma >= 10){ return 10; }else{ return 20; }EXISTEN 3 CLASES USUALES DE FUNCIONES.• Las primeras son de tipo computacional que son diseñadas para realizaroperaciones con los argumentos y regresan un valor basado en el resultado de esaoperación.• Las segundas funciones son aquellas que manipulan información y regresan unvalor que indican la terminación o la falla de esa manipulación.• Las terceras son aquellas que no regresan ningún valor, es decir son estrictamenteprocedurales.Esto quiere decir que en general toda operación o calculo en un programa deberáconvertirse a una o muchas funciones y el resto deberán ser procedimientos.
  54. 54. ARREGLOS COMO PARAMETROSPara pasar un arreglo completo como parámetro a un procedimiento a una función solo semanda el nombre del arreglo sin corchetes e índices, en el procedimiento o función querecibe solo se declara un arreglo del mismo tipo y se puede usar el mismo o diferentenombre del arreglo sin corchetes e índices.Sin embargo es conveniente aclarar, que a diferencia de variables escalares normales, c++no genera una nueva variable en memoria ni tampoco copia los datos al arreglo querecibe, en su lugar cpp sigue usando los datos que están en el arreglo original, es por estarazón que cambios que se le hagan a los datos del arreglo que recibe realmente se estáhaciendo al arreglo original como lo muestra el siguiente ejemplo:Prog15.cpp#include <stdio.h>#include <conio.h>#include <string.h>void proc1(int vector[]);void main() {clrscr();//creando arreglo y cargandoloint lista[5]= {10,11,12,13,14};// mandandolo a procedimiento recordar como se manda sin []proc1(lista);// desplegando arreglo lista y observar que datos salenfor(int reng=0; reng<=4; reng++)printf("%d n",lista[reng]);getchar();} // termina mainvoid proc1(int vector[]){// sumandole 50 a lo que se tenia en arreglo lista// es decir vector queda cargado con 60,61,62,63,64for(int reng=0; reng<=4; reng++)vector[reng]=vector[reng]+ 50;// observar que no se regresa nada} //termina proc1
  55. 55. Corrida:Es de recordar que los cambios que le hagan al arreglo dentro de la función se reflejaranen el arreglo original, es por esto que si se quiere modificar un arreglo en una función nohay necesidad de regresar ningún valor.
  56. 56. UNIDAD 5: C++ REGISTROS Y ARCHIVOS SECUENCIALESINTRODUCCIONAntes de empezar a programar en serio se estudian en esta UNIDAD dos problemas.Problema A:Variables que puedan almacenar un conjunto de valores y no necesariamente del mismotipo.Problema B:Resolver el problema de almacenar en forma permanente los datos que se generan dentrode un programa ya sea por captura, proceso, etc.El problema (A) se resuelve usando el concepto de estructuras o registros el problema (B)se resuelve usando el concepto de archivos.ESTRUCTURAS O REGISTROSEn este tema exploramos en C la estructura más común de representación de datos lallamada estructura.Variables simples o escalares pueden almacenar un datum de información y arreglospueden almacenar conjuntos de ellos del mismo tipo y al mismo tiempo, estos dosmecanismos pueden manejar una gran variedad de situaciones pero a menudo se necesitatrabajar sobre datos de diversos tipos en este caso ni variables escalares ni arreglos sonadecuados.Para resolver este problema C provee de un tipo de dato especial llamado estructura.Los elementos individuales de una variable estructura reciben el nombre de campos.Ejemplo:struct alumnonombre campo1direccion campo2edad campo3etc.EL FORMATO GENERAL DE UNA ESTRUCTURA ES:tipo de almacenamiento struct{tipo campo1;tipo campo2;}lista de variables;Es el registro completo quien se declara en cualquiera de los lugares adecuados para ello.Son los campos del registro a quienes se les va a asignar, inicializar, capturar, etc., y deesta manera a los campos se les considera como variables normales.
  57. 57. Para indicar a “C” durante cualquier proceso que la variable a utilizar es un campo de unaestructura se utiliza el siguiente formato.nomregistro.nombredelcampoEjemplo.prog16.cpp#include <stdio.h>#include <conio.h>#include <string.h>struct {int matricula;char nombre[30];int edad;}alumno;void main() {clrscr();// captura de camposprintf("dame matricula:");scanf("%d",&alumno.matricula);getchar();printf("dame nombre :");gets(alumno.nombre);printf("dame edad :");scanf("%d",&alumno.edad);// área de operacionesalumno.edad = alumno.edad * 12;// área de salidaprintf("MATRICULA =%d n",alumno.matricula);printf("NOMBRE =%s n",alumno.nombre);printf("MESES =%d n",alumno.edad);getchar();getchar();}Corrida:Las operaciones más elementales con los campos de una estructura incluyen captura einicialización.
  58. 58. ARCHIVOSSi bien es cierto que ya se pueden manejar gran cantidad de datos del mismo y diferentetipo al mismo tiempo el problema es que al terminar de ejecutarse el programa los datosse pierden.De esta situación nace el concepto de archivos que son medios que facilita el lenguajepara almacenar los datos en forma permanente, normalmente en los dispositivos dealmacenamiento estándar.En general es necesario entender algunos conceptos elementales de sistemas de archivostradicionales.Como nota a tomar en cuenta los datos que se van almacenando en un archivo de disco,se almacenan en renglones consecutivos y cada renglón en disco, se conoce como registrodel archivo, favor de no confundir el concepto de registro de archivo y registro oestructura como variable ya analizada, son dos cosas totalmente diferentes aunquedesafortunadamente se llamen igual.Primero: Operaciones con archivos• ESCRIBIR O GRABAR: Es la operación más elemental con un archivo, consiste entomar un o unos datos en variables de cualquier tipo (escalar, mezcla de datos,arreglos, estructuras) y almacenarlas en un archivo de datos en disco.• LEER: Operación consistente en sacar los datos del archivo en disco y mandarlos ocargar la variable respectivaSegundo: Organización de archivosEn general existen dos tipos de archivos:• Archivos Secuenciales.- En este caso los datos se almacenan en forma consecutivay no es posible leer (recuerdan que significa esta operación) ningún registro(recuerdan la nota de arriba) directamente, es decir para leer el registro n sedeberá recorrer o acezar los n-1 registros anteriores.• Archivos Directos o Random.- Para este caso si se puede acceder o leer un renglónn cualquiera.Tercero: Tipo de archivosEn general existen tantos tipos de archivos como tipos de datos existen, es decir:El paquete estándar de input/output de “C”, hace disponible 4 métodos o manerasdiferentes de leer y escribir los datos a disco.Tres de ellas corresponden exactamente a lo aprendido de leer y escribir datos desde elteclado hacia la pantalla.1. Datos a ser grabados o leídos como un caracter a la vez, se utilizaran funcionesanálogas a getchar y putchar.
  59. 59. 2. Datos que pueden ser leídos o grabados como una string se usaran funcionesanálogas a gets y puts.3. Datos que se capturen o desplieguen con formatos parecidos a los usados porscanf y printf se usaran funciones similares, es decir serán problemas queinvolucran mezclas de strings, caracteres, floats, etc.4. También se podrán leer y escribir datos de tipo arreglo y registros utilizandoinstrucciones apropiadas, en resumen:caracterstringFormateadoRegistros y arreglosLeer Escribirgetc() putc()fgets() fputs()fscanf() fprintf()fread() fwrite()ATENCION: Ya que se decide utilizar algún archivo especifico de datos(caracteres,strings, formateados, registros o arreglos) solo utilizar las funciones de escritura ylectura de ese tipo de archivo, por ningún motivo mezcle funciones de lectura y escriturade otro tipo de archivos.Cuarto: Almacenamiento en archivosModo Texto: en este caso los datos son almacenados usando Ascii y por tanto sonplenamente visibles usando cualquier editor.Modo Binario: en este caso los datos son almacenados en notación hexadecimal y portanto se ocupa un editor binario para reconocerlos, sin embargo un archivo binario es máscompacto que un archivo texto.ARCHIVOS DISCOExisten muchas operaciones asociadas a archivos en C++, las más elementales son:1. Creación de Archivo.- En este proceso se pretende solamente crear un archivonuevo en disco con su nombre tipo y especialidad de almacenamiento de datosapropiado.2. Apertura de Archivos.- En este caso se pretende abrir un archivo ya existente endisco para procesarlo ya sea para cargar o grabar estructuras en sus registros o leeralgún registro en especial para mandarlo a una variable de cualquier tipo.No confundir creación con apertura, creación es un proceso que solo se ejecutauna sola vez en la vida de un archivo, mientras que apertura, siempre se estárealizando por los programas especializados en algún proceso.3. Cierre de archivos: Es la operación más importante en cualquier programa quemaneje archivos, o se cierra el archivo como ultima instrucción del programa o severá el anuncio ABORT, RETRY, FAIL.Windows 98, /s, scandisk
  60. 60. 4. Altas en archivo.- En este proceso se captura una estructura en memoria con susdatos pertinentes y después se graba la estructura al archivo en disco.5. Lectura de archivo.- En este proceso se abre el archivo, se manda el registro dedisco a una estructura en memoria para su procesamiento.6. Consulta de archivos: En este proceso se pretende desplegar todos los registrosdel archivo en disco a la pantalla ya sea consola o mejor aún, a una página html7. Búsqueda en archivos: Una de las operaciones más comunes consiste en que elusuario pide toda la información de algún renglón en disco proporcionando lainformación de algún campo generalmente el campo clave de la estructura.8. Filtros.- En este proceso el usuario está interesado en algún conjunto de renglonescon características comunes (condición), por ejemplo todos los alumnos de“sistemas” o todos los empleados que ganen más de $500.00 pesos, o todos losclientes que sean de “Tijuana”, etc.9. Modificaciones de registros o archivos: Problema muy común, donde los datosoriginales ya grabados se tienen que cambiar o actualizar, por ejemplo el nombreno era “juan” es “juana”, o la calificación no es 100 es 20, etc.10. Bajas de registros: también muy común este proceso, por ejemplo el alumno yaegreso, el cliente huyo, etc.CREACION ARCHIVOS SECUENCIAL DISCOEn este proceso se pretende solamente crear un archivo secuencial en disco.Prog17.cpp#include <stdio.h>#include <conio.h>#include <string.h>struct {int matricula;char nombre[30];int edad;}alumno;void main() {clrscr();//creando y cerrando el archivo en discoFILE *archdisco;archdisco = fopen("cpp:acalumnos.dat","w");fclose(archdisco);printf("ARCHIVO CREADO");getchar();getchar();}
  61. 61. CORRIDA:Recordar que la estructura que se usó para crear el archivo se deberá usar siempre y conel mismo orden cuando se acceda al archivo con los procesos u operacionesanteriormente mencionados.Lo primero que se crea es una variable de tipo puntero o apuntador a un archivo a disco(instrucción FILE y debe ser en MAYUSCULAS) llamada archdisco(muy original).Variables apuntadores son tipos especiales de variables que tienen la capacidad dealmacenar no datos, pero si direcciones ya sean de la memoria del computador o como eneste caso de una dirección física del disco.En “C” una variable apuntador se declara anteponiendo un asterisco antes del nombre.En el programa se está creando una variable apuntador bautizada con el nombre dearchdisco que almacenara la dirección física del archivo en disco, en algún cilindro,track , sector deberá quedar el archivo no es verdad??.Como segundo paso se abre el archivo con la instrucción fopen():archdisco = fopen(“cpp:acalumnos.dat”,”w”);Observar que el path es la dirección física de tu sitio en TU PC.Observar el doble diagonal () en el parámetro.La función fopen() cuando realiza el trabajo de abrir un archivo, regresa la direcciónfísica donde crea o graba el archivo en disco.• El primer parámetro o argumento en esta función es la UNIDAD de disco y elnombre del archivo.• El segundo parámetro o argumento es llamado modo y es una de los varios modosque podemos usar.“r” Lectura.“w” Escritura.“a”Append, si el archivo ya existe append empieza a añadir los nuevos datos al final del archivo yaexistente.“r+” Lectura y escritura, ya debe existir el archivo.“w+” Crea para lectura y escritura y si ya existe, sobrescribe.“a+” Crea o abre para lectura y append, sino existe el archivo será creado.En adición a los valores listados también es permitido agregar uno de los siguientescaracteres, pero insertándolo antes del signo + modo significado.t lo abre en modo texto.b lo abre en modo binario.Cuando se ha finalizado de escribir al archivo se debe cerrar y esto se hace con lainstrucción:fclose(archdisco);
  62. 62. GRABACION Y LECTURA DISCOComo ya se mencionó grabar y lectura de registros o estructuras a renglones o registrosde archivos en disco.Estos dos procesos son los casos más comunes y frecuentes que se pueden realizar con unarchivo de disco.GRABACION DE UNA ESTRUCTURA A UN ARCHIVO EN DISCOprog18.cpp#include <stdio.h>#include <conio.h>#include <string.h>struct {int matricula;char nombre[30];int edad;} alumno;void main() {clrscr();// captura de camposprintf("dame matricula :");scanf("%d",&alumno.matricula);getchar();printf("dame nombre :");gets(alumno.nombre);printf("dame edad :");scanf("%d",&alumno.edad);// grabando a discoFILE *archdisco;archdisco = fopen("cpp:acalumnos.dat","at+");fwrite(&alumno,sizeof(alumno),1,archdisco);fclose(archdisco);//avisando usuarioprintf("alumno insertado");getchar();getchar();}
  63. 63. Corrida:La primera observación es que se está usando el “fopen()” en modo “at+” en lugar demodo “w” pero es para matar dos pájaros de un tiro, reestudiar la clase anterior de modosde apertura.La única instrucción nueva es:fwrite(&persona,sizeof(alumno),1,archdisco);Como se observa ocupa 4 parámetros que son:Con apuntadores se manejan dos operadores diferentes que son ( * y &) el asterisco comoya se indicó se usa para crear una variable apuntador, es decir variables que almacenarandirecciones físicas de algún lugar de la memoria del computador.Por supuesto también que en ese espacio o bodega en memoria se almacenaran datos oinformación, es el operador & (ampersand) quien se usa para accesar a esos datos,ejemplo:Float *pi; aquí se crea una variable apuntador que guardara la dirección donde sealmacenara un valor de tipo float. Si en ese programa, se usa: pi= 3.1416, el compiladorprotesta porque se está pretendiendo almacenar un valor float en una variable que solopuede almacenar direcciones de memoria. Pero si es válido &pi=3.1416, es decir cuandousamos el operador ampersand estamos trabajando con el contenido de una dirección dememoria, es por eso que:1. PRIMER PARAMETRO: fwrite() ocupa primero conocer cuales datos va aalmacenar en disco, aquí se le está indicando que es el dato que se tiene en ladirección de memoria donde está el registro “alumno”.2. SEGUNDO PARAMETRO: fwrite(), ocupa conocer cuántos bytes de informacióndebe grabar, para esto se tienen dos opciones o se le da el valor exacto porejemplo 64 bytes o 39 bytes o más fácil aún se usa sizeof() que regresa eltamaño del dato.3. TERCER PARAMETRO: fwrite(), necesita conocer también cuantas estructuraso registros a la vez debe grabar por lo general es un solo registro, pero másadelante estudiaran que es posible grabar más de un registro a la vez y esto es demucho provecho, porque por ejemplo si en un sistema se ocupa grabar 1000registros y usamos fwrite() de uno en uno, quiere decir que habría mil accesosa disco.4. CUARTO PARAMETRO: fwrite() también ocupa conocer exactamente en quecluster, sector y byte exacto del disco duro debe grabar el registro, la primeraopción sería desarmar el disco duro y ver donde hay lugar para poner el archivo Jo mejor aún usar la variable archdisco que ya tiene esa dirección física del archivoen disco.
  64. 64. LECTURA DE REGISTROS Prog19.CPP<code>#include <stdio.h>#include <conio.h>#include <string.h>struct {int matricula;char nombre[30];int edad;}alumno;void main(){clrscr();// leyendo discoFILE *archdisco;archdisco = fopen(“cpp:acalumnos.dat”,”at+”);//aqui siempre debe empezar el ciclo de lectura y fread() regresasiempre cuantas estructuras leyowhile(fread(&alumno,sizeof(alumno),1,archdisco)==1){//desplegando estructurasprintf(“MATRICULA =%d ”,alumno.matricula);printf(” NOMBRE =%s ”,alumno.nombre);printf(” MESES =%d ”,alumno.edad);printf(“n”); };//aqui terminawhile//no olvidar cerrar archivo y siempre fuera de whilefclose(archdisco);getchar();getchar();}</code>
  65. 65. Corrida:Las únicas notas son: En fopen() se usó modo “a+”. En lugar de fwrite(), se usafread() con los mismos cuatro parámetros. También recordar que fread(), nosregresa la cantidad de registros que leyó del disco, por eso el ciclo while se convierte enfalso cuando fread() regresa 0 y esto indica que se llegó al fin del archivo. Y sería buenoque el despliegue fuese en una tabla pero esto queda de tarea.BUSQUEDA ARCHIVOS DIRECTOSEn este tema se analiza la búsqueda de un registro o renglón determinado.En este proceso el usuario del programa quiere que se despliegue un y solo un registro deinformación proporcionando un dato de búsqueda generalmente la clave del registro.Recordar que en esta operación se muestra la diferencia fundamental entre archivossecuenciales y archivos directos, es decir aquí se puede accesar directamente un registro ncualesquiera.Prog28.cpp#include <stdio.h>#include <conio.h>#include <string.h>struct {int clave;char nombre[30];int edad;} animalito;void main() {clrscr();// cargando clave a buscarprintf("dame clave buscar:");int claveb; scanf("%d",&claveb);//abriendo, leyendo,cargando estructuraFILE *archdisco;archdisco = fopen("cpp:acarchivo1.dat","ab+");
  66. 66. // usar fseek() para posicionarse al principio de registro//buscadofseek (archdisco, (long)(claveb)* sizeof(animalito), 0 );// ahora se lee el registrofread(&animalito,sizeof(animalito),1,archdisco);// desplegando estructura y asegurándoseprintf("%d ",animalito.clave);printf("%s ",animalito.nombre);printf("%d ",animalito.edad);printf("n");// no olvidar cerrar archivofclose(archdisco);getchar();getchar();}Corrida:Como se desprende del programa usando fseek() es posible posicionarse en cualquierbyte del archivo.El formato completo de fseek() es:fseek(apuntador,(long)(clave)*(sizeof(registro)),0);Donde los parámetros son:1. Apuntador al archivo en disco2. El segundo parámetro es el BYTE donde se quiere que empiece la lectura ograbación al archivo en disco.3. Este BYTE debe ser de tipo LONG así que si en algún programa de ejemplo venfseek( , 387L, ); que no les llame la atención, es otra manera de hacerlecast a un dato. Como va a estar difícil que se le atine a un byte determinado, espor eso que en el programa mejor se deja que sea el propio servidor quien calculeel byte donde empieza un registro determinado con clave * sizeof o tamaño deregistro.4. El tercer parámetro es a partir de donde se quiere posicionar el apuntador internodel archivo, los valores pueden ser:0 → SEEK_SET principio del archivo.1 → SEEK_CUR posición actual.2 → SEEK_END fin del archivo.
  67. 67. RECORDAR QUE ES MUY IMPORTANTE QUE LAS CLAVES GRABADAS EN UN ARCHIVODIRECTO TENGAN LA SECUENCIA 0,1,2,3,4,5…..NFILTROS O CONDICIONESOtro problema similar al anterior es el de filtros o condiciones, es decir en muchasocasiones es necesario obtener información acerca de un subconjunto de renglones delarchivo.Por ejemplo todos los estudiantes que sean mayores de 17 años, o todos los clientes quesean de Tijuana, etc. a esto le llamamos filtros o condiciones.También se resuelve de manera similar a los de archivos secuenciales es decir usando unciclo de lectura de todo el archivo e ir desplegando todos los registros que cumplan lacondición.Prog29.cpp#include <stdio.h>#include <conio.h>#include <string.h>struct {int clave;char nombre[30];int edad;} animalito;void main() {clrscr();// cargando clave a buscarprintf("EDAD MAYOR QUE >= :");int edad; scanf("%d",&edad);getchar();//abriendo, leyendo,cargando estructuraFILE *archdisco;archdisco = fopen("cpp:acarchivo1.dat","at+");// aqui siempre debe empezar el ciclo de lectura// y fread() regresa siempre cuantas estructuras leyowhile(fread(&animalito,sizeof(animalito),1,archdisco)==1){// desplegando estructura buscadaif (animalito.edad >= edad)

×