Vous êtes sur la page 1sur 10

UNIVERSIDAD MILITAR “NUEVA GRANADA” CENTRO DE SISTEMAS

Unidad 2: DESARROLLO DE ALGORITMOS Y


LENGUAJES DE PROGRAMACIÓN
La palabra algoritmo proviene de Mohammed al-Khoawarizmi, matemático persa del siglo
IX. La traducción al latín algorismus derivó posteriormente en algoritmo. Este matemático
y Euclides, matemático griego, son los padres de la ciencia de los algoritmos.
Debido a que el computador no tiene la capacidad de solucionar problemas, se le deben
proporcionar los pasos necesarios y sucesivos a realizar, dicho listado de pasos se
denomina algoritmo.
Entonces un algoritmo es un procedimiento que se ejecuta paso a paso, para dar solución
a un determinado problema. Es una secuencia de operaciones a realizar, ordenadamente,
para resolver un problema específico. Esta secuencia de instrucciones todavía no se
encuentra escrita en un lenguaje de programación específico, pueden ser escritos en un
lenguaje natural o en forma gráfica.
El término algoritmo no solamente se debe asociar a la informática, en la mayoría de las
actividades cotidianas se emplean algoritmos para resolver diversos tipos de problemas o
situaciones, por ejemplo realizar un plato de cocina a través de un algoritmo (receta de
cocina), las instrucciones para el uso de algún electrodoméstico, los pasos para realizar
cálculos matemáticos como método de gauss para resolver sistemas lineales de
ecuaciones, etc.

Un algoritmo es un conjunto de instrucciones que especifican la secuencia de operaciones


a realizar, en orden, para resolver un sistema específico o clase de problema.

Todo algoritmo debe cumplir con las siguientes características:

• Debe ser preciso: Debe indicar el orden de realización de cada paso.


• Debe estar definido: Si se sigue un algoritmo dos veces, se debe obtener el mismo
resultado.
• Debe ser finito: Todo algoritmo debe tener un fin, es decir un número determinado
de pasos.

Después de tener el algoritmo, el paso siguiente es la implementarlo o expresarlo en


algún lenguaje de programación.

En la ciencia de la computación y en la programación, los algoritmos son más importantes


que los lenguajes de programación. Un lenguaje de programación es tan solo un medio
para expresar un algoritmo y una computadora es solo un procesador para ejecutarlo.
Tanto el lenguaje de programación como el computador son los medios para obtener un
fin: conseguir que el algoritmo se ejecute y efectúe el proceso correspondiente.

2.1 INTRODUCCION A LA PROGRAMACION

La principal razón para que las personas aprendan a programar en general y los lenguajes
de programación en particular, es utilizar el computador como una herramienta para
solución de problemas. La solución de un problema puede dividirse en los siguientes seis
pasos:

1
MANUAL DE LÓGICA Y ALGORITMOS

− LEER O CONOCER EL PROBLEMA

A través de la lectura comprensiva se identifica qué clase de problema se va a resolver,


qué valores (variables de procesos) y qué cálculos (operaciones aritméticas y lógicas) se
requieren para conseguir dichos resultados.

− ANALISIS DEL PROBLEMA

Dado que se busca una solución se debe examinar cuidadosamente el problema a fin de
identificar qué tipo de información se necesita producir. A continuación el programador
debe identificar aquellos elementos de información dados en el problema que puedan ser
útiles para obtener la solución. Finalmente, un procedimiento para producir los resultados
deseados a partir de los datos, y que será el algoritmo.

Esta fase es muy importante y no debe tomarse a la ligera. Si no conoce exactamente lo


que desea como salida del programa, puede producirle sorpresa lo que su programa
realice, por ejemplo si el programa es para el cálculo de un interés bancario, debe
conocer no sólo la tasa de interés y el capital, sino también el período de tiempo de
depósito del capital.

Consiste en identificar qué valores o datos proporciona el problema (variables de


entradas), qué valores (variables de procesos) y cálculo (operaciones aritméticas y
lógicas) se requieren para conseguir dichos resultados (Variables de salida).

