PDF de programación - Capítulo 4. Expresiones

Imágen de pdf Capítulo 4. Expresiones

Capítulo 4. Expresionesgráfica de visualizaciones

Publicado el 12 de Abril del 2018
555 visualizaciones desde el 12 de Abril del 2018
218,2 KB
18 paginas
Creado hace 12a (24/10/2011)
LenguajesdeProgramación.

Capítulo4.
Expresiones.
CarlosUreñaAlmagro
Curso2011-12

.

.

.

.

.

.

Contents
1 Introducción
2 Literales
2.1
Literalestiposprimitivos.
.
.
.
2.2
Literalesdetiposcompuestos(agregados)
3 Accesosavariables.
3.1 Accesosaelementosdevar. compuestas .
.
.
.
3.2 Accesosatravésdereferencias.
3.3 Expresionesdetiporeferenciaopuntero .
4 LLamadasafunciones
5 Expresionescondicionales
6 Operadoresinfijosyprefijos

.

.

.

.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

2
5
5
6
9
10
12
15
15
16
16

1

LP(11-12)4. Expresiones
1 Introducción
Lasexpresiones
• Lasexpresionessonotrodelosconceptosbásicosquesurgenenlosprimeroslenguajesdeprogramación
(p.ej. Fortran)
• Elobjetivoprincipalespoderexpresarconfacilidadcálculoscomplejos,conunasintaxisinspiradaen
lasmatemáticas.
Ejemplodeuncálculo
Sinexpresiones(usandosolovariablesyregistros)

r1 = [velocidad]
r2 = [tiempo]
r1 *= r2
r2 = [posini]
r1 += r2
[posact] = r1

Conexpresiones:

posact = posini + ( velocidad * tiempo ) ;

Elconceptodeexpresión
• Unaexpresiónesuntrozodeltextodeunprogramaquedenotaunprocesodecálculoqueproduce
comoresultadounvalor..
• Elcálculoserállevadoacabodurantelaejecucióndelprograma.
• Elprocesodellevaracaboestecálculosedenominaevaluarlaexpresión
• Unaexpresiónsepuedeevaluarunnúmeroarbitrariodevecesdurantelaejecucióndeunprograma.
Cadavezpuedeproducirunvalordistintocomoresultado.
Elconceptodeexpresión. Tipo.
• Esdeseablequeeltipodelvalorproducidoseaelmismotodaslasvecesqueelcálculoselleveacabo
durantelaejecucióndelprograma(facilitalalegibilidadylafiabilidad).
• Enesoscasos,llamamostipodelaexpresiónaltipodelvalorproducido.
creadoOctober24,2011

página4.2/18

