viernes, 6 de septiembre de 2019

Sintaxis del Lenguaje de Programación “C/C++”


Concepto de variable

Si ya has visto algo de álgebra, seguramente ya conoces lo que es una variable. Una variable en sí es algo muy sencillo de concebir, es algo que puede variar. Con esa variación por lo general nos referimos a un valor, por ejemplo, el valor de un dólar en pesos mexicanos. Sin embargo, puede no ser solamente un número, sino también una palabra.

Consideraremos a una variable como algo cuyo valor puede variar


Tipos de variable

Cuando nos referimos a tipos de variables en realidad nos estamos refiriendo a distintos tipos de valores que una variable puede tener. Nota que no sólo decimos “distintos valores”, sino distintos tipos de valores. Por ejemplo, imagina que, como muy a menudo, quieres hacer un pastel, necesitarás mantequilla, azúcar, huevos, harina, cocoa, levadura, maicena y sal.
Sin embargo, cada ingrediente puede interpretarse distinto. Por ejemplo, al hablar de harina, puede ser de trigo, de maíz, de avena, etc.
De esta manera podemos interpretar cada ingrediente como tipo de variable, y cada tipo de ingrediente como su valor, como decir harina trigo, refiriéndonos a que estamos hablando de una variable tipo harina con valor de trigo. Nota que no puede haber algo como harina NataDulce, porque NataDulce es un valor posible de una variable tipo mantequilla.



Variables básicas en C++

Así como en la cocina encontramos distintos tipos de variable, que pueden tener distintos tipos de valores. Las variables básicas en C/C++ son:

int Para valores tipo números enteros, por ejemplo 5,231,−3432.
float Para valores tipo números no enteros, o con decimales, por ejemplo 3.14,823.23,−0.231.
char Para valores tipo carácter. Un carácter es un símbolo, como los que usamos para escribir, por ejemplo ‘T’, ‘c’, ‘r’, ‘/’, ‘5’. En este último caso el 5 será considerado como sólo un carácter, como sólo un símbolo y no un número.
bool Para valores tipo booleanos, es decir, de afirmativo o negativo, cierto o falso.

Declaración de variables

Cuando queremos utilizar algo, es de buena educación pedirlo primero, en C/C++ pasa exactamente lo mismo, aunque aquí es obligatorio. Cuando queremos usar una variable necesitamos primero declararla, y para hacer esto tomamos un formato como sigue:

1    tipo-de-variable nombre-de-variable[=valor] 

Nota que lo que está entre corchetes es opcional, puedes o no dar el valor a la variable al mismo tiempo que la declaras. Podemos además declarar varias variables del mismo tipo separándolas con comas. Si quisiéramos declarar variables como las básicas, sería así:


1  int T=1401, variable=1, a;
2  float pi=3.14, decimal, otra=0.23;
3  char letra='C', mas;
4  bool dicho=true, bandera=false;


Una variable puede tener cualquier nombre conformado por letras y/o números, que no incluya espacios, símbolos especiales, sea una palabra reservada del compilador (como el tipo de variable), ya lo tenga otra variable o función, o sea enteramente compuesta por números. Sí hay distinción de mayúsculas y minúsculas por lo que int Variable es diferente de int variable.
Nota que después de declarar una serie de variables de un mismo tipo hay que poner un ";"

En nuestro ejemplo, la variable a, decimal y mas que son las que no inicializamos es decir, que no les dimos nosotros un valor inicial, tienen un valor aleatorio que la computadora les ha dado. Este valor no es un valor manipulable, o al menos no hay que tratarlo como si lo fuera, pues es un valor que nosotros no conocemos. No hay problema si no inicializamos al momento de declarar una variable, siempre y cuando no la usemos hasta que no le hayamos dado un valor nosotros mismos. En cuanto nosotros ya le hayamos dado un valor podemos decir que ya está inicializada.


Tipos de Datos

La mayoría de los elementos de un programa se diferencian entre sí por su nombre. Por ejemplo, los tipos de datos básicos en lenguaje C se nombran como:

char, int, float, double y void
Cada uno de ellos es un identificador. Un identificador es el nombre que se le da a un elemento de un algoritmo (o programa). Por ejemplo, el tipo de dato int hace referencia a un tipo de dato que es distinto a todos los demás tipos de datos, es decir, los valores que puede tomar un dato de tipo entero, no son los mismos que los que puede tomar un dato de otro tipo.
Los identificadores char, int, float, double y void están predefinidos, forman parte del lenguaje C. No obstante, en el código de un programa también pueden existir identificadores definidos por el programador. Por ejemplo, un programa puede utilizar variables y constantes definidas por el programador.
En lenguaje C, a la hora de asignar un nombre a un elemento de un programa, se debe tener en cuenta que todo identificador debe cumplir las siguientes reglas de sintaxis:

      Consta de uno o más caracteres.
2      El primer carácter debe ser una letra o el carácter subrayado (_), mientras que, todos los demás pueden ser letras, dígitos o el carácter subrayado (_). Las letras pueden ser minúsculas o mayúsculas del alfabeto inglés. Así pues, no está permitido el uso de las letras 'ñ' y 'Ñ'.
      No pueden existir dos identificadores iguales, es decir, dos elementos de un programa no pueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador no pueda aparecer más de una vez en un programa.
De la segunda regla se deduce que un identificador no puede contener caracteres especiales, salvo el carácter subrayado (_). Es importante resaltar que las vocales no pueden llevar tilde ni diéresis.


¿Qué identificadores son válidos en C?


A continuación, se muestran algunos ejemplos de identificadores válidos en lenguaje C y otros que no lo son:

Ejemplo 1: Algunos identificadores válidos que pueden ser definidos por el programador son:
    numero
    dia_del_mes
    PINGUINO1
    _ciudad
    Z
Ejemplo 2: Los siguientes identificadores no son válidos por incumplir la segunda regla:
    123
    _DÍA
    numero*
    lugar de nacimiento
    año
Ejemplo 3: Los siguientes identificadores no pueden ser definidos por el programador:
    int
    char
int y char son identificadores predefinidos (ya existen en lenguaje C), por tanto, no pueden ser definidos por el programador, en cumplimiento de la tercera regla.
Los identificadores son sensibles a minúsculas y mayúsculas.
Ejemplo 4: Mes y mes son considerados identificadores distintos.
Por último, hay que decir que, es aconsejable que los identificadores tengan un significado afín a lo que representan.


Operadores aritméticos


Los operadores son elementos que disparan ciertos cálculos cuando son aplicados a variables o a otros objetos en una expresión.
Existe una división en los operadores atendiendo al número de operadores que afectan. Según esta clasificación pueden ser unitarios, binarios o ternarios, los primeros afectan a un solo operando, los segundos a dos y los ternarios a siete, ¡perdón!, a tres.
Hay varios tipos de operadores, clasificados según el tipo de objetos sobre los que actúan.

Son usados para crear expresiones matemáticas. Existen dos operadores aritméticos unitarios, ‘+’ y ‘-‘ que tienen la siguiente sintaxis:
    ++ Variable
    - -Variable

Asignan valores positivos o negativos a la expresión a la que se aplican.

En cuanto a los operadores binarios existen varios. ‘+’, ‘-‘, ‘*’ y ‘/’, tienen un comportamiento análogo en cuanto a los operandos, ya que admiten tanto expresiones enteras, como en coma flotante. Sintaxis:

    Variable + Variable
    Variable - Variable
    Variable * Variable
    Variable /  Variable

Evidentemente se trata de las conocidísimas operaciones aritméticas de suma, resta, multiplicación y división, que espero que ya domines a su nivel tradicional, es decir, sobre el papel.

Otro operador binario es el de módulo ‘%’, que devuelve el resto de la división entera del primer operando entre el segundo. Por esta razón no puede ser aplicado a operadores en coma flotante.
   
   Variable  %  Variable


Operadores relacionales


También denominados operadores binarios lógicos y de comparación, se utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relación. Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto o falso, es decir, producen un resultado booleano. Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa false (cero).