− GENERAR UNA SOLUCIÓN

La solución a un problema complejo puede requerir muchos pasos y el sistema más


idóneo en ese caso, pasa por dividir el problema en subproblemas más fáciles de resolver
que el principal. Este método se suele denominar divide y vencerás y es aplicable a la
resolución y escritura de algoritmos y programas para computadoras.

Mediante la utilización de expresiones (seudo-código) o símbolos gráficos convencionales


(diagrama de flujo) que muestren la secuencia lógica para obtener resultados propuestos.

− COMPROBACION DE RESULTADOS

Permite controlar si la solución dada al problema es la adecuada o no, y garantizar que al


codificarse funcione correctamente, mediante una prueba de escritorio.

Esta prueba de escritorio, consiste en hacerle seguimiento a las variables a través del
seguimiento de cada instrucción, con el fin de verificar si los resultados obtenidos son los
esperados.

− CODIFICACION, PRUEBA Y EJECUCION

Una vez diseñada la solución, convertiremos este procedimiento a un lenguaje de


programación, para su resolución por medio del computador. Un procedimiento a seguir
podría ser; elaborar el programa sustituyendo las palabras del pseudocódigo por
secuencias de instrucciones cada vez mas detalladas.

Se codifica el programa en el lenguaje de computador seleccionado y si es necesario se


almacena o no en un dispositivo de almacenamiento secundario para su posterior
utilización.

2
UNIVERSIDAD MILITAR “NUEVA GRANADA” CENTRO DE SISTEMAS

El computador transforma datos en información organizada, significativa y oportuna,


arrojando unos resultados, se realiza entonces el siguiente proceso:

ENTRADA PROCESO SALIDA


Datos Información

La ENTRADA son los datos que van a servir de materia prima. Esta se hará mediante el
teclado, el mouse, discos duros, disquetes, discos ópticos, CD’s, cintas, DVD’s.

El PROCESO: lo llevará a cabo el procesador (CPU, Central Processing Unit) del


computador, que utilizará La Memoria RAM y Dispositivos de almacenamiento.

La SALIDA es el resultado u obtención de la información que puede ser enviada a los


dispositivos de salida o a los de almacenamiento.

Ahora veamos una descripción más completa del flujo de información dentro del
computador:

UNIDADES DE
ALMACENAMIENTO

ENTRADA MEMORIA SALIDA


Información Información

Teclado, Pantalla,
disquete, Impresora
CD, etc. PROCESADOR

Observe la dirección de las flechas:

• En la ENTRADA tiene un solo sentido (derecha).


• En la SALIDA tiene un solo sentido (derecha).

3
MANUAL DE LÓGICA Y ALGORITMOS

• EL PROCESADOR envía datos a la MEMORIA (temporales) y al DISCO DURO (guardar


o grabar) en los dos sentidos.
• La MEMORIA A SU VEZ tiene también doble flujo: envía y recibe datos del
PROCESADOR y del DISCO DURO
• El DISCO DURO envía y recibe datos de la MEMORIA. doble sentido.

− USO Y MANTENIMIENTO

Comprobada suficientemente la solución, se comienza a procesar los datos necesarios


para obtener los resultados esperados; el programa debe estar actualizándose
permanentemente si se presentan nuevos requerimientos por parte del usuario.

EJEMPLO

Definición del problema:

Calcular la cantidad de lámina de acero necesaria para fabricar 5.000.000 de tapas de


gaseosa.

Análisis del problema:

• La entrada de datos se concentra en el radio del círculo de la tapa, el área de la


lámina y la cantidad de tapas solicitadas.
• Las salidas serán: cantidad de lámina de acero necesaria, cantidad de lámina
sobrante luego del recorte.
• Las variables son: Radio, área. La constante es: 5.000.000 tapas.
• Los cálculos deberán mostrar el área de un círculo y el área del recorte.

Paso seguido, el problema debe esquematizarse con la utilización de símbolos gráficos o


expresiones secuenciales que muestren la secuencia lógica para resolver el problema,
comprobar los resultados y codificar el programa en el computador utilizando un lenguaje
de programación.

2.2 LENGUAJES DE PROGRAMACIÓN

LENGUAJES DE MÁQUINA

El lenguaje máquina de una computadora consta de cadenas de números binarios (ceros


y unos) y es el único que "entienden" directamente los procesadores. Todas las
instrucciones preparadas en cualquier lenguaje de máquina tienen por lo menos dos
partes. La primera es el comando u operación, que dice a la computadora cuál es la
función que va a realizar. Todas las computadoras tienen un código de operación para
cada una de sus funciones. La segunda parte de la instrucción es el operando, que indica
a la computadora dónde hallar o almacenar los datos y otras instrucciones que se van a
manipular; el número de operandos de una instrucción varía en las distintas
computadoras. En una computadora de operando único, el equivalente binario de "SUMAR
0814" podría hacer que se sume el valor que se encuentra en la localidad de
almacenamiento o dirección 0814 al valor que se encuentra en la unidad aritmética
lógica. En una máquina de dos operandos, la representación binaria de "SUMAR 0814
8672" podría hacer que se sume el valor que está en la localidad 8672 al valor que está
en la dirección 0814. El formato de operando único es popular en las microcomputadoras

4
UNIVERSIDAD MILITAR “NUEVA GRANADA” CENTRO DE SISTEMAS

más pequeñas; la estructura de dos operandos se encuentra en casi todas las demás
máquinas.

LENGUAJES ENSAMBLADORES

A principios de la década de 1950, y con el fin de facilitar la labor de los programadores,


se desarrollaron códigos nemotécnicos para las operaciones y direcciones simbólicas. La
palabra nemotécnico se refiere a una ayuda para la memorización. Uno de los primeros
pasos para mejorar el proceso de preparación de programas fue sustituir los códigos de
operaciones numéricos del lenguaje de máquina por símbolos alfabéticos, que son los
códigos nemotécnicos. Todas las computadoras actuales tienen códigos nemotécnicos
aunque, naturalmente, los símbolos que se usan varían en las diferentes marcas y
modelos. La computadora sigue utilizando el lenguaje de máquina para procesar los
datos, pero los programas ensambladores traducen antes los símbolos de código de
operación especificados a sus equivalentes en lenguaje de máquina.

Este procedimiento preparó avances posteriores. Si la computadora era capaz de traducir


símbolos convenientes en operaciones básicas, ¿por qué no hacer también que realizara
otras funciones rutinarias de codificación, como la asignación de direcciones de
almacenamiento a los datos? La técnica de direccionamiento simbólico permite expresar
una dirección no en términos de su localización numérica absoluta, sino en términos de
símbolos convenientes para el programador.

Durante las primeras etapas del direccionamiento simbólico, el programador asigna un


nombre simbólico y una dirección real a un dato.

Más adelante se hizo otra mejora. Se dejó a la computadora la tarea de asignar y


recordar las direcciones de las instrucciones. Lo único que tenía que hacer el programador
era indicar a la computadora la dirección de la primera instrucción, y el programa
ensamblador se encargaba de almacenar, de manera automática, todas las demás en
forma secuencial a partir de ese punto. Así, si se agregaba más tarde otra instrucción al
programa, no era necesario modificar las direcciones de todas las instrucciones que
seguían al punto de inserción (como tendría que hacerse en el caso de programas escritos
en lenguaje de máquina). En vez de ello, el procesador ajustaba automáticamente las
localidades de memoria la próxima vez que se ejecutaba el programa.

En la actualidad, los programadores no asignan números de dirección reales a los datos


simbólicos, simplemente especifican dónde quieren que se coloque la primera localidad
del programa, y el programa ensamblador se encarga de lo demás: asigna localidades
tanto para las instrucciones como para los datos.

Estos programas de ensamble, o ensamblador, también permite a la computadora


