Objetivo:
El alumno describirá cómo se definen y operan las estructuras de control como expresiones y declaraciones en los lenguajes de programación.
El alumno distinguirá fórmulas bien formadas a partir de oraciones en lenguaje
natural para especificar y definir formalmente un conjunto de sentencias.
Contenido:
4.1 Sentencias declarativas
La lógica proposicional trabaja con sentencias u oraciones a las cuales se les
puede asociar un valor de verdad (cierto o falso); estas sentencias se conocen
como sentencias declarativas o, simplemente, proposiciones. Existen proposiciones que son simples, así como proposiciones que están construidas por otras proposiciones usando elementos (conectivas lógicas) que las asocian. Al construir una proposición, se debe garantizar que esta puede ser evaluada
(fórmula bien formada); de la misma forma, podemos construir proposiciones
usando solo un grupo de conectivas, produciendo fórmulas que se dice están en su forma normal.
Otro aspecto importante es el de determinar si una proposición esta construida
(o puede ser deducida) a partir de un conjunto de proposiciones, es decir, si es
una consecuencia lógica de dicho conjunto.
Finalmente, existen varias formas de representar una fórmula de la lógica
proposicional; aquí se introduce el concepto de circuitos lógicos, donde se
asocia a las conectivas lógicas un símbolo gráfico.
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.
Las sentencias como casi todas las cosas, se dividen en simples y estructuradas. Las simples serán las que tratemos en este tema, dejando para el siguiente las estructuradas.
No todas las sentencias expresan proposiciones.
Típicamente las sentencias declarativas (en modo indicativo) se utilizan para expresar proposiciones y no las sentencias en modo interrogativo o en modo imperativo.
4.2 Expresiones aritméticas
Expresiones
Una expresión es una combinación de operandos y operadores. Los operandos pueden ser:
• Constantes literales o con nombre
• Variables Otras expresiones(Una combinación de operadores y operandos)
Lo que se hace con una expresión es evaluarla para que devuelva un valor.
Tipos de expresiones
Aritméticas: Los operandos que intervienen en ella son numéricos, el resultado es numérico y los operadores son aritméticos.
La mayoría de los lenguajes permiten diferentes tipos de expresiones. Expresiones aritméticas son análogas a las fórmulas matemáticas. Las variables y constantes son numéricas y las operaciones son las aritméticas clásicas.
+ Suma X + Y
- Resta X - Y
* Multiplicación X * Y
/ División X / Y
** Exponenciación X ** Y
Los paréntesis se utilizan también para agrupar términos juntos y asegurar que las operaciones se ejecuten en el orden correcto.
Ejemplo: En la expresión M*(5+N), la constante 5 se suma al valor de N, y su resultado se multiplica por el valor de M.
Lógicas: Su resultado es CIERTO ó FALSO. Se construyen mediante los operadores relacionales y lógicos.
Evaluación de Expresiones Aritméticas
Para evaluar una expresión debe tenerse en cuenta que:
Los operadores tienen prioridad. De mayor a menor son: x / + -
Las operaciones con operadores de igual prioridad se evalúan de izquierda a
derecha.
Al final de la operación se efectúan el resto de operaciones pendientes hasta
que el recipiente de operadores quede vació.
Ejemplo: (4+6)*3/5
Expresiones Aritméticas:
Ejemplo 1
Evaluar la expresión aritmética
(a + b + c + d + e)%5
para los valores:
a = 3, b = 2, c = 1, d = 8, e = 4
R1 = 3 + 2 = 5
R2 = 5 + 1 = 6
R3 = 6 + 8 = 14
R4 = 14 + 4 = 18
R5 = 18%5 = (Resultado)
Expresiones Aritméticas:
Ejemplo 2
Evaluar la siguiente expresión aritmética:
a % 2 / b – c * a * y + 18 / c – 3 * h
R1 = a % 2
R2 = R1 / b
R3 = c * a
R4 = R3 * y
R5 = 18 / c
R6 = 3 * h
R7 = R2 – R4
R8 = R7 + R5
R9 = R8 – R6 (Resultado)
Ejemplo 2
Evaluar la expresión aritmética
a % 2 / b – c * a * y + 18 / c – 3 * h
para los valores:
a = 3, b = 2, c = 1, h = 8, y = 4
R1 = 3 % 2 = 1
R2 = 1 / 2 = 0
R3 = 1 * 3 = 3
R4 = 3 * 4 = 12
R5 = 18 / 1 = 18
R6 = 3 * 8 = 24
R7 = 0 – 12 = -12
R8 = -12 + 18 = 6
R9 = 6 – 24 = -18(Resultado)
Expresiones Aritméticas:
Ejemplo 3
Evaluar la siguiente expresión aritmética:
a * (b + c) + c * (d + e)
R1 = b + c
R2 = d + e
R3 = a * R1
R4 = c * R2
R5 = R3 + R4 (Resultado)
Para los valores:
a = 3, b = 2, c = 1, d = 8, e = 4
R1 = 2 + 1 = 3
R2 = 8 + 4 = 12
R3 = 3 * 3 = 9
R4 = 1 * 12 = 12
R5 = 9 + 12 = 21(Resultado)
Ejemplo 4
Evaluar la siguiente expresión aritmética:
(a * (b + c)) – 2 * a + (4 * d – f)
R1 = b + c
R2 = a * R1
R3 = 4 * d
R4 = R3 - f
R5 = 2 * a
R6 = R2 - R5
R7 = R6 + R4 (Resultado)
Evaluar la expresión aritmética
(a * (b + c)) – 2 * a + (4 * d – f)
para los valores:
a = 3, b = 2, c = 1, d = 8, f = 4
R1 = 2 + 1 = 3
R2 = 3 * 3 = 9
R3 = 4 * 8 = 32
R4 = 32 - 4 = 28
R5 = 2 * 3 = 6
R6 = 9 - 6 = 3
R7 = 3 + 28 = 31(Resultado)
Ejemplo 4
Las expresiones aritméticas pueden ser evaluadas de forma estrictamente secuencial:
Por ejemplo, la expresión:
1+3*4 se evalúa poniendo los operandos en de un lado y los operadores de otro lado. Esta separación ocurre de forma secuencial.
Expresiones Aritméticas:
Ejercicios
Evaluar cada una de las siguientes expresiones aritméticas:
a) A % B + C / D – 6
b) A + 2 * (3 + B)
c) 3 * (A % (B / C)) + 5
d) 6 * 5 / 10 * 2 + 10
e) (6 * 5 )/ (10 * 2) + 10
f) (6 * 5) /( 10 * 2 + 10)
g) (6 * 5) / (10 * (2 + 10))
h) A * B / C * D
Ejercicios
Evaluar la expresión
4 / 2 * 3 / 6 + 6 / 2 / 1 / 5 % 2 / 4 * 2
Escribir las siguientes expresiones algebraicas como expresiones
en C:
a) 4x - 2y + 7 b) a + b
c) 3x + 2y c - d
2z
d) x + y - 3x e) y 2 - y 1
x 5 x2 - x1
Ejercicios
Si A = 4, B = 5 y C = 1, evaluar las siguientes expresiones
a) B * A - B * B / 4 * C
b) (A * B) / 3 * 3
c) (((B + C) / 2 * A + 10) * 3 * B) - 6
Evaluar la siguiente expresión para A = 2 y B = 5
3 * A - 4 * B / A % 2
Ejercicios
Dadas las declaraciones:
float w;
int i, j = 2, k = 4;
Determinar el valor de las variables i, w y k después de la ejecución de las siguientes sentencias de asignación:
i = j / k;
w = i / j;
k = i % j;
w = 8.0 / j;
Ejercicios
Si para tres números enteros cualesquiera, a, b y c, se cumple que a2 + b2 = c2 entonces ellos constituyen una tripla Pitagórica. Existe un número infinito de tales triplas. A continuación se expone una manera de generar estas triplas:
Considere dos números enteros m, y , n tal que m > n.
Entonces se tiene que los tres números m2 - n2, 2mn y m2 + n2 son una tripla Pitagórica.
El programa debe leer los valores de m y n, los cuales deben ser validados para asegurar que m es mayor que n. Además, debe imprimir los valores correspondientes a la tripla Pitagórica una vez verificado que se cumple que a2 + b2 = c2.
Realice el análisis E-P-S, diseño y codificación en C++ para resolver este problema.
Calcular la suma de los términos de una progresión aritmética que empieza en 2, termina en 602 y tiene razón 2.
Fórmulas:
an = a1 + (n - 1).r
S = (an + a1).n
2
Ejercicio
Una progresión aritmética de n términos empieza en a1 y la suma de sus términos es S. Calcular la razón.
Fórmulas:
an = a1 + (n - 1).r
S = (an + a1).n
2
4.2.1 Sintaxis y semántica
La semántica: Reglas que permiten determinar el significado de cualquier construcción del lenguaje. una subdisciplina de la lingüística y parte importante del análisis gramatical, se encarga del estudio de las reglas que gobiernan la combinatoria de constituyentes y la formación de unidades superiores a estos, como los sintagmas y oraciones.
La semántica de un lenguaje de programación define el significado dado a las
distintas construcciones sintácticas. En los lenguajes de programación, el significado está ligado a la
estructura sintáctica de las sentencias.
En el proceso de traducción, el significado de las sentencias se obtiene de la identificación
sintáctica de las construcciones sintácticas y de la información almacenada en la tabla de símbolos.
Sintaxis : Reglas que indican cómo realizar las construcciones del lenguaje, por tanto, estudia las formas en que se combinan las palabras, así como las relaciones sintagmáticas y paradigmáticas existentes entre ellas.
La sintaxis de los lenguajes de programación se puede dividir en 2 categorias:
• Los que tienen una sintaxis basada en Algol
• Todos los otros lenguajes
Cuando hablo de una sintaxis basada en Algol no me refiero a que visualmente se parezcan al lenguaje Algol, lo que quiero decir es que la manera en que los lee un interprete o compilador esta basada en las tecnologias de compilación desarrolladas para los primeros compiladores de Algol: análisis léxico para separar el fuente en tokens seguido de un análisis sintáctico basado en la gramática del lenguaje.
Entre los lenguajes con una sintaxis basada en Algol se encuentran: Pascal, C, C++, C#, Java, JavaScript, Eiffel, Basic, Python, Ruby y hasta Perl. Entre los otros lenguajes están: Fortran, COBOL, Forth, Smalltalk, APL, Common Lisp y Scheme.
Dentro de la categoria de los otros lenguajes todavia se puede hacer una subdivisión basada en los lenguajes derivados de Lisp y los demás lenguajes. Los lenguajes derivados de Lisp, y que podriamos llamar dialectos de Lisp, que se emplean mucho actualmente son: Scheme, Common Lisp, AutoLisp y EmacsLisp.
Debido a su sintaxis “extraña” (es decir: no esta basada en Algol) muchos programadores se sienten intimidados por los dialectos de Lisp y esto ha evitado que estos lenguajes se vuelvan más populares, lo cual es una lástima ya que en Lisp hay muchos conceptos que pueden ser muy útiles en el desarrollo de software. De hecho, hay por lo menos un par de lenguajes (Python y Ruby) que han tomado varios conceptos de Lisp para plasmarlos en una sintaxis más “tradicional” y que han tenido en estos ultimos años mucho éxito entre los programadores, aunque el uso de una sintaxis basada en Algol unicamente permite aprovechar una pequeña fracción de estos conceptos.
El ciencias computacionales existe el premio Turing que es el equivalente al premio Nobel para otras ciencias. En 1978 el ganador del premio Turin fué Robert Floyd por: “Helping to found the following subfields of computer science: the theory of parsing, the semantics of programming languages, automatic program verification, automatic program synthesis and analysis of algorithms. Floyd implemented one of the first Algol 60 compilers, finishing his work on this project in 1962. In the process, he did some early work on compiler optimization. Subsequently, in the years before 1965, Floyd systematized the parsing of programming languages. For that he originated the precedence method, the bounded context method, and the production language method of parsing”.
En otras palabras: Robert Floyd recibió el premio Turing por inventar la tecnología empleada en la implementación de todos los lenguajes con una sintaxis badasa en Algol. Lo interesante es que el ganador del premio Turing, en la ceremonia donde se le entrega el premio, tiene que dar alguna conferencia sobre el tema que quiera. Lo siguiente es parte de lo que dijo Robert Floyd en su conferencia: “Contact with the programming written under alien conventions may help. Visiting MIT on sabbatical this year, I have seen numerous examples of the programming power which Lisp programmers obtain from having a single data structure, which is also used as a uniform syntactic structure for all the functions and operations which appear in programs, with the capability to manipulate programs as data. Although my own previous enthusiasm has been for syntactically rich languages like the Algol family, I see now clearly and concretely the force of Minsky’s 1970 Turing Lecture, in which he argued that Lisp’s uniformity of structure and power of self-reference gave the programmer capabilities whose content was well worth the sacrifice of visual form.”
Tabla de contenidos
El término semántica, se refiere a los aspectos del significado o interpretación del significado de un determinado símbolo, palabra, lenguaje o representación formal. En principio cualquier medio de expresión (lenguaje formal o natural) admite una correspondencia entre expresiones de símbolos o palabras y situaciones o conjuntos de cosas que se encuentran en el mundo físico o abstracto que puede ser descrito por dicho medio de expresión.
La lógica de predicados de primer orden es el tipo de sistema lógico-matemático más sencillo donde aparece el concepto de interpretación semántica. Dicha lógica está formado por:
1. Un conjunto de signos (conectivas, paréntesis, cuantificadores,...).
2. Un conjunto de variables y constantes.
3. Un conjunto de predicados sobre las variables.
4. Un conjunto de reglas de buena formación de expresiones a partir de expresiones sencillas.
En la lógica de primer orden el conjunto de variables y constantes juega un papel similar al lexicón de las lenguas naturales ya que bajo una interpretación semántica son los elementos que admiten referentes. A su vez, el conjunto de reglas de buena formación de expresiones hace el papel de la sintaxis en las lenguas naturales. Para interpretar semánticamente las expresiones formales de un sistema lógico de primer orden necesitamos definir un modelo o conjunto estructurado sobre el que interpretar los enunciados formales del sistema lógico. Un modelo de acuerdo con la teoría de modelos es un conjunto con cierta estructura junto con una regla de interpretación que permite asignar a cada variable o constante un elemento del conjunto y cada predicado en el que intervienen un conjunto de variables puede ser juzgado como cierto o falso sobre el conjunto en el que se interpretan las proposiciones del sistema lógico formal.
En lógica matemática se suelen dividir los axiomas en dos tipos:
Axiomas lógicos, que definen básicamente las reglas de deducción y están formados por tautologías. Básicamente son válidos para cualquier tipo de sistema formal razonable.
Axiomas matemáticos, que asevera la existencia de cierto tipo de conjuntos y objetos con verdadero contenido semántico. Gracias a ello es posible introducir conceptos nuevos y probar las relaciones entre ellos.
Así si se tiene un conjunto de axiomas que define la teoría de grupos, cualquier un grupo matemático es un modelo en el que las proposiciones y axiomas de dicha teoría reciben interpretación y resultan en proposiciones ciertas sobre ese modelo.
4.2.2 Representación en tiempo de ejecución
Una constante es un objeto de valor invariable. Este valor no cambia durante el proceso. Para expresar una constante se escribe explícitamente su valor, por ejemplo, 5, -70, 3.1416.
Una variable es un objeto cuyo valor puede cambiar. Toda variable posee dos atributos: un nombre (invariable, denominado en ocasiones identificador) que sirve para designarla y un tipo (invariable) que describe la posible utilización de la variable.
El valor de las variables puede ser modificado durante la ejecución del programa.
Suscribirse a:
Enviar comentarios (Atom)
4 comentarios:
LENGUAJES DE PROGRAMACIÓN TEMA 6 GRUPO: 03
INTEGRANTES EQUIPO:
Corona Zamora Gabriel David
Flores Ramírez Anel
Jiménez Hernández Raúl
Morales Cortes Abraham
Orozco Tovilla Eduardo
Ramírez Orozco Hugo
Comentario
Esta completo el tema un poco mas de ejemplos lo haría mejor, muy bien resumido con claridad están planteados los objetivos del tema, los perfiles también los colocaron, pero muy bien el desarrollo de su tema
Lenguajes de Programación Cap. 1 Grupo: 3
Integrantes:
Fiesco Sevilla Tonanzin.
Flores Becerra Miguel Ángel.
Fuerte Martínez Edcel.
León Espíndola José de Jesús.
Moreno Aguilar Guadalupe.
Villar Barqu´n Rafael Elías.
COMENTARIO:
Me parece un tema bastante completo y bien explicado, lo que lo hace sencillo de comprender. Los ejemplos me parecieron buenos aunque muy generales, pero se complementaron con los ejercicios que estaban muy entretenidos. El equipo hizo un buen desarrollo de su tema y de su blog en general.
el formato del blog es bueno, la informacion es muy legible y esta ordenada,tiene los datos de los integrantes (bueno de algunos, en general es un buen blog.
Equipo 02, integrantes:
Garcia Amaral Juan Carlos
Gomez Rios Aidee
Martinez Acosta Marisol
Mendez Granados Ruth Cristina
Ramirez Orozco Hugo
Rodriguez Aquino Rosaldo Etienne Alexis
Publicar un comentario