Computer Science, Programación en C++

C++ Tipos de variables y aritmética

ANTERIOR: C++ Declaración de variables

En C ++, cada nombre y cada expresión tiene un tipo que determina las operaciones que se pueden realizar en él. Por ejemplo, la declaración:

…..

{

     int inch;

    …..

    …..

}

…..

…..

especifica que inch es del tipo int; es decir, inch es una variable entera.

C ++ ofrece una variedad de tipos fundamentales de variables, que se corresponden directamente con las características de un hardware en particular.

Por ejemplo:

bool // Boolean, los valores posibles son verdadero(true) o falso (false)

char // Carácter, por ejemplo ’a’, ’z’, and ’9’

int // Entero, por ejemplo, 1, 42, and 1066

double // doble precisión con punto flotante (double-precision floating-point number), por ejemplo, 3.14 and 299793.0

Cada uno de los tipos fundamentales tiene un tamaño fijo que determina el rango de valores que puede almacenarse en ellos (para enteros) o la precisión y rango de esos valores (para números con punto flotante). Una variable char tiene un tamaño natural típico de un byte (8 bits). Los tamaños de otros tipos de variables se calculan como múltiplos del tamaño de una variable char. El tamaño de un tipo está definido por la implementación (es decir, puede variar entre diferentes máquinas). Dicho tamaño puede ser consultado mediante el operador sizeof; por ejemplo sizeof (char) es igual a 1 y sizeof (int) es a menudo 4. Podemos representar gráficamente los tamaños:

Los operadores aritméticos se pueden usar y combinar de la siguiente manera:

x+y // suma

+x // signo positivo

x−y // resta

−x // signo negativo

x∗y // multiplicación

x/y // división

x%y // resto (módulo) para enteros

Lo mismo pasa con los operadores comparadores:

x==y // igual

x!=y // diferente

x<y // menor que

x>y // mayor que

x<=y // menor o igual quel

x>=y // mayor o igual que

En asignaciones y en operaciones aritméticas, C ++ realiza todas las conversiones significativas entre los tipos básicos de variables, para que puedan mezclarse libremente como se observa en la siguiente declaración:

…..

…..

void some_function() // no retorna ningún valor al ejecutar esta función

{

     double d = 2.2; // inicializa el número d tipo floating-point

     int i = 7; // inicializa el entero i

     d = d+i; // asigna una suma al número d

     i = d∗i; // asigna un producto al número i

}

…..

…..

Notar que = es el operador de asignación, mientras que == es el operador que evalúa una igualdad.

C ++ ofrece una variedad de notaciones para expresar la inicialización, como el = usado anteriormente, y una forma universal basada en listas de inicializadores delimitados por llaves, como se ilustra a continuación:

double d1 = 2.3;

double d2 {2.3};

complex z = 1; // un número complejo del tipo double-precision floating-point

complex z2 {d1,d2};

complex z3 = {1,2}; // el operador = es opcional con { … }

vector v {1,2,3,4,5,6}; // un vector de variables tipo ints

Una constante no puede dejarse sin inicializar y una variable solo debe dejarse sin inicializar en circunstancias extremadamente raras. No introduzca un nombre hasta que tenga un valor adecuado para ello.

Al definir una variable, en realidad no necesita indicar su tipo explícitamente cuando

se puede deducir del inicializador:

auto b = true; // tipo boolean

auto ch = ’x’; // tipo char

auto i = 123; // tipo int

auto d = 1.2; // tipo double

auto z = sqrt(y); // z tiene el mismo tipo que el entregado por la operación sqrt(y)

Con el operador auto, usamos la sintaxis = porque no hay una conversión involucrada que pueda causar problemas.

Además de los operadores lógicos y aritméticos convencionales, C ++ ofrece operaciones más específicas para modificar una variable:

x+=y // x = x+y

++x // incrementa en uno: x = x+1

x−=y // x = x-y

−−x // reduce en uno: x = x-1

x∗=y // escala: x = x*y

x/=y // escala: x = x/y

x%=y // porcentaje de, x = x%y

Estos operadores son concisos, convenientes y muy utilizados.

C ++ admite dos nociones de inmutabilidad:

const: lo que significa aproximadamente ”Prometo no cambiar este valor”. Esto se usa principalmente para especificar interfaces, de modo que los datos se pueden pasar a funciones sin temor a que se modifiquen. El compilador hace cumplir la promesa hecha por const.