convertir las instrucciones en lenguaje ensamblador del programador en su propio código
de máquina. Un programa de instrucciones escrito en lenguaje ensamblador por un
programador se llama programa fuente. Después de que el ensamblador convierte el
programa fuente en código de máquina a éste se le denomina programa objeto. Para los
programadores es más fácil escribir instrucciones en un lenguaje ensamblador que en
códigos de lenguajes de máquina, pero es posible que se requieran dos corridas de
computadora antes de que se puedan utilizar las instrucciones del programa fuente para
producir las salidas deseadas.

Los lenguajes ensambladores tienen ventajas sobre los lenguajes de máquina. Ahorran
tiempo y requieren menos atención a detalles. Se incurren en menos errores y los que se

5
MANUAL DE LÓGICA Y ALGORITMOS

cometen son más fáciles de localizar. Además, los programas en lenguaje ensamblador
son más fáciles de modificar que los programas en lenguaje de máquina. Pero existen
limitaciones. La codificación en lenguaje ensamblador es todavía un proceso lento. Una
desventaja importante de estos lenguajes es que tienen una orientación a la máquina. Es
decir, están diseñados para la marca y modelo específico de procesador que se utiliza, y
es probable que, para una máquina diferente, se tengan que volver a codificar los
programas.

LENGUAJES DE ALTO NIVEL

Los primeros programas ensambladores producían sólo una instrucción en lenguaje de


máquina por cada instrucción del programa fuente. Para agilizar la codificación, se
desarrollaron programas ensambladores que podían producir una cantidad variable de
instrucciones en lenguaje de máquina por cada instrucción del programa fuente. Dicho de
otra manera, una sola macroinstrucción podía producir varias líneas de código en
lenguaje de máquina. Por ejemplo, el programador podría escribir "LEER ARCHIVO", y el
programa traductor produciría una serie detallada de instrucciones al lenguaje de
máquina previamente preparadas, con lo que se copiaría un registro del archivo que
estuviera leyendo el dispositivo de entrada a la memoria principal. Así, el programador no
se tenía que ocupar de escribir una instrucción por cada operación de máquina realizada.

El desarrollo de las técnicas nemotécnicas y las macroinstrucciones condujo, a su vez, al


desarrollo de lenguajes de alto nivel que a menudo están orientados hacia una clase
determinada de problemas de proceso. Por ejemplo, se han diseñado varios lenguajes
para procesar problemas científico-matemático, asimismo han aparecido otros lenguajes
que hacen hincapié en las aplicaciones de proceso de archivos.

A diferencia de los programas de ensamble, los programas en lenguaje de alto nivel se


pueden utilizar con diferentes marcas de computadores sin tener que hacer
modificaciones considerables. Esto permite reducir sustancialmente el costo de la
reprogramación cuando se adquiere equipo nuevo. Otras ventajas de los lenguajes de alto
nivel son:

• Son más fáciles de aprender que los lenguajes ensambladores.


• Se pueden escribir más rápidamente.
• Permiten tener mejor documentación.
• Son más fáciles de mantener.
• Un programador que sepa escribir programas en uno de estos lenguajes no está
limitado a utilizar un solo tipo de máquina.

LENGUAJES COMPILADOS

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que
traducirse a un código que pueda utilizar la máquina. Los programas traductores que
pueden realizar esta operación se llaman compiladores. Éstos, como los programas
ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada
proposición del programa fuente. Se requiere una corrida de compilación antes de
procesar los datos de un problema.
Los compiladores son aquellos cuya función es traducir un programa escrito en un
determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con
código binario).

6
UNIVERSIDAD MILITAR “NUEVA GRANADA” CENTRO DE SISTEMAS

Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de
Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta
que luego de haber compilado el programa, ya no aparecen errores en el código.

LENGUAJES INTERPRETADOS

