Está en la página 1de 48

República bolivariana de Venezuela

Ministerio del poder popular para la defensa


Universidad nacional experimental politécnica de la
Fuerza armada (UNEFA)
1er SEMESTRE ADS SECCION “D01”
Núcleo – La Fría

PROGRAMACIÓN ESTRUCTURADA

Integrante:
Valbuena portillo Luis Enrique
30.162.946

Junio; de 2020

1
INTRODUCCIÓN
La tecnología que jamás esperamos que llegaría ahora ha dado la
vuelta al mundo y uno de sus inventos más eficientes ha sido la
computadora, gracias a esta ha facilitado inmensamente la vida del hombre
en general, parece magia que la computadora haga exactamente todo lo que
queremos, pero alguna vez nos ha importado o nos hemos preguntado
¿cómo logra la computadora hacer todo lo que ordenamos?, pues esa magia
se puede dar con la programación estructurada la cual es una manera de
realizar programas sencillos y fáciles de entender.

Por lo tanto, según la definición teórica, como lenguaje se entiende a


un sistema de comunicación que posee una determinada estructura,
contenido y uso. La programación es, en el vocabulario propio de la
informática, el procedimiento de escritura del código fuente de un software.
De esta manera, puede decirse que la programación le indica al programa
informático qué acción tiene que llevar a cabo y cuál es el modo de
concretarla.

Así mismo, podemos afirmar que un lenguaje de programación es


aquella estructura que, con una cierta base sintáctica y semántica, imparte
distintas instrucciones a un programa de computadora.

Por otra parte, Pascal a diferencia de otros lenguajes, contiene


algunos rasgos singulares que han sido diseñados para estimular el uso de
la ''programación estructurada'', un enfoque ordenado y disciplina de la
programación que conduce a la obtención de programas claros, eficientes y
libres de errores. Por ello, el PASCAL se utiliza amplia mente en la
enseñanza informática.

1
INTRODUCCION A LA PROGRAMACIÓN

PROGRAMACIÓN ESTRUCTURADA

La programación estructurada es un paradigma de programación


orientado a mejorar la claridad, calidad y tiempo de desarrollo de un
programa de computadora recurriendo únicamente a subrutinas y tres
estructuras básicas: secuencia, selección (if y switch) e iteración (bucles for y
while); asimismo, se considera innecesario y contraproducente el uso de la
instrucción de transferencia incondicional (GOTO), que podría conducir a
código espagueti, mucho más difícil de seguir y de mantener, y fuente de
numerosos errores de programación.

Ventajas

Reusabilidad: Cuando hemos diseñado adecuadamente las clases, se


pueden usar en distintas partes del programa y en numerosos proyectos.

Mantenibilidad: Debido a la sencillez para abstraer el problema, los


programas orientados a objetos son más sencillos de leer y comprender,
pues nos permiten ocultar detalles de implementación dejando visibles sólo
aquellos detalles más relevantes.

Modificabilidad: La facilidad de añadir, suprimir o modificar nuevos objetos


nos permite hacer modificaciones de una forma muy sencilla.

Fiabilidad: Al dividir el problema en partes más pequeñas podemos probarlas


de manera independiente y aislar mucho más fácilmente los posibles errores
que puedan surgir.

Desventajas

 Cambio en la forma de pensar de la programación tradicional a la


orientada a objetos.
 La ejecución de programas orientados a objetos es más lenta.

2
 La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y
entrenamiento.

ESTRUCTURA DE DATOS

Las estructuras de datos permiten almacenar de manera ordenada


una serie de valores dados en una misma variable. Las estructuras de datos
más comunes son los vectores o arreglos y las matrices, aunque hay otras
un poco más diferentes como son el struct y las enumeraciones.

Dentro de ellas encontramos distintos tipos, los tipos de datos más


frecuentes en los diferentes lenguajes son:

Tipos De Datos

Las estructuras estáticas son aquellas en las que el tamaño de


memoria ocupado se define antes de que el programa se ejecute y no puede
modificarse durante la ejecución

Las estructuras dinámicas son aquellas en las que no se debe definir


previamente el tamaño de memoria

3
Los datos simples tienen en común que cada variable representa un
elemento, en los estructurados un identificador puede representar múltiples
datos individuales, pudiendo cada uno de estos ser referenciados
independientemente.

Variables

Las variables son altamente imprescindibles al momento de


programar, de hecho sería imposible conseguir una aplicación con una
funcionalidad básica sin usar variables; por esta misma razón es necesario
aprender a usarlas bien y lo tenemos muy fácil, pues su uso es bastante
sencillo e intuitivo, tanto para declararlas como para asignarles valores.

Las variables son posiciones en memoria donde estarán guardados


los diferentes valores que le damos o que toman duranet ejecución los datos
que usamos y normalmente estarán disponibles a lo largo de la ejecución de
nuestro programa. Para asignar valores a una variable en una gran variedad
de lenguajes que incluye a C++ se usa el operador "=" seguido del valor que
le daremos a la variable (no todos usan el "=" para esto). Veamos un ejemplo
completo con todos los posibles usos que le damos a una variable.

#include <iostream>
using namespace std;

int main()
{
char x = 'a'; // Declaramos y asignamos en la misma línea

int num; //Declaramos el entero en una línea


num = 5; //Le asignamos un valor en otra línea

int num2 = 8; //Asignacion y declaracion al tiempo

float numero; //Un numero decimal


numero = 3.5; //Le asignamos un valor al decimal

float res = numero + num2; //Sumamos dos variables y las


asignamos a res

4
//3.5 + 8 = 11.5

res = res + num; //Al valor actual de res le sumamos el valor de num
//11.5 + 5 = 16.5

bool valor = false; //Variable booleana


valor = true; // Pueden ser true o false

res = res*2; //Duplicamos el valor de res 16.5*2 = 33

cout << res << endl; //Mostramos el valor de res por pantalla

return 0;
}
En el código anterior hemos visto las múltiples formas en que se
puede declarar una variable, cómo asignarle un valor, incluso vimos que es
posible asignarle el valor de una variable a otra, o realizar operaciones entre
los valores de variables y asignar el resultado a una variable nueva, vimos
que es posible usar el valor de una misma variable y cambiar su propio valor
(res = res*2).
Constantes Arreglos

