Está en la página 1de 14

UNIVERSIDADDEELSALVADOR FACULTADDEINGENIERAYARQUITECTURA ESCUELADEINGENIERAELCTRICA INTRODUCCINALAINFORMTICA

GUANo.5

ANSIC: PEQUEOPEROROBUSTO

Profesores:Ing.WalterZelayayCarlosPocasangre Instructores:DanielFloresyRalAlvarenga

GuaNo.5

UESCICLOI2011

1/14

Introduccin.
EllenguajeCesunodelosmsrpidosypotentesquehayhoyenda.Algunosdicenqueestdesfasadoyque elfuturoesJava.Nosesitendrfuturoperoestclaroquepresentesitiene.Nohaymsquedecirqueel sistemaoperativoLinuxestdesarrolladoenCensuprcticatotalidad.Asquecreoquenoslonoperdemos nada aprendindolo sino que ganamos mucho. Para empezar nos servir como base para aprender C++ e introducirnosenelmundodelaprogramacinWindows.SioptamosporLinuxexisteunabibliotecallamada gtk(olibrera,comoprefieras)quepermitedesarrollasaplicacionesestiloWindowsconC. NodebemosconfundirCconC++,quenosonlomismo.SepodradecirqueC++esunaextensindeC.Para empezarenC++convienetenerunaslidabasedeC.

Objetivos.
ConoceralgunosdetallesdelosorgenesdeCascomosuscaractersticasmasnotablesquelohaceuno deloslenguajesmspotentesyeficiente. Escribiralgunospequeosprogramasquepermitanevaluarloscomandosydirectivasnecesariasparala correctacompilacinyejecucindecdigos.

Referenciaterica. Caractersticasdellenguaje
ElCseencuentraenlajerarquadelenguajesenunnivelintermedioentrePascalyelEnsamblador.Pretende serunlenguajedealtonivelconlaversatilidaddelbajonivel. SedisejuntoconelsistemaoperativoUNIXyestmuyorientadoatrabajarensuentorno.Ensudesarrollo sesiguieronunaseriedelneasgeneralestalescomo: Elcompiladordebeserlomspequeoyeficienteposible.Pocaspalabrasreservadas,estoes,unconjunto reducidodesentencias.Noexisteanidamientodeprocedimientos. Laentrada/salidanoseconsiderapartedellenguajeens,sinoquesesuministraatravsdefuncionesde librera.Lamismapolticasesigueconcualquierotrotipocomplejodeinstrucciones. Paraescribirunprogramasedebepoderescribirpocotexto.Paralograrestosereduceelnmerodepalabras claves. Con ello se lleg a un compilador con un poderoso juego de instrucciones, que permite aumentar la productividad/dadelosprogramadores. A pesar deello el Ces un lenguajerpido de aprender, que deriva en compiladores sencillos de disear, robustos,yquegeneranobjetospequeosyeficientes.

GuaNo.5

UESCICLOI2011

2/14

UnadelascaractersticasmsapreciadasdeCessugranportabilidad,graciasaquedejaenmanosdelibreras lasfuncionesdependientesdelamquina,ytodoellosinrestringirelaccesoadichamquina! Estasyotrascaractersticaslohacenadecuadoparalaprogramacinenreastalescomo: programacindesistemas estructurasdedatosysistemasdebasesdedatos aplicacionescientficas softwaregrfico anlisisnumrico

En la siguiente tabla se muestra la sintaxis de algunas expresiones algebraicas, por supuesto que de igual importanciasonlasoperacioneslgicas,deasignacin,etc.,delascualestambindebemosconocersusintaxis.

OperacinenC Suma Resta Multiplicacin Divisin Mdulo

Operador aritmtico + * / %

ExpresinAlgebraica f+7 pc bm x/yo

ExpresinenC f+7 pc b*m x/y r%s

x oxy y

rmods

Nosedebeolvidarqueexisteunordendeprioridadessobrelasoperacionesaritmticas.Lasiguientetablalo muestra.

Operador(es) * / % +

Operacin(es) Multiplicacin Divisin Mdulo Suma


Resta

Orden de evaluacin (procedencia) Se evalan primero. Si hay muchas, se evalan de izquierda a derecha

Se evalan despus. Si hay muchas, se evalan de izquierda a derecha

GuaNo.5

UESCICLOI2011

3/14

AntecedentesHistricosdelC

EllenguajeCfueinventadoeimplementadoporprimeravezen1970enAT&TporDennisRitchieenunDEC PDP11usandoUnixcomoSistemaOperativo.Ceselresultadodeunprocesodedesarrollocomenzandocon unlenguajeanteriormentedenominadoBCPL,queaunhayquienlousaprincipalmenteenEuropa. PorquelnombredeC?PorlainfluenciaquetuvodellenguajeB,BCPLfuedesarrolladoporMartinRichards einfluenciadoporBinventadoenBellLabs.porKenThompson.Enlosaos70sellenguajeBllevoal desarrollodeC. LaversinoriginaldeCfuepopularizadaporellibroclsico"ElLenguajedeProgramacinC"porBrian KernighanyDennisRitchie.DurantemuchosaoselEstndardeCfuerealmentelaversinproporcionadacon laversin5delSistemaOperativoUnix.ConlapopularidaddelasMicrocomputadorassecrearonmuchas implementacionesdeC,peroenrealidad,comonoexistaningnestndaraparecieronmuchasdiscrepancias. ParaRemediarlasituacin,elInstitutodeEstndaresAmericano(ANSI)estableciuncomitaprincipiosdel veranode1983paracrearelestndarquedefinieradeunavezportodasallenguajeC.Ladefinicinresultante, elestndarANSIo"ANSIC"queseesperabafueraaprobadaafinesde1988. Lamayoradelascaractersticasdelestndaryaseencuentransoportadasporcompiladoresmodernos.Unode lospropsitosdelestndarfueasegurarquelamayoradelosprogramasexistentespudiesenpermanecervalidos o, al menos, que las computadoras pudieran producir mensajes de advertencia acerca de nuevos comportamientos. UnasegundacontribucinsignificativadelestndaresladefinicindeunabibliotecaqueacompaeaC,lacual especificafuncionesparateneraccesoalSistemaOperativo(porejemploleerarchivos,escribirenellosetc.) E/S con formato, asignacin de memoria, manipulacin de cadenas y otras actividades semejantes, una coleccindeheadersestndarproporcionanunaccesouniformealasdeclaracionesdefuncionesytiposde datos. Lamayorpartedelasbibliotecasestaestrechamentemodeladaconbaseenlabibliotecaestndardelsistema Unix.BCPLyBsonlenguajes"carentesdetipos".Encontraste,Cproporcionaunavariedaddetiposdedatos. Los tipos de datos fundamentales son caracteres, enteros y nmeros de punto flotante de varios tamaos. Adems existe una jerarqua de tipo de datos derivados, creados con apuntadores, arreglos, estructuras y uniones.Lasexpresionesseformanapartirdeoperadoresyoperandos,cualquierexpresin,incluyendouna asignacinounallamadaafuncin,puedeserunaproposicin.Losapuntadoresproporcionanunaaritmticade direccionesindependientedelamaquina. EllenguajeCproporcionalasconstruccionesfundamentalesdecontroldeflujoqueserequierenenprogramas bienestructurados:Agrupacindeproposiciones,tomadedecisiones(ifelse),seleccindeuncasoentreun conjuntodeellos(switch),iteracinconlacondicindeparoenlapartesuperior(while,for)oenlaparte inferior(do)yterminacinprematuradeciclos(break). DentrodeloscambiosdeC,hayunoderelevancia,enNewJerseyen1980,BjarneStroustropdesarrolloenBell Labs.aC++ollamadotambin"Cconclases",porloqueen1983secambioelnombreporeldeC++.Desde entonceshaexperimentado2revisionesdeimportancia,unaen1985yotraen1989.

GuaNo.5

UESCICLOI2011

4/14