LP(11-12)4. Expresiones
Elconceptodeexpresión. Tipo.
• Enloslenguajesenconsideración(C/C++, Ada, Java, C#, python), todaexpresióndeunprograma
tieneuntipo.
• Enalgunoslenguajesinterpretados(Php,p.ej.),cadaevaluacióndeunaexpresiónpuedeproducirun
valordeuntipodistinto. Lasexpresionesnotienentipo.
EjemplodeexpresionessintipoenPHP
Java:
x = 2∗3+4 ;
float
//
’2∗3+4’ es una expresion de tipo entero
php:$x = ...
;
( $x > 0 )
if
$v = 45 ;
else$v = "hola"
//
;
echo $v
//
Elconceptoformaldeexpresión.
• Formalmente,unaexpresiónesunaaplicaciónqueasignaunvaloracadaestadodeejecuciónposible.
• Unestadodeejecuciónesunconjuntofinitodevariablesdistintas,cadaunaconalmenosunnombre,
untipo,yunvalordeltipo.
Elconceptodeexpresión: estadosdeejecución
Unejemplodeunestadodeejecucióneselsiguienteconjuntodedosvariables(cadaunaesunatupla).
Enprincipio,losnombresdedosvariablesdeunestadodeejecuciónnopuedencoincidir

;
’$v’ es una expresion de
tipo
’entero’ o ’cadena’

{ ( "x", integer, 1 ) , ( "peso", float, 67.8 ) }

creadoOctober24,2011

página4.3/18

LP(11-12)4. Expresiones
Elconceptoformaldeexpresión.
• Si edenotaunaexpresióndetipo Ty Sunestadodeejecución,entonces e(S)esunvalordetipo T
quecoincideconelresultadodeevaluar eenelestadodeejecución S.
• Normalmente,escribiremosdichovalorusandounafunciónllamadaeval,queasignaunvaloracada
expresiónyestadodeejecuciónposible:

e(S) = eval(e, S)

Fallosenlaevaluación:
• Notodaslasexpresionespuedenevaluarseentodoslosestadosdeejecuciónposibles.
• Formalmente: eldominiodecadaexpresiónposible(vistacomounaaplicación)seráunsubconjunto
detodoslosestadosdeejecuciónposibles.
Fallosenlaevaluación. Ejemplos.
• Supongamos que 4*x+2 es una expresión de tipo entero. En estas condiciones, el dominio de la
expresiónsontodoslosestadosdeejecuciónquecontienenalmenosunavariabledenombre xyde
tipoentero.
• Eldominiodelaexpresiónentera 5+8/xseráunsubconjuntodeldominiode 4*x+2, enconcreto,
solocontendráestadosdeejecuciónenloscualeslavariabledenombre xnocontengaelvalor 0.
Fallosenlaevaluación.
• Decimosquelaevaluacióndeunaexpresiónfallacuandotienelugarenunestadodeejecuciónque
no pertenece a su dominio. Si la evaluación de e falla en el estado S, entonces escribiremos que:
eval(e, S) = error.
• Aquí, errorseconsideraunvalorespecialdeltipo. Duranteunaejecuciónprograma,elvalorresultado
delaevaluaciónesindeterminado,ydichaejecucióndeberíaabortar,obiensedeberíadeproducir
unaexcepción.
Categoríasdeexpresiones.
• Enelrestodeestecapítuloexaminaremoslasdistintascategoríasdeexpresionesquepuedenaparecer
enloslenguajesdeprogramación.
• Noexistendiferenciasimportantesenlascategoríasdelasexpresiones,nienlasintaxisdelasmismas,
entreloslenguajesAlgol,Pascal,C/C++,Ada,JavayC#
creadoOctober24,2011
página4.4/18

LP(11-12)4. Expresiones
2 Literales
2.1 Literalestiposprimitivos
Literalesdetiposprimitivos
• Unliteralesunaexpresiónquedenotadirectamenteunvalordeuntipo
• Elresultadodeevaluarunliteralessiempreelvalorquedenota. Nodependedelestadodeejecución.
• Encualquierlenguaje,estetipodeexpresionessitieneuntipo.
Literalesdetiposprimitivos
• Enlapráctica,laevaluacióndeunliteralnoconllevacálculoalguno.
• Laevaluacióndeunliteralnopuedefallar,yaquepuedehacerseencualquierestadodeejecución.
• Losliteralesdetiposprimitivossonlasexpresionesmássencillasposibles.
Tipológico
Enlainmensamayoríadeloslenguajesqueincorporaneltipológico( {true, f alse}),existendosliterales
quedenotanlosdosvaloresdeltipo:
• truequedenotaelvalor true
• falsequedenotaelvalor f alse
Caracteres
• Normalmente,estosliteralesseescribenespecificandoelcarácterquedenotanentrecomillassimples.
Porejemplo,elcarácterconcódigoASCII48(eldígito0),sedenotacon ’0’
• TodosloslenguajesincorporanlaposibilidaddeescribirunodeestosliteralesusandoelcódigoASCII
oUnicodedelcarácterencuestión. (p.e.j. ’\60’o ’\x30’enC/C++,o ’\060’o ’\u0030’en
Javadenotantodoselcarácter ’0’).
Enumerados
• Enladefinicióndeuntipoenumerado,elprogramadorproporcionaunidentificadorparacadavalor
distintodeltipo.
• Esteidentificadorseconsideracomounliteraldeltipoenumerado
creadoOctober24,2011

página4.5/18

LP(11-12)4. Expresiones
Enteros
• Estosliteralesseescribennormalmentecomosecuenciasdedígitosconsecutivos,quecoincidenconla
expresiónenbase10delvalorquedenotan
• Suelenexistirmecanismosparaexpresarlosvaloresenbase8oenbase16
• EnAda,sepuedeescribir7_654_321enlugarde7654321(mejoralalegibilidad)
Enteros. Resolucióndeambigüedadeneltipo.
• Alosliteralesformadosporsecuenciasdedígitosselespuedeasignarmásdeuntipoentero,yaque
losintervalosdeenterosincluidosencadatiponosondisjuntos.
• Porejemplo,laexpresión34puedeser,enC/C++decualquieradelostiposenteros(char,short,int,
long,...)
Enteros. Resolucióndeambigüedadeneltipo.
• Enalgunoslenguajes(C/C++,Java,C#):

– Seleasociaeltipoquemenosbitsocupe(menorrangodevalores)yquecontengaalvalorentero
denotadoporelliteral.
– Sepuedenforzarotrasinterpretaciones(p.ej.,enC/C++34Lesdetipolong)
• Enotroslenguajes(Ada),seusaeltipoqueseesperasegúnelcontextodondeaparecelaexpresión
2.2 Literalesdetiposcompuestos(agregados)
Literalesdetiposcompuestos(agregados)
• Sonexpresionesquedenotandirectamenteunvalor(deuntipocompuestoorecursivo),yquesiempre
seevalúanadichovalor.
• Básicamentepuedenexistiragregadosdetiporegistroydetipoarray,aunqueloslenguajesfuncionales
suelencontemplardetiposrecursivos(listasyárboles).
• EnC/C++yJavasolosepermiteneninicializacionesdevariables,enAdayC#encualquierlugar

creadoOctober24,2011

página4.6/18

LP(11-12)4. Expresiones
AgregadoseninicializacionesenC/C++
main()
{
int c[3] = { 34, 56, 78 } ;
struct { int
.....
}
UsoerróneodeagregadosenC/C++
Esunejemploausenciadeuniformidadenellenguaje
main()
{

i, char c } s = { 12,

’A’ } ;

;

;

Integer

;

página4.7/18

// error!

int c[3]
;
i, char c } s ;
struct { int
c = { 34, 56, 78 } ;
// error!
’A’ } ;
s = { 12,

}
AgregadoseninicializacionesenAda
procedure Agregados is
is Array( 1..3 ) of
type matriz
type registro is record
i
;
Integer
:
;
c : Character
end record ;
m : matriz := ( 23, 45, 67 )
registro := ( 12,
r
:
’A’
)
begin....
end Agregados
AgregadoseninicializacionesenAda
procedure Agregados is
type matriz
...
is
creadoOctober24,2011

;

;

....

;

;

LP(11-12)4. Expresiones
type registro is
;
m : matriz
registro ;
r
:
begin
m := ( 23, 45, 67 )
r
;
)
:= ( 12,
’A’
end Agregados
;
Agregadosconetiquetas
EnAda,enlosagregadossepuedenespecificarlosnombresdeloscamposolosíndicesdeloselementos
procedure Agregados is
...
begin
i => 12, c => ’A’
r
:= (
)
;
r
;
i => 12 )
:= ( c => ’A’,
m := ( 1 => 23, 3 => 45, 2 => 45 )
m := ( 1 => 23, 2..3 => 45 )
end Agregados
AgregadosenJavayC#
En Java y C# no existen agregados de tipo registro o clase, pero sí de tipo Array. Pueden aparecer en
cualquiersitio:
// declaraciones con inicialización:
int[5] m = { 1, 2, 3, 4, 5 }
int []
m = { 1, 2, 3, 4, 5 } ;
m = new int [] { 1,2,3,4,5 } ;
int []
m = new int [] { 1,2,3,4,5 } ;
fun( new int [] {1,2,3,4,5} )

// en asignaciones:
// como parámetros:

;

;

;

;

creadoOctober24,2011

página4.8/18

LP(11-12)4. Expresiones
3 Accesosavariables.
Accesosavariables
Losaccesosavariablesson,engeneral,expresionesquedependenexplícitamentedelestadodeejecución,
esdecir,delosvaloresdelasvariablesexistentesenelmomentodelaevaluación. Haydevariostipos:
• Accesossimples
• Accesosaelementosdevariablescompuestas
• Accesosatravésdereferencias
• Combinaciones
Accesossimples
• La forma más simple de acceder a una variable es usar una expresión formada únicamente por el
nombredelavariable:
• Silavariablenoexisteenelestadodeejecuciónactual,laevaluaciónfalla. LoslenguajescomoAda,
Pascal,C/C++,JavayC#compruebanestoentiempodecompilación(yaquelasvar. tienenámbito
estático).
• Silavariableexiste,elresultadodelaevaluacióneselvaloractualdedichavariable.
Accesossimples
• En los lenguajes donde las variables tienen un único tipo, el tipo de la expresión es el tipo de la
variablenombrada
• Sienellenguajelasvariablesnotienenasignadounúnicotipo,laexpresióntampocotienetipo(poco
recomendable,bajalegibilidad).
• Esdeseableevitarevaluacionesfallidasentiempodeejecución,asíquemuchoslenguajescomprueban
  • Links de descarga
http://lwp-l.com/pdf10376

Comentarios de: Capítulo 4. Expresiones (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad