Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algorítmica
1. Problema:
un problema computacional o problema abstracto es una relación entre un conjunto de
instancias y un conjunto de soluciones. Un problema abstracto permite establecer
formalmente la relación deseada entre cada instancia del problema y su correspondiente
solución. Un problema abstracto se convierte en un problema concreto cuando las
instancias y soluciones están codificadas en forma de lenguajes formales.
Un problema a resolver.
Una entrada, que nos dice cuáles o cómo son las instancias que esperamos
resolver.
Una salida que nos dice qué es lo que esperamos obtener y con qué
características.
Es una versión abreviada dé instrucciones reales para las computadoras: es una técnica
para diseños de programas que permiten definir las estructuras de datos, las operaciones
que se aplicaran a los datos y la lógica que tendrá el programa de computadora para
solucionar un determinado problema.
metodología para la solución de problemas:
Para resolver plantear una posible solución de cualquier tipo de problema existen
diferentes tipos de problemas según el caso. En la solución propuesta para resolver
problemas por computadora, existe una metodología de 7 pasos:
1: Deducción o planteamiento del problema
2: Análisis del problema
3: Diseño del algoritmo
4: Codificación
5: Prueba y depuración
6: Documentación
7: Mantenimiento
3. Algoritmo:
Los algoritmos no tienen que ver con los lenguajes de programación, dado que un mismo
algoritmo o diagrama de flujo puede representarse en diversos lenguajes de
programación, es decir, se trata de un ordenamiento previo a la programación.
Visto así, un programa no es otra cosa que una serie compleja de algoritmos ordenados y
codificados mediante un lenguaje de programación para su posterior ejecución en
un computador.
Tipos de algoritmos:
Los algoritmos cualitativos se emplean con frecuencia en la vida cotidiana para resolver
problemas. Por ejemplo: las instrucciones de uso que traen los equipos electrónicos, las
instrucciones para el montaje de un equipo, las técnicas de laboratorio para evaluar
ácidos, etc.
Un algoritmo cualitativo podrá tener tanto detalle como se quiera. Además, para alcanzar
el mismo objetivo podrán tomarse distintos algoritmos o caminos.
Se debe leer la formulación del problema tantas veces como sea necesario, hasta
poder entenderlo por completo. En caso de tener alguna duda sobre el significado
de alguna condición o pregunta debe ser aclarada. Lo ideal sería aprender el
enunciado de memoria.
Se debe establecer con claridad cuáles son los datos de entrada con los que se
cuenta para la resolución del problema.
Determinar y aclarar los resultados o la información que sea solicitada, tanto en los
niveles intermedios como al final.
Todo algoritmo cuenta con tres partes bien diferenciadas: entrada, proceso y salida. Esto
permite que el proceso tenga un ordenamiento secuencial, lo cual disminuye en gran
medida la gama de posibles errores, ayudando a solucionar más fácil y más rápido los
problemas que se planteen.
Entrada: corresponde a las instrucciones iniciales que dan pie al algoritmo, en el
cual se toman los datos iniciales y se motiva a que se lea. Se le puede llamar
también punto de partida, inicio o cabecera.
Proceso: se refiere a las elaboraciones cuantitativas que el algoritmo ofrece
puntualmente. Es el cuerpo correspondiente donde se realiza la formulación de las
instrucciones. Se le puede llamar también secuencia de declaraciones.
Salida: finalmente, se encuentran las instrucciones puntuales que el algoritmo
dictamina para mostrar sus resultados, es decir, sus resoluciones o comandos. Se
le puede llamar también fin o pie.
Todos estos pasos poseen la misma importancia. Si se deja de analizar alguno de ellos se
tendrán problemas durante el desarrollo del algoritmo.
1. Primer paso
Definir qué comparaciones y/o cálculos numéricos son necesarios para poder alcanzar el
resultado final:
2. Segundo paso
Tomar en consideración todos los tipos de restricciones y condiciones para poder llegar a
la solución del problema.
Exactitud
Los algoritmos cuantitativos son bastante precisos, ya que las instrucciones que se deben
dar para efectuar los correspondientes cálculos numéricos deben ser bastante exactos
para poder obtener el resultado deseado, tal como se caracteriza el lenguaje matemático.
Por otro lado, los algoritmos cualitativos tienen más propensión a que hayan obviado
algún paso o a que puedan ser malinterpretados por el lector, debido a que el lenguaje
narrativo con que se indican las instrucciones puede tener ciertas imprecisiones
intrínsecas.
Pasos o instrucciones
Los algoritmos son cuantitativos cuando tienen instrucciones o pasos que involucran
cualquier tipo de cómputo numérico. Por ejemplo, el algoritmo para resolver el área de un
triángulo, para solucionar la factorial de un número natural o para calcular el promedio de
unos datos.
Por otro lado, los algoritmos son cualitativos cuando en sus instrucciones o pasos no se
tienen involucrados cálculos numéricos. Ejemplos: las instrucciones para realizar una
receta de cocina, para realizar una actividad física o para ensamblar un aparato que viene
desarmado de fábrica.
6. Datos:
Es un conjunto de reglas que hay que seguir para realizar una tarea o resolver un problema.
Información sobre algo concreto que permite su conocimiento exacto o sirve para deducir
las consecuencias derivadas de un hecho.
Estos (o este) dato/s, pueden describir y codificar, pues, información relativa a cantidad,
cualidad, hechos, información estadística, y otras formas básicas de unidades simbólicas y
de significado. Incluso el dato puede construirse a partir de un símbolo o una serie de
símbolos, para ser interpretados posteriormente, surgiendo aplicaciones como la
criptografía. El dato en sí, se puede considerar como la unidad individual en el conjunto de
datos
TIPOS DE DATOS:
un tipo de dato informático o simplemente tipo es un atributo de los datos que indica al
ordenador (y/o al programador/programadora) sobre la clase de datos que se va a
manejar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar
y qué operaciones se pueden realizar.
Los tipos de datos más comunes son: números enteros, números con signo(negativos),
números de coma flotante (decimales), cadenas alfanuméricas (y Unicode), estados, etc.
Un tipo de dato es un espacio en memoria con restricciones. Por ejemplo, el tipo "int"
representa, generalmente, un conjunto de enteros de 32 bits cuyo rango va desde el -
2.147.483.648 al 2.147.483.647, así como las operaciones que se pueden realizar con los
enteros, como son la suma, la resta, y la multiplicación. Los colores, por su parte, se
representan como tres bytes denotando la cantidad de rojo, verde y azul, y una cadena de
caracteres representando el nombre del color (en este caso, las operaciones permitidas
incluyen la adición y la sustracción, pero no la multiplicación).
Un tipo de dato puede ser también visto como una limitación impuesta en la
interpretación de los datos en un sistema de tipificación, describiendo la representación,
la interpretación y la estructura de los valores u objetos almacenados en la memoria del
ordenador. El sistema de tipificación usa información de los tipos de datos para
comprobar la verificación de los programas que acceden o manipulan los datos.
Los tipos de datos hacen referencia al tipo de información que se trabaja, donde la unidad
mínima de almacenamiento es el dato, también se puede considerar como el rango de
valores que puede tomar una variable durante la ejecución del programa.
Caracteres
Caracteres Unicode
El tipo de dato carácter Unicode es una "extensión" del tipo de dato carácter, permite
ampliar los símbolos de escritura, provee exactamente hasta 65535 caracteres diferentes.
Nota: En el lenguaje java la codificación Unicode permite trabajar con todos los caracteres
de distintos idiomas.
Numéricos
Este tipo de dato puede ser real o entero, dependiendo del tipo de dato que se vaya a
utilizar.
Enteros: son los valores que no tienen punto decimal, pueden ser positivos o negativos y
el cero.
Reales: estos caracteres almacenan números muy grandes que poseen parte entera y
parte decimal.
Booleanos
Este tipo de dato se emplea para valores lógicos, los podemos definir como datos
comparativos dicha comparación devuelve resultados lógicos (Verdadero o Falso).
Tipos compuestos
Los tipos compuestos se derivan de uno o más datos primitivos. A las distintas maneras de
formar o combinar estos datos se les conocen con el nombre de “Estructura de datos”. Al
combinarlo podemos crear un nuevo tipo, por ejemplo:
Esos espacios internos de la memoria son grupos de bits biestables denominados campos;
a éstos se les asigna una única dirección de memoria y su capacidad o valor máximo que
se puede almacenar en ellos dependerá del tamaño del grupo. Los campos pueden ser de
dos clases:
Campos variables.
Campos constantes.
CAMPOS VARIABLES:
Son todos aquellos campos que permiten que el contenido almacenado en el espacio de
memoria asignado, pueda ser alterado en el transcurso de la ejecución del programa; o
sea, en un momento tiene un valor y más adelante puede tener otro distinto, pero nunca
más de un valor al mismo tiempo. Esta clase de campos, que en lo sucesivo se
denominarán simplemente variables, se identifican por un nombre con el cual actúan
durante todo el transcurso del proceso, por lo tanto, deben ser únicos. El nombre dado a
la variable debe iniciar con una letra seguida, si se quiere, de letras o dígitos. Es el
programador quien da nombre a sus variables teniendo en cuenta la regla anterior.
Por su Contenido
Variable Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos
o negativos, es decir almacenan números del 0 al 9 y el punto decimal.
Variables Lógicas: Son aquellas que solo pueden tener dos valores (verdadero o falso),
estos representan el resultado de una comparación entre otros datos.
Por su Uso
Suma <- a + b /c
Variables Contadores: Se utilizan para llevar el control del número de ocasiones en que se
realiza una operación o se cumple una condición.
Variables Acumuladores: Forma que toma una variable y que sirve para llevar la suma
acumulativa de una serie de valores que se van leyendo o calculando progresivamente.
CAMPOS CONSTANTES:
Es otra forma de manejar el grupo de elementos asignados en memoria, pero que a
diferencia de las variables su contenido no puede cambiar durante el proceso. Esta clase
de campos se identifica directamente por la información que tiene almacenada y es
asignada desde el momento en que se hace la compilación. Pueden existir campos
constantes, o simplemente constantes, de tipo numérico, carácter o lógico. Por ejemplo: Pi
<- 3.1416.
7. Operadores:
Operadores: Son elementos que relacionan de forma diferente, los valores de una o más
variables y/o constantes. Es decir, los operadores nos permiten manipular valores.
Tipos de Operadores:
Aritméticos
Lógicos
Relacionales
Operadores Lógicos: Operan sobre información lógica, uniendo condiciones simples para
formar condiciones compuestas.
8. Comandos:
Un comando es dictar una orden capaz de ser interpretada y procesada por el lenguaje
informático, teniendo una importancia a nivel de interacción con la PC, y con el tiempo
relegado a la configuración y optimización para acceder a los bastidores de la
performance, generalmente listos para salvarnos cuando el sistema colapsa.
Para abrir una ventana con una línea de comandos y poder trabajar con ella, debemos
buscar el icono de la aplicación correspondiente a la línea de comandos de la siguiente
forma:
En Windows: podemos optar por la forma más rápida, que es introduciendo el
texto CMD en el cuadro de búsqueda, con lo que nos saldrá un único resultado
consistente en un icono que parece un cuadro negro en el que hay algo escrito en
blanco. O bien podemos optar por buscar su icono, llamado “Símbolo del sistema”.
En Linux o Unix: cada distribución puede ser un caso diferente de las demás, pero
en general hay que buscar un icono en las utilidades del sistema llamado
“intérprete de comandos” o “línea de comandos”.
En la práctica del MS-DOS se distinguen dos clasificaciones, una a nivel interno que implica
que la ejecución de los mismos puede llevarse a cabo en cualquier momento,
independientemente si está cargado o no el MS-DOS porque actúan en la memoria, y un
otro grupo denominado de nivel externo, porque necesitan que el sistema cargue los
archivos correspondientes para que su funcionalidad tenga efecto.
9. Estructuras de control:
Las estructuras de control son el conjunto de reglas que permiten controlar el flujo de
ejecución de las instrucciones de un algoritmo o de un programa.
Las estructuras de control nos dan el poder de alterar, controlar o modificar el orden o el
flujo en el que se ejecutan las instrucciones de un software a voluntad. Gracias a las
estructuras de control podemos abstraer algoritmos o secuencias de instrucciones en un
software para lograr su objetivo.
Pronto verás los tipos básicos de estructuras de control con ejemplos. Vale la pena señalar
que los ejemplos no se escribirán en un lenguaje de programación en específico, sino que se
mostrarán a modo de pseudocódigo para explicar el concepto general y no atarlo a la
sintaxis de un lenguaje en particular
Secuenciales o de secuencia
Esta es la estructura básica, ya que nos permite asegurar que una instrucción se ejecuta
después de la otra siguiendo el orden en que fueron escritas. Es la base de la
programación estructurada. De ahí que el comando GOTO sea desestimado como una
buena práctica: un programa bien pensado, diseñado e implementado no necesitará esta
sentencia.
Este tipo de estructuras de control nos sirven cuando necesitamos que se evalúe el valor
de alguna variable o de alguna condición para decidir qué instrucciones ejecutar a
continuación.
Selectivas simples
Selectivas dobles
Permiten combinar selectivas simples y dobles para crear estructuras y condiciones más
complejas cuando el algoritmo en cuestión lo necesite.
Este tipo de estructuras de control nos sirven cuando necesitamos que se ejecute un
conjunto específico de instrucciones en diversas ocasiones. La cantidad de veces que se
repite dicho bloque de acciones puede ser estático o puede depender del valor de alguna
variable o de alguna condición.
Asignación simple
El operador de asignación simple (=) hace que el valor del segundo operando se almacene
en el objeto especificado por el primer operando. Si ambos objetos son de tipos
aritméticos, el operando derecho se convierte al tipo de la izquierda antes de almacenar el
valor.
Los objetos de const y volatile se pueden asignar a valores L de tipos que solo son volatile,
o que no son const o volatile.
La asignación a objetos de tipo de clase (struct, unión y class) se realiza mediante una
función denominada operator=. El comportamiento predeterminado de esta función de
operador es realizar una asignación de copia basada en miembros de los miembros de
datos no estáticos del objeto y clases base directas; sin embargo, este comportamiento se
puede modificar mediante operadores sobrecargados. Para obtener más información, vea
Sobrecarga de operadores. Los tipos de clase también pueden tener operadores de
asignación de copia y asignación de movimiento. Para obtener más información, consulte
Copiar constructores y copiar operadores de asignación y Mover constructores y mover
operadores de asignación.
Asignación compuesta
un tipo aritmético
un puntero, si op es + o -
un tipo para el que existe una sobrecarga coincidente operator *op*= para el tipo
de e1
3.-Operadores relacionales:
Los operadores relacionales son símbolos que se usan para comparar dos valores. Si el
resultado de la comparación es correcto la expresión considerada es verdadera, en caso
contrario es falsa.
La comparación, 8>4 (ocho mayor que cuatro) es verdadera, se representa por el valor 1,
en cambio, 8<4 (ocho menor que cuatro) es falsa, se representa por el valor 0. En la
primera columna de la tabla, se dan los símbolos de los operadores relacionales, en la
segunda, el nombre de dichos operadores, y a continuación su significado mediante un
ejemplo.
MATLAB no dispone del tipo de dato boolean (true, false), si la expresión es verdadera da
como resultado 1, si es falsa da como resultado 0.
>> 5>4
ans = 1
>> 5>6
ans = 0
Si dos escalares a y b se comparan el resultado puede ser verdadero (1) o falso (0) de
acuerdo con la tabla anterior.
Si a y b son vectores de la misma dimensión, se compara cada elemento a(i) con b(i) el
resultado es que el elemento (i) del vector resultado u(i) puede contener un 1 ó 0.
Un vector o una matriz como u que contiene unos y ceros es un tipo especial de vector o
matriz denominado lógico y se utiliza mucho en MATLAB. Sirven para evaluar expresiones
compuestas de tipo lógico, cuyo resultado, por tanto, resultará cierto o falso, true o false.
4.-Operadores lógicos:
Este tipo de operadores permite obtener solo dos resultados, por lo que se conocen
también como booleanos, porque hacen uso de los principios del álgebra de Boole. Los
resultados son Verdadero o Falso. La sintaxis especifica una serie de reglas de
construcción que deberán cumplir las fórmulas para ser sintácticamente correctas. Los
elementos que estudiaremos en una fórmula, en lógica proposicional son:
Símbolos: p, q, r...
Paréntesis: ()
Son fórmulas:
Hemos hablado de operadores unarios y binarios. Los primeros afectan sólo a un símbolo
o fórmula, en cambio los segundos afectan a los 2 símbolos o fórmulas que haya a su
izquierda y derecha.
Una fórmula es cualquier combinación de elementos que cumplan las reglas sintácticas.
Por ejemplo, si tengo un símbolo p: "hace frío". La fórmula not p equivale a "no hace frío".
De los símbolos no hay nada más que decir, son letras minúsculas del alfabeto. En cuanto
a los operadores lógicos, no vamos a verlos todos, sólo los necesarios para comprender la
lógica que después aplicaremos a la programación. Cada operador está representado por
un símbolo:
Tabla de prioridad (precedencia) y asociatividad de los operadores de mayor a menor
prioridad:
Nota: Aunque los paréntesis no son un operador, se han considerado ya que son los
primeros que se interpretan.
La asociatividad de los operadores indica cómo se evalúan las expresiones. Por ejemplo, el
operador not se evalúa de derecha a izquierda, en la expresión not p se evalúa p, y
después se aplica la negación de p. Sin embargo, el operador and se evalúa de izquierda a
derecha, en la expresión p and q se evalúa p, y después se evalúa p and q. Esto puede
parecer inútil, pero sabiendo que 0 and cualquier valor siempre es 0, si evaluamos p and
q, y p es 0, no hace falta evaluar q.
Lo primero es asignar símbolos. Se pone un símbolo por cada acción simple que no se
puede descomponer en otras:
p: Llueve
q: Me mojo
r: Tengo un paraguas
not p
p -> q
r -> p
((not p) and (r)) -> not q
Propiedades
Algunos conectivos lógicos tienen propiedades que se pueden expresar en teoremas que
contienen el conectivo. Algunas de estas propiedades que una conectiva lógica puede
tener son:
Asociatividad: En una expresión que contiene dos o más del mismo conectivo
asociativo en una línea, el orden de las operaciones, no importa, siempre y cuando
la secuencia de los operandos no cambia.
Conmutatividad: Los operandos del conectivo pueden ser intercambiados (uno por
el otro), mientras que la preservación de
equivalencia lógica de la expresión original.
Dualidad: Para leer las asignaciones de valores de verdad para la operación desde
arriba hacia abajo en su tabla de verdad es lo mismo que tomar el complemento
de lectura de la tabla de la misma u otra conectiva desde abajo hacia arriba.
Preservación de la verdad: El compuesto todos los argumentos son tautologías es
una tautología en sí.
Lenguaje natural
En la gramática de los lenguajes naturales, dos frases pueden unirse mediante una
conjunción gramatical para formar una oración gramaticalmente compuesta. Algunas de
estas conjunciones gramaticales, pero no todas, son funciones de verdad. Por ejemplo,
considere las siguientes frases:
Las expresiones «y» y «por lo tanto» son conjunciones gramaticales que unen las
oraciones (A) y (B) para formar las oraciones compuestas (C) y (D). La y de (C) es un
conector lógico, ya que da el valor de verdad de (C) que está completamente determinado
por el valor de (A) y (B), tiene sentido para el estado (A) y (B) con el resultado (C). Del
mismo modo, por lo tanto, en (D) es conector lógico, ya que para (A) y (B) con el resultado
(D).
Lenguajes formales
En los lenguajes formales, las funciones de verdad son representadas por símbolos
inequívocos. Estos símbolos se llaman "conectivos lógicos", "operadores lógicos",
"operadores proposicionales", o, en la lógica clásica, la "de funciones conectivos de
verdad." Véase fórmulas bien formadas para saber las reglas que permiten las nuevas
fórmulas bien formadas sean construidas al juntar otras fórmulas bien formadas utilizando
conectivos de funciones de verdad.
Los conectivos lógicos pueden ser utilizados para conectar más de dos afirmaciones,
entonces es común hablar de "conector lógico n-ario".
Conectivos lógicos
Verdad/Tautología ⊤ 1 1
comúnmente usados:
Falso/Contradicción ⊥ 0 0
Negación (no): ¬, ~
Conjunción lógica (y): Proposición P 0 1
∧, y, ∙
Disyunción lógica (o): Negación ¬ 1 0
∨
Conectivos binarios Q= 0 1 0 1
En el caso de la
disyunción 'o', tiene Conjunción ∧ 0 0 0 1
dos significados
Conjunción Opuesta ↑ 1 1 1 0
diferentes: "Inclusivo"
y "Exclusivo". Disyunción ∨ 0 1 1 1
Inclusivo: En este caso,
para que la Disyunción Opuesta ↓ 1 0 0 0
proposición sea cierta,
Condicional material → 1 1 0 1
tiene que ser
verdadero uno o todos
O exclusivo 0 1 1 0
los elementos de la
premisa.
Bicondicional ↔ 1 0 0 1
Exclusivo: El 'o'
exclusivo o Xor. En una Implicación Opuesta ← 1 0 1 1
premisa, p o q es
Proposición P 0 0 1 1
verdadero, pero no
ambos pueden serlo. Proposición Q 0 1 0 1
Condicional material
(Si... entonces): →, ⇒, ⊃
Bicondicional (si y solo sí): ↔, ≡, =
Verdadero (⊤, 1 o T)
Falso (⊥, 0 o F)
La contrarrecíproca ¬q→¬p de una implicación p→q tiene la misma tabla de verdad que
p→q. La contrarrecíproca es falsa solo cuando ¬p es falsa y ¬q es verdadera, esto es, solo
cuando p es verdadera y q es falsa. Por otra parte, ni la recíproca, q→p, ni la inversa,
¬p→¬q, tienen los mismos valores de verdad que p→q para todos los posibles valores de
p y q. Cuando dos fórmulas tienen siempre los mismos valores de verdad, las llamamos
equivalentes, de tal forma que una implicación y su contrarrecíproca son equivalentes. La
recíproca y la inversa de una implicación también son equivalentes.
Coimplicación