ElpropsitodeC++esextenderaCparaproporcionarocultamientodeinformacinyunestilodeprogramacin quehaganfasisenlasclasesdeobjetos. LacompatibilidadconC,laeficienciaylaverificacinestrictaentiempodecompilacinfueronlasmetas principalesparaeldiseodeC++. LacompatibilidadconCpermitequeelcdigofuenteexistenteenCcontineutilizndose.Lamayoradelas implementacionesdeC++sonincluso"compatiblesenligado"conC,locualsignificaqueuncdigoenC++ compiladoporseparadopuedeligarseconacervosenCyaexistentes,sinnecesidadesdecompilardenuevolos acervos. Yasedestacolaeficiencia,porlacualnodebedehaberningnproblemaalusarC++enlugardeC. LasimilitudentreCyC++essinembargoengaosa,debidoaqueC++requiereunmtododeprogramacin nuevo,unnuevoparadigmallamado"OrientadoaObjetos"quedanuevosbeneficiosconelusodelasclasesy losobjetos. Stroustrup[1986]advierte:"MientrasmasseconoceaC,esmasdifcilevitarescribirenC++conestiloC,y perderahalgunosbeneficiospotencialesdeC++". Como podr comprobar, una de las razones que motivaron al desarrollo de C++ fue la de permitirle al programadormanejarprogramasdeunacomplejidadcadavezmascreciente. EsunhechoqueC++esun superconjunto deC;porloquelamayoradelosprogramasdeCsontambin implcitamenteprogramasdeC++,sinembargo,hayunacuantasdiferenciasmnimasentreANSICyC++que impidenquepocosprogramasdeCsepuedancompilarmedianteuncompiladorC*.cparaC++*.cpp.

Creandoprogramas
Comoencualquierotroentorno,crearunprogramabajoLINUXrequiereunaseriedepasosqueprobablemente seanyadesobraconocidosporelalumno:

Creacinyedicindelprogramaocdigofuente sobreunarchivodetexto,empleandoparaellouna herramientadenominadaeditor.EncasodeprogramarenlenguajeC,elconvenioesquedichoarchivo tengaextensin.c. Compilacin del cdigo fuente mediante otra herramienta denominada compilador, generndose un archivoobjeto,queenLINUXsueletenerextensin.o.Aveces,enlugardegenerarseelarchivo objeto directamente se genera un archivo intermedio en ensamblador (en UNIX tpicamente con extensin.s)queacontinuacinesnecesarioensamblarconunensambladorparaobtenerelarchivo objeto.Adems,enCexisteunaetapapreviaalacompilacinenlaqueelarchivofuentepasaporotra herramientadenominadapreprocesador. Enlazadodelarchivoobjetoconotrosarchivosobjetonecesarios,ascomoconlasbibliotecasquesea necesario para as obtener el archivo de programa ejecutable. Esta labor es llevada a cabo por un programadenominadoenlazador.
UESCICLOI2011 5/14

GuaNo.5

Finalmenteelprogramapuedeejecutarsetalcualoencasodesernecesariopuedeserdepuradoconuna herramienta denominada depurador o debugger. Si se detectan problemas, ser necesario editar el programafuenteycorregirlosfallos,reinicindoseelciclodedesarrollohastaobtenerunprogramasin errores.

Elprocesoanteriorquedailustradoenelsiguientediagrama:

EnunsistemaLinuxcomoelempleadoenellaboratorio,lasherramientasclsicasencargadasdecadaetapason lassiguientes:

Editor:existegranvariedaddeellos,siendolosmspopularesemacs,kwriteyvi.Enellaboratoriose recomiendaelusodeleditorkwrite. Preprocesador,compilador,ensambladoryenlazador:estasherramientaspuedenencontrarsedeforma individual,peroenunsistemaLinuxtpicamenteencontramoslaherramientagcc(elcompiladordeC de la y arquitectura de computadores, C++ de GNU, gcc), que se encarga de llamarlas segn se necesiten. Encualquier caso, yaunque por logeneral no las utilizaremos de forma individual, las herramientasson:

Preprocesador:cpp Compilador:gcc Ensamblador:as Enlazador:ld

Depurador:eldepuradorporexcelenciaenelentornoLinux(yenUNIXengeneral)esgdb.

GuaNo.5

UESCICLOI2011

6/14

Edicindelarchivofuente
Sinosvalemosdeleditorgedit,laformadeeditarelprogramaser: user@host>>geditprograma.c EleditorviesmuchomspotenteyrpidoqueloseditorestpicosdeMSDOSoWindows,comoelBlocde Notasoeledit,ascomodeotroseditoresdeentornodeventanas,comogedit.Sinembargo,elusodevial principiopuedeserunpocofrustrante,porloquesielalumnonoconoceelmanejodeestaherramientaes recomendableseguireltutorialenlosapndicesdelaprctica. Unaopcinmuyrecomendadaesaadirkate(ykonsole,enunentornognome),conestopuedetener unavisualizacinmuyampliaparaprogramadores,puesahseincluyetantoeleditordetextocomouna ventana de la terminal para compilar, enlazar y generar el archivo ejecutable del programa. El inconvenienteeslagrancantidadderecursosdememoriaqueconsumeestaaplicacin.