• constexpr: que significa aproximadamente ”para ser evaluado en tiempo de compilación”. Esto se usa principalmente para especificar constantes, para permitir la ubicación de datos en la memoria donde es poco probable que se corrompan y para mejorar el rendimiento.

double sum(const vector&); // la variable sum no modificará su argumento

const int dmv = 17; // dmv es una constante

constexpr double max1 = 1.4∗square(dmv); // OK si square(17) es una expresión constante

const double max2 = 1.4∗square(dmv); // OK, puede ser evaluado en run time

vector v { 1.2, 3.4, 4.5 }; // v no es una constante

const double s1 = sum(v); // OK: evaluado en run time

constexpr double s2 = sum(v); // error : sum(v) no es una expresión constante

El siguiente ejemplo ilustra por sí mismo lo estudiado hasta ahora:

#include “stdafx.h”

#include <iostream>

double square(double x) //eleva al cuadrado un número tipo double-precision                                                           //floating point

{

     return x * x;

}

void print_square(double x)

{

     std::cout << “the square of” << x << “is” << square(x) << ‘\n’;

}

int main()

{

     print_square(1.234); //imprime el cuadrado de 1.234

     print_square(5.555); // imprime el cuadrado de 5.555

}

Output:

Std :: especifica que el nombre cout se encuentra en el espacio de nombres de la biblioteca estándar. Sin el operador std :: , la declaración “cout << “the square of” << x << “is” << square(x) << ‘\n’;” no tiene sentido.

Un término void indica que la función print_square(double x) no devuelve ningún valor.

Numeric Data

C ++ contiene tipos de datos intrínsecos para almacenar valores numéricos en el código de su aplicación. Es importante recordar que estos valores están basados en binarios y no son tan flexibles como sus equivalentes de base 10. Por ejemplo, en términos matemáticos de un entero de base 10, la definición es un valor que es infinito negativo hasta infinitos positivos. Las computadoras modernas todavía no pueden representar números tan grandes. Tome como ejemplo el tipo int en la tabla de Tipos de Datos Numéricos. El rango no excede los 3 mil millones en cualquier dirección.

ANTERIOR: C++ Declaración de variables

Fuente:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth
  2. 2-Tour-Basics

Revisión literaria hecha por: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. +34 633129287

WhatsApp: +34 633129287

email: dademuchconnection@gmail.com

Computer Science, Programación en C++

C++ Declaración de variables

ANTERIOR: C++ Principios de la programación orientada a objetos

SIGUIENTE: C++ Tipo de variables y aritmética

Statements

Un programa C ++ se compone de varios componentes, tales como funciones, métodos, clases, etc. Las instrucciones que forman parte de un programa C ++ normalmente residen dentro de funciones o métodos. Estas funciones están compuestas por “statements” C ++. Encontrarás varios tipos de “statements” en tu código C ++ como se detalla a continuación:

  • declaraciones (declarations) – estas se usan para declarar variables y constantes que se usarán en la aplicación
  • asignaciones (assignments) – estas se usan para asignar valores a las variables en su código de aplicación
  •  directivas del pre procesador (preprocessor directives) – cubierto en el tema sobre Formato de código
  • comentarios (comments) – documentación del código
  • declaración de funciones (function declarations) – cubierto en el tema sobre Formato de código
  • declaraciones ejecutables (executable statements) – estos se utilizan para realizar operaciones y ejecutar instrucciones. Ejemplos serían cout << “Hello World!”; que imprime la palabra Hello World! e la consola.

En C, todas las variables deben declararse antes de que se utilicen en sentencias ejecutables. Su uso real aparece en otra parte del campo de aplicación (scope), a veces muy lejos. Entonces, deberíamos volver al comienzo del programa si queremos ver su tipo o su inicialización.

C ++ permite la declaración de una variable en cualquier parte del scope. Esto significa que una variable puede declararse directamente en el lugar de su primer uso. Esto hace que el programa sea mucho más fácil de escribir o leer, por lo que reducir los errores es más eficiente.

Declaración

Una declaración es una sentencia que introduce un nombre en el programa. Especifica un tipo para la entidad nombrada:

  • Un tipo (type) define un conjunto de valores posibles y un conjunto de operaciones (para un objecto).
  • Un objeto (object) es una unidad de memoria que tiene un valor de algún tipo.
  • Un valor (value) es un conjunto de bits interpretados de acuerdo a un tipo.
  • Una variable (variable) es el nombre de un objeto.

