C++ Soportado Con Qt

  • Uploaded by: Efraín Oviedo Regino
  • 0
  • 0
  • February 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View C++ Soportado Con Qt as PDF for free.

More details

  • Words: 6,802
  • Pages: 35
Loading documents preview...
1

_

1

1

-

-1 1

_

1

-

1-

C++ Informática

Soportado con Qt

Efraín Oviedo Regino

Bogotá - México, DF

Oviedo Regino, Efraín C++ bajo Qt / Efraín Oviedo Regino -- 1a. Edición. Bogotá : Ediciones de la U, 2018 p.364 ; 24 cm. Incluye bibliografía ISBN 978-958-762-765-7 e-ISBN 978-958-762-766-4 1. Programación 2. Informática 3. Orientación a objetos 4. Estructuras de control 621.39 cd

Área: Informática Primera edición: Bogotá, Colombia, abril de 2018 ISBN. 978-958-762-765-7 © Efraín Oviedo Regino (Foros de discusión, blog del libro y materiales complementarios del autor en www.edicionesdelau.com) © Ediciones de la U - Carrera 27 #27-43 - Tel. (+57-1) 3203510 - 3203499 www.edicionesdelau.com - E-mail: [email protected] Bogotá, Colombia

Ediciones de la U es una empresa editorial que, con una visión moderna y estratégica de las tecnologías, desarrolla, promueve, distribuye y comercializa contenidos, herramientas de formación, libros técnicos y profesionales, e-books, e-learning o aprendizaje en línea, realizados por autores con amplia experiencia en las diferentes áreas profesionales e investigativas, para brindar a nuestros usuarios soluciones útiles y prácticas que contribuyan al dominio de sus campos de trabajo y a su mejor desempeño en un mundo global, cambiante y cada vez más competitivo. Coordinación editorial: Adriana Gutiérrez M. Carátula: Ediciones de la U Impresión: Xpress Estudio Gráfico y Digital S.A. Carrera 69H #77-40, Pbx. (57+1) 6020808 Impreso y hecho en Colombia Printed and made in Colombia No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro y otros medios, sin el permiso previo y por escrito de los titulares del Copyright.

Dedicatoria A Mathias y Juan Manuel Oviedo, que serán los hombres del mañana y con seguridad heredarán mi legado.

5

Contenido Dedicatoria................................................................................................................ 5 Presentación............................................................................................................11 Capítulo1. Introducción........................................................................................13 1.1. Definición de un computador...................................................................................13 1.2. Clasificación de los computadores..........................................................................14 1.2.1. De acuerdo con el avance tecnológico ....................................................14 1.2.2. Según el tipo de información que maneja .............................................15 1.3. El computador digital...................................................................................................15 1.3.1. La unidad de entrada .....................................................................................16 1.3.2. La unidad de salida ........................................................................................18 1.3.3. Unidad de control ............................................................................................18 1.3.4. Unidad aritmética y lógica ............................................................................19 1.3.5. Unidad de memoria.........................................................................................19 1.4. Tipos de procesamiento...............................................................................................21 1.5. Elaboración de programas para computador......................................................22 1.6. Terminología básica.......................................................................................................26 2. Lenguaje de programación............................................................................................30 2.1. C++ ..............................................................................................................................31 2.2. Entorno de desarrollo integrado (IDE)....................................................................32 2.3. Qt creator..........................................................................................................................32 2.3.1. Qt Creator Ambiente de Desarrollo y creación de proyectos...........33 3. Aspectos básicos de C++................................................................................................35 3.1. Librerías.............................................................................................................................36 3.2. Palabras reservadas.......................................................................................................39 3.3. Definición de variables.................................................................................................40 3.4. Tipos de datos..................................................................................................................41 3.5. Comentarios.....................................................................................................................42 3.6. Estructura básica del código......................................................................................43 3.7. Estructuras de control de la programación..........................................................43 4. Ejercicios propuestos........................................................................................................43 7

Capítulo 1

Introducción Antes de entrar en detalle sobre la programación utilizando el lenguaje C++, miremos algunas definiciones que debemos tener en cuenta, cuando elaboramos un programa en cualquier lenguaje. De igual manera, como necesitamos un computador, para entrar el programa y ejecutarlo, también necesitamos conocer algo de él.

1.1. Definición de un computador Un computador es una máquina capaz de efectuar una secuencia de operaciones mediante un programa apropiado, de tal manera que se haga una transformación (proceso) sobre un conjunto de datos que le son suministrados y se obtenga un nuevo conjunto de datos, llamados resultados. Todo esto lo hace con alta velocidad y gran capacidad de almacenamiento. Los computadores pueden hacer muchas tareas, entre ellas las siguientes: •

Proveer a los médicos información actualizada sobre la salud del paciente.



Preparar gráficas de patrones climatológicos y producir planes de vuelo de acuerdo con las condiciones climatológicas.



Prestar ayuda en la oceanografía y la navegación.



Registrar marcas y evaluar estadísticas de competencias deportivas.



Prestar ayuda a los ingenieros en los cálculos.



Controlar simuladores de vuelo para dar al piloto un entrenamiento inicial en tierra.



Coordinar el funcionamiento de los semáforos para que el tránsito no sufra interrupciones. 13

C++ - Efrain Oviedo Regino



Verificar la cantidad de dinero depositado en una cuenta. Un empleado del banco habla con un computador a través del teléfono.



Proveer información sobre los productos en el mercado.

1.2. Clasificación de los computadores 1.2.1. De acuerdo con el avance tecnológico Se pueden establecer categorías de computadores, así: •

