PROGRAMACIÓN
LOGICA
MODULO 1
Sistemas de Procesamiento de Información
La evolución llevo al humano a desarrollar sistemas para resolver
problemas mas complejos, de manera más rápida y precisa.
Para solucionar problemas mediante sistemas informáticos se debe:
En primera instancia debemos tener una secuencia de
instrucciones, la cual es comunicada con la computadora. Para
lograr dicha comunicación se desarrollaron lenguajes de
programación. Al tener un conjunto de instrucciones en un lenguaje
de programación estamos definiendo un programa o software.
El hardware de una computadora puede entender instrucciones
únicamente en lenguaje binario (0 y 1), también conocido como
lenguaje de bajo nivel.
Debido a la dificultad para interpretarlo se han desarrollados
lenguajes de alto nivel los cuales permiten expresiones algebraicas
y literarias, facilitando el entendimiento.
Al desarrollar soluciones con lenguajes de alto nivel se le da
importancia a la creación de algoritmos. Un algoritmo es el
conjunto de pasos necesarios para resolver un problema.
Clasificación de los lenguajes de programación
Se pueden clasificar según su nivel de abstracción o el paradigma
de la programación, entre otros. Un paradigma de programación
define un modelo o patrón con reglas y pautas que todo
desarrollador debe seguir para resolver una situación problemática.
Según el nivel de abstracción:
Lenguaje máquina: es el que comprende el procesador de
una computadora. Los programas escritos en este lenguaje
consisten en una serie de cadenas binarias (secuencia de
ceros y unos) y, debido a esto, son únicamente legibles por
una computadora.
Lenguaje de bajo nivel: su comprensión requiere una
complejidad menor al lenguaje máquina, pero sigue teniendo
una fuerte dependencia con el entendimiento de las
estructuras y el funcionamiento técnico de la computadora;
debido a esto, entender programas escritos en este lenguaje
es complejo.
Lenguaje de alto nivel: utiliza sintaxis y estructuras que
resultan más fáciles de entender para las personas que
escriben programas. Se emplean palabras del lenguaje
natural y se aleja de los tecnicismos de la computadora. Los
programas escritos en este lenguaje necesitan de un
intérprete o compilador para traducir las instrucciones a
lenguaje de bajo nivel.
Según el paradigma de programación:
Lenguaje imperativo: consiste en un conjunto de
instrucciones que la computadora debe ejecutar. Estas le
indican a la computadora cómo debe realizarse una tarea
mediante un algoritmo. Es decir, se hace énfasis en cómo
debe hacerse dicha tarea y no en el porqué de su realización.
Lenguaje funcional: se basa en la aplicación de funciones
matemáticas y la composición entre ellas, a diferencia de los
cambios de estado que define el lenguaje imperativo.
Lenguaje lógico: aplica reglas lógicas para que, a partir de
ellas, se pueda llegar a ciertas conclusiones luego de utilizar
razonamiento formal. Los objetos de tales razonamientos son
hechos. Se intenta llegar a la solución de un problema
mediante la comprobación de la veracidad o falsedad de un
conjunto de expresiones.
Lenguaje orientado a objetos: organiza los datos en objetos
que pueden almacenar y manipular información, en forma
similar a como el ser humano percibe la realidad que lo rodea.
La programación orientada a objetos trabaja con unidades
lógicas, denominadas objetos, que se interrelacionan entre sí.
Estos objetos contienen información y son los responsables
de ejecutar las funciones necesarias para resolver los
problemas.
Traductores de lenguajes: intérpretes y compiladores
Al ejecutar un programa los procesadores entienden únicamente
lenguaje máquina. Por ello para poder ejecutar el lenguaje de alto
nivel debe ser traducido al lenguaje máquina.
Interprete:
Lee e interpreta las instrucciones de un programa fuente a medida
que son encontradas y las ejecuta. A este proceso se lo llama
interpretar y a los programas que lo hacen se los conoce como
intérpretes.
Programa fuente Intérprete Traducción y ejecución
Compilador:
El compilador traduce el código fuente de un programa (lenguaje
de alto nivel) en lenguaje máquina. El código que se escribe en
lenguaje de alto nivel se lo denomina código fuente y el traducido se
lo denomina código objeto.
El programa objeto que resulta luego de ejecutar la compilación no
coincide con el lenguaje máquina. Por ello se utiliza un enlazador o
montador, el cual junta el código objeto obtenido para convertirlo
en lenguaje máquina y poder ser ejecutado por el procesador.
Programa fuente compilador programa objeto montador
programa ejecutable en lenguaje maquina
Sistemas de información
Un sistema es un conjunto de elementos que interactúan entre sí,
para lograr un objetivo. Un sistema de información involucra
elementos como tecnologías, software, procesos y personas. Las
actividades de un sistema de información son las siguientes:
Entrada de datos: se capturan los datos que servirán para su
posterior procesamiento y tratamiento de información. Los
datos que ingresan al sistema pueden provenir del exterior de
la organización, como también del interior, desde las distintas
unidades de negocio.
Almacenamiento: es la actividad mediante la cual se guardan
los datos recopilados y la información generada.
Procesamiento de información: toma los datos capturados y
los procesa para generar información que tenga un mayor
significado. Esta es la que servirá de apoyo para las unidades
de negocio de la organización.
Salida de información: consiste en transferir la información
generada a las distintas unidades de negocio o personas
interesadas en ella.
Tipos y usos de los sistemas de información
Podemos clasificarlos según su función u objetivo dentro de la
organización en:
Sistema de procesamiento de transacciones: su función es
procesar la información relacionada con las transacciones de
una organización. Automatiza procesos repetitivos que tienen
relación con las tareas operativas de una organización.
Sistema de soporte a decisiones: tiene por objetivo analizar
la información generada por los sistemas de información
transaccionales que ayudan a la toma de decisiones.
Sistema estratégico: da soporte a la toma de decisiones
estratégicas de una organización para obtener ventajas
respecto de los competidores.
Elementos del lenguaje
Entidades y ligaduras
Se denomina entidad a un elemento sobre el cual trabaja un
programa. Esta posee atributos, los cuales están asociados a la
entidad por el mecanismo de ligadura. Esta asociación se puede
producir en tiempo de compilación (ligadura estática) o durante la
ejecución del programa (ligadura dinámica). El momento en el cual
se crea la ligadura o en el que se decidió su implementación se
denomina tiempo de ligadura.
Ligadura estática: la asociación se produce antes de la ejecución
del programa, por lo que puede darse en tiempo de compilación o
de diseño.
Las características de este tipo de ligadura son:
Menor flexibilidad.
Mayor seguridad (detección temprana de errores).
Mayor eficiencia.
Aplicable a lenguajes compilados.
Ligadura dinámica: la asociación se produce durante la ejecución
del programa, no puede realizarse en un paso anterior. Las
características de este tipo de ligadura son:
Mayor flexibilidad.
Menor seguridad.
Mayor costo de ejecución.
Sintaxis y semántica
Los lenguajes de programación deben seguir ciertas reglas que
determinan la validez de las sentencias empleadas. Este conjunto
de reglas define la sintaxis del lenguaje de programación y están
determinadas por las reglas léxicas (definen el conjunto de
caracteres y sus combinaciones validas) y las reglas sintácticas
(definen las reglas de mayor complejidad, mediante la combinación
de elementos léxicos)
Dentro de los elementos de la sintaxis de un lenguaje
mencionamos:
alfabeto;
identificadores;
palabras reservadas;
espacios en blanco;
símbolos de operadores;
expresiones;
delimitadores de código;
comentarios.
El significado que toma cada uno de los elementos de un lenguaje
de programación de acuerdo al contexto define la semántica del
lenguaje. La sintaxis no tiene en cuenta el contexto, mientras que la
semántica sí lo hace. Las variables, los valores y las expresiones
son algunos de los elementos principales de la semántica de un
lenguaje de programación. Estos elementos tienen una semántica
que indica cómo debe definírselos.
Algoritmo. Concepto. Características
Un algoritmo es un conjunto de pasos para resolver un problema.
Se parte desde un estado inicial y una entrada para llegar a un
estado final o solución.
Problema Diseño del algoritmo programa de computadora
Características principales de los algoritmos
Según Joyanes Aguilar, todo algoritmo debe cumplir con las
siguientes características:
Preciso: el algoritmo debe indicar el orden de realización de
cada paso.
Definido: no importa cuántas veces se ejecute el algoritmo,
se debe obtener el mismo resultado en cada ejecución.
Finito: el algoritmo debe tener un número finito de pasos que
permiten resolver el problema.
Fases en la resolución de problemas
Para resolver un problema mediante la aplicación de un programa
deben tenerse en cuenta las siguientes fases o etapas:
Análisis del problema: debe definirse cuál es el resultado o
la solución esperada, los datos de entrada y qué debe hacer
el programa para llegar a la solución.
Diseño del algoritmo: se diseña el algoritmo que permitirá
resolver el problema.
Codificación: se escribe el programa a partir del algoritmo
diseñado previamente, utilizando un lenguaje de
programación. El diseño del algoritmo es independiente del
lenguaje de programación que se utilice para implementar el
programa.
Compilación y ejecución: el programa fuente debe ser
traducido a lenguaje máquina para la posterior ejecución de
cada una de las instrucciones por parte del procesador de la
computadora.
Verificación y depuración: se comprueba que el programa
obtenga los resultados esperados con una amplia variedad de
datos de entrada. La depuración consiste en identificar y
corregir los posibles errores que puedan encontrarse.
Documentación: deben describirse los pasos del proceso de
resolución del problema e incluir diagramas de flujo, manuales
de usuario, definición de requerimientos, etcétera.
Mantenimiento: el programa debe actualizarse y modificarse
siempre que sea necesario, para cumplir con las necesidades
de cambios de los usuarios. Para facilitar el proceso de
mantenimiento, es muy importante contar con documentación
clara y precisa.
Diseño de algoritmos
Una de las técnicas más conocidas es la de divide y vencerás. Esta
implica dividir el problema en partes más pequeñas, ya que cada
una de estas partes es más fácil de resolver. Esta subdivisión en
problemas más pequeños se puede realizar tantas veces como sea
necesario con cada una de las partes, hasta el punto en el que
obtener la solución para cada una de las partes no sea una tarea
compleja. Una vez que se obtienen las soluciones a cada
subproblema, estas se combinan para dar una solución al problema
original de mayor complejidad.
Como principales ventajas de la aplicación de esta técnica de
diseño pueden mencionarse:
Comprensión más fácil del problema.
Mayor facilidad para resolver problemas complejos.
Mayor facilidad para analizar y mejorar la eficiencia del
algoritmo.
Realizar modificaciones en algunas de las partes del algoritmo
es más fácil.
Mayor facilidad para verificar el problema por medio de sus
partes o módulos.
Representación de algoritmos
Diagrama de flujo:
Un diagrama de flujo es una forma de representar gráficamente un
algoritmo. Estos diagramas utilizan una serie de símbolos con
significados especiales y son la representación gráfica de los pasos
de un proceso. Estos símbolos están conectados mediante el uso
de flechas que indican la secuencia de los pasos del algoritmo. Nos
facilitan la comprensión de algoritmos. Algunas de sus figuras
utilizadas son:
Pseudocódigo:
Es otra forma de representar un algoritmo utilizando semejanzas
con la estructura de un lenguaje de programación, pero sin alejarse
de algunas convenciones del lenguaje natural. El pseudocódigo
define una estructura intermedia entre la descripción de algoritmos
en lenguaje natural y la descripción en lenguajes de programación.
Utiliza palabras que facilitan la lectura humana y aplica un orden y
reglas parecidas a las de un lenguaje de programación.
Ejercicios de aplicación
Hay muchas reglas distintas para representar el pseudocódigo.
Nosotros utilizaremos las siguientes:
Cabecera del algoritmo: La cabecera del algoritmo es una
sentencia simple que comienza con la palabra reservada
algoritmo. A continuación, debe indicarse el nombre asignado
al algoritmo.
Declaración de estructuras de datos (arreglos y
registros): En el caso de que se utilizaran estructuras de
datos definidas por el programador, como arreglos y registros,
estas deben declararse en un bloque de código con la palabra
reservada tipo.
Declaración de variables y constantes: Aquí se declaran
todas aquellas variables y constantes que se utilicen en el
algoritmo. Para definir las variables y constantes utilizaremos
las palabras reservadas var y const respectivamente.
Sentencias ejecutables: Las sentencias ejecutables son las
instrucciones que constituyen los pasos del algoritmo, que se
ejecutarán cuando el programa inicie. Para delimitar esta
última sección, utilizaremos las palabras reservadas inicio y
fin.
algoritmo <nombre de algoritmo>
tipo
<definición de arreglos y registros>
var
<tipo de dato>: <nombre de variable, nombre de variable, etc.>
<tipo de dato>: <nombre de variable>
.
.
const
<tipo de dato>: <nombre de constante> <valor>
<tipo de dato>: <nombre de constante> <valor>
.
.
inicio
<sentencia ejecutable 1>
< sentencia ejecutable 2>
< sentencia ejecutable n>
fin
Ejemplo:
algoritmo suma_dos_numeros
var
entero: a, b, suma
inicio
leer(a, b)
suma a +b
mostrar(suma)
fin
Tipos de Datos y Variables
Un tipo de dato define el conjunto de valores que una variable
puede tener. Además de definir el tipo de valor de una variable, el
tipo de dato también especifica las operaciones que se pueden
realizar con dicha variable. El tipo de dato define el espacio que se
utiliza en memoria para almacenar los valores (variables y
constantes).
Se clasifican en dos tipos; básicos o integrados (definidos por los
lenguajes de programación) o definidos por el programador (son
definidos a partir de datos básicos)
Datos numéricos
El tipo de dato numérico representa el conjunto de los valores
numéricos. Pueden ser de tipo numérico entero (números sin parte
fraccionaria, positivos o negativos) o de tipo numérico real
(comprende los enteros positivos, negativos, el cero y los números
decimales. Estos ocupan mayor espacio para ser almacenados en
memoria)
Datos lógicos
El tipo de dato lógico o booleano representa los valores lógicos
verdadero (true) o falso (false) y comúnmente se usa para dirigir las
secuencias de código por ejecutar en un programa. Mediante el uso
de este tipo de dato, pueden evaluarse condiciones que permiten
tomar una decisión.
Datos de tipo carácter y cadena
El tipo de dato carácter es el conjunto finito y ordenado de
caracteres que la computadora reconoce. Este tipo de dato contiene
un solo carácter. Estos pueden ser:
Caracteres alfabéticos: A, B, C, a, b, c, etcétera.
Caracteres numéricos: 1, 2, 3, etcétera.
Caracteres especiales: + - * / . , ; :
Una cadena de caracteres es un tipo de dato estructurado
compuesto a partir de un conjunto de caracteres. Es una sucesión
de caracteres delimitados por comillas simples o dobles.
Variables y constantes
Una variable es un espacio reservado en memoria cuyo contenido
(valor) puede cambiar durante la ejecución del programa. Esta tiene
asociada un identificador o nombre, un tipo de dato y un valor, y
solo puede tomar valores permitidos según su tipo de dato.
El identificador o nombre de una variable es un conjunto de
caracteres alfanuméricos con el que se puede hacer referencia a la
misma variable. Por ejemplo:
entero numero
lógico valor
real promedio1
Una constante es un objeto cuyos valores no pueden cambiar
durante la ejecución del programa.
Todos los lenguajes, incluso las reglas de pseudocódigo, tienen un
conjunto de palabras reservadas que poseen un significado especial
para el lenguaje y no pueden ser utilizadas como identificadores.
Expresiones y operadores
Una expresión es la combinación de variables, constantes,
operadores, funciones y reglas. Se clasifican en:
Aritméticas: de tipo numérico
Relacionales: de tipo lógico
Lógicas: de tipo lógico
De carácter: de tipo carácter
Expresiones aritméticas
Las expresiones aritméticas son análogas a las que se utilizan en el
álgebra. Estas son:
Las reglas de precedencia o prioridad son:
1) Evaluar primero las expresiones encerradas entre paréntesis.
2) Las operaciones aritméticas obedecen el siguiente orden de
prioridad:
Operador exponencial.
Operadores de producto y división.
Operadores div y mod.
Operadores suma y resta.
Expresiones lógicas
Las expresiones lógicas o booleanas son aquellas cuyo resultado
es de tipo lógico, es decir, verdadero o falso. Una expresión lógica
se puede formar mediante la combinación de variables o constantes
lógicas, operadores lógicos, operadores relacionales u otras
expresiones lógicas como llamadas a funciones que retornen un
valor lógico.
Los operadores lógicos son:
Los operadores relacionales (o de comparación) son:
= igual que
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
<> distinto de
Los operadores relacionales son binarios, ya que necesitan dos
operandos para cumplir su función.
Operación de asignación
La operación de asignación es utilizada para almacenar/asignar un
valor a una variable. La operación de asignación se representa con
el símbolo = o .
Variable Expresión
La operación A 10, significa que el valor representado por el
número entero 10 es asignado a la variable A.
Los operadores de asignaciones pueden ser de los siguientes tipos:
Asignación aritmética:
A6+7
BA+B
producto con1 * con2
Asignación lógica:
A5<7
B A | (3 <> 3)
P 10 < 2
Las variables A, B y P tienen los valores verdadero, verdadero y
falso, respectivamente.
Asignación de caracteres/cadenas:
X “hola”
Se asigna la cadena de caracteres hola a la variable X de tipo
cadena.
Operación de entrada/salida:
Las operaciones de entrada permiten ingresar valores mediante
dispositivos de entrada de datos. Se conoce también como
operación de lectura.
También los algoritmos de un programa pueden enviar valores a
dispositivos de salida de información. Se denominan también
operaciones de escritura.
También se pueden utilizar las palabras claves ingresar, en lugar de
leer, y mostrar, en lugar de escribir.
Se representan como:
leer (lista de variables de entrada separadas por coma)
escribir (lista de variables de salida separadas por coma)
MODULO 2
Programación estructurada
Es un paradigma de programación orientado a mejorar la claridad,
calidad y tiempo de desarrollo de un programa de computadora,
utilizando únicamente subrutinas y tres estructuras: secuencia,
selección (if y switch) e iteración (bucles for y while), considerando
innecesario y contraproducente el uso de la instrucción de
transferencia incondicional (GOTO).
Ventajas de la programación estructurada
Los programas son más fáciles de entender, pueden ser
leídos de forma secuencial y no hay necesidad de hacer
engorrosos seguimientos en saltos de líneas (GOTO) dentro
de los bloques de código para intentar entender la lógica.
La estructura de los programas es clara, puesto que las
instrucciones están más ligadas o relacionadas entre sí.
Reducción del esfuerzo en las pruebas y depuración. El
seguimiento de los fallos o errores del programa ("debugging")
se facilita debido a su estructura más sencilla y comprensible,
por lo que los errores se pueden detectar y corregir más
fácilmente.
Reducción de los costos de mantenimiento. Análogamente a
la depuración, durante la fase de mantenimiento, modificar o
extender los programas resulta más fácil.
Los programas son más sencillos y más rápidos de
confeccionar.
Se incrementa el rendimiento de los programadores,
comparado con la forma anterior que utiliza GOTO.
El teorema del programa estructurado, propuesto por Böhm-
Jacopini, demuestra que todo programa puede escribirse utilizando
únicamente las tres instrucciones de control siguientes:
Secuencia
Instrucción condicional: Simple, doble o múltiple
Iteración (bucle de instrucciones) con condición al principio:
mientras, repetir-hasta o para/desde.
Estructuras secuenciales
Las estructuras secuenciales son aquellas en las que las acciones
se ejecutan una a continuación de la otra, en secuencia, no se
bifurca ni se repite el flujo del programa. Por ejemplo:
leer(A)
leer(B)
suma A + B
mostrar(suma)
Las acciones anteriormente indicadas se ejecutan cuando la
anterior ha finalizado. Es decir, la acción leer(B) se ejecutará luego
de que finalice la acción leer(A), la acción suma A + B se
ejecutará una vez finalizada la acción leer(B), y así sucesivamente.
Estructuras condicionales
Las estructuras secuenciales ejecutan una sentencia a continuación
de otra de acuerdo con el orden especificado en el algoritmo. Se
ejecuta una acción si se cumple una condición. Esto permite
modificar el orden de ejecución de las sentencias según el resultado
de una expresión que se evalúa. El tipo de dato del resultado de la
condición debe ser de tipo lógico.
Las estructuras condicionales se clasifican en: simples, dobles y
múltiples.
Condicional simple:
Evalúa una expresión lógica (condición). Si esta es verdadera,
ejecuta las sentencias especificadas a continuación de la palabra
reservada entonces; si es falsa, no realiza ninguna acción y
continúa con el flujo del algoritmo.
si <condición> entonces
sentencia 1
sentencia 2
fin-si
Condicional doble:
Evalúa una expresión lógica (condición). Si esta es verdadera,
ejecuta las sentencias que se encuentran a continuación de la
palabra reservada entonces (rama verdadera), pero si la condición
resulta ser falsa, entonces se ejecutan las sentencias especificadas
a continuación de la palabra reservada si-no (rama falsa).
si <condición> entonces
sentencia 1
si-no
sentencia 1
fin-si
Condicional múltiple:
La estructura condicional múltiple es utilizada cuando se debe elegir
entre más de dos alternativas de acuerdo con el valor de una
variable. Evalúa una expresión (condición) que puede resultar en N
valores distintos. Según el resultado de la expresión, se ejecutarán
las sentencias definidas para el valor que se ha obtenido.
según-sea <expresión> hacer
caso A: sentencia A1
caso B: sentencia B1
caso N: sentencia N1
si-no:
sentencia X1
fin-según
Esta expresión requiere que la variable que se evalúa sea de tipo
entero o carácter. La aplicación de la sentencia si-no es opcional y
debe ser utilizada cuando necesitamos ejecutar un conjunto de
acciones en el caso de que el resultado de la variable no sea igual a
ninguno de los valores especificados en las sentencias caso.
Estructuras repetitivas
En el diseño de algoritmos, hay una gran variedad de situaciones
que requieren que una o más instrucciones se repitan varias veces.
Las instrucciones iterativas o de repetición permiten ejecutar una
secuencia de instrucciones más de una vez.
Un bucle es una sección de código que se repite. Es decir que
cuando se termina de ejecutar la última instrucción del conjunto, el
flujo de control retorna a la primera sentencia y comienza una nueva
repetición. Se denomina iteración al hecho de repetir la ejecución de
una secuencia de acciones.
Hay varios tipos de estructuras repetitivas, entre ellas tenemos:
Estructura mientras o while:
Se ejecuta un conjunto de sentencias mientras el resultado de una
expresión (condición) sea verdadera. En la estructura mientras, se
evalúa primero la condición y si esta es verdadera, entonces se
ejecutan las sentencias definidas en el bucle. Al finalizar la iteración,
se vuelve a evaluar la condición para volver a ejecutar una nueva
iteración hasta que la condición dé como resultado un valor falso.
mientras <condición> hacer
sentencia 1
fin-mientras
En una estructura mientras, lo primero que se ejecuta es la
evaluación de la condición y si esta es falsa la primera vez que se
ingresa a esta estructura, las sentencias asociadas al bucle nunca
se ejecutarán.
Un bucle de una estructura repetitiva que nunca deja de ejecutarse
se denomina bucle infinito.
Estructura repetir-hasta o do-while:
Esta estructura repetitiva se utiliza cuando se desea que se ejecute
una iteración al menos una vez antes de comprobar la condición de
repetición. Es decir, primero se ejecuta el bucle y luego se
comprueba la condición para reproducir una nueva iteración o no
del bucle. Esta estructura ejecuta el bucle de repetición mientras el
resultado de la condición que se evalúa sea falso.
repetir <condición>
sentencia 1
hasta-que <condición>
Estructura para/desde:
En muchas ocasiones se conoce el número de veces que se desea
que un bucle se repita. Una estructura de control muy comúnmente
usada en estos casos es el ciclo para o desde. Se utiliza una
variable como índice que se incrementa o decrementa en forma
automática al finalizar cada ciclo.
Para ejecutar el bucle, se evalúa una condición que debe ser
verdadera. La condición más comúnmente usada es que el valor del
índice sea menor o igual a un valor final. Si esto se cumple,
entonces se ejecuta el bucle. Al finalizar, se incrementa o
decrementa el índice y se vuelve a evaluar la condición. Cuando la
condición es falsa, se ignora el bucle y se continúa con el resto del
algoritmo.
desde v vi hasta vf <inc/dec> hacer
sentencia 1
sentencia 2
fin-desde
La variable v es una variable entera que debe ser declarada. Los
valores vi y vf son los valores inicial y final que tomará la variable
v. En el formato de esta estructura, hay que elegir entre incrementar
o decrementar la variable de control v, ya que no pueden ocurrir al
mismo tiempo ambas opciones. Si el incremento es por el valor 1,
entonces se puede obviar la sentencia inc 1 en la estructura. Se
pueden utilizar indistintamente las palabras reservadas desde/fin-
desde y para/fin-para
desde v 1 hasta 5 inc 2 hacer
<sentencias>
fin-desde