martes, 30 de abril de 2019

3.7 Operadores, operandos y expresiones.

3.5. OPERADORES, OPERANDOS Y EXPRESIONES

OPERADORES.

En todos los lenguajes de programación se utilizan operadores para efectuar operaciones aritméticas.Combinando las variables y constantes en expresiones aritméticas por medio de funciones adecuadas. Una expresión es un conjunto de datos o funciones unidos por operadores aritméticos, los cuales son: SUMA, RESTA, MULTIPLICACION, DIVISION, EXPONENCIAL Y MODULO.




OPERADOR LOGICO

En ocasiones en los programas se necesitan realizar comparaciones entre distintos valores, esto se realiza utilizando los operadores relaciones, los cuales son: Mayor que, menor que, menor igual que, mayor igual que, igual a, distinto a o diferente de.

OPERANDO.

Referente a la parte de la instrucción de lenguaje máquina de la computadora que designa la dirección de los datos con los que se debe operar.

EXPRESIONES.

Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. Por ejemplo: 
a + (b + 3) / c

Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las expresiones en: Aritméticas, Relacionales ,Lógicas


3.5.1 PRIORIDAD DE OPERADORES, EVALUACIÓN DE EXPRESIONES

Prioridad

Se llama prioridad al orden en el que se evalúa una expresión. 4D tiene una estricta prioridad izquierda-a-derecha. Por ejemplo: 3+4*5 devuelve 35 porque la expresión es evaluada como 3+4, dando 7, el cuál es multiplicado por 5, resultando 35. Se pueden utilizar paréntesis para cambiar la prioridad izquierda-a-derecha. Por ejemplo:
3+(4*5) devuelve 23 porque se evalúa primero la expresión (4*5), por estar entre paréntesis. El resultado es 20, lo cual es añadido el 3, dando el resultado final 23. Se pueden insertar paréntesis dentro de otros grupos de paréntesis. Es necesario asegurarse de que cada paréntesis izquierdo tiene su correspondiente derecho. La falta o el uso incorrecto de los paréntesis puede provocar resultados inesperados o expresiones no válidas.

EVALUACIÓN DE EXPRESIONES

Cuando en una expresión concurre mas de una operación, los paréntesis indicarán prioridad, es decir, la operación encerrada entre paréntesis se realizará en primer lugar. Además, algunos operadores tendrán preferencia sobre otros. Por ejemplo, en la operación a + b / c, primero se realizará b / c y posteriormente se le sumará a. En caso de que el programador quiera que se sume primero a y b para posteriormente dividir por c, tendríamos que hacer (a + b) / c. Si todos los operadores de una expresión tienen la misma prioridad, la operación se hará de izquierda a derecha, salvo cuando tengamos exponenciales, en tal caso, el orden será de derecha a izquierda, por ejemplo, al hacer 2**3**2 resulta el valor 2**9 = 512






3.4.4 PROPOSICIÓN DE ASIGNACIÓN.

La forma de una proposición de asignación es: a = b donde b es una expresión permitida, y a es el nombre de la variable donde se dejará el valor resultante de evaluar b.
Por expresión permitida se entiende a aquella expresión matemática que ocupa las operaciones y funciones nombradas como existentes, y escritas de la forma que para ellas se señala, respetando así la sintaxis en cada instrucción.
El signo igual, " = ", de a = b tiene el sentido de asignar a la variable a el valor que resulte de evaluar la expresión permitida b. Es decir, a = b. Que no es la misma definición usada en matemáticas para el signo: = .

El computador, al ejecutar una proposición de asignación evalúa la expresión del lado derecho del signo igual con los valores que en ese momento tengan las variables ahí ocupadas. Así, la expresión entregará valores probablemente distintos en las diversas ocasiones que por programa se evalúe esa expresión. Las siguientes son proposiciones de asignación correctas, A = 2.5 TO = 1 + XT I = I + 1 Y no son correctas las siguientes:

A + B = C 20 = 16.2 + 3.8 AL = (AT+3.4) / 110.302

3.5 Almacenamiento, direccionamiento y representación en memoria.

ALMACENAMIENTO,DIRECCIONAMIENTO Y REPRESENTACION DE MEMORIAS