Primero observamos la definición de alcance (scope) de las variables.

Operador scope (Scope Resolution)

C ++ es un lenguaje estructurado por bloques. El mismo nombre de variable se puede usar para tener diferentes significados en diferentes bloques. El scope de la variable se extiende desde el punto de su declaración hasta el final del bloque que contiene la declaración. Una variable declarada dentro de un bloque se dice que es local a ese bloque. Considere el siguiente segmento de un programa:

…..

{

int x = 20;

…..

…..

}

…..

…..

{

int x = 10;

…..

…..

}

Las dos declaraciones de x se remiten a dos ubicaciones de memoria diferentes que contienen diferentes valores. Las declaraciones en el segundo bloque no pueden acceder a la variable x declarada en el primer bloque. Otro estilo es el siguiente:

El bloque dos está contenido en el bloque uno. El bloque interno de declaración, oculta una declaración de la misma variable en un bloque externo, por lo tanto, cada declaración de x hace que remita un objeto de datos diferente. Dentro del bloque interno, la variable x se referirá al objeto de datos declarado allí.

En C, no se puede acceder a la versión global de una variable desde dentro del bloque interno. C ++ resuelve este problema introduciendo el nuevo operador :: llamado operador de resolución de alcance (scope resolution operator). Esto puede ser para descubrir una variable oculta. Toma la siguiente forma:

Este operador permite el acceso a la versión global de una variable. Para ilustrar los conceptos presentados hasta ahora, veamos el siguiente ejemplo:

#include “stadfx.h”

#include <iostream>

using namespace std;

int m = 10; //global m

int main()

{

int m=20;//local m

{

int k = m;

int m = 30;//local m to inner block

cout << “We are in a inner block \n”;

cout << “k = ” << k << “\n”;

cout << “m = ” << m << “\n”;

cout << “::m = ” << :: m << “\n”;

}

cout << “\n We are in a outer block \n”;

cout << “m = ” << m << “\n”;

cout << “::m = ” << ::m << “\n”

return 0;

}

Salida:

Una aplicación principal del operador :: está en classes para identificar la clase a la que pertenece una función miembro. Esto se tratará en detalle más adelante donde hablaremos de classes.

En el ejemplo anterior, el operador int determina el tipo de datos como un entero. Esto nos lleva a la definición de tipos de datos en C ++.

Tipos Básicos de Datos (Basic Data Types)

Los tipos de datos en C ++ se pueden clasificar en varias categorías, como se muestra en la Figura 3.1:

Los compiladores C y C ++ son compatibles con todos los tipos de datos built-in (también llamados tipos básicos de datos), que se capturan y se muestran de la siguiente figura:

El tipo void tiene dos usos normales: 1) para especificar el tipo de retorno de una función cuando no devuelve ningún valor, y 2) para indicar una lista de argumento vacía para una función. Ejemplo:

void functl(void);

Explicaremos más acerca de cada tipo de datos a medida que ingresamos a ejemplos más complejos.

ANTERIOR: C++ Principios de la programación orientada a objetos

SIGUIENTE: C++ Tipo de variables y aritmética

Fuente:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth
  2. 2-Tour-Basics
  3. Curso  Module 1 Introducing C++  C++ Fundamentals

Revisión Literaria hecha por: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Jaén– Telf. +34 633129287

WhatsApp: +34 633129287

email: dademuchconnection@gmail.com

Computer Science, Programación en C++

C++ Principios de la programación orientada a objetos

SIGUIENTE: C++ Declaración de variables

Jueves 29 marzo 2018, 05:17 am

Today’s literature review:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth
    1. 1.3 A look at Procedure-Oriented Programming
    2. 1.4 Object-Oriented Programming Paradigm(OOP)
    3. 1.5 Basic concepts
    4. 2.3 A simple program “Hello world”

La Programación Orientada a Objetos (Object-Oriented Programming – OOP) es un enfoque que proporciona una forma de modularización de programas mediante la creación de un área de memoria particionada para datos y funciones que se pueden usar como plantillas para crear copias de dichos módulos bajo demanda. Por lo tanto, se considera que un objeto es un área particionada de la memoria de la computadora que almacena datos y un conjunto de operaciones que pueden acceder a esos datos. Como las particiones de memoria son independientes, los objetos se pueden usar en una variedad de programas diferentes sin modificación…..(Balagurusamy, 2008).