Se puede también utilizar una alternativa diferente de los compiladores para traducir
lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma
permanente el código objeto que se produce durante la corrida de compilación para
utilizarlo en una corrida de producción futura, el programador sólo carga el programa
fuente en la computadora junto con los datos que se van a procesar. A continuación, un
programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera
permanente dentro de la máquina, convierte cada proposición del programa fuente en
lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No
se graba el código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a
lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un
ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se
ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución
(porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de
diseño (porque no se tiene que estar compilando a cada momento el código completo). El
intérprete elimina la necesidad de realizar una corrida de compilación después de cada
modificación del programa cuando se quiere agregar funciones o corregir errores; pero es
obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha
mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de
producción.

LENGUAJES DE PROGRAMACIÓN DECLARATIVOS

Se les conoce como lenguajes declarativos en ciencias computacionales a aquellos


lenguajes de programación en los cuales se le indica a la computadora qué es lo que se
desea obtener o qué es lo que se esta buscando, por ejemplo: Obtener los nombres de
todos los empleados que tengan más de 32 años. Eso se puede lograr con un lenguaje
declarativo como SQL.

La programación declarativa es una forma de programación que implica la descripción de


un problema dado en lugar de proveer una solución para dicho problema, dejando la
interpretación de los pasos específicos para llegar a dicha solución a un intérprete no
especificado. La programación declarativa adopta, por lo tanto, un enfoque diferente al de
la programación imperativa tradicional.

En otras palabras, la programación declarativa provee el "qué", pero deja el "cómo"


liberado a la implementación particular del intérprete. Por lo tanto se puede ver que la
programación declarativa tiene dos fases bien diferenciadas, la declaración y la
interpretación.

Algunos lenguajes declarativos que se pueden mencionar son:

• PROLOG
• SQL
• HTML
• WSDL (Web Services Description Language)

7
MANUAL DE LÓGICA Y ALGORITMOS

• XML Stylesheet Language for Transformation

LENGUAJES DE PROGRAMACIÓN IMPERATIVOS

En ciencias de la computación se llama lenguajes imperativos a aquellos en los cuales se


le ordena a la computadora cómo realizar una tarea siguiendo una serie de pasos o
instrucciones, por ejemplo:
Paso 1, solicitar número.
Paso 2, multiplicar número por dos.
Paso 3, imprimir resultado de la operación.
Paso 4, etc.

El proceso anterior se puede realizar con un lenguaje imperativo como por ejemplo
BASIC, C, C++, Java, Clipper, Dbase, C#, PHP, Perl, etc.
Dentro de la programación imperativa, se tiene un conjunto de instrucciones que le
indican al computador cómo realizar una tarea.
Los lenguajes imperativos se basan en comandos u órdenes que se le dan a la
computadora para que haga algo, con el fin de organizar o cambiar valores en ciertas
partes de la memoria.

La ejecución de estos comandos se realiza, en la mayor parte de ellos, secuencialmente,


es decir, hasta que un comando no ha sido ejecutado no se lee el siguiente.
Según el dominio, o mejor dicho con el propósito que se utiliza el programa, se puede
hablar de lenguajes de dominio específico y de dominio general.

LENGUAJES IMPERATIVOS PROCEDURALES

En los lenguajes tradicionales o procedurales, es la aplicación quien controla qué


porciones de código se ejecuta, y la secuencia en que este se ejecuta. La ejecución de la
aplicación se inicia con la primera línea de código, y sigue una ruta predefinida a través
de la aplicación, llamando procedimientos según sea necesario.
Los lenguajes procedurales están fundamentados en la utilización de variables para
almacenar valores y en la realización de operaciones con los datos almacenados. Algunos
ejemplos son: FORTRAN, PASCAL, C, ADA, ALGOL,…

En este tipo de lenguajes, la arquitectura consta de una secuencia de celdas, llamadas


memoria, en las cuales se pueden guardar en forma codificada, lo mismo datos que
instrucciones; y de un procesador, el cual es capaz de ejecutar de manera secuencial una
serie de operaciones, principalmente aritméticas y booleanas, llamadas comandos. En
general, un lenguaje procedural ofrece al programador conceptos que se traducen de
forma natural al modelo de la máquina. El programador tiene que traducir la solución
abstracta del problema a términos muy primitivos, cercanos a la máquina.

Con un lenguaje procedural el usuario (normalmente será un programador) especifica qué


datos se necesitan y cómo obtenerlos. Esto quiere decir que el usuario debe especificar
todas las operaciones de acceso a datos llamando a los procedimientos necesarios para
obtener la información requerida. Estos lenguajes acceden a un registro, lo procesan y
basándose en los resultados obtenidos, acceden a otro registro, que también deben
procesar. Así se va accediendo a registros y se van procesando hasta que se obtienen los
datos deseados. Las sentencias de un lenguaje procedural deben estar embebidas en un
lenguaje de alto nivel, ya que se necesitan sus estructuras (bucles, condicionales, etc.)
para obtener y procesar cada registro individual.

8
UNIVERSIDAD MILITAR “NUEVA GRANADA” CENTRO DE SISTEMAS

Algunos lenguajes de programación imperativos que se pueden mencionar son:

• BASIC
• C
• C++
• Java
• C#
• PHP
• Perl

LENGUAJES DE PROGRAMACIÓN ORIENTADOS A OBJETOS

En la Programación Orientada a Objetos (POO u OOP según siglas en inglés) se definen


los programas en términos de "clases de objetos", objetos que son entidades que
combinan estado (es decir, datos) comportamiento (esto es, procedimientos o métodos) e
identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a
objetos expresa un programa como un conjunto de estos objetos, que colaboran entre
ellos para realizar tareas. Esto permite hacer los programas módulos más fáciles de
escribir, mantener y reutilizar.

De esta forma, un objeto contiene toda la información, (los denominados atributos) que
permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e
incluso entre objetos de la misma clase, al poder tener valores bien diferenciados en sus
atributos). A su vez, dispone de mecanismos de interacción (los llamados métodos) que
favorecen la comunicación entre objetos (de una misma clase o de distintas), y en
consecuencia, el cambio de estado en los propios objetos. Esta característica lleva a
tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse)
información (datos) y procesamiento (métodos).

