Programa 7
Desarrollar un programa que muestre el uso de las secuencias de escape.
Codificación en Borland C++ #include<conio> #include<iostream> int main() { cout<<"ntSECUENCIAS DE ESCAPEn"; cout<<"t——————–n"; cout<<" /n: Mueve el cursor al inicio del sgte renglonn"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<"n";getch(); cout<<"n /r: Mueve el cursor al inicio del renglon actualn"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<"r";getch(); cout<<"nn /t: Mueve el cursor una distancia a la derechan"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<"t";getch(); cout<<"nn /a: Enciende un pitido del sonido del sisteman"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<"a";getch(); cout<<"nn /': Muestra un apostrofe en la pantallan"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<" '";getch(); cout<<"nn /": Muestra una comilla en la pantallan"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<" "";getch(); cout<<"nn //: Muestra una barra invertida en la pantallan"; cout<<" Presione una tecla para ver el efecto"; getch();cout<<" /";getch(); cout<<"nn Press any key to go out"; getch();return 800; } | Explicación Como se habrán podido dar cuenta las secuencias son órdenes que se le dan al monitor, archivos o a la impresora. Las secuencias que se han nombrado se incrustan en un flujo de datos. De ahora en adelante usaremos constantemente las secuencias en nuestros programas. Creo yo que más explicación de no puede haber. Para no desperdiciar espacio voy a explicar algunas cosas por aquí. Anteriormente hemos visto a endl que incrustado en el flujo de datos abiertos por cout realiza el mismo trabajo que n. Esto quiere decir que se puede usar indistintamente ambos. Ya estamos viendo muy a menudo la palabra return al final de nuestro código. Esta es una palabra clave de Borland C++ heredado de C++. Cuando nosotros escribimos la instrucción: return 10; por poner un ejemplo le decimos al compilador que tome el valor 10 y lo almacene en algún lugar de la memoria. Este valor será llamado cada vez que se invoque a una función. Más adelante veremos como aprovechar este valor que se almacena en algún lugar de la memoria. Voy adelantarles un poco de información con respecto a las funciones. Las funciones son un tema que se va a tratar más adelante. Toda función diseñada por el usuario tendrá una estructura o prototipo. La sintaxis para declararar funciones es: tipoDeDato nombreDeLaFunción (argumentos); Ejemplo: int Suma(int a, int b); En este ejemplo se declarado una función. Esta función devuelve un valor entero. El nombre de la función es Suma. Los parámetros o argumentos que recibe son dos; a y b, ambos de tipo entero. Ahora dejamos de lado lo que son las funciones para hablar un poco del lenguaje Borland C++. Algunos pueden estar dudando de la potencia del lenguaje y estar pensando que hasta ahora no han aprendido nada. Deben considerar que ahora estamos desarrollando aplicaciones para el sistema operativo MS-DOS o plataforma similar. En este tipo de aplicaciones no es muy fácil mostrar palabras tildadas en la consola como ya se han dado cuenta. Sí están preguntando cuando vamos a empezar a desarrollar juegos y todo lo demás, entonces deberán ponerse las pilas para poder avanzar rápidamente en su aprendizaje del lenguaje Borland C++ con el paradigma de programación: Programación Estructurada (PE) que es lo que estamos haciendo actualmente. |
Operadores aritméticos
En Borland C++ se definen 5 operadores básicos que nos servirán para construir operaciones más complejas.
Operador | Acción |
– (menos) | Este el símbolo menos y se usará para restar números de cualquier tipo. |
+ (mas) | Este símbolo se usará para sumar dos números de cualquier tipo. |
* (por) | Este símbolo se usará para multiplicar dos números de cualquier tipo. |
/ (división) | Este símbolo se usará para dividir dos números de cualquier tipo. |
% (módulo) | Este símbolo se usará para hallar el resto de la división de dos números enteros. |
Las reglas de agrupación y jerarquía de los operandos es como nosotros acostumbramos. Por ejemplo: En la operación 4+6×7 el compilador primero multiplicará y luego sumará,
Programa 8
Desarrollar un programa que opere 2 números y obtenga los resultados sgtes: resta, suma, producto, cociente y el resto de dividir el primer número con el segundo.
Codificación en Borland C++ #include<iostream> #include<conio> int main(int a,int b) { cout<<"ntBORLAND C's BASIC OPERATIONSn"; cout<<"t—————————-n"; cout<<"nIngrese numero: ";cin>>a; cout<<"Ingrese otro numero: ";cin>>b; cout<<"nLa resta es: "<<(a-b)<<endl; cout<<"La suma es: "<<(a+b)<<endl; cout<<"El producto es: "<<(a*b)<<endl; cout<<"La division es: "<<(a/b)<<endl; cout<<"El resto es: "<<(a%b)<<endl; cout<<"nPress a key to finalizen"; getch(); return 36; } | Explicación La novedad en este código fuente es el haber declarado dos varianbles; a y b en la zona de argumentos de la función main y no en la el cuerpo del mismo. Las variables declaradas son de tipo int por que el operador módulo (%) solo se aplica a los números de tipo int (entero). Si nos vamos a la instrucción: cout<<"La resta es: "<<(a-b); podemos notar como hemos incrustado a través del flujo el valor resultante de restar la variable a con b. Lo mismo hemos hecho con todos los demás resultados. Podríamos haber declarado una variable c de tipo int con la intención de hacer: c=a-b; para luego mostrarlo en pantalla con la instrucción: cout<<"La resta es: "<<c; Hacer esto sin embargo por ahora no tiene mucha importancia ya que dicho valor solamente serviría para mostrarlo en pantalla. |
Para poder hacer algo, primero debemos tener una necesidad. En nuestro campo (informática) también será así. No podemos poder desarrollar ni un solo programa nuevo sino no tenemos necesidad alguna por algún software. Como ya sabemos, "programar" es encontrar una solución adecuada y óptima a un problema. Las principales características de un programa son: tamaño (medido en múltiplos de un byte), estabilidad o solidez (el programa no se "cuelga") y versatilidad o eficacia (el programa es muy bueno en lo que hace). Estas características son las que harán exitoso a nuestros programas. La relación entre estas características es:
Esta la relación perfecta para cualquier programa. Osea menor tamaño, alta solidez y eficacia. ¿Por que bajo tamaño? La respuesta a eso está la ganancia de velocidad a la hora de cargarse en la memoria el programa. Las otras dos características se responda solas ¿verdad?. Para implementar estas características en nuestros programas será necesario disciplinarmos un poco y volvernos muy analistas. Un programa refleja en algo el carácter del programador.
Ahora hablaremos un poco de las variables. Las variables pueden clasificarse en variables de entrada y/o salida. Es muy importante tener la capacidad de anticipar (en el mejor de los casos) las variables que podamos necesitar para poder elaborar nuestros programas. También es útil utilizar identificar el tipo de la variable. Más adelante veremos con más detalle las ventajas de usar variables de un tipo con respecto a otro.
Recordando… En algebra estamos acostumbrados a trabajar con ecuaciones ¿verdad? Observe la ecuación siguiente: X=4 ¿Qué podemos deducir? Lo podemos deducir es que la variable x tiene un valor igual a 4. Osea que sí sumamos X+8 el resultado será 12 ¿cierto?. Ahora, también estamos acostumbrados a esto: 2Y=Y+6 ¿verdad? Si resolvemos la ecuación hallaríamos que la variable Y tiene un valor igual 6. Ahora, Qué pasa sí propongo la ecuación: Z=Z+6? La respuesta a esto en algebra no tiene solución o en todo caso la solución es el conjunto vacío. Cuando programemos usaremos la expresión Z=Z+10 (por poner un ejemplo) muchas veces con la finalidad de ahorrar la declaración de variables en exceso.
Ahora voy a proponer la instrucción sgte:
A=10;
A=A+5;
Como entendemos esto? Primeramente hay que entender la computadora no sabe resolver ecuaciones. En la instrucción: a=10; le decimos al compilador que almacena el valor 10 en la variable A. En la segunda instrucción le decimos al compilador que almacene en la variable A la suma de del valor de A con 5. En otras palabras la instrucción: A=A+5; es lo mismo que escribir: A=10+5;
Programa 9
Elabore un programa que muestre todo los submúltiplos de una cantidad de dinero dado.
Las monedas existentes son: 1 sol, 2 soles y 5 soles
Los billetes existentes son: 10 soles, 20 soles, 50 soles, 100 soles y 200 soles
Ejemplo: Sí el dinero fuese 45 soles entonces el programa deberá mostrar que existen 2 billetes de 20, 2 monedas de 2 soles y 1 moneda de un sol.
Codificación en Borland C++ #include<conio> #include<iostream> float main() { int dinero; cout<<"ntSUBMULTIPLOS DE MI DINEROn"; cout<<"t————————-n"; cout<<"nCantidad de dinero: ";cin>>dinero; cout<<"nCalculando submultiplos…n"; cout<<"nHay "<<dinero/200<<" billetes de S/.200n"; dinero=dinero%200; cout<<"Hay "<<dinero/100<<" billetes de S/.100n"; dinero=dinero%100; cout<<"Hay "<<dinero/50<<" billetes de S/.50n"; dinero=dinero%50; cout<<"Hay "<<dinero/20<<" billetes de S/.20n"; dinero=dinero%20; cout<<"Hay "<<dinero/10<<" billetes de S/.10n"; dinero=dinero%10; cout<<"nHay "<<dinero/5<<" monedas de S/.5n"; dinero=dinero%5; cout<<"Hay "<<dinero/2<<" monedas de S/.2n"; dinero=dinero%2; cout<<"Hay "<<dinero<<" monedas de S/.1n"; cout<<"nPress any key to finishn"; getch();return 19.87; } | Explicación En este programa solo hemos declarado la variable dinero. Como ya se habrá podido dar cuenta este es una manera de poder desarrollar el programa solicitado. Tal vez usted tenga otra idea diferente de como desarrollar el programa. Sí ese fuera el caso entonces usted deberá compararlos y analizarlos para aprovechar lo mejor de ambos códigos. El valor del dinero que es ingresado por el usuario se guarda en la variable dinero. Lo primero que hice fue calcular cuantos billetas existen de 200. Esto se logra en la instrucción: cout<<"Hay "<<dinero/200<<"…"; En la instrucción: dinero=dinero%200; lo que se hace es guardar el resto de dividir el valor de la variable dinero con 200. Esto es necesario puesto que se desea que el programa halle los submúltiplos del dinero en forma decreciente. Una vez hecho esto la variable dinero ahora almacena un nuevo valor que será interpretado como dinero restante que no es múltiplo de 200. Como esta cantidad no es múltiplo de 200 entonces tendrá que serlo de 100, de no serlo se verá reflejado en el resultado de dividirlo por 100. Sí este fuera el caso el resultado de dividir por 100 sería 0. En la instrucción siguiente se logra esto: cout<<"Hay "<<dinero/100<<"…"; Como puede notar se ha seguido el mismo paso para poder hallar los submúltiplos menores. Debe recordar que el operador % (módulo) no se aplica a números enteros. Además también debe notar que cuando se divide un número de tipo int con otro también de tipo int, el resultado es un número de tipo int. Cuando una variable de tipo int se vea en "peligro " de almacenar un decimal este se redonde al menor entero posible. Ejemplo: int A=13/5; En este caso 13/5 es 2,6. Este valor será redondeado a 2 por que la variable A es de tipo int (entero). |
La función miembro getline()
Hasta ahora hemos visto la utilización del objeto cin con su acompañante >> (operador de extracción). Para entender lo que voy a tratar de explicar voy a declar una variable así: char nombre[100]; Como ya saben, esta variable de tipo char será capáz de almacenar 99 caracteres. Ahora voy a escribir otra instrucción: cin>>nombre; En esta instrucción se hace una parada y se empieza a extraer lo que se pulse en el teclado. Suponga que yo escriba: Carlos Torres Torres. Ahora sí escribo esta otra instrucción: cout<<nombre; ¿que creen que mostrará en la pantalla? Lo que se mostrará será tan solo: Carlos y lo demás no se mostrará. Eso es por que el operador >> incrustará todos los caracteres hasta encontrar el primer espacio en blanco o el simbolo . Lo demás no será guardado en la variable. Para poder guardar espacios en blanco se usará la función miembro getline().
La sintaxis es: cin.getline(nombreDeLaVariable,tamañoDeLaVariable); Ejemplo: cin.getline(nombre,100);
Programa 10
Elabore un programa que registre datos del usuario. Estos datos son al gusto del mismo.
Codificación en Borland C++ #include<iostream> #include<conio> double main() { char nomApe[200],fechNac[60]; char sex[15]; float est,pes; int eda; cout<<"ntREGISTRO DE DATOSn"; cout<<"t—————–n"; cout<<"Apellidos y Nombres: ";cin.getline(nomApe,200); cout<<"Fecha de nacimiento: ";cin.getline(fechNac,60); cout<<"Sexo: ";cin.getline(sex,15); cout<<"Estatura (metros): ";cin>>est; cout<<"Peso (kilogramos): ";cin>>pes; cout<<"Edad: ";cin>>eda; cout<<"nMostrando datos del usuario actual…n"; cout<<"nApellidos y Nombres: "<<nomApe<<endl; cout<<"Fecha de nacimiento: "<<fechNac<<endl; cout<<"Sexo: "<<sex<<endl; cout<<"Estatura (metros): "<<est<<endl; cout<<"Peso (kilogramos): "<<pes<<endl; cout<<"Edad: "<<eda<<endl; cout<<"nPress any key to finish"<<endl; getch();return 12.63; } | Explicación En el código fuente de este programa se ve el uso de la función miembro getline(). Se le llama función miembro por que es una función y además está en el interior de una clase [véase clase en el ANEXO]. Con el uso de cin y su función miembro getline() se acabaron los problemas de ingreso de datos a través del teclado. Sin embargo se debe aclarar que hay un pequeño problemite cuando se usa getline después de cin. Para explicar este problema voy a escribir 4 instrucciones seguidas. Así: int A; … Instrucción 1 char B[5]; … Instrucción 2 cin>>A; … Instrucción 3 cin.getline(B,5); … Instrucción 4 cout<<"Chau!!!"; … Instrucción 5 Cuando llegue a la instrucción 3 como ya saben se hará un paro para poder ingresar datos a través del teclado. Cuando ya no se desee ingresar más datos se presionará la tecla Enter para finalizar. Luego no se hará un paro en la instrucción 4 como debería suceder. Esto se debe a que getline capta el último caracter almacenado en el buffer [véase buffer en el ANEXO] de la memoria. Este último caracter viene a ser más que nada el null (nulo) o símbolo especial . Esto hace que se finalice el parado en la instrucción dando como resultado que se efectue la instrucción 5. Para evitar este pequeño error se usará otra función miembro llamada ignore(). La sintaxis que usará será: cin.ignore(); Esto evitará que getline capte el último caracter especial haciendo que trabaje correctamente. |
Manipulación y formateo de los datos en la salida por pantalla
Para mejorar el aspecto de los datos en la salida se usarán los manipuladores y formateadores. Estos serán incrustados en el flujo abierto por cout.
Manipulador | Descripción |
dec | Convierte número a base decimal. |
hex | Convierte número a base hexadecimal. |
oct | Convierte némero a base octal. |
endl | Inserta una nueva línea y limpia el flujo. |
ends | Inserta un cero nulo (/0) al final de la cadena. |
flush | Limpia el flujo de salida. |
setbase(int n) | Convierte número a base n. Este n puede ser 0 (por defecto) o 10 para el decimal, 8 para el octal y 16 para el hexadecimal. |
resetiosflags(long) | Limpia el formato especificado por el indicador f. |
setiosflags(long f) | Establece el formato determinado por el indicador f. |
setfill(int c) | Coloca c el campo establecido por setw(). |
setprecision(int n) | Especifica la cantidad de decimales de un real. |
setw(int n) | Establece un ancho de campo. |
Tabla de indicadores de formato usados por setiosflags
Indicador | Acción |
ios::left | Justifica la salida a la izquierda dentro del campo especificado por setw(). |
ios::right | Justifica la salida a la derecha dentro del campo especificado por setw(). |
ios::scientific | Muestra números de coma flotante en notación científica. |
ios::fixed | Muestra en formato de punto fijo los números de coma flotante. |
ios::dec | Formatea (modifica) los números a base 10 |
ios::hex | Formatea los números a base 16 |
ios::oct | Formatea los números a base 8 |
ios::uppercase | – |
ios::showbase | – |
ios::showpos | – |
ios::showpoint | – |
Programa 11
Desarrollar un programa que muestre el uso de los manipuladores de Borland C++.
Codificación en Borland C++ #include<iostream> #include<conio> #include<iomanip.h> //Para usar manipuladores de datos int main() { int Z=86400; //Variable solo para muestra float W=62.5126; //Variable solo para muestra cout<<"ntMANIPULACION Y FORMATEO DE DATOSn"; cout<<"t——————————–n"; cout<<setiosflags(ios::left); /*Justifica la salida por la izquierda dentro del ancho de campo de setw()*/ cout<<"n"<<setw(17)<<"Manipulador"<<"Descripcionn"; cout<<setw(18)<<"nsetw(int n)";cout<<"Establece un campo de ancho nn"; cout<<"n"<<setw(17)<<"dec"<<"Convierte numero a base decimaln"; cout<<"Ejemplo: Z = 0x0"<<hex<<Z<<" en base hexadecimal"; cout<<" a Z = "<<dec<<Z<<" en base decimaln"; cout<<"n"<<setw(17)<<"hex"<<"Convierte numero a base hexadecimaln"; cout<<"Ejemplo: Z = "<<Z<<" en base decimal"; cout<<" a Z = 0x0"<<hex<<Z<<" en base hexadecimaln"; cout<<"n"<<setw(17)<<"oct"<<"Convierte numero a base octaln"; cout<<"Ejemplo: Z = "<<dec<<Z<<" en base decimal"; cout<<" a Z = "<<oct<<Z<<" en base octaln"; cout<<"n"<<setw(17)<<"endl"<<"Inserta una nueva linea y limpia el flujon"; cout<<"Presione una tecla para ver sus efectos"; getch();cout<<endl;getch(); cout<<"n"<<setw(17)<<"ends"<<"Inserta un cero nulo (/0) al final de la cadenan"; cout<<"Nota: este caracter no es visiblen"; cout<<"Presione una tecla para ver sus efectos"; getch();cout<<ends;getch(); cout<<"nn"<<setw(23)<<"flush"<<"Limpia el flujo de salidan"; cout<<"Presione una tecla para ver sus efectos"; getch();cout<<flush;getch(); cout<<"nn"<<setw(23)<<"setbase(int n)"<<"Formatea numero a base nn"; cout<<"Ejemplo Z = "<<Z<<" en base octal"; cout<<" a Z = "<<setbase(10)<<Z<<" en base decimaln"; cout<<"n"<<setw(23)<<"setfill(int c)"<<"Coloca c en el campo de setw()n"; cout<<"Ejemplo: "<<setfill(2)<<setw(10)<<"HOLA"; cout<<"nn"<<setw(23)<<"setprecision(int n)"<<"Determina la precision de punto flotanten"; cout<<"Ejemplo: INICIO W = "<<W<<" LUEGO W = "<<setprecision(5)<<W; cout<<"nnPress any key to finishn"; getch();return 1821; } | Explicación En este programa es necesario el uso de la biblioteca iomanip pues en ella se encuentran los prototipos de las 5 funciones; setiosflags(), setw(), setbase(), setfill(), setprecision() y resetiosflags(). Espero que con este programa sean capaces de entender la importancia de dominar el uso de estas herramientas. El efecto de dominar estas herramientas se verán reflejadas visualmente en los programas que desarrollen. El aspecto de sus programas serán más profesional y el código fuente más sofisticado. Sin embargo en este programa no se ha mostrado el uso de los manipuladores setiosflags() ni de resetiosflags(). Esto es porque hacer esto haría el código fuente más extenso de lo que es. Sin embargo de ahora en adelante los usaremos. Ud. podrán ver su utilización en el código fuente de nuestros próximos programas. Hay algunos manipuladores un tanto especiales como por ejemplo el ends, flush y setfill(). El manipulador ends inserta como ya se dijo el símbolo null () al final de la cadena que escribamos. Recuerde que toda cadena debe (no es obligatorio) por razones de efectividad tener al final el null. Antiguamente era necesario insertar manualmente este símbolo. En los lenguajes modernos como Borland C++ esto se hace automáticamente. El caracter null no tiene representación gráfica (no es visible). Ahora, qué pasa con el manipulador flush? La verdad es que yo tampoco sé cual es su utilización práctica. Cuando lo sepa les digo para que sirve. El manipulador setfill(int n) inserta el caracter de código ASCII n [véase ASCII en el ANEXO] en el campo establecido por setw(). Más explicación creo que ya no es necesario puesto que usted está experimentando con el código fuente que se le está dando así que no hay problema. Lamentablemente no puede dejar vacío esta parte de la tabla. Es por eso que vamos a ser una pequeño reflexión filosófica. Seguramente usted estimado lector busca el tan ansiado título de hacker (en el mejor de los casos) que le hará sentirse bien consigo mismo y sobre todo le dará confianza en todo lo que haga. Seguramente es por eso que se esfuerzo mucho en investigar y experimentar. Con eso puedo adivinar que sus campos preferidos son la informática y la electrónica. Así es no podemos ser completos si ignoramos por completo la parte hardware. Como muchos han dicho es más fácil aprender experimentando que leyendo. En el caso del ser humano las personas aprenden más con la práctica que con teoría. Lamentablemente en el campo de la informática solo vamos a poder experimentar con códigos. En el campo de la electrónica se experimenta con transistores. Qué pasa si vamos acumulando conocimientos tanto informáticos como electrónicos? La respuesta a eso es que está naciendo un hombre que puede resolverlo todo (es un decir) o almenos va a tener un mundo de posibilidades más amplios de visión. Ahora, muchos de ustedes dirán pero aprendar tantas cosas es muy difícil. Eso es absolutamente verdadero pero si siempre continuamos investigando el exito está asegurado. Recuerdo que usted tiene un invencible aliado: La Globalización. La globalización ha hecho posible el poder conectarnos de forma indirecta con miles de personas en el mundo. Le recomiendo no buscar respuestas a preguntas simples. ¿Qué son preguntas simples? Las preguntas simples son aquellas sin ninguna importancia. Por ejemplo: encontrar la solución a una ecuación de de grado 8. Estas preguntas son simples por que a todo rato en el mundo se está estudiando. En cambio sí usted va preguntándose por ahí como aprovechar al máximo los conocimientos que posee? entonces eso ya es otra cosa. Ud. es un hombre temible, que sabe lo que está haciendo y sabe el camino que le espera. Para terminar estimado lector quiero decirle que no busque abundante conocimiento sino busque aplicarlos. Los inteligentes buscan un deseo antes, los tontos buscan hacer algo pero no saben que. |
Bueno!. Estimados lectores, ha llegado la hora de decirles que están ustedes capacitados para elaborar programas. Ha llegado la hora de hacer un montón de programas!!!
FULL PRÁCTICA
Programa 12
Desarrolle un programa que halle la suma de los N primeros números naturales.
Solución
Lo primero que debemos hacer es entender el problema. Sí no entendemos el problema deberemos buscar a alguien que sí los pueda entender. Sí después de buscar no encontramos a alguien que los entienda pasamos al siguiente problema. En un programa también es lo mismo. Lo primero es entender qué es lo que se supone que hará el programa? Sí ya se sabe lo que va a ser el programa entonces ya todo está resuelto.
Para poder resolver este problema lo primero que hay que hacer es reconocer los datos que tenemos. Sí observamos con atención la parte "los N primeros números naturales" encontramos a N. Quién es N? Este valor se supone será ingresado por el usuario. Entonces N es una variable de Entrada. Ahora qué hacemos luego de pedir el valor de N? Exacto!, tendremos que encontrar un algoritmo que halle la suma con el dato N.
Gráficamente lo que piden es esto: 1 + 2 + 3 + … + N. A continuación nos ponemos pequeños ejemplos. Qué pasa sí N es 3. Lo que nos piden sería: 1 + 2 + 3 que sería igual a 6. Ahora, qué pasa se N fuese 5. En este caso lo se nos pide sería: 1 + 2 + 3 + 4 + 5. Todos sabemos que esta suma la podemos hacer hasta contando con los dedos. Ahora qué pasa sí N fuese 100? En este terrible caso nos estaría pidiendo sumar: 1 + 2 + 3 + … + 100 que no lo podríamos sumar (es un decir) ni con papel y lápiz y sí lo hiciésemo demoraríamos tanto que olvidaríamos hasta casarnos. Nosotros solo hemos tomado solo 3 posibles valores de los infinitos que podría haber tomado N. Entonces tendremos que hallar una fórmula que permita representar la suma para cualquier valor de N.
Para hallar la fórmula (algoritmo) hacemos:
Creo que todos ya conocían la fórmula de esta suma y Carl Friedrich Gauss; gran matemático quien fue su descubridor a los 6 años de edad.
Codificación en Borland C++ #include<iostream> #include<conio> void main(int N,int S) { cout<<"ntSUMA DE LOS N PRIMEROS NUMEROS NATURALESn"; cout<<"t—————————————-n"; cout<<"n1 + 2 + 3 + … + Nn"; cout<<"nIngrese un valor para N: ";cin>>N; //ALGORITMO QUE HALLA LA SUMA S=N*(N+1)/2; cout<<"La suma es: "<<S<<endl; cout<<"nPress any key to finishn"; getch(); } | Diagrama Nassi / Scheiderman (N/S)
Como ya observaron el uso de diagramas N/S se basa en el uso de cajas o rectángulos para representar el algoritmo de un programa. |
Programa 13
En la empresa Denver un trabajador cuenta con seguro obligatorio y es libre hacer horas extras. Por el seguro al obrero se le descuenta el 5% de su sueldo. El pago por hora extra es 30% más que el de una hora normal. Además la empresa ofrece una bonificación igual al 30% del ingreso total del trabajador.
Con todo esto se pide desarrollar un programa que elabore la boleta de pago de un trabajador.
Codificación en Borland C++
#include<conio> //Para usar getch() y gotoxy()
#include<iostream>
#include<iomanip> //Para usar setw()
void main()
{
char cod[60];
int horE,horN;
float pagHorE,pagHorN,sueE,sueN,sueNet;
float bonifi,ingTotal,seguro;
gotoxy(35,2);cout<<"BOLETA DE PAGO";
gotoxy(35,3);cout<<"————–";
gotoxy(3,6);cout<<"Codigo del trabajador……..: ";cin.getline(cod,60);
gotoxy(3,8);cout<<"Horas normales trabajadas….: ";cin>>horN;
gotoxy(3,9);cout<<"Pago x hora (S/.)…………: ";cin>>pagHorN;
gotoxy(40,8);cout<<"Horas extras trabajadas…: ";cin>>horE;
gotoxy(1,11);cout<<"———————————————————————–";
sueN=pagHorN*horN;
gotoxy(3,13);cout<<"Sueldo Normal…: "<<sueN;
pagHorE=pagHorN+(3*pagHorN)/10;
sueE=pagHorE*horE;
gotoxy(3,14);cout<<"Sueldo Extra….: "<<sueE;
ingTotal=sueE+sueN;
bonifi=(3*ingTotal)/10;
gotoxy(3,15);cout<<"Bonificacion….: "<<bonifi;
seguro=sueN/20;
gotoxy(40,13);cout<<"Costo del seguro…: "<<seguro;
gotoxy(1,17);cout<<"———————————————————————–";
sueNet=ingTotal+bonifi-seguro;
gotoxy(24,19);cout<<"SUELDO NETO: "<<sueNet;
gotoxy(19,20);cout<<"—————————";
gotoxy(3,22);cout<<"Press any key to finish";
getch();
return; //Main no devuelve ningún valor (void)
}
¿Qué significa inicializar una variable?
Inicializar una variables es la posibilidad de darle un valor a la misma a la hora de declararlo.
Ejemplo:
int A=8,B=0,C=-60;
char SAL[]="Hola",OPC='S',pal[10]={'A','M','O','R'};
Programa 14
A una reunión asisten N personas. Desarrolle un programa que muestre la cantidad de apretones de manos que habrá.
Solución
Este problemita se resuelve muy fácil. Lo primero como ya dijimos es hallar los datos que nos dan. En este caso será el número de personas que asistirán a la reunión. Dicha cantidad la representaremos con la variable N. Ahora sí nos ponemos a pensar y usamos la forma inductiva para resolver el problema… sería bueno plantearnos pequeños casos:
Caso 1: Asisten N=1 personas a la reunión. En este caso no hay saludo puesto que para que haya saludo debe haber de por lo menos 2 personas.
N=1, #saludo=0, #apretones=0
Caso 2: Asisten N=2 personas a la reunión. En este caso hay 2 saludos y un apretón de mano.
N=2, #saludos=2, #apretones=1
Caso 3: Asisten N=3 personas a la reunión. En este caso hay 6 saludos y 3 apretones de mano.
N=3, #saludos=6, #apretones=3
Caso 4: Asisten N=4 personas a la reunión. En este caso hay 12 saludos y 6 apretones de manos.
N=4, #saludos=12, #apretones=6
Los resultados anteriores lo hemos determinado por experiencia pero no vamos a estar experimentando para más casos puesto que sería muy agotador e innecesario.
Analizando otra vez tenemos:
N = 1 entonces #saludos = 0 = 1 * 0 y #apretones = 0 = #saludos/2
N = 2 entonces #saludos = 2 = 2 * 1 y #apretones = 1 = #saludos/2
N = 3 entonces #saludos = 6 = 3 * 2 y #apretones = 3 = #saludos/2
N = 4 entonces #saludos = 12 = 4 * 3 y #apretones = 6 = #saludos/2
N = m entonces #saludos = m * ( m – 1 ) y #apretones = m * ( m – 1 ) / 2
Otra forma de resolver sería pensando así: Como en la reunión asisten N personas es obvio que cada persona saludará a las restantes personas. Entonces el número de saludos (incluidos los repetidos) será N*(N-1) y como en cada saludo intervienen 2 personas eso quiero decir que sí el primero saludo al segundo también se está incluyendo el saludo del segundo al primero. #saludos=2#apretones. Despejando tenemos la solución: #apretones=#saludos/2=N*(N-1)/2.
Codificación en Borland C++ #include<conio> #include<iostream> int main() { int N,apreTot; cout<<"ntCUANTOS APRETONES DE MANOS HAY?n"; cout<<"t——————————-n"; cout<<"Numero de personas: ";cin>>N; //ALGORITMO PRINCIPAL apreTot=N*(N-1)/2; cout<<"Hay "<<apreTot<<" apretones de manosn"; cout<<"nPress any key to finishn"; getch();return-45; } | Diagrama N/S |
Programa 15
Se tiene un cuadrado de lado X cuyos puntos medios se han unido para formar otro cuadrado. Ahora, los puntos medios se han vuelto a unir para volver a formar otro cuadrado. La acto de unir los puntos medios de los nuevos cuadrados es contínuo. Desarrolle un programa que calcule la suma de las áreas de todos los cuadrados así formados.
Solución
Graficando…
St: Suma de las áreas totales
St = S1+ S2+S3+…+Sn
S1: Area del 1er cuadrado
S2: Area del 2do cuadrado
S3: Area del 3er cuadrado
Sn: Area del cuadrado
S1=X*X, ahora, para calcular el S2 se necesita conocer la medida de su lado.
Para conocer su lado hay observar … El lado de ese cuadrado viene a ser la hipotenusa del triángulo rojo cuyo catetos miden X/2 y X/2. Ahora falta calcular la hipotenusa. La hipotenusa lo calcularemos aplicando el teorema de Pitágoras. Que la medida de la hipotenusa sea H. Entonces tenemos: H2 = (X/2)2 + (X/2)2 = X2/4 + X2/4 = X2/2. Despejando … H=X/√2. Ahora toca calcular el S3. Esto se logrará conociendo su lado. En este caso como en la anterior el lado viene a coincidir con la hipotenusa del tríangulo amarillo. Llamemos L a la hipotenusa. L2 = (H/2)2 + (H/2)2 = H2/2 = X2/4. Sí hallamos el área del cuadrado siguiente comprobaríamos que el resultado sería X2/8.
Veamos nuevamente los resultados obtenidos:
S1=X2
S2=X2/2
S3=X2/4
S4=X2/8
St = X2 + X2/2 + X2/4 + X2/8 + …
St = X2 + 1/2 ( X2 + X2/2 + X2/4 + … )
St = X2 + 1/2 ( St )
St – St/2 = X2 Por tanto St = 2*X2
Codificación en Borland C++ #include<iostream> #include<conio> int main() { int X,S; cout<<"ntPROGRAMA 15n"; cout<<"t———–n"; cout<<"Ingrese el lado del cuadrado: ";cin>>X; S=2*X*X; cout<<"La suma de las areas de todo los cuadrados es: "<<S<<endl; cout<<"nPresione una tecla para finalizarn";getch(); } | Diagrama N/S
|
Constantes
Todo el mundo sabe lo que es una constante o almenos sabe interpretarlo ¿verdad?. Una constante es algo que no cambia nunca.
Para declarar una constante en Borland C++ se sigue la sintaxis sgte: const tipoDeDato Nombre;
Ejemplo: const int pi=3.1415;
Programa 16
Desarrolle un programa que calcule el área de la superfice definido por una circunferencia de radio conocido.
Solución
Todos nosotros sabemos por geometría básica que el círculo es el producto de la constante pi=3,1415 multiplicado por el radio al cuadrado.
Definiendo Entrada/Salida (E/S) de datos:
Entrada: El radio de la circunferencia (radio)
Salida: El círculo (circulo)
Codificación en Borland C++ #include<conio> #include<iostream> void main() //FUNCION PRINCIPAL { //Declaración de variables y constantes int radio; float circulo; const float pi=3.1415; cout<<"ntCALCULA EL CIRCULOn";//Escribe o muestra (imprime) mensaje cout<<"t——————n"; //Ingreso de datos cout<<"nIngrese el radio: ";cin>>radio; //Calcula el círculo circulo=pi*radio*radio; //Escribe resultado cout<<"nEl circulo es: "<<circulo<<endl; cout<<"nPress any key to finsh"; getch();//Pausa para ver los resultados } | Pseudocódigo Inicio ingresar radio calcular circulo=3.1415*radio*radio mostrar circulo Fin Aquí vemos la utilización del pseudocódigo para representar a nuestro programa. Este pseudocódigo básicamente muestra la estructura (esqueleto) de nuestro programa. Observaciones:
|
Programa 17
Desarrolle un programa que calcule la suma de los N primeros números pares.
Solución
Definiendo E/S de datos:
Entrada: número N
Salida: suma de los números (suma)
suma = 2 + 4 + 6 +…+ N
suma = 2 ( 1 + 2 + 3 +…+ N/2 ) Recuerde… N es par
suma = 2 N/2 ( N/2 + 1 )/2 = N ( N/2 + 1 )/2
Codificación en Borland C++ #include<conio> #include<iostream> void main() { //Declarando variables int N,suma; cout<<"ntSUMA DE LOS N PRIMEROS PARESn"; cout<<"t—————————-n"; cout<<"n2 + 4 + 6 +…+ Nn"; //Ingreso datos cout<<"nIngrese N: ";cin>>N; //Calcula suma suma=N*(N/2+1)/2; //Escribe resultados cout<<"nLa suma es: "<<suma<<endl; //Pausa cout<<"nPress any key to finishn";getch(); } | Pseudocódigo Inicio Lee N Calcular suma=N*(N/2+1)/2 Imprimir suma Fin Diagrama N/S |
Programa 18
Lea dos números. El primero vendrá a ser la unión del dia y mes de su nacimiento. Ejemplo sí su fecha de nacimiento es: 14 de septiembre o 14 del 09 la unión sería: 1709. El segundo número será la edad que usted tiene. Luego realice los cálculos siguientes:
- Multiplique al primer número 2
- Súmele 5 al nuevo resultado
- Multiplíquelo por 50 al resultado anterior
- Al resultado anterior réstele 250
Una vez hecho esto el resultado tendrá un valor igual a la union del primer número con el segundo. Este juego es conocido en los círculos matemáticos como "Juego de sociedades".
Solución
Definiendo E/S de datos:
Entrada: número n1 y n2
Salida: calcular resultado=(((n1*2)+5)*50+n2)-250
Codificación en Borland C++ #include<conio> #include<iostream> void main() { int n1,n2,resultado; cout<<"ntJUEGO DE SOCIEDADn"; cout<<"t—————–n"; //Ingreso de datos cout<<"Ingrese numero: ";cin>>n1; cout<<"Ingrese otro numero: ";cin>>n2; //Calcula resultado resultado=(((n1*2)+5)*50+n2)-250; //Imprime resultado cout<<"El resultado es: "<<resultado; getch();//Pause } | Diagramas de flujo de dato
Aunque no he explicado muy bien como usar los diagramas de flujo, almenos pueden notar como se usan los diagramas. Cada diagrama tiene un significado especial. |
Como usar los diagramas de flujo de datos?
A mí en lo particular me gusta realizar mis programas usando diagramas de flujo. Con ellos puede darle un aspecto más agradable a mi algoritmo a parte de que la lógica del mismo es facilmente apreciable. Sí quieren saber de forma más clara lo que son los diagramas de flujo allá les va esto: Los diagramas de flujo sirven para representar gráficamente a cualquier algoritmo. Los diagramas que se usan han sido normalizados por el Instituto Norteamericano de Normalización (ANSI). Utilizando adecuadamente los diagramas o símbolos podemos graficar la lógica de nuestro programa. Cada símbolo tiene una acción bien definida.
Tabla de digramas y sus acciones
Diagrama o símbolo | Nombre: Acción |
Carácter de parada o Terminal: Representa al Inicio o Fin un programa. Representa además una parada o interrupción. | |
| Datos o Entrada/Salida (E/S): Sirve para leer o imprimir datos. |
| Proceso: Este símbolo se usará cuando queramos procesar cualquier dato. |
| Conector: Sirve para enlazar dos partes cualesquiera de un diagrama de flujo a través de un conector en la salida y otro en la salida. |
Conector off-page o Conector fuera de página: Se utiliza cuando se quiera conectar dos flujos lógicos. | |
| Decisión: Esto se utilizará cuando el programa tenga dos posibilidades da salida que dependerán del valor de una condición lógica. |
Estos no son los únicos símbolos que existen, hay muchos más!!!. Sin embargo estos son los que usaremos por ahora.
Conversiones de tipos de dato
Cuando declaramos dos variable, por ejemplo: int A; y float B; sabemos muy bien lo que estamos haciendo ¿verdad?. Sí eso es cierto entonces no podemos tratar de guardar el valor de 3.5 (real) en la variable A de tipo int pues ella almacenará solo enteros. Sin embargo podemos cometer esta imprudencia en forma incosciente. Sí esto sucediese los resultados no serían de nuestro agrado. Cuando estemos obligados a esto usaremos el método cast (moldear). Ejemplo:
int A; …instrucción 1
float B=12.5; …instrucción 2
A=int(B); ó A=int(B); …instrucción 3
En la instrucción 1 declaramos la variable A de tipo int.
En la instrucción 2 declaramos e inicializamos la variable B de tipo float con el valor de 12.5
En la instrucción 3 almacenamos en A el valor de B (tipo float) que es obligado a transformarse en un entero. Recuerde que los valores con decimales serán redondeados al menor entero. En nuestro caso será redondeado a 12. Sin embargo la conversión es automática cuando se trata de variables de tipo número pero no en el caso del tipo char. Como es esto? En la instrucción 3 pudimos poner: A=B; En este el compilador reconoce primero a la variable A. Como A es de tipo int entonce el valor de B será transformado en un valor de tipo int.
Programa 19
Desarrolle un programa cualquiera.
Códificación en Borland C++
#include<conio>
#include<iostream>
void main()
{
//Declaración de variables
int A;
float B=12.5; //Se inicializa B con el valor 12.5
//Conversión de tipos (método cast)
A=(int)B;
cout<<A;
getch(); //Pause
}
Programa 20
En la facultad de Informática e Sistemas de la universidad UNAS (Tingo María-Perú) se aprueba el curso con la nota mínima de 11. Esta nota viene a ser el promedio final representado por PF.
PF=( 0.3*NT+0.8*NP+0.9*PROY+9 )/3, donde NT es Nota Teórica, NP es Nota Práctica y PROY es Proyecto. Desarrolle un programa que ayuda a calcular el promedio final de los alumnos preocupados.
Codificación en Borland C++
#include<conio>
#include<iostream>
void main()
{
//Declaración de variables
int NP,NT,PROY;
float PF;
cout<<"ntHALLE SU PROMEDIO FINALn";
cout<<"t———————–n";
//Ingreso de datos
cout<<"nIngrese Nota teorica: ";cin>>NT;
cout<<"Ingrese Nota practica: ";cin>>NP;
cout<<"Ingrese Nota de su proyecto: ";cin>>PROY;
//Proceso de datos
PF=(0.3*NT+0.8*NP+0.9*PROY+9)/3;
//Salida de la información
cout<<"nSu promedio final es: "<<PF<<endl;
cout<<"nPresione una tecla para finalizarn";getch();
}
Bueno… estimados lectores hasta aquí termina la parte introductoria a Borlad C++. Espero que hayan podido seguirme en el avance del "curso". Todo los programas que hasta ahora hemos desarrollado siguen un proceso secuencial [véase Programación Estructurada (PE) en el ANEXO]. Osea que las instrucciones que contiene el código son ejecutados uno a continuación de otro. En otras palabras hemos abarcado todo el capítulo de procesos secuenciales y nosotros ni cuenta nos hemos dado!!!.
En esta última parte usted encontrará 10 problemas propuestos que ud. deberá solucionar y luego implementarlos en un programa. Deberá ser muy justo ya que aunque estos problemas son propuestos han sido resueltos para que el lector pueda comparar sus resultados obtenidos.
JU MO PO
rey_andav_sy[arroba]hotmail.com
Partes: , 3
Página anterior | Volver al principio del trabajo | Página siguiente |