lunes, 12 de noviembre de 2007

Participantes


García López Félix
Me gustan las mujeres, la musica y la comida.
Soy musico, me gusta bailar, escuchar de todo tipo de musica, sobre todo, la musica salsa, a demás soy fan de el grupo NICHE. En mi tiempo libre me gusta jugar AGE OF EMPIRES y salir con mi esposa.








Avendaño Hernández Fidel

Pasatiempos: me gusta: la música , el ciclismo, la computación y sobre todo los fines de semana.
Estudios: ingeniería en computación
Mi comida preferida: todo tipo de comida rápida, en especial las pizzas.
Soy alérgico a estudiar por la noches y a levantarme temprano, pero pues ya se me esta quitando.


Martínez García Francisco
Nabor Gloria
Nava Sánchez Ángel

domingo, 11 de noviembre de 2007

4.2.3 Expresiones no aritméticas

El alumno distinguirá fórmulas bien formadas a partir de oraciones en lenguaje
natural para especificar y definir formalmente un conjunto de sentencias.
El resultado de la evaluación de la expresión es un valor
lógico (cierto o falso). Se construye mediante
Operadores relacionales
Operadores lógicos

Operadores relacionales
Operan sobre operandos (constantes, variables, expresiones)de diferentes tipos (numéricos, caracteres) y dan como resultado un valor de tipo lógico (cierto o falso; 1 o 0).

"Operación Operador
Alg.
Igualdad
Desigualdad
Menor
Menor Igual
Mayor
Mayor Igual Op.
=

<


>= C
==
!=
<


 Exp. C
a==b
a!=b
aab
ab
ab"

Operadores Lógicos

Operan sobre operandos (constantes, variables, expresiones) de tipo lógico (cierto o falso) y evalúan a un valor de tipo lógico (cierto o falso).

Operación
y
o
Negación Op. Algebraico
lógico
lógico ∨
¬ Op. C

||
! Exp. C
a && b
a || b
!a

4.3 Control de Enunciados

Los enunciados modificados básicamente es la unión de una expresión con una palabra para realizar una acción.
Las palabras o modificadores que se pueden usar son: if,unless,until y while.
Un enunciado es la expresión de una proposición. Es como un anuncio que se usa para proponer algo de una forma en la que uno se exprese. En otros términos, se trata de una oración enunciativa, que afirma o niega algo, y que, en lógica bivalente, sólo puede ser verdadera o falsa. Los argumentos lógicos se estructuran a partir de enunciados: premisas y conclusión.
El enunciado no es una unidad convencional, sino real, delimitada con precisión por el cambio de sujetos discursivos.
Enunciado Simple:
Es el que no contiene otro enunciado como parte componente. Ej. "Las rosas son rojas"
Enunciado compuesto:
Es el que se compone de varios enunciados. Ej. "Las rosas son rojas y las violetas son azules".Cuando los enunciados se unen por la conjunción Y, se denominan Enunciados conyuntos.
Cuando los enunciados se unen por el conector o, se denominan Enunciados disyuntos. De aquí surgen las siguientes tablas de verdad:

Formas de control de secuencias al nivel de enunciados.
A nivel de enunciados hay tres formas principales de control de secuencia:
1.- Composición: Los enunciados pueden disponer de una serie textual de modo que deben ejecutarse en orden y siempre la ejecución de la estructura mayor del programa que contenga la serie.
2.- Alternancia: Dos series de enunciados pueden formar alternativas de modo que se ejecute una u otra serie, pero no las dos siempre que se ejecute la estructura mayor del programa que contenga la serie.
3.- Iteración: Cuando hay una serie de enunciados pueden ejecutar en forma repetitiva, cero o más veces; cuando es cero significa que se puede omitir del todo la ejecución. Para esto se debe ejecutar la estructura mayor del programa que contenga la serie.
Control explícito de secuencia.
Las maquinas se componían de posiciones de memoria, los primeros lenguajes por ejemplo (FORTRAM, angol) las modelaban con tipos de datos simples traducibles directamente a objetos de maquina ( FLOAT DE C ) Y ( REAL DE FORTRAM ) a punto flotante de hardware.
Enunciado goto: En muchos lenguajes están presentes dos forma de enunciado goto (ir a), uno es el enunciado goto incondicional y el otro es el enunciado goto condicional.
Goto incondicional: Dentro de una seré de enunciados, un goto incondicional.
Control de secuencia estructurado
Casi todos los lenguajes suministran un conjunto de enunciados de control para expresar las formas básicas de control: composición, alternancia e iteración. Un aspecto importante de los enunciados que se van a analizar es que cada uno es un enunciado de entrada por salida, lo que significa de que cada enunciado hay un solo punto de entrada al enunciado y un solo punto de salida al mismo.
Los lenguajes más antiguos, como COBOL y FORTRAM, contienen algunos enunciados de control de entrada por salida, pero todavía se apoyan fuertemente en enunciados goto y etiquetas de enunciados. Ha sido difícil adaptar ambos lenguajes a conceptos modernos de lenguaje.

4.3.1 Enunciados básicos
Los resultados de cualquier programa están determinados para sus enunciados básicos que aplican operaciones a objetos de datos. Son ejemplos de estos enunciados básicos los enunciados de asignación, llamadas de subprogramas, y enunciados de entrada y salida. Dentro de un enunciado básico se puede invocar una serie de operaciones usando expresiones, como se dijo en el caso anterior, pero para un fin actual, cada enunciado básico se puede considerar como una unidad que representa un solo paso en el cómputo.

4.3.2 Enunciados compuestos
Un enunciado simple es uno que no tiene otro enunciado como parte componente, mientras que todo enunciado compuesto contiene otro enunciado como componente.
El enunciado “Las rosas son rojas y las violetas son azules” es una conjunción, un enunciado compuesto que se forma insertando la palabra “y” entre los dos enunciados. Introducimos el punto “.” Como un símbolo especial para combinar enunciados conjuntivamente. Usándolo, la conjunción precedente se escribe “Las rosas son rojas. Las violetas son azules”. Si p y q son dos enunciados cualesquiera su conjunción se escribe p.q.

Tema 4: Expresiones y declaraciones

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.