Dada esta propiedad de conjunto de una clase de objetos, que al contar con una serie de
atributos definitorios, requiere de unos métodos para poder tratarlos (lo que hace que
ambos conceptos están íntimamente entrelazados), el programador debe pensar
indistintamente en ambos términos, ya que no debe nunca separar o dar mayor
importancia a los atributos a favor de los métodos, ni viceversa. Hacerlo puede llevar al
programador a seguir el hábito erróneo de crear clases contenedoras de información por
un lado y clases con métodos que manejen esa información por otro (llegando a una
programación estructurada camuflada en un lenguaje de programación orientada a
objetos).

Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los
procedimientos están separados y sin relación, ya que lo único que se busca es el
procesamiento de unos datos y los procedimientos están separados y sin relación, ya que
lo único que se busca es el procesamiento de unos datos de entrada para obtener otros
de salida. La programación estructurada anima al programador a pensar sobre todo en
términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos
que esos procedimientos manejan. Los programadores de lenguajes imperativos escriben
funciones y después les pasan los datos. Los programadores que emplean lenguajes
orientados a objetos definen objetos con datos y métodos y después envían mensajes a
los objetos diciendo que realicen esos métodos por sí mismos.

Un objeto se puede definir como un grupo de procedimientos que comparten un estado.


Se define al conjunto de datos como "estado", y "métodos" como el conjunto de
procedimientos que pueden alterar ese estado. Un programa orientado a objetos es un

9
MANUAL DE LÓGICA Y ALGORITMOS

método de implementación en el que los programas están organizados como colecciones


de objetos, donde cada uno es una instancia de alguna clase, y donde todas las clases
son miembros de una jerarquía de clases conectadas por relaciones de herencia. Este tipo
de lenguajes son muy recientes en comparación a los primeros lenguajes de
programación que aparecieron.

Entre los lenguajes orientados a objetos más importantes que se pueden mencionar,
aparecen los siguientes:

• Ada
• C++
• C#
• VB.NET
• Clarion
• Delphi
• Eiffel
• Jave
• Lexico (en castellano)
• Objective-C
• Ocaml
• Oz
• PHP
• PowerBuilder
• Pitón
• Ruby
• Smalltalk

http://www.monografias.com/trabajos38/tipos-lenguajes-programacion/tipos-lenguajes-
programacion.shtml

10

Vous aimerez peut-être aussi