INTRODUCCION A LOS ENTORNOS INTEGRADOS DE …+_II_2016.pdf · C++ CON NETBEANS IDE . Msc. ... -...
-
Upload
nguyenhuong -
Category
Documents
-
view
225 -
download
0
Transcript of INTRODUCCION A LOS ENTORNOS INTEGRADOS DE …+_II_2016.pdf · C++ CON NETBEANS IDE . Msc. ... -...
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
LÓGICA DE PROGRAMACION
INTRODUCCION A LOS ENTORNOS INTEGRADOS DE DESARROLLO
Un entorno de desarrollo de software es una combinación de herramientas que automatiza o
soporta al menos una gran parte de las tareas (o fases) del desarrollo: análisis de requisitos, diseño de
arquitectura, diseño detallado, codificación, pruebas de unidades, pruebas de integración y
validación, gestión de configuración, mantenimiento, etc. Las herramientas deben estar bien
integradas, pudendo interoperar unas con otras.
Están formados por el conjunto de instrumentos (hardware, software, procedimientos, ...) que
facilitan o automatizan las actividades de desarrollo. En el contexto de esta asignatura se consideran
básicamente los instrumentos software.
Las actividades mejor soportadas por herramientas de desarrollo son normalmente las centrales:
codificación y pruebas de unidades. El conjunto de herramientas que soportan estas actividades
constituyen lo que se llama un entorno de programación. A veces se utilizan las siglas IDE (Integrated
Development Environment) para designar estos entornos, aunque no son un entorno de desarrollo
completo, sino sólo una parte de él.
Un entorno de programación puede estar concebido y organizado de maneras muy diferentes. A
continuación se mencionan algunas de ellas.
En las primeras etapas de la informática la preparación de programas se realizaba mediante
una cadena de operaciones tales como la que se muestra en la figura para un lenguaje
procesado mediante compilador. Cada una de las herramientas debía invocarse manualmente
por separado. En estas condiciones no puede hablarse propiamente de un entorno de
programación
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
o El editor es un editor de texto simple o El compilador traduce cada fichero de código fuente a código objeto o El montador (linker / builder / loader) combina varios ficheros objeto para generar un
fichero ejecutable o El depurador maneja información en términos de lenguaje de máquina.
Un entorno de programación propiamente dicho combina herramientas como éstas, mejoradas y mejor integradas. A veces se nombra con las siglas IDE (Integrated Development Environment).
C++ CON NETBEANS IDE
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
1. File
2. Nuevo Proyecto (New project)
3. C/C++ Application
4. Nombrar la aplicación y revisar directorios de trabajo
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
5. Listos para programar
5.1 Ir a Archivos de Código (Source Files)
5.2 Dar doble clic en main.cpp
/*
* File: main.cpp
* Author: USER
* Created on 14 de agosto de 2016, 08:12 PM
*/
#include <cstdlib>
using namespace std;
/*
*/
int main(int argc, char** argv) {
return 0;
}
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
INTRODUCCION A C++
“C++ es algo así como la evolución del lenguaje C. La intención de su creación fue el extender al
exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese
sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
La historia de C (predecesor de C++) parte de un lenguaje anterior, el lenguaje B, escrito por Ken
Thompson en 1970 con el objetivo de recodificar el sistema operativo UNIX, que hasta el momento se
había programado en ensamblador. Lo malo del lenguaje ensamblador era que lo ligaba a una serie de
máquinas concretas, por lo que conseguir un lenguaje abstraído de cada máquina conseguiría una
portabilidad del sistema muchísimo mayor. A su vez B fue inspirado en el BCPL de Martin Richards,
diseñado tres años antes.
En 1972 es Dennis Ritchie (de los Laboratorios Bell de AT&T) quien diseña finalmente C a partir del B
de Thompson, aportando un diseño de tipos y estructuras de datos que consiguen una claridad y
eficacia en el lenguaje muy superior. Es un lenguaje que permite realizar una programación
estructurada economizando las expresiones, con abundancia de operadores y tipos de datos (aunque
los básicos sean pocos), codificando en alto y bajo nivel simultáneamente, reemplazando
ventajosamente la programación en ensamblador y permitiendo una utilización natural de las
funciones primitivas del sistema.
Durante muchos años no existieron reglas estándar para el lenguaje, pero en 1983 se decide formar
un comité con el objetivo de crear el estándar ANSI. El proceso dura seis años y a principios de los 90
el estándar es reconocido por la ISO (Organización Internacional de Estándares) y comienza a
comercializarse con el nombre ANSI C.
Paralelamente, en 1980 surge C++ de la mano de Bjarne Stroustrup (también de Laboratorios Bell de
AT&T). Diseña este lenguaje con el objetivo de añadir a C nuevas características: clases y funciones
virtuales (de SIMULA 67), tipos genéricos y expresiones (de ADA), la posibilidad de declarar variables
en cualquier punto del programa (de ALGOL 68), y sobre todo, un auténtico motor de objetos con
herencia múltiple que permite combinar la programación imperativa de C con la programación
orientada a objetos. Estas nuevas características mantienen siempre la esencia del lenguaje C:
otorgan el control absoluto de la aplicación al programador, consiguiendo una velocidad muy superior
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
a la ofrecida por otros lenguajes. El nombre C++ fue propuesto por Rick Mascitti en el año 1983,
cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había
usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a
que C++ es una extensión de C. El siguiente hecho fundamental en la evolución de C++ es sin duda la
incorporación de la librería STL años más tarde, obra de Alexander Stepanov y Andrew Koening. Esta
librería de clases con contenedores y algoritmos genéricos proporciona a C++ una potencia única
entre los lenguajes de alto nivel.
Debido al éxito del lenguaje, en 1990 se reúnen las organizaciones ANSI e ISO para definir un estándar
que formalice el lenguaje. El proceso culmina en 1998 con la aprobación del ANSI C++”.
Tomado de: https://www.programarya.com/Cursos/C++
Nuestros primeros programas en C++
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
char nombre[50];
cout<<"Hola" <<endl <<" ¿Cuál es tu nombre? :";
cin.getline(nombre,40);
cout<<nombre <<" , Bienvenido a Lógica de Programación";
return 0;
}
Otra Forma
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
{
char nombre[50];
cout<<"Hola" <<endl <<" ¿Cuál es tu nombre? :";
cin.getline(nombre,40);
cout<<nombre <<" Bienvenido a Lógica de Programación";
return 0;
}
A continuación, utilizaremos nuestro programa saludo.cpp para introducir los elementos básicos de
un programa. Posteriormente, todos estos elementos serán tratados con mayor amplitud.
- Bibliotecas
El lenguaje C++ consta de un reducido número de instrucciones, pero ofrece un amplio repertorio de
bibliotecas con herramientas que pueden ser importadas por los programas cuando son necesarias.
Por este motivo, un programa suele comenzar por tantas líneas #include como bibliotecas se
necesiten. Como se puede observar, en nuestro ejemplo se incluye la biblioteca iostream, necesaria
cuando se van a efectuar operaciones de entrada (lectura de datos) o salida (escritura de datos). Para
utilizar la biblioteca iostream es necesario utilizar el espacio de nombres std, éste es un concepto
avanzado que, por ahora, está fuera de nuestro ámbito de estudio. Por ahora nos basta con recordar
que nuestros programas deben contener la siguiente directiva:
using namespace std;
- Constantes simbólicas y constantes literales
Antes de utilizar una constante simbólica es necesario informar al compilador, indicando de qué tipo
es, su nombre (su identificador) y el valor que tiene asociado. Si no lo hiciéramos, el compilador no
sería capaz de reconocer qué es y que guarda y nos mostraría un mensaje de error.
- Identificadores
Para cada elemento que introduzcamos en nuestro programa debemos definir un nombre
(identificador) con el que hacer referencia al mismo y disponer de algún mecanismo para informar al
compilador de dicho nombre y de sus características. Hemos visto cómo hacerlo para constantes
simbólicas, pero de igual forma habrá que proceder con otro tipo de elementos, como variables,
tipos, subprogramas, etc., que iremos tratando en posteriores capítulos.
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
En C++ se considera que las letras minúsculas son caracteres diferentes de las letras mayúsculas.
Un identificador debe estar formado por una secuencia de letras y dígitos en la que el primer carácter
debe ser una letra. El carácter ’_’ se considera como una letra, sin embargo, los nombres que
comienzan con dicho carácter se reservan para situaciones especiales, por lo que no deberían
utilizarse en programas. Aunque el lenguaje no impone ninguna restricción adicional, en este manual
seguiremos unos criterios de estilo a la hora decidir qué identificador utilizamos para cada elemento.
Ello contribuye a mejorar la legibilidad del programa. Por ejemplo, los identificadores utilizados como
nombres de constantes simbólicas estarán formados por letras mayúsculas y, en caso de querer que
tengan más de una palabra, usaremos ’_’ como carácter de separación (IVA_VEN). En posteriores
capítulos iremos proporcionando otros criterios de estilo para ayudar a construir identificadores para
variables, tipos, funciones, etc.
- Palabras reservadas
Algunas palabras tienen un significado especial en el lenguaje y no pueden ser utilizadas con otro
sentido. Por este motivo no pueden ser utilizados para designar elementos definidos por el
programador. Son palabras reservadas, como por ejemplo: using, namespace, const, double, int,
char, bool, void, for, while, do, if, switch, case, default, return, typedef, enum, struct, etc.
- Delimitadores
Son símbolos que indican comienzo o fin de una entidad ( ( ) { } ; , < >). Por ejemplo, en nuestro
programa saludo.cpp usamos { y } para delimitar el comienzo y el final de la función main, y el
símbolo ; para delimitar el final de una sentencia.
- Operadores
Son símbolos con significado propio según el contexto en el que se utilicen. Ejemplo: = << >> * / % + -
< > <= = == != ++ -- . , etc.
- Comentarios y formato del programa
El compilador necesita reconocer los diferentes elementos que forman el programa. Para ello, utiliza
delimitadores y caracteres que permiten separar unos elementos con otros. Además, el programador
puede añadir caracteres como espacios en blanco, líneas en blanco o tabuladores para mejorar la
legibilidad del programa. El compilador los ignora, salvo que les sirva como separadores de unos
elementos y otros. Además, el programador puede estar interesado en mejorar la legibilidad del
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
programa incluyendo comentarios dirigidos a otros programadores, no al compilador. Para ello, debe
marcar dicho texto de alguna forma que permita ser identificado por el compilador. En C++ esto se
puede hacer de dos formas diferentes
Comentarios hasta fin de línea: los símbolos // marcan el comienzo del comentario, que se
extiende hasta el final de la línea.
//- archivo: saludo.cpp ------------------------------------------------------------------------------
Comentarios enmarcados: los símbolos /* marcan el comienzo del comentario, que se
extiende hasta los símbolos del fin del comentario */. Por ejemplo, podríamos haber incluido
al principio del fichero euros.cpp algunas líneas de comentario informando de su autor y fecha
de elaboración.
/* Autor: Nelson O. Cáceres
* Fecha: 12/08/2016
*/
- Variables
Los datos se almacenan en memoria en variables de un cierto tipo. El programador debe decidir qué
variables va a utilizar, pensar en un identificador para referirse a ellas y comunicarlo al compilador. En
nuestro programa usamos una variable llamada nombre para almacenar el nombre de la persona que
está al otro lado del pc. Usamos la siguiente definición para informar al compilador que nombre es
una variable que contiene una cadena de 50 caracteres máximo de longitud.
char nombre[50];
- Entrada/Salida de datos
En general, un programa necesitará tomar datos de entrada y mostrar resultados en algún dispositivo
de salida. En C++ disponemos de flujos de entrada (cin) y de salida (cout), que nos permiten efectuar
entrada y salida de datos, respectivamente. El operador >> se usa para tomar un valor de la entrada y
el operador << se usa para sacar un valor por la salida. En nuestro ejemplo, la siguiente sentencia
muestra por pantalla un mensaje en el que se solicita que el usuario introduzca el nombre de la
persona que está al frente, y a la cual se desea saludar:
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
cout<<"Hola" <<endl <<" ¿Cuál es tu nombre? :";
El texto entre comillas es una constante literal, que aparecerá tal y como está escrito en el dispositivo
de salida. Si en lugar de una constante literal hubiéramos usado un identificador con el nombre de
una constante o de una variable, entonces el valor resultante en la salida sería aquél asociado a dicho
identificador. En la siguiente línea tomamos de la consola (entrada por el teclado) el nombre digitado
y utilizamos una variación de la entrada estándar cin: cin.getline(variable, longitud) para indicar que
tome literalmente todo lo escrito en la pantalla, puesto que cin>> leería solo hasta encontrar un
espacio en blanco:
cin.getline(nombre,40);
La siguiente línea, muestra el contenido de la variable en la que se guardó el nombre y un saludo o
constante literal que esta entre “ ”:
cout<<nombre <<" , Bienvenido a Lógica de Programación";
- Asignación
En nuestro ejemplo no hay asignación interna, pero esto no suele ser muy común. La asignación es la
operación en la cual se asigna el resultado de alguna operación, generalmente matemática a una
variable.
Ejemplos de código fuente en C++ con las diferentes sentencias de control.
Los siguientes ejemplos se realizaron con NetBeans 8.1
---Secuencial - lineal
//Cambia dólares a pesos colombianos
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
double Can_Dol, Val_Dol, Can_Pes;
cout<<"Cambio de divisas"<<endl;
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
cout<<"Cantidad de dólares a cambiar :";
cin>>Can_Dol;
cout<<"Valor del dólar hoy :";
cin>>Val_Dol;
Can_Pes = Can_Dol*Val_Dol;
cout<<"Usted recibe "<<Can_Pes<< " pesos "<<" por "<<Can_Dol<<" dólares"<<endl;
cout<<"Presiones una tecla para finalizar"<<endl;
cin.get();
return 0;
}
--- Selección simple
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
Funciones
Ejemplos de funciones
//Cálculo de una potencia, recibe dos datos reales como entrada: base y exponente
float potencia(float, float); float potencia(float b, float e) { float pot; pot = b; for(int i = 2; i <= e; i++) pot = pot*b; return pot; } //Cálculo del factorial de un número float factorial(float); float factorial(float n) { float fact = 1; for(int i = 2; i <= n; i++) fact = fact*i; return fact; } // Cálculo de exp(x) float euler(float); float euler(float num) { float eul=1 + num; const int nter = 40; if( num == 0) { eul = 1; } for(int i = 2;i <= nter; i++ ) { eul = eul + (potencia(num,i)/factorial(i)); } return eul; } // Validacion de un ángulo: halla el ángulo de referencia float valida_ang(float); float valida_ang(float ag) { float agr; if((ag>=360) || (ag<=-360)) { agr = fmod(ag,360); }
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
else { agr = ag; } return agr; } //Cálculo de sen(x)
float seno(float angulo); float seno(float a){ float const PI = 3.14159265; float sn, ar; int sig1 = -1, nt = 40; a = valida_ang(a); ar = a*PI/180; sn = ar; for(int i = 2; i<= nt; i++) { if(i%2 != 0) { sn = sn + sig1*(pow(ar,i)/factorial(i)); sig1 = sig1*(-1); } } return sn; }
//Cálculo de cos(x) float coseno(float angulo); float coseno(float a){ float const PI = 3.14159265; float cn, ar; int sig1 = -1, nt = 40; a = valida_ang(a); ar = a*PI/180; cn = 1; for(int i = 2; i<= nt; i++) { if(i%2 == 0) { cn = cn + sig1*(pow(ar,i)/factorial(i)); sig1 = sig1*(-1); } } return cn; }
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
Ejercicios con vectores
/* * File: main.cpp * Author: Nelson O. Cáceres M. * ®2016 www.nelsoncaceres.com * Created on 30 de octubre de 2016, 16:23 */ #include <cstdlib> #include <iostream> #define TAM 100 using namespace std; void leervect(int, float[]); void escribirvect(int, float[]); int main(int argc, char** argv) { char op, resp; float n[TAM], elem, aux; int c, pos; do{ system("cmd c /cls"); cout<<"\tO P E R A C I O N E S B A S I C A S C O N V E C T O R E S "<<endl<<endl; cout<<"\t\t1. Leer"<<endl<<endl; cout<<"\t\t2. Escribir"<<endl<<endl; cout<<"\t\t3. Agregar elemento al final"<<endl<<endl; cout<<"\t\t4. Insertar elemento"<<endl<<endl; cout<<"\t\t5. Eliminar elemento"<<endl<<endl; cout<<"\t\t6. Buscar elemento"<<endl<<endl; cout<<"\t\t7. Ordenar vector"<<endl<<endl; cout<<"\t\tOpcion...[1 - 7] :"; cin>>op; cout<<endl<<endl; switch(op) { case '1' : cout<<"\t\tCantidad de elementos del vector ";cin>>c; leervect(c, n); break; case '2' : cout<<"\t\tElementos del Vector "<<endl<<endl; escribirvect(c, n); break; case '3' : cout<<"\t\tInsertar elemento al final del vector "<<endl<<endl; do { cout<<"\t\tElemento a insertar :"; cin>>elem; n[c]=elem; c++; escribirvect(c,n); cout<<"\t\tDesea insertar otro elemento en el vector [s/n] "; cin>>resp; resp = toupper(resp); }while(resp == 'S'); break;
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
case '4' :cout<<"\t\tInsertar elemento en la posicion dada"<<endl<<endl; cout<<"\t\tElemento a insertar :"; cin>>elem; escribirvect(c,n); do { cout<<"\t\tPosicion en la que desea insertar el elemento [0 - "<<c-1<<"] "; cin>>pos; if(pos>c-1 || pos<0) cout<<"\t\tPosicion no valida "<<endl; }while(pos>c-1 || pos<0); c++; for(int i=c-1;i>=pos;i--) { n[i+1]=n[i]; if(pos==i) n[pos]=elem; } escribirvect(c,n); break; case '5' :cout<<"\t\tEliminar elemento "<<endl<<endl; do{ cout<<"\t\tPosicion que desea eliminar...de [0 hasta "<<c-1<<"]: ";cin>>pos; if(pos>(c-1)||pos<0) cout<<"\t\tPosicion no valida"<<endl; }while(pos>(c-1)||pos<0); for(int i=pos;i<c;i++) { n[i]=n[i+1]; } c--; escribirvect(c,n); break; case '6' : cout<<"\t\tElemento a buscar: ";cin>>elem; for(int i=0;i<c;i++) { if(n[i]==elem) { cout<<"\t\tEl elemento buscado se encuentra en: A["<<i<<"]"<<endl; break; } else { if(i==c-1) cout<<"\t\tNo se encuetra el elemento que busca"<<endl; } } escribirvect(c, n); break;
Msc. Nelson O. Cáceres M. |Lic. en Matemáticas y Física – Ingeniero de Sistemas |®2016 www.nelsoncaceres.com
case '7' : cout<<"\t\tOrdenar Vector"<<endl<<endl; cout<<"\t\t1. Ascendentemente "<<endl<<endl; cout<<"\t\t2. Descendentemente "<<endl<<endl; cout<<"\t\tOpcion [1 - 2] :"; cin>>op; switch(op) { case '1' :cout<<"\t\tOrdenado Ascendentemente "<<endl<<endl; for(int i=0; i<c-1; i++){ for(int j=0; j<c-i; j++){ if(n[j] > n[j+1]){ aux=n[j]; n[j]=n[j+1]; n[j+1]=aux; } } } escribirvect(c, n); break; case '2' :cout<<"\t\tOrdenado Descendentemente "<<endl<<endl; break; default : cout<<"\t\tOpcion no valida "<<endl<<endl; } break; default : cout<<"Opcion no valida"<<endl<<endl; } cout<<"\t\tContinuar...[s/n] :"; cin>>resp; resp = toupper(resp); }while(resp == 'S'); return 0; } void leervect(int cant, float n[]) { int i; for(i=0;i<cant;i++) { cout<<"\t\tV["<<i<<"] : "; cin>>n[i]; } } void escribirvect(int cant,float n[]) { int i; for(i=0;i<cant;i++) { cout<<"\t\tV["<<i<<"] : "<<n[i]<<endl; } }