1.3 Las características exhibidas por la programación orientada a procedimientos (Procedure-Oriented Programming – POP) son:

  • El énfasis está en hacer cosas (algoritmos)
  • Los grandes programas se dividen en pequeños programas llamados funciones.
  • La mayoría de las funciones comparten datos globales.
  • Los datos se mueven abiertamente alrededor del sistema de una función a otra.
  • Las funciones transforman datos de un tipo a otro,
  • La técnica emplea es un enfoque de arriba hacia abajo para el diseño del programa.

1.4 En contraposición OOP trata los datos como un elemento crítico en el desarrollo del programa y no permite que fluyan libremente alrededor de un sistema. Ata datos más de cerca a las funciones que operan en él, y los protege de modificaciones accidentales de funciones externas. OOP permite la descomposición en una serie de entidades llamadas objetos y luego construye datos y funciones alrededor de estos objetos. La organización de data y las funciones en programación orientada a objetos se muestra en la Figura 1.6

OOP es un enfoque que proporciona una forma de modularización de programas mediante la creación de un área de memoria particionada para datos y funciones que se pueden usar como plantillas para crear copias de dichos módulos según la demanda. Por lo tanto, se considera que un objeto es un área particionada de la memoria de la computadora que almacena datos y un conjunto de operaciones que pueden acceder a esos datos. Dado que las particiones de memoria son independientes, los objetos pueden usarse en una variedad de programas diferentes sin modificaciones.

Un programa orientado a objetos consiste en un conjunto de objetos que se comunican entre sí. El proceso de programación en un lenguaje orientado a objetos, por lo tanto, implica los siguientes pasos básicos:

  • Crear clases que definen objetos y su comportamiento,
  • Crear objetos a partir de definiciones de clase y,
  • Establecer la comunicación entre los objetos.

Los objetos se comunican entre sí al enviar y recibir información de la misma manera que las personas se transmiten mensajes entre sí. Eso hace que sea más fácil hablar sobre la construcción de sistemas que modelan o simulan directamente sus contrapartes del mundo real.

Un mensaje para un objeto es una solicitud de ejecución de un procedimiento y, por lo tanto, invocará una función (procedure) en el objeto receptor que genera el resultado deseado. La transmisión de mensajes (Message passing) implica especificar el nombre del objeto, el nombre de la función (message) y la información que se enviará. Ejemplo:

Los sistemas de negocio reales a menudo son muy complejos y contienen muchos más objetos con atributos y métodos complicados. OOP es útil en este tipo de dominios de aplicación porque puede simplificar un problema complejo. Las áreas prometedoras para la aplicación de OOP incluyen:

  • Real-time systems
  • Simulation and modeling
  • Object-oriented databases
  • Hypertext, hypermedia and expertext
  • AI and expert systems
  • Neural networks and parallel programming
  • Decision support and office automation systems
  • CIM/CAM/CAD System

La programación orientada a procedimientos (POP) tiene mayores desventajas: (1) los datos se mueven libremente alrededor del programa y, por lo tanto, son vulnerables a los cambios causados por cualquier función en el programa; (2) POP no modela muy bien los problemas del mundo real. El OOP fue inventado para superar los inconvenientes de POP.

En OOP, un problema se considera como una colección de varias entidades llamadas objetos (Objects ). Los objetos son instancias de clases. El aislamiento de datos (Insulation) del acceso directo por el programa se denomina ocultación de datos (data hiding).

La abstracción de datos (Data abstraction) se refiere a reunir características esenciales sin incluir detalles de fondo.

La herencia (Inheritance) es el proceso por el cual los objetos de una clase adquieren propiedades de objetos de otra clase.

Polimorfismo (Polymorphism) significa un nombre, formas múltiples. Nos permite tener más de una función con el mismo nombre en un programa. También permite la sobrecarga de los operadores (overloading) para que una operación pueda mostrar diferentes comportamientos en diferentes instancias.

La vinculación dinámica (Dynamic binding) significa que el código asociado con un procedimiento dado no se conoce hasta el momento de la llamada en tiempo de ejecución (run-time).

//“Hello World” program

 

#include “stdafx.h”

#include <iostream>

using namespace std;

int main()

{

cout << “Hello World\n”;

return 0;

}

Un programa C++ es una colección de funciones. El ejemplo anterior contiene una sola función, main(). La ejecución del programa inicia con main(). Cada programa C++ debe tener una main().

cout ( C Out) representa la salida estándar en C++

El operador << es el operador de inserción o colocar en. Inserta los contenidos de la variable a su derecha al objeto a su izquierda, como se muestra en la Figura 2.1

Aquí, el identificador cout es un objeto predefinido que representa la pantalla y tiene una interfaz simple. Si cadena representa una variable de cadena, la siguiente instrucción mostrará su contenido:

cout << string;

El operador << es también el operador de desplazamiento a la izquierda ( left-shift operator), es un ejemplo de una sobrecarga del operador (una función que se puede comportar diferente dependiendo del argumento que recibe), un aspecto importante del polimorfismo. Hemos utilizado la siguiente directiva #include:

#include <iostream>

Esta directiva hace que el preprocesador agregue los contenidos del archivo iostream al programa. Contiene declaraciones para el identificador cout y el operador <<. El archivo de encabezado iostream debe incluirse al comienzo de todos los programas que usan declaraciones de entrada / salida.

Namespace, el espacio de nombres, es un nuevo concepto introducido por el comité de estándares ANSI C ++. Esto define un ámbito, un campo de aplicación o envergadura, para los identificadores que se usan en un programa. Para usar los identificadores definidos en el ámbito del espacio de nombres, debemos incluir la directiva using, como:

using namespace std;

En C ++, main () devuelve un valor de tipo entero (integer) al sistema operativo. Por lo tanto, cada main () en C ++ debe terminar con una declaración return (0); de lo contrario, puede ocurrir un error. El tipo de retorno para main () se especifica explícitamente como int.

Un programa un poco más complejo

Supongamos que nos gustaría leer dos números del teclado y mostrar su promedio en la pantalla.

#include “stdafx.h”

#include <iostream>

using namespace std;

int main()

{

float number1, number2, sum, average;

cout << “Enter two numbers: “; // prompt

cin >> number1; // reads number

cin >> number2; // read number from the keyboard

sum = number1 + number2;

average = sum / 2;

cout << “Sum=” << sum << “\n“;

cout << “Average=” << average << “\n“;

   return 0;

}

Comentarios:

El programa usa cuatro variables que son declaradas como tipo flotante por la declaración:

float number1, number2, sum, average;

Todas las variables deben declararse antes de ser utilizadas en el programa.

Operador de entrada. La declaración:

cin >> number1;

hace que el programa espere a que el usuario escriba un número, que se coloca en la variable number1. El identificador cin (C in) es un objeto predefinido en C ++ que corresponde con la entrada estándar tipo string.

El operador >> se conoce como extracción o obtiene del operador. Extrae el valor del teclado y lo asigna a la variable a su derecha. Este operador también puede estar overloaded.

null

 

Conexión en cascada de operadores de entrada / salida

Hemos utilizado el operador de inserción << repetidamente en las dos últimas declaraciones para imprimir los resultados:

cout << “Sum=” << sum << “\n”;

cout << “Average=” << average << “\n”;

Primero, envía la cadena “Sum =” a cout y luego envía el valor de sum. Finalmente, envía el carácter de nueva línea \ n para que la próxima salida esté en la nueva línea. Cuando se conecta en cascada un operador de salida, debemos asegurar espacios en blanco entre los diferentes elementos. La declaración dos se puede combinar como:

cout << “Sum=” << sum << “\n”

        << “Average=” << average << “\n”;

Esta es una afirmación pero proporciona dos líneas de salida. También podemos conectar en cascada el operador de entrada >> como se muestra a continuación:

cin >> number1 >> number2;

Los valores se asignan de izquierda a derecha.

SIGUIENTE: C++ Declaración de variables

Nota: Para ejecutar los ejercicios propuestos recomiendo descargar el IDE (Interface Development Environment) Visual Studio,  y luego para cada ejercicio seguir los pasos recomendados en el link: Introducción a C++ en Visual Studio. 

Fuente:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth

 

Revisión literaria hecha por Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. 00593998524011

WhatsApp: +593984950376

email: dademuchconnection@gmail.com