Almacenamiento
Supongamos que la memoria utilizada tiene un tamaño de 4 Gigabytes y por tanto sus direcciones se representan con 32 bits. Las direcciones de memoria son números naturales en el rango [0, 232 – 1]. Pero este número natural es susceptible de ser almacenado él mismo en memoria. Es decir, se puede almacenar la representación binaria de una dirección de memoria en la propia memoria. Al tener un tamaño de 32 bits o 4 bytes, se utilizan para ello cuatro posiciones de memoria consecutivas.
Una dirección de memoria, por tanto, se puede considerar de dos formas posibles: o como una dirección de una celda de memoria, o como un número natural susceptible de ser manipulado como tal. Supóngase que en la posición de memoria 0×00000100 se encuentra almacenado el número entero de 32 bits 0×0153F2AB y que en la posición 0×00000200 se debe almacenar la dirección de dicho número. Para ello se almacena, a partir de la posición 0×00000200 el número 0×00000100 utilizando los cuatro bytes a partir de esa posición y se hace en orden creciente de significación al utilizar el esquema little endian.
En los dispositivos de almacenamiento del computador, se almacenan en forma temporal o permanentemente los programas y datos que son manejados por las aplicaciones que se ejecutan en estos sistemas.
Debido a la cantidad de información que es manejada actualmente por los usuarios, los dispositivos de almacenamiento se han vuelto casi tan importantes como el computador. Aunque actualmente existen dispositivos para almacenar que superan los 650 MB de memoria; no es suficiente por la falta de capacidad para transportar los documentos y hacer reserva de la información más importante.
Es por tal razón que hoy en día existen diferentes dispositivos de almacenamiento, que tienen su propia tecnología. En la presente investigación se estudiaran todos y cada uno de los dispositivos de almacenamiento de un computador, las distintas marcas, clasificación, entre otros puntos que se irán desarrollando a medida que se avanza en la investigación.
Los sistemas informáticos pueden almacenar los datos tanto interna (en la memoria) como externamente (en los dispositivos de almacenamiento). Internamente, las instrucciones o datos pueden almacenarse por un tiempo en los chips de silicio de la RAM (memoria de acceso aleatorio) montados directamente en la placa de circuitos principal de la computadora, o bien en chips montados en tarjetas periféricas conectadas a la placa de circuitos principal del ordenador. Estos chips de RAM constan de conmutadores sensibles a los cambios de la corriente eléctrica, esto quiere decir que los datos son almacenados por tiempo limitado (hasta que dejamos de suministrar energía eléctrica) por esta razón aparecen los dispositivos de almacenamiento secundarios o auxiliares, los cuales son capaces de conservar la información de manera permanente, mientras su estado físico sea óptimo. Los dispositivos de almacenamiento externo pueden residir dentro del CPU y están fuera de la placa de circuito principal.

Direccionamiento
Tras almacenar la dirección de memoria de un dato en la posición 0×00000200, ¿es posible obtener de nuevo el número 0×0153F2AB? La respuesta es afirmativa, pero no de forma inmediata, se debe obtener de memoria primero los cuatro bytes almacenados en la posición 0×00000200 y utilizarlos como una dirección de memoria de donde obtener los cuatro bytes contenidos en la posición 0×00000100. El acceso a este último dato se ha realizado de forma indirecta, es decir, mediante un acceso previo a memoria para obtener la dirección del dato final. Utilizando la notación funcional de operaciones sobre memoria, el acceso al dato se logra ejecutando Lectura(Lectura(0×00000200)).

Secure Digital (SD)
          Están basadas en el formato Multimedia Card (MMC). Las tarjetas marcadas como HC (High Capacity) funionan a alta velocidad y tienen tasas de transferencia de datos muy altas; algunas cámaras fotográficas digitales requieren este tipo de tarjetas para poder grabar video con fluidez o para capturar múltiples fotografías en sucesión rápida.

sd 1
Starmedia
         También conocidas como (Tarjeta de Disco Floppy en Estado Sólido). Son duraderas y su apariencia física es similar a la de un disquete, pero con el tamaño aproximado de una estampilla de correo. Su forma impide introducirlas en su ranura en sentido contrario.
SmartMedia
Memory Stick
Tarjetas digitales con con memoria flash diseñadas con la compañía Sony. Ademas de ser aptas para cámaras digitales de esta marca, las Memory Stick se pueden utilizar en una gran variedad de aparatos digitales. Estas tarjetas sirven para almacenar imágenes, música, datos, textos y gráficos Ofrecen una alta velocidadde acceso y o necesitan ningún dispositivo para la reproducción, pues disponen de un adaptador para disquetes.
                                                                                                                                                                             8gb-memory-stick


3.4 Identificadores.