Primera generación, comprendida entre 1945 y 1958. Son los primeros computadores que se construyen y están caracterizados por utilizar tubos al vacío en los componentes básicos de sus circuitos. El ENIAC (Electronic Numerical Integrator and Computer), es considerado como el primer computador electrónico de propósito general, creado en 1946 por John Presper Eckert y Jhon William Mauchly.



Segunda generación, comprendida entre 1959 y 1964). En esta generación los tubos al vacío son sustituidos por transistores; la memoria estaba constituida por tubos magnéticos; se usaban en aplicaciones de tipo militar, comercial, científico y utilizaban disco magnético.



Tercera generación, comprendida entre 1965 y 1970. Los computadores se caracterizaban por utilizar en sus componentes circuitos integrados monolíticos. En esta época se le adicionan equipos auxiliares, tales como terminales interactivas.



Cuarta generación, comprendida entre 1971 y 1981. Caracterizada por la incorporación de miles de componentes a los computadores, integrados en espacios sumamente pequeños. Se crean técnicas para manejar volúmenes grandes de información y se usan computadores remotos en operación con un computador central mediante la telecomunicación, dando lugar a la telemática. Se popularizan los lenguajes de programación de tipo interactivo, las máquinas virtuales y los manipuladores de datos.



Quinta generación, comprendida entre 1982 y 1989. En esta época se introduce el uso de la memoria de burbuja magnética y la técnica holográfica con rayos láser; se mejoran las técnicas de comunicación con el procesador central en forma conversacional o interactiva y los lenguajes cada vez son más humanos, inclusive la voz.



Sexta generación, incluye los computadores construidos de 1990 en adelante. Estas máquinas, creadas cuentan con arquitecturas combinadas

14

Cap. 1 - Introducción

paralelo-vectoriales, cientos de microprocesadores en funcionamiento y unidades aritméticas y lógicas capaces de realizar un billón de operaciones de punto flotante por segundo, utilizando el desarrollo de las redes de comunicación, la fibra óptica y satélites con anchos de banda exorbitantes. Las tecnologías de esta generación (algunas ya desarrolladas y otras en proceso) tienen en común el avance en la inteligencia artificial distribuida, sistemas difusos, teoría del caos, transistores ópticos y heliografía, elementos que les permiten comunicarse con los computadores en un lenguaje más cotidiano y no a través de lenguajes de control.

1.2.2. Según el tipo de información que maneja Una computador, éstos se pueden clasificar en: • Computadores digitales. Son aquellas que procesan datos discretos. Trabajan directamente contando números (dígitos) que representan cifras, letras u otros símbolos especiales. Los computadores digitales pueden ser: ŒŒ De propósitos generales. Son utilizados para almacenar diferentes programas y pueden ser usados en incontables aplicaciones. Por ejemplo, una máquina que procese información y luego, que escriba nuevos programas y cambie o borre los anteriores. ŒŒ De propósitos especiales. Diseñados para realizar sólo una tarea específica, ya que los programas están permanentemente almacenados en la máquina. •

Computadores analógicos. Procesan datos que están medidos en una escala continua y registrados, con un determinado grado de precisión. Por ejemplo, el voltaje que puede ser medido con aproximación de un centésimo de voltio.

• Computadores híbridas (analógico digitales). Son una combinación de las dos anteriores. Por ejemplo, en la unidad de control interactivo de un hospital los dispositivos analógicos pueden medir el funcionamiento del corazón de un paciente, la temperatura y los signos vitales. Estas medidas pueden ser convertidas a números y enviadas a un componente digital del sistema.

1.3. El computador digital Todas las partes de un sistema de computación operan bajo el control de una de ellas: la unidad de control. Aunque un sistema de computación está compuesto por muchos dispositivos, cada sistema tiene cinco componentes 15

C++ - EFRAIN OVIEDO REGINO

básicos. En la imagen 1.1, a continuación, se muestran estos componentes y sus relaciones entre sí. Imagen 1.1. Unidad algorítmica lógica

Unidad de entrada

Unidad de control

Unidad de salida

Unidad de memoria

1.3.1. La unidad de entrada Alimenta la memoria con datos e instrucciones, es decir, pasa información desde un medio externo de entrada de datos a la memoria principal del computador, donde es almacenada en forma temporal. Esto significa que la memoria principal es volátil y que no podemos guardar en ella información en forma permanente. La unidad de memoria almacena instrucciones y datos en grupos de bits que tienen una única dirección de memoria y su tamaño puede variar. Independientemente de cómo se introduzcan los datos, estos se transforman en impulsos eléctricos que se transfieren a direcciones predeterminadas dentro de la memoria. La entrada se divide básicamente en dos tipos: instrucciones para el proceso de datos y los datos por procesar. Como ejemplos de medios de entrada tenemos: •

El teclado: La acción mecánica de pulsar una tecla genera internamente pulsos eléctricos que permiten identificar la información. Cada tecla representa un código que es reconocido por el computador.



Mouse y joysticks: Convierten el movimiento físico en señales eléctricas binarias, que son convertidas a su vez en caracteres y se muestran en la pantalla.



Escáner o digitalizador de imágenes: Interpreta uno o más caracteres, gráficos o textos que son convertidos a unos y ceros (lenguaje de máquina).

16

Cap. 1 - Introducción



Lápices ópticos: Toman lo que hay en una tableta electrónica y lo transfieren al computador.



Micrófonos: Convierten la voz en señales digitales.



Disco duro: Está formado por varios discos magnéticos que giran sobre un eje central. La información se lee y se imprime mediante cabezas lectograbadoras que codifican y decodifican la información. Está dividido en cilindros, y estos, en sectores cuya cantidad está determinada por el tipo de disco y por el formato. Son de tamaño variable.



CD-ROM: Posee gran flexibilidad y almacenan por mucho tiempo grandes cantidades de información. Los dispositivos de este tipo son semejantes a los ya desaparecidos disquetes.



Memorias USB (Universal Serial Bus): Es un dispositivo de almacenamiento que utiliza una memoria flash para guardar información. Se le conoce también con el nombre de unidad flash USB, lápiz de memoria, lápiz USB, minidisco duro, unidad de memoria, llave de memoria, entre otros. Es resistente a los golpes y a los tratamientos externos y se ha convertido en el medio de almacenamiento más común por su fácil manejo.



Cintas magnéticas: Son utilizadas para almacenar grandes volúmenes de información: sobre todo archivos históricos en las grandes empresas.



Dispositivos OCR (Optical Character Recognition): Reconocen caracteres ópticos. La mayoría de datos que van a introducirse al computador se registran primero en un documento fuente, que puede ser manuscrito o mecanografiado. Los dispositivos OCR pueden leer estos datos y convertirlos directamente en impulsos eléctricos. A su vez, estos impulsos se pueden registrar directamente en cinta magnética, disco, etcétera. No se requiere perforar tarjetas, así que no solo se economiza tiempo y dinero, sino que se disminuyen las posibilidades de error.



Cámara de fotos digital: Este medio le comunica al computador las imágenes que capta. Existen varios tipos: cámara de fotos digital, cámara de videos y webcam (usada para videoconferencias).



Lector de código de barras: Por medio de un láser lee dibujos formados por barras o espacios paralelos. Los lectores de códigos de barras son medios eficientes para la captación automática de datos.

17

C++ - Efrain Oviedo Regino

1.3.2. La unidad de salida Los medios de salida de información le permiten al usuario registrar en ellos información que está guardada en la memoria tal como datos, archivos de texto, programas, gráficas, etcétera. Algunos ejemplos de medios de salida son: •

La pantalla o monitor: Hoy en día los dispositivos de este tipo más comunes son los de pantallas de cristal líquido (LCD) y los de diodos emisores de luz (LED).



La impresora: Permite obtener los resultados en papel, que es de fácil transporte.



El módem: Usado para unir computadores transformando información digital en análoga y viceversa. Es útil para que la información pueda ser transmitida a través de redes de comunicación, aunque no es de uso masivo en la actualidad.



Altavoces: Por este dispositivo se emiten señales procedentes de la tarjeta de sonido. Es muy usado en la actualidad y bastante común.



Auriculares: Pequeños botones que se colocan en el oído para escuchar lo que mueve la tarjeta de sonido.



Multimedia: Combinación de hardware y software para la salida de texto, gráficos, animación, video, música, voz y efectos de sonido.



Plotters: Medios que permiten obtener información en forma de dibujos.



Fax: Este medio imprime información tomada de un texto impreso y la transmite por medio telefónico.

Los medios de almacenamiento usados como entrada y salida al mismo tiempo se conocen como memoria auxiliar o secundaria, y en ellos se puede almacenar información en forma permanente. A diferencia de la memoria principal, la información puede ser guardada hasta que no la necesitemos y su capacidad de almacenamiento es mucho mayor que la memoria del computador.

1.3.3. Unidad de control Se compone de circuitos y/o programas que interpretan las instrucciones y comandos o mandatos que le damos al computador, y determina y da órdenes a las unidades que deben realizar un proceso. Extrae de la memoria principal 18

Cap. 1 - Introducción

los datos o instrucciones que se deben ejecutar, mandándoles (si son instrucciones de cálculo) a la unidad aritmética y lógica, que realiza las operaciones y devuelve los resultados para que sean almacenados en la memoria. Imagen 1.2. Unidad de control .Balu 1998(Autor)(2013). Computador. Computación tecnológica de información (fotografía).

Recuperado de: http://tastyrates.com/site/wp-content/uploads/2014/01/Computer-Chip.jpg

1.3.4. Unidad aritmética y lógica Es la encargada de hacer las operaciones aritméticas (sumas, restas, multiplicaciones, divisiones y las demás) y de comparación, supervisada por la unidad de control. Puede determinar si un valor es menor, menor o igual, mayor, mayor o igual, igual o diferente de otro. Las unidades de control, memoria aritmética y lógica forman la unidad central de proceso (CPU).

1.3.5. Unidad de memoria La memoria principal de un computador está formada por millones de circuitos biestables (tienen dos estados), por lo que es fácil almacenar información digital. El estado prendido del circuito representa un 1, y si está apagado representa un 0. A cada uno de los estados de un circuito se le denomina bit (dígito binario). Desde luego, en un bit solo podemos guardar información que solo tenga dos estados, como el signo de un número, si es verdadero o falso y la paridad cuando se almacenan caracteres. 19

Cap. 3 - Estructuras de control selectivas

Ejercicio resuelto

Cap3-Ejer4

Hacer un programa que, dados dos valores numéricos a y b, escriba un mensaje que diga si a es mayor, menor o igual a b. Análisis Datos de entrada Los valores de a y de b. Datos de salida Un mensaje de acuerdo con el valor de a y de b. Proceso Se compara a con b. Si: a>b, entonces se escribe el mensaje “a es mayor que b”. Si la condición es falsa se pregunta si: a==b. Si esta es verdadera, se escribe el mensaje “a es igual que b”, y si es falsa, por defecto a es menor que b.

Estas se presentan cuando es necesario implementar una estructura de decisión lógica (simple o doble) dentro de otra varias veces. En el caso de la estructura de decisión simple, por cada salida verdadera se anidan otras estructuras lógicas simples (ver Cap3-Ejer9). Para el caso de las estructuras dobles, el anidamiento puede hacerse por cualquiera de las dos salidas (falsa o verdadera) y pueden anidarse estructuras lógicas simples o dobles. En cualquiera de los dos casos los if se cierran de abajo hacia arriba.

67

C++ - Efrain Oviedo Regino /*Ejercicio resuelto Cap3-Ejer4 Efrain Oviedo */ #include #include using namespace std; class DistincionMenorMayor{}; int main() { float a, b; cout << “Digite el valor de a: “; cin>>a; cout<<”DIGITE EL VALOR DE b: “; cin>>b; if (a>b){ cout<<” a ES MAYOR QUE b”<<endl; } else if(a==b){ cout<< “a ES IGUAL A b “; } else{ cout<<” a ES MENOR QUE b “<<endl; } cin.ignore().get(); //pausa el programa return 0; }

Tenga en cuenta que todas las llaves que se abran después de un if se deben cerrar antes de su else respectivo. Prueba de escritorio Si los valores de entrada son: a=20. b=25. La salida es: a ES MENOR QUE b

68

Cap. 3 - Estructuras de control selectivas

Ejercicio resuelto

Cap3-Ejer5

Escribir un programa que acepte tres números enteros diferentes y muestre el mayor de ellos. Análisis El enunciado aclara que no existen números iguales; por lo tanto existe un valor menor, uno medio y uno mayor. Datos de entrada Los tres números. Estos deben almacenarse en variables distintas. Datos de salida El mayor de los tres numeros. Proceso Existen varias formas de encontrar el valor mayor entre un grupo de datos. Usted puede pensar y desarrollar una diferente a la aquí expuesta. El proceso por utilizar sería: número1 será el mayor si: (número1 > número2) &&(número1 > número3) número2 será el mayor si: (número2 > número1) && (número2 > número3) número3 será el mayor si: (número3 > número1) && (número3 > número2) Definición de variables n1, n2, n3: mayor:

Los tres números a evaluar Variable que almacenará el valor mayor entre n1, n2 y n3.

69

C++ - Efrain Oviedo Regino

/*Ejercicio resuelto Cap3-Ejer5 Efrain Oviedo */ #include #include using namespace std; class MayorEntreTres{}; int main(){ float n1, n2, n3, mayor; cout<<” DIGITE EL PRIMER VALOR: “; cin>> n1; cout<<”DIGITE EL SEGUNDO VALOR: “; cin>> n2; cout<<”DIGITE EL TERCER VALOR: “; cin>> n3; if((n1>n2)&& (n1>n3)) mayor=n1; else if(n2>n3) mayor=n2; else mayor=n3; system(“cls || clear”); cout<<”\n\n\n\tEL VALOR MAYOR ENTRE: “<
La prueba de escritorio se deja como tarea al lector. Ejercicio resuelto

Cap3-Ejer6

Cierta universidad tiene un programa para estimular a los estudiantes con buen rendimiento académico. Si el promedio es de 4.5 o más, y el alumno es de pregrado, entonces cursará 28 créditos y se le hará un 25% de descuento. Si el promedio es mayor o igual a 4.0 pero menor que 4.5, y el alumno es de pregrado, entonces cursará 25 créditos y se le hará un 10% de descuento. Si el promedio es mayor que 3.5 y menor que 4.0, y el alumno es de pregrado, cursará 20 créditos y no tendrá ningún descuento. Si el promedio es mayor o igual a 2.5 y menor que 3.5, y el alumno es de pregrado, cursará 15 créditos y no tendrá descuento. Si el promedio es menor de 2.5, y el alumno es de pregrado, no podrá matricularse. Si el promedio es mayor o igual a 4.5, y el alumno es de posgrado, cursará 20 créditos y se le hará un 20% de descuento. Si el promedio es menor de 4.5, y el alumno es de posgrado, cursará 10 créditos y no tendrá descuento. 70

Cap. 3 - Estructuras de control selectivas

Hacer un programa que determine cuánto debe pagar un estudiante y cuántos créditos registra si el valor de cada crédito es de $50 000 para pregrado y $300 000 para posgrado. Análisis Datos de entrada Promedio crédito Tipo de estudiante ( Pregrado /Posgrado. Datos de salida Crédito a cursar Valor de la matricula Proceso Primero se determina el descuento y el número de créditos a cursar dependiendo del promedio crédito y del tipo de estudiante. Como el tipo de estudiante nos divide el problema en partes más grandes, esa será la decisión más externa y dentro de ella preguntamos por el promedio crédito. Variables cs: nc: pe: pdes: vcred: vsd: des: vt:

clase de estudiante número de crédito promedio estudiante porcentaje de descuento valor crédito valor a pagar sin descuento descuento valor total a pagar

71

C++ - Efrain Oviedo Regino /* Ejerecisio resuelto Cap3-Ejetr6 Efrain Oviedo*/ #include #include //se debe incluir para poder usar strcmpi() #include using namespace std; class Matricula{}; int main(){ cout.setf(ios::fixed);// Evita que la información salga en //forma exponencial cout.precision(2); // Saca la información con dos decimales char cs[10]; int nc; float pdes, vcred, pe, vsd, des, vt; cout<<”digite clase de estudiante: “; cin>>cs; cout<<”digite valor promedio: “; cin>>pe; system(“cls || clear”); if(strcmpi(cs,”pregrado”)==0){//Comparación de variables tipo caracter if(pe>=4.5){ pdes=25; nc=28; } // todas las llaves abiertas después de un if se deben cerrar antes //del else else if(pe>=4.0){ //Observe que existe la instrucción else if pdes=10; nc=25; }//También se puede cerrar aquí else if(pe>=3.5){ pdes=0; nc=20; } else if(pe>=2.5){ pdes=0; nc=15; } else{ cout<<” No puede matricularse “<<endl;; nc=0; pdes=0; }

}

72

