10 lições para c

Upload: fabiano-orlando

Post on 19-Jul-2015

163 views

Category:

Documents


0 download

TRANSCRIPT

10li coesparaaprenderalinguagem cemPortugues.TarcisioPracianoPereira1UniversidadeEstadualValedoAcara uSobral,12de julhode 2005-Ceara1DepdeMatematica-U.V.A.-tarcisio@e-math.ams.orgTarcisioPracianoPereiraPhDemMatematica10LIC OESPARAAPRENDERALINGUAGEMcemportuguesEdi caoeletronica3Pereira,TarcisioPracianoP496c 10li c oesparaaprenderCSobral: UVA,2001224.pBibliograaISBN:solicitado1-AlinguagemCI.TtuloCDDxxx.xx4ListadeFiguras1.1 arvoredediret orios-BC . . . . . . . . . . . . . . . . . . . . . . . . . 224.1 se() ouentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744.2 Fluxogramadose() . . . . . . . . . . . . . . . . . . . . . . . . . . . 754.3 Fluxogramacomdoisse() . . . . . . . . . . . . . . . . . . . . . . . . 764.4 Fluxogramacomdoisse(),umaentradaeumasadadados . . . . . . . . 774.5 Fluxogramadaequa c aodosegundograu. . . . . . . . . . . . . . . . . 784.6 Aoencontrarpare()ouxoedesviadoparaapr oximafun c aoexternaaobloco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956.1 Vari avelglobalevari avellocal. . . . . . . . . . . . . . . . . . . . . . . 1186.2 Vari avelglobalelocal . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.1 M aquinadobalc aodocomercio, cole c aodoautor. . . . . . . . . . . . . 1377.2 duasformasequivalentesparaimprimir30nabase8 . . . . . . . . . . . 1667.3 Formata c aodedadosemprintf() . . . . . . . . . . . . . . . . . . . . 1677.4 Usodeprintf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688.1 Equa c aodosegundograu . . . . . . . . . . . . . . . . . . . . . . . . 1808.2 C aculodaintegral,aproximadamente. . . . . . . . . . . . . . . . . . . 1839.1 Oprodutoden umeroscomplexos: parteimagin aria seobtememcruz . . . 20056 LISTADEFIGURASSumarioIntrodu cao................................... . . . . . . . . . . . . . . . . . . . . 10I UsandososcomandosemPortugues 171 Umaprimeirasuitedeprogramas 191.1 Comorodarumprograma. . . . . . . . . . . . . . . . . . . . . . 192 OsegundoprogramaemC 332.1 Programaseerros... . . . . . . . . . . . . . . . . . . . . . . . . . 332.1.1 Analisedoprog021.c . . . . . . . . . . . . . . . . . . . . 463 N umeroseLetras 533.1 Brincandocomn umerosemC. . . . . . . . . . . . . . . . . . . . 533.1.1 Leituradedados . . . . . . . . . . . . . . . . . . . . . . . 593.2 BrincandocomaspalavrasemC. . . . . . . . . . . . . . . . . . . 623.2.1 Palavras,macros,caracteres. . . . . . . . . . . . . . . . . 623.2.2 Vetoresdecaracteres. . . . . . . . . . . . . . . . . . . . . 664 Controlelogicodouxo 714.1 Ocondicionalse()(if()). . . . . . . . . . . . . . . . . . . . . . 714.2 M ultiplas escolhas. . . . . . . . . . . . . . . . . . . . . . . . . . . 834.3 enquanto()while() . . . . . . . . . . . . . . . . . . . . . . . . . . 874.4 Outrometodoparala cos. . . . . . . . . . . . . . . . . . . . . . . 924.5 Parandonomeiodeumbloco. . . . . . . . . . . . . . . . . . . . 945 Criandofun coes 975.1 Vericadordesenhas. . . . . . . . . . . . . . . . . . . . . . . . . 1005.1.1 MetamorfosesdoLeitordePalavras. . . . . . . . . . . . . 1015.1.2 Sistemadecontabilidadegeral . . . . . . . . . . . . . . . 1075.1.3 Comoregistrardinheiro . . . . . . . . . . . . . . . . . . . 1095.2 Maquinadecalcular. . . . . . . . . . . . . . . . . . . . . . . . . . 1095.2.1 Omenudeop c oes . . . . . . . . . . . . . . . . . . . . . . 10978 SUMARIOII Aprofundandoosconhecimentos 1116 Variavel global elocal 1176.1 Variavelglobalelocal . . . . . . . . . . . . . . . . . . . . . . . . 1176.1.1 Comentariossobreosexerccios . . . . . . . . . . . . . . . 1206.2 Tecnicascomousodevariaveislocais . . . . . . . . . . . . . . . 1236.3 Passandovaloresentrefun coes . . . . . . . . . . . . . . . . . . . 1277 Ostiposbasicosdedados 1317.1 Osn umerosemc. . . . . . . . . . . . . . . . . . . . . . . . . . . 1317.1.1 Osn umerosinteiros . . . . . . . . . . . . . . . . . . . . . 1327.1.2 Osn umerosreais . . . . . . . . . . . . . . . . . . . . . . . 1377.1.3 BibliotecasdoBC. . . . . . . . . . . . . . . . . . . . . . . 1427.2 Caracteresevetoresdecaracteres. . . . . . . . . . . . . . . . . . 1447.3 Ponteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487.3.1 Opera coescomponteiros. . . . . . . . . . . . . . . . . . . 1537.4 Manipulandoarquivosemdisco. . . . . . . . . . . . . . . . . . . 1547.5 Matriz,(array). . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557.6 Estrutura,struct. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597.6.1 tempoparaoshumanos . . . . . . . . . . . . . . . . . . . 1637.6.2 tempoparaocomputador . . . . . . . . . . . . . . . . . . 1657.7 Formatadoresparasadadedados . . . . . . . . . . . . . . . . . 1658 Matematicaemc 1718.1 Operadoresaritmeticoselogicos . . . . . . . . . . . . . . . . . . 1728.1.1 Umalistasecadeoperadores . . . . . . . . . . . . . . . . 1738.2 Equa caodosegundograu . . . . . . . . . . . . . . . . . . . . . . 1788.3 Somaseintegraisemc. . . . . . . . . . . . . . . . . . . . . . . . 1828.3.1 Integraldefun coesunivariadas . . . . . . . . . . . . . . . 1828.4 Gracosdefun coesusandoc . . . . . . . . . . . . . . . . . . . . 1858.4.1 Comentandooprogramagrafun01.c . . . . . . . . . . . 1869 Programa caoavan cada 1919.1 Continuarseaprofundandoemc . . . . . . . . . . . . . . . . . . 1919.1.1 c + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1929.1.2 Programa caoorientadaaobjeto . . . . . . . . . . . . . . 1939.2 Oprogramamenu.cc. . . . . . . . . . . . . . . . . . . . . . . . . 1979.2.1 Constru caodaideia . . . . . . . . . . . . . . . . . . . . . 1979.3 N umeroscomplexos . . . . . . . . . . . . . . . . . . . . . . . . . 1999.3.1 Que en umerocomplexo . . . . . . . . . . . . . . . . . . . 1999.3.2 Oprogramaemc . . . . . . . . . . . . . . . . . . . . . . 2009.3.3 Constru caodecomplexomileniumplus.cc . . . . . . . 201SUMARIO 910Manual introdutoriodereferencia 20310.1 OSistemaoperacionaleashell . . . . . . . . . . . . . . . . . . . 20410.2 instru coesdecompila c ao. . . . . . . . . . . . . . . . . . . . . . . 20610.3 linhadecomando. . . . . . . . . . . . . . . . . . . . . . . . . . . 20610.4 Operadoresaritmeticoselogicos . . . . . . . . . . . . . . . . . . 20810.5 Alibc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20810.6 Manualdocompiladorgcc . . . . . . . . . . . . . . . . . . . . . . 210Bibliograa............................................................................... 21210 SUMARIOIntrodu cao.Todamanha,naAfrica,umacor caselevantaesabeteraquesermaisrapidaqueomaisrapidodosleoes,ouseramorta.Todamanhaumleaoselevantaesabeteraquesuperaramaislentadascor cas,oumorreradefome.Naoimportasevoce eleaooucor caquandoosolselevantar,emelhorsaircorrendo.-autordesconhecidoComousarestelivro.Para come car, sugerimos que nao leia, agora, esta introdu cao. Leia primeiroorestodolivro, depoisaintrodu cao, porque, lheconfessamos, primeiroescre-vemos o livro, depois a introdu cao. Mas se voce quiser insistir, fa ca uma leiturarapidaedepoisvolteparalercommaiscuidado. Vocevaiverque, entao, valeapena.Estelivrotemdezcaptulosemquelheapresentamos as tecnicas b asicasparaprogramar nalinguagemc, maseprecisoenfatizar, vocevai apenas seiniciarnalinguagemcomestelivro.O livro esta divido em duas partes. Na primeira, vamos apresentar-lhe cemportuguesporduasrazoes:paravencer adiculdadepsicologicacomoIngles, creamosumarquivoquetraduzoscomandosdalinguagemcparaoPortugues, demodoquevoceseiniciesemadiculdadelingustica;paramostrar-lhequecomcpodemosfacilmenteconstruiroutralingua-gem,nestecaso ecemportugues. Istomostraopoderdalinguagem.Mas voce nao deve se enganar com o apoio lingustico e nem queremos induz-lonoerrodequeepossivel viversemoingles. Porestamesmarazaovamosmanter os programas traduzidos junto com os programas naturais em c de modoquevoce va aos poucos se habituando com as palavras da linguagem em Ingles.Nasegundaparteusaremosapenasoscomandosemingles.Oconte udodasduaspartesdolivro,emlinhagerais eoseguinte:1. A primeira parte,constituida dos cincoprimeiros captulos, deveradeixa-loescrevendopequenos programas emcetodos os exemplos ser aoemportuguescomatradu caoaolado. Depoisvocetomarasuadecisao,seSUMARIO 11quisercontinuarescrevendoseusprogramasemIngles, comoehabitual,oucontinuaraescreve-losemportugues.Observequeosprogramasemportuguesrodamdamesmaformacomoosprogramasemingles,elesnaosaodementira.2. Na segunda parte vamos avan car em profundidade em algumas dire c oes. Apartir dai so apresentaremospeda cosde programas, porque osprogramasinteiros voce pode consegu-los num disco ou via Internet,veja como fazernabibliograa,[email protected] programas. Vocepodeusar este ender coparaconsultasrapidas, mas,porfavor,naoesperequelhepossamos darumcursoparti-cularviainternet.Se voce quiser continuar programando emportugues esta ser a umaop caosuaeatelavoceteraaprendidocomofazer.Ometodoquevamosusarnolivroseassemelha`aquelequeusaramquandovoceerapequeno, paraaprenderasualinguamaterna. Mostraram-lhevariasvezesomesmoobjeto, cadeira, elhedisseram: cadeira, a voceaprendeuadiferen calogicaentreumacadeiraeumamesa.Vamoslhemostrarpequenosprogramas, pedirquevoceosrodenumcom-putadoremqueocestejainstalado1. Depoisiremoscomentarosprogramaselheindicarcomovoceospodealterar,eassimpordiante.Partedometodoconsistedoestilocomqueoscaptulosforamescritos: hasuperposi cao entre eles, quer dizer, o mesmo assunto, o mesmo conceito, aparecevarias vezes,aumentando de intensidade nos captulos de n umero maior.E ometododeexplica caologicadadiferen caentrecadeiraemesa, detantofalar,termina cando claro o que as coisas sao. Voce sera inclusive convidado a pularpara os captulos mais avan cados com frequencia e, nao tenha d uvida em faze-lo,seacharqueestabemlanafrente,naoprecisavoltaratr as...Comorodaroc?Sevocepuderescolher, useLinuXealinguagemgratuitacquevemcomeste sistema operacional. Se voce tiver ainda alguma chance de escolher, mesmotendoquetrabalhar dentrodoWindows, (poucas chancesde escolha...), sugeri-mos useocdafunda caoGNU, procureemwww.gnu.orgouenviee-mail paraoautor. Vejaabaixoinstru coesmaisdetalhadas,1sevocetiveracessoaumcomputadorrodandoLinuX,ent aooCestar acomtodacertezainstalado12 SUMARIOdepreferenciaaocdaBorland,BCquetodosqueoanalisamconsiderammelhorqueoMicrosoftC,se voce nao tiver mesmo nenhuma outra op cao, use o que tiver `a mao, masaprendaoc.Se voce usa Linux e por alguma raz ao complicada precisar de usar BorlandC, vocepodefaze-losobdosemu. Foi assimqueasversoesdoprogramasparaBCforamtestadaspormim.Este livrofoiescritoemcimadogcc,GnuCCompiler (oCompilador CdaFunda caoparaSoftwareLivre,2FreeSoftwareFoundation, FSF).A FSFcrioutambemumaversaodogccpara rodar emDOSeemWindows demodo quesevocenao tiver comprado um pacote de c, voce pode obter um, gratuito, direta-menteda FSF no endere cohttp://www.gnu.orgprocure What we provideevocevaiserdirecionadoparaosdiversosprogramasquefeitossobopatrocniodestafunda cao,emalgum lugar vocevaiencontrardjdevque eonomedogccparaDOS/Windows. .Oqueec?HamuitosmitosenvolvendoalinguagemC,entreelesdestacamos:Eumalinguagemdifcil. Voceveraqueefacil iniciaroseuaprendi-zadoemC. Masseriaumamentiradizer-lhequeoconte udodestelivroesucienteparaquesetorneumexmioprogramador. Prometemosqueaoterminodestelivrovoce poderaestar fazendoalguns programas in-teressantes ecommuitavontadedecontinuar. Nabibliograavocevaiencontrardicasdecomofazeristo.Eumalinguagemperigosa, vocepodeestragar ocomputador.Nao eperigosa,mas epoderosa. Sepodedizer,semperigodeerromaior,quetudoquerodahojenoscomputadoresfoifeitoemcoufoifeitocomalgumaferramenta,umaoutralinguagem,quefoifeitaemC.Edefato,vocepode,comfacilidade,travarocomputadorcomumpro-gramaerrado. Vocetambempodedeixarosistemaoperacional confusogravandoalgumdadoimproprioemlocal indevidodememoria, masnapiordashipotesesasolu caoparaoproblemavai consistiremdesligaramaquinaedepoistercuidadocomoprogramaquecausouestaconfusao.Naabsolutapiordashipoteses, vocepodeterqueinstalartudodenovo,se o seuprograma houverse intrometidopor cima dosistema operacional2GNU eumasiglaquerepresentaaFSFetambem onomedeumtipodeantlope,largeAfricanantelopehavingaheadwithhornslikeanoxandalongtuftedtail, copiadodomeudicion ariogratuitoproduzidopeloLab. deCienciasCognitivasdePrinceton.SUMARIO 13gravadonodisco... masparafazeristosoumprogramabemavan cadoemuitomalintencionado.Claro, logoaqui nocome copodemosdizerquempodecausartaistrans-tornosparaquevoceaprendaamanipularcomcuidadoovilao: saoasvariaveis dotipoponteiro porque elas fazem referenciaaos endere cosdasvariavei namemoriaRAM3. Consequentemente, sevocemandarescreverdadosmuitograndesemumavariavel detamanhopequeno, haveraumainvasao em areas de memoria e pode ser difcil de predizer as consequenciasdestainvasao.Eistoquesechamadeenderecamentoindireto. Amaioriadaslingua-gensdeprograma caonaousaesterecurso, nelasvocepodeapenasfazerendere camento direto, usando o proprio nome da variavel. Veja o seguinteexemplo:Exemplo: 1Enderecamentoindiretoeindiretonumero=23;//enderecamentodireto&numero23;//enderecamentoindiretoA primeira atribui cao e a comum nas linguagens de programac ao, foi atri-buido o valor 23 diretamente ` a vari avel numero. Na segunda linha estamosdizendoqueovalor23sejaassociadoaoenderecoden umero.N aoeassimquesefazemc,vejaoprogramaenderecoindireto.c,masn aosepreocupecomentende-locompletamenteagora. Estamoslhedizendoqueolheoprogramaapenas paracontrabalancaras duas linhasacima que n ao s ao reais em programac ao, apenas uma tentativa de transmitir-lheoquesignicaendere camentoindireto. Noprogramaenderecoindireto.cvocepodevercomoequerealmentesefaz.Emctambemfazemosatribui coesdiretasdevaloresnasvariavei, mas,alemdisto, c podeacessar, quandovoceusar ponteiros, amem oriadeformaabsoluta, ea seencontraoriscodequevocemandeescreverporcimadealguma partedosistemaoperacional,porexemplo...enestecaso,com certeza a maquina vai parar. Desligando-a e novamente ligando, umaversaonovadosistemaoperacional vai serinstaladaapartirdodiscoetudovoltaraaonormal. Esteeograndedanoqueobviamentedeveserevitadoeporistoprimeiroentendaponteirosantesdeus a-los.Masaquivoceiraaprenderoqueeumponteiro,vaiaprenderacompre-enderoquepodeestaracontecendoedominarospoderesdalinguagem.Vocesabequepodelevarumchoqueeletricopegandodemal jeitonosos,masnemporissovocepreferevivernoescuro...3RandomAccess Memory, eamem oriaque voceadquireamais ouamenos parasuam aquinaenaqualosprogramastemdireitoafazerregistros.14 SUMARIOObserva cao: 1Afuncaoscanf()eodirecionador&.Osmbolo&sechamaalgumasvezesredirecionadordememoria, porqueeleas-socia enderecoe memoria. Algumas funcoes da linguagemC fazematribuicao dedadosviaendereco, eocasodafuncaoscanf()eporistoelarepresentaumproblema,comfrequencia. Elaexige, umdirecionador de registro, & nafrente de algumasvariaveis. Suaomissaofaracomocompiladoroadvirtadoerroesevocenaolevaraserioaadvertenciapodeacontecerquecomovalorlidosejacolocadonumaposicaodememoriadifcil deprever. Seosistemaoperacional naotiverumbomcontroledousodamemoria,eesteeocasodowindows,istopodelevarasobreposicaodeumavariavel dosistemaeconsequentementeaumaparadacardiacaviolentadomesmo...masemgeral octrl-alt-delresolveoproblemaeowindowsvai lhebrindarodiscocomummontedelixoquandosere-iniciar.Evitedeesquecero&antesdasvariaveisquandousarscanf. Masnaoprecisaseassustar,ocompiladorquevoceestiverusandodentro, mesmodentrodowindows,lhefaraumaadvertenciasevoceesquecerum&naprimeiraetapadacompilacaodoprograma,tenhaapenasocuidadodelevaraserioaadvertenciaecorrijaoesque-cimento. Haoutrasfuncoesque,comoscanf()exigemo&. Tomeomesmocuidadonestesoutroscasos.Existem outras formas de copiar informa coes em lugares errados, elas seraoidenticadasmaisadiante, etodasestaoligadasaousoindevidodoen-dere camentodememoria. Umexemplocomum comoutiliza caodeumavariavelcomtamanhomaiordoquedeveria. RodandoprogramasemLi-nuX, o maior problema que isto pode causar consiste em deixar o programainconsistenteepodendotravarindesejavelmenteoquepodeemgeral serresolvidoentrandonoutra areadetrabalhoematandooprogramamalcomportado.Apreven caoparaesteproblemaconsistenousocuidadosodasvariaveissegundoadeclara caodas mesmas. Claro, everdade, seesperade umprogramadordalinguagemcmuitaaten caonousodevariaveis.Onossoobjetivoconsisteemdeixa-loemcondi coesdeescolherumdosca-minhosseguintes:Se aprofundar emc para construir programas que executem tarefas difceiscom esta linguagem, masusandoumoutrolivro,nao este. Na bibliograavoceiraencontraralternativas.Escolherumaoutralinguagem, vamoslhesugeriralgumas, usandoaex-periencia adquirida aqui. Queremos lhe dizer com esta segunda op cao quecpodeserumalinguagemintrodutoriaantesdevocesedenirporumalinguagem apropriada para o seu desenvolvimento, que pode ser em c, masha muitas outras para escolher. Ao nal deste livro voce deve se encontrarnopontodefazerestaescolha.Iniciaroestudodecpelosseusaspectosdelinguagemdealtonvel,dei-xandoparaonalosindicativosdecomoseaprofundarnalinguagem.E porqueCe t ao importante, mesmo que nalmente vocevaprogramar emoutralinguagem?Algumasdasrespostasparaestaperguntasaoasseguintes:SUMARIO 15 Aprimeiraeaquelaquejamencionamosalgumaslinhasatr as, pratica-mentetudoquerodanoscomputadoreshoje, ouefeitoemcoucomal-guma ferramenta que foi feita em c e, como consequencia, por tras de tudoistosemprepodemosencontraraspegadasdestaimportantelinguagem. Emgeral, nasolu caodeproblemascomputacionaisseusaccomoumalinguagemnalparaescrevernaformadenitivaosalgoritmosqueestaorodandobemesemerrosemuitasvezesparaescreverpequenospeda coscrticosdoalgoritmo, naooalgoritmotodo. Querdizerquesecome caaescrever numa outra linguagem que, por alguma razao, e mais apropriada,equandoseconseguiumontaroalgoritmo, funcionando, semerros, seotraduzparacoupelomenospartedele etraduzidoparac. Outras vezes se escreve em cumaoutra linguagemdealtonvel na qual seproduzemosprogramas. Nestecaso,oque ecomumfazer-se e,continuarespandindoestaoutralinguagemcomnovosmodulosescritosemc. Estae,possivelmente,ousomaiscomumdalinguagemc. Seriaumerronaomencionaraqui aestensaoconstruidaparacquesechamac + +. Estaeumanovalinguagemmasqueadmiteccomoumasub-linguagem, quer dizer quevocepodeprogramar exclusivamenteemc + +masvocepodemisturar asduasdeumaformaconveniente. OutroexemploePythonqueeumalinguagemumpoucomaisnovaqueC + +e que admite tambemc comoumalinguagemde estensao. Mas aquiteriamos que fazer umalistacomumadezenade linguagens, oumais,paraasquaisisto everdade. No ndice remissivo voce encontra usodec, remetendo-o para outros pon-tos no livroonde mostramos pequenos exemplos de usodalinguagemnaconstru caodeoutrasferramentas. Naoespere, obviamente, encontrarnadarevolucionarioanveldeumlivrointrodutorio,comoeste...Portodasestasrazoes eimportanteconheceralinguagemc.Por outro lado ela e facil de se aprender e serve como uma primeira linguagemde programa cao.Eeste ointuitoprincipal deste livro: apresentar c comoumaprimeiralinguagemde programa cao. Por exemplo, e faclimoescreverprogramasemPortuguesquerodememCe seria um pouco mais difcil de fazeromesmoemqualqueroutralinguagemdeprograma cao.Observa coeseoutrosmeiosdecomunica cao.O texto e completado com observa coes de dois tipos. Um dos tipos se chamaclaramenteobserva cao,ooutrosaoasnotasderodape.Vocedevelerasobserva coesnaordememqueelasaparecerem, massemlhesdarmuitaimportancianumaprimeiraleitura.16 SUMARIOParalhepermitirumabuscamaisacuradadeinforma c oes, olivrotemumndiceremissivoalfabetico,aonal,emquetodososconceitosquesurgemnasobserva coesseencontramindexados, deformaquevocepoderafacilmentere-tornaraelesquandoacharnecessario. Tambemseencontramindexadastodasaspalavras-chavedotexto.Quandofalamosusamosencena caoparacompletarosentidodaspalavrasusadas nodiscurso: mexemos as maos, ocorpoe alteramos aentona caodavoz. Parasuprirumpoucodesteteatrousaremosumaconven caotipograca:textoemit alicorepresentamaterialquevocedeveolhar comcuidado,possivel-mente nao esta denido ainda e estamos usando a concep cao intuitiva do termo.Quando usarmos texto tipografico estaremos fazendo referencia a um termotecnicojadenidoanteriormenteouconsideradobemconhecidocomotal. Aspalavras da linguagemc serao escritas no estilo tipografico. Quan-do usar-mosletrapequenaestamoslhequerendodizerqueoassunto epolemicoequehamuitomaiscoisaparaserditodoqueestamosconseguindodizernaquelemo-mento. Usamostextosublinhadoparachamarsuaaten caodeumdetalhequepoderiapassardesapercebido,temomesmosentidotextoemnegrito.Existealgumatecnicaparaprogramarbem?Bom, chamardetecnicaeumcertoexagero, masoquevamosdizeragoraerepetirumastantasvezesaolongodolivro,podeaospoucossetornarnumatecnicadeprogramac ao.O segredo consiste em fazerem-se pequenos programas. Costuma-se dizer queum programa nunca deve ser maior do que a tela do micro.E possivel programarassimcomaslinguagensquetemoshoje, porqueelassaomodularizadas, querdizer, umprogramaeumaglomeradodepequenos programas. Vocevai aospoucos entender o que queremos dizer, mas torne esta ideia uma obsess ao: nuncafa caumprogramaquepasseemtamanhodateladomicro.Omaiorproblemadeumprogramadorsaooserrosqueteimamemsees-conder, comoinsetos,nointeriordosprogramas. Osamericanososchamamdebugs. Quantomaioresosprogramas,maislugarosinsetosencontram paraseesconder, acredite. Quandooprogramacadotamanhodatela, agenteconseguerapidamentedetectarosinsetoseentaonaoenecessarianenhumatecnica de dedetizac~aopara consertarprogramas defeituosos. Mais `a frentevou chamar sua aten cao dos ambientes de programa cao com que voce podera tra-balhar, eles estao equipados com instrumentos para fazer esta dedetiza c aonosprogramas.Vocepode muitobemviver semestes instrumentosde an alisede pro-gramas seaprender, desde oincio, aprogramar bem, e, por outrolado, seoseuprogramafor ruim, nemelas adiantammuito... et aodifcil consertarumprogramamal feito,queemaisf acil re-aprenderaprogramarefazeroutroprograma.ParteIUsandososcomandosemPortugues17Captulo1Umaprimeirasuitedeprogramas1.1 Comorodarumprograma.Dependedoquevocedispoecomoambientedeprograma cao.Infelizmente alguns ambientes temmais o objetivo de se apoderaremdousuariodoqueajuda-loaserumindivduolivreecriativo. Mas,sevocecom-prou este livro, entao voce quer ser livre e criativo, logo se prepare para descobriras coisas por si proprio e conte com algum auxlio por parte deste livro, mas naoespere que o livrosejaumamuleta paraquemn ao quer superaras suaspr opriasdiculdades. Useoendere coeletronicodoautor1paratiraralgumasd uvidas,masfa caistodeformamoderada. Discutacomoutroscolegasquejadominamumpoucoassunto, esteecertamenteamelhorformadeevoluiremqualquerramodoconhecimento: trabalhoemequipe.Vamosdiscutiralgunsambientesdeprogramac ao,paraserfranco, tresam-bientes: C da Borland, C da Microsoft, eoC da Fundac~ao GNUdentrodeumambienteLinuX.Vamos dar discutir com mais aten cao o primeiro, C da Borland, que e consi-derado por todos trabalham como esta linguagem como o melhor existente paraWindows. Tambem existe um ambiente mais antigo, ainda em franco uso, que eTurbo C.OquedissermossobreoC da BorlandvalemuitoaproximadamenteparaTurbo C.OambientedoC da Microsoftsegueos padroes habituaisdeambientesgracosdentrodoWindows, deformasque, sevoceestiveracostumadoatra-blhardentrodestesistema,rapidamentepoderaadaptaroquedissermossobreC da BorlandparaoambientedaMicrosoft.Observe, entretanto, queestelivronaoeummanual paraestesambientes,esimumlivroparaensina-loaprogramaremc, [email protected] CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMASsobreambientes dedeterminadospacotes, temqueser breve. Alemdomais,todos estes pacotes computacionais temmanuais quelhepoderaoapresentarsuas possiblidadesdeformamuitomais efetivadoquenos poderiamos fazeraqui.Amelhorformaparadominarestesambientesintegradosdeprograma caoconsisteemgastaralgumtempodescobrindoafuncionalidadedosbotoesqueeles oferecem. Voce podera fazer isto com tranquilidade e sem o menor receio deestragar o sistema, porque ele foi feito para ser usado. A piorcoisa que poderiaacontecer seria que voce apagar algumprogramagravando outropor cima, e istocomcertezavaiaconteceremalgum momento,portanto emelhor queaconte calogonocome coquandooprejuizoaindaserapequeno... Portantopercaalgumtempoexperimentandoosbotoesdoambienteintegrado.Os dois outros ambientesserao apenas citados, se voce n ao tiverop cao paratrabalhar emLinuX, deveracompletar oconte udodestelivrocomomanualdoCcorrespondente, mas que tranq ulo, as diferen cas s aopequenas e saoimportantesapenasnocome co.1. OambienteBCSuponhamosquevoceestejanoWindowsequeestejausandooBC, BorlandC. Comojadisse, gastealgumtempoparareco-nheceroambienteintegrado2doBC, oIDE3. Elesechamaassim,ambi-enteintegrado, porque lhe ofereceum atelier onde produzir os programas,guarda-los,eautomaticamenteroda-los. Observoquevocetambemcorreoriscosetornarexcessivamentedependentedoambienteintegrado, pro-cureevitarestadependencia, efa caumusointeligentedoambiente, aospoucosvocemesmoveraoqueestaadvertenciasignica.Assim que voce tiver gasto uns quinze minutos experimentando o ambienteintegrado,passeparaoquartoitemdestalista.Ao estabelecer quinze minutos estamos exatamente querendo lhe dizer quenao procure entender tudo que se encontra `a sua disposi c ao dentro do am-bienteintegrado, e voce logo vai ver que, se aprender a programar correta-mente,muitas dasferramentasdisponveis sao in uteis, e,pelo contrario,sevocevieraprecisardelasistosignicaqueestaraprogramandomal....easerapreciso,defato,usarestasferramentas.Partedoquehadisponvel noambienteintegradosolheser a utilmaisafrente, quandoseusprogramasganharemmaisdensidadeejaestiveremcaminhandonadire caodeumprojeto.Digamosque,nomomento,omaisimportante eaprenderaabrir um arquivo, (codigo fonte), encontrar um arquivo no disco; Paraisto useobotaoFile. Experimenteagora,clique nobotao evai cairummenucom(a) new, (novo)sevocequisercome carumnovoprograma. Nuncafa ca isto! Entre os meus programa tem um que se chama esqueleto.c,2muitosemelhanteaoambientedoTurbo C3IDE-IntegratedDevelopmentEnvironment1.1. COMORODARUMPROGRAMA. 21comeceabrindoesteprogramaparanaocome cardozero... Crieum esqueleto.c para voce.... Veja abaixo o que voce pode fazercomesqueleto.c!(b) open para voce abrir um programa existente no disco. Voce podeindicarocaminhoondeoBCdeveprocuraroarquivo;(c) saveparavocegravar oprogramaqueestiver escrevendo, ob-servequebastaacionarF2(d) save as, (gravar como), para voce escolher um outro nome de ar-quivo onde gravar o programa. Use esta op cao com o esqueleto.c.Abraesqueleto.ceogravecomonomequedesejar. Vocejateraonovoprogramanasuafrentedepoisquezeristo. Expe-rimente,abraesqueleto.ceogravecomoteste.c.(e) change dir e para mudar diretorio, provavelmente pouco util nocome co.(f) print para enviar para a impressora uma copia do programa queestivernatela.(g) DOS shell para usar o DOS, pouco util para os usuarios do windows...(h) quitquandovocequiserirembora... procurarumapalavranumarquivoetrocarpalavraserradaseistovoce vai fazer com o botao search, (procura). Nos editores de texto,emgeral istose fazcomobotaoedit, aqui nao. Se voce quisertraduzirparaoinglesosnossoprogramas,vaiusarestebotao. Neletem(a) findparaprocurarumapalavra.(b) replacepara procurar e trocar palavras. Vaoaparecer doiscampos, noprimeiroparavoceindicarqual apalavraquedevesertrocada,nosegundo,oqueadevesubstituir.Ha varias op coes para voce ligar ou desligar sensvel `a mauscula,palavras completas, express~oes regulares, pergunta ao trocar,forward(pra frente),backward(pra tras),from cursor (a par-tirdocursor), entire scope(nodocumentotodo), OK, changeall(mudatudo),cancelehelp...(c) go to line number(vai paraumalinhaden umero), eesperaquevoceindiqueon umerodalinha. rodar o programa guardado num arquivo. Voce vai usar o botao run.Quandoclicarcaiummenucontendo(a) runquevairodaroprograma(b) program reset,botaoimportantssimo.Quandovocetiverrodadoumprogramae, depois, zermodi-ca coes,sepedirpararodar,oBCvairodaroanterior.Cliquenoprogram reset- (renovaoprograma), edepois norun.Este e um erro comum, se voce alterar um programa e tudo voltaracontecercomoantes,selembredefazeroreset.22 CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMAS compilarumprograma. Vocevai fazeristocomobotaocompile.Cliquenobotaoeaocairomenu,escolhacompile.congurarosdiretoriosdetrabalhoSevocetiverinstaladoopacoteusandooinstalador entaonaotemporque sepreocupar comesteitem. Sesuainstala caonaoforapadronizadavocecorreriscosdeque o C da Borland nao encontre os arquivos necessarios. Neste casovoce deve ir ao botao Options, la escolher a Directories (diretorios)e registrar cuidadosamente a arvore dos diretorios onde se encontramosarquivos. Vejanagura(g. 1.1)pagina22, comoseencontraFigura1.1: arvoredediret orios-BCorganizadaaarvoredediretorionomeumicrodetrabalho.Epre-cisoindicarodiscoetodoocaminhoanterioraosdiretoriosqueBCprocura:BGI BIN OUT BINOUT INCLUDE LIBAoabriroitemDirectoriesvocejadeveencontrarumase caodearquivos. Vejasetudoestadeacordocomsuainstala cao. helpC da Borland tem um auxlio (help) muito bom que e preciso apren-der a usar. Infelizmentenao ira funcionar com os programas escritosem portugues. Experimente o programa4primeiro01.c. O comando4osprogramasparaBCganharamnomesmaiscurtos, emvezdeprimeiro01.c, procureprim01.c1.1. COMORODARUMPROGRAMA. 23inicial doprogramaeclsscr();queserveparalimparatela. Co-loqueocursor sobre estapalavrae aperte ctrl-F1. Oresultadoeumapequena5janelacominforma coes especcas sobre este co-mando. Aprenda a fazer uso destas informa coes, elas sao um manualdalinguagemon-line. Parasairdohelp,acioneateclaESC.SevoceapertarF1viraomanualdoC da Borland.Eumconjuntode varias janelas descrevendo todaalinguagem. Eunaopoderiadeixardesugerirquevocesehabituassealerestemanual on-line.Infelizmenteemingles, masse vocenaose acostumar a,pelomenos,ler em ingles, cara cortado de grande parte das informa coes tecnico-cientcas. VocesaidomanualacionandoateclaESC.2. OambienteCdaMicrosoftSevoceestiverousandooMicrosoft C,tambemvocevai dispordeumambienteintegradobemparecidocomoambientedoBorlandC.Leiaoitemanterioregasteuns15minutosparaganharexperienciacomoMicrosoft Cedepoispasseparaoquartoitemdestalista. Oobjetivoprincipal e carregar um programa para dentro do editor de textos e depoisroda-lo. Valem as mesmas observa coes que ja zemos sobre a congura caodaarvoredediretorios. Nenhumsistema operacional pode advinhar ondeseencontramosseusprogramasouosarquivosdedados, tudoistotemqueserregistradonasop coes.Como sempre, o ideal e instalar os pacotes usando o programa apropriadoparaisto, eleseocuparadetodaacongura caobasica. Naofazeristoequererdoresdecabeca. Sevoceforumusuarioexperiente,podera,possi-velmente,brincarcomacongura cao,casocontrariouseosinstaladores.3. EmambienteLinuxEmgeral ningueminstalaLinuxmanualmente6,tudoefeitoporuminstaladorquevemjuntocomadistribui caoadqui-rida. Estesinstaladores, habitualmente, deixamalinguagemcinstaladacorretamente,atemesmoporquecealinguagemnaturalparaLinux,demodoque, tudoquevocetemquefazeretrabalharcomseusprogramasnoseudiretoriopessoal.EmLinuXvocecontacomdiversos ambientes integrados, porexemplo,wpe,xwpe,xcoral,xemacsouoespartanojoe,paracitaralguns.Emalgunsdelesvocedeveindicaromodocomquedesejatrabalhar, omodoC. OxemacsentranomodoCautomaticamentesevoceabrirumarquivocomextensao.c. Seoxemacsestiverbeminstaladovocepodecontar com um ambiente integrado muito poderoso lhe oferecendo inclusiveumaajudaon-linesobreosconceitosdalinguagem. Aprendaausaroambienteintegradoquevocetiverescolhido. Sevocetiverpacienciaparausa-lo, teraumapoderosaferramentanasmaos.5sen aofuncionar,coloqueocursorsobreapalavra,cliquenobot aohelpe, nomenuquecair,escolhatopic search;procurehelpno ndiceremissivo6nemLinux,enemnenhumoutrosistemacomplexo24 CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMASSe tiver escolhido joe a voce vai penar um pouquinho mais, mas foi porquevocemesmoquis...euusoojoeemedoumuitobem. joeeumeditordetextosmuitopoderosomasdifcil deusarpois eorientadoacomandosnopadraodoseditoresdaBorland, doTurboCoudoTurboPascal, ouainda dowordstardos anos80 quefoium poderoso ambientede edi caoparaaquela epoca.Ainda existe uma outra possibilidade, seria usar o vi, mas se esta for a suaescolha,entao,foraded uvidasvocepertenceafac caomaisxiitadoUnixe eunao tenhod uvidas de que voceesta lendoeste livro somente para sa-can(*) o autor... porque certamente voce deve ser um exmio programadoremC.4. Come candoatrabalhar Suponhamos que voce ja tenha ganho experien-ciacomoambienteintegradodesuaescolha. Abraagoraumajaneladeedi cao. Escolha o primeiro botao `a esquerda onde estiver escrito FILEouARQUIVO.Seoratinho7naoestiverdisponvel, vocepodechegaraomenusuperiorcomF108edepois manipularos botoes domenuusandoas setas paraesquerda,direitaouparabaixo.Cliquecomoratinho, (oucomasetaparabaixo) eescolhaopenouabrir, paraabrirumdosprogramasquevocejadevetergravadonoHD. Esteincioserasemelhanteemtodososambientes. Escolhaopri-meiroprogramaabaixoerode-o. OsmanuaisqueacompanhamBCouMicrosoftCtrazemprogramasbemelementaresdotipoprimeiro.celhe informam como roda-lo.E tudo que voce precisa para come car, depoisaos poucos voce ira aprendendocomo usar melhor o ambiente ate o limitedonecessario,(ousepreferir,queumexpertnousodestesambientes...).5. EmLinuXacoisapodesertaosimplescomoescrevernumashell9gcc -v primeiro.c -oprimeiroougcc -Wall primeiro.c -oprimeiroemque gcceonomedocompiladorproduzidoedistribuidopelaFunda c aoGNU,gindicaisto,ccsigncacompilador c. -vesuasolicita caodeverbosidade,vocedesejaqueocompiladorlhedigaoquezer. Eviteestaop caonocome co,paranaoseafogarnasinforma coesquelheseraoapresentadas. Use-Wallemvezde-v.7tambemchamadomouse....8emalgunscasosser acomF9, ESCouTAB, semd uvida, emelhorgarantirqueoratinhofuncione...9uma areadetrabalho1.1. COMORODARUMPROGRAMA. 25 -WallParecidocom-v, mas lheapresentaapenas as reclama coesmaisimportantes,muitobomparaquemseinicia. primeiro.ceonomedoarquivo-fonte10. -o e a op caode compila cao queindica qual e onome doarquivoquedeverasercriado. Nesteexemploescolhiprimeiro.EmprincpiooBorlandCaceitaalgumacoisadotipo:bcprimeiro.cparafazer oque descrevemos acima, produzindoumarquivochamadoprimeiro.exe. Porem, voceteradiculdadescomocaminhoparaqueBCencontre oprogramaquevocedesejacompilar. Aformamais sim-pelsdeusarBorland C emesmodentrodoambienteintegradoondevocefacilmente congura os diretorios em que se encontram os seus programas.Vamos supor o uso do ambiente integrado11. Abra um programa, prim01.c,por exemplo. Com o programa visvel na janela de edi cao, clique no botaoRUN e seu programa sera compilado e em seguida executado. Os programasdeste livro podem ter12um defeitoquesera precisocorrigir,para queelesfuncionembememC da Borland. Vamos descrever oproblemaeasolu cao: Quando um programa termina de ser executado,dentrodo ambienteintegrado, o ambiente automaticamente retorna ao texto do programa(codigofonte). Conseq uencia,vocepode naoveroresultadodopro-grama. Paraprogramapequenos, comoosnossosprimeirosprogra-mas,vocepodecarcomasensa caodequenadaaconteceu... De fato isto nao e um problema, voce logo veraque e uma vantagem,porque assim o ambiente o tras de volta ao texto do programa (codigofonte)colocandoumamarcavermelhaemcimadealgumerroqueocompilador tenhaencontrado. Mas se nao houver erros, e decepcionante... e voce poder a evi-taracrescentandonoprograma, antesdocomandoreturn13, oco-mandogetchar()Tentamos incluir emtodos os programas oco-mandopausar()que eumaredenic aodogetchar(),maspodere-mosteresquecidoemalgumcaso. Senaoacontecernada, veriqueaonaldoprogramasenaofaltapausar()ougetchar().Dentro do Windows/DOS, um arquivo so pode ser executado,se terminarcomasextensoes.exe .com.bat10arquivofonte eoarquivoemqueseencontraoprogramaquevoceescreveu11IDE12tentamoseliminaresteproblema, masaindapodetercadoemalgumprograma, vocedeve,ent aoseralertado13queporregra,todososprogramasemCdevemtercomo ultimainstru c ao26 CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMASEm LinuX nao e o nome que indica isto, mas alguns dados internos do ar-quivoegccse ocupa disto, primeiro", compilado com as intruc~oesdescritas acima, sera um programa executavel.Observa cao: 2ErroseproblemasProblemasaousarBC. Observeque, aoenumerarproblemas, n aoestamossugerindoqueumpacote e debaixaqualidade. N aoexistemgrandes programas,semerros,a n aoseros programasmaismaissimples. Odefeitose encontra emesconderoserros. Istoedefatoindecente. Estelivrotinhamuitoserrosqueforamcorrigidoscomauxliodeleitoresamigos.Dicilmenteconseguiriamoslistartodososproblemas, masindicaremosal-gunsmaisimportantesnomomentoapropriado,comoagora.Quando voce rodar um programa, se zer uma alterac ao no mesmo, observe oitemprogramreset(re-inicializa caodoprograma) dentrodomenuRUN.Comfreq uenciaocompilador guardanamem oriaavers aoanterior doprograma.Eisaraz aodestebot ao. Aperteobot aoantesdevoltaracompilarourodaroprograma.Sevoceaindan aoapertouemtodos os bot oes doambienteintegradoqueestiverusando,faca-oagora,parapelomenosveroqueelescontem.Sevocen aoalterar nada, n aoir aestragar nada, tambem...olhar n aofazmal14.Vocabulario: 1compilar,compile,execut avel,rodar,runcompilaremingles, compile, eumadasfunc oesdocompilador, fazerumaan alisesint aticadoc odigofonteparavericarseasregras(sintaxe)da linguagem de programac ao foram todas respeitadas. Se isto for verdade,ocompiladorcriaumexecut avel.execut aveleumarquivoqueosistemaoperacional consideraquepodefa-zeralgumprocesso,produzirumresultado. Este eoobjetivoprincipaldosprogramasdecomputador...esteconceitoseop oeaodec odigofonte. Aocriarumexecut avel, esteprogramapoder aserexecutadoemoutrocom-putador,querodaomesmosistemaoperacional. Sevocetivercompiladocom o BC, poder a rodar o programa em qualquer computador sob Windows.Sevocetivercompiladocomgcc,poder arod a-loemqualquercomputadorsobLinux15.c odigofonteeotextoquevoceescreveucomoprogramaegravouemumarquivonodisco. Eleprecisasercompiladoparaquesejageradoumexe-cut avel queosistemaoperacional ir apermitirquerode.rodar,eminglesrun,executarumprograma.Agoravamosapresentar-lheumblocodeexerccios. Vocen aoconseguir aaprendernadasemfazerexerccios,muitomenospoderaaprenderaprogramar14algumasvezes,talvez...15existeumcompiladorgratuito,djdevparaDOS/Windows, vejano ndiceremissivo1.1. COMORODARUMPROGRAMA. 27semfazerexercciosdeprogramac ao16. Agrandemaioriadosprogramasdestelivro, saoexerccios. Os programas dialogamcomvoce pedindoque vocevoltealeroprogramaecorrijaerrosquedeixamosnosprogramas. Emgeraloprogramaseguintecontemacorre caodeumerro,emaisoutroerro...Exerccios: 1OsprimeirosprogramasOobjetivodesteblocodeexerccioseacompreens aodoprogramaprimeiro.cVamosent aopedirquevocerodeeleia,nesta ordem, os programas primeiro01.ca, primeiro02.c, ...primeiro07.c que ir ao desembocar emprimeiro.c que se encon-traeditadoaseguir.apara DOS,Windows, use os programas comnomes curtos, prim01.c,prim02.c,. . . porqueprimeiro01.c seconfundecomprimeiro02.c1. Rodeedepoisleiaprimeiro01.c.gccprimeiro01.c-Wall -oprog./prog172. Volteaarodar eler primeiro01.cprocurandoentendercadalinhadecomando do programa. Em particular leia os coment arios, o texto inicialdo programa, e veja como ele se encontra destacado do corpo do programa.Analiseoobjetivodoscoment arios,inclusiveoregistrodequeoprogramacontemerros.3. Corrija o coment ario de primeiro01.c indicando qual e o erro o programacomete: afaltaden.4. Rodeedepoisleiaprimeiro02.c.gccprimeiro02.c-Wall -oprog./progAltereoprograma, comoelemesmosugere, etentecompil a-lo, analiseamensagemdeerro. Experimenteapagaralgunsponto-e-vrgulas, com-pileeanaliseamensagemdeerro. Afaltadeum unicoponto e vrgulapodegerarumaimensid aodemensagensdeerro. Experimente,apague18umponto-e-virgulaecompileoprograma. Estaeumadiculdadequeos compiladores tem, antes se perder na leiturade uma enxurrada de men-sagensdeerroveriquesen aofaltaumsimplespontoevrgula.5. Rodeoprogramaprimeiro03.c. Elemente,corrija-o.16repetiremosmaisaindaalgumasvezesestaobserva c ao, paraconscientiz a-lodequen aoser aapenaslendo,queaprender aaprogramar17seosistemaestiverbeminstaladon aoser anecess ario./,bastar aprog...18vocen aoprecisaapagar,bastacolocar//nafrente28 CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMAS6. Rodeosprogramasprimeiro04.c, primeiro05.cefacaoqueelessuge-rem.7. Leia e rode o programa primeiro06.c. Este programa e umcontra-exemplo. Ficoumuitogrande, saiudatela. Vejacomoeleeextranho,temumalinhaden umero12queaparecev ariasvezes,istoeumsintomadeimperfeic ao...8. Melhorearedac aonoprogramaprimeiro07.c,temletramasculadepoisdevrgula,eprecisadealgumasmundacasdelinhas... mastomecuidadoparaqueoresultadon aoqueilegvel...9. Umexerccioimportante: comore-utilizarumprograma. Escolhaalgumdosprogramasquevoceacaboudeusar, algumquelhetiverparecidoes-pecial. Grave-ocomoutronome,porexemploteste.c19. EmLinuxser aomesmosevoceestiverusandoalgumaIDE,ounuma,20shell,digitecp primeiro01.c teste.cAgoravocetemomesmotextodeprimeiro01.c(ouprim01.c) dentrodo arquivo(ainda n ao gravado)teste.c. Rode este novo programadepoisquevocenelefacaalgumas modicac oes quelheparecaminteressantes.Esteeometodoque n os, programadores, usamos paraconstruir novosprogramas...nuncacomecamosdozero.No ultimoexercciolhecontamososegredodecomoescrevernovosprogra-mas. Deixe-mecontar-lheoutro. Entreosprogramasquevocerecebeuest aodois iguais, esqueleto.ce padrao.c. Saoesteprogramas queusamos paracome caraescreveroutro.Crieosseus, comosseusdados, ecomasestruturasdeprograma caoqueconsiderarbasicas.Otextoabaixo eumacopiadoarquivoprimeiro.cquevocetemnodisco.Nelenaohaossinaisdeacentua caodalinguaportuguesa, eumprogramadecomputadorenaoumtextoemnossalingua./Programaprimeiro.cAssunto: Escrevealgumasfraseserecebeumainformacaopeloteclado.Programacomerrosnasaidadedados,naoimprimeoqueseespera.COMENTARIOEstetextoinicialdoprogramaehumCOMENTARIOeseencontrademarcadocombarra+asterisconoinicioedepoisasterisco+barraaonal.Programadeneavariavelcoisacomoumvetordecaracterescom30coordenadas.porTarcisioPracianoPereira-10licoesparaaprenderCSobral,julhode2001-UVA///istoaquitambemehumCOMENTARIO19noBC escolha save-as euse a caixa de di alogo queaparece para, nela,escreverteste.c20 areadetrabalho1.1. COMORODARUMPROGRAMA. 29#include < stdio.h >#includetraducao.hprincipal()iniciopalavracoisa[30]; //variavelimprima(%sn, Escrevaumafrasenoteclado,);imprima(%sn, podeseroseunome,porexemplo: );ler(%s,coisa);//leituradedadospelotecladoimprima(%sn,-);imprima(Voce escreveu: %s%cn,coisa, ?);imprima(%sn,-);imprima(%sn,Agora leiaoprogramapara);imprima(%sn,acompanhar acriticaquevaiserfeita.);imprima(%sn,-);imprima(%sn,Observe quelernaoobedeceuaregra);imprima(%sn,de usododirecionador&deenderecos,);imprima(%sn,como anunciamosnotexto....);voltar0;//todoprogramadeveterminarcomestecomandomExerccios: 2An alisedeprimeiro.c1. Rodeoprogramaprimeiro.cedepoisoleia.2. Aocompilarprimeiro.c,vocerecebeuumaadvertencia:primeiro.c:22: warning: return-type defaults to intporquefoi omitidootipodeprincipal()eaonal ovalordevolvidoezero. Umconito. Corrijaisto,dadoumtipoparaprincipal():inteira principal()Aadvertenciasecomp oedetrespartes,separadaspordoispontosque eoseparadorocial doUnix: primeiro.conomedoprograma; 22alinhaemqueoerrofoidetectado; warning, umaviso. Seoerroformaisgraveser aerror.Eotipodedadosdafunc aoprincipal()quen aofoifornecido.Emctodasasfunc oesouvari aveistemqueterumtipo.3. Rodeoprogramaprimeiro.cdigitandooseunomesemespacos.4. Digite uma seq uencia de mais de 30 caracteres como resposta ao programa,eanaliseoresultado.30 CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMASAsolu caoparaqueocompiladordeixedereclamar contraprimeiro.cedenirinteira principal()Deixamos este erro car de proposito, para justicar esta observa cao. Ao mesmotempoacrescentamos: somentenasegundaparteequediscutiremosafundoaquestaodotipodedadosaqueseencontraafetoesteproblema.Infelizmentevamosterquetrabalharcomtipos de dadosantesdeconse-guirmos explicar tudodireitinho eis a razaodoerrotercado. Anal, errossaopartedoaprendizado...Sevocequiseravan caresteassunto,vejaocaptulo7ondediscutimostiposdedados, vocedeve, agora, fazerumaleiturarapidadaquelecaptuloparaseinteirardestano cao.... evoltarlogoparaca.VoceestaaprendendoaprogramaremC,comoscomandostraduzidosparaoPortugues,eosprogramasemportuguesestaraorodando...Noproximocaptulotrabalharemoscomasuitedeprogramasprog*.c...ladiscutiremos estanota caoextranha, formatadores de dados que aparecemdentrodafun caoimprima(). Maspodefazerumaleiturar apidadocaptulo2agora.Exerccios: 3Alterandoprimeiro.cOsdois ultimosexercciosdestalistaest aoforadocontexto,eportantos aodifceisparaoiniciante. Elesseeoncontramaquiapenasparamostraralgumacoisadoquepodeserfeitocomc.1. Altereotextodentrodafunc aoimprima(),porexemplo,mandeescreveroseunome.2. Alteresubstancialmenteotextodetodas as func oes imprima()nopro-grama,porexemplo,mandeescreverosnomesdosseusamigoseamigas.3. Altereotextodasfunc oesimprimadoprograma,porexemplo,paraescre-verumapequenalistatelef onica. Podeserasualistatelef onicaparticu-lar...4. Voce viu que um programa pode colocar um texto na tela, altere primeiro.cparacolocarumtextoseunateladocomputador, porexemplo, umlem-brete sobre as coisas que voce deve fazer no dia. O execut avel assim criado,podeserincluidonoautoexec.batdoDOS/Windowserodarsemprequevoceligarocomputador.1.1. COMORODARUMPROGRAMA. 315. **foradocontextoRodeoprogramaagender01p.cedepoisoleia:gcc -Wall -oprog agender01p.c./progA primeiralinhaservepara compilaro programa,querdizer,pediraogccque crie um programa execut avel a partir do c odigo fonte. A segunda linhaeparaexecutaroarquivoexecut avel prog.6. **foradocontextoSevocequisercomporsualistatelef onicaemdisco,vejaagender01p.c. Tentemodicaroprograma, semsepreocuparcomentende-lo,efacasuaagenda. Seprecupeapenascomalterarasmensa-gensdentrodasfunc oes imprima(), imprimearq(). Oarquivoprodu-zidopeloprogramapoder aserlido,eeditado,depois,comqualquereditordetextoseenviadoparaaimpressora.32 CAPITULO1. UMAPRIMEIRASUITEDEPROGRAMASCaptulo2OsegundoprogramaemC2.1 Programaseerros...Observa cao: 3Regrasdetrabalho Vamossemprecomecarporlheapresentarumprograma; vocedevedigit a-lo1numeditordetextos2; depois rode oprogramacomocompilador que estiver ` asuadisposic aoeemseguidaleiaoscoment ariosquefaremosetambemoscoment ariosfeitos pelo compilador, sobretudo porque voce pode ter esquecido de digitaralgumdirecionadordemem oria& ; tomeainiciativadefazeralterac oesnosprogramasusandoaexperienciaqueforadquirindo,masgrave-oscomnomesdiferentes;Aquivocevaiad-quirirexperienciasobreumerromuitocomum: perderprogramas porquegravouporcimaalgumoutroprograma. Estaeumadordecabecaco-mumatodososprogramadores. Tenhaporh abito fazerbackup,c opiadereserva, dosseusprogramas. Tenhaocuidadodegravaraalterac aodeumprograma,comoutronome:prog01.c prog02.c ...prog101.cevocevai sempreencontraromais recente, oualgummais antigoquefuncionavataobem. . . aos poucos deixaremos de transcrever os programas no livro, e mais pr aticoquevoceleiaosprogramascomumeditordetextos, inclusivequandoosrodar,einteressantete-losnumatelaaolado.1Todososprogramasdolivroseencontramdistribuidosemdiscoparaeconomisar-lheadigita c ao. Bastacarreg a-los paraoeditor.2graveosprogramasnomodotexto, (semacentos)SevoceestiverusandoalgumaIDE(ambienteintegrado)oeditorepr oprioparaprograma c ao. Seestiverusandoalgumeditorcomoword,tomeocuidadoparagravarosprogramasnomodotexto.3334 CAPITULO2. OSEGUNDOPROGRAMAEMCExemplo: 2Oprimeiroprograma/*Programaprog01.cAssunto: leumapalavrapelotecladoeaimprimeporTarcisioPracianoPereira-10licoesparaaprenderCSobral,julhode2002-UVA*/#include//(1)leituradabibliotecastdio.h#includetraducao.h//(2)leituradabibliotecatraducao.hinteiroprincipal()//(3)iniciodoprograma, tipopalavrainiciopalavracoisa;//(4)declaracaodevariavelimprima(%s\n,escrevaalgumacoisapeloteclado,palavra,numero...);//(5)ler(%c,&coisa);//(6)imprima(%s%c\n,Oprimeirocaracterdacoisafoi>,coisa); //(7)imprima(%s\n,==========================);voltar(0);//(8)m//(9)Coment ariosdoprograma.Os comentarios s aoparte integrante de umprogramae de formaalgumadevemser considerados umapendiceextraperfeitamentedispensavel. Umprogramae uma peca de abstrac ao, escrito emlinguagemtecnica, emgeralmuitoconciso, e, consequentemente, difcil deser lido. Os comentarios vemsupririnformac oescomplementaresetornamoprogramalegvel.Coment ariospodemsercaracterizadosdeduasformas:Comduasbarras, //. Ocompiladorignoraoquevenhadepoisateonal dalinha.Entreossinais/ e* nocomeco, erevertidosaonal * e/. Vejalogonoiniciodoprograma.Quando se vai escrever um comentario longo, este segundo metodo,e o mais ade-quado. Pequenos coment arios,comoacima,depoisdeumcomando, e preferivelusaroprimeirometodo. Masadecis aoeoestilos aoseus. H aprogramadoresqueusamcolunasdeasteriscosnoincioenonal decadalinhadeumblocodecoment ariosparatorn a-lomaisostensivo. Valetudo,desdequevocen aoseatrapalhe(nematrapelheosoutros)comapoluic aovisual...Oscoment ariosservemparaexplicaroprograma(inclusiveparaopr oprioautor...) outambemcomopartedoplanejamentodotrabalho. Noiniciodoprogramaos coment arios dizemoqueoprogramafaz, quemfez oprograma,asmodicac oes que se pretendem fazer nele, os defeitos que ainda existam, etc...2.1. PROGRAMASEERROS... 35Oscoment arios quezemos usando //tem umanumerac aoque vai servirdereferenciaparaumasec aodeobservac oesquecostumamosfazeraonaldosprogramas. Veja, porexemplo, musica.c, n aotentecompreenderoprogramaagora,vejaapenascomoestamosusandooscoment ariosnumerados. E,claro,vocepoderodareleroprograma, masobserve(leiaoprograma)elenecessitaquenosistemaexistaumprogramachamadobellqueacioneoalto-falantedocomputador. Troque bellpelonomecerto. Seesteprograman aoexistirnadavaiacontecer.1. AlinguagemC, comotodalinguagemmoderna,eexpansvel, querdizer,vocepodecriarnovoscomandos,s aoasfunc oes. Cadafunc aoeumnovocomando. Estescomandosnovoscamcomfreq uenciadentrodearquivoschamadosbibliotecas. Oprogramacomecalendoabibliotecapadr aodoCparaInput/Output-< stdio.h >Entrada/Saida. Leiatambemanossabiblioteca, traducao.h, emque zemos as traduc oes dos comandos dalinguagemC. As bibliotecas s aoarquivos comaextens ao.he camcolocados emdiret orios especcos que o gcc sabe quais s ao. Quandoquisermosincluirumabibliotecanossa, comotraducao.h, temosqueusaraspasemvoltadabibliotecaeent aogccvaiprocur a-lanodiret oriodetrabalho,ounodiret orioindicadopelocaminhoqueindicarmos:# include "/home/meunome/C/minhabiblioteca.h"2. errograveconcluirdaobservac aoanteriorquevocepodeconstruirumalinguagemcespecial paravoce,comseuspr oprioscomandos.Everdade,mas seriain util. Linguagens, mesmodecomputador, existemparaqueas pessoas se comuniquem. Oconhecimentoe social e n aoindividual.S opodemosseravancadosnamedidaemqueogruposocial osejajuntoconosco. N aoteriasentidocriaroseu c! Mastemsentidopensarmos emprogramar em Portugues, aqui no Brasil, e seguir entendendo programac aoemIngles.3. Exerccio: Experimente! Apague#include< stdio.h >erodeoprograma:gcc -Wall prog01.c -oprog.Comoresultadovocevai receber ainformac aoque printf(), scanf()est aosendousadospelaprimeira:prog01.c:14:warning: implicit declaration of function printfOgcc vai ignorar, pedantemente, a nossa traduc ao imprimae vai lhe fa-lardeprintffazendoomesmocomscanf. Porquen osn aotraduzimosocompilador.4. estruturadeumprogramaH adoistiposdefunc oesnumprograma:36 CAPITULO2. OSEGUNDOPROGRAMAEMCmain()Afunc aoprincipal(),easoutrasqueaprincipal()chama.Todoprogramatemqueter umafunc aoprincipal()edepois deveteroutrasfunc oesqueexecutamtarefasespeccas,tarefasauxili ares.Nesteprogramaafunc aoprincipal()chamaapenasoutrasfunc oesqueseencontramdenidasnabibliotecastdio.h. Portantoasoutrasfunc oespodem j a existir em alguma bibilioteca e inclusive podem j a ter sido usadasetestadasporoutroprograma(melhorainda).5. Cadafunc aoeumpequenoprograma. Neste sentidoalinguagemc j anasceumoderna,no espiritodeprogramac aomodular. Umprogramaseconstituiessencialmentedesuafun caoprincipal queir acolocaremac aoos demais atores, as outras func oes, que foramfeitas sob-medidaparaexecutarpequenastarefasespeccas. Assim,umgrupograndedefunc oespodeexistirparacompor, quandonecess ario, umdeterminadoprograma.Istosechamahojereciclagem de programasouemingles,re-use ofprograms.6. Vari aveis, func oes, temque ter umtipo. Asintaxe da declarac ao devari aveise< tipodados >< nomedavariavel>;Podehaverv ariasvari aveisdomesmotiponamesmadeclarac ao,separa-dasporvrgulas.7. leia acima... A linguagem C n ao distingue vari aveis e func oes em primeirainst ancia. Inclusiveocompilador, quandoencontrarerros, vai sereferir` asvari aveiscomofunc oes.8. Afunc aoimprima() (printf()) exige que comecemos dizendoque tipodedadoslhefornecemosparaimprimir: %s, querdizerquevemumafrase, (string), paraser impressa. Osmboloneumcomando:mudancadelinha. Vocever adepoisquenn aoeumcomando,agoraadiantapoucodiscutirestadiferencasem antica.9. ler() eatraduc aodescanf() queeumcomandomuitor apidoepodeconduz-loaerros. Use leia()(fgets()) comovoce ver anos pr oximosprogramas. Usamosler()paraqueoprogramacasse simples,mas e umdefeito.Warning,Warning,Warning,Warning....!!!!Rode prog042.c3paraver oriscodoscanf(). Leiaos coment arios,dentrodoprograma.10. Aqui imprima temdoisformatadoresdedados, %dparainteiros, e%sparafrases(strings).3nodiret orioBCesteprogramasechamaprg042.c2.1. PROGRAMASEERROS... 3711. Todafunc aodalinguagemCdeveterminarcomocomandovoltar()(return), e,comfrequencia, comumn umero. Maisafrentevocevaiverque isto e falso... Este n umero pode ser usado para fornecer ao sistema in-formac oes sobreocomportamento dafunc ao,erroscometidos porela,(naverdadepeloprogramador...). Devolvendozerosignicaquetudocorreubem.12. Osalgoritmoscomecamcominicio,,eterminacomm. Deformamais precisa, Os blocos logicos comecamcominicioeterminamcomm,.Vocabulario: 2Blocol ogicoevari avel local blocologico e um conjunto de a coes, de comandos, que tenham um objetivoespecco. Uma func ao e um bloco logico, mas dentro de func oes voce podeencontrarmaisblocoslogicos.Eumconceitodifusomasqueaospoucosvocecompreender a.Sempre que voce encerrar um conjunto de comandos entre chaves voce ter acriado,paraalinguagemc,umblocol ogico.Vejaaimport anciadestefato: noinciodeumblocologicovocepodedenirvari aveislocaisquedeixamdeexistir` asadadobloco. variavel local s aovari aveiscriadasdentro4deumblocol ogico. Elastemsua existencia associadas ao bloco l ogico em que forem criadas. O conceitoqueseop oeaesteeodevariavel global. Podemosdizerquevocedeveevitar ousode vari aveis globais e se habituar ausar apenas vari aveislocais. variavelglobalS aovari aveiscriadasforadeblocosl ogicosequeportantocam sendo reconhecidas por distintos blocos l ogicos. Algumas vezes somosforcadosacriarestetipodevari avel,entretanto devemosinclusivedeixarindicativosnocabecalhodoprogramaapontandoaexistenciadelasnumatentativade elimin a-las, se possvel. Comoestas vari aveis temumaexistenciaampla,h ariscosquenoplanejamentonosesquecamosdesuaspresencas e elas, assim, interramnos resultadode forma inexperada.Vari aveis globais s ao um risco a ser evitado. Quando voce tiver que deniruma vari avel global, indique isto nocabecalho do programa como umaformadeavisodeexisteumproblemanoprograma.Nodiscoqueacompanhaestelivro,haumdiretoriochamadoBCemqueosprogramas foram testados em ambiente Borland, BC ou TC. Tambem os nomesdos programas cam dentro do limite do DOS de oito caracteres. Programas quefujam a este padrao tem seus nomes corrompidos pelo ambiente de programa caodaBorland.4noinciodeumblocol ogico38 CAPITULO2. OSEGUNDOPROGRAMAEMCExerccios: 4Alterac oesnoprograma5prog01.c1. Compileerodaoprograma6prog01.c.2. Se voce digitou uma palavra, o programa guardou somente a primeira letra.Experimentedigitarn umeros,analiseoresultado.3. Altere7prog01.c,subsituapalavra coisa; // (3) declaracao de variavelporpalavra coisa[30]; // (3) declaracao de variavel,agoracompile-oevejaqueoresultadofoidesconcertante,umamontanhadeerrosforamanunciados.gcc-Wall -oprogprog01.cprog,paraexecutaroprograma.Leiaorelat oriodeerrosevejanospr oximosexercciosasada.4. Substitualer("%c",&coisa); // (5)imprima("%s%c\\n","A primeira letra foi -> ",coisa); // (6)porler("%s",coisa); // (5)imprima("%s%s\n","A primeira letra foi -> ",coisa); // (6)evejaoresultadodigitandoumapalavracomate29letras.5. Digitetambemumapalavracommaisde30letras. Digiteduaspalavras,quer dizer, duas strings separadas por um espa co,porexemplo. Analiseporqued aerrado.6. Facaalgumasexperienciasalternadoastreslinhasaquidiscutidasevejaos resultados. Mas, somente rode osprogramas se o compilador n ao apon-tarerrosouwarningsporqueesteprogramausavetores decaracteresques aoponteiros. Ponteirosdevemserusadoscomcuidadoporquefazemacessodireto` amem oriadam aquina.5nodiretorioBCesteprogramasechamaprg01.c6emBCprg01.c7nodiretorioBCesteprogramasechamaprg01.c2.1. PROGRAMASEERROS... 39Algopodetersadoerradoquandovocerodouesteprograma. Vamosana-lisaroquepodeteracontecido. Primeirovocepodeterdigitadoumn umero.Experimente,senaoofez.Se voce tiver digitado um n umero, o programa rodou, sem problemas, apesardequeelenaotenhasidofeitoparaisto. Observequefoiumerro8, porquesevocedesejassequeoprogramalesseumn umero,vocedeveriaterditoisto. Foiumerrodoprogramador, naodoprograma. Programasnaoerram, elesfazemapenasaquiloparaoqualforamplanejados9.Comoprogramamodicado, sevoce tiver escritoumafrasedeverdade,oprogramasoimprimiuaprimeirapalavra. Porquequandoeleencontrouoprimeiroespa coconsiderouencerradaaleituradavari avel coisa[30]e, natu-ralmente,somenteimprimiuaprimeirapalavra.Experimentecolocarafraseentreaspas,vejaoresultado.Li cao: 1Crodaaquiloquen aoseespera...UmdosmitosportrazdalinguagemCequecomelasefazemprogramasque rodam muito r apido. Isto pode ser verdade, e uma das raz oes se encontra nofatodequeocompiladoresperaquevocen aocometaerrosereduzaomnimoavericac aodal ogicadoprograma.EcomumsedizerqueumprogramaemCsemprefazalgumacoisa...mesmoque n aosejao que se espera. Iston aoe umdefeitodalinguagem,acontecequeCeconsideradaumalinguagemparaprogramadoresprossionais,poriston aotemsidoconsideradaumalinguagemparainciantes...O programa acima foi feito para escrever frases, mas escreve tambem n umeros.Numprogramagrandeecomplexoistopoderiaserumdesastre. Claro, opro-gramalhepediaparaescrever algumacoisa, iston aosefaz! Acomunicac aousuario-programador deve ser mais completa e sempre clara. Alemdisto opr oprioprogramadeveterrecursosdevericac aodoqueousu arioest afazendoedeveent ao orient a-loarepetiraoperac ao deformacorreta. Naverdadepro-gramass ofazemaquiloparaoqual foramplanejados.Observa cao: 4Coment ariosdosexerccios Haumadiferencafundamental entrepalavracoisa; // (3) declaracaode variavelepalavracoisa[30]; // (3) declaracaode variavel,No primeiro caso, Centende que coisa e um simples caractere, um dos 256 caracteresquevocepodeproduzircomoteclado.Nosegundocaso,Centendequecoisa[30]eumvetordecaracteres.Cenumeraos ndicesapartirdezero,quedizerquevocetemdireitodeusarcoisa[0],coisa[1],. . . ,coisa[29],coisa[30]e se ovetor estiver construidocorretamente, coisa[31]=\0 e o NULL, umcaracterespecialquemarcaomdosvetores.Voce naotemodireitodefazerusodeste ultimoespacodeformadiferentesemoriscodeerrosnoseuprograma,ecomosevoceguardasseumagarrafacheiadestampada...8 Eprecisodesmisticaroserros,errarenaturaldequemest aaprendendo,simplesmente.9temgentequedizdesenhados,quehorror.40 CAPITULO2. OSEGUNDOPROGRAMAEMCEste ultimocaracteresechamaNULLeserveparamarcaromdosvetorescorre-tamenteconstruidos. Claroquevocepodeconstruirvetoresincorretamente,correndoriscosdequeseusdadossemisturemproduzindoerros. Vejaadiferencaentreestasduaslinhas:ler("%c",&coisa);// (5)imprima("%s%c\\n","Aprimeira letra foi -> ",coisa);// (6)eler("%s",coisa);// (5)imprima("%s%s\n","Aprimeiraletra foi -> ",coisa);// (6)Oformatador%sanuncia`as funcoesimprima()eler()queviraumvetordecaracteresoustring.Aqui tambemse encontra uma dasdiculdades nouso deler() (scanf()). Esta funcaodalinguagemCemuitosensvel... elasempreguardaosdadosatravesdosseusen-derecos.Eoqueseencontraexpressoemler("%c",&coisa);// (5)quepoderamostraduzircomoguardeocaracterquevempelotecladonavariavel cujoendere coe&coisa. Tudomudaquandodeclaramospalavracoisa[30];porquecoisa[30],sendoumvetor,eumasucessaode30enderecos,paraC,umvetordeenderecos. Anteschamamosdevetordecaracteres. Mais afrentevocevai verqueexistemoutrostipos devetores.Todovetoreumvetordeendere cosdeumcertotipodedados. Aquiestamoscomumvetordecaracteres. Leiaarespeitodetiposdedadosnocaptulo7,masfacaapenasumaleiturarapida. Usaroredirecionador deendere cosnumendereco eerrado. Vamosdizeristodeoutraforma,usandoumalinguagemtecnica.1. Existemvariaveisdotipoendereco,saoosponteiros.2. Alemdistoprecisamosdeclararquetipodeponteiro. Leiamais arespeitonocaptulosobreponteiros,vejano ndiceremissivo.3. Quandoumavariavelforumponteiro,entaonaoseracorretousarodireciona-dor&nafrentedestavariavel emler() scanf(). Seriaomesmoquedizerguardeestedadonoendere coendere coX. Istojusticaquedeixemosdeladoafuncaoler() (scanf())nosprimeirospassosdousodalinguagem. Iremosfazerumusodeummetodomaiscomplicado, entretantomais seguro,evitandoestadiscussaoinicial deixando-aparaummomentoemqueoestudantedeCestejamaisavontadecomalinguagem.Rodeeleiaoprograma10probscanf.c. Sobretudoleiaos comentarios aonal doprograma.10dentro do BC o nome aparece cortado, tem mais de oito caracteres. Troque o nome arquivoparaprbscanf.c2.1. PROGRAMASEERROS... 41 Existe um compilador para a linguagem C, chamado checker que faz uma vericacao dousodamemoriapelavariaveisdotipoponteiroepodealertarparaproblemasdeixadosdentrodeumprograma.Sintaxe: checker-gccprograma.c[comandosdogcc] NaopudeencontrarumsimilarparaDOS,naoseiseexiste.Observa cao: 5 Programasrobustos.Agoracouclaroquenaoseesperaquevoceescrevan umeros. Masparafrentevocevaiaprenderacriarestruturasdecontroledeentradasdedadosqueaconselharaoousuarioare-escreveroquesepede, nocasodequeeletenharespondidocomalgumainconveniencia.Saometodos parafazer programas seguros, ourobustos. Est acedo, entretanto, paraumadiscussaomaisaprofundadasobreesteassunto.Vocabulario: 3Dados,vari avel dadosEcomplicadodiscutiroques aodados,umprogramatodopodeserumdado... massetentarmossimplicarascoisasparacomecaradiscu-tir,programasservemparamanipulardados,querdizertransformarumainforma caobrutaemumainforma caotratada, manipulada, lapidada...processada.Oprogramaprog01.cparecerdiculo, pedeumnomeevoltaaescreve-lonatela. Maselepoderiaterpedidooseunomeparacompararcomosdadosdeumbancointernodenomesamdepermitir-lheounegar-lheaentrada nosistema. Ent ao oseunome e umainformac aoque,comparadacomumbancodeclientes, dizsevocepodeoun aoteracesso` as outrasinformac oes. vari avel Paraguardardadossecriouumsistemaengenhosoqueusatresetapas.Umatabelaformadadepalavras, chamadasidenticadores, associa-dasaosenderecos, umatabeladealocac aoqueebasicamenteoquecadausu ario, ouprogramador, usa. Estas palavras s aochamadasvari aveis. Emcertaslinguagensestatabelasechamadeespacodenomes.Acadatal vari avel seassociaumenderecoinicial nosegmentodemem oriareservadoparatal ondeseinicia oconte udodavari avele, pelo seutipo, se calcula onde dever aterminar reservando-se opr oximoenderecoinicial deoutravari avel. Porestaraz aovocepre-cisadeclararotipodavari avel quevocepretendeusar.Umaassociac aodoselementosdoespacodenomescomseusrespec-tivos enderecos iniciais, chamada ainda de alocac ao. Esta alocac aoedinamicaporqueasvari aveiss aocriadasedestrudasportantoosenderecos iniciais mudam durante a execuc ao de um programa. Voce,e qualquer outro programador, n ao precisa se preocupar com isto, est aeumaatribuic aodosistema operacional.Emc, ousodoendereco, peloprogramador, eumadas caractersticasdalinguagemhavendoumtipoparticular devari avel queoperasobreo42 CAPITULO2. OSEGUNDOPROGRAMAEMCendereco,asvari aveisdotipoponteiro. Vocepodeprogramaremcsemusarponteiros, masoatrativoequepodemosacelerarosprogramascomseuuso, comotambem torn a-los mais perigosos. Como j adissemos, pegarnososeletricosdemal jeitopodelevar` amorte, masvocen aoprefereviver noescuro... aprendaausar ponteiros. Mas deixeparafazer usodelesquandotiverumacompreens aoseguradecomofuncionam.Veja um exemplo bem simples que mostra a importancia do uso de endere cosparaaceleraramanipula caodainforma cao.Exemplo: 3Usodeponteiroseavelocidade Pensenoseguinteexemplo, umenorme armazememque umainstituic aotemguardados todooseuacervo,tomemosocasodeummuseu.Semprenovositenschegameseriaimpossvel preverdeantem aoondecadaumdelesseriaguardado,inclusiveser aprecisoadquirirdevezemquandoumanovacasaparaabrigaroacervosemprecrescentedomuseu, (imaginequeosgovernantessepreocupamcomosmuseusesempreest aoliberandomaisverbaparaenriquecerainstituic ao...)Comomanteroacervoorganizado?Aspecasv aochegandoesimplesmenterecebemumn umerodeordem de chegada,eumenderecoemqueseencontramguardados(podeseraidenticac aodeumasalaemumdeterminadopredio).No m do dia a lista que identica os itens do acerto e novamente ordenada (porordemalfabetica)oquesignicaquesere-orientamos ponteirosentreobjetoseenderecos.Emuitomenospesadotrocaraindicac aopiano21casa10-sala30doquemantersempreopiano21nomesmolugar... quandohouverumcon-certoeforprecisolevaropiano21paraoaudit orio, olugardelen aoprecisacarreservado, outrosobjetospodemocuparoseulugar, edepoiselepodeserguardadonoutroenderecoeocadastrovaisimplesmenteserre-organizadocomatrocapiano21casa15-sala3porqueseriamuitomaisdifcil estarmudandodelugarpianos.Aexemplicac aoacimaseaplicaliteralmente aqualquer bancodedados,querdizerumprogramaqueassociedistintasinformac oescomonomesdepes-soasobjetos,endere cos,contasbancarias,porexemploumcat alogotelef onico.Umbancodedadoscain util sen aoestiverordenado, porqueent aosim-plesmenteosdadoscaramperdidos,imagineumcatalogo telef onicoemqueosnomesdosusu ariosn aoaparecamemordemalfabetica,seriain util!Masosbancosdedadoss aodin amicosnosentidodequesempreestamoscolocando novos nomes ou retirando nomes ou qualquer outro tipo de dados, con-sequentemente vivemdesordenados. Como os dados podem ocuparmuito espaconamem oriadocomputador, (igualpianos no acervodomuseu), e preferivelor-denar os enderecos que s ao relativamente pequenos. A entram os ponteiros paraaceleraroprocessamento.Observa cao: 6 Abstracaoevariavel2.1. PROGRAMASEERROS... 43Os computadores, atravez de varios sistemas de codigos, podemguardar informacoespraticamentedequasetodotipo. Apalavraabstracaoadquiriuumsentidonovocomaciencia dacomputa c ao,eladistingueasinformacoespeloqueseentendehojecomodenveisdeabstra c ao. Antesabstra c aoerasinonimodedifcil, hojecaracterizaonvel decomplexi-dadedeumconceitonosentidodequeelecomporteumaquantidademaiordeinformacoes.Porexemplo, umn umeroguardaumtipodeinformacaoquepodemosconsiderarcomodeprimeironvel deabstracao.Mas,umparordenadoden umerostemumnvelmaiordeabstrac ao porquepodeguardarinformacaonaonumericas comoenderecos deapartamentosdeumprediodevariosandares.Emternosordenadosden umerospoderiamosguardarainforma caodequantoshabitantesexisteporapartamento... Nosdois ultimoscasososn umerosdeixaramdesern umerosepassaramsercodigos.Estaeevolucaodosn umeros, quevistoscomocodigos, criamnovostiposdedadosesucessivosniveisdeabstracao. Vejaquen umerodetelefonen aoen umero,esimcodigo...vocenaosomariadoisn umerosdetelefone,somaria?Amemoriadeumcomputadortemumenderecamentodinamicosemelhanteadeumedifciodeapartamentos. Din amicoporqueacadainstantemudam osenderecos; oshabitantes; otamanhodosapartamentos.Os habitantes sao as variaveis. Aqui, `a diferenca como que ocorre numedifcio deapartamentos, o tamanho dos apartamentos se adaptamao tamanho das variaveis... Aodenirumavariavelseestabeleceoenderecodopontoinicial dememoriaqueelavaiocuparedotipodedadoqueelavai representar, (ouconter, comsediz comumente), eassimsemarcaoinciodeumaproximavariavel. ouooutroenderecoinicial. Seosistemaoperacionalforbemfeito,elecamonitorandoousodasvariaveispararealocaroespaconamemoria,levarparaodisco,outrazerdevoltadodisco,p aginasdememoria.Vejaanovaformula caodeprog01.cprog02.c.Primeirocompile11erodeprog02.c:gcc-Wall-oprogprog02.cprog,paraexecutaroprograma,ou./progExemplo: 4prog02/* Programa prog02.cAssunto:le uma frase pelo teclado e a imprimePrograma errado, compile e corrija o erro. Ver exercicios.por Tarcisio Praciano Pereira - 10 licoes para aprender CSobral, julho de 2000 - UVA*/#include #include #include "traducao.h"palavra principal()11emBCprocureprg02.c44 CAPITULO2. OSEGUNDOPROGRAMAEMCiniciopalavra coisa1[30], coisa2[30], coisa3[30]; //(0)imprima("%s%\n", "escreva uma frase curta pelo teclado, ");// (1)imprima("%s\n", "digamos, com tres palavras.. "); // (2)imprima("%s\n"," pode ser o seu nome, por exemplo ");//(3)ler("%s%s%s",coisa1,coisa2,coisa3); //(4) ainda usa scanfimprima("%s%s%s\n",coisa1,coisa2,coisa3); //(5)fim/* Comentarios:0) declaracao de tres variaveis - vetores do tipo string.1,2,3) mensagens orientando o usuario a fornecer os dados.em (1) tem um erro que o compilador detecta.4) Leitura de dados com ler (scanf) observe a ausencia dodirecionador de endereco &, desnecessario porque asvariaveis sao do tipo ponteiro, declaracao implicita.5) Um unico imprima imprime todos os dados.*/Rode o programa para ver o que acontece. Programinha ruim, n ao e?Claro,estamos apenas come cando. Vejamos alguns defeitos e como poderamos corrig-los.Exerccios: 5Alterandoeentendendoprog02.c1. Compileerodeoprogramaprog02.c.2. Quandocompilado,ocompiladorreclama:prog02.c:16:warning: unknown conversion type character 0xa in formatprog02.c:21:warning: control reaches end of non-void function.Veriquequenalinha16tem%semocaracterquecaracterizaotipodedadosconversiontype. Ooutroerro, linha21, sedeve` a ausenciadeumvalor aser devolvido, corrijaestes erros. Observequeoprograma,mesmoerrado,roda. Namaioriadaslinguagensmodernasiston aosed a.Corrijaesteserros,(comparecomprog021.c).3. Rodeprog02.c,digitandocadaumdosnomesemumalinhadiferente(se-paradosporenter).4. Refacaprog02.cparacolocarastresmensagensdaentradadedadosnum unicoimprima. Observequecadamensagemeumpar ametro, vejao ultimoimprimaparaseinspirar.2.1. PROGRAMASEERROS... 455. Melhoreasadadedadoscolocandoumseparadorentrecadapalavraes-crita:coisa1, ,coisa2, ,coisa3n ao se esquecendo de incluiros formatadores %... Veja no exemplo abaixoasoluc ao.solu caoleiaoscoment ariosnoprogramaprog02.cDepois vamos tornar este programa mais inteligente, deixando que ele mesmodetectequantaspalavrasousuarioquerescrever. Nomomentovamossermaisimperativos: Escrevaumafrasecomtrespalavras.Exemplo: 5prog021.c/* Programa prog02_1.cAssunto:le uma palavra pelo teclado e a imprimepor Tarcisio Praciano Pereira - 10 licoes para aprender CSobral, julho de 2000 - UVA*/#include #include #include "traducao.h"#include "ambiente.h"palavra principal()iniciopalavra coisa1[30], coisa2[30], coisa3[30]; //(0)imprima("%s%s%s\n", "escreva uma frase curta pelo teclado","com tres palavras. "," Pode ser o seu nome, por exemplo "); // (1)ler("%s%s%s",coisa1,coisa2,coisa3); //(2)imprima("%s %s %s\n ",coisa1,coisa2,coisa3);//(3)devolve 0; //(4)fim/* Comentarios:0) Declaracao de variaveis com tamanho adequado para caber nomes.1) Um unico imprima para as tres frases. Observe que asfrases podem ser dispostas em tres linhas diferentes, osespacos entre os parametros nao tem significado.2) Ainda usando ler (scanf)3) Observe os espacos entre os formatadores de dados e vejao resultado disto na impressao. Tire os espacos e veja oresultado.46 CAPITULO2. OSEGUNDOPROGRAMAEMC4) A ausencia de voltar provoca um erro.*/2.1.1 Analisedoprog021.cCome caremospordiscutirossmbolosestranhos%setc.. queapareceramnosprogramas.Observa cao: 7Formatadoresdedados cabe calho O sinal /*marca o incio de um coment ario que e terminadocomosinal */. Oprogramacomecacomumcoment arioquecostu-mamoschamardecabecalho, nelecolocamosasinformac oesgenericassobre o programa. Se, por exemplo,estivermos trabalhando em equipe comcolaboradores, eles devem receber programas nossos para alterar, modicar,melhorar. Algunsdosprogramasatefuncionam,outross otrazemaideiadaquilo que devem fazer... No cabecalho colocamos estas informac oes, n aoapenasparan osmesmoqueescrevemosoprograma, comotambemparaosoutrosquev aotrabalharcomosprogramas.N aoduvide,sevoceforlerumprogramaumasemanadepoisqueoescre-veu,possivelmenten aovaimaisentende-lo.... comentarios Os coment arios podem ser escritos em diversos lugares den-tro dos programas. Se por um lado voce deve escrever muitos coment arios,tambemdeveterocuidadoparaqueelesn aocausemumapolui c aovisualquedepois atrapalhealeituradoprograma. Guardeaideiadequeumprogramadeve ser umtextobonito, agrad avel paraos olhos e de f acilleitura. formata cao de dados Osmbolo%informaaoCque se segue umaformatac aodesadadedados.Seforemfrases,(strings),ent aoca: %s.Seforumn umero,dependedotipoden umero: paran umerosinteiros: %d; paran umerosfracion arios: %fO erro,na terceiravers ao deprog02.c,consiste em que colocamos poucos%sumavez queos espacos separadores s aotambemcaracteres. Ocomandoqueimprimeosdadosdeveserassim:imprima("%s%s%s%s%sn",coisa1, ,coisa2, ,coisa3);sequisermosimprimirtrespalavrascomespacosentreelas.Naturalmente, vocedeveestarhorrorizado! Comocariasequisessmosescrever30palavras... Seacalme, veremosumasoluc aomaisinteligentedepois. Sequiserestudaroassuntoagora, vejaosprogramastexto.c,texto01.c, texto02.c texto03.c.2.1. PROGRAMASEERROS... 47Chamamosestessmbolosdeformatadoresdedados,maselestemdiversosnomes, porquetambemtemdiversasfunc oes, porexemplo, eles12servemparatraduzirdadosdeumtipoparaoutro.cpareceseruma linguagem contraditoria. Porumlado relativamentelivre,poroutroladocontendorestri c oesdeformata caorigorosas. Todavezquevoceusarumafunc aodesadadedados, temqueinformaraestafunc aoquetipodados lhe vao ser passados. Porque, se nao o zer corretamente, cpodera seguiremfrentecoletandoerrosatrasdeerros.Paracome car, queetipodedados?Dedicamosumcaptuloaesteassunto,vejanondice, esevocequiser podedar umsaltoagoraparala, ondeestaquestaoestasendodiscutidacommaisdetalhes. Nomomentovamosdizerqueemcomputa caosedistinguemtrescoisasbemclaramente: caracteresepalavras;caracteres,emprincpio,qualquerumdossmbolos quevocepodeobterapertandoumatecla. Haalgunspoucos quenaopodemserobtidosdestaforma. Saocaracteresespeciais, comoocaracter defim de linha.frases, ou aglomerados de caracteres os vetores de caracteres,emingles,strings n umeros;n umerointeiron umerofracionario,chamadorealouemingles,float. vetores;vetoresdecaracteres(strings)vetoresdeinteirosoudereais.Caracteres saoqualquer umdos duzentos e poucos sinais que voce podeproduzircomotecladodocomputador,comoA,a,/,%. . .existeumatabelaamericanachamadatabelaASCII13queregistraumasduascentenas de caracteres que sao, no fundo, a base do modo de comunica cao escritaqueusamos. Estatabelajafoi muitomaisimportantedoqueehojeporqueosmeiosdecomunica caoevoluiramtantoquehojejapraticamentenaomaisusamoscaracteresparanoscomunicar. Usamoscores... oumaisexatamentebits.Osn umerossaoagregadosdecaracterestiradosdacole cao1,2,3,4,5,6,7,8,9,0, .12Vercastaesterespeito.13AmericanStandardfor Communicationand InformationInterchange48 CAPITULO2. OSEGUNDOPROGRAMAEMCque podem ser inteiros, se nao usarmos .e se usarmos o ponto representamn umeros fracionarios. Estaeumaexplica caomuitorasteira, masemais oumenos aforma como Fibonacci explicouos n umeros decimais no seculo11, semincluiroponto. Semd uvida,seriaotimoquevocenaocassesatisfeitocomelaecriticasseoautorchamando-odesupercial...Depoispodemoscombinarestesdoistiposdedados,caracteres , numerosparacriartiposdedadosbemmaiscomplexos. Vocepodeveristoapartirdocaptulo5.Dito isto, o programa come ca com palavra14, para indicar que coisa, coisa1,etc... sao do tipo caracter. Em ingles se usam duas palavras para isto, string,character. charactere umcaracter, aopassoque stringe umvetor decaracteres, querdizerumaglomeradodecaracteres quepodeinclusiveconterespa cos, (espacoetambemumcaracterequevocegeraquandousaabarradeespacosquenadamaisdoqueumatecla...)Umvetordecaracterese,porexemploIsto eumvetordecaractereseumconjuntodecaracteresdelimitadoporaspas. ObservequeIsto e um vetor de caracteresediferentedeIsto e um vetor de caracteresAsegundaexpressao eumerro,porquecusadA primeira linha do programa indica que coisa1,coisa2,coisa3 sao vari aveisquedevemconterpalavras.Eumadeclara caodetipodedados.Observa cao: 8 Eoquesignicavari avel?Aslinguagensdeprogramacaosaoexemplosdelinguagensformais. Querdizerqueelastentam,ecomrelativosucesso,estabelecerumacomunicacaoentreohomemeamaquina.Naverdadeentreprogramadoreseaquelesqueconstruiramoscompiladoresdaslingua-gens...portanto entrehomens presentes em frenteaoteclado e homensausentes representadospelocompilador.Consequentementeelastemquesatisfazeraumconjuntoderegraslogicasquevaodarsentidoas frasesdequesecompoemos programas. Damesmaformacomoeunaopossomedirigiravoce, querendomereferiraumacadeira, dizer: medeamesa. Vocenadavaientender,sobretudosenanossafrentenaohouvernenhumamesa.cadeiraeumavariavel dalinguaportuguesaocupadacomumsignicadobemdenido,enaturalmente,imutavel. Masvocejaouviualguemdizerestacoisan aoserveparaescreverfazendoreferenciaa: umlapissemponta; umacanetaquebrada; umavelhamaquinadeescrver.coisaeumavariavel dalinguaportuguesa.Querdizerquehapalavraslivresparaassumirdistintosvalores.Nopresentecasotemos palavra,imprima, lerquesaopalavrasreservadasportuguesasdalinguagemC; eminglesseriamchar, printf,scanf;14eminglesseriachar2.1. PROGRAMASEERROS... 49 coisa,coisa1,coisa2,coisa3 queescolhemos para guardar os fonemas que voce resolverguardar: lapis,caneta,maquinavelhaetc...Examine o arquivo traducao.h onde vai voce vai encontrar muitas das palavras reservadasdalinguagemCcom arespectiva traducaoque estouusandonos programas. A estaosegredodeprogramaremPortugues...Depoisdadeclarac aodetiposdedadosvieramoscomandosimprime, ler.Estes comandos podem receber uma quantidade indenida de parametros, mas,paracadaparametro,devevir indicadootipo dedadoquevaiser lido, e esteosignicadode%sparalerouescreverpalavras.Bom,faltoudiscutiroquesignicamastresprimeiraslinhasdoprograma:diretiva de compilac~ao#include informa ao compilador que ele deve ler a biblioteca stdio.h que e um arquivoondeseencontramdenidasasfun coesprinfescanf15.diretiva de compilac~aoAlinha#include traducao.hdizaocompiladorparaleroarquivotraducao.h. Adiferen caentreaspasousinal dedesigualdaderesidenolocal ondeseencontramosarquivos. Quandoonome se encontra envolto por aspas, istosignicaparaocompilador queoarquivo se encontra nomesmodiretorioemque se esta trabalhandocomprograma, odiretoriocorrente. Quandoseenvolveonomedoarquivocom, ocompiladorsabequedeveprocuraroarquivonodiretoriopadraoemqueseencontramtodasasbibliotecasdalinguagemC.Alinhapalavra principal()e o incio do programa... e palavra indica que a fun cao principal() vai produ-zirumasadadedadosdotipopalavra. Isto e,principal edotipopalavra.TodoprogramaemCtemaestruturabasicadosprogramasacima. Primeirovemasdiretivasdecompila caomarcadaspelosmbolo#,comoinclude,quesignicaincluir. Depois vem as deni coes das fun coes que serao usadas. Discutiremos logonoproximocaptulooquesaofun coes. Depois avemafunc~ao principal(), emingles se chamamain(),e afun caoquegerenciaoprograma.Elaeresponsavel decolocaras coisasparaandar, eomaestroquevaicomandaroespetaculo.15quetraduzimosporimprimaeler. Sevocen aogostardestesnomes,useoutros...50 CAPITULO2. OSEGUNDOPROGRAMAEMCAntesda palavraprincipalse encontrao tipo de dados que a fun caovaiproduzir, na ultimalinhadoprograma, comafun caovoltar, return.Depois dos parentesis, que podemconter parametros, vemumachave-abertacontendooalgoritmoimplementadoaonal doqual se fechaachaveterminandoassimoprograma.A ordem como as fun coes vierem dispostas no programa e irrelevante, masno incio devevir uma lista das fun coes que v`ao ser denidas no arquivo eque faz parte integrande do cabecalho do programa. Isto e o que se chamadeprototipos,eoplanejamentodoprograma.Tomecomoexemplooprogramaintegral.c. Depois dos comentariosvemalistadefun coesquevaoserdenidasmaisabaixo:// Declaracao de funcoes *******************real Riemann(real ini, real _fim, real deltax);real f(real x);Em C, as chaves servem para denir as unidades logicas.E o que se chamaumbloco,uma unidadelogica. Observequedentrodeumblocopode teroutro bloco... Aqui estamos usando inicio e fim, com esta nalidade,comotradu c oesdaschaves, .Osvocabulosqueusamosnestase caoforam:Vocabulario: 4blocol ogico, imprima, include, escreva, func ao, palavra, ler,principal,printf,prot otipos,scanf,char,string bloco logicoeumaunidade deprogramac ao, conceitodifusoque aospoucosvoceir adominar. Asfunc oess aoblocosl ogicos. Aoabrirefecharchavesvocecriaumblocol ogico. imprima()etraduc aodeprintf()eafunc aodalinguagemCparapro-duzirumasadadedados. Imprimirnovideo. includee umadiretivade compilac aoparaque ocompilador vejain-formac oes emumabiblioteca. H av arias diretivas decompilac ao, elass aoassimchamadasporquedirigemocompiladorparafazertarefasbas-tantecomplicadasantesdecriaroprograma. N aoasdiscutiremosnestelivro. escreva()outratraduc aoquezemosdeprintf(),paramostrar-lhequepodemserdiversas. Istopoderiaserconsideradoumdefeito, poralguns,umqualidadeporoutros(adiversidade...) func~aoAsfunc oes s ao asmenores unidades l ogicas. printf(), scanf()s aofunc oes. TudoemCefunc ao1616nemtudo,vocevaiverdepois...,masquasetudo,digamos.2.1. PROGRAMASEERROS... 51As func oes em C se assemelham um pouco com as func oes da Matem atica.Depoisvocevaiverasdiferencas,masagorausemosassemelhancas. EmCdenimosumafunc aof edepoisescrevemosf(a); Ccalculaqual eoresultadodefaplicadaema. ComoemMatem atica...Mas frequentementeescrevemos apenas f(); oquen aosefaz emMa-tem atica,porqueemcexistemfunc oesquen aorecebempar ametros. palavrafoiumadastraduc oesquedemosparacharquesignicacarac-tere,umtipodedadosdeC. ler()etraduc aodescanf()eafunc aodalinguagemCparalerdadospeloteclado. Estafunc aodeve serevitada, usarfgets(),verprog043.cprog038.c principal() e func ao gerente do programa, obrigat oria, em ingles, main()Observa cao: 9Traduc aodalinguagemcAtraduc aodalinguagemqueestamosintroduzindonestelivron aoeumabrincadeira. Ouanossapropostaouadeoutrogrupodepessoasumdiavir aaserlevadaaserio. Fazpartedenossaidentidadecultural sabermosprogramaremnossa lingua. Semd uvidae uma atitude anti-globalizante de defesa dodesenvolvimentoregional.Entretanto algumorganismo, possivelmente aSBC, deve num certo momentochamar umgrupo de pesquisadores e programadores para estabelecer um padr ao,porque umalinguagemde programac aodeve ser padronizadaamde que osprogramaspossamrodaremqualquerlugareserentendidosportodos.52 CAPITULO2. OSEGUNDOPROGRAMAEMCCaptulo3N umeroseLetrasResumo.AlinguagemCn aofoi feitaparatrabalharcomn umeros, elafoi feitaparatrabalharcomcaracteres, acessar mem oria, executar opera c oes aritmeticaseopera c oesl ogicasa. Mesmoassimelatemumacapacidadenumericalimi-tadaemseuformatooriginal. Asimplementa c oesmodernastornaramestacapacidadebemmaisavantajada, porqueCnasceudentrodoambientequehojepodemoscaracterizarcomodeprogramaslivresoudedomniop ublico,quesemprefoi tpicodosqueprogramavamemUnixb. Umaconseq uenciadistoequealinguagemCcresceuehojeatepoderiaserconsideradaparaprocessamentonumericoporquetembibliotecasdirigidasparatal.Nestecaptulovamosexplorarumpoucodacapacidadenumericadalingua-gem C. O captulo 8, na verdade, se dedica ` a Matem atica, aqui vamos apenasbrincarumpoucocomosn umeros. Veremosumpoucodesuaslimita c oes,comoestaspodemseralteradas,quevocetemnasm aososmeiosparapro-duzirestasalteracoeseequevocevaiaprendercomofaze-lo...Se o seu sistema for LinuX, voce tem chances de fazer grandes altera c oes, mastenhacuidado, n aov afazeroquevocen aosabesemtomarasprecau c oesadequadas. Estafrasen aotemoobjetivodeamendront a-lo, nemdeinib-lo.AprendaCafundoeter aumaferramentaimponenteemsuasm aos.aporqueCfoifeitaparamontarumsistemaoperacional.b Einteressanteobservarqueapr opriapalavraUnix, eumamarcaregis-trada,osistemaoperacionalUnixtemumdono. MesmoassimUnixsemprefoi usado comliberalidade. LinuXe umclone do Unix, temdono, LinusTorvalds,masest acolocadosoboGPL3.1 Brincandocomn umerosemC.Comoottulomenciona, nestase caovamosestudarumprogramaqueefetuaopera coescomn umeros.Oprogramaque lhevamos propor, prog03.c, vemcomerros. Algumascorre coesemaisoutrostantoserrosseencontramnasuitedeprogramasprog03X.cEstamos absolutamenteconvencidos que os erros saooinstrumentomaisprofcuodoaprendizado,tantososnossoscomoosseus.5354 CAPITULO3. NUMEROSELETRASMas, naolimitesuaimagina cao, altereosprogramasatendendoatodasaspossibilidadesquelhevierem`acabe caparaexperimentaroutrosresultados.Encontre, vocemesmo, outras altera coes eas teste. Os exerccios propostossaoapenas umguiaparadespertar asuacuriosidade. Naotemaestragar ocomputadorouocompilador,elessaomuitorobustos.Primeirocompileerodeprog03.c:gcc-Wall-oprogprog03.cdigite,prog,paraexecutaroprograma.Possivelmentedigite ./prog,seosistema naoestiverbeminstalado,umdefeitonopath.depoisleiaoprogramaparadescobrirondeestaerrado,eocorrija.Exerccios: 6Alterandoprog03.cAssoluc oesdestesexerccios,s aoosprogramasprog03X.c.1. Altere prog03.cparaescrever asomados dois n umeros quelhe foremfornecidos. Vejaasoluc aopropostaemprog031.c.2. prog03.c imprime os n umeros que voce forneceu colados um no outro, feio!Corrijaisto. Versoluc aoemprog031.c3. Torne o programa maisverboso,conversando mais detalhadamente comousu ario,tantonaentradadedadoscomonasadadedados.4. Experimentecomsomasden umeroscadavezmaioresparatestarapre-cis aodosistemaquevoceusa.5. Altereprog03.cparasomarn umerosn aointeiros. Solu c aoprog038.c.6. Facaumsistemagenerosodemensagens paratornarsuacalculadoramaisatraente,porexemplo,pecaosn umerosparasomarumaum.7. Altereprog03.cparafazeramultiplicac aoentredoisn umeros.8. Altere todos os programas da serie prog03*.c substituindo ler() (scanf())pelopardefunc oesleia(), convertepalavra(). Vejaprog0391.c. Voceprecisadeclararumavari avelpalavra deposito[80]parareceberdados. Otamanho,80,porquecabeumalinha.3.1. BRINCANDOCOMNUMEROSEMC. 559. Existemdoistiposden umerosnaslinguagensdeprogramac ao,inteirosoureais. DopontodevistadeMatem aticaistoeumaaberrac ao1, masn aoestamos fazendoMatem atica, aqui. Exemplique o que e n umerointeiroeoqueen umeroreal,emcomputac ao.Respostaprog0310.c10. **foradocontextoDescrevaoque signicadizer-se que umn umeroaest arepresentadonabase8,nabase10ounabase16.Resposta base.c,compileesteprogramaassimgcc-Wall -oprog-lmbase.caopc aolminstrui ocompiladorafazerusodabibliotecamatem atica.Experimenteomitirestainstruc ao,ocompiladorn aosaber aoqueepow,afunc aopotencia.Observa cao: 10ComentandoosexercciosOprograma prog03.c sugere que voce use n umeros inteiros muitogran-desparaveroquepodeacontecer. N aosabemosoquemuitogranderepre-senta para voce, por exemplo a soma dos custos dos rombos banc arios pagos peloproer,querdizer,porn ostodos:40.000.000.000d olares!Seistoj aformuito,experimentedeniraconstanteinteiro BANCOS = 40000000000;eausenas suas alterac oes deprog03.c. Observequeoprogramatalvez n aosuporteestevalor2.Experimentesomarn umerosmaioresqueBANCOS. NoCquerodaemLinuXvoceprecisar aexperimentarcominteirosmaioresque2mi paranotaralgumacoisaextranha. Experimente,portanto. Navers aotradicionaldoCosinteirosv aode-32768ate32767. Istoquerdizerquesevocepedirparasomarn = 32767; m = 1 n + m = 32768Vejaasrespostasqueobtivemos:A soma de 2147483647 com 1: -2147483648A soma de 2147483646 com 1: 2147483647QuerdizerqueosinteirosdeCn aosuportamumBANCOS.Mesmoassim, sobLinuXosinteiroschegamacasadosbilh oes. Istonadatem de estranho, nem LinuX e melhor que qualquer outro sistema apenas porqueosinteiros emC, sobLinuX, temumespectromais amplo. LinuXemelhorporque voce pode alterar este espectro, por exemplo. Com n umeros inteiros muitograndes, voce pode estar gastando mem oria ` a toa, e talvez, para um uso especcosejainteressantereduziralarguradesteespectro.1porqueosinteirostambems aon umerosreais2masoBrasil aindacontinuaempe, apesar desteroubo, eaindadizemquesomosumpaspobre...claro, quandopedimosdinheiroparaasUniversidades, a opasepobre... comBANCOSsepoderiapagar8anosdoor camentominguadodasUniversidadesbrasileiras.56 CAPITULO3. NUMEROSELETRASEm LinuX voce pode fazer facilmente isto, mas n ao se esque ca que o sistemaemulti-usu arioeistopodecausarproblemas... Observeque, mesmoquevocesejao unicousu ariocadastradoemumam aquinarodandoLinuXvoce, aindaassim, n aoeo unicousu ario...existeummontedeusu arios(dosistema)tra-balhandojuntocomvoce. Elespodemnecessitar(quasecertamentenecessitam)docinstaladonam aquina...Aprendacomofazer, antesdefazer. Estudandomaisafundo, naovai serainda aqui, voce ir a aprender como alterar a linguagem cpara um uso especcoOsegredoe,construaumabibliotecaadequada,paranaoatrapalharosoutrosusuarios.Outro: ousodasdiretivas de compilac~ao.Este programa e muito pequeno para oferecer espaco para muitas mensagens,masvocepodeincluirsetasnolocal ondeousu ariodoprogramair adigitarn umeros,porexemplo. Sen aootiverfeito,faca-oagora.Observa cao: 11Setas-c odigoASCIIJ anosreferimosantes` atabelaASCII, consultando-avocepodeinseriral-gunscaracteresdiferentesparaembelezarseusprogramas.Leiaabibliotecaambiente.h. Nelaest aodenidasasletrasacentuadasdoalfabetobrasileiro. SevocequiserescrevercorretamenteafraseAacaosistematicadomoduloehvocedever a3digitar:imprima(A a%c%co sistem%ctica do m%cdulo %c,cedi,atil,aagu,oagu,eagu);Vejaoprograma4acentuacao.cparaumaalternativade escritacomossinaisdiacrticosdalinguaportuguesa.Nolugardecada%caparecer aovalordecadaumadasmacroscedi,atil,aagu, oagu, eagudenidasnabibliotecaambiente.h.Sevocerodaroprogramaascii.c, elelhevai imprimiralgunsdosvaloresdatabelaASCII.Nemtodospodemserimpressos,umdeleseocaracterdemdelinha... outroir aproduzirsomnoalto-falantedomicro. Tambemexistemvariac oes databelaASCII usadas por fabricantes diferentes eoresultadodoprogramamudadeummicroparaoutro. Consequentemente edifciltercertezade que as palavras ser ao escritas corretamente quando o programa for executado.Observeaestruturadainformac aoabaixo:imprima("A soma de %d com %d eh %d\n",n,m, n+m);Afunc aoimprimarecebedoistiposdepar ametros5:Umvetor de caracteres, "A soma de %d com %d eh %d\n", naqualseencontrampresentesinstruc oesdeformatac aodedados: %d,e3n aoseassuste,estaeapenasumaformaderesolveroproblema4vejatambemasuitedeprogramastexto*.c5tipos,n aoquantidades3.1. BRINCANDOCOMNUMEROSEMC. 57 ospar ametrosquev aopreencherovetor de caracteresnamesmaor-dememqueseencontramasinstruc oesdeformatac ao. Sechamaaistodeexpans aod