dentificadores. Un identificador es un conjunto de caracteres alfanuméricos de cualquier longitud que sirve para identificar las entidades del programa (clases, funciones, variables, tipos compuestos) Los identificadores pueden ser combinaciones de letras y números. Cada lenguaje tiene sus propias reglas que definen como pueden estar construidos. Cuando un identificador se asocia a una entidad concreta, entonces es el "nombre" de dicha entidad, y en adelante la representa en el programa. Nombrar las entidades hace posible referirse a las mismas, lo cual es esencial para cualquier tipo de procesamiento simbólico.

Los identificadores C++ pueden contener las letras a a z y A a Z, el guión bajo "_" ("Underscore") y los dígitos 0 a 9.

Caracteres permitidos

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Dígitos permitidos

0 1 2 3 4 5 6 7 8 9
Solo hay dos restricciones en cuanto a la composición:
  • El primer carácter debe ser una letra o el guión bajo. El Estándar establece que los identificadores comenzando con guión bajo y mayúscula no deben ser utilizados. Este tipo de nombres se reserva para los compiladores y las Librerías Estándar. Tampoco se permite la utilización de nombres que contengan dos guiones bajos seguidos.
  • El estándar ANSI establece que como mínimo serán significativos los 31 primeros caracteres, aunque pueden ser más, según la implementación. Es decir, para que un compilador se adhiera al estándar ANSI, debe considerar como significativos, al menos, los 31 primeros caracteres.
Los identificadores distinguen mayúsculas y minúsculas, así que Sum, sum y suM son distintos para el compilador. Sin embargo, C++Builderofrece la opción de suspender la sensibilidad a mayúsculas / minúsculas, lo que permite la compatibilidad con lenguajes insensibles a esta cuestión, en este caso, las variables globales Sum, sum y suM serían consideradas idénticas, aunque podría resultar un mensaje de aviso "Duplicate symbol" durante el enlazado.
Con los identificadores del tipo pascal hay una excepción a esta regla, ya que son convertidos siempre a mayúsculas con vistas al enlazado.
Los identificadores globales importados desde otros módulos siguen las mismas reglas que los identificadores normales.
Aunque los nombres de los identificadores pueden ser arbitrarios (dentro de las reglas señaladas), se produce un error si se utiliza el mismo identificador dentro del mismo ámbito compartiendo el mismo espacio de nombres. Los nombres duplicados son legales en diferentes espacios de nombres con independencia de las reglas de ámbito.
Un identificador no puede coincidir con una palabra clave o con el de ninguna función de biblioteca.
El estándar ANSI distingue dos tipos de identificadores:
  • Identificadores internos; los nombres de macros de preprocesado y todas las que no tengan enlazado externo. El estándar establece que serán significativos, al menos, los primeros 31 caracteres.
  • Identificadores externos; los que corresponden a elementos que tengan enlazado externo. En este caso el estándar es más permisivo. Se acepta que el compilador identifique solo seis caracteres significativos y pueda ignorar la distinción mayúsculas/minúsculas






3.3 Tipos de datos.

Dato.
Un dato se define como la expresión general que describe los objetos con los cuales opera una computadora. Los datos de entrada se transforman por el programa, después de las etapas intermedias, en datos de salida.

Tipos de datos.
Los datos se clasifican en diversas categorías, según el tipo de máquina o del lenguaje en uso. Generalmente podemos encontrar las siguientes categorías :
  • Numéricos
  • Lógicos
  • Cadenas
   Datos Numéricos
Son aquéllos que representan una cantidad o valor determinado. Su representación se lleva a cabo en los formatos ya conocidos (enteros, punto y fracciones decimales si estas existen).
Estos pueden representarse en dos formas distintas :
Tipo Numérico Entero (integer).
  • Tipo Numérico Real (real).
 Enteros
Es un conjunto finito de los números enteros. Los enteros son números completos, no tienen componentes fraccionarios o decimales y pueden ser negativos y positivos.
Algunos ejemplos son :
3                     7
-10                  9
15
50
Reales
Consiste en un subconjunto de los números reales. Estos números siempre tienen un punto decimal y pueden ser positivos o negativos. Un número real consiste de un número entero y una parte decimal. Algunos ejemplos son :
0.52                            664.32
6.579                        8.0
-9.3                            -47.23
Cadenas
Son los datos que representan información textual (palabras, frases, símbolos, etc). No representan valor alguno para efectos numéricos. Pueden distinguirse porque son delimitados por apóstrofes o comillas.
Se clasifica en dos categorías :
  • Datos tipo carácter (char)
  • Datos tipo Cadena (string)