<        Menor que
>        Mayor que
<=     Menor o igual que
>=     Mayor o igual que
==     Igual que  (identidad)
!=      Desigual que (desigualdad)


 OPERADORES LÓGICOS EN C

Los operadores lógicos básicos en C son los siguientes:
Operador
Significado
Operador &&
Operador lógico and
Operador ||
Operador lógico or
Operador !
Operador lógico not


Suponiendo que tenemos cuatro variables A, B, C y D cuyos valores se han establecido en A = 5, B = 7, C = 2, D = 5 podríamos evaluar estas expresiones:
Expresión
Pregunta equivalente
Resultado
Ejemplo código
(A == B) && (A < B)
¿Es A igual a B y A menor que C?
0 (falso)
printf ("Pregunta (A == B) && (A < B) vale %d\n", (A == B) && (A < B));
(A == 5) || (A > 7)
¿Es A igual a 5 ó es A mayor que 7?
1 (verdadero)
printf ("Pregunta (A == 5) || (A > 7) vale %d\n", (A == 5) || (A > 7));
! ( A == 5 )
¿A es NO igual a 5?
0 (falso)
printf ("Pregunta ! ( A == 5 ) vale %d\n", ! ( A == 5 ));


Ejecuta un programa definiendo las cuatro variables A, B, C, D como de tipo entero, asígnales los valores correspondientes y comprueba las expresiones usando el código de ejemplo que hemos indicado. Define otras variables y haz algunas comprobaciones por tu cuenta. Es importante que escribas tu propio código y trates de razonar sobre los resultados esperados y los resultados obtenidos. En muchas ocasiones el resultado obtenido no será el esperado y como programador deberás de ser capaz de determinar el por qué de estas divergencias.

Arreglos


Los arrays, arreglos o vectores forman parte de la amplia variedad de estructuras de datos que nos ofrece C++, siendo además una de las principales y más útiles estructuras que podremos tener como herramienta de programación. Los arrays, arreglos o vectores (como los quieras llamar), son utilizados para almacenar múltiples valores en una única variable. En un aspecto más profundo, los arrays, permiten almacenar muchos valores en posiciones de memoria continuas, lo cual permite acceder a un valor u otro de manera rápida y sencilla. Estos valores pueden ser números, letras o cualquier tipo de variable que deseemos incluso tipos de datos propios.

Ejemplo

Imaginemos que queremos crear un programa con el cual podamos de algún modo almacenar los títulos y los autores de diferentes libros. El usuario es el encargado de suministrar la información de cada libro, así entonces, dado que es el usuario quien lo hace, nosotros no tenemos manera alguna de saber cuántos libros va querer él ingresar por medio de nuestro programa. El caso principal es que queremos almacenar en la memoria el titulo y el autor de TODOS y cada uno de los libros. Entonces ¿cómo crees que podrías hacer esto? Con lo que sabemos hasta hora, se nos podrían ocurrir un par de cosas. Veamos:

Posible Solución 1: Sin usar vectores (errónea):
Podríamos pensar primero, "listo, está bien, es fácil, declaro una variable llamada titulo y otra autor, ambas de tipo string y se las pido al usuario", pues bien, esta solución digamos que nos permite almacenar la información del primer libro que el usuario ingrese, pero en cuanto desee ingresar otro libro ¿qué vamos a hacer?, si lo hacemos así, cuando el usuario ingrese la información para un nuevo libro, va a sobrescribir los valores anteriores y habremos perdido la información del primero, de manera que esta solución no es válida.

Posible Solución 2: Sin usar vectores o matrices (errónea):
Pensando un poco más en esto, se nos ocurre una forma de almacenar la información de cada libro, podríamos crear un par de variables distintas para cada libro. Pero de inmediato nos damos cuenta que si por ejemplo al usuario se le cruzara por la cabeza ingresa información para 10 libros tendríamos entonces ¡20 variables distintas!, 2 por cada libro, no es mucho, pero si se le ocurriera ingresar 1000 libros, ¿estarías dispuesto a declarar 2000 variables?. De modo que esta alternativa es incluso peor que la anterior y seguimos aún sin solucionar nuestro problema.

