mayo 8, lunes...agenda para esta clase repaso y árboles de expresión del trabajo #2 máquinas de...

67
Mayo 8, Lunes

Upload: others

Post on 27-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Mayo8,Lunes

Page 2: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

RepasoClaseAnterior� Glosario� Tareas

Prof. Esp. Ing. José María Sola 189

Page 3: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Agendaparaestaclase� Repasoyárbolesdeexpresióndeltrabajo#2� MáquinasdeEstadoII–Implementación�  Implementación#2�  Strings,Arrays,Punteros,PreyPosIncremento� Trabajo#3–RemoverComentarios

Prof. Esp. Ing. José María Sola 190

Page 4: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Repaso�  Token�  Lexema�  TiposdeToken

�  Identificadores�  LiteralesCarácter�  LiteralesCadena

�  IfversusSwitch�  MáquinasdeEstado

�  Implementación#1�  Estadoscomovariableentera�  Transicionescomoselecciónestructuradayactualizacióndevariable

�  Implementación#1varianteif�  Implementación#1varianteswitch

�  Construirárbolesdeexpresionesde�  nl = nw = nc = 0 �  c == ' ' || c == '\n' || c = '\t'

Prof. Esp. Ing. José María Sola 191

Page 5: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 6: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Prof. Esp. Ing. José María Sola 193

Page 7: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

�  Algoritmodelaimplementación#1para“máquinadeMealy”�  Mientrashayacaracteres�  SeleccionarEstado�  SeleccionarCarácter�  Accionar�  ActualizarEstado

�  ¿Cuáleslaabstracciónaplicada?�  Abstraccióndedatos�  Abstraccióndelcontroldeflujo

�  Implementación#1�  Estadocomovariableentera�  Transicionescomoselección

estructuradayactualizacióndevariable

�  ¿Conquéestructuradecontroldeflujolaimplementaría?¿Conifoconswitch?¿Porqué?

� EficienciadeIfydeSwtich�  Secuenciadecomparaciones

�  Tabladesalto�  Implementación#1conif�  Implementación#1conswitch

Implementación#1–EstadoscomovariableenterayTransicionescomoselecciónestructuradayactualizacióndevariable

Prof. Esp. Ing. José María Sola 194

Page 8: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

while ((c = getchar()) != EOF) if (state == OUT ) if (c == '\n'){ ++nl, ++nc; state = OUT; } else if (c==' ' || c=='\t'){ ++nc; state = OUT; } else { ++nw, ++nc; state = IN; } else /* IN */ if (c == '\n'){ ++nl, ++nc; state = OUT; } else if (c==' ' || c=='\t'){ ++nc; state = OUT; } else { ++nc; state = IN; } printf("%d %d %d\n", nl, nw, nc); return 0;

while ((c = getchar()) != EOF) switch(state){ case OUT: switch(c){ case '\n': ++nc, ++nl; state = OUT; break; case ' ' : case '\t': ++nc; state = OUT; break; default: ++nc; state = IN; } break; default:/* IN */ switch(c){ case '\n': ++nc, ++nl; state = OUT; break; case ' ' : case '\t': ++nc; state = OUT; break; default: ++nc; state = IN; } } printf("%d %d %d\n", nl, nw, nc); return 0;

Implementación#1–IfversusSwitch

Page 9: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

MásImplementaciones�  Implementación#1

�  Estadoscomovariableenum�  Transicionescomoselecciónestructuradayactualizacióndevariable

�  Implementación#2�  Estadoscomoetiquetas�  Transicionescomoselecciónestructuradaysaltosincondicionales

�  Implementación#3�  Estadoscomofuncionesrecursivas�  Transicionescomoselecciónestructuradaeinvocaciones

�  Implementación#4�  Estadocomovariableentera�  Transicionescomotabla

�  Matrizdepares�  Arreglodearreglodeestructurasdedoscampos

�  Implementación#5�  Estadoscomofuncionesyvariablepunteroafunciónactual�  Transicionescomoselecciónestructurada,actualizacióndevariableeinvocaciones

�  Implementación#6�  Estadoscomovariableenum�  TransicionescomofunciónGetNextState(s,c)yDoAction(s)óDoAction(s,c)