Datos Tipo Carácter
Es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato de este tipo contiene solo un carácter.
Reconoce los siguientes caracteres :
Caracteres Alfabéticos (A,B,C,…Z,a,b,c…z)
Caracteres Numéricos (0,1,2,…9)
Caracteres Especiales (+, -, *, /, ^, . , ;, <, >, $, …….)
Datos Tipo Cadena (string)
Es un sucesión de caracteres que se encuentran delimitados por una comilla (apóstrofe) o dobles comillas, según el tipo de lenguaje de programación. La longitud de una cadena de caracteres es el número de ellos comprendidos entre los separadores o delimitadores.
Ejemplos :
‘Hola Juan López’
’12 de octubre de 1496’
‘Enunciado cualquiera’
Nota: Los símbolos  disponibles para la formulación de caracteres y de cadenas son aquéllos que se encuentran en el código ASCII. ASCII (American   Standard   Code  for   Information   Interchange).
Lógicos
También se le denomina Booleano, es aquél dato que solo puede tomar uno de dos valores: Falso y verdadero. Se utiliza para representar las alternativas (si/no) a determinadas condiciones. Por ejemplo, cuando se pide si un valor entero sea primo, la respuesta será verdadera o falsa, según sea.
Las categorías y tipos que se mencionaron anteriormente se conocen como Tipos Simples, puesto que no poseen una estructura compleja. En forma adicional, cada lenguaje puede proporcionar la utilización de Tipos Compuestos, siendo estos, datos que tienen una estructura predeterminada.



3.2 Estructura básica de un programa.

2 Estructura básica de un programa.

Como ya se ha visto, cuando se escribe un programa lo que se trata de hacer es indicarle a la computadora cómo ha de resolver un problema. Estos programas siguen determinada estructuras, que dependen del tipo de lenguaje que usemos y del entorno en el cual lo creemos.


Principios generales:

  • Un cargador - todo programa necesita ser cargado en la memoria por el sistema operativo. De esto se encarga el intérprete.
  • Definición de los datos - la mayoría de los programas operan con datos y por lo tanto en el código fuente debemos definir que tipo de datos vamos a utilizar en el programa. Esto se realiza de manera diferente en los distintos lenguajes. Todos los lenguajes que usaremos tienen la posibilidad de crear una nueva definición de datos simplemente al utilizar los datos. Veremos esto en la próxima sección.
  • Instrucciones - son la parte central del programa. Las instrucciones manipulan los datos que hemos definido, realizan cálculos, muestran los resultados, etc.  
La Mayoría de programas siguen una de dos estructuras:

  

1.- Programas de lotes

Estos se ejecutan típicamente desde una línea de comando o automáticamente desde otra aplicación y tienden al siguiente patrón
  • Inicialización interna de los datos
  • Lectura de los datos ingresados
  • Procesamiento de los datos
  • Visualización o ejecución de los resultados

2.- Programas controlados por eventos

La mayor parte de las interfaces responden a eventos
Los programas controlados por eventos son generalmente así:
  • Inicialización interna de los datos
  • Espera de los eventos
  • Identificación de los eventos y actuación en consecuencia 
Estructura Básica de un programa en C/C++:

La estructura de un programa es una cuestión que puede ser abordada desde varios puntos de vista, consideremos para su estudio solo este caso. .
     1.       Componentes lógicos se refiere a los diversos elementos que componen una aplicación, desde los más complejos hasta los más simples.  Si comparamos un programa con un edificio, los elementos irían desde el edificio como un todo, a los ladrillos (sus elementos más pequeños).

     2.       Estructura lógica.Desde el punto de vista lógico, puede considerarse que los programas comprenden dos tipos de elementos diferentes: estructuras de datos y algoritmos. O dicho en otras palabras: datos, e instrucciones para su manipulación. Su representación codificada adopta dos formas: una entendible por la máquina (ejecutable y ficheros de datos) y otra entendible por el humano (fuente). Para el conjunto de ambas puede considerarse una escala conceptual que, si vamos de lo general a lo particular, podemos representarla como sigue:






Aplicación :•Comprende ejecutables y datos. Puede haber múltiples ficheros de ambos tipos (ficheros de datos y ejecutables)


Programa : •Parte de una aplicación (código) que puede cargarse y ejecutarse independientemente.

Fichero fuente:•Se llaman así (abreviadamente) los ficheros que contienen el código fuente (ficheros .C / .CPP) escrito por el programador


Función: Una parte de un programa (subrutina) con un nombre, que puede ser invocada (llamada a ejecución) desde otras partes tantas veces como se desee. Opcionalmente puede recibir valores (argumentos); se ejecuta y puede devolver un valor

Bloque: •Lista, que puede estar vacía, de sentencias delimitadas


Sentencia: •Las sentencias se componen de una o varias expresiones y tienen sentido computacional completo


Expresión: •Las expresiones son secuencias de tokens (operadores, operandos y elementos de puntuación) que especifican una computación; tienen sentido computacional en sí mismas. Son los bloques de computación más simples con los que se construye un programa [6 §5] aunque no pueden ejecutarse separadamente sino cuando forman una sentencia. Nota: la diferencia entre sentencia y expresión es algo arbitraria.




3.1 Introducción y estructura del entorno de un lenguaje de programación.


¿Qué es C++?

C++ es un lenguaje imperativo orientado a objetos derivado del C. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición "oficial" del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de operadores, referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la librería Estándar C es un subconjunto de la librería C++)

¿Cómo usar Dev C++?

Paso 1: Iniciar Dev C++

Inicio > Todos los programas > Bloodshed Dev-C++ > Dev-C++

Paso 2: Crear archivo nuevo

Archivo > Nuevo > Código fuente

Paso 3: Guardar como...

Archivo > Guardar Como...

Seleccionar carpeta. Por ejemplo: C:\programas-c\ o C:\c\

Introducir el nombre del archivo. Por ejemplo: hola-mundo (sin extensión)

Seleccionar tipo "C source files (*.c)".

Pulsar el botón de Guardar.

Paso 4: Editar

Teclear el código fuente del programa. Por ejemplo:

/* Programa: Hola mundo */

#include <conio.h>
#include <stdio.h>

int main()
{
    printf( "Hola mundo." );

    getch(); /* Pausa */

    return 0;
}

En la pantalla se verá algo parecido a:

Paso 5: Compilar

Ejecutar > Compilar

Si no hay fallos, el resultado de la compilación será Errors: 0 y Warnings: 0.

Paso 6: Ejecutar

Ejecutar > Ejecutar

Paso 7: Salir

Archivo > Salir

Paso 8: Ver archivos

El código fuente está en C:\c\hola-mundo.c

El archivo ejecutable es C:\c\hola-mundo.exe


Entornos de programación

Un entorno de programación es un programa o conjunto de programas que engloban todas las tareas necesarias para el desarrollo de un programa o aplicación. Estas tareas son básicamente las siguientes:
  • Edición del programa.
  • Compilación y enlazado.
  • Ejecución.
  • Depuración.
Hay quien además incluye la creación de documentación complementaria que facilita el mantenimiento del programa dentro de estas funciones.
Este tipo de entornos incorporan numerosas herramientas, utilidades, aplicaciones ya desarrolladas, ejemplos, tutoriales, etc. Todas ellas encaminadas a faciltiar y mejorar el desarrollo.



Procesadores del lenguaje: traductores, compiladores e intérpretes

Una vez editado nuestro programa es necesario que este sea procesado y tranformado en ódenes que puedan ser ejecutadas por el ordenador. Estas órdenes por tanto deben estar en el único lenguaje que la máquina entiende: el código máquina. Para ello son necesarios los proceadores de lenguaje cuyo concepto es muy amplio. Dentro de los procesadores de lenguaje destacan los traductores, los compiladores y los intérpretes.
Un compilador es un programa cuyo cometido es realizar la conversión de un programa escrito en un lenguaje de programación a su correspondiente equivalente en lenguaje máquina. El resultado que devuelve un compilador es un programa que ya puede ser ejecutado por el ordenador destino sin la necesidad de que el compilador esté presente. Por ejemplo, el lenguaje Pascal o el lenguaje C son lenguajes de programación que necesitan ser compilados. Cuando la conversión se realiza entre el lenguaje ensamblador (Assembly) y el código máquina, el compilador recibe el nombre específico de Ensamblador (Assembler).
Un intéprete es un programa que convierte línea por línea el programa escrito en un lenguaje de programación y que a medida que realiza la conversión ejecuta las instrucciones . Evidentemente el intérprete no devuelve nada ya que la ejecución se realiza de forma simultánea. Por este motivo, el intérprete debe estar presente durante la ejecución. Lenguajes de programación que tradicionalmente son interpretados son el LISP y el BASIC.
Un traductor es el nombre que reciben aquellos procesadores de lenguaje que convierten programas de unos lenguajes a otros pero no generan código máquina. Por ejemplo hay traductores de Pascal a C y viceversa.
Hay otros lenguajes de programación que combinan ambas estrategias como por ejemplo sucede con el lenguaje de programación Java . Para este lenguaje existen traductores que generan un programa en un código denominado intermedio que luego será ejecutado a través de un intérpre que recibe en este caso el nombre de máquina virtual Java.