Programação para Engenharias

Embed Size (px)

Citation preview

Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g 1Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g NOTASDOAUTORA apostila busca esclarecer de forma direta para alunos dos cursos de engenharia sobre aimportnciadaprogramaonoexercciodaprofisso.Geralmente,osalunosquandoestocursandoadisciplinadeprogramaonoseucursodeengenharianoconsegueterumavisogeraldecomoutilizlaemuitasvezesprefereutilizarumplanilhaeletrnica.UmsoftwaredeplanilhaeletrnicacomooMicrosoftExcel,oantigoLotus123,Gnumeric,CalcdoBrOfficeeoutros.Aimportncianaaprendizagemdeumalinguagemdeprogramainfluinomomentoemque o aluno necessita realizar o clculo de um mtodo numrico, por exemplo, mtodo numrico de NewtonRaphson. Alguns mtodos numricos so capazes de serem realizados em planilhas eletrnicas, mas de formabastantemanual.Aslinguagensdeprogramaovemenvolvendocadavezmaisomundotecnolgico.Java,PHP,MySQL,C#,Delphi,Ruby,C,Pythonemuitasoutrasestopresentesemnossoscomputadores,telefonescelulares,TVdigitais,automveiseetc.Oengenheirodomundoatualnecessitaentenderpelomenosdeumaformabsicasobreprogramaoetiposdelinguagens,damesmaformaquenecessitafalartrslinguas.AapostilabuscafacilitarousodalinguagemdeprogramaoCparaaplicaesemengenhariaeassimoestudantedaroprimeiropasso.Damesmaformaqueestematerialdisponibilizadodeformagratuita,seespera o interesse por parte de outros estudantes, professores e profissionais para colaborar com a expanso domesmo.Voudeixardebl,bl,bleesperoquegostem!RafaeldeC.Fariaswww.engemec.com2Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g NDICE1INTRODUO........................................................................................................................................... 41.1Programaoparaengenharias?........................................................................................................ 41.2GPL,livre,gratuito,aberto,customizao,trabalhocolaborativo................................................. 41.3Porqueequaissoftwaresutilizar........................................................................................................ 42PREPARANDOOCOMPUTADOREESCOLHENDOALINGUAGEM........................................... 62.1Configurandoocompilador................................................................................................................ 62.2AlinguagemdeprogramaoC......................................................................................................... 73PRIMEIROSPASSOSPARAAPROGRAMAOEMC................................................................... 83.1EstruturadeumprogramaemCeo1programa....................................................................... 83.2As4operaesbsicasdamatemtica............................................................................................... 103.3Entendendoasfunestrigonomtricas............................................................................................ 114DIMENSIONAMENTODEISOLAMENTOTRMICOEMLINHADEVAPOR........................... 144.1Introduo............................................................................................................................................. 144.2Caractersticasdoproblema............................................................................................................... 144.3Baseterica........................................................................................................................................... 144.4Cdigofontecomentadopassoapasso.............................................................................................. 155PROJETODEUMTROCADORDECALORDOTIPOCASCOETUBOS(GUALEO)......... 225.1Introduo............................................................................................................................................. 225.2Caractersticasdoproblema............................................................................................................... 225.3Baseterica........................................................................................................................................... 235.4Cdigofontecomentadopassoapasso.............................................................................................. 266PROJETODEVIGABIAPOIADA......................................................................................................... 356.1Introduo............................................................................................................................................. 356.2Caractersticasdoproblema............................................................................................................... 356.3Baseterica........................................................................................................................................... 356.4Cdigofontecomentadopassoapasso.............................................................................................. 367PROJETODEVASOSDEPRESSO...................................................................................................... 427.1Introduo............................................................................................................................................. 427.2Caractersticasdoproblema............................................................................................................... 427.3Baseterica........................................................................................................................................... 427.4Cdigofontecomentadopassoapasso.............................................................................................. 44REFERNCIAS................................................................................................................................................ 49APNDICEAFontesdeinformaoparainstalaodoUbuntu............................................................. 50APNDICEBCdigosfontedosprogramasabordados........................................................................... 513Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g 1INTRODUO1.1ProgramaoparaEngenharias?OensinodaprogramaoparaoscursosdeEngenhariaso,atualmente,falhosemsuamaioriadasvezes.EmmuitasUniversidadecomoaUFCUniversidadeFederaldoCear,asdisciplinasvoltadasparaareadaprogramaoseencontramcomdificuldadesparaseremlecionadas.Asdificuldadesmaisinsistentesso:afaltadelaboratrioscomumaestruturaparatalatividade,trocaconstantedeprofessores,materialdidticovoltadoparaaEngenhariaeacontinuidadedoensinocomutilizaodaprogramaoaolongodocurso.Existem outras dificuldades, como a falta de informao sobre softwares livres que podem serutilizadosseminfringirleisdedireitosautoraisecombaixocusto.Autilizaodesoftwaresproprietriodeformailegal no pas como o sistema operacional Windows, ferramentas de escritrio Microsoft Office, desenhostcnicoscomooAutoCAD eatmesmoparaaprogramaoemcertaslinguagenscomousodossoftwares daBorlandsoumarealidadeinfeliz.Esse trabalho tem comoobjetivoservirdematerial didtico, sepossvel,para osestudantesdeEngenhariaquequeiramaprenderprogramaocomexemplosprticosutilizandosoftwareslivres,eassimconhecerasvantagensdeumtrabalhocolaborativo.Umainformaoquevalesersalientadanessemomento,quetodoocontedo deste trabalho ser disponibilizado para as pessoas que tiverem interesse em aprender um pouco deprogramaoesuautilizaonareadeEngenharia.Omotivodarealizaodestetrabalhodevidodificuldadejmencionadanaaprendizagemdaprogramao computacional nos cursos de Engenharia, e uma forma de contribuio e agradecimento com acomunidadeacadmicaeasociedadecomoumtodo.1.2GPL,livre,gratuito,aberto,customizao,trabalhocolaborativoO trabalho realizado utilizou um SO (Sistema Operacional) totalmente livre e gratuito sob alicenaGPL(GenericPublicLicense),asferramentasabordadasparaodesenvolvimentodesoftwarestambmestosobamesmalicena.demonstradoque,atualmente,nspodemosutilizarossoftwareslivresemnossasatividadesmais comuns e na aprendizagem da programao para Engenharia. Todo este trabalho foi escrito com o uso desoftwareslivres.Valeressaltarnestemomentosobreostermoslivre,abertoegrtis.Otermolivreindicaquetodospodem usar de forma gratuita, geralmente, mas no necessariamente. O termo aberto indica a possibilidade decustomizarmos a ferramenta que estamos utilizando. O termo grtis o mais claro para todos, usado por umdeterminado perodo ou por tempo indeterminado de acordo com a verso escolhida. Quando mencionado ostermosabertoelivre,issoindicaqueestamostrabalhandocomferramentasgratuitasemsuamaioriadasvezesecomapossibilidadedemodificarmoserepassarasmelhoriasrealizadasparaasoutraspessoasnamesmaforma.Todasasferramentasqueseroabordadaspodemseradquiridasdeformalegaleserousadasparabeneficiaroutraspessoasquepoderocolaborarcomessetrabalho,comotrabalhocolaborativo.1.3PorqueequaissoftwaresutilizarO primeiro passo, se deve com a instalao de um SO (Sistema Operacional) livre, aberto egratuito.ParaSO,aescolhaadotadaoUbuntunasuaverso7.10.EleumaboaopoporserLiveCD(SOquerodam diretamente do CD) que pode ser instalado no computador ou no. O Ubuntu 7.10 alm de ser bastantedifundido e de fcil acesso, tem outras vantagens como a sua facilidade de manuseio, ferramentas embarcadas,utilitrios,aplicativosediversosoutrossoftwaresdeusocomumprontosparauso.O Ubuntu 7.10 apresenta por padro o Open Office para escritrio (editor de texto, planilhaeletrnica,bancodedados,apresentadorecriadordeslideseetc.),nareamultimdiacomooTotem(reprodutordeudioevdeo),naediodeimagenscomoGimpediversosoutrossoftwares.AformadeinstalaodeprogramasextremamentefcilerapidamenteumusurioiniciantenomundoLinux/GNUaprender.OnomeLinuxoriginadoecriadoporLinusTorvalds.JasiglaGNUdevidoaoprojetoGNU.OprojetoGNUfoiiniciadoporRichardStallmancomoobjetivodecriarumsistemaoperacionaltotalmentelivre.AsiglaGNUfoiescolhidapelofatodeserumacrnimorecursivodeGNUisNotUnixqueemportugussignifica:GNUnoUnix.QuandoumadistribuioserefereaLinux/GNU,naverdadeelabaseadaebemparecidacomosistemaoperacionalUnix,masno.OUbuntu7.10umadistribuioderivadadoLinux/GNU.utilizadooLinuxcomoSOporseroprpriokernel(ncleoeSO)eossoftwaresGNUqueseintegramcomoLinux,formandooUbuntu7.10.Vejacomoocorreaintegrao:4Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g Linux(kernel)+GNU(softwares)=Ubuntu7.10OquedifereasdistribuiesLinux/GNUsoossoftwaresintegradosedistribudoscomela,poisoLinux(kernel)omesmoparatodaselasbasicamente.Freqentemente,okernelsofreatualizaeseporissoelesediferemuitopoucoentreasdistribuies.AgoraqueestexplicadodaformamaisbsicapossvelsobreaescolhadoSOadequadoparaarealizaodesteprojeto,importantemencionarumpoucosobreosprogramasqueforamutilizadosnarealizaodestetrabalho.interessanteutilizarumeditordetextobastantesimpleschamadoGeditoqualfoiutilizadoparaaelaboraodostextosdosprogramas(rotinas,funes,frmulas,comentrioseetc).OGeditfcildeserutilizadoelembrabastanteoBlocodeNotasdoSOMicrosoftWindows.Adiferenaqueno Gedit quandosesalvaoarquivocomocdigofonte,eleautomaticamentemodificaacordotextoparaqueasfunes,comentrioseoutroselementosdotextosejamdiferenciadas.O compilador utilizado e recomendado o GCC. Compilador a ferramenta responsvel paratransformar o texto que foi escrito na linguagem de programao escolhida no arquivo executvel do programadesejado.Oarquivoexecutvelgeradopelocompiladorexatamenteoprogramaouprogramasdesenvolvidos.Comum editor de texto e um compilador, todos so capazes de escrever seus prprios programas e executlosnormalmente.NestetrabalhonoabordadaainstalaodoSOLinux/GNU,masnoApndiceA,seencontramalguns endereos eletrnicos bastante interessantes para se iniciar no mundo Linux/GNU. Alguns termos maistcnicos so abordados nos prximos captulos, e a explicao de cada termo ser apresentada da forma maisdetalhadapossvel. importante ressaltar uma ltima observao sobre software livre, o termo livre se difere nosentidodegratuito,masgeralmenteelessogratuitoseoscriadoresdeprogramaslivresganhamcomosuporteparaclientesqueapresentemdificuldadesemseuuso.Otermogratuitonotemsignificadolivreouaberto,elesserefereautilizaogratuitadeumadeterminadaversooudeterminadoperodo.Jotermoabertonosereferealivreenemgratuito,esimapossibilidadedeseadquirirocdigofontedoprograma.5Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g 2PREPARANDOOCOMPUTADOREESCOLHENDOALINGUAGEM2.1ConfigurandoocompiladorQuandoseescrevealgumprograma,deveseusarcomumeditordetexto(nocasooGedit)eemseguida salvlo, para que ele seja transformado no programa. O programa exatamente o nosso cdigofontefuncional.Aferramentaresponsvelemtransformarasaesetarefasqueseescrevenoeditordetextoparaaformadeprogramaocompilador.OGCC(GNUCompilerCollection)ocompiladorgratuito,livreeabertoqueserapresentadonestaliteraturaparatransformaroscdigosfonteparaaformadeprograma.AversoatualmenteinstaladapeloUbuntu7.10a4.1.3.Elebemsimplesdeserutilizadoeatendetodasasnecessidadesdosprogramasapresentados.NomenuAplicaes>Acessrios>Terminal, abrir uma janela chamada TERMINALque setratadalinhadecomandodoLinux.possveltervriasjanelasdeterminalabertas,masolimitemximoso64terminaisaproximadamente.Paraainstalaodenovosprogramas,oterminalaindaamelhorsoluodoqueasferramentasassistidasdoUbuntu7.10eoutrasdistribuiesLinux/GNU.DuranteainstalaodoUbuntu7.10,criadaacontadeumusurioparaacesslo.Esseusurioqueprovavelmentetemonomedocriadorouseuapelidonoumsupersurio.Osuperusuriooadministradorde tudo no SO, ele responsvel por todas as configuraes, instalaes, remoes e outros. A senha deve serdeterminadaaoseiniciaraprimeiravezoSO,dessaformapossvelutilizaroTERMINALparaexecutarastarefasdeinstalaodoGCCeoutrasqueseroapresentadasnestetrabalho.Paraalterarasenhadosuperusurio(onomeverdadeiroROOT)bastaseguiraseqnciademenu:Sistema>Administrao>UsurioseGrupos.necessrioescolheroROOTealterarasuasenhaparaseterpermissesprivilegiadasquandonecessrias.AlteradaasenhadoROOT,imprescindvelaverificaodaversodoGCCinstaladaeissorealizadocomocomando:gccversionNoterminaldeexecuo,essecomandodeveseapresentardaseguinteforma:nome@mquina:~$gccversionNolocaldonomeousurioativonoexatomomento,enolugardemquinaonomedamquinaquefoidefinidaduranteainstalaodoSOnocomputador.Nocasoacima,ousuriodocomputadorestapresentadocomousuriopadrodoSO.ParaexecutaromesmocomandocomoROOTsedevedigitar:nome@mquina:~$suLogoemseguida,sersolicitadaasenhadoROOTealinhadecomando(linhaqueesperaocomandodousurioativo)seapresentarnaforma:root@mquina:/home/usurio#IssoinformaqueousuriodoSOnaquelemomentooROOT(administrador)equeseencontranapastadousurioqueiniciouoSO.OROOTtambmtemsuapastaqueseencontranaraizdosistemadearquivos.Vejaqueocifrofoisubstitudopelo#.Assimtodososcomandosqueseroapresentadosapartirdeagoraequepossuemosmbolo#,estsubtendidoqueousurioativooROOT.Quandoosmboloforo$,entononecessrioooperadordamquinaestarativocomousurioROOT.Para um melhor entendimento dos conceitos do Linux/GNU e a manipulao de usurios, necessrioleroApndiceAqueapresentadiversosendereoseletrnicossobreLinux/GNU.Com a abertura do terminal como ROOT, interessante a instalao do pacote essencial doGCCparaosclculosmatemticoseprogramaoavanada.Ocomandoquedeveserdigitadonoterminalo:#aptgetinstallbuildessentialEssecomandofarcomqueseucomputadorentreemcontatocomosservidoresresponsveispelaatualizao e instalao remota do SO, e assim, esse pacote ser instalado no computador. Provavelmente sernecessrioaconfirmaoparaainstalaodopacoteeparaissobastaquesejarespondidoSIM.importantelembrarqueocomputadordeveestarconectadocomainternetparaqueainstalao6Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g dopacotesejarealizadacomsucesso.SeocomputadornopossuidisponvelumaconexocomaInternet,entonecessriaainstalaodopacoteemquestoapartirdosDVDsdadistribuioDebianLinux/GNU.OUbuntuuma distribuio baseada no Debian, ento no sero apresentados problemas de incompatibilidade. Mas essainstalaoapartirdosDVDsdoDebiannoserdiscutidanestetrabalho.2.2AlinguagemdeprogramaoCnecessriomencionarsobreanecessidadedacriaodaslinguagensdeprogramaoeaescolhadalinguagemquefoiabordadaaolongodestetrabalho. Aslinguagensdeprogramaosurgiramparafacilitaracomunicao dos softwares com os hardwares das mquinas. Pois a linguagem de mquina se reduz a umaquantidadeenormede0e1quechamadadelinguagembinria.Essalinguagembinriaacompreendidapelosprocessadores.Quandosedesenvolveumprogramaparaasomade2nmerosporexemplo,naverdade,cadavalorassumirumaquantidadede0e1emumadeterminadaordemeaoperaodesomaeoresultadosoapresentadosdamesmaforma.Existem diversas linguagens de programao e compiladores para cada uma delas. Algumaslinguagensdeprogramaoapresentamsimilaridadesentresi,mastodastmumadeterminadacaractersticanasuautilizaoeescolha.Existemlinguagensespecficasparaclculoscientficos,outrasquetrabalhamdiretamentecomaInternet,combancodedadoseetc.A linguagem abordada neste trabalho a C. Ela uma linguagem bem simples e de fcilentendimento.AlinguagemCfoicriadaporDennisRitchienaAT&TBellLabscomointuitodedesenvolveroSOUnixparaserutilizadoemservidores.AlinguagemseespalhouporoutrossistemascomooWindows,Linux,Unix (atualmente Solaris), BSD e outros. Por ser uma linguagem portvel, ela pode ser utilizada em diferentesplataformas.OCfoidesenvolvidobaseadonoSOUnixporvoltade1969e1973,masaproximadamente10anosapsasuacriao,apresentavaumacertaausnciadepadronizaonoscompiladores.Osprogramaseramescritoscomdiversasferramentasquenemtodososcompiladoresconseguiamentender.Parasolucionaressaproblema,aANSI(Instituto NacionalAmericano dePadronizao), implantouumanorma paraa linguagemC. Assim, oscompiladores desenvolvidos atualmente buscam atender todos os programas desenvolvidos com base no padroANSIC.Os programas que sero apresentados nesse trabalho podem ser compilados em Linux/GNU,Microsoft Windows ou em qualquer outro SO, desde que o compilador atenda o padro ANSI C. Em muitasEmpresaseUniversidadesosoftwarelivrenodominante,masexistemcompiladoresgratuitosdelinguagemCparaSOproprietrios.7Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g 3PRIMEIROSPASSOSPARAPROGRAMAOEMC3.1EstruturadeumprogramaemCeo1programaUm programa escrito em qualquer linguagem de programao segue uma ordem lgica na suacriao.AdivisoexistentenoscdigosfontenagrandemaioriadaslinguagensseguecomoCABEALHOeDESENVOLVIMENTO.O CABEALHO composto pelas bibliotecas. As bibliotecas so arquivos que contm asexplicaesefuncionalidadesdasfunesquesoempregadasnocdigofonte.Asomade2nmeros,oclculodocosseno de um determinado ngulo, constantes como o so exemplos de elementos que no necessria aexplicaodecomofuncionam.Ouseja,noseprecisacriarofuncionamentodefunescomoascitadas,poiselasjsodescritasnopadroANSIC.Asbibliotecascitadas,nosprogramasabordadosnestetrabalhoso:stdio.h,stdlib.hemath.h.ElaspossuemumsignificadoespecficocomoStandartInput/Outputparastdio.h,StandartLibraryparastdlib.heMathematic para math.h. Elas possuem as informaes necessrias para a execuo de todos os problemasabordados. A biblioteca do padro ANSI C possui 15 arquivos de bibliotecas, j alguns compiladores possuembibliotecascomfunesbastantesinteressantes,masessenoofocodestetrabalho.Umoutrodetalheinteressante que a linguagem no padro ANSI C apresenta um vocabulrio de 32 palavraschaves, logo, de fcilaprendizagem.Vejaumprogramabastantesimplesquenofazabsolutamentenada:#include |#include | Parte 1#include |//--------------------------- | Parte 2main () |{ |printf ("Nao faz nada!\n"); | Parte 3return 0; |} |FIGURA3.1.1Simplescdigofontecomdivisesexplicativas.O cdigofonte foi dividido em 3 partes. A primeira se refere aos arquivos de bibliotecadeclarados.Quandoseinsere#includeeonomedabibliotecaentreossinaisdemaioremenor,automaticamenteocompiladorirpegarasfunesdessasbibliotecaseutilizlasquandonecessrio.Mesmoquenosejautilizadasasfunesouasbibliotecascomoumtodo,norepresentaumproblemaparaoprograma.Quandoolocalcompletodabibliotecanoforespecificado,ocompiladorbuscaremseudiretriodebibliotecas.A segunda parte do cdigofonte se refere a forma de incluso de comentrios. Simplesmente,todas as vezes que for digitada //, o restante da linha se torna um comentrio. Isso permite a insero decomentriosaolongodoprogramaeafacilitaoparaterceirosentenderemoquefoiescrito.Nosprogramasqueseroapresentadosmaisadiante,sermostradodiversoscomentriosaolongodocdigofonte,exatamente,paraservirdeexplicaodomesmo.Naterceirapartedocdigofonteondeseescreveoprogramaemsi.Aterceiraparteapresentatodasastarefasdoprogramaemseqncias.Asomade2nmeros,aescritanateladoquedigitadoouclculosdeumtrocadordecalor,tudoescritonaterceiraparte.Umatcnicarecomendadaparaaelaboraodeumbomcdigofonteaescritadoalgoritmo.Existemdiversoslivrosqueabordamoestudodealgoritmoseelesservemcomoumesqueletodocdigofonte.Asdisciplinasdeprogramaosempresoiniciadascomoestudodealgoritmos,dessaformafcildesevisualizarocdigofonte.Aescritadoalgoritmobasicamenteadescriodeformadetalhadadetodosospassosdeexecuodoprograma.Estetrabalhonoabordaoestudoeacriaodoalgoritmo,poisaprpriaseqnciaderesoluodosproblemasabordadospodemserconsideradoscomoumaformadealgoritmo.ParaexplicaodaFIGURA3.1.1escritoanteriormente,necessrioescreverocdigofonteemumeditordetextopuro.ParaacessarooeditordetextopuronoUbuntu7.10,bastaseguiromenuAplicaes>Acessrios>EditordetextoouentoabrirumTERMINALeescrever $geditepressionarateclaEnter.Apsaexecuodealgumdessesprocedimentosoeditordetextoabrirsemproblemas.Agora, bastadigitarocdigofonteabaixo:8Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g #include #include #include //----------------------------------- main () { printf ("Nao faz nada!\n"); return 0; }FIGURA3.1.2Simplescdigofontesemdivisesexplicativas.Agoranecessrioqueocdigofontesejasalvocomonomeprograma001.cemumapasta,ouento,quesecrieumapastaparaosprogramasapresentadosnestetrabalho,eassim,sejamlocalizadosfacilmente.Oprximopassoacompilaoecriaodoarquivoexecutveldoprimeiroprograma,masantesde prosseguir, necessrio explicar a funcionalidade do mesmo. Aps a declarao das bibliotecas (Parte 1 daFIGURA3.1.1)eainserodocomentrio(Parte2daFIGURA3.1.1)oprogramaseiniciacomapalavramain.As funes da linguagem C sero explicadas mais adiante, mas para dar continuidade necessrio abordar omnimo possvel. A palavra main est representando a funo principal. Ela seguida por parnteses querepresentamovaloradotadoeemseguidaumjogodechavescominformaes.Acomparaodafunomaincomumafunomatemticaconhecidaumadasformasdeseuentendimento.Veja:f(x)=ax+b equivalenteamain(x){ax+b}Afunomatemticaestparaafunomaindamesmaformaqueaexpressodesomaestparaocontedodaschaves.Ouseja,afunomainserexecutadadeacordocomoseucontedo.NalinguagemCpossvelescreverdiversasfunes,masoprogramasemprecomearpelafunomain.Otrabalhocomfunessermelhorexplicadoemcaptulosposteriores,poisserdegrandevalianaformaodeblocosdecdigosfonte.Partindoparaocontedodafunomain,apresentadaapalavraprintfquetambmumafuno. Ou seja, uma funo dentro de outra funo (funo composta). O printf na verdade, a funoresponsvel para imprimir na tela do computador os resultados, comentrios, observaes e etc. No primeiroprogramaelasimplesmenteirapresentarafrase:Naofaznada!.UmaobservaoimportantenalinguagemCquenoexistemcaracterescomacentos,porissooNonopossuiacentonafrase.Apsqualquertextoquefordesignadoparaserapresentadonatelapelafunoprintfetiveremseuinciooufinalotermo\n,sersaltadaumalinha.Apsafunoprintf,apresentadaalinhacomocomandoreturn0queoresponsvelparaafinalizaodoprograma.Eemseguidafinalizadaaaodafunomaincomofechamentodaschaves.Agora,depoisdeexplicaroprogramadeformabsicaerpida,podeserexecutadaasuacompilao.Para compilar o primeiro programa, basta abrir o terminal e acessar a pasta que se encontra oarquivocriado(programa001.c).OcomandodecompilaocomoGCC(compiladormencionadonoinciodestetrabalho)bastantesimples.Observe:$gccprograma001.cSercriadoumarquivoexecutvelnamesmapastacomonomea.outeparaexecutlobastadigitar:$./a.outA execuo do programa no passa da impresso da frase Nao faz nada!. Um detalheinteressantequeoexecutvelgeradopodeterqualquernome,masporpadroelegeracomoa.out.Acriaodoexecutvelcomumnomedeescolhadoprogramador,deveexecutaroGCCcomoparmetroabaixo:$gccprograma001.conomedesejavelAgorapossvelexecutaroprogramacomonomedesejadocomomesmocomando.Veja:$./nomedesejavelUmaltimaobservaoquedevesercomentadaomotivodoarquivocriadonoeditordetextose9Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g chamarprograma001.c.Naverdadeonomedoarquivopodeserqualquerum,masaextenso.cdefinequesetratadeumcdigofonteescritonalinguagemC.QuandosetrabalhacomalinguagemC++,porexemplo,aextensodoarquivosetorna.cpp.Seguindoessasregras,possvelcompilartodososprogramasapresentadosnestetrabalhoemqualquercompiladorquesegueopadroANSICnoSOqueutilizar.3.2As4operaesbsicasdaMatemticaAutilizaodas4operaesbsicasdaMatemticadegrandeimportnciaparaousocotidiano.Avisitaaosupermercadonoinciooufimdomsumtimoexemplodesubtrao.O13salriooutrobomexemplodeadiodedinheironooramentofamiliar.Logo,as4operaesbsicasqueseromencionadasso:soma,subtrao,multiplicaoediviso.ParaseentenderoconceitodasoperaescomousodalinguagemC,observeocdigofonteabaixo:#include #include #include //----------------------------------- main () { double x, y, z; printf ("\nVamos somar dois numeros."); printf ("\n\nDigite o valor de x:"); scanf ("%lf",&x); getchar (); printf ("Digite o valor de y:"); scanf ("%lf",&y); getchar (); z=x+y; printf ("z e igual a: %lf\n",z); getchar (); return 0; }FIGURA3.2.1Cdigofontedasomade2nmeros.AParte3docdigofonteacima,ondecontmumadas4operaesbsicasdamatemticaeoseu funcionamento na linguagem C. Primeiramente, se escreve o cdigofonte no editor de texto puro jmencionadoesalvaoarquivocomonome:programa002.c.Assim,osprogramasapresentadosnestetrabalhoseroarmazenadosemordemcrescentededificuldade.Osnmeroseletrasdoalfabetopodemterdiversossignificadoseparaseatribuirovalordeumnmero a uma letra ou palavra, se deve declarlas no cdigofonte. Veja a tabela abaixo para entender algunspadresquealinguagemCutiliza:TABELA3.2.1(pgina18ApostilaCursodeLinguagemCUFMG)Tipo FormatoparaleituracomscanfIntervalo(Incio) Intervalo(Fim)char %c 128 127unsignedchar %c 0 255signedchar %c 128 127int %i 32.768 32.767unsignedint %u 0 65.535signedint %i 32.768 32.767shortint %hi 32.768 32.767unsignedshortint %hu 0 65.535signedshortint %hi 32.768 32.767longint %li 2.147.483.648 2.147.483.647signedlongint %li 2.147.483.648 2.147.483.64710Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g unsignedlongint %lu 0 4.294.967.295float %f 3,4E38 3,4E+38double %lf 1,7E308 1,7E+308longdouble %Lf 3,4E4932 3,4E+4932Agora, basta entender cada linha do cdigofonte escrito. Veja que aps declarada a funomain,foiafirmadanadeclaraodoublex,y,z;quex,y,zassumiramumvalornumricodotipodouble.Otipo double informa que as variveis declaradas se encontram com um intervalo numrico entre 1,7E308 e1,7E+308,ouseja,essesseroosvaloresmximoemnimosadmitidosduranteosclculos.Apsadeclaraodex,yez,bastaimprimirnatelaoprximopassonaexecuodoprograma.informadoqueousuriodeveentrarcomovalordexquesersomadocomoutronmero.Paraaentradadovalordex,utilizadaafunoscanfquearesponsvelporarmazenartodasasinformaesdeentradapeloteclado.Afunoscanfnaentradadovalordex,explicaqueeleserumdoubleequeseuvalorficararmazenadoemx.Vejaalinhadessafunomaisumavez:scanf(%lf,&x);Vejaquedentrodafunoscanfseapresentam2termosbastanteinteressantesquedevemserexplicadosagora.Oqueseencontradentrodeaspas%lfsereferequeotermoxserdevalordouble,poislf seria igual a long float. Mas o termo long float o mesmo que double. A linguagem C faz essasdiferenas quesero percebidasaolongo dosexemplos apresentadosnos captulos subseqentes. O termo&xapresentadoapsavrgula,significaqueovalordexserdigitadonotecladoequeassumirotipodenmerodesignadoantesdavrgula.Podeparecerumpoucocomplicadoeconfuso,masalinguagemCporincrvelqueparea a mais fcil de ser compreendida pela maiorias das pessoas que buscam aprender um linguagem deprogramao.Continuandoaexplicaodocdigofonte,afunogetchar()apresentadalogoemseguida,poisesperaqueousuriopressioneateclaEnterdotecladoparacontinuarcomaexecuodoprograma.Omaisimportantedafunogetchar()nomomentoapausaqueelaprovocaduranteaexecuo.Podeseperceberqueasprximas3linhasdepoisdaexecuodafunogetchar()arepetiodeentradadeumvalor,masagoradoyqueovalorasersomadocomox.Continuandocomalinhaquedeterminaovalordez,queoresultadodaoperaomatemtica,seobtm:z=x+y.Note,quenonecessrioinformarotipodedadodoz,poiselejfoideclaradonoinciodoprograma.Agoravejaaformadecomomostradoovalordez,jcalculadopelasomadosvaloresdexey:printf("zeiguala:%lf\n",z);Simplesmente, ser impresso na tela a frase z e igual a: com o valor de z sendo do tipodoubleechamadoparaaposioemque%lfseencontra.Apsavrguladigitamosotermosqueserchamadoparaaposio,esepercebequeovalordez.Umdetalheimportantesoasaspasutilizadasnoincioefimdafrasequesedesejaimprimirnatela.Depoisdetodosessespassosexplicados,deveseinserirafunogetchar()maisumavezparapausaraexecuo.Alinhaseguinte,serveparaencerraroprogramaapresentado,poisafunoreturn0apresentaosignificado de exitnessasituao. Masela sermelhorabordadanos exemplosdos captulosposteriores. Oreturn0pararetornarovalordezeroparaafunomainquelogoentenderqueparaovalorzerosedeveencerraroprograma.A operao desoma apresentadapode sersubstitudapelasoutras 3 operaesda Matemtica,bastandosubstituirosinaldeoperao.3.3EntendendoasfunestrigonomtricasOseo3.3trs2exemplosparaautilizaodasrelaestrigonomtricas.Oprimeiroexemplopodeserconsideradoaformamaissimplesdeseusarfunesseno,cossenoetangente.Josegundoexemplo,apresentaoconceitodeumafunopreviamentedefinidaechamadaquandonecessria.umpoucocomplicadodese entender no segundo exemplo, mas de grande importncia para a reduo do nmero de linhas e elevar a11Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g elegnciadocdigofonteescrito.O primeiro exemplo trs o simples clculo do seno de um nmero, mas a linguagem C notrabalhacomgraus,esimcomradianos.Logo,necessriofazeratransformaodonguloantesdafunosenooudentrodela.Observeoprimeiroexemplo:#include #include #include //----------------------------------- main () { double x, y;printf("\nEntre com o ngulo em graus para calcularmos o seno:");scanf("%lf",&x);getchar();y = sin((x*M_PI)/180);printf ("\nO valor do seno e: %lf\n",y);getchar();return 0; }FIGURA3.3.1Cdigofontedeprogramaparaconversodengulos.Notequena11linhadocdigofonte,estatransformaodongulopararadianosdentrodafunoseno.Essaaformamaissimplesdeseentendereutilizar,masaquantidadedelinhaseaconfusoquandoaplicadaemumaequaomaiscomplexabemntida,assim,eladeixadeserinteressante.Asadaseriaescreverumafunoentreocabealhoeafunomaindocdigofonte.Vejaosegundoexemplo:#include #include #include //------------------------------------------------------double DegToRad (double x){return (x*M_PI/180);} //------------------------------------------------------main () { double x, y;printf("\nEntre com o ngulo para calcularmos o seno:");scanf("%lf",&x);getchar();y = sin(DegToRad(x));printf ("\nO valor do seno e: %lf\n",y);getchar();return 0;}FIGURA3.3.2Cdigofontedeprogramaalternativoparaconversodengulos.Otrechodacriaodafunoestnaprimeiracaixadetexto,exatamenteentreoCABEALHOeoDESENVOLVIMENTO,esuaaplicaonasegundacaixadetexto.visvelamelhoranaescrita,poistodasasvezesquefornecessriaatransformaodeumngulopararadianosnasfunestrigonomtricas,bastachamarDegToRad().AescolhadaexpressoDegToRadparaficardefcilentendimentoafraseDegreetoRadian,quetraduzindoparaalnguaportuguesa,significaGrausparaRadianos.possvelcriarfunesdediversostipos.Valeressaltarnessemomentoqueessemtododecriaodefunesserbastantetilnacriaodecdigosfonteemblocos.ParaexplicaroqueocorrecomafunoDegToRad,importanteentenderasuaestruturanotrechonaprimeiracaixadetexto:doubleDegToRad(doublex){return(x*M_PI/180);} declarado que a a funo DegToRad do tipo double e retornar um valor x do tipodouble.Emseucorpo,foiinformadoqueovalorderetornodeveserovalorx,massendomultiplicadoporedivididopor180.Issoresulta,exatamente,natransformaodovalordexemradianos.Ouseja,vejaaaplicaodafuno:12Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g y=sin(DegToRad(x));O valor de x inserido na funo main sofre a transformao para radianos devido a funoDegToRadedessaforma,ovalordosenopodesercalculadodeformacorreta.Apsaescritadoprogramaesuaexplicaodefuncionamento,bastacompillo.AcompilaopossuiumdetalhequandoutilizadooSOUbuntu7.10. Na utilizao do e das funes trigonomtricas necessria a insero do termo lm no final docomando de compilao do GCC. Essa expresso deve ser usada para forar o compilador a usar a bibliotecamatemticaquepossuiasfunestrigonomtricaseo.Umasugestoparaonomedosarquivosreferentesaosdoisexemplosnessecaptulosoprograma003.ceprograma004.crespectivamente.Vejacomoseriaocomandodecompilaodecadaumdosexemplos:$gccprograma003.clmonomedesejavele$gccprograma004.clmonomedesejavelApsacompilaodoscdigosfonte,aexecuodoprogramasersatisfatriaeosresultadossoobtidoscom6casasdecimaissignificativas.13Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g 4DIMENSIONAMENTODEISOLAMENTOTRMICOEMLINHADEVAPOR4.1IntroduoO processo de dimensionamento e escolha de um isolamento trmico em linhas de vapor ouqualquer outra substncia, deve ser realizado de forma a no apresentar uma perda considervel de material deconstruoeassimreduziroscustos.necessrioabordaraformadecomoosclculosdevemserrealizadoseparatal situao, necessrio o uso de conhecimentos em transmisso de calor. A rotina computacional que apresentadanodecorrerdocaptulopoderservirdebasepararesoluodesituaesnavidaprofissionaldeumengenheiro.4.2CaractersticasdoproblemaParainiciaraelaboraodeumarotinacomputacionalparaodimensionamentodoisolamentoemumduto,necessriotomarcomobasealgumasinformaescomo:ofluidoemquesto,omaterialdatubulaoeos diversos tipos de isolantes trmicos, por exemplo. Esse captulo trata do desenvolvimento de tal rotinacomputacionalparaasseguintessituaes:1. Elaborararotinacomputacionalparaodimensionamentodeumalinhadevaporapartirdaquedadetemperaturadalinha;2. Poderinverter oprocedimentoecalcularaqueda de temperaturade uma linhadevaporapartir daespessuradoisolamento.Odimensionamentodevesercalculadodeformaautomticaapartirdeumconjuntomnimodedadosdeentradaeconsiderandoqueovaporescoaemregimeestacionrioeplenamentedesenvolvido.Lembrandoqueascondiesdetransfernciadecalorporconvecosoassumidasconstantes.Osresultadosquedevemserapresentadosnofinaldaexecuodoprogramaparaasituao1so:espessuradoisolamentotrmicocrticaerecomendada,temperaturadasuperfcieexternadoisolamentoepesodoisolamentotrmicoporunidadedecomprimento. Osresultadosquedevemserapresentadosnofinaldaexecuodoprogramaparaasituao2so:espessuradoisolamentotrmicocrtico,quedadetemperaturaporunidadedecomprimento,temperaturadasuperfcieexternadoisolamentoepesodoisolamentotrmicoporunidadedecomprimento.Paracomplicarumpoucomaisnaelaboraodoprograma,interessanteaopodematerialdatubulaoedoisolamentotrmicoempregado.Ocomprimentoedimetrodatubulaotambmsoinseridoscomodadosdoprograma.Dessaforma,osoftwarepodeserelaboradodeformamaisabrangente.4.3BasetericaA rotina computacional apresenta duas possibilidades de clculo de espessura de isolamento equedadetemperaturanalinha,veja:1Determinaraespessuradeumisolamentotrmicoapartirdaquedadetemperaturadalinha;2Determinaraquedadetemperaturaapartirdaespessuradeumisolamentotrmico.Paraasduassituaespropostasnecessriooconhecimentodoqueocorrenalinhadevapor.Vejaafiguraabaixo:FIGURA4.3.1Desenhoesquemticodoisolamentotrmicoemumtrechodetubulao.Para calcular alguma das duas situaes propostas pela rotina computacional, necessrio14Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g consideraracondutividadetrmicadotubo,doisolamentoeaconvecodoisolamentotrmicocomoambiente.Ataxadeconduotrmicaemsuperfciescilndricasdadapelafrmula:drdTL k qr = ) 2 ( (4.3.1)Asresistnciastrmicasdasecocircularquedevemserconsideradasso:FIGURA4.3.2Desenhoesquemticodeumcorteumtrechodetubulaocomisolamentotrmico.Alminadealumnioque,geralmente,envolveoisolamentoparaproteglodaumidadepodeserdesconsiderada, pois a espessura da lmina de aproximadamente 0,3 mm. Logo, o valor da taxa de conduotrmicapodeserescritacomo:3 212) 2 / 3 ln(2) 1 / 2 ln(r h L k Lr rk Lr rT Tiqi tr + + = (4.3.2)Eigualandocomumaoutraformadeescreverataxadeconduotrmica:T c mr h L k Lr rk Lr rT Tipi t = + + 3 212) 2 / 3 ln(2) 1 / 2 ln( (4.3.3)Com essa equao acima, possvel determinar a queda de temperatura isolando o T ou aespessura do isolamento trmico pela subtrao da expresso matemtica r3 r2. O cdigofonte descrito nasessoabaixo,apresentatodooprocedimentodasequaesapresentadaspossvelousuriodeterminarduranteaexecuodoprogramadiversasvariveisdeprojeto.Aescolhadomaterialdotubo,otipodeisolamento,vazomssicadovapor,temperaturadeentradadovaporeoutrasinformaessoexemplosdevariveisquepodemserinseridas.4.4CdigofontecomentadopassoapassoOcdigofonteapresentadoporpartes,poisoseucontedonantegraseencontranoApndiceB. Sero apresentados trechos que explicam a funcionalidade do programa, e as partes de complementao domesmosoomitidasquandodesnecessriasparaoseuentendimento.ApsoCABEALHOpadrojmencionadonoscaptulosanteriores,sedevefazeraescolhaentreasduasopesdesoluodoprogramaouafinalizaodomesmo.Umoutrodetalheadescriodotermoinicio:,eleoresponsvelpelareinicializaodoprograma.Veja:15Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g main () { inicio: printf ("\n DIMENSIONAMENTO DE ISOLAMENTO TERMICO EM LINHA DE VAPOR"); printf ("\n\n\n 1 - Determina a espessura do isolamento a partir da queda de temperatura."); printf ("\n 2 - Determina a queda de temperatura a partir da espessura do isolamento."); printf ("\n 3 - Finalizar o programa."); printf ("\n\n\n Escolha a Situacao:");Aescolharealizadapelaadiodeumacondiochamadaif,queapresentaosignificadodese em portugus. Com os valores de 1 at 3 de acordo com as opes mencionadas no incio do programa.Observe:int x; scanf ("%d",&x);if (x==1) { O incio da condio caso seja escolhida a primeira opo de execuo do programa, com adeclarao de variveis da Equao 4.3.3. Note que todos os valores so do tipo double, assim, possvel setrabalharcomumintervalobastanteconsidervel.Perceba:double R1, R2, R3, KI, KT, H, L, VAZAO, Cp, e, vazao, C0, C1, C2, C3, Teta, TI, TA, Tsi, RC, Funcao, T_int, T_ext, PESO, Qr, dT, Ro, G, Eiso, dTporL, L1, L2, T1, T2;Apsadeclaraodasvariveisdentrodaprimeiracondioif,diversosvaloressoperguntadoseinseridosnamemria.Dessaforma,asvariveisassumemoseuvalorouservemdebaseparavaloresdeoutrasvariveis.Aespecificaododimetroexternodotubo,espessuradaparededotubosovariveisnecessriasparaoclculodavarivelresponsvelpeloraiointernodotubo.Veja:printf ("\n Espeficique a diametro externo do tubo (m): "); scanf ("%lf",&R2); printf (" Especifique a espessura da parede do tubo (m): "); scanf ("%lf",&e); R1 = R2-e;O prximo passo dentro da primeira condio a escolha do material do tubo que compe atubulao.Depoisdasmensagensinformativasdasopesdostubos,criadaumaseqnciadecondiesdotipoif,novamente,paraaescolhadacaractersticadocoeficientedecondutividadetrmicaporconduo.Observe:printf ("\n Escolha o material do tubo:\n"); printf (" 1 - Tubo de aco carbono ANSI 1010.\n"); printf (" 2 - Tubo de aco INOX ANSI 304.\n"); printf (" 3 - Tudo de bronze comercial.\n"); printf (" Escolha: "); int KTubo; scanf ("%d",&KTubo); if (KTubo == 1) {KT = 63.9;} //Tubo de ao carbono ANSI 1010. if (KTubo == 2) {KT = 14.9;} //Tubo de ao INOX ANSI 304. if (KTubo == 3) {KT = 52;} //Tubo de bronze comercial.16Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g Agora, o mesmo procedimento para a escolha do tipo de isolamento trmico e a adio dacaractersticadedensidade.Perceba:printf ("\n Escolha o material do isolamento termico:\n"); printf (" 1 - Manta de la de vidro.\n"); printf (" 2 - Tubo bi-partido de la de rocha.\n"); printf (" 3 - Flocos de la de rocha.\n"); printf (" Escolha: "); int KIsolamento; scanf ("%d",&KIsolamento); if (KIsolamento == 1) {KI = 0.025; Ro = 40;} if (KIsolamento == 2) {KI = 0.046; Ro = 130;} if (KIsolamento == 3) {KI = 0.037; Ro = 60;}Logoemseguida,ovalordocoeficientedeconvecoexternaadotadoemaisinformaessopedidascomo:comprimentodatubulao,vazomssicadovapor,temperaturasinternaeexternadatubulao.Veja:H = 30; //Coeficiente de conveco externa. printf ("\n Informe o comprimento da tubulacao (m): "); scanf ("%lf",&L); printf (" Informe a vazao massica do vapor (kg/s): "); scanf ("%lf",&vazao); VAZAO = vazao/3600; printf (" Informe a temperatura do vapor (oC): "); scanf ("%lf",&T_int); printf (" Informe a temperatura do ambiente (oC): "); scanf ("%lf",&T_ext);Aps a entrada de todas as informaes, as equaes abaixo fazem outros clculos como aconversodatemperaturadeCparaK.Valeressaltarqueovalordovapornodeveultrapassarointervalode250K1200K,poisosvaloresdasconstantesC0,C1,C2eC3paraoclculodocalorespecficoCpestofixadosnocdigofonte.Percebaquenotrechoabaixo,tambmdeclaradoovalordagravidadeparaoclculodopesodoisolamento.Observe:TI = T_int+273.15; TA = T_ext+273.15; Teta = TI/1000; C0 = 1.79; C1 = 0.107*Teta; C2 = 0.586*Teta*Teta; C3 = -0.2*Teta*Teta*Teta; G = 9.81; Cp = (C0+C1+C2+C3)*1000;Abaixo,contmumadasformasdesecalcularovalordoisolamentotrmicoapartirdaquedadetemperaturanalinha.OmtodoaplicadofoiaaproximaodosdoisladosdaEquao4.3.3, poisovalordoraioexterno do isolamento trmico assumido, inicialmente, exatamente igual ao raio externo do tubo selecionado.Dessaforma,acondiowhile,quepossuiosignificadodeenquantoemportugus,aplicadaparaqueocorraoincrementode0,0000001novalordoraioexternodoisolamento.Assim,ocorreumlooping dentrodacondiowhileatqueovalordoraioexternodoisolamentopermitaaveracidadedaigualdadedaEquao4.3.3.Ento,encontrado o valor do raio externo do isolamento, fcil de encontrar o valor da espessura do isolamento pela17Programaoparaengenhariasutilizandosoftwareslivres Vr.1.0[2008.2]g expressoEiso=R3R2.Perceba:R3 = R2; printf (" Informe a queda de temperatura na linha (oC/m):"); scanf ("%lf",&dTporL); Funcao = ((TI-TA)/((((log(R2/R1)))/(2*M_PI*KT*L))+(((log(R3/R2)))/(2*M_PI*KI*L))+(1/(H*2*M_PI*R3*L))))/(VAZAO*Cp); while (((dTporL*L)/Funcao)=4){printf ("\n Escolha a opcao correta!"); goto Classe;}if (MC=4) {printf ("\n Escolha a opcao correta!"); goto Classe;} if (MC