Una constante es un dato cuyo valor no puede cambiar durante la


ejecución del programa. Recibe un valor en el momento de la compilación y
este permanece inalterado durante todo el programa.

Como ya se ha comentado en el tema sobre las partes de un


programa, las constantes se declaran en una sección que comienza con la
palabra reservada const. Después de declarar una constante ya puedes
usarla en el cuerpo principal del programa. Tienen varios usos: ser miembro
en una expresion, en una comparación, asignar su valor a una variable, etc.

En el siguiente ejemplo se contemplan varios casos:

const
Min = 0;
Max = 100;
Sep = 10;

5
var
i : integer;

begin
i := Min;
while i < Max do begin
writeln(i);
i := i + Sep
end
end.

En este ejemplo se declaran tres constantes (Min, Max y Sep). En la


primera línea del cuerpo del programa se asigna una constante a una
variable. En la siguiente, se usa una constante en una comparación. Y en la
cuarta, la constante Sep interviene en una expresión que se asigna a una
variable. El resultado de ejecutar este programa sería una impresión en
pantalla de los números: 0, 10, 20, 30, 40, 50, 60, 70, 80 y 90.

Se puede hacer una división de las constantes en tres clases:

1. constantes literales (sin nombre)


2. constantes declaradas (con nombre)
3. constantes expresión

Constantes literales

Son valores de cualquier tipo que se utilizan directamente, no se


declaran ya que no tienen nombre. En el siguiente ejemplo tienes un par de
constantes literales (el 3, el 4, y el 3.1416):

VolumenEsfera := 4/3 * 3.1416 * Radio * Radio * Radio;

Constantes declaradas

También llamadas constantes con nombre, son las que se declaran en


la sección const asignándoles un valor directamente. Por ejemplo:

const

6
Pi = 3.141592; (* valor real *)
Min = 0; (* entero *)
Max = 99; (* entero *)
Saludo = 'Hola'; (* cadena caract. *)

Constantes expresión

También se declaran en la sección const, pero a estas no se les


asigna un valor directamente, sino que se les asigna una expresión. Esta
expresión se evalúa en tiempo de compilación y el resultado se le asigna a la
constante. Ejemplo:

const
Min = 0;
Max = 100;
Intervalo = 10;
N = (Max - Min) div Intervalo;
Centro = (Max - Min) div 2;

Matrices

Las matrices o como algunos las llaman "arreglos multidimensionales"


son una estructura de datos bastante similar a los vectores o arreglos. De
hecho, una matriz no es más que una serie de vectores contenidos uno en el
otro (u otros), es decir, una matriz es un vector cuyas posiciones son otros
vectores.

Una matriz es una estructura conformada por filas y columnas,


idealmente más de dos filas y columnas, de hecho, podemos decir que si una
"matriz" tiene una única fila o una única columna, entonces estamos
hablando de un vector y no una matriz como tal.

La intersección de una fila y una columna de la matriz son las casillas


y cada una de ellas podrá poseer información, simple o compleja (ya
dependerá de nuestras necesidades). Un vector posee una única fila (o
columna, como lo quieras ver) y de este modo un grupo de vectores unidos

7
conforman una matriz, es por esto que al comienzo dije que una matriz es un
vector conformado por otra serie de vectores.

Viéndolo desde el punto de vista de la programación, una matriz es un


vector cuyas posiciones (de la cero a la n) son, cada una de ellas, otro vector

¿Cómo se crea una Matriz en C++?

Declarar una matriz en C++ es muy similar a la de un vector, se deben


seguir las mismas normas para declarar una variable pero una vez más con
un pequeño cambio en la sintaxis. Primero necesitaremos saber el tipo de los
datos que irán al interior de este (números, decimales o cadenas de texto,
etc.) necesitamos también, como siempre, un nombre para la matriz y un
tamaño máximo tanto para las filas como para las columnas. La sintaxis para
declarar una matriz en C++ es la siguiente:

tipoDato nombreMatriz[filas][columnas];

En C++, no es posible crear de una manera sencilla un vector (y por


ende una matriz)capaz de almacenar una cantidad de información indefinida,
es necesario ingresar con antelación la cantidad de datos (filas y columnas)
que la matriz tendrá.

La sintaxis es casi la misma excepto que hemos añadido un par de


corchetes "[]" más esta vez y al interior de éstos debemos poner el número
de filas y columnas máximas de la matriz, respectivamente. Veamos un
ejemplo en el cual pondré la declaración de varias matrices de diferentes
tipos y tamaños en C++.

Declaración de una matriz en C++

int myMatriz1[10][5];
float myMatriz2[5][10];
string myMatriz3[15][15];
bool myMatriz4[1000][3];

8
Línea 1

Esta línea contiene la declaración de una matriz llamada myMatriz1


que tendrá 10 filas y 5 columnas y cada una de las 50 casillas tendrá datos
de tipo entero.

Línea 2

Esta línea contiene la declaración de una matriz llamada myMatriz2


que tendrá 5 filas y 10 columnas y cada una de las 50 casillas tendrá datos
de tipo flotante.

Línea 3

Esta línea contiene la declaración de una matriz llamada myMatriz3


que tendrá 15 filas y 15 columnas (una matriz cuadrada) y cada una de las
225 casillas tendrá datos de tipo string.

Línea 4

Esta línea contiene la declaración de una matriz llamada myMatriz4


que tendrá 1000 filas (sí, leíste bien) y 3 columnas y cada una de las 3000
casillas (también leíste bien, tres mil casillas) tendrá datos de tipo booleano.

ESTRUCTURAS DE CONTROL SECUENCIALES

La estructura secuencial es aquella en la que una acción (instrucción)


sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida
de una es la entrada de la siguiente y así sucesivamente hasta el fin del
proceso.

A su vez, es secuencial si se ejecutan una tras otra a modo de


secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la
anterior.

Ejemplo:

9
Esta secuencia de instrucciones permuta los valores de x e y, con
ayuda de una variable auxiliar, intermedia.

1º Se guarda una copia del valor de x en auxiliar.

2º Se guarda el valor de y en x, perdiendo su valor anterior, pero se mantiene


una copia del contenido en auxiliar.

3º Se copia a y el valor de auxiliar, que es el valor inicial de x.

El resultado es el intercambio de los valores entre x e y, en tres


operaciones secuenciales.

Asignaciones

La asignación consiste, en el paso de valores o resultados a una zona


de la memoria. Dicha zona será reconocida con el nombre de la variable que
recibe el valor. La asignación se puede clasificar de la siguiente forma:

 Simples: Consiste en pasar un valor constate a una variable (a=15)


 Contador: Consiste en usarla como un verificador del número de veces
que se realiza un proceso (a=a+1)
 Acumulador: Consiste en usarla como un sumador en un proceso (a=a+b)
 De trabajo: Donde puede recibir el resultado de una operación
matemática que involucre muchas variables (a=c+b*2/4).

Decisiones lógicas

Las estructuras de decisión se utilizan para tomar decisiones lógicas,


de ahí que suelen denominarse también estructuras de selección o
alternativas. A su vez, se evalúa una condición lógica y en función del
resultado de la misma, se ejecutara un conjunto de instrucciones. Las
condiciones se especifican usando expresiones lógicas. La representación
de una estructura de decisión se hace con palabras en pseudocódigo, o con
una figura en forma de rombo en los diagramas de flujo.

10
Las estructuras de decisión pueden ser:

Simples: La estructura de decisión simple, sientonces, ejecuta una


determinada acción cuando se cumple una condición lógica. En esta
estructura se evalúa la condición y si la condición es verdadera, ejecuta una
o varias acciones, pero si al contrario es falsa no hace nada.

 En pseudocódigo: si- entonces.


 En turbo Pascal: if-then.

Representación en Diagrama de flujo

11
Dobles: La estructura de decisión simple es muy limitada y normalmente se
necesitara una estructura que permita elegir entre dos opciones o
alternativas posibles, en función del cumplimiento o no de una determinada
condición lógica. Si la condición lógica es verdadera se ejecuta un conjunto
de acciones y si es falsa se ejecutara otro conjunto diferente de acciones.

 En pseudocódigo: si-entonces-sino.
 En Turbo Pascal: if- thene- else

Representación en Diagrama de flujo

12
Múltiples: en la práctica es posible que existan más de dos alternativas
posibles para elegir. Cuando se tienen muchas alternativas pueden existir
serios problemas en la escritura y legibilidad de los algoritmos utilizando
estructuras de decisión simples, dobles o anidadas.

La estructura de decisión multiplex evaluara una variable (tipo entero,


carácter o lógica) que podrá tomar valores distintos. Según, se aleja uno de
estos valores de la variable, se realizara una de las acciones, o lo que es
igual, el flujo de control del algoritmo seguirá un determinado camino entre
los posibles. Dentro de cada opción se pueden ejecutar una o varias
acciones. Los valores que toma la variable E no tienen por qué ser
consecutivos ni únicos, se pueden considerar rangos de constantes
numéricas o de caracteres (usando dos puntos. Ej: A… Z ó 1…10).

 En pseudocódigo: según-sea
 En turbo Pascal: Case-of

13
Representación en Diagrama de flujo

Iteraciones Anidadas

Las estructuras de decisión simple (si-entonces) y doble (si-entonces-


si_no), implican la selección de una de dos alternativas. Es posible utilizar la
instrucción si para diseñar estructuras de decisión que contengan más de
dos alternativas. En este caso, una estructura si-entonces puede contener
otra estructura si- entonces, y esta estructura puede contener a su vez a otra
y así sucesivamente cualquier cantidad de veces, a su vez dentro de casa
estructura pueden existir diferentes acciones. Las estructuras si anteriores a
otras estructuras si se denominan anidadas.

14
Una estructura de selección de decisiones múltiples puede ser
construida utilizando una estructura si con este formato:

Representación en Diagrama de flujo

15
SUBPROGRAMAS. PROCEDIMIENTOS Y FUNCIONES.
Subprogramas como abstracción de operaciones.

- Diseño descendente:

Un problema se divide en subproblemas (a varios niveles) para conseguir


una resolución más sencilla del mismo.

- Ejemplo: Algoritmo para calcular un número combinatorio.

Primer nivel de refinamiento:

Algoritmo: calcular_numero_combinatorio

Inicio

 leer los valores de m y n (m ≥n)


 calcular el combinatorio
 escribir el resultado.

Fin

Segundo nivel de refinamiento:

16
Tercer nivel de refinamiento:

Los lenguajes de programación (y nuestro pseudolenguaje también)


nos van a permitir escribir un programa de una forma modular, respetando la
descomposición obtenida en el análisis descendente.

A cada módulo ----------> un Algoritmo

Un módulo es un algoritmo auto contenido fruto de la descomposición


de un problema al aplicar el diseño descendente. Dicho módulo puede ser
diseñado independientemente del ·ámbito en el que va a ser usado.

Al código correspondiente al módulo raíz o principal le denominaremos


algoritmo principal o simplemente programa. Al código correspondiente a
cada uno de los restantes módulos le llamaremos subprograma o
subalgoritmo.

En el ejemplo anterior, nuestro algoritmo principal sería:

17
Este enfoque proporciona indudables ventajas:

 Simplificación del diseño.


 Posible programación aislada.
 Posibilidad de reutilización del módulo en otro contexto.

18
 No sólo simplifica el diseño de algoritmos sino también su
comprensión.

La modularidad aísla (encapsula) las diferentes tareas que componen un


programa. Como beneficio, si el método para solucionar una tarea T cambia,
el aislamiento evita que dicho cambio influya en cualquier otra tarea Q.

Ejemplo: T es nuestro procedimiento combinatorio y Q nuestro algoritmo


principal calcular_numero_combinatorio. T puede modificar el método para
calcular un número combinatorio. Esto no afecta a Q.

Sin embargo, el aislamiento de los módulos no puede ser total;


