Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca...

29
Marzo 26, Lunes

Transcript of Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca...

Page 1: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Marzo26,Lunes

Page 2: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Agendaparaestaclase�  IntroducciónalLenguajedeProgramaciónC�  Intervalo�  “ElLenguajedeProgramaciónC”aka“ElLibroBlanco”aka“K&R”

�  ElProcesodeCompilación,versiónsimplificada�  Otrasversionesdehello.c�  ElPreprocesador�  Sintaxis,Semántica,yPragmática�  AnálisisySíntesisdeHello.c

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

Page 3: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter
Page 4: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

�  LPdepropósitogeneral,noestáespecializado

�  Economíaenlasexpresiones,peroexpresivo�  Pocotexto,muchainformación�  Variabilidadentexto,variabilidad

ensignificado.�  Controldeflujo(¿dequé?)�  Estructurasdedatos�  Grancantidaddeoperadores�  Flexible�  Noesdemuyaltonivel(¿dequé?)�  Noesgrande(¿enquésentido?)�  Sufaltaderestriccionesysu

generalidadlohacenefectivo�  Independientedemáquina,portable

(procesadorysistemaoperativo)�  EllenguajedeprogramacióndeUnix

�  Primerlenguajedealtoniveleficienteyportable�  Enelmomento,menos

problemasque�  Basic,PL/I,Fotran,Cobol,Pascal

�  ComparadoconLisp�  Vinculación�  Másrápdo�  ConGC,locualnoesapropiado

paraprogramacióndesistemas�  Ceslamejorasbtracciónde

unacomputadoraexistente,nodeundispositivoimaginario

�  Suficientesestructurasdecontrolydedatospararesolverproblemas,limitadasparaquesepuedaimplementarelcompilador.

Descripcióngeneral

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

Page 5: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

FrasessobreC� CnoesunLPgrande,ynolequedabienunlibrogrande(K&R)

� Ctienevueltas,falenciasyunenormeéxito(Ritchie)� Cesunarmafilosa,conlasepuedenhacerprogramaseficientesyelegantesouna“carnicería”(Pike)

� CmejoraamedidaqueunoganaexperienciaconC(K&R)(Curvadeaprendizajeempinada).

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

Page 6: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

�  1969-1973�  Elaboración.BasadoenB,

asuvez,basadoenBCPL�  CPreestandarización

�  1978�  K&R1eraedición

�  1983�  Comienza

estandarización�  1988

�  K&R2daedición�  1989-90

�  C89–C90(1eraversiónestándar)

�  1999�  C99(2daversión

estándar)�  2011

�  C11(3eraversiónestándar)

�  OtrosLP�  C++�  Objective-C�  C#�  D�  Java

HistoriadeCyLPrelacionados

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

Page 7: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter
Page 8: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

K&R1.1UnaIntroducciónTipoTutorial–Empezando

Page 9: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

“ElLenguajedeProgramaciónC”aka“ElLibroBlanco”aka“K&R”

�  Autores:�  DennisRitchieautordelLPy

coautordeUnixconKenThompson

�  Kernighan�  Requisitos

�  Conocimientodeprogramación�  Lecturaatenta

�  Ejercicios�  Edicionesyusos

�  19781eraEdición�  Manualdereferencia

�  19882daEdición�  ANSIC

�  Preliminares(FrontMatter)�  Prefacio�  Prefaciodelaprimeraedición�  Introducción

�  General,“Ancho”�  Capítulo1:Tutorial

�  En“profundidad”:Capítulos2a7�  2Tipos,OperadoresyExpresiones�  3ControldeFlujo�  4FuncionesyEstructurade

Programa�  5PunterosyArreglos�  6Estructuras�  7EntradaySalida

�  EjemploIntegrador�  8InterfazdeSistemadeUNIX–

entrada/salida,sistemadearchivosyalocacióndememoria

�  “Apéndices”�  A:EspecificacióndelLP:

Semántica(LN)ySintaxis(BNF)�  B:Bibliotecaestándar�  C:Cambiosintroducidosenla

primeraversióndelestándar.

Page 10: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

"Hello,World!"–DemostracióndeCompilaciónyEjecución#include <stdio.h> main( ) { printf("Hello, World!\n"); } > cc hello.c > hello.exe Hello, World!

Page 11: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Ejercicios�  1-1.Experimentarconeliminacióndepartesycompilar�  1-2.Probardiferentes\c.

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

Page 12: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

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

Page 13: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

DiferenciasconEstándarC(yconC++)main( ){ puts("Pre Ansi"); }

#include <stdio.h> int main(void){ puts("Post Ansi"); return 0; }

#include <stdio.h> #include <stdlib.h> int main(void){ puts("Post Ansi"); return EXIT_SUCCESS; }

#include <iostream> int main() { std::cout << "ANSI C++\n"; }

#include <stdio.h> int main(void){ puts("Post Ansi"); }

Page 14: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter
Page 15: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

HelloWorld/* Hello World * JMS * 20150402 */ #include <stdio.h> int main(void){ printf("Hello, World!\n"); }

Page 16: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Tiempos� Tiempodediseño� Tiempodetraducción(compilación)

1.  TiempodePreprocesamiento2.  TiempodeCompilación3.  TiempodeVinculación