rea de edicin de texto

terminal

GuaNo.5

UESCICLOI2011

7/14

Compilacinyenlazado
Elprogramagcceselencargadodecompilar,enlazarygenerarelarchivoejecutableapartirdelarchivofuente. Laformamssencilladeinvocarloes: user@host>>gccprograma.c Estaordenpreprocesa,compila,ensamblayenlaza,generandoelarchivodesalidaejecutablea.out.Tpicamente noqueremosqueestoseaas,porloqueemplearemoslaopcin o paraestablecerelnombredelarchivo generado: user@host>>gccprograma.coprograma Paraejecutarelprogramaesnecesarioinvocarlodelaformasiguiente: user@host>>./programa Esnecesario elempleodel ./ antesdelnombredeprogramaparaindicarlealintrpretede rdenesqueel programaresideeneldirectorioactualdetrabajo(.),yaqueencasodenoespecificarlo,slosebuscarael programaenaquellosdirectoriosdelsistemaespecificadosenlavariabledeentornoPATH. user@host>>echo%PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games Sinembargo,elprogramagcc esmuyflexibleysoportaungrancantidaddeopcionesquelepermiten,por ejemplo,detenersetrasundeterminadopasodelproceso(porejemplo,delacompilacin)oaceptarvarios archivosdeentradainclusodediferentestipos(fuente,objetooenensamblador),siendocapazdeprocesarcada unodeellosdelamaneraadecuadaparagenerarelarchivodesalidaqueselepide. Porejemplo,lasiguienteordencompilaelarchivo programa.c yelobjetoresultanteloenlazaconelobjeto funciones.o,dandocomoresultadoelprogramadenombreprograma: user@host>>gccprograma.cfunciones.ooprograma Lasiguienteordencompilalosarchivosfuenteindicados,generandolosarchivosobjetodecadaunodeellos peronocontinaconelenlazadoygeneracindelejecutablefinal: user@host>>gcccprograma.cfunciones.c

GuaNo.5

UESCICLOI2011

8/14

Acontinuacinsemuestraunresumendelasopcionesmsfrecuentesconlasquesesueleinvocargcc: E S c onombre g(s) Wall pedantic On Dmacro[=valor] Idirectorio Ldirectorio lbiblioteca static Parartraselpreprocesado. Parartraselcompilado(noensamblar) Pararantesdeenlazar Especificarelnombredelarchivodesalida Incluir(eliminar)informacindedepuracin Mostrartodosloswarnings ComprobarqueelprogramaesCestndar Optimizacin,desden=0(ninguna)an=3(mxima) Definirunmacro(#define)ysuvalor(1siseomite) Incluireldirectorioalbuscararchivos.h Incluireldirectorioalbuscarbibliotecas Usarlabibliotecabiblioteca Enlazarbibliotecasestticamente

GuaNo.5

UESCICLOI2011

9/14

Procedimiento
Creeunarchivocongeditynmbrelosuma.c.Unaformadehacerloesescribiendoenlalneadecomandos: user@host>>geditsuma.c& Cuandoustedhagaestoseabrirelprogramagedit,endondepodrverelnumerodelnea,diferentescoloresde textoparacomentarios,directivaseinstrucciones,etc.Escribaelsiguientecdigofijndosecuidadosamente: /*suma.c;Programadesuma*/ #include<stdio.h> /*lafuncinmaininicialaejecucindelprograma*/ intmain() { intentero1;/*primernmerointroducidoporelusuario*/ intentero2;/*segundonmerointroducidoporelusuario*/ intsuma;/*variableenlacualsealmacenalasuma*/ printf("Introduzcaelprimerentero\n");/*indicador*/ scanf("%d",&entero1);/*leeunentero*/ printf("Introduzcaelsegundoentero\n");/*indicador*/ scanf("%d",&entero2);/*leeunentero*/ suma=entero1+entero2;/*asignaeltotalasuma*/ printf("Lasumaes%d\n\n",suma);/*imprimelasuma*/ return0;/*indicaqueelprogramaterminconxito*/ }/*findelafuncinmain*/

GuaNo.5

UESCICLOI2011

10/14

Unavezterminadoprocedaautilizarlalneadecomandodelasiguientemanera: user@host>>gccsuma.cosuma Enlasiguientecapturadepantallapodemosvercomoapareceunnuevoarchivoconelmismonombrede archivofuenteperosinlaextensinc.Estearchivoyasidocompilado,ensambladoyestalistoparaejecutarse.

Acontinuacinpodemosejecutarelprograma,empleando ./ antesdelnombredeprogramaparaindicarleal intrpretederdenesqueelprogramaresideeneldirectorioactualdetrabajo.

GuaNo.5

UESCICLOI2011

11/14

Siguiendolosmismospasos,escribaelsiguientecdigo,yluegocompileyejecute.Losresultadospodrverlos enlamismaconsola. /*promedio.c;Programaparaobtenerelpromediodecalificacionesdeuna clasemedianteunarepeticincontroladaporcontador*/ #include<stdio.h> /*lafuncinmaininicialaejecucindelprograma*/ intmain() { intcontador; /*nmerodelacalificacinsiguiente*/ intcalificacion; /*valordelacalificacin*/ inttotal; /*sumadelascalificacionesintroducidasporelusuario*/ intpromedio; /*promediodelascalificaciones*/ /*fasedeinicializacin*/ total=0; /*inicializatotal*/ contador=1; /*fasedeproceso*/ while(contador<=10){ /*repite10veceselciclo*/ /*inicializaelcontadordelciclo*/

printf("Introduzcalacalificacion%d:",contador); /*indicadorparalaentrada*/ scanf("%d",&calificacion); total=total+calificacion; contador=contador+1; }/*findewhile*/ /*fasedeterminacin*/ promedio=total/10; /*leelacalificacindelusuario*/ /*sumalacalificacinaltotal*/ /*incrementaelcontador*/

/*divisinentera*/

printf("\n\tElpromediodelaclasees%d\n\n",promedio); /*despliegaelresultado*/ return0;/*indicaqueelprogramaterminconxito*/ }/*findelafuncinmain*/

user@host>>gccopromediopromedio.c user@host>>./promedio

GuaNo.5

UESCICLOI2011

12/14

Enesteotrocdigo,conelcualsepuedecalcularlasolucinaunaecuacincuadrticaparacualquierclasede coeficientes. /*cuadratica.ccalcularracesdeunaecuacindesegundogrado*/ #include<stdio.h> #include<stdlib.h> #include<math.h> intmain() { doublea,b,c; doubled; doublere,im; printf("Coeficientesa,bycdelaecuacion:");scanf("%lf,%lf,%lf,",&a,&b,&c); printf("\n"); if(a==0&&b==0) printf("Laecuacionesdegenerada\n"); else if(a==0) printf("Launicaraizes:%.3lf\n",c/b); else { re=b/(2*a); d=b*b4*a*c; im=sqrt(fabs(d))/(2*a); if(d>=0) { printf("Raicesreales\n"); printf("%0.3lf,%0.3lf\n",re+im,reim); } else { printf("Raicescomplejas\n"); printf("%.3lf+%.3lfi\n",re,fabs(im)); printf("%.3lf%.3lfi\n",re,fabs(im)); } } return0; }//findelMAIN

user@host>>gcclmocuadraticacuadratica.c user@host>>./cuadratica

GuaNo.5

UESCICLOI2011

13/14

Asignacin.
1. PorsedicequeCesunlenguajedenivelintermedio? 2. Describaalmenos3librerasylasfuncionesincluidasenellenguajeC. 3. Aquserefierelaexpresinprogramacinorientadoaobjeto? 4. Investigar las siguientes instrucciones y/o directivas del lenguaje de programacin C, explicar los parmetrosquesepuedenusar,yhaceralmenosdosejemplos:

printf scanf if for fprintf do

case switch include while getch void

5. Escribaunasolucinparaencontrarlosprimeros50nmerosprimos.Queimprimalalistaenpantalla enumerndoloscadauno.Noolvidequesuprogramatengaelmenoscdigoposible,puesesoesserun programadoreficiente:maximizarecursosyreducecostos. -Escribaelalgoritmonarrado. -Useunagrficarepresentacindediagramasdecajasyflujograma. -EscribaelcdigoenC. -Imprimirtodaslaspantallasresultantes 6. Escribaunprogramaqueintroduzca5nmerosydigacualdeellosesalmayorycualeselmenor;esto sedebedesplegarunpantallayescribirloenunarchivo.

GuaNo.5

UESCICLOI2011

14/14

También podría gustarte