aunque a un módulo Q le baste saber qué resuelve un módulo T y no cómo,
hay ciertas condiciones que debe cumplir Q para que T realice su tarea
satisfactoriamente.

Ejemplo: El procedimiento combinatorio debe recibir dos números naturales


“m” y “n” (y no dos reales, por ejemplo) tales que m ≥ n , y tiene que devolver
otro número natural como resultado.

19
Procedimientos y funciones.

Todos los ejemplos de sub algoritmos vistos hasta ahora son


procedimientos, con lo que la declaración de un procedimiento se hará de la
forma:

PROC nombre (parámetros formales) declaraciones

Inicio acciones

Fin

Y la llamada a un procedimiento ser· de la forma:

Nombre (par· metros reales) llamada que por sí sola constituye una acción o
sentencia en el cuerpo del algoritmo "llamante" (sea el algoritmo principal u
otro subalgoritmo).

 Supongamos que necesitamos conocer el más pequeño de 2


números, y para ello construimos el siguiente procedimiento:

Hay muchos casos como Éste. El subalgoritmo realiza una serie de


acciones y devuelve un resultado (y sólo uno) al algoritmo llamante mediante
alguno de sus parámetros. Es mejor utilizar un tipo de subalgoritmo llamado
función.

- Una función es un subalgoritmo declarado de la forma:

20
En toda función existe una variable predefinida llamada RESULTADO
(del tipo que la función devuelve). El valor que la función desee devolver ser·
el que dicha variable tenga al final de la función.

Aunque no hay ninguna restricción al respecto, es recomendable que


todos los parámetros formales de la función sean de entrada. Por tanto, al
diseñar un subprograma, si pretendemos que devuelva más de un valor, lo
más adecuado es definirlo como un procedimiento con varios parámetros de
salida.

La llamada a una función no puede constituir por sí sola una sentencia


del algoritmo llamante, sino que debe aparecer dentro de alguna sentencia
del algoritmo llamante en la que el valor devuelto por la función (al terminar
su ejecución), sea "utilizado" de alguna forma, por ejemplo a la derecha de
una sentencia de asignación. En nuestro ejemplo:

21
En el algoritmo que la llama se podría poner:

Siendo menor, a, b variables del algoritmo llamante.

Las funciones que devuelven un valor booleano son particularmente


˙tiles, convirtiéndose en las expresiones booleanas de decisión para la
sentencia SI y en las condiciones de control para los bucles. Por ejemplo, un
algoritmo que pretenda hacer una u otra cosa dependiendo de que un
número sea o no primo, se puede escribir

22
Ejemplo: algoritmo para calcular números combinatorios.

COMPONENTES DE UN PROGRAMA

Se reúnen las ideas expuestas en los anteriores, presentándose las


partes o secciones componentes de los programas en Pascal:
encabezamiento, declaraciones y bloque o cuerpo de acciones.

Al fin disponemos de todos los elementos necesarios para escribir los


primeros programas, aunque se trata de programas muy simples, carentes
por supuesto de muchos mecanismos del lenguaje.

Por otra parte, además de reunir las ideas introducidas hasta ahora, el
estudiante debería en este punto conseguir poner a punto sus primeros
programas en un entorno de programación real.

23
Encabezamiento

El encabezamiento de un programa establece una identificación del


mismo. En cierto modo equivale al título de un libro e incluye información
sobre los objetos, externos al programa, con que ´este intercambia informaci
´on: la inclusión de ´estos en el encabezamiento establece la comunicación
correspondiente desde el programa. En los primeros programas estos
objetos son sólo los archivos estándar: el de entrada de datos (input) y el de
salida (output), que en los computadores personales representan a la
consola (teclado y monitor respectivamente); ambos archivos se incluirán
siempre que el programa deba realizar operaciones de entrada y salida
respectivamente, aunque conviene que el archivo output este siempre
presente, para indicar al computador dónde comunicar las eventuales
situaciones de error. Más adelante, se verá cómo el programa podrá recibir
informaci´on de otra procedencia (por ejemplo, una tabla estadística situada
en un archivo de disco), o dirigir su salida a otros dispositivos (tales como la
impresora).

El encabezamiento es obligatorio en Pascal estándar pero optativo en


Turbo Pascal y en otros traductores; sin embargo, es recomendable utilizarlo
siempre, para que los programas sean más claros y se puedan usar en otros
entornos.

El encabezamiento empieza con la palabra reservada Programa,


seguida del nombre del programa, que debe ser un identificador válido de
Pascal y, entre paréntesis, la lista de parámetros del programa. El
encabezamiento se separa de las siguientes secciones con un punto y coma
(;). Por ejemplo:

Program AreaCirculo (input, output);

Program DeclaracRenta (input, output, tablaRetenciones);

24
Declaraciones

Además de los identificadores predefinidos, el usuario casi siempre va


a necesitar el uso de otros nuevos, en cuyo caso debe introducirlos y
describirlos (excepto el identificador del programa) antes de usarlos; este
protocolo se corresponde conceptualmente con la sentencia siguiente, de
uso común en Matemáticas

Sean n ∈ Z , x ∈ IR, p = 3.14 y f : IR → IR tal que f(x) = pxn

Legitimando el posterior uso de los identificadores n, x, p y f. En


Pascal, esta informaci´on de partida permite al compilador hacer las
correspondientes asignaciones de memoria y verificar que el uso de todos
esos objetos se ajusta a sus características, avisando al programador en
caso contrario.

La obligación de incluir declaraciones sólo se da cuando el


programador necesite incluir objetos nuevos para usarlos en el programa.
Estos objetos responden a varias categorías: etiquetas, constantes, tipos,
variables, procedimientos y funciones. Veremos con detalle cada una de
ellas en su momento; por ahora, basta con introducir la definición de
constantes y la declaración de variables.

25
Cuerpo Del Programa
En el cuerpo del programa es donde se relacionan las sucesivas
sentencias o instrucciones ejecutables que componen el programa. Va
precedido por la palabra reservada BEGIN y termina con la palabra
reservada END y un punto final, y las instrucciones se separan con puntos y
comas