vcred=50000; } else{ if(pe>=4.5){ pdes=20; nc=20; } else{ nc=10; pdes=0; } vcred=300000; } vsd=nc*vcred; des=vsd*pdes/100; vt=vsd-des; cout<<”el estudiante de: “<
Cap. 3 - Estructuras de control selectivas

Ejercicio resuelto

Cap3-Ejer7

Un almacén efectúa una promoción en la cual se hace un descuento sobre el valor de la compra total según el color de la bolita que el cliente saque de una bolsa al pagar en la caja. Si la bolita es blanca, no se le hará descuento alguno; si es verde, se le hará un 10% de descuento; si es amarilla, un 25%; si es azul, un 50%; y si es roja, un 100%. Hacer un programa para determinar la cantidad final que un cliente deberá pagar por su compra. Se sabe que solo hay bolitas de los colores mencionados. Análisis Datos de entrada Valor de la compra. Color de la bolita. Datos de salida Valor por pagar teniendo en cuenta los posibles descuentos. Proceso Conocido el color de la bolita que le ha tocado al cliente, se puede establecer si tiene o no descuento por el valor de la compra y el porcentaje que le corresponde. Si la bolita que saca es: BLANCA, el descuento es del 0%, VERDE, el descuento es del 10%; AMARILLA, el descuento es del 25%; AZUL, el descuento es del 50%; de ninguno de los colores anteriores, por defecto será ROJA al no haber más, por lo que no es necesario hacer la pregunta de si el color de la bolita es roja, en cuyo caso el descuento es del 100%. Definición de variables: valComp: color: valPag: pDes:

Valor de la compra. Color de la bolita. Valor por pagar. Porcentaje de descuento.

73

C++ - Efrain Oviedo Regino

Ejercicio resuelto

Cap7-Ejer8

Construir una clase con los siguientes datos de un estudiante: cédula, nombre y nota. Se deben elaborar los métodos get y set para cada uno de los datos. 1. Identificación de datos, acciones y limitaciones • Datos de entrada: cédula, nombre, nota. • Datos de salida: no hay. • Acciones: getCedula, getNombre, getNota, setCedula, setNombre y setNota. • Limitaciones: No tiene método principal, se almacenará como una librería. 2. Definición de clases • Identificación de posibles clases (sustantivos relevantes): estudiante. • Relación de los sustantivos con los datos y las acciones: Estudiante: cédula, nombre y nota. • Clases seleccionadas: Estudiante. • Definición de constructor y destructor para cada clase: Estudiante(), ~Estudiante(). • Diagramación de la clase con sus variables y métodos: Estudiante -cedula -nombre -nota +Estudiante() +getCedula() +getNombre() +getNota() +setCedula(ENTERO cc) +setNombre( CADENA nom) +setNota(REAL no) +~Estudiante()

3. Definición del método principal No tiene método principal. La clase será de ayuda para implementar el próximo ejercicio.

254

Cap. 7 - Arreglos /* EJERCICIO RESUELTO Cap7_Ejer8 * Librería estudiante * Efraín Oviedo*/ #include using namespace std; class Estudiante { long cedula; char nombre[42]; float nota; public: Estudiante() { cedula = 0; nota = 0.0F; strcpy(nombre, “ “) ; } float getNota() { return (nota); // Retorna la nota de un elemento. } void setNota(float no) { nota = no; // Actualiza la nota de un elemento. } char* getNombre() {

};

return (nombre); } void setNombre(char nom[42]) { strcpy(nombre,nom); } void setCedula(long cc ) { cedula = cc; // Actualiza la cedula. } long getCedula() { return (cedula); // Retorna la nota de un elemento. }

Ejercicio resuelto

Cap7-Ejer09

Crear un programa que implemente una lista de clase de n estudiantes usando las variables y métodos elaborados en el anterior ejercicio (Cap7Ejer08). Se deben construir métodos para: leer lista, mostrar la lista original, mostrarla ordenada por cédula y por nombre, buscar un estudiante en la lista y modificarle la nota a un estudiante. 1. Identificación de datos, acciones y limitaciones • Datos de entrada: cédula, nombre, nota de cada uno de los n estudiantes matriculados en un curso, que serán almacenados en un vector de objetos v.

255

C++ - Efrain Oviedo Regino

• • •

Datos de salida: listado de estudiantes ordenados ascendentemente por cédula, listado ordenado ascendentemente por nombre y modificar la nota de un estudiante, buscándolo en la lista por el campo cedula. Acciones: leer campos de la lista, imprimirlos, ordenar por cédula, ordenar por nombre, buscar por cédula a un estudiante y modificar su nota. Limitaciones: No tiene método principal y solo se hace cambio de nota.

2. Definición de clases • Identificación de posibles clases (sustantivos relevantes): ListaClase. • Relación de los sustantivos con los datos y las acciones: ListaClase: Todas las acciones. • Clases seleccionada: ListaClase (). • Diagramación de la clase ListaClase -n -v[50] +ListaClase() +leerLista (ENTERO i, ENTERO c, CARACTER nom, REAL no) +imprimirLista() +ordenarPorCedula() +ordenarPorNombre() +buscarEstudiante(ENTERO cc) +cambiarNota()

Explicación de los métodos: Los métodos usados ya han sido explicados; solo hay que decir que en los métodos de ordenamiento se utiliza el método de selección directa y la búsqueda se hace en forma secuencial. Variables usadas en los métodos: i, k: Variables de control de los ciclos. cc: Cédula del estudiante. no: Nota del estudiante. nom: Nombre del estudiante. posm: Posición donde se encuentra el valor menor buscado. men: Menor valor buscado. aux: Variable auxiliar para hacer los intercambios. 3. Definición del método principal No tiene, ya que servirá para implementar el próximo ejercicio.

256

Cap. 7 - Arreglos /* EJERCICIO RESUELTO Cap7_Ejer09 * Librería crearLista * Efraín Oviedo*/ #include #include <string.h> #include “estudiante.h” // Ejercicio resuelto cap7-Ejer08 class ListaClase { Estudiante v[50]; int n; public: ListaClase (int ne) { n = ne; } //********************************************************************// void leerLista(int i, long c, char nom[42], float no) { v[i].setCedula(c); v[i].setNombre(nom); v[i].setNota(no); } //*******************************************************************// void imprimirLista() { int i; for(i = 0; i < n; i++) { cout<<” “<
} //*******************************************************************// // ORDENA ASCENDENTEMENTE POR CEDULA. void ordenarPorCedula() { int i, k, posm; long men; Estudiante aux; for (i = 0;i < (n - 1); i++) { posm = i; men = v[i].getCedula(); for (k = (i + 1); k < n; k++) { if (men > v[k].getCedula()) { men = v[k].getCedula(); posm = k; } } aux = v[i]; v[i] = v[posm]; v[posm] = aux; } } //*******************************************************************/ void ordenarPorNombre() {