� Tiempodeejecución� Comparaciones

�  ContrastarconMáquinaVirtualyBytecode�  ConstrastarconLenguajesInterpretados

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

Page 17: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

ElProcesodeCompilación,VersiónSimplificada

Compilador LinkerHello.c

(código fuente)

Hello(ejecuta-

ble)

Hello(objeto)

#include

Biblioteca Standard

stdio.h(encabe-

zado standard)

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

Page 18: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

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

Page 19: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

#include <_____.h> return/*entre*/0; return0; return 0;

�  Incluirarchivos,directiva#include� Reemplazarcomentarios.

DosFuncionesBásicasdelPreprocesador

Page 20: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

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

Page 21: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

#include <stdio.h> main( ) { printf( "Hello, World!\n" ); }

Otrasversiones–¿MismasSintaxis,SemánWca,yPragmáWca?

#include <stdio.h>

main( ){

printf( "Hello," );

printf( " World!" );

printf( "\n" );

}

#include <stdio.h>

main( ){

printf( "Hello,"

"World!"

"\n" );

}

#include <stdio.h>

main( ){

puts( "Hello, World!" );

}

Page 22: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

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

Page 23: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Defineunafunciónllamadamainquenorecibevaloresargumento.Lassentenciasdemainseencierranentrellaves

Incluyeinformaciónacercadelabibliotecaestándar#include <stdio.h> main( ) { printf("Hello, World!\n"); }

Análisisde‘Hello,World!’

�  Estructuradeunprograma�  vs.Pascal

�  Linealvs.Jerárquico

�  Roldemain�  Preprocesador�  Bibliotecaestándar:

Entrada/Salida�  vsFramework

�  Roldellaves{}�  Funciónprintf�  Pasajede

argumentosafunciones

�  Constantesdecadenaoliteralcadena

�  Secuenciadeescape�  Puntoycomacomo

terminador�  vs.Pascal

�  Analizarquees“palabra”delLPyqueno

�  Identificadores:mainyprintf--¿Cuáleselautómatafinitoquelosreconoce?

mainllamaalafuncióndebibliotecaestándarprintfparaimprimiresasecuenciadecaracteres.\nrepresentaelcarácternueva-linea

Page 24: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

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

Page 25: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

ProgramaGeneral hello.c

�  Unprogramaesunasecuenciadefunciones.Formageneral:main fg…

�  FormageneraldeunafunciónTipoNombre(Parámetros){Cuerpo}

�  Cuandosecorre(ejecuta)unprograma,porconvención,maineslaprimerafuncióninvocadaporelambientedeejecución(e.g.,sistemaoperativo).Todoprogramadebetenerunmainconosinparámetros

�  Esteprogramadefinesololafunciónmain

�  Comotodafunción,mainpuedeteneronoparámetros

�  Estemaininvocaaprintfconunacadenaliteral(cadenaconstante)comoargumento."Entrecomillas".

Generalizacióndehello.c

Page 26: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Términosdelaclase#Definircadatérminoconlabibliograaa�  IntroducciónalLenguajede

ProgramaciónC�  Niveldeabstracción�  IndependientedeMáquina�  Controldeflujodeejecución�  HistoriadeCydeANSIC�  RelaciónentreCyC++�  ANSIC,C89óC90�  C99�  C11

�  K&RCapítulo#1�  “ElLenguajedeProgramaciónC”

aka“ElLibroBlanco”aka“K&R”�  OtrasversionesdeHello.c

�  Tipointimplícito�  Valorretornadopormain�  Concatenacióndecadenas�  Múltiplesinvocaciones�  puts�  EXIT_FAILURE�  stdlib.h

�  ProcesodeCompilación,VersiónSimplificada�  Fuente�  Compilador�  Ejecutabe�  Comentariosmínimosenarchivos

fuente�  Tiempodediseño�  Tiempodetraducción�  TiempodePreprocesamiento�  TiempodeCompilación�  TiempodeVinculación(linker)�  Bibliotecaestándar�  Tiempodeejecución�  ContrasteconFramework�  Funcióndelcompilador�  Vinculador(Linker)�  ContrasteconMáquinavirtual�  Bytecode

�  Preprocesador�  #include�  Tratamientodecomentariospor

partedelpreprocesador�  Sintaxis,Semántica,yPragmática

�  Sintaxis�  Semánctica�  Pragmática

�  AnálisisySíntesisdehello.c�  main�  printf�  Funcióndel#include�  puts

�  Secuenciadeescape�  TerminadordesentenciadeC�  SeparadordesentenciasdePascal�  Archivo.h(Encabezado)�  Stringliteral:CadenaLiteral,o

Literaldecadena,oConstantecadena,oCadenaconstante

�  LenguajeEnsamblador�  Stack�  EstructuralinealdeunprogramaC�  Estructurajerárquicadeun

programaPascal

02

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

Page 27: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter

Tareasparalapróximaclase1.  EntregaTrabajo#02.  Leerde[K&R1988]desde1.2VariablesyExpresiones

Aritméticashasta1.4ConstantesSimbólicasinclusive.

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

Page 28: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter
Page 29: Marzo 26, Lunes · 4 Funciones y Estructura de Programa ... main llama a la función de biblioteca estándar printf para imprimir esa secuencia de caracteres. \n representa el carácter