26
LENGUAJE DE PROGRAMACIÓN

Es un lenguaje formal que, mediante una serie de instrucciones, le


permite a un programador escribir un conjunto de órdenes, acciones
consecutivas, datos y algoritmos para, de esa forma, crear programas que
controlen el comportamiento físico y lógico de una máquina.

Mediante este lenguaje se comunican el programador y la máquina,


permitiendo especificar, de forma precisa, aspectos como:

 cuáles datos debe operar un software específico;


 cómo deben ser almacenados o transmitidos esos datos;
 las acciones que debe tomar el software dependiendo de las
circunstancias variables.

CLASIFICACION DE LOS LENGUAJES DE PROGRAMACIÓN

Clasificar nunca es fácil puesto que requiere establecer a priori unos


criterios concretos que permitan dividir en clases o tipos el conjunto de
elementos a clasificar. Dado que es muy frecuente que estos elementos
tengan aspectos comunes, otros con ciertos matices y otros claramente
diferentes, la clasificación siempre puede no ser tan rigurosa como cabe
pensar. Vamos a realizar varias clasificaciones de los lenguajes de
programación en función de diferentes criterios:

 Según su proximidad al lenguaje máquina:

Lenguajes de bajo nivel: Son distintos para cada procesador: cada tipo de
ordenador posee el suyo. Controlan directamente los recursos hardware de
la máquina. Como ejemplos tenemos el lenguaje máquina o el lenguaje
ensamblador (Assembly).

27
Lenguajes de medio nivel: Tal y como refleja su nombre este grupo
alberga aquellos lenguajes que tienen algunas características de los de bajo
nivel y otras de los de alto nivel. El ejemplo más representativo es el lenguaje
C.

Lenguajes de alto nivel: Son independientes del procesador. Son más


sencillos y legibles pero generan un código mucho menos eficiente
(velocidad y tamaño) que los de bajo nivel. Para poder ser ejecutados
necesitan un procesador que bien trata una vez el código y genera un
programa ejecutable por un procesador (compiladores) o bien lo interpretan
línea por línea cada vez que son ejecutados (intérpretes). Ejemplos: Pascal,
php, Java, etc.

 Según el propósito del lenguaje:

Lenguajes de propósito general: como el Pascal, el C o incluso el Java


aunque este último se relaciona mucho con las aplicaciones empresariales.

Lenguajes de propósito específico: php orientado al desarrollo de


aplicaciones Web, LISP orientado a la inteligencia artificial, etc.

 Según su orientación:

Lenguajes orientados al procedimiento: son lenguajes imperativos como


Pascal en los que se describen los pasos que han de darse para resolver un
determinado problema. Se explica cómo resolver un problema.

Lenguajes orientados al problema: como por ejemplo Prolog. En estos


lenguajes lo que se describe es el problema en sí; son de tipo declarativo.

Lenguajes orientados a objeto: son lenguajes en los que se modela la


realidad centrándose en los elementos que la componen.

28
REGLAS SEMANTICAS Y SINTACTICAS

Reglas semánticas
Las reglas son las diferentes formas que tiene Síntesis de detectar un
patrón lingüístico, un tema/atributo o el sentimiento. Son una representación
del lenguaje para simplificarlo y quedarnos con lo relevante y que además
permiten procesar millones de comentarios en tiempo real.

Una regla está constituida por forms/lemmas, conceptos/entidades,


feeds, tags o incluso expresiones regulares. La suma de estos elementos
genera la regla y le confiere un valor semántico. Una arquitectura que,
cuando aparece en el mensaje, tiene un significado concreto.

Componentes de una regla semántica:

 Forms: Una sucesión de caracteres que constituyen una palabra (ej.


comí)
 Lemmas: raíz de la palabra, tal y como la recogería un diccionario (ej.
comer).
 Etiqueta POS (part of speech): etiqueta morfológica o clase gramatical de
una palabra: adjetivo, verbo, sustantivo, preposición, etc.
 Conceptos / entidades: grupos de palabras que no son ambiguas (coche
> vehículo).
 Feeds: las palabras donde debe afectar un patrón o el análisis de
sentimiento.
 Sintaxis/estructuras semántica: el orden y estructura de los distintos
elementos entre sí.
 Posición: la posición de cierta unidad dentro de la frase

Las relaciones entre los valores de los atributos definidos sobre una
gramática atribuida se especifican mediante reglas semánticas o ecuaciones

29
de atributos21 [Louden97]. Dada una gramática libre de contexto
G={S,P,VN,VT}, donde VN es el vocabulario no terminal, VT el vocabulario
terminal (tokens), S el símbolo no terminal inicial y P el conjunto de
producciones de la gramática, donde cada p ∈ P es de la forma:

Una regla semántica asociada a la producción p es una función


matemática que especifica las relaciones entre los valores de los atributos
del siguiente modo [Aho90]:

Donde a i k i 1, ≤ ≤ son atributos de los símbolos gramaticales de la


producción ( X VT VN j n j ∈ ∪ 0, ≤ ≤ ) y a es:

− O bien un atributo sintetizado del símbolo gramatical no terminal X0


situado a en la parte izquierda de la producción p.

− O bien un atributo heredado de uno de los símbolos gramaticales X VT


VN i n i ∈ ∪ 1, ≤ ≤ situados en la parte derecha de la producción p.

En cualquier caso, se dice que el atributo a depender de los atributos a i


k i 1, ≤ ≤ . El conjunto de atributos sintetizados de un símbolo gramatical X se
suele representar con el conjunto AS(X). Del mismo modo, los atributos
heredados de X se representan con el conjunto AH(X) 22 . Los atributos de los
símbolos terminales de la gramática se consideran atributos sintetizados –
puesto que su valor ha sido asignado por el analizador léxico.

Reglas Sintácticas

Las Reglas Sintácticas como los métodos en los que se puede validar
y dar forma a una aplicación, siendo solamente un criterio que busca evaluar
la combinación de distintos Símbolos, y su correcta aplicación en forma

30
gramatical, teniendo por otro lado tener que hacer un análisis bajo criterio
Semántico y otro bajo un término Pragmático.