�  Otras…Prof. Esp. Ing. José María Sola 196

Page 10: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

int main(void){ int nl, nw, nc;

nl = nw = nc = 0; goto Out;

Out: switch( getchar() ){ case '\n': ++nl, ++nc; goto Out; case ' ' : case '\t': ++nc; goto Out; case EOF: goto End; default: ++nw, ++nc; goto In; }

In: switch( getchar() ){ case '\n': ++nl, ++nc; goto Out; case ' ' : case '\t': ++nc; goto Out; case EOF: goto End; default: ++nc; goto In; }

End: printf("%d %d %d\n", nl, nw, nc); return 0;

}

Implementación#2–EstadoscomoeFquetasytransicionescomosaltos

Page 11: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

EjerciciosdeK&RqueseresuelvenconMáquinasdeEstado�  1-12.Escribaunprogramaqueimprimasuentradadeaunapalabraporlínea

�  1-9.Escribaunprogramaquecopiesuentradaensusalida,remplazandocadasecuenciadeunoomásblancosporunsoloblanco� DiseñarconmáquinadeMealy� DiseñarconmáquinadeMoore

�  1-23.EscribaunprogramaqueremuevatodosloscomentariosdeunprogramaC.Noseolvidedetratarcorrectamentelascadenasyloscaracteresliterales.LoscomentariosenCnoseanidan.

Prof. Esp. Ing. José María Sola 198

Page 12: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

https://josemariasola.github.io/ssl/papers/ArraysPointersPrePosIncrement.pdf

Prof. Esp. Ing. José María Sola 199

Page 13: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Removercomentarios

Prof. Esp. Ing. José María Sola 200

Page 14: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Trabajo#3–Removercomentarios[K&R1988]1-23�  Basadoenejercicio1-23[K&R1988]:

"EscribaunprogramaqueremuevatodosloscomentariosdeunprogramaC.LoscomentariosenCnoseanidan.Noseolvidedetratarcorrectamentelascadenasyloscaracteresliterales"

�  Alcance�  Máquinadeestadohíbridaopura:MealyyMoore

�  Diagramadeestados�  Formalización�  IndicarseccionesMealyyseccionesMoore

�  Dosimplementaciones,descriptas.NingunapuedeserlaImplementación#1:estadocomovariableytransicionesconselecciónestructurada.

�  Siesaplicable,utilizarenum�  Switch

�  Productos�  Diagramademáquinadeestados�  Diagramadetransicionesparaunautómatafinitodecadalenguaje�  Expresiónregularparacadalenguaje�  Implementación1�  Implementación2�  Bechmark�  Makefile

Prof. Esp. Ing. José María Sola 201

Page 15: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Términosdelaclase#DefinircadatérminoconlabibliograTa�  Repaso

�  Token�  Lexema�  Identificadores�  LiteralesCarácter�  LiteralesCadena�  IfversusSwitch�  Implementación#1demáquinadeestado�  ÁrboldeExpresión

�  ImplementacionesdeMáquinasdeEstado�  Implementación#2

�  Estadoscomoetiquetas�  Transicionescomosaltosincondicionales

�  Sentenciaetiquetada�  Sentenciadesalto�  Sentenciagoto�  Implementación#1

�  Estadoscomovariableentera�  Transicionescomoselecciónestructuradayactualización

devariable�  Implementación#2

�  Estadoscomoetiquetas�  Transicionescomoselecciónestructuradaysaltos

incondicionales�  IntroducciónaImplementación#3

�  Estadoscomofuncionesrecursivas�  Transicionescomoselecciónestructuradaeinvocaciones

�  IntroducciónaImplementación#4

�  Estadocomovariableentera�  Transicionescomotabla

�  Matrizdepares�  Arreglodearreglodeestructurasdedoscampos

�  IntroducciónaImplementación#5�  Estadoscomofuncionesyvariablepunteroafunción

actual�  Transicionescomoselecciónestructurada,actualización

devariableeinvocaciones�  IntroducciónaImplementación#6

�  Estadoscomovariableenum�  TransicionescomofunciónGetNextState(s,c)y

DoAction(s)óDoAction(s,c)�  Strings,Arrays,Punteros,PreyPostIncremento

�  Representacióndestrings�  Repasodeefectodeladodeunaexpresión�  Repasodevalordeunaexpresión�  Valordelpreincremento�  Valordelpostincremento�  Valordeunaarreglo:direccióndememoriadelprimer

elemento�  Aritméticadepunteros�  Incrementodepuntero

�  Trabajo#3–RemovedordeComentarios�  Repasodesecuenciadeescapeencaracteresycadenas�  Comentariosdemúltipleslíneas�  Comentariosdeunalínea

08

Prof. Esp. Ing. José María Sola 202

Page 16: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Tareasparalapróximaclase1.  Comenzaradiseñarlamáquinadeestadosque

remuevecomentarios.

Prof. Esp. Ing. José María Sola 203

Page 17: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 18: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 19: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Mayo15,Lunes

Page 20: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

RepasoClaseAnterior� Glosario� Tareas

Prof. Esp. Ing. José María Sola 207

Page 21: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Agendaparaestaclase� ArreglosyExpresiones�  IntroducciónaCadenas� VariablesExternas� Recursividad�  ImplementaciónRecursivadeMáquinadeEstado� Tokens

Prof. Esp. Ing. José María Sola 208

Page 22: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

K&R1.6Arreglos

Page 23: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Contardígitos,blancosyotros(1de5)� Programaquecuentelacantidaddeocurrenciasdecadadígito,blanco(espacio,tab,nuevalínea),ytodootrocarácter

�  Salida�  dígitos=9300000001,whitespace=123,other=345

�  12categoríasenentrada;aplicarabstraccióndedatos:�  notros�  nblancos�  ndigitos(i)

�  Nodiezvariables�  Implementación:Arreglodeenteros�  Estructuradelprograma

�  Inicialización�  Clasificacióndelaentrada�  Salida.

Prof. Esp. Ing. José María Sola 210

Page 24: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

#include <stdio.h> int main(void){ int c, i, nwhite, nother; int ndigit[10]; /* Inicialización */ nwhite = nother = 0; for ( i = 0; i < 10; ++i ) ndigit[i] = 0;

�  "Ladeclaraciónsigueeluso"�  BaseyOffset�  Operaciónsubindicación

�  Binaria�  Tipos

�  Asociatividad�  ID�  DI

�  Idiompararecorrerarreglo.

Contardígitos,blancosyotros(2de5)

Page 25: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

/* Clasificación de la entrada */ while ( (c = getchar()) != EOF ) if ( c >= '0' && c <= '9' ) ++ndigit[ c - '0' ]; else if(c==' ' || c=='\n' || c=='\t') ++nwhite; else ++nother;

�  '1'versus1�  Adyacentes�  Subíndice:entero�  Carácterliteralesunenterotipoint

�  PrecedenciadeOperadores

�  Cortocircuito(short-circuit)yordendeevaluación�  x&&y

�  ifxthenyelsefalse�  x||y

�  ifxthentrueelsey�  EstilodeMultiway-if.

Contardígitos,blancosyotros(3de3)

Page 26: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

c >= '0' && c <= '9' c==' ' || c=='\n' || c=='\t'

�  Expresión�  Operador�  Operando�  Valor�  Tipo�  Efectodelado�  Ordendeevaluacióndelosoperandos

�  Precedenciadeejecucióndelasopraciones

�  Asociatividad(agrupacion)

�  ExpresiónPrimaria

ÁrboldeExpresiones

Page 27: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Contardígitos,blancosyotros(5de5) /* Salida */ printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); return 0; }

Page 28: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Ejercicios�  1-13.Escribirunprogramaparaimprimirelhistogramadelalongituddelaslíneas(palabras)ensuentrada.Máscomplejo,orientaciónvertical

�  1-14.Escribirunprogramaparaimprimirelhistogramadelasfrecuenciasdelosdiferentescaracteresensuentrada.

Prof. Esp. Ing. José María Sola 215

Page 29: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

K&R1.9Cadenas

Page 30: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