257

C++ - Efrain Oviedo Regino /* EJERCICIO RESUELTO Cap7_Ejer09 continuación char menor[42]; int posmen, i, k; Estudiante aux; for (i = 0; i < (n - 1); i++) { strcpy(menor, v[i].getNombre()); posmen = i; for (k = (i + 1);k < n; k++) { if (strcmp(menor, v[k].getNombre()) > 0) { strcpy(menor, v[k].getNombre()); posmen = k; } } aux = v[i]; v[i] = v[posmen]; v[posmen] = aux; } } int buscarEstudiante(int cc) { int i = 0; while ((i < n) && (cc != v[i].getCedula())) { i++; } if (i < n) { return (i); } else { return (-1); }

};

258

} void cambiarNota() { int respuesta; int ced; float no; cout<<”DIGITE LA CEDULA DEL ESTUDINTE A CAMBIAR LA NOTA: “; cin>>ced; respuesta = buscarEstudiante(ced); if (respuesta > -1) { cout<<”DIGITE LA NUEVA NOTA: “; cin>>no; v[respuesta].setNota(no); } else { cout<<”EL ESTUDIANTE CON CEDULA “<
Cap. 7 - Arreglos

Ejercicio resuelto Cap7-Ejer10 Elaborar un método principal que invoque los métodos de las clases de los ejercicios Cap7-Ejer9 y Cap7-Ejer8. Como Cap7-Ejer9 utiliza la clase desarrollada en Cap7-Ejer8, solo hay que utilizar la clase ListaClase desarrollada en el ejercicio Cap7-Ejer9. Método principal Se debe construir un objeto de ListaClase para invocar sus métodos y se deben leer los datos del estudiante para invocar al método leerLista. Definición de variables: ne: Número de estudiantes por ingresar. a: Objeto de la clase ListaClase para invocar los métodos. Método principal. /* EJERCICIO RESUELTO Cap7_Ejer10 * Método principal * Efraín Oviedo*/ #include// #include// #include “crearlista.h” //Recuerde que esta librería incluye a // estudiante.h using namespace std; int main() { int ne; long c; char nom[42]; float no; system(“cls || clear”); cout<<”\n\t\tDIGITE EL NUMERO DE ESTUDIANTES: “; cin>>ne; ListaClase a = ListaClase(ne); for(int i = 0; i < ne; i++) { system(“cls || clear”); cout<<”\n\t\tDIGITE CEDULA DEL ESTUDIANTE : “<<(i + 1)<<” “; cin>>c; cout<<”\n\t\tDIGITE NOMBRE DEL ESTUDIANTE: “<<(i + 1)<<” “; cin>>ws; cin.getline(nom, 42); cout<<”\n\t\tDIGITE LA NOTA DEL ESTUDIANTE : “<<(i + 1)<<” “; cin>>no; a.leerLista(i, c, nom, no); } 259