31
PALABRAS RESERVADAS

Las palabras reservadas son identificadores reservados predefinidos


que tienen un significado especial y no se pueden utilizar como
identificadores en sus programas, excepto si llevan delante el carácter @
como prefijo. Así, por ejemplo @for es un identificador válido, pero no for ya
que es una palabra reservada.

PALABRAS SENTANCIAS

Las sentencias son los elementos básicos en los que se divide el


código en un lenguaje de programación. Al fin y al cabo, un programa no es
más que un conjunto de sentencias que se ejecutan para realizar una cierta
tarea. Además, como ya habrás visto, en Pascal el signo que las separa es el
punto y coma.

El párrafo anterior termina con una verdad a medias, ya que aunque


generalmente una sentencia debe ir seguida de un punto y coma para
separarla de la siguiente, existen casos en los que no es necesario incluirlo.

32
Y estos casos se dan cuando después de la sentencia hay una palabra
reservada de las que delimitan de alguna forma un trozo de código. Por
ejemplo, end, else, until, etc. Algunos de estos casos se contemplan en el
siguiente ejemplo:

(* ... *)
begin
(* ... *)
if (a<>b) then
begin
aux := a ;
a := b ;
b := aux
end ;
writeln('a vale ',a,' y b vale ',b)
end .

CLASIFICACION DEL LENGUAJE

Según La Forma De Ejecución: Los procesadores usados en las


computadoras son capaces de entender y actuar según lo indican programas
escritos en un lenguaje fijo para cada arquitectura, llamado lenguaje de
máquina. Todo programa escrito en un lenguaje de alto nivel puede ser
ejecutado de dos maneras:

Lenguajes compilados: Antes de poder utilizarse el programa debe


utilizarse un traductor llamado “compilador” que se encarga de traducir
(“compilar”) el programa original (“código fuente”) al programa equivalente
escrito en lenguaje de máquina o ensamblador (“binario”). Los binarios son
los programas ejecutables y los únicos necesarios para el funcionamiento del
programa.

Lenguajes interpretados: Cada vez que se usa el programa debe


utilizarse un traductor llamado “intérprete” que se encarga de traducir
(“interpretar”) las instrucciones del programa original (“código fuente”) a

33
código máquina según van siendo utilizadas. Para el funcionamiento del
programa siempre es necesario disponer del código original y del intérprete.

Según El Paradigma De Programación; Un paradigma de programación


representa un enfoque particular o filosofía para la construcción del software.
Si bien puede seleccionarse la forma pura de estos paradigmas a la hora de
programar, en la práctica es habitual que se mezclen, dando lugar a la
programación multiparadigma.

Los diferentes paradigmas de programación son:

Algorítmico, Imperativo o Por procedimientos. El más común y está


representado, por ejemplo, por C o por BASIC. Describe la programación en
términos del estado del programa y sentencias que cambian dicho estado.

Los programas imperativos son un conjunto de instrucciones que le


indican al computador cómo realizar una tarea. La implementación de
hardware de la mayoría de computadores es imperativa ya que el hardware
está diseñado para ejecutar código de máquina que es imperativo.

Orientado a Objetos. Cada vez más utilizado, sobre todo en


combinación con el imperativo. De hecho los lenguajes orientados a objetos
permiten la programación imperativa. Algunos ejemplos de lenguajes
orientados a objetos son C++, Java, Python. Usa objetos y sus interacciones
para diseñar aplicaciones y programas de computadora. Está basado en
varias técnicas, incluyendo herencia, modularidad, polimorfismo y
encapsulamiento.

Según El Nivel De Abstracción Lenguajes de máquina y de bajo nivel. Los


lenguajes de máquina están escritos en códigos (código máquina)
directamente inteligibles por la máquina (computadora), siendo sus
instrucciones cadenas binarias (0 y 1). “Lenguaje de máquina” hace
referencia al lenguaje específico de una computadora, mientras que “código

34
máquina” hace referencia al modo en que se escriben los diferentes
lenguajes de máquina.

Los lenguajes de bajo nivel son lenguajes de programación que se


acercan al funcionamiento de una computadora. Los lenguajes de más bajo
nivel son los lenguajes de máquinas. A éste nivel le sigue el lenguaje
ensamblador, ya que al programar en ensamblador se trabajan con los
registros de memoria de la computadora de forma directa.

La programación en un lenguaje de bajo nivel tiene como ventajas una


mayor adaptación al equipo, además de la posibilidad de obtener la máxima
velocidad con el mínimo uso de memoria.Sin embargo tiene importantes
inconvenientes, como la imposibilidad de escribir código independiente de la
máquina y la mayor dificultad en la programación y en la comprensión de los
programas.

Lenguajes de medio nivel Minoritariamente en algunos textos se


diferencian algunos lenguajes como de medio nivel, como el lenguaje C, ya
que tienen ciertas características que los acercan a los lenguajes de bajo
nivel, como gestión de punteros de memoria y registros, pero con sintaxis,
vocabulario y gramática de alto nivel.

Lenguajes de alto nivel y de muy alto nivel. Los lenguajes de


programación de alto nivel se caracterizan por expresar los algoritmos de
una manera adecuada a la capacidad cognitiva humana, en lugar de estar
orientados a su ejecución en las máquinas. Los lenguajes de alto y bajo nivel
requieren de conocimientos específicos de programación y del lenguaje
concreto (vocabulario, gramática y sintaxis) para realizar las secuencias de
instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el
usuario común pudiese solucionar ciertos problemas sencillos de
procesamiento de datos de una manera más fácil y rápida.

35
CONSTRUCCION DE APLICACIONES PRÁCTICAS

Lenguaje C

C es un lenguaje de programación creado en 1972 por Dennis M.


Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B. Se
trata de un lenguaje débilmente tipificado de nivel medio ya que dispone de
las estructuras típicas de los lenguajes de alto nivel así como de
construcciones del lenguaje que permiten un control a muy bajo nivel. El
lenguaje se estandarizó en 1990 y surgió ANSI C (también llamado C90). A
fines de la década del ‘90 se logró la publicación del estándar ISO 9899:1999
conocido como C99 pero no tiene la misma aceptación que C90.

ANSI C está soportado hoy en día por casi la totalidad de los


compiladores. La mayoría del código C que se escribe actualmente está
basado en ANSI C. Cualquier programa escrito sólo en C estándar sin código
que dependa de un hardware determinado funciona correctamente en
cualquier plataforma que disponga de una implementación de C compatible

Un programa e C constan de uno o más módulos (ficheros fuentes).


Cada módulo puede contener:

 directivas del precompilador, p.e para “incluir” otros ficheros (#include)


y “definir” constantes y macros (#define).
 declaraciones de variables y prototipos de funciones.
 una o más funciones
 comentarios.

Cada función puede contener:

 directivas del precompilador

36
 declaraciones
 uno o más bloques
 comentarios

Cada bloque puede contener

 directivas del precompilador


 declaraciones
 una o más sentencias
 comentarios
 Cada sentencia debe estar terminada por ;
 Cada bloque de sentencias se encierra entre llaves {. . . }
 La función denominada main es la que primero se ejecuta
 Los comentarios pueden aparecer en cualquier lugar del código
 y se insertan entre /* y */ así
 /* esto es un comentario*/
 I o entre // y final de línea
 // esto es otro comentario

Ejemplo:

37
Lenguajes C++

C++ es un lenguaje de programación diseñado en 1979 por Bjarne


Stroustrup. La intención de su creación fue extender al lenguaje de
programación C mecanismos que permiten la manipulación de objetos. En
ese sentido, desde el punto de vista de los lenguajes orientados a objetos,
C++ es un lenguaje híbrido.

El programa que vamos a realizar simplemente le dará a una variable


el valor del resultado de sumar 5 + 5, cabe resaltar que en pantalla no se
muestra nada por lo que la ejecución del programa será prácticamente
instantánea

Este es nuestro programa:

Nuestro primer código, consta de 7 líneas, las cuales te explicaré una


por una a continuación:

Línea 1:

Nuestra primer línea contiene el llamado a la función main, la función


main (), es la más importante de todas la funciones, pues es esta la que
nuestro compilador buscará para iniciar la ejecución de nuestro código, si
esta función falta, nuestro programa no podrá arrancar, pues no sabrá desde
donde hacerlo. La función main, como cualquier otra debe tener un tipo, es
decir debe tener indicado cual es el valor que esta va a retornar al final, los
tipos de las funciones pueden ser, enteros (int), decimales simples (float),
decimales dobles (double), booleanos(bool), vacíos (void) entre algunos más.
La función main, puede ser cualquiera de estos, pero por acuerdo, se coloca

38
siempre como entera (int) y siempre retornara 0 (luego hablaré de esto). En
ocasiones (dependiendo del compilador), se puede poner como void (vacía)
y por lo tanto no se puede usar un return, aunque no es recomendable,
simplemente por claridad y evitar errores con compiladores más
tradicionales.

Línea 2:

La línea 2 contiene una llave abriendo "{", en C++, se usan las llaves
tanto para indicar el comienzo como el final de cada función, sea cual sea, es
decir sea la función main o cualquiera que tu hayas inventado, debe
comenzar con una llave abriendo y terminar con una cerrando (tiene sentido
¿no?). Es por esto, que esta llave se encuentra ahí, indicando el inicio de
nuestra función main.

Línea 3:

Esta línea, contiene la declaración de una variable llamada número,


presta especial atención a esta línea, pues es muy sensible a errores al
momento de codificar, esta línea contiene primero el tipo de nuestra variable,
en este caso es entera (int) pero podría ser alguna de las que mencione
anteriormente o cualquier otra, lógicamente valida. Esta línea es sensible,
porque tanto en C como en C++ los nombres de las variables son sensibles a
las mayúsculas y a las minúsculas, es decir, para C o C++ la variable número
y la variable Numero, son dos variables totalmente distintas o la variable
Numero y la variable NuMeRo, debes tener cuidado en no mezclar
mayúsculas y minúsculas, así que acostúmbrate a escribir normalmente en
minúsculas. Otro detalle de esta tercera línea es el punto y coma ";" en C y
C++ el punto y coma indican el final de una sentencia (no una sentencia de
muerte o algo así, ¡no te distraigas!), una sentencia es una línea de código,
en la cual se realiza algún tipo de operación, asignación, comparación o
declaración (fíjate! todas terminan en "cion") por ejemplo la línea 3, 5 y 6, son

39
líneas de sentencia. Así que cada que realices cualquier operación en una
línea, esta debe termina con punto y coma, de lo contrario tendrás errores en
tu código. Ten en cuenta que la línea 1, no es una sentencia, pues aunque
allí se está aparentemente declarando a la función main, no es así, pues el
int que hay antes del main() nos indica el tipo de valor que debe retornar
nuestra función, mas no exactamente el tipo que es nuestra función, por esto
no se usa el punto y coma en la línea 1 (ojo! no estoy diciendo que cuando
se declare una función no se use punto y coma, no te enredes con esto, en la
línea 1 simplemente se está implementando la función main, más adelante lo
comprenderás, confía en mi).

Línea 4:

La línea 4 no tiene nada especial, es simplemente un campo vacío, no


genera ningún tipo de cambio para el compilador, pero nos permite ordenar
un poco nuestro código. Quizá si eres curioso intenta eliminar todos los
saltos de línea dejando todo el código en una sola línea y veras que pasa
(nada malo te lo aseguro), así confirmaras tú mismo lo que dije acerca de los
espacios en blanco.

Ejemplo:

Esta línea contiene una operación, por lo tanto es una línea de


sentencia (mira que termina con punto y coma), en esta línea, estamos
dándole o mejor dicho, asignándole un valor a la variable número, que ahora
tendrá el valor de la operación matemática 5 + 5 es decir, la variable numero
valdrá 10. Ahora que hablo de asignación, quiero explicarte algo que en
ocasiones suele confundir y es que en C++ hay dos operadores similares
pero no idénticos que son el igual "=" y el doble igual "==", en C++ el igual
solo "=" se usa para asignación, es decir para darle a una variable el valor de

40
otra o el valor de una operación especifica como por ejemplo 5 + 5, mientras
que el operador de doble igual "==" se usa para comparación, es decir para
comparar si el valor de una variable es igual a otro, por ejemplo: escribir
numero = 5 + 5; es válido, pero escribir numero == 5 + 5; nos genera un error
de sintaxis, las acciones que realiza cada operación son distintas, la primera,
le asigna el valor que tenga el resultado de 5 + 5 a la variable "numero"
mientras que la segunda verifica si el valor de la variable "numero" es igual o
no a 10.

Factorial
El factorial de un número es la multiplicación de los número que van
del 1 a dicho número. Para expresar el factorial se suele utilizar la notación
n!. Así la definición es la siguiente:

Siguiendo esta simple expresión podríamos codificarlo en Java de la


siguiente forma.

Lo primero es definir la variable que va a definir el factorial y la que


definirá el número sobre el que vamos a calcular el factorial.

Lo siguiente es hacer el bucle en el cual iremos decrementando el


número y multiplicando por el valor del factorial.

Solo nos quedará el volcar el valor por pantalla:

41
Esta es una forma muy sencilla de implementar el factorial. Si bien,
tenemos otra forma de implementarlo. En este caso el factorial se define de
una forma recursiva. Esta definición fue realizada por el matemático frances
Christian Kramp.

La definición viene a decir lo siguiente:

Esta implementación se puede definir con recursividad en la


programación Java de la siguiente forma:

Como podemos ver es un calco de la definición de Christian Kramp.


En esta definición el método se irá llamando recursivamente hasta que se
llegue a calcular el factorial del número 0.

Para volcar el dato por pantalla tendremos la siguiente línea de


código:

Secuencia de FIBONACCI

La conocida sucesión de Fibonacci es aquella sucesión que comienza


con los términos 0 y 1, y continua obteniendo cada término sumando sus dos
anteriores. Más formalmente:

En este orden de ideas, es fácil descubrir los primeros términos de la


sucesión: 0,1,1,2,3,5,8,13,21,34,55,89,144,… Del mismo modo podemos

42
expresar cada termino en base a su función: Fib(0)=0, Fib(1)=1, Fib(2)=1,
Fib(3)=2, Fib(4)=3, Fib(5)=5…

Dada esta definición formal, no es nada difícil crear una primera


solución recursiva para obtener un término n de la sucesión de Fibonacci:

Pero analicemos a fondo lo que hace esta función. Recursivamente,


estará llamando a sus dos anteriores. Cada una de estas llamadas, si es
mayor que 1, de nuevo estará llamando a sus dos anteriores. Analicemos el
árbol de llamadas para un fibonacci de orden 6:

Este es un algoritmo de orden exponencial, más exactamente . La


explicación de este costo puede ser algo extensa, esto significa que es
terriblemente lento, pues tendrá que hacer excesivas operaciones para
valores altos de n.

43
CONCLUSION

Comenzaremos por la programación estructurada es eficiente para


programas sencillos y de pocas líneas. Sin embargo presenta un problema
cuando los sistemas son grandes puesto que solo se maneja un bloque de
código. Sin embargo sirve para aprender lo básico de programación.

Así mismo, en programación, existen diversos conceptos que son


fundamentales, a su vez los programas se pueden desarrollar en diversos
tipos de lenguajes de programación los cuales se adaptan a las necesidades
del programador ya sea desde lenguajes sencillos hasta otros de mayor
complejidad.

También, los procedimientos y las funciones son puntos clave dentro


de un programa. Constituyen la estructura que permite dividir un problema
complejo en varias subtareas. Los procedimientos y funciones son la base
principal en la programación modular.

Además, sintetizando lo dicho hasta ahora, un programa tiene tres


partes: encabezamiento, declaraciones y cuerpo. El encabezamiento del
programa se considerar obligatorio. Téngase en cuenta que la sección de
declaraciones, en realidad, sólo tiene componentes optativas, por lo que
puede haber programas sin declaración alguna. Finalmente, el cuerpo o
bloque es también obligatorio.

Por otra parte, un programa tiene tres partes: encabezamiento,


declaraciones y cuerpo, El encabezamiento del programa se considerar ‘a
obligatorio. Téngase en cuenta que la sección de declaraciones, en realidad,
sólo tiene componentes optativas, por lo que puede haber programas sin
declaración alguna. Finalmente, el cuerpo o bloque es también obligatorio.

Habría que decir también, que sin el lenguaje de programación,


programar sería imposible, debido a que no existirían reglas (tanto
semánticas como sintácticas), expresiones (como la estructura y el

44
significado de todos los elementos que los componen) ni una forma
establecida sobre cómo deben “hablar” el programador y la máquina.

Hay que mencionar, además que los lenguajes de alto nivel se


desarrollaron con el objetivo de ser más accesibles y entendibles por la
mayoría de programadores, de manera que los programadores pudieran
concentrarse más en resolver la tarea o los problemas y no en el lenguaje
que la maquina tenía que entender.

Por otro lado, C++ surge de fusionar dos ideas: la eficiencia del
lenguaje C para poder acceder al hardware al ejecutar tareas que realmente
demandaban recursos de memoria; y las ideas de abstracción que
representan las el nuevo conceptos de clases y objetos.

El lenguaje C++ presenta grandes herramientas de desarrollo para los


programadores como las funciones, bibliotecas, clases y los objetos. De
manera que el programador se ocupa de utilizar dichas herramientas para
resolver un problema específico.

A su vez, el lenguaje C++ posee una serie de características que lo


hacen distinto del lenguaje C. Aunque es posible verlo como una simple
extensión del lenguaje C, en realidad implica un cambio en la forma de
pensar por parte del programador.

Asimismo, algunas de las funciones que le permiten a un programador


crear este lenguaje son: crear una web y hacerla funcionar o desarrollar
aplicaciones para los sistemas operativos, entre muchas otras.

En la actualidad, el conocimiento y uso del mundo digital y de la


informática son dos de las principales armas de cualquier empresa.

45
ANEXOS

46
47

También podría gustarte