CadenasenANSIC�  ¿EnPascal?�  ¿EnTurboPascal?�  ¿EnC++?�  ¿EnSmalltalk?�  ¿EnANSIC?

�  ¿EnelLenguaje?�  ¿EnlaBiblioteca?�  Representación

Prof. Esp. Ing. José María Sola 218

Page 31: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

¿PorquéCnoFeneelFpoString?�  ¿Notienestrings?�  Losarreglosnoson"firstclasscitizens"� Eltamañodelarreglonoespartedeltipo

�  Contrastar�  Pascal�  Java/C#�  C++�  Smalltalk

� Nohayunarepresentacióndirectaenlosregistros,nohayoperacionesenLenguajeMáquinaparamanejarstrings

Prof. Esp. Ing. José María Sola 219

Page 32: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

ArreglosdeCaracteres� Ejemplo:Programaqueimprimelalíneamáslarga� Pseudocódigo:

Mientrashayamáslíneas: Siesmáslargaquelaanterior: GuardaresalíneaysulongitudImprimirlalíneamáslarga

� DiseñoTop-Down� Obtenerunalíneadelaentrada�  Guardarunalínea

�  Funciones�  GetLine�  Copy.

Prof. Esp. Ing. José María Sola 220

Page 33: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

�  Datos�  Flujo

�  Resultados�  ¿LíneaoCadena?�  ¿Flujo?�  ¿Longitud?�  ¿Éxito?

�  Funciónmatemática�  GetLine:�  Flujo→�  Flujo×Cadena×B×N

�  ¿‘\n’?�  Parámetrosinout�  ¿Máximo?

�  Unmismoresultadoparaseñalizardossituacionesdiferentes.Similaragetchar

�  PrototipoANSICint getline( char line[], int maxline);.

Obtenerunalíneadelaentrada

Prof. Esp. Ing. José María Sola 221

Page 34: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Copiarunacadena� Datos

�  Cadena� Resultados

�  Cadena�  Funciónmatemática

�  Copiar:Cadena→Cadena/Copiar(x)=x� Parámetrosinout� Precondiciones� PrototipoANSIC

void copy(char to[], char from[]);

Prof. Esp. Ing. José María Sola 222

Page 35: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

#include <stdio.h> /* maximum input line length */ const int MAXLINE=1000; /* Verbos */ int getline(char line[], int maxline); void copy(char to[], char from[]); int main(void){ int len; /*current line length */ int max; /*maximum length seen so far*/ /* Sustantivos */ char line[MAXLINE]; /*current line*/ char longest[MAXLINE];/*saves longest*/

� Verbosparafunciones

�  Sustantivosparavariables

� ComunicaciónGetLine–Main

� Almacenamiento(storage)paraarreglos

Imprimelalíneamáslarga

Page 36: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