Posible Solución 3: Usando vectores o matrices (correcta):
¡Pues bien!, tal y como mencioné antes, los arrays o los vectores han venido para ayudarnos en múltiples circunstancia similares a esta. Dado que un array, arreglo o vector es capaz de almacenar múltiples valores en una misma variable, tenemos el elemento perfecto para almacenar la información de todos los libros, podremos crear un vector de un tamaño cualquiera capaz de contener en sí los nombres de los autores y otro con los títulos de los libros o alternativamente podríamos crear una matriz de dos columnas que contenga en la primera columna los autores y en la segunda los títulos; ambas soluciones son validas y vamos a ver ambas, usando vectores en esta sección y usando matrices en la sección de matrices.




¿Cómo declarar un Array o Vector en C++?


Para declarar un vector en C++, se deben seguir las mismas normas básicas que se siguen para declarar una variable cualquiera, con un pequeño cambio en la sintaxis. Para declarar un vector, arreglo o como lo quieras llamar, necesitaremos saber el tipo de los datos que irán al interior de este, es decir, serán número enteros, o número decimales o cadenas de texto, etc. necesitamos también, como siempre, un nombre para el vector y un tamaño máximo. La sintaxis para declarar un vector en C++ es la siguiente:

1     tipo_de_dato nombre_del_vector[tamanio];

Tenemos entonces, tal como mencioné antes, que, para declarar un vector en C++, debemos definirle un tipo de los datos, sea entero, float, string, etc., debemos darle un nombre y al interior de los corchetes "[]" debemos poner el tamaño máximo que tendrá el vector, es decir la cantidad máxima de datos que podrá contener (recuerda que en C++ esto es necesario hacerlo). Veamos un ejemplo en el cual pondré la declaración de varios vectores de diferentes tipos y tamaños en C++.

Funciones


La modularización, es una técnica usada por los programadores para hacer sus códigos más cortos, ya que consiste en reducir un gran problema complejo, en pequeños problemitas más sencillos, concentrándose en la solución por separado, de cada uno de ellos.
En C, se conocen como funciones aquellos trozos de códigos utilizados para dividir un programa con el objetivo que, cada bloque realice una tarea determinada.
En las funciones juegan un papel muy importe las variables, ya que como se ha dicho estas pueden ser locales o globales.
Variables Globales: Estas se crean durante toda la ejecución del programa, y son globales, ya que pueden ser llamadas, leídas, modificadas, etc; desde cualquier función. Se definen antes del main().
Variables Locales: Estas, pueden ser utilizadas únicamente en la función que hayan sido declaradas.
La sintaxis de una función es la siguiente:
Tipo_de_datos nombre_de_la_funcion(tipo y nombre de argumentos)
{
    acciones
}

donde:
·         Tipo_de_datos: Es el tipo de dato que devolverá esa función, que puede ser real, entera, o tipo void(es decir que no devolverá ningún valor).
·         Nombre_de_la_funcion: Es el identificador que le damos a nuestra función, la cual debe cumplir las reglas que definimos en un principio para los identificadores.
·         Tipo y nombre de argumentos: son los parámetros que recibe la función. Los argumentos de una función no son más que variables locales que reciben un valor. Este valor se lo enviamos al hacer la llamada a la función. Pueden existir funciones que no reciban argumentos.
·         Acciones: Constituye el conjunto de acciones, de sentencias que cumplirá la función, cuando sea ejecutada. Entre ellas están:

1           .      Asignaciones
2           .      Lecturas
3           .      Impresiones
4           .      Cálculos, etc.

Una función, termina con la llave de cerrar, pero antes de esta llave, debemos colocarle la instrucción return, con la cual devolverá un valor específico. Es necesario recalcar que, si la función no devuelve ningún valor, es decir, es tipo void, no tiene que ir la sentencia return, ya que, de lo contrario, nos dará un error.







Investigación realizada para la materia de Programación estructurada.


Referencias:
http://www.carlospes.com/curso_de_lenguaje_c/01_05_identificadores.php