C++ - Efrain Oviedo Regino /* EJERCICIO RESUELTO Cap7_Ejer10 continuación system(“cls || clear”); cout<<”VECTOR ORIGINAL: \n”; a.imprimirLista(); cout<<”\n\n”; cin.ignore().get(); a.ordenarPorCedula(); system(“cls || clear”); cout<<”VECTOR ORDENADO POR CEDULA: \n”; a.imprimirLista(); cout<<”\n\n”; cin.ignore().get(); system(“cls || clear”); a.ordenarPorNombre(); cout<<”VECTOR ORDENADO POR NOMBRE: \n”; a.imprimirLista(); cout<<”\n\n”; cin.ignore().get(); system(“cls || clear”); cout<<”\nCAMBIO DE NOTA: “<<endl; a.cambiarNota(); system(“cls || clear”); a.imprimirLista(); cout<<”\n\n\t\t”; cin.ignore().get(); }

7.3. Arreglos de dos dimensiones o matrices Las matrices son estructuras de datos que organizan su información en forma de tablas o planos; es decir, los elementos que las conforman están dispuestos bajo dos conceptos de clasificación (fila y columna). Puede mirarse una matriz como un vector de vectores; por lo tanto, es un conjunto de componentes en el que se necesitan dos subíndices para identificar un elemento que pertenezca al arreglo, y su almacenamiento en la memoria se hace por filas. Dos de los principales usos de las matrices son la resolución de problemas de ecuaciones lineales y diferenciales y el cálculo de derivadas parciales aunque, desde luego, tienen muchas aplicaciones en diferentes ramas del saber. Definición de una matriz: tipo de dato nombre [número de filas][número de columnas]

260

Capítulo 8

Introducción a Qt Framework En los capítulos anteriores se ha utilizado a Qt Creator para desarrollar problemas cuya solución no usa interfaz gráfica, sino que los resultados se muestran por consola de comandos. Antes de llegar a implementar soluciones gráficas usando Qt, se definirán los aspectos importantes de éste, que intervienen en los modelos de desarrollo de problemas en forma gráfica, por lo tanto se hará un acercamiento a lo que es un framework. Un framework se puede definir como un conjunto de módulos y librerías prediseñados, que sirven de base para la organización y desarrollo de programas (software) en una forma más corta. Un módulo es un conjunto de librerías y herramientas para trabajar en un enfoque específico con Qt Framework. Generalmente contiene programas, bibliotecas, un lenguaje de programación y algunas otras herramientas, de las cuales, algunas se definen a continuación. Qt es un conjunto de bibliotecas multiplataforma desarrolladas en C++ que se usan fundamentalmente para desarrollar aplicaciones gráficas de usuario (GUI) y de consola, tales como herramientas tipo terminales, línea de comandos y consolas para servidores. Qt utiliza el lenguaje de programación C++ de forma nativa, adicionalmente puede ser utilizado en varios otros lenguajes de programación a través de bindings. También es usada en sistemas informáticos empotrados para automoción, aeronavegación y aparatos domésticos como frigoríficos. Qt fue desarrollado como código libre a través del portal web del proyecto (http://qt-project.org/). Qt Project reúne los esfuerzos de la comunidad y la industria, contando con el apoyo de Qt Company, Nokia y Digia. 299

C++ - Efrain Oviedo Regino

La primera versión de Qt fue construida por la empresa noruega Trolltech, pero el 17 de junio de 2008 Nokia adquiere Trolltech y con ello los derechos de Qt Framework, quien es la propietaria actualmente y ella misma se encarga de actualizar el código. Las publicaciones como código libre se hacen sobre los términos de GNU Lesser General Public License.

8.1. Qt SDK Qt SDK (Kit de Desarrollo de Software) contiene todas las herramientas para permitir a los programadores crear aplicaciones con Qt Framework. y abarca todas las librerías base de Qt tales como Qt Core, Qt GUI, Qt Webkit, y además incluye las herramientas de desarrollo como el Qt Creator, el IDE por defecto de Qt, y el Qt Designer (GUI Designer), una aplicación para diseñar nuestras ventanas de forma gráfica. Algunas de las aplicaciones multiplataforma creadas con Qt SDK son: Google Earth, Skype, Linux Multimedia Studio y el reproductor multimedia VLC. El API (interfaz de programación de aplicaciones) de la biblioteca cuenta con métodos para hacer búsqueda en bases de datos mediante SQL, así como el uso de XML gestión de hilos, soporte de red, una API, para la manipulación de archivos y otros comandos para el manejo de ficheros, además de estructuras de datos básicas. Qt dispone de un conjnto de bindings para diversos lenguajes de programación, tales como: PyQt, Python, PySide, PythonQt, Qyoto, QtRuby, QtAda, FreePascal, Perl Qt4, PHP-Qt, etc. El siguiente gráfico muestra la estructura de Qt SDK.

300

Cap. 8 - Introducción a Qt Framework

8.1.1. Qt Essentials Qt Essentials es la librería que tiene todos los módulos necesarios para trabajar en cualquier plataforma y enfoque con Qt Framework. A continuación se hace una corta definición de los módulos que están incluidos en Qt Essentials. Éstas se hacen con el fin de que el lector tenga un conocimiento de ellas, pero que en la realidad, cuando se implementa una aplicación gráfica, no hay que saber qué hace cada módulo, ósea que son tácitas cuando se desarrolla la aplicación. a. QtCore: Se encarga de la funcionalidad fundamental de Qt, brinda los mecanismos de todas las funcionalidades no gráficas. Todos los otros módulos de Qt Essentials se basan en QtCore. b. Qt Network: Éste módulo se usa para desarrollar aplicaciones de red y trae soporte para IPv4 e IPv6 a través de los protocolos de comunicación TCP y UDP, así como mediante el control del estado de la conectividad del dispositivo. c. QtGUI: Brinda soporte básico para la construcción de interfaces gráficas multiplataforma, permite el manejo de eventos, el uso de OpenGL, que es una librería usada para construir gráficos de dos o tres dimensiones, también puede usar APIs gráficos de bajo nivel, entre otras. d. QWidgets: Es una extensión de QtGui. Son los elementos principales, necesarios para la construcción de interfaces gráficas de usuario, tales como: botones, cuadros de edición, etiquetas (labels), cuadros de diálogo, menús, etc. Se usan para recibir información del usuario, mostrar datos o estados diversos e. Qt Quick: Al igual que el módulo anterior, se deriva de QtGUI.. Éste permite crear interfaces de usuario utilizando QML, el cual es un pseudo lenguaje para escribir interfaces de usuario personalizadas en aplicaciones altamente dinámicas, generando aplicaciones más rápidas con menor tiempo de ejecución. f. Qt WebKit: Permite usar el navegador WebKit, el cual es el conjunto de librerías que permite navegar y manipular en contenido web y se puede integrar con aplicaciones de escritorio.

301

C++ - Efrain Oviedo Regino

Por su importancia dentro de su contenido se explica en detalle lo que es QtCore QtCore es el módulo de Qt Essentials que contiene todas las clases y librerías que implementan el desarrollo con Qt Framework, como contenedores, hilos, y tipos de datos básicos como QString, QInt, QFloat; estos son usados posteriormente por los componentes gráficos de Qt. En la siguiente tabla se muestran los tipos de datos básicos más usados de QtCore y su descripción. qintSIZE8 qintSIZE16 qintSIZE32 qintSIZE64 quintSIZE8 quintSIZE16 quintSIZE32 quintSIZE64 float Double QString

Entero de 8 bits Entero de 16 bits Entero de 32 bits Entero de 64 bits Entero de 8 bits sin signo Entero de 16 bits sin signo Entero de 32 bits sin signo Entero de 64 bits sin signo Decimal de 32 bits Decimal de 64 bits Cadena de caracteres

Dentro de la programación, el manejo de texto se encuentra muy a menudo. Para manipular éste tipo de información, Qt tiene las clases QString y QChar. Las clases QString y QChar permiten implementar los estándares de codificación de caracteres Unicode. Este es un estándar de codificación de caracteres que permite trabajar con distintos alfabetos y símbolos alfanuméricos. Definición de un QString: La definición de un QString se hace de la misma manera como se ha definido una variable de caracteres en los capítulos anteriores, es decir, el tipo de dato, el nombre de la variable y opcionalmente, inicializar la variable que se está definiendo. QString variable = “Cadena”; Un QString es igual a un string en C++, es decir, un arreglo de caracteres, o sea que un QString es un arreglo de QChars. QChar caracter = variable[0]; //Almacena el carácter C

302

Cap. 8 - Introducción a Qt Framework

La diferencia fundamental entre los caracteres nativos de C++ y los de Qt es que los caracteres de Qt tienen codificación Unicode. El tipo de dato QString tiene asociados varios métodos para el manejo de caracteres, se mostrarán algunos de ellos • prepend (QString str): Recibe una cadena de caracteres, añade los caracteres al inicio de una cadena de texto almacenada en una variable. variable.prepend(“La “); /* Añade “La” al inicio del contenido de ‘variable’. Resultado: “La Cadena” */ • append (QString str): Recibe una cadena de caracteres, añade los caracteres al final de una cadena de texto almacenada en una variable. variable.append(“ De Texto”); /*Añade “ De Texto” al final de ‘variable’ Resultado: “La Cadena De Texto”*/ • remove (int inicio, int cantidad): Permite eliminar caracteres de una cadena de texto. Recibe dos parámetros, el primero indica desde qué posición se empezará a borrar caracteres, el segundo indica el número de caracteres que serán borrados. variable.remove(0,2); /*Elimina los tres primeros caracteres de ‘variable’ Resultado: “Cadena De Texto”*/ • size (): Retorna el tamaño de un arreglo de caracteres. int n = variable.size();

// n = 15

• length (): Equivalente al método size(). Retorna el tamaño de un arreglo de caracteres. int n = variable.length();

/* n = 15, o sea el mismo resulado anterior */

• indexOf (QString str, int posición): El primer parámetro es una cadena de caracteres que se desea buscar en otra cadena de caracteres almacenada en una variable QString, y el segundo parámetro es la posición donde se inicia la búsqueda. Si el segundo parámetro es -1, empezará en la última posición, si es -2, empezará en la penúltima posición, y así sucesivamente. indexOf() retorna la posición de la primera ocurrencia que encuentra desde la posición dada. Si no encuentra ninguna coincidencia, retorna -1. Si la posición desde la cual se va a buscar es 0, se puede omitir.

303

C++ - Efrain Oviedo Regino

variable.indexOf(”de”,0); // retorna 2 variable.indexOf(”de”, 5); // retorna -1 variable.indexOf(”de”); /* retorna 2 ya que es igual a la primera instrucción*/ • replace (int posición, int n, QString str): Reemplaza una cadena de texto. Recibe tres parámetros, el primero es la posición desde la cual se empezarán a reemplazar los caracteres, el segundo es el número de caracteres a reemplazar, y el último es la cadena que se insertará en la cadena original. QString x = “¡Hola amigo!”; QString y = “Adiós”; x.replace(1, 5, y); // x == “¡Adiós amigo!” • resize (int tamaño): Permite redefinir el tamaño de un arreglo de caracteres. Si el tamaño es más grande que la cadena original, los espacios vacíos se llenarán con valores sin inicializar. Si es más pequeño, borrará los caracteres que sobren a partir de tamaño. QString str = “Hola!”; str.resize(2); // str == “Ho” str.resize(4); // str == “Ho--”, donde ‘–‘ es un // valor sin inicializar • isEmpty (): Permite saber si una cadena está o no vacía, devuelve un valor booleano ‘true’ si la cadena no tiene caracteres, o false si tiene al menos uno. QString x = “Hola!”; QString y = “”; x.isEmpty(); // Retorna false y.isEmpty(); // Retorna true

304

Capítulo 9

Creación de aplicaciones gráficas En este capítulo se ahondará un poco más en Qt Creator respecto a lo ya explicado en el capítulo uno y ocho, se adicionaran explicaciones propias del entorno que nos ofrece y se implementarán algunos de sus componentes básicos para el desarrollo de interfaces gráficas, así como sus mecanismos de control, propiedades, y comportamientos.

9.1. Crear un proyecto Para empezar un proyecto gráfico desde cero, se da clic en New Project. Al momento de crear un proyecto, Qt ofrece una gama de plantillas, cada una con una funcionalidad distinta, se inicializa en las plantillas de aplicaciones. Qt Console Application, por ejemplo, permite crear aplicaciones de consola, Qt Widgets Application en cambio, permite crear aplicaciones orientadas a interfaz gráfica, en esta última nos centraremos en este capítulo.

305

Related Documents

C++ Soportado Con Qt
February 2021 0
Ades - Catch (qt)
January 2021 0
C C C Cc C
February 2021 0
C Cc C C
January 2021 3

More Documents from "Saurav Anchlia"