max = 0; while((len=getline(line,MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /*there was a line*/ printf("%s", longest); } .

� Copyesvoid,procedimientosdePascal

� %sesperaString�  Literal"abc\n"�  |a|b|c|\n|\0|�  ¿Líneademasiadolarga?�  GetLine�  Copy�  ReescribirMain.

Imprimelalíneamáslarga(cont.)

Page 37: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

/* getline: read a line into s, return length */ int getline(char s[], int lim){ int c, i; for(i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i ) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; }

�  ¿Precondiciones?�  ¿Poscondiciones?� Valorretornadoparaseñalizarevento(EOF)yvaloresposiblesdei

�  ¿Próximalectura?�  ¿Quéocurreconlíneasmayoresalim?

� CerrarcadenaconEOS('\o').

Imprimelalíneamáslarga(cont.)

Page 38: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

/* copy: copy 'from' into 'to'; assume 'to' is big enough */ void copy(char to[], char from[]){ int i; i = 0; while( (to[i] = from[i]) != '\0' ) ++i; }

�  ¿Precondiciones?�  ¿Poscondiciones?�  Seusaporsuefecto,noporsuvalor.Entoncesvoid

� Precedencia� Valordelaasignación

� Casolímite� CerrarcadenaconEOS('\o').

Imprimelalíneamáslarga(cont.)

Page 39: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Ejercicios�  1-16.Reviselafunciónmaindelprograma“líneamáslarga”paraqueimprimacorrectamentelalongituddelíneasarbitrariamentelargas,yparaqueimprimalamayorcantidaddetextoposibleparaesalínea

�  1-17.Escribaunprogramaqueimprimalaslíneasmayoresa80

�  1-18.Escribaunprogramaquesaquelosblancosdelfinaldecadalíneayeliminelaslíneasenblanco

�  1-19.Escribaunafunciónreverse(s)queinviertelacadenas.Úseloenunprogramaqueinviertasuentradadealíneas.

Prof. Esp. Ing. José María Sola 227

Page 40: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 41: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

K&R1.10VariablesExternasyAlcanceÚltimapartedeIntroducciónaANSIC

Page 42: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Sub-bloque

Función/Bloque

Unidaddetraducción

Programa

�  Programa�  ¿Quéesunprograma?

�  ConjuntodeUnidadesdeTraducción(UT,archivosfuente.c)

�  VinculaciónentretodaslasUT�  oentresoloalgunasUT�  oentrealgunasfuncionesde

algunasUT�  UT

�  Alcance"entretodaslasfunciones�  ovinculaciónentresoloalgunas

funciones�  Función

�  Alcanceenelbloquedelcuerpoqueladefine

�  SubBloque�  Alcanceenelsubloque.

AlcanceyVinculación

Prof. Esp. Ing. José María Sola 230

Page 43: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

VariablesAutomáticas VariablesExternas�  VariableAutomática:

privadaolocal�  Sololafuncióntieneaccesodirecto�  ¿Parámetros?

�  Sonvariablesautomáticas�  ¿Porquéautomáticas?

�  Reservayliberacióndeformaautomática�  Pushdeargumentos�  Popenparámetros

�  Comienzanalinvocarlafunción�  Desaparecenalterminar�  Noretienenvalorentre

invocaciones�  Sininicialización⇒Basura

�  MismoNombre⇏MismoObjeto�  Variableidegetlineydecopy

�  Definidasexternasatodafunción:PúblicasoGlobales

�  Accesodirecto,pornombre,desde"todas"lasfuncionesdelaunidaddetraducción�  Antesdeusarunnombredevariable,debeestar

declarado�  CompararconelbloquemásexternodePascal

�  Alternativaalistadeargumentosparacomunicaciónentrefunciones

�  DefiniciónyDeclaración�  Definidaunasolavez,deformaexterna⇒

Reservadememoria�  Declaradas(tipodedato)encadafunciónquela

usa�  DeformaExplícitaconkeywordextern�  DeformaImplícitaporcontextoyorden

�  Vinculadasconotras�  ElLinkerconectalasvariables�  ¿Entreotrasunidadesdetraducciónoenuna

mismaunidaddetraducción?�  Sonvariablesestáticas

�  Permanentes⇒Retienenelvalor�  Inicializaciónencero.

VariablesAutomáFcasversusVariablesExternas

Page 44: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

�  Duración(Duration)�  Estática

�  Eterna�  Keyordstatic

�  Automática�  Parámetros�  Bloque�  Keyordauto

�  "Alocada"�  Funcionesestándar

�  malloc�  calloc�  realloc�  free

�  Alcance(Scope)�  Desdeladeclaración

�  EnUT�  Enfunción�  Enbloque

�  Retencióndevalorentreinvocaciones�  Variabledeclaradadentrodela

función,conlakeywordstatic�  Alcance:bloque�  Duración:estática

�  Vinculación(Linkage)�  Funcionesyvariables

�  EntrevariasUT�  VinculaciónExterna

�  DentrodeUT�  VinculaciónInterna

�  Sinvinculación�  struct,enum,typedef,label

Duración,AlcanceyVinculaciónLifeFme,ScopeyLink

Prof. Esp. Ing. José María Sola 232

Page 45: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

#include <stdio.h> #define MAXLINE 1000 /* maximum input line size */ /*Analizar semántica*/ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void);

� Declaracionesexternasdevariables� Prototipos,yaseusaroncomodeclaracionesexternas,puedenhacerseprivadosalasUTconpalabrareservadastatic

� Definicióndevariablesydefunciones.

Ejemplo–VersiónespecializadadeImprimirlalíneamáslarga(1de5)

Page 46: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

int main(void){ int len; /* Analizar semántica */ extern int max; extern char longest[]; …

Ejemplo–VersiónespecializadadeImprimirlalíneamáslarga(2de5)

Declaración

Definición

�  Declaraciónexterna�  Fueradecualquierfunción

�  Declaraciónconextern�  usaexterndelante�  Esopcionalsiexistedefiniciónprevia�  Declaracionesconexternenheader(.h)

�  ParavincularentreUT�  Convenciónyrazóndelnombre

�  Puedeserunadeclaraciónexternaointerna�  Puedeserdefinición.

DeclExterna

DeclInterna

Page 47: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Ejemplo–VersiónespecializadadeImprimirlalíneamáslarga(3de5) /* Uso de externas y de automáticas */ max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; }

Page 48: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Ejemplo–VersiónespecializadadeImprimirlalíneamáslarga(4de5)int getline(void){ int c, i; extern char line[]; /*Analizar semántica*/

for( i=0; i < MAXLINE – 1 && (c=getchar())!=EOF && c!='\n'; ++i ) line[i] = c;

if (c == '\n') { line[i] = c; ++i; }

line[i] = '\0'; return i;

}

Page 49: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Ejemplo–VersiónespecializadadeImprimirlalíneamáslarga(5de5)void copy(void){

int i; /*Analizar semántica*/ extern char line[], longest[];

i = 0; while ((longest[i] = line[i]) != '\0') ++i;

}

Page 50: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

#include <stdio.h> #define MAXLINE 1000 int max; char line[MAXLINE]; char longest[MAXLINE]; int getline(void); void copy(void); int main(void){ int len; extern int max; extern char longest[]; max = 0;

while ((len = getline()) > 0) if (len > max) { max = len; copy(); }

if (max > 0) printf("%s", longest);

return 0;

}

int getline(void){ int c, i; extern char line[];

for( i=0; i < MAXLINE – 1 && (c=getchar())!=EOF && c!='\n'; ++i ) line[i] = c;

if (c == '\n') { line[i] = c; ++i; }

line[i] = '\0'; return i;

} void copy(void){

int i; extern char line[], longest[];

i = 0; while((longest[i]=line[i])!='\0') ++i;

}

IdenFficardeclaraciones,definiciones,variablesautomáFcasyvariablesexternas

Page 51: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

�  Puedensermodificadasaccidentalmente�  Definiralfinalydeclararsoloenlasfuncionesquelasdebenusar

�  UnprogramaCpuedeestarcompuestoporvariosóUT:escribirmóduloschicos

�  Similaresalosatributosdeinstanciaodeclase�  Accesiblesportodoslosmétodosdeesaclase

�  EnestecasolaclaseesanálogaalaUT

�  Lasvariablesexternassiempreestándisponibles�  Ventajas

�  Disponibilidad�  Listadeargumentosmáscortas�  Simplificacomunicación�  Objetosúnicos:stdin,CPU

�  Desventajas�  Acoplamientonoobvio�  Bugs�  Mantenimiento

�  Enestecasoperdemoslaoportunidaddecreardosfuncionesgenéricas:getlineycopy�  ANSIprovee:fgetsystrcpy.

UFlizacióndevariablesexternas

Prof. Esp. Ing. José María Sola 239

Page 52: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Recursividad

Prof. Esp. Ing. José María Sola 240

Page 53: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

¿QuéeslaRecursividad?�  Esladefinicióndeunprocesobasadoensupropiadefinición

�  Eslarepeticióndeítemsdeunamaneraautosimilar

�  Alternativaalaiteración�  Definicionesdefuncionesdemanerarecursiva

�  "Paraentenderrecursividad,unodebeentenderrecursividad"

�  GNU

Prof. Esp. Ing. José María Sola 241

Page 54: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 55: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

def factorial(n): r = 1 for i in range(1,n+1): r *= i return r

Ejemplo–Factorial

def factorial(n): if n = 0: return 1 return factorial(n-1)*n

Page 56: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

QuickSortdef qsort (arr): less = [] pivotList = [] more = [] if len(arr) <= 1: return arr else: pivot = arr[0] for i in arr: if i < pivot: less.append(i) elif i > pivot: more.append(i) else: pivotList.append(i) less = qsort (less) more = qsort (more) return less + pivotList + more

qsort [] = [] qsort (x:xs) = qsort [y|y<-xs, y<x] ++ [x] ++ qsort [y|y<-xs, y>=x]

Page 57: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Tiposderecursividad� Directa� Múltiple� Tail(Final)�  Indirecta

Prof. Esp. Ing. José María Sola 245

Page 58: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Tiposdedatosrecursivos data List a = Nil | Cons a (List a) data Tree a = Leaf a | Branch [Tree a]

Page 59: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

void printd(int n){ if (n < 0) { putchar('-'); n = -n; } if (n / 10) printd(n / 10); putchar(n%10 + '0'); }

void qsort(int v[], int left, int right){ int i, last; void swap(int v[], int i, int j); if (left >= right) return; /* do nothing if fewer than two elements */ /* move partition elem to v[0] */ swap(v, left, (left + right)/2); last = left; /* partition */ for (i = left + 1; i <= right; i++) if (v[i] < v[left]) swap(v, ++last, i); swap(v, left, last); /*restore partition elem*/ qsort(v, left, last-1); qsort(v, last+1, right); } void swap(int v[], int i, int j){ int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; }

Recursividad–Pros&Cons

Page 60: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Ejercicio� Ejercicio4-12.Versiónrecursivadereverse(s).

Prof. Esp. Ing. José María Sola 248

Page 61: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 62: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Prof. Esp. Ing. José María Sola 251

Page 63: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

�  CategoríasLéxicasóTokens�  Identificadores�  Palabrasreservadas�  Literales

�  Enteros�  Reales�  Caracteres�  Cadenas

�  Operadoresypuntuación�  Otros

�  ¿Cuántoshay?

Categorías

Prof. Esp. Ing. José María Sola 252

�  LeerK&R1988�  A.1�  A.2

�  LeerMUCH2012�  V1s3.6.2.

Page 64: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Términosdelaclase#DefinircadatérminoconlabibliograTa�  ArreglosyExpresiones

�  Baseyoffsetdearreglos�  Declaracióndearreglos�  Declaraciónsiguealusoenlaexpresión�  Operaciónsubindicacióndearreglo�  AsociatividadIDyDI�  Precedenciadeoperadores�  Cortocircuitoyordendeevaluación�  MultiwayMultiway-if�  Idiompararecorrerarreglo

�  IntroducciónaStrings(Cadenas)�  Representaciónenmemoria�  Carácternulo�  Stringliteral

�  VariablesExternas�  ¿Quéesunprograma?�  UnidaddeTraducción(UT)�  VinculaciónentrevariasUT�  AlcancedentrodeunaUT�  VinculaciónentrediferentesUT�  Bloque�  Sub-bloque�  Variableautomática�  Variableexterna�  Variableestática�  Vínculoentrevariables

�  Declaracióndevariables�  Definicióndevariables�  AlcanceóAlcanceLéxico�  Duracióndeltiempodevidaolifetime�  Estática�  Automática�  "Alocada"�  DeclaraciónExterna�  Declaraciónconextern�  DeclaraciónversusDefinción�  Stackdeinvoación�  Incializacióndeestáticas�  Ocultamientodeinformación�  Staticparaencapsular�  PosincrmentoóIncremento(sufijo)�  PredecrementoóDecremento(prefijo)�  Aplicacióndevariablesexternas.�  Variable

�  Recursividad�  ImplementaciónRecursivadeMáquinadeEstado�  Tokens

09

Prof. Esp. Ing. José María Sola 253

Page 65: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y

Tareasparalapróximaclase1.  Comenzaradiseñarlamáquinadeestadosque

remuevecomentarios.

Prof. Esp. Ing. José María Sola 254

Page 66: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y
Page 67: Mayo 8, Lunes...Agenda para esta clase Repaso y árboles de expresión del trabajo #2 Máquinas de Estado II – Implementación Implementación #2 Strings, Arrays, Punteros, Pre y