"uthor: hft#$%& ('''.faebook.om/haker.ft#$%&! (reet): mm*m+ f.ramon+ #u#p$it,-.irtual+ eof member+ entre outro# /0/,1//,%$ %&/%%//,%$ (#em re.i#2o! Ola membro# do forum End Of File #e3a bem .indo# ao ebook #obre pro4rama52o /+++ ne##e ebook irei en#inar #obre pro4rama52o ba#ia da lin4ua4em /++ e tamb6m #obre al4uma# oi#a# de ni.ei# ba#io# a a.an5ado#+ n2o .amo# no# aprofundar em lo4ia de pro4rama52o embora .amo# .er um pouo #obre ela para failitar na ria52o do# al4or7timo#+ e##e ebook #era atuali)ado #empre 8ue hou.er oportunidade e #empre na# pa4ina# finai# eu e#tarei li#tando a# altera59e# 8ue foram feita# para failitar ao# anti4o# leitore#+ n2o 6 permitido a altera52o de##e ebook #em autori)a52o do autor tamb6m n2o 6 permitido a omeriali)a52o de##e ebook+ porem #era totalmente permitido a #ua di#tribui52o pela internet ou outro# meio# de forma n2o omerial. ne##e ebook abordaremo# o# #e4uinte# t:pio# diferen5a entre lin4ua4em de pro4rama52o e lin4ua4em da m;8uina+ diferen5a entre lin4ua4em ompilada e a lin4ua4em interpretada+ ompila52o por uma IDE ou ompilador+ manu#eio do terminal ou prompt+ diferen5a da# interfae# CLI e (<I+ e#trutura b;#ia da lin4ua4em /+++ diferen5a de entrada e #a7da de dado#+ bibliotea# padr9e# da lin4ua4em /+++ .ari;.ei# e on#tante#+ .etore# e matri)e#+ ponteiro# e aloa52o din=mia+ e#trutura ondiional e la5o#+ direti.a# de pr6>proe##amento+ on.er#2o de dado# e tipo#+ manipula52o de ar8ui.o#+ manipula52o do tempo+ orienta52o a ob3eto da lin4ua4em +++ "?I# do #i#tema 'indo'# e linu* entre outra# oi#a#. Indice %., Introdu52o da lin4ua4em C/C++ %.% Lin4ua4em de pro4rama52o e lin4ua4em da m;8uina %./ Compiladore# e IDE %.$ Interfae# CLI e (<I /., @erminal Aindo'# e Linu* /.% Be*endo om terminal do 'indo'# /./ Be*endo om terminal do linu* $., Cinta*e C/C++ $.% Dibliotea# da lin4ua4em C/C++ $./ Coment;rio# $.$ Diferen5a da lin4ua4em C e C++ E., Ca7da de dado# (output! E.% E.itando da 3anela fehar E./ Formata52o de #trin4 E.$ Fari;.ei# e on#tante# E.E Fetore# e matri)e# E.& ?onteiro e aloa52o din=mia e e#t;tia E.G Entrada de dado# (input! E.0 Banipula52o de Ctrin4 E.H Banipula52o de ar;ter &., Lo4ia aritm6tia &.% Lo4ia booleana &./ Opera52o bit a bit &.$ Operadore# de ompara52o e lo4io &.E E#trutura ondiional &.& E#trutura de repeti52o G., Fun52o e reur#i.idade G.% Direti.a# de pr6>proe##amento G./ Criando Dibliotea Ieader G.$ Criando Dibliotea E#t;tia e LID G.E Criando Dibliotea Din=mia (DLL e CO! G.& Criando Bakefile 0., E#trutura# 0.% Con.er#2o de tipo e dado# 0./ Banipulando o tempo 0.$ Banipulando ar8ui.o# 0.E Banipulando diret:rio 0.& Banipulando o terminal H., Orienta52o a ob3eto H.% Orienta52o a ob3eto: Cla## H./ Orienta52o a ob3eto: Enap#ulamento H.$ Orienta52o a ob3eto: Ieran5a H.E Orienta52o a ob3eto: Con#trutore# H.& Orienta52o a ob3eto: ?olimorfi#mo 1., "?I Aindo'# 1.% "?I Linu* 1./ "?I Coket (Aindo'# e Linu*! %,., C(I %,.% "CB %%., Fim do ar8ui.o (EOF! 1.0 Introduo da linguagem C/C++ " lin4ua4em de pro4rama52o C 6 uma da# lin4ua4en# mai# anti4a# e mai# u#ada ate ho3e+ #e3a por pro4ramadore# amadore# a haker#+ 6 uma lin4ua4em muito podero#a e muito f;il ahar ompiladore# para di.er#a# plataforma# e ar8uitetura#+ e##a lin4ua4em #er.e para u#o 4eral dei# de um Jhello 'orldK na tela+ uma p;4ina 'eb por C(I+ aender um led ou ate riar um #i#tema de inteli4Lnia artifiial (por fa.or n2o riem a #kMnet+ 6 #6rio!+ a lin4ua4em C foi riada pelo Denni# Nithier na d6ada de 0, e foi e#rita na lin4ua4em a##emblM+ em H1 a lin4ua4em te.e uma padroni)a52o pela "NCI hamada H1 8ue #er.iu para e.itar inompatibilidade entre um ompilador e outro+ e futuramente #ur4iram no.a# padroni)a59e# adiionando no.a# bibliotea# e on#tante#+ me#mo om uma padroni)a52o nem todo# o# ompiladore# #e4ue e##e padr2o podendo 4erar inompatibilidade entre ompiladore# 8ue n2o #e4ue e##e padr2o+ uma da# .anta4en# da lin4ua4em C++ 8ue ela 6 uma lin4ua4em orientada a ob3eto (?OO! diferente da lin4ua4em C 8ue n2o 6 orientada a ob3eto+ o# :di4o# da lin4ua4em C pode #er ompilado failmente em um ompilador C++ 3; o# :di4o# da lin4ua4em C++ n2o pode #er ompilado em um ompilador 8ue 6 apena# para lin4ua4em C+ outra .anta4em 8ue #inta*e u#ada na lin4ua4em C/C++ e muito pareida om outra lin4ua4em mai# reente entre ela# CO+ Pa.a+ ?erl+ ?hp entre outra#+ ent2o 8uando al4u6m aprende a pro4ramar em C/C++ automatiamente .ai #aber o b;#io de##a# outra# lin4ua4en#+ a lin4ua4em C/C++ 6 uma lin4ua4em ompilada e e*i#tem ompiladore# para maioria do# #i#tema# operaionai# embora muita# fun59e# e bibliotea# #: funione em determinado #i#tema ou plataforma+ outra .anta4em de pro4ramar em C/C++ 8ue ela 6 uma lin4ua4em anti4a ent2o e*i#tem milhare# de bibliotea# e :di4o# na internet para e#tudo#+ a lin4ua4em C/C++ 8ue #e4ue o padr2o "NCI 6 a#e>#en#iti.e ou #e3a fa) diferen5a e#re.er maiQ#ulo ou minQ#ulo+ o ompilador .ai ler o :di4o de ima para bai*o da e#8uerda para direita. 1.1 Linguagem de programao e linguagem da mquina Buito# lei4o# u#a um pro4rama e mal #abe e*pliar o 8ue 6 e omo funiona um+ um pro4rama ou um #oft'are 6 uma #e8uenia de :di4o# na lin4ua4em da m;8uina feito para e*eutar tarefa# #obre um #i#tema operaional+ 8uando bai*amo# um pro4rama na internet bai*amo# na .erdade uma #e8uenia de :di4o# onheida omo bin;rio (e*eut;.el!+ e##e bin;rio #2o proedimento# 8ue #i#tema operaional de.e fa)er (riar uma 3anela ou botoe#+ fia e#perando e.ento#+ ler e e*eutar proe##o et!+ di)emo# 8uando um pro4rama 6 alto n7.el 8uando ele funiona #obre uma amada aima de uma outra aplia52o omo por e*emplo #i#tema operaional+ e 8uando o pro4rama 6 bai*o n7.el 8uando ele funiona abai*o de determinada aplia52o (tamb6m 6 omum ou.ir 8ue um pro4rama de alto n7.el 6 mai# perto do #er humano e um de bai*o n7.el 6 mai# perto da m;8uina!+ ate a4ora de#obrimo# 8ue um pro4rama 6 bin;rio ou um :di4o na lin4ua4em da m;8uina e a lin4ua4em da m;8uina 6 uma #e8uenia de :di4o# 8ue #i#tema operaional .ai e*eutar+ 3; um :di4o de lin4ua4em de pro4rama52o 6 uma #e8uenia de :di4o# e#rito pelo pro4ramador 8ue #er; on.ertido para lin4ua4em da m;8uina e e##a on.er#2o 6 hamada ompila52o+ em uma ompila52o n2o 6 4erado o e*eut;.el final 6 4erado um ar8ui.o ob3eto e depoi# 6 linkado 4erando o e*eut;.el final+ nem toda# a# lin4ua4en# de pro4rama52o 6 ompilada al4uma# e*i#te um e*eut;.el hamado interpretador 8ue ler o :di4o e e*euta e##e proedimento+ a .anta4em da# lin4ua4en# interpretada# 8ue #e ti.er um interpretador para outra# plataforma# o #ript pode #er e*eutado #em difiuldade diferente da# lin4ua4en# ompilada# 8ue teria 8ue ompilar de no.o para 4erar o e*eut;.el da8uela plataforma+ e*i#te lin4ua4en# 8ue pode #er ompilada e interpretada ao me#mo tempo omo por e*emplo o 3a.a me#mo 4erando o e*eut;.el 6 nee##;rio a m;8uina .irtual para ler o e*eut;.el (a .anta4em do 3a.a 8ue e o e*eut;.el e multiplataforma embora #e3a e*tramente lento omparado a# outra# lin4ua4en#! 1.2 Compiladores e ID Como 3; #abemo# o# ompiladore# on.erte o :di4o da lin4ua4em de pro4rama52o para lin4ua4em da m;8uina+ e*i#tem .;rio# tipo# de ompiladore# para lin4ua4em /++ entre ele# 4+ 4+++ borland +++ turbo +++ entre outro# tipo# de ompiladore#+ al6m do# ompiladore# e*i#tem a# IDE 8ue #2o ambiente de pro4rama52o+ ela# ontem o ompilador e outra# ferramenta# 8ue a3uda o de#en.ol.edor podendo #er um editor de te*to pr:prio 8ue pode de#taar o# :di4o#+ um debu44er e hea4em de #inta*e+ ate de#en.ol.imento 4r;fio omo 3anela# e bot9e#+ al4un# e*emplo# de IDE para lin4ua4em C/C++ #eria o de. +++ ode blok#+ an3uta+ borland ++ builder+ miro#oft .i#ual #tudio+ elip#e+ netbean#+ al4un# de##e ompiladore# e IDE #2o free'are# outro# #2o omeriai#+ abai*o podemo# .er al4un# #ite# onde pode #er bai*ado al4un# ompiladore# e IDE http://'''.blood#hed.net/do'nload.html (De. C++! http://'''.odeblok#.or4/do'nload#/binarie# (Code Dlok#! http://'''.an3uta.or4/do'nload# ("n3uta! http://'''.#uperdo'nload#.om.br/do'nload/0//borland>>ompiler/ (Dorland ++! http://'''.elip#e.or4/do'nload#/ (Elip#e! http#://netbean#.or4/do'nload#/ (netbean#! http://'''.miro#oft.om/.i#ual#tudio/ptb/do'nload# (miro#oft .i#ual #tudio! 1.! Inter"aces CLI e #$I "# interfae# CLI #2o pro4rama# por ba#e omando+ ou #e3a pro4rama# 8ue u#a o terminal+ embora #e3a raro um u#u;rio final u#ar e##e# tipo# de pro4rama# para um pro4ramador 6 ruial #aber pro4ramar e u#ar tai# pro4rama#+ o# pro4rama# om interfae CLI 6 muito mai# r;pido e tamb6m 4a#ta meno# mem:ria 8ue pro4rama# om interfae# 4r;fia#+ a 4rande de#.anta4em 8ue u#u;rio final .ai ter 8ue #aber manipular e##e# pro4rama#+ para o# u#u;rio# finai# 8uanto mai# f;il for o u#o do pro4rama melhor+ por6m 8uanto mai# f;il o u#o do pro4rama para o u#u;rio final mai# trabalho#o para o pro4ramador ri;>lo+ abai*o .emo# uma ima4em de um pro4rama om interfae CLI o pin4 do 'indo'#. a# interfae# 4r;fia# #2o hamada# interfae (<I+ 6 mai# omum .oL bai*ar um pro4rama 8ue tenha uma interfae (<I do 8ue CLI+ o# pro4rama# om interfae (<I d; um .i#ual melhor para pro4rama #e #eu pro4rama .ai #er omerial+ ou #e3a .oL pretende .ender ele 6 reomendo fa)er ele om interfae (<I para hamar mai# aten52o para o u#u;rio final+ na ria52o de uma interfae (<I o# pro4ramadore# de.e e#tudar "?I 4r;fia omo por e*emplo (@R+ abai*o temo# uma ima4em de um pro4rama om interfae (<I. e*i#tem outro# tipo# de interfae# entre ela# a de .o) F<I 8ue n2o abordarei ne##e ebook. 2.0 %erminal &indo's e Linu( Suem olha a tela do prompt do 'indo'# pela primeira .e) aaba falando al4o do 4Lnero JBai# 8ue T.. 6 e##a U>U K+ al4un# nem aredita 8ue i##o era um #i#tema operaional a dua# d6ada# atr;#+ mai# 6 .erdade era um #i#tema operaional ante# me#mo do 'indo'# $* o famo#o e 8ua#e morto BCDOC+ 6 raro ahar al4u6m 8ue u#e e##e #i#tema ainda embora o u#o do md tamb6m onheido por prompt ou terminal #e3a ba#tante omum entre pro4ramadore# e haker#+ o 8ue temo# 8ue entender do terminal 8ue ele funiona a ba#e de omando+ ali podemo# opiar+ mo.er+ deletar+ riar ar8ui.o+ .er diret:rio+ e*eutar pro4rama+ pratiamente 8ual8uer oi#a 8ue far7amo# no #i#tema operaional no modo 4r;fio+ o terminal do 'indo' e do linu* #2o um pouo pareido mai# tem #ua diferen5a no terminal do 'indo'# o# diret:rio# #2o #eparador por ontra barra (V! 3; no linu* por barra (/!+ no terminal do 'indo'# 6 mo#trado no final o #7mbolo de maior (W! no do linu* 6 a permi##2o do u#u;rio lo4ado 8ue pode .ariar entre ifr2o e #harp# (X ou O! indiando u#u;rio normal ou root+ no terminal do 'indo'# ante# do Qltimo #7mbolo india o diret:rio 8ue ele e#t; apontando no a#o do linu* ante# do diret:rio 8ue ele t; apontando tem uma arroba (-! e o u#u;rio lo4ado e a m;8uina+ no terminal do 'indo'# o# omando# podem #er #eparador por dua# .e)e# o #imbolo JeK omerial (YY! 3; no linu* #2o por ponto e .7r4ula (Z! C:Vu#er#Vft#$%&W @erminal Aindo'# ft#$%&-#kMnet /home/ft#$%&X @erminal Linu* 2.1 )e(endo com terminal do 'indo's " manipula52o do terminal permite a4ili)ar tarefa# no #i#tema operaional ou #imple#mente e*eu52o de pro4rama# por omando+ no 'indo'# e*i#te um terminal hamado prompt de omando e##e terminal pode #er ae##ado apertando no botao JiniiarK do 'indo'#+ depoi# em J@odo# o# pro4rama#K+ Jae##:rio#K+ Jprompt de omandoK+ ou #imple#mente e#re.er Jmd.e*eK em Jpe#8ui#ar pro4rama e ar8ui.o#K depoi# apertar enter ai .ai abrir uma tela preta 8ue 6 o terminal (e##e modo #: funiona no 'indo'# 0!+ .oL tamb6m poderia apertar J'inkeM + rK no de#ktop .ai abrir uma 3anela hamada e*eutar nela 6 #: di4itar Jmd.e*eK e apertar em JokK+ a ultima forma de abrir o prompt 6 abrir ele manualmente na pa#ta dele 8ue #eria Jmeu omputadorK+ a unidade 8ue e#t; in#talado o #i#tema operaional (maioria da# .e)e# na unidade :V!+ diret:rio 'indo'# e depoi# diret:rio #M#tem$/+ e la dentro tem o e*eut;.el md.e*e (:V'indo'#V#M#tem$/Vmd.e*e!+ om o prompt aberto podemo# .er 8ue 6 al4o a##im Biro#oft Aindo'# [.er#2o G.%.0G,,\ CopMri4ht (! /,,1 Biro#oft Corporation. @odo# o# direito# re#er.ado#. C:V<#er#Vft#$%&W a primeira parte e#rita JBiro#oft Aindo'# T direito# re#er.adoK podemo# i4norar i##o a Qnia oi#a importante ali 6 o diret:rio atual JC:V<#er#Vft#$%&WK no a#o o prompt e#ta apontando para o diret:rio 8ue Jft#$%&K (maioria da# .e)e# o prompt aponta para a pa#ta do u#uario lo4ado!+ e##e diret:rio Jft#$%&K e#t; dentro do diret:rio J<#er#K e o diret:rio J<#er#K e#ta dentro da unidade J:VK+ para e*eutar omando# no prompt ba#ta di4itar o omando e apertar enter+ #: 6 po##7.el e*eutar pro4rama# pelo nome 8ue e#ta dentro do diret:rio atual ou em uma .aria.el de ambiente #e n2o 6 nee##;rio di4itar o endere5o ompleto+ o primeiro omando 8ue .amo# aprender #er; o JDINK para e*ibir todo# o# ar8ui.o# e diretorio dentro do diretorio atual C:V<#er#Vft#$%&W dir ?a#ta de C:V<#er#Vft#$%& ,//%%//,%$ ,&:E& ]DINW . ,//%%//,%$ ,&:E& ]DINW .. %0/,H//,%$ /$:E& ]DINW Contat# ,H/%%//,%$ ,&:,/ ]DINW De#ktop ,//%%//,%$ ,&:&/ ]DINW Doument# ,H/%%//,%$ ,,:,E ]DINW Do'nload# %0/,H//,%$ /$:E& ]DINW Fa.orite# ,H/%%//,%$ ,&:/E %E.%&&.00G N@<CEN.D"@ C:V<#er#Vft#$%&W no a#o ele li#to mai# ar8ui.o# e diret:rio# a8ui por6m eu olo8uei apena# e##e#+ podemo# .er 8ue ele mo#tra a data e hora 8ue o# pro4rama# foram riado#+ #e o ar8ui.o 6 um diretorio ou n2o a#o #e3a ele mo#tra ]DINW+ a#o #e3a um ar8ui.o ele mo#tra o tamanho em bit# e por fim o nome do ar8ui.o ou do diret:rio+ tamb6m podemo# li#tar o diret:rio pelo endere5o C:V<#er#Vft#$%&W dir :V ?a#ta de :V %,/,G//,,1 %1:E/ /E autoe*e.bat /1/,1//,%$ ,%:%& ]DINW Dorland %,/,G//,,1 %1:E/ %, onfi4.#M# ///,1//,%$ ,G:E% ]DINW M4'in %H/,H//,%$ ,%:$/ ]DINW De.>Cpp ,0/,1//,%$ ,/:,0 ]DINW Dri.er# ,0/,1//,%$ ,/:,0 ]DINW <#er# C:V<#er#Vft#$%&W para entrar em um diret:rio u#amo# o omando CD #e4uido do nome do diret:rio+ no a#o eu e#tou no diret:rio do u#u;rio la dentro tem um diret:rio hamado De#ktop 8ue 6 nada mai# nada meno# 8ue a ;rea de trabalho da8uele u#u;rio C:V<#er#Vft#$%&W d De#ktop C:V<#er#Vft#$%&VDe#ktopW tamb6m 6 po##i.el ir para determinado diret:rio apena# om endere5o C:V<#er#Vft#$%&W d :Vu#er# C:V<#er#W para .oltar um diretorio podemo# u#ar CD e doi# ponto# C:V<#er#Vft#$%&VDe#ktopW d .. C:V<#er#Vft#$%&W para e*eutar ou abrir um pro4rama ou ar8ui.o ba#ta di4itar nome do pro4rama a#o e#te3a no me#mo diret:rio 8ue ele C:V<#er#Vft#$%&VDe#ktopW eof.e*e tamb6m e po##7.el e*eutar pelo endere5o ompleto a#o n2o e#te3a na me#ma pa#ta C:V<#er#W C:V<#er#Vft#$%&VDe#ktopVeof.e*e porem o m6todo aima pode tra.ar e##e terminal en8uanto o pro4rama e#ti.er em e*eu52o para e.itar i##o podemo# u#ar o omando C@"N@ ante# para u#ar outro prompt para a8uele pro4rama C:V<#er#Vft#$%&VDe#ktopW #tart eof.e*e a#o o pro4rama ou diretorio tenha e#pa5o olo8ue entre a#pa# (i##o #er.e para o# outro# omando# tamb6m! C:V<#er#Vft#$%&VDe#ktopW #tart ^forum eof.e*e^ para riar um diretorio podemo# u#ar o omando BD #e4uido do nome do diretorio C:V<#er#Vft#$%&VDe#ktopW md ft# para remo.er um diretorio podemo# u#ar o omando ND C:V<#er#Vft#$%&VDe#ktopW rd ft# para deletar um ar8ui.o podemo# u#ar DEL C:V<#er#Vft#$%&VDe#ktopW del ft#.e*e para ler um ar8ui.o u#amo# @_?E C:V<#er#Vft#$%&VDe#ktopW tMpe ft#.t*t para opiar um ar8ui.o ou diret:rio podemo# u#ar o omando CO?_ #e4uido do ar8ui.o a #er opiado e do loal para onde ele .ai C:V<#er#Vft#$%&VDe#ktopW opM ft#.t*t :V e*i#tem muito outro# omando# alem do# itado# 2.2 )e(endo com terminal do linu( " manipula52o do terminal do linu* 6 pareida om a do 'indo'# #: mudando al4un# omando# alem di##o e*i#te muito mai# omando# para o linu* do 8ue no 'indo'#+ embora e*i#ta o omando dir no linu* 6 reomendado u#ar o omando l# ft#$%&-#kMnet:`/De#ktopX l# am#n.de#ktop ft#.t*t NaidCall.de#ktop #ript ft#$%&-#kMnet:`/De#ktopX podemo# oloar a #inta*e >l para mo#trar a permi##2o+ o dono do ar8ui.o+ 4rupo+ tamanho et ft#$%&-#kMnet:`/De#ktopX l# >l lr'*r'*r'* % ft#$%& ft#$%& $G Bai $ /,%$ am#n.de#ktop >W /u#r/#hare/appliation#/ >r'>r>>r>> % ft#$%& ft#$%& /10 Out /E %$:%& ft#.t*t >r'*r>*r>* % ft#$%& ft#$%& /&1 Bai 1 /,%$ NaidCall.de#ktop dr'*r>*r>* / ft#$%& ft#$%& 0G, Out %& ,G:/% #ript ft#$%&-#kMnet:`/De#ktopX o omando d 6 a me#ma oi#a do 'indo'# ft#$%&-#kMnet:`/De#ktopX d #ript ft#$%&-#kMnet:`/De#ktop/#riptX para .oltar diret:rio om d u#amo# doi# ponto# i4ual o 'indo'# ft#$%&-#kMnet:`/De#ktop/#riptX d .. ft#$%&-#kMnet:`/De#ktopX para riar um diret:rio u#amo# mkdir #e4uido do nome do diretorio ft#$%&-#kMnet:`/De#ktopX mkdir ft# para deletar um diretorio u#amo# rmdir #e4uido do nome do diretorio ft#$%&-#kMnet:`/De#ktopX rmdir ft# para deletar um ar8ui.o u#amo# rm ft#$%&-#kMnet:`/De#ktopX rm ft# para riar um ar8ui.o u#amo# o omando touh ft#$%&-#kMnet:`/De#ktopX touh ft#.t*t para opiar determinado ar8ui.o u#amo# o omando p ft#$%&-#kMnet:`/De#ktopX p ft#.t*t #ript/ft#.t*t para mo.er determinado ar8ui.o u#amo# o omando m. ft#$%&-#kMnet:`/De#ktopX m. ft#.t*t #ript/ft#.t*t para e*eutar determinado pro4rama u#amo# ponto e barra ante# ft#$%&-#kMnet:`/De#ktopX ./ft# para ler determinado ar8ui.o podemo# u#ar o at ft#$%&-#kMnet:`/De#ktopX at ft#.t*t para fiar om ae##o root u#amo# o omando #u porem e##e omando pode pedir #enha de root+ #e a #enha e#ti.er erto #era modifiado o #7mbolo X pelo O ft#$%&-#kMnet:`/De#ktopX #u Cenha: root-#kMnet:/home/ft#$%&/De#ktopO tamb6m podemo# u#ar o #u para mudar de u#uario+ para i##o ba#ta di4itar o u#uario depoi# do #u ft#$%&-#kMnet:`/De#ktopX #u hak Cenha: hak-#kMnet:/home/ft#$%&/De#ktopX para on#e4uir ae##o root tempor;rio para determinado omando podemo# u#ar o #udo #e4uido do omando ft#$%&-#kMnet:`/De#ktopX #udo rd ft#.t*t podemo# mudar a permi##2o om o omando hmod #e4uido da #inta*e > e o odi4o da permi##2o e por fim o ar8ui.o (n2o en#inarei #obre permi##2o me#mo por8ue i##o 6 um ebook de C/C++ e n2o de linu*!+ no e*emplo abai*o eu oloo a permi##2o r'*r>*r>* para o ar8ui.o ft#.t*t ft#$%&-#kMnet:`/De#ktopX hmod > 0&& ft#.t*t para montar uma unidade ou parti52o podemo# u#ar o omando mount #e4uido da unidade depoi# uma pa#ta onde #era montado (dependendo do a#o 6 nee##ario e#tar omo root! ft#$%&-#kMnet:`/De#ktopX mount /de./#db% /home/ft#$%&/De#ktop/hd/ para de#montar u#amo# o umount ft#$%&-#kMnet:`/De#ktopX umount /home/ft#$%&/De#ktop/hd/ !.0 *inta(e C/C++ @odo pro4rama em C e*i#te uma fun52o prinipal e na maioria da# .e)e# 6 a fun52o 6 a main+ ne##a fun52o .amo# ter 8ue definir um tipo de retorno e um ar4umento #: 8ue ante# de tudo riamo# um ar8ui.o de te*to om e*ten#2o . e o# pro4rama# C++ u#a e*ten#2o .pp+ e##e ar8ui.o n2o pode ter formata52o de te*to ent2o ele de.e #er riado om um editor de te*to puro tipo o notepad do 'indo' ou k'rite do linu* ou pela# IDE+ o tipo de retorno .em ante# do nome da fun52o no a#o e##a fun52o prinipal nee##ita retornar um tipo inteiro ent2o u#amo# int #e4uido do nome main+ u#amo# parLnte#e# para definir o ar4umento 8ue #er; .oid (tipo .a)io!+ por fim u#amo# ha.e# para riar o bloo tamb6m hamado de e#opo int main(.oid!ab a lin4ua4em C/C++ n2o diferenia e#pa5o e nem 8uebra de linha# o e*emplo anterior e o pr:*imo #eria a me#ma oi#a para ompilador int main ( .oid ! a b #empre de uma 8uebra de linha a ada final de uma fun52o e #empre de um e#pa5o a ada no.o e#opo i##o dei*a o :di4o mai# or4ani)ado e le47.el i##o #e hama edenta52o ou reuo+ ate a4ora riamo# a fun52o main definimo# o ar4umento e o tipo de retorno mai# n2o definimo# o retorno+ para i##o u#amo# a pala.ra return #e4uido do .alor de retorno 8ue #er; ,+ e para terminar u#amo# ponto e .7r4ula indiando fim do omando+ e##e ponto e .7r4ula 6 nee##;rio #em ele o ompilador .ai ahar 8ue o pr:*imo omando fa) parte de##e e .ai d; erro na hora de ompilar int main(.oid! a return ,Z b 8uando o ompilador ahar o return ele automatiamente .ai terminar a fun52o me#mo #e ti.er outra# oi#a# em bai*o+ para ompilar a#o .oL e#te3a u#ando uma IDE proure o botao ou menu (no a#o o de. ++ .oL pode apertar F1!+ a#o .oL 8ueira ompilar pelo terminal loali)e o ar8ui.o e di4ite 4 #e4uido da #oure no a#o .ou ompilar #inta*e,$.+ depoi# u#amo# o omando >o #e4uido do nome do e*eut;.el 8ue #er; 4erado (a#o de um erro de um erro de n2o reonheido omo omando interno ou e*terno po##i.elmente #eu ompilador n2o e#t; na# .ari;.ei# de ambiente ou .oL e#t; u#ando outro tipo de ompilador+ outra oi#a para ompilar pro4rama# ++ pelo terminal u#amo# 4++ no lu4ar de 4! C:Vu#er#Vft#$%&Vde#ktopW 4 #inta*e,$. >o e*emplo.e*e depoi# de 4erar o e*eut;.el ba#ta abrir ele+ .oL de.e ter notado 8ue ele feho i##o por8ue ele n2o fa) nada 6 um pro4rama inQtil kkkk. !.1 +i,liotecas da linguagem C/C++ <ma da# .anta4en# da pro4rama52o 8ue .oL n2o prei#a riar tudo 3; e*i#tem bibliotea# de fun59e# pronta# 8ue 6 #: delarar e u#ar+ na lin4ua4em C/C++ para delarar uma bibliotea header u#amo# a direti.a Oinlude #e4uido da bibliotea entre o #7mbolo menor e maior+ boa parte da# .e)e# delaramo# uma bibliotea no ome5o da #oure entre a# primeira# linha#+ e*i#tem di.er#a# bibliotea# padr9e# 8ue #er.em para di.er#o# proedimento# entre ele# mo#trar al4o na tela manipular e.ento# do #i#tema operaional+ manipular te*to+ manipular o tempo+ entre outra# oi#a#+ a# bibliotea# mai# u#ada# na lin4ua4em C #2o J#tdio.hK para manipular fun59e# de entrada e #a7da de dado#+ J#tdlib.hK tem di.er#a# fun59e# do #i#tema+ J#trin4.hK para manipular te*to#+ JtMpe.hK para manipular aratere#+ time.h para manipular o tempo+ #tdbool.h para manipular l:4ia booleana+ J'indo'#.hK para manipula52o de "?I no #i#tema operaional 'indo'#+ Juni#td.hK para manipula52o de determinada# "?I do #i#tema linu*/uni*+ J'in#ok/.hK para manipula52o de rede do #i#tema 'indo'#+ J#M#/#oket.hK para manipula52o de rede do #i#tema linu*+ Jdirent.hK para manipula52o do# diret:rio# do #i#tema 'indo'#+ J#M#/dir.hK para manipula52o do# diret:rio# do #i#tema linu*+ J#M#/tMpe#.hK para manipula52o de al4un# tipo# de dado# no #i#tema linu*+ na lin4ua4em C++ 6 po##7.el u#ar e##a# bibliotea# por6m e*i#tem bibliotea# 8ue #: funiona na lin4ua4em C++ omo por e*emplo a Jio#treamK 8ue #eria uma melhoria da #tdio.h para lin4ua4em C++ Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a return ,Z b e##a# bibliotea# na maioria da# .e)e# e#t; em um diret:rio do ompilador mai# 6 po##7.el oloar ela# no me#mo diret:rio da #oure por6m teria 8ue oloar entre a#pa# dupla# em .e) de menor e maior na hora de delarar Oinlude ]#tdio.hW Oinlude ^eof.h^ int main(.oid! a return ,Z b e*i#tem outro# tipo# bibliotea# al6m da# header um e*emplo #2o a# DLL+ 8uando uma bibliotea 6 ompilada 3unto 4erando o e*eut;.el hamamo# ela de bibliotea e#t;tia+ e 8uando ela 6 hamada em tempo de e*eu52o (run>time! hamamo# de bibliotea din=mia+ tamb6m #eria po##7.el riar #ua# pr:pria# bibliotea# para reapro.eitar parte do :di4o+ mai# para frente .amo# .er melhor i##o !.2 Comentrios c #empre bom omentar o #eu :di4o para failitar na leitura+ o# oment;rio# tamb6m #2o u#ado na# primeira# linha# para de#re.er o :di4o ou informa52o omo o autor ou de#ri52o do odi4o+ 8uando o ompilador aha um oment;rio ele i4nora a8uele parte do :di4o+ um oment;rio tambem pode #er.ir para e*luir temporariamente um treho do :di4o a##im permitindo .oL debu4ar+ para omentar u#amo# dua# .e)e# a barra (//! para omentar a linha toda+ o 8ue e#ti.er depoi# .ai #er o oment;rio //forum: end of file Oinlude ]#tdio.hW //i##o 6 uma bibliotea //fun52o prinipal int main(.oid! a // return ,Z e##e return foi e*luido b al6m de##e oment;rio de uma linha podemo# omentar .;ria# linha# om barra a#teri#o e para finali)ar a#teri#o barra (/d e d/!+ e##e tipo de oment;rio pode #er u#ado dentro do# :di4o# #em afet;>lo# /d forum: end of file ebook: /++ d/ Oinlude ]#tdio.hW int main(/d i##o 6 um tipo .a)io d/ .oid ! a return /d .ai retornar o numero , d/ ,Z b al4uma# IDE permite oment;rio de de#ta8ue+ e##e# tipo# de oment;rio# #2o pareido om o# oment;rio# de .;ria# linha# por6m tem um a#teri#o a mai# (/dd e dd/!+ al4uma# IDE permite de#taar al4un# par;4rafo# dentro de##e tipo de oment;rio u#ando al4uma# repre#enta59e# omo por e*emplo o -"uthor: para de#taar o autor do :di4o /dd -"uthor: end of file dd/ Oinlude ]#tdio.hW int main(.oid! a return ,Z b !.! Di"erena da linguagem C e C++ " #inta*e da lin4ua4em C/C++ #2o i4uai# a diferen5a 8ue a lin4ua4em C++ tem oi#a# no.a# omo orienta52o a ob3eto+ pa##a4em de ar4umento de la##e# para a# fun59e#+ aloa52o din=mia de mem:ria pelo operador ne' e libera52o da mem:ria pelo operador delete+ uma# e#trutura# no.a# omo name#pae e la##+ a# on#tante# true e fal#e n2o prei#ar da bibliotea #tdbool.h+ al4un# tipo# de dado# no.o# omo #trin4+ tamb6m 6 omum u#ar e*ten#2o J.K para lin4ua4em C e J.ppK para lin4ua4em C++ -.0 *a.da de dados /output0 Suando di)emo# entrada (input! ou #aida (output! e#tamo# en.iando ou reebendo dado# de um ponto " para o ponto D+ no a#o temo# 8ue definir o maro )ero 8ue na maioria da# .e)e# 6 pr:prio pro4rama+ ou #e3a uma #a7da de dado# poderia #er al4o 8ue #ai do pro4rama para o monitor+ ou do pro4rama para impre##ora+ ou do pro4rama para o ID ou mem:ria+ 3; a entrada de dado# 6 o opo#to #eria para dentro do pro4rama podendo #er al4o 8ue e#re.emo# no telado+ mo.imento do mou#e+ ou al4uma oi#a do ID+ e##e termo input e output tamb6m 6 u#ado em outra# ;rea# omo por e*emplo manuten52o #e .oL per4untar para t6nio para ele definir o8ue 6 um telado e um monitor ele ertamente .ai di)er 8ue o monitor 6 um perif6rio de #a7da e o telado um perif6rio de entrada+ o termo u#ado para o# dado# en.iado ou reebido #2o hamado de flu*o+ #tream ou buffer+ e o# te*to# na pro4rama52o #e hama #trin4+ uma #trin4 6 um on3unto de aratere# 8ue #eria o me#mo 8ue di)er 8ue uma pala.ra 6 um on3unto de letra#+ toda #trin4 de.e fiar entre a#pa# para o ompilador n2o onfundir ela om uma .ari;.el+ a #a7da de dado# mai# u#ada #er; para o monitor um e*emplo de fun52o 8ue mo#tra al4o na tela 6 o printf e put# da bibliotea #tdio.h+ na lin4ua4em ++ podemo# u#ar o out da bibliotea io#tream+ para u#ar o printf ou put# temo# 8ue delarar a bibliotea #tdio.h+ depoi# dentro do e#opo da fun52o prinipal u#amo# a fun52o e pa##amo# omo ar4umento a no##a #trin4 8ue #er; mo#trada na tela e por fim u#amo# ponto e .7r4ula para finali)ar Oinlude ]#tdio.hW int main(.oid! a printf(^u#ando o printf^!Z return ,Z b o u#o da fun52o put# 6 a me#ma oi#a# 8ue o printf Oinlude ]#tdio.hW int main(.oid! a put#(^u#ando o put#^!Z return ,Z b tamb6m poder7amo# u#ar .;ria# .e)e# o printf ou put#+ ou o# doi# 3unto# Oinlude ]#tdio.hW int main(.oid! a printf(^u#ando o printf^!Z printf(^u#ando a #e4unda .e) o printf eD^!Z put#(^u#ando o put#^! return ,Z b a diferen5a entre o put# e o printf+ 8ue o put# mo#tra apena# #trin4 3; o printf permite formatar a #a7da para mo#tra nQmero# e outro# tipo# de dado#+ para #aida de dado# para monitor de um Qnio ar;ter podemo# u#ar puthar da bibliotea #tdio.h Oinlude ]#tdio.hW int main(.oid! a puthar(UfU!Z puthar(UtU!Z puthar(U#U!Z return ,Z b para u#ar o out da lin4ua4em ++ temo# 8ue oloar um name#pae #td ante# da fun52o fiando #td::out e u#ar dua# .e)e# o menor #e4uido da #trin4 Oinlude ]io#treamW int main(.oid! a #td::out ]] ^u#ando o out^Z return ,Z b tamb6m #eria po##7.el u#ar o printf ou put# na lin4ua4em C+++ por6m 6 reomendado o u#o da bibliotea #tdio no lu4ar de #tdio.h Oinlude ]#tdioW int main(.oid! a printf(^#tdio e i4ual a #tdio.h^!Z put#(^porem #tdio nao funiona na lin4ua4em C #o em C++^!Z return ,Z b -.1 1itando da 2anela "ec3ar Ce .oL u#a 'indo'# de.e ter perebido 8ue o pro4rama e*euto e depoi# feho automatiamente para e.itar i##o temo# 8ue pau#ar o terminal+ para i##o e*i#tem .;ria# fun59e# uma dela# 6 o 4eth da bibliotea onio.h+ e##a 6 uma da# fun59e# de entrada de dado# do telado+ para u#ar ba#ta delarar #em nenhum ar4umento a##im Oinlude ]#tdio.hW Oinlude ]onio.hW int main(.oid! a printf(^8uero .er #e .oe feha a4ora 3anelafff^!Z 4eth(!Z return ,Z b outra fun52o 6 o #M#tem da bibliotea #tdlib.h+ para u#ar ba#ta pa##ar omo ar4umento a #trin4 Jpau#eK Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a printf(^hello 'orldfff^!Z #M#tem(^pau#e^!Z return ,Z b -.2 4ormatao de string Suando u#amo# dua# .e)e# o printf ele mo#tra# a# dua# #trin4# na me#ma linha+ para mo#trar em linha# diferente# temo# 8ue u#ar um :di4o de e#ape 8ue repre#ente a 8uebra de linha+ o# :di4o# de e#ape# ome5a om ontra barra #e4uida de um ar;ter+ para a 8uebra de linha u#amo# ontra barra mai# o ar;ter JnK (Vn! Oinlude ]#tdio.hW int main(.oid! a printf(^VnVn^!Z printf(^era uma .e) uma 4ato om 0 .ida#Vn^!Z printf(^pa##o um arro E*E por ima dele+Vn e ele morreu FIBfffVnVn^!Z return ,Z b para repre#entamo# a#pa# u#amo# ontra barra mai# o a#pa# (VK!+ Oinlude ]#tdio.hW int main(.oid! a printf(^fato > todo# 8ue fa)em #oft'are fa) V^pro4ramaV^ Vnmai# nem todo# 8ue fa)em V^pro4ramaV^ fa) #oft'are^!Z return ,Z b para tabula52o u#amo# ontra barra mai# o ar;ter JtK (Vt!+ um bom u#o para i##o 6 riar banner para #eu pro4rama Oinlude ]#tdio.hW int main(.oid! a printf(^ggggggggggggggggggggggVn^!Z printf(^Vt EOFVn^!Z printf(^ggggggggggggggggggggggVnVn^!Z return ,Z b para emitir um #om (beep! u#amo# ontra barra mai# o ar;ter JaK (Va!+ e##e #om #era emitido da plaa mae e n2o da ai*a de #om Oinlude ]#tdio.hW int main(.oid! a printf(^Va pro4rama li4ado^!Z printf(^VaVa pro4rama de#li4ado^!Z return ,Z b para repre#entar o #7mbolo de porenta4em u#amo# dua# .e)e# porenta4em (hh! Oinlude ]#tdio.hW int main(.oid! a printf(^ho3e eu e#tou %,,hh bebado ()ueira to nao!^!Z return ,Z b tamb6m e*i#te outro tipo de :di4o de e#ape para atribui52o de .ari;.ei# na #trin4+ e##e :di4o de e#ape 6 o #7mbolo de porenta4em #e4uido do ar;ter 8ue repre#enta o tipo de dado# 8ue #er; mo#trado+ hd ou hi tipo inteiro+ hf tipo float+ hlf tipo double+ h tipo har+ h# tipo #trin4+ he ou hE repre#enta52o do nQmero em forma e*poente+ h* ou he repre#enta52o do nQmero em forma he*adeimal+ hp endere5o de mem:ria+ ho repre#enta52o do nQmero em forma otal+ al6m de##e# e*i#tem outro# :di4o# de e#ape. Oinlude ]#tdio.hW int main(.oid! a printf(^deimal: hd Vn^+$%&!Z printf(^he*adeimal: h* Vn^+$%&!Z printf(^otal: ho Vn^+$%&!Z printf(^float: hf^+$.%&!Z return ,Z b -.! 5ari1eis e constantes <ma .ari;.el 6 uma aloa52o de mem:ria 8ue permite um arma)enamento de dado# na mem:ria do omputador+ o# dado# arma)enado ne##a# .ari;.ei# podem #er modifiado ao deorrer do pro4rama+ a# .ari;.ei# pode ter 8ual8uer nome ontando 8ue #e3a nome# 8ue omee om letra# de JaK ate J)K ou underline+ #em e#pa5o e podendo #er maiQ#ula# ou minQ#ula#+ por6m por padr2o 6 reomendado oloar toda# a# .ari;.ei# minQ#ula# e a# on#tante# em maiQ#ula# para aumentar a le4ibilidade+ podemo# riar uma .ari;.el em $ lu4are# diferente #endo ele# dentro do e#opo de uma fun52o riada e##a# #2o a# .ari;.ei# loai# omo por e*emplo dentro da fun52o prinipal (main!+ no ar4umento de uma fun52o riada omo por e*emplo onde #eria o .oid da fun52o main+ ou no lado de fora para a# fun59e# 4lobai# um e*emplo depoi# do# inlude#+ a# .ari;.ei# #: podem #er ae##ada# pelo# :di4o# abai*o dela# em termo l:4io .oL #: pode ae##ar uma .ari;.el depoi# de riar ela+ a# .ari;.ei# loai# #: pode #er ae##ada# dentro do e#opo onde foram riada# e a# .ari;.ei# 4lobai# pode #er ae##ada em 8ual8uer e#opo+ para riar uma .ari;.el ba#ta oloar o tipo de dado #e4uida do nome da .ari;.el+ abai*o .emo# um e*emplo de $ .ari;.ei# de tipo int Oinlude ]#tdio.hW int .ari4lobalZ int main(int .ariar4umento! a int .ariloalZ return ,Z b o# tipo# padr9e# da lin4ua4em C/C++ #2o .ari;.ei# de tipo int 8ue permite arma)enar nQmero# inteiro#+ nQmero# 8uebrado# #2o a# .ari;.ei# tipo float+ nQmero# 8uebrado# 4rande# #2o .ari;.ei# tipo double+ .ari;.ei# tipo ar;ter #2o a# har+ a# #trin4# na .erdade #2o arraM do tipo har .amo# aprender omo arma)enar ela# mai# para frente em .etore# e matri)e# a lin4ua4em ++ e*i#te o tipo #trin4 embora al4uma# fun59e# o#tuma da erro om ele Oinlude ]#tdio.hW int main(.oid! a int inteiroZ float 8uebradoZ double 8uebradoi4i4anteZ har araterZ return ,Z b para atribuirmo# o# dado# para a# .ari;.ei# oloamo# o nome da .ari;.el o #7mbolo de i4ual e o dado 8ue .ai #er arma)enado Oinlude ]#tdio.hW int main(.oid! a int endoffileZ float ft#Z endoffile g $%&Z ft# g $.%&Z return ,Z b podemo# u#ar o printf para e*ibir a .ari;.el oloando um .7r4ula depoi# da #trin4 e depoi# a .ari;.el Oinlude ]#tdio.hW int main(.oid! a int endoffileZ float ft#Z endoffile g $%&Z ft# g $.%&Z printf(^inteiro g hd Vn^+endoffile!Z printf(^float g hf^+ft#!ZZ return ,Z b tambem poderia fa)er a##im Oinlude ]#tdio.hW int main(.oid! a int endoffileZ float ft#Z endoffile g $%&Z ft# g $.%&Z printf(^inteiro g hd Vnfloat g hf^+endoffile+ft#!Z return ,Z b uma .ari;.el pode mudar o .alor ao deorrer do pro4rama ba#tando atribuir o no.o .alor para ela Oinlude ]#tdio.hW int main(.oid! a int endoffileZ endoffile g $%&Z printf(^.alor g hd^+endoffile!Z endoffile g %,,Z printf(^.alor g hd^+endoffile!Z return ,Z b tamb6m e po##7.el arma)enar em uma .ari;.el o .alor de outra .ari;.el Oinlude ]#tdio.hW int main(.oid! a int endoffileZ int ft#Z ft# g $%&Z endoffile g ft#Z printf(^.alor g hd^+ft#!Z return ,Z b 6 po##7.el iniiar um .alor 3unto om .ari;.el+ para i##o ba#ta atribuir o .alor a##im 8ue delarar ela Oinlude ]#tdio.hW int main(.oid! a int endoffile g $%&Z printf(^hd^+endoffile!Z return ,Z b 8uando tem mai# de uma .ari;.el do me#mo tipo podemo# riar ela# 3unta# #eparando por .7r4ula Oinlude ]#tdio.hW int main(.oid! a int endoffile g $%&+ ft#Z return ,Z b uma .ari;.el do tipo har de.e arma)enar ar;ter entre a#pa# #imple#+ a a#pa# dupla india #trin4 e uma #trin4 de.e #er arma)enada dentro de uma arraM do tipo har Oinlude ]#tdio.hW int main(.oid! a har letra% g UeUZ har letra/ g UoUZ har letra$ g UfUZ printf(^arater g hhh^+letra%+letra/+letra$!Z return ,Z b 3; na lin4ua4em C++ e*i#te o tipo #trin4 8ue arma)ena #trin4# Oinlude ]io#treamW int main(.oid! a #td::#trin4 eofZ eof g ^i##o ai^Z #td::out ]] eofZ return ,Z b uma on#tante 6 uma aloa52o de mem:ria 8ue n2o muda o .alor ao deorrer do pro4rama+ para riar uma on#tante riamo# uma .ari;.el e adiionamo# a pala.ra on#t ante# do tipo+ por6m tamb6m 6 nee##;rio atribuir o .alor 3unto Oinlude ]#tdio.hW int main(.oid! a on#t float ?I g $.%E%&1/Z printf(^o .alor de ?I e i4ual a hf^+?I!Z return ,Z b outra forma de riar on#tate# 6 u#ar a direti.a Odefine+ e##a direti.a #ub#titui toda parte pelo :di4o orre#pondente+ para u#ar e##a direti.a ba#ta delarar Odefine oloar um nome e o .alor+ 8uando o opilador ahar a defini52o do define ele automatiamente .ai mudar o odi4o pelo .alor do define Oinlude ]#tdio.hW Odefine ?I $.%E%&1/ int main(.oid! a printf(^o .alor de ?I e i4ual a hf^+?I!Z return ,Z b o :di4o anterior #eria e8ui.alente a e##e Oinlude ]#tdio.hW int main(.oid! a printf(^hf^+$.%E%&1/!Z return ,Z b mai# para frente .amo# .er outro# e*emplo# de omo u#ar a direti.a define para on#truir parte do :di4o -.- 5etores e matri6es na ria52o de muita# .ari;.ei# para o me#mo prop:#ito 6 reomendado riar uma arraM+ uma arraM 6 uma .ari;.el omo muito# #e4mento#+ e*i#te doi# tipo# de arraM o# .etore# e a# matri)e#+ o# .etore# permite apena# um #e4uimento+ 3; a# matri)e# ada #e4mento 6 um no.o #e4mento 8ue pode ter no.o# #e4mento#+ para e*pliar melhor ima4ine 8ue .oL tenha 8ue riar / .ari;.ei# para definir altura e lar4ura+ no lu4ar de##a# dua# .ari;.ei# podemo# ria % arraM om doi# e#pa5o#+ para riar uma arraM 6 a me#ma oi#a 8ue riar uma .ari;.el ba#ta oloar o tipo um nome+ a diferen5a 8ue temo# 8ue abrir e fehar olhete# e dentro dele oloar o tamanho no a#o do e*emplo .ai #er / Oinlude ]#tdio.hW int main(.oid! a int tamanho[/\Z return ,Z b no e*emplo aima u#amo# um .etor om / tamanho#+ para arma)enar o .alor nele ba#ta atribuir o .alor na .ari;.el mudando o nQmero do olhete (inde*! 8ue ome5a no om o nQmero , Oinlude ]#tdio.hW int main(.oid! a int tamanho[/\Z tamanho[,\ g $,,Z tamanho[%\ g %&Z printf(^hd Vn^+tamanho[,\!Z printf(^hd^+tamanho[%\!Z return ,Z b para iniiar o# .alore# om a arraM u#amo# ha.e# e #eparamo# o .alor om .7r4ula Oinlude ]#tdio.hW int main(.oid! a int tamanho[/\ g a$,,+%&bZ printf(^hd Vn^+tamanho[,\!Z printf(^hd^+tamanho[%\!Z return ,Z b tamb6m 6 po##7.el n2o definir o tamanho+ por6m #: funiona para a# arraM om .alore# iniiado#+ de##a maneira a arraM .ai ter e*atamente o tamanho i4ual a 8uantidade de .alore# Oinlude ]#tdio.hW int main(.oid! a int tamanho[\ g a$,,+%&bZ printf(^hdVnhd^+tamanho[,\+tamanho[%\!Z return ,Z b podemo# riar #trin4# de##a maneira+ uma #trin4 de.e ter o tamanho maior para adiionar o odi4o de e#ape UV,U no final Oinlude ]#tdio.hW int main(.oid! a har forum[E\ g aUeU+UoU+UfUbZ printf(^h#^+forum!Z return ,Z b #e atribu7rmo# o# ar;tere# manualmente temo# 8ue adiionar o :di4o de e#ape nulo manualmente tamb6m Oinlude ]#tdio.hW int main(.oid! a har forum[E\Z forum[,\ g UeUZ forum[%\ g UoUZ forum[/\ g UfUZ forum[$\ g UV,UZ printf(^h#^+forum!Z return ,Z b o odi4o de e#ape nulo 6 e8ui.alente ao odi4o he*adeimal ,*,, Oinlude ]#tdio.hW int main(.oid! a har forum[E\Z forum[,\ g UeUZ forum[%\ g UoUZ forum[/\ g UfUZ forum[$\ g ,*,,Z printf(^h#^+forum!Z return ,Z b uma forma mai# #imple# de atribuir uma #trin4 a uma arraM 6 iniiar ela 3unto+ n2o tem omo atribuir uma #trin4 para uma arraM #em #er ar;ter por ar;ter Oinlude ]#tdio.hW int main(.oid! a har forum[E\ g ^eof^Z printf(^h#^+forum!Z return ,Z b tamb6m podemo# ler o# ar;tere# de uma arraM Oinlude ]#tdio.hW int main(.oid! a har forum[E\ g ^eof^Z printf(^h h^+forum[,\+forum[/\!Z return ,Z b a# matri)e# tamb6m hamada# arraM multidimen#ional arma)ena outro #e4mento ao in.6# do# .alore#+ a .anta4em 8ue permite arma)enar uma e#p6ie de arraM dentro da outra+ para riar uma matri) ba#ta u#ar outro# olhete# Oinlude ]#tdio.hW int main(.oid! a int matri)[/\[$\Z return ,Z b para atribuirmo# ba#ta atribuir ao Qltimo olhete Oinlude ]#tdio.hW int main(.oid! a int matri)[/\[$\Z matri)[,\[,\ g $%&Z matri)[,\[%\ g &,Z matri)[,\[/\ g $,Z matri)[%\[,\ g 1,,Z matri)[%\[%\ g G$,Z matri)[%\[/\ g &&&Z return ,Z b para iniiar o# .alore# na arraM oloamo# outra# ha.e# dentro orre#pondente a 8uantidade de #e4mento# Oinlude ]#tdio.hW int main(.oid! a int matri)[/\[$\ g aa$%&+&,+$,b+a1,,+G$,+&&&bbZ return ,Z b podemo# riar 8uanta# inde* a 4ente 8ui#er Oinlude ]#tdio.hW int main(.oid! a int matri)[%,\[%,\[%,\[%,\ g aaaa$%&+%,,bbbbZ printf(^hd Vn^+matri)[,\[,\[,\[,\!Z printf(^hd^+matri)[,\[,\[,\[%\!Z return ,Z b -.7 8onteiro e alocao din9mica e estticas toda# a# .ari;.ei# e*i#te um endere5o de mem:ria onde ela# e#t2o arma)enada#+ o# ponteiro# permite ae##ar e manipular e##e# endere5o#+ a .anta4em de um ponteiro 8ue .oL pode manipular .ari;.ei# loai# fora do #eu e#opo+ para riar um ponteiro ba#ta riar uma .ari;.el e oloar a#teri#o ante# do nome Oinlude ]#tdio.hW int main(.oid! a int dponteiroZ return ,Z b om ponteiro riado ba#ta atribuir o endere5o de mem:ria de um .ari;.el a ele+ para i##o atribu7mo# o endere5o da .ari;.el oloando o #7mbolo Y #e4uida do nome da .ari;.el Oinlude ]#tdio.hW int main(.oid! a int .aria.el g $%&Z int dponteiroZ ponteiro g Y.aria.elZ return ,Z b para e*ibir o .alor onde e#ta apontando ba#ta oloar um a#teri#o ante# do nome do ponteiro+ para e*ibir apena# o endere5o ba#ta oloar #em a#teri#o Oinlude ]#tdio.hW int main(.oid! a int .aria.el g $%&Z int dponteiroZ ponteiro g Y.aria.elZ printf(^.alor: hd Vn^+dponteiro!Z printf(^endereo: hd^+ponteiro!Z return ,Z b para mudar o .alor onde ele t; apontando ba#ta oloar a#teri#o (no a#o o a#teri#o .ai ae##ar a .ari;.el e #em ele .ai ae##ar o ponteiro! Oinlude ]#tdio.hW int main(.oid! a int .aria.el g $%&Z int dponteiroZ ponteiro g Y.aria.elZ dponteiro g %,,Z printf(^hd^+.aria.el!Z return ,Z b tamb6m podemo# riar ponteiro para ponteiro+ para i##o ba#ta oloar um no.o a#teri#o a ada no.o ponteiro e atribuir o endere5o de mem:ria do# outro# ponteiro# Oinlude ]#tdio.hW int main(.oid! a int .aria.el g $%&Z int dponteiro%+ ddponteiro/+ dddponteiro$Z ponteiro% g Y.aria.elZ ponteiro/ g Yponteiro%Z ponteiro$ g Yponteiro/Z printf(^hd^+dddponteiro$!Z return ,Z b a# .e)e# 6 nee##;rio aloar um e#pa5o na mem:ria e depoi# liber;>la manualmente e##e tipo de aloa52o 6 hamado aloa52o din=mia de mem:ria+ diferente da# .ari;.ei# loai# 8ue o e#pa5o 6 liberado apena# 8uando a fun52o for de#tru7da e da# .ari;.ei# 4lobai# 8ue #: 6 liberado 8uando o pro4rama for finali)ado a# din=mia# pode #er liberada a 8ual8uer momento+ para riar uma aloa52o din=mia u#amo# a fun52o mallo da bibliotea #tdlib.h+ a fun52o mallo aloa uma 8uantidade e#peifia e retorna o endere5o de mem:ria para i##o #e fa) nee##;rio riar um ponteiro do tipo e#peifio para reeber o endere5o+ na fun52o mallo u#amo# outra fun52o 8ue 6 o #i)eof 8ue retorna o tamanho e*ato do tipo+ tamb6m temo# 8ue pa##amo# omo ar4umento o tipo para o #i)eof Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a int d.aria.elidinamia g mallo(#i)eof(int!!Z d.aria.elidinamia g $%&Z printf(^hd^+d.aria.elidinamia!Z return ,Z b em al4un# ompiladore# 6 nee##;rio a on.er#2o de tMpea#t para o tipo do ponteiro+ tamb6m .amo# aprender tMpea#t mai# para frente+ para liberar o endere5o o e#pa5o u#amo# a fun52o free da bibliotea #tdlib.h e pa##amo# omo ar4umento o ponteiro 8ue tem o endere5o de mem:ria Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a int d.aria.elidinamia g mallo(#i)eof(int!!Z d.aria.elidinamia g $%&Z printf(^hd^+d.aria.elidinamia!Z free(.aria.elidinamia!Z return ,Z b tamb6m 6 po##7.el riar .etore# pelo mallo ba#ta multipliar pela 8uantidade de#e3ada Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a int d.aria.elidinamia g mallo(#i)eof(int! d /!Z .aria.elidinamia[,\ g $%&Z .aria.elidinamia[%\ g %,,Z printf(^hd Vn^+.aria.elidinamia[,\!Z printf(^hd^+.aria.elidinamia[%\!Z free(.aria.elidinamia!Z return ,Z b tamb6m 6 po##7.el riar matri)e# om mallo+ embora #e3a um pouo ompliado ter 8ue aloar e#pa5o a ada #e4mento# Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a int dd.aria.elidinamia g mallo(#i)eof(int! d /!Z .aria.elidinamia[,\ g mallo(#i)eof(int! d /!Z .aria.elidinamia[%\ g mallo(#i)eof(int! d /!Z .aria.elidinamia[,\[,\ g $%&Z .aria.elidinamia[%\[,\ g %,,Z printf(^hd Vn^+.aria.elidinamia[,\[,\!Z printf(^hd^+.aria.elidinamia[%\[,\!Z free(.aria.elidinamia!Z return ,Z b o e*emplo aima #eria o me#mo 8ue riar uma arraM Jint .aria.elidinamia[/\[/\K+ tamb6m e*i#te a fun52o allo da bibliotea #tdlib.h 8ue permite aloar uma determinada 8uantidade de .e)e# um e#pa5o ela 6 e8ui.alente ao mallo multipliado+ para u#ar ele pa##amo# omo ar4umento a 8uantidade de .e)e# 8ue .ai aloar e tamanho da aloa52o
Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a int d.aria.elidinamia g allo(/+#i)eof(int!!Z .aria.elidinamia[,\ g $%&Z .aria.elidinamia[%\ g %,,Z printf(^hd Vn^+.aria.elidinamia[,\!Z printf(^hd^+.aria.elidinamia[%\!Z free(.aria.elidinamia!Z return ,Z b 8uando prei#amo# realoar um e#pa5o podemo# u#ar a fun52o reallo da bibliotea #tdlib.h+ nela pa##amo# omo ar4umento o ponteiro 8ue .ai #er realoado e o no.o tamanho Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a int d.aria.elidinamia g mallo(#i)eof(int! d &!Z reallo(.aria.elidinamia+#i)eof(int!!Z d.aria.elidinamia g $%&Z printf(^hd Vn^+d.aria.elidinamia!Z free(.aria.elidinamia!Z return ,Z b na lin4ua4em C++ podemo# u#ar o operador ne' para aloar um determinado tipo ou e#trutura na mem:ria e o operador delete para liberar Oinlude ]io#treamW int main(.oid! a int d.aria.elidinamia g ne' intZ d.aria.elidinamia g $%&Z #td::out ]] d.aria.elidinamiaZ delete .aria.elidinamiaZ return ,Z b tamb6m 6 po##7.el aloar arraM pelo operador ne' Oinlude ]io#treamW int main(.oid! a int d.aria.elidinamia g ne' int($!Z .aria.elidinamia[,\ g $%&Z #td::out ]] .aria.elidinamia[,\Z delete[\ .aria.elidinamiaZ return ,Z b e*i#te a# aloa59e# e#t;tia#+ e##a# aloa59e# permite arma)enar um .alor em uma .ari;.el loal 8ue n2o #er; de#tru7da 3unto om a fun52o e##a# .ari;.ei# #2o mai# utili)ada# em fun59e# reur#i.a#+ para tornar uma .ari;.el e#t;tia ba#ta u#ar o operador #tati ante# do tipo da .ari;.el Oinlude ]#tdio.hW int main(.oid! a #tati int .aria.elZ return ,Z b -.: ntrada de dados /input0 3; .imo# di.er#o# modo# de #a7da# de dado# para o monitor a4ora .amo# li#tar al4un# de entrada de dado# do telado+ a fun52o put# da bibliotea #tdio.h mo#tra uma #trin4 na tela 3; a fun52o 4et# arma)ena al4o 8ue di4itarmo# do telado em uma arraM do tipo har+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento a arraM onde ela .ai arm)enar+ 8uando o pro4rama he4ar ne##a parte o terminal .ai fiar tra.ado e#perando o u#uario di4itar e depoi# apertar enter+ e##a fun52o #: permite arma)enar #trin4# e de.e #er u#ada om muito uidado e.itando uma falha onheida omo buffer o.erflo' 8ue on#i#te do u#u;rio adiionar dado# maior 8ue o tamanho da arraM a##im ae##ando outro endere5o de mem:ria Oinlude ]#tdio.hW int main(.oid! a har nome[%,,\Z 4et#(nome!Z put#(nome!Z return ,Z b outra forma de arma)enar em .ari;.ei# e#peifia# 6 u#ar o #anf da bibliotea #tdio.h+ para u#ar e##a bibliotea temo# 8ue definir o tipo para i##o u#amo# a# me#ma# formata59e# 8ue o printf e depoi# o endere5o de mem:ria da .ari;.el 8ue .amo# arma)enar+ a de#.anta4em do #anf 8ue arma)enamento de #trin4 ele n2o on#e4ue apturar o e#pa5o ent2o 6 reomendado u#ar o 4et# para #trin4 e o #anf para o# outro# tipo# Oinlude ]#tdio.hW int main(.oid! a int idadeZ #anf(^hd^+Yidade!Z printf(^hd^+idade!Z return ,Z b uma fun52o de entrada 8ue 3; u#amo# 6 o 4eth ou 4ethar da bibliotea onio.h+ para u#ar e##a fun52o ba#ta atribuir ela a uma .ari;.el do tipo har e ela apena# arma)ena um ar;ter+ uma pe8uena ob#er.a52o e##a fun52o n2o tem no linu* Oinlude ]#tdio.hW Oinlude ]onio.hW int main(.oid! a har letraZ letra g 4eth(!Z printf(^h^+letra!Z return ,Z b O 4ethar 6 pareido om a fun52o anterior a diferen5a 8ue .oL tem 8ue apertar enter Oinlude ]#tdio.hW Oinlude ]onio.hW int main(.oid! a har letraZ letra g 4ethar(!Z printf(^h^+letra!Z return ,Z b outra forma de entrar om dado# para #eu pro4rama 6 u#ar pa##a4em por ar4umento na fun52o prinipal o famo#o ommand line+ para i##o ba#ta riar dua# .ari;.ei# uma inteira 8ue #er; um ontador e o outro um ponteiro do tipo har+ 6 omum para o# pro4ramadore# em C/C++ u#a o nome ar4 e ar4.+ depoi# ba#ta u#ar a# inde* do ar4. na ordem 8ue entro om o# omando# para o pro4rama+ #e .oL u#a o omando J:VW pro4rama.e*e helpK o pro4rama.e*e #eria o ar4.[,\ e o help 6 o ar4.[%\ Oinlude ]#tdio.hW int main(int ar4+ har ddar4.! a printf(^h# Vn^+ar4.[,\!Z printf(^h#^+ar4.[%\!Z return ,Z b e*i#te um outro ar4umento no e*emplo anterior 8ue #eria outro ponteiro para a# .ari;.ei# de ambiente Oinlude ]#tdio.hW int main(int ar4+ har ddar4.+ har ddar4p! a printf(^h#Vn^+ar4p[,\!Z printf(^h#^+ar4p[%\!Z printf(^h#^+ar4p[/\!Z return ,Z b na lin4ua4em ++ podemo# u#ar in da bibliotea io#tream para arma)enar um .alor ou #trin4 na em uma .ari;.el+ para u#ar o in temo# 8ue u#ar o name#pae #td i4ual ao out+ u#ar operador maior dua# .e)e# #e4uido da .ari;.el Oinlude ]io#treamW int main(.oid! a har nome[%,,\Z #td::in WW nomeZ #td::out ]] nomeZ return ,Z b -.; )anipulao de string " bibliotea mai# u#ada para manipular uma #trin4 6 a bibliotea #trin4.h+ ela e*i#tem de)ena# de fun59e# uma dela# 6 #trlen 8ue retorna a 8uantidade de ar;ter 8ue tem uma #trin4+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento a #trin4 Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a int tamZ har eof[%,,\ g ^forum eof^Z tam g #trlen(eof!Z printf(^hd^+tam!Z return ,Z b om a fun52o #trre. podemo# in.erter a #trin4 Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a int tamZ har eof[%,,\ g ^forum eof^Z #trre.(eof!Z printf(^h#^+eof!Z return ,Z b om a fun52o #trupr tran#formamo# todo# o# ar;tere# em maiQ#ulo# Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a int tamZ har eof[%,,\ g ^forum eof^Z #trupr(eof!Z printf(^h#^+eof!Z return ,Z b om a fun52o #trl'r tran#formamo# todo# o# ar;tere# em minQ#ulo# Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a int tamZ har eof[%,,\ g ^FON<B EOF^Z #trl'r(eof!Z printf(^h#^+eof!Z return ,Z b a fun52o #trpM opia uma #trin4 para uma arraM+ para u#ar ela temo# 8ue pa##ar omo ar4umento a arraM e depoi# a #trin4 a #er arma)enada Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\Z #trpM(eof+^forum eof^!Z printf(^h#^+eof!Z return ,Z b #: lembrando 8ue n2o e po##7.el atribuir uma #trin4 em uma arraM diretamente #e prei#armo# atribuir #trin4 a uma arraM 6 reomendado u#ar o #trpM Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\Z har ft#[%,,\ g ^hft#$%&^Z //6 .alido iniiar a #trin4 3unto om a arraM eof g ^forum eof^Z //n2o 6 .alido atribuir a #trin4 diretamente para arraM eof[,\ g UfUZ //6 .alido atribuir arater por arater return ,Z b para 3untar (onatenar! dua# #trin4# em uma arraM podemo# u#ar a fun52o #trat+ o u#o de##a fun52o 6 pareida om a fun52o #trpM Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\ g ^forum ^Z har ft#[%,,\ g ^eof^Z #trat(eof+ft#!Z printf(^h#^+eof!Z return ,Z b om a fun52o #tr#tr d; para loali)ar uma oorrLnia de #trin4 dentro de uma #trin4 ou #e3a uma #ub #trin4+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento a #trin4 onde .amo# prourar e a outra #trin4 8ue #er; pe#8ui#ada+ tamb6m temo# 8ue atribuir o retorno da fun52o para um ponteiro do tipo har Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\ g ^.i#item o forum eof^Z har dponteiroZ ponteiro g #tr#tr(eof+^forum^!Z printf(^h#^+ponteiro!Z return ,Z b ?odemo# u#ar a fun52o #trhr para loali)ar a primeira oorreria de um aratere+ o u#o de##a fun52o 6 pareida om #tr#tr Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\ g ^.i#item o forum eof^Z har dponteiroZ ponteiro g #tr#tr(eof+UfUU!Z printf(^h#^+ponteiro!Z return ,Z b @anto a fun52o #tr#tr e a fun52o #trhr podemo# e*ibir a 8uantidade de aratere# ate a oorrLnia+ para i##o ba#ta #ubtrair o ponteiro pela #trin4 Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\ g ^.i#item o forum eof^Z har dponteiroZ ponteiro g #tr#tr(eof+^forum^!Z printf(^hd^+ponteiro > eof!Z return ,Z b para #abe #e uma #trin4 6 idLntia a outra #trin4 u#amo# a fun52o #trmp+ e##a fun52o ompara todo# o# aratere# da# dua# #trin4 a#o #e3a idLntio .ai retornar o nQmero ,+ a#o a primeira #trin4 #e3a maior ira retorna um nQmero po#iti.o+ a#o a #e4unda #e3a maior ira retorna ne4ati.o+ e##a fun52o #er; muito u#ada na e#trutura de ondi52o para omparar dua# #trin4# Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a har eof[%,,\ g ^.i#item o forum eof^Z har ft#[%,,\ g ^.i#item o forum eof^Z int lolZ lol g #trmp(eof+ft#!Z printf(^hd^+lol!Z return ,Z b podemo# u#ar a fun52o #printf da bibliotea #tdio.h para arma)enar uma #trin4 formatada em uma arraM+ o u#o de##a fun52o e pareida om o printf por6m temo# 8ue definir a arraM 8ue #er; arma)enada omo ar4umento ante# Oinlude ]#tdio.hW int main(.oid! a har eof[%,,\Z int .alor g $%&Z #printf(eof+^numero g hd^+.alor!Z printf(^h#^+eof!Z return ,Z b -.< )anipulao de carcter Como 3; #abemo# ada #trin4 6 um on3unto de aratere# ou uma arraM do tipo har 8ue pode #er manipulada pelo po#i52o dela+ podemo# manipular e##e# aratere# um a um u#ando al4uma# bibliotea# entre ela# tMpe.h+ uma da# fun59e# de##a bibliotea 6 o toupper 8ue on.erte o ar;ter para maiQ#ulo para u#ar ela ba#ta pa##ar omo ar4umento o arater e pe4ar o retorno dela on.ertida Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g UfUZ eof g toupper(eof!Z printf(^h^+eof!Z return ,Z b @ambem e*i#te a fun52o tolo'er da bibliotea tMpe.h 8ue fa) o opo#to da anterior Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g UFUZ eof g tolo'er(eof!Z printf(^h^+eof!Z return ,Z b podemo# u#ar a fun52o i#di4it da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um ar;ter (U,U ate U1U! e retorna o .alor , a#o n2o #e3a nenhum da8uele# arater Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g U&UZ int ft#Z ft# g i#di4it(eof!Z printf(^hd^+ft#!Z return ,Z b podemo# u#ar a fun52o i#*di4it da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um ar;ter he*adeimal (U,U ate U1U e UaU ate UfU! e retorna o .alor , a#o n2o #e3a nenhum da8uele# ar;ter Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g UfUZ int ft#Z ft# g i#*di4it(eof!Z printf(^hd^+ft#!Z return ,Z b podemo# u#ar a fun52o i#alnum da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um ar;ter alfa num6rio (U,U ate U1U e UaU ate U)U! e retorna o .alor , a#o n2o #e3a nenhum da8uele# ar;ter Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g U)UZ int ft#Z ft# g i#alnum(eof!Z printf(^hd^+ft#!Z return ,Z b podemo# u#ar a fun52o i#a#ii da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um odi4o a#ii (,, ate %/H! e retorna o .alor , a#o n2o #e3a nenhum da8uele odi4o Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g UdUZ int ft#Z ft# g i#a#ii(eof!Z printf(^hd^+ft#!Z return ,Z b podemo# u#ar a fun52o i#toupper da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um ar;ter #e3a maiQ#ulo e retorna o .alor , a#o n2o #e3a Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g U"UZ int ft#Z ft# g i#toupper(eof!Z printf(^hd^+ft#!Z return ,Z b podemo# u#ar a fun52o i#tolo'er da bibliotea tMpe.h para retornar um .alor maior 8ue , a#o #e3a um ar;ter #e3a minu#ulo e retorna o .alor , a#o n2o #e3a Oinlude ]#tdio.hW Oinlude ]tMpe.hW int main(.oid! a har eof g UaUZ int ft#Z ft# g i#tolo'er(eof!Z printf(^hd^+ft#!Z return ,Z b 7.0 L=gica aritm>tica O ponto forte da pro4rama52o 6 a l:4ia ondiional e aritm6tia+ por8ue #e a 4ente pereber o omputador #: proe##a dado# e e##e# dado# no final #2o nQmero# bin;rio#+ ou #e3a um #imple# mo.imento do mou#e ou ate me#mo pi*el na tela #2o apena# #e8uenia# de % e ,+ a lin4ua4em C/C+ + permite manipular nQmero# da me#ma forma 8ue far7amo# om uma aneta e papel por6m milhare# de .e)e# r;pido e #em erro# (#: lembrando uma m;8uina nuna erra e nuna an#a+ e pode proe##ar nQmero# milhare# de .e)e# em #e4undo#!+ a# opera59e# mai# u#ada# na matem;tia #2o #oma+ #ubtra52o+ multiplia52o e di.i#2o+ boa parte da# demai# opera59e# pode #er feita# de al4uma forma por e##a# E opera59e#+ uma da# bibliotea# mai# u#ada# 6 a math.h embora a# opera59e# itada# anteriormente n2o prei#e de##a bibliotea+ al4un# #7mbolo# 8ue #2o u#ado na matem;tia de.e #er #ub#titu7do por al4un# u#ado# na inform;tia omo por e*emplo na multiplia52o u#amo# o a#teri#o (d! e na di.i#2o a barra (/!+ na adi52o u#amo# o mai# (+! e na #ubtra52o u#amo# o h7fen (>!+ podemo# fa)er 8ual8uer uma de##a# opera59e# e atribuir o re#ultado a uma .ari;.el Oinlude ]#tdio.hW int main(.oid! a int #oma+ #ubt+ mult+ di.iZ #oma g $ + &Z #ubt g %, > &Z mult g / d HZ di.i g %, / $Z printf(^hd Vn^+#oma!Z printf(^hd Vn^+#ubt!Z printf(^hd Vn^+mult!Z printf(^hd^+di.i!Z return ,Z b
#: lembrando 8ue al4uma# opera59e# omo di.i#2o aaba #obrando nQmero por e*emplo %,/$ #obra % e##e nQmero #e hama re#to ou modulo+ para a 4ente on#e4uir o modulo de uma di.i#2o u#amo# o operador porenta4em (h! no lu4ar da barra Oinlude ]#tdio.hW int main(.oid! a int modulo g %, h $Z printf(^hd^+modulo!Z return ,Z b
tamb6m podemo# fa)er mai# de uma opera52o a##im Oinlude ]#tdio.hW int main(.oid! a int modulo g %, + $ > &Z printf(^hd^+modulo!Z return ,Z b porem #e hou.er multiplia52o/di.i#2o entre a# opera59e# de #oma/#ubtra52o ele .ai fa)er primeiro a# de multiplia52o/di.i#2o+ ent2o o re#ultado de /+&d/ g %/ ao in.6# do re#ultado %E Oinlude ]#tdio.hW int main(.oid! a int modulo g / + & d /Z printf(^hd^+modulo!Z return ,Z b para e.itar i##o oloamo# entre parLnte#e# a# opera59e# meno# #i4nifiati.a para #er feito primeiro Oinlude ]#tdio.hW int main(.oid! a int modulo g (/ + &! d /Z printf(^hd^+modulo!Z return ,Z b o e*emplo anterior tamb6m poderia #er feito a##im Oinlude ]#tdio.hW int main(.oid! a int modulo g ((/ + &! d /!Z printf(^hd^+modulo!Z return ,Z b 6 po##7.el fa)er opera59e# om uma .ari;.el e atribuir a ela me#mo Oinlude ]#tdio.hW int main(.oid! a int eof g %,Z eof g eof + &Z printf(^hd^+eof!Z return ,Z b 8uando fa)emo# uma opera52o matem;tia para atribuir a me#ma .ari;.el podemo# u#ar o #7mbolo da opera52o #e4uida do #7mbolo de i4ual e o nQmero i##o #eria uma #obrear4a de operadore#+ o e*emplo abai*o #eria o me#mo 8ue o anterior Oinlude ]#tdio.hW int main(.oid! a int eof g %,Z eof +g &Z printf(^hd^+eof!Z return ,Z b tamb6m 6 po##7.el inrementar ou derementar um nQmero de um .ari;.el adiionado doi# #7mbolo# de mai# ou doi# #7mbolo# de meno# na frente da .ari;.el Oinlude ]#tdio.hW int main(.oid! a int * g $,,+ M g %,,Z *++Z M>>Z printf(^* g hd VnM g hd^+*+M!Z return ,Z b 6 po##7.el fa)er o me#mo adiionando o# #7mbolo# de ++/>> ante# da .ari;.el+ a diferen5a e omo o ompilador .ai interpretar a inrementa52o na8uele momento .amo# .er melhor a diferen5a na parte de e#trutura de repeti52o Oinlude ]#tdio.hW int main(.oid! a int * g $,,+ M g %,,Z ++*Z >>MZ printf(^* g hd VnM g hd^+*+M!Z return ,Z b om a fun52o po' da bibliotea math.h podemo# retornar a pontenia de um nQmero+ para u#ar ela ba#ta pa##ar omo ar4umento o nQmero e o outro nQmero 8ue .ai ele.ar a potLnia Oinlude ]#tdio.hW Oinlude ]math.hW int main(.oid! a int eof g po'($+/!Z printf(^hd^+eof!Z return ,Z b para #aber a rai) 8uadrada ba#ta u#ar a fun52o #8rt e pa##ar omo ar4umento o nQmero depoi# pe4a o retorno Oinlude ]#tdio.hW Oinlude ]math.hW int main(.oid! a float eof g #8rt($!Z printf(^hf^+eof!Z return ,Z b para retornar o .alor ab#oluto de um nQmero u#amo# a fun52o ab# Oinlude ]#tdio.hW Oinlude ]math.hW int main(.oid! a int eof g ab#($%&!Z printf(^hd^+eof!Z return ,Z b om a fun52o floor ele retorna o nQmero om a parte 8uebrada )erada ($.%& g $.,! Oinlude ]#tdio.hW Oinlude ]math.hW int main(.oid! a float eof g floor($.%&!Z printf(^hf^+eof!Z return ,Z b om a fun52o eil a a4ente truna o nQmero inrementado mai# % ($.%& g E.,! Oinlude ]#tdio.hW Oinlude ]math.hW int main(.oid! a float eof g eil($.%&!Z printf(^hf^+eof!Z return ,Z b podemo# .er 8ue 8uando u#amo# .aria.ei# do tipo float ele n2o formata o# )ero# dei*ando um nQmero 4rande ($.%& g $.%&,,,,!+ para formatar a #a7da do nQmero float podemo# oloar a 8uantidade m;*ima 8ue ele .ai e*ibir 3unto ao :di4o de e#ape hf+ para fa)er i##o ante# do JfK oloamo# um ponto #e4uido do nQmero 8ue .ai #er e*ibido no meu a#o o nQmero 8uebrado 6 o %& ent2o #2o apena# doi# nQmero# fiando h./f Oinlude ]#tdio.hW int main(.oid! a float eof g $.%&Z printf(^h./f^+eof!Z return ,Z b e*i#tem outra# fun59e# da bibliotea math.h por6m n2o .amo# no# aprofundar muito 7.1 Logica ,ooleana E##e tipo de l:4ia di) #e determinada a52o 6 .erdadeira ou fal#a+ e##a a52o poderia #er 8ual8uer oi#a dei# de uma .ari;.el riada ou n2o+ #e determinado ar;ter 6 e*i#tente em uma #trin4 ou n2o+ #e o pro4rama u#a interfae (<I ou n2o+ 8ual8uer oi#a pode #er definida omo uma lo4ia booleana por e*emplo J.oL e#t; lendo e##e ebook+ #im ou naojK+ a l:4ia boolena n2o on#i#te em #aber omo aonteeu e #im #e aonteeu e depoi# retorna #im ou n2o (podemo# di)er 8ue a lo4ia booleana 6 o Min Man4 da pro4rama52o!+ para on.erter o true/fal#e para a pro4rama52o u#amo# o nQmero % e ,+ o nQmero % 6 true e o nQmero , 6 fal#e embora 8ual8uer nQmero aima de % tamb6m 6 true e 8ual8uer nQmero abai*o de , 6 fal#e Oinlude ]#tdio.hW int main(.oid! a int . g &+ f g >&Z printf(^.erdadeiro g hd Vn^+.!Z printf(^fal#o g hd^+f!Z return ,Z b e*i#te um tipo de .ari;.el 8ue n2o 6 padr2o na lin4ua4em C por6m ele #e torna padr2o na lin4ua4em C+++ e##e tipo 6 o bool e para u#ar ele na lin4ua4em C temo# 8ue delarar a bibliotea #tdbool.h+ 3a na lin4ua4em C++ n2o 6 nee##;rio delarar Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a bool .erdade g %Z bool fal#o g ,Z return ,Z b na bibliotea #tdbool.h tamb6m temo# a on#tante true e fal#e 8ue 6 e8ui.alente ao .alor % e , Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a bool .erdade g trueZ bool fal#o g fal#eZ return ,Z b embora o u#o do true/fal#e #e3a o me#mo 8ue u#ar %/, u#ando o true/fal#e dei*a o pro4rama mai# le47.el 7.2 ?perao ,it a ,it "# opera59e# bit a bit manipula ada bit de um bMte+ % bit 6 a menor 8uantidade de dado# 8ue omputador on#e4ue ler e um bit #: tem dua# po##ibilidade# % e ,+ ent2o n2o e*i#tem muita# oi#a# 8ue poderia #e fa)er om apena# um bit (tem a l:4ia booleana kkkkkkk!+ um Qnio bit n2o d; para repre#entar todo# o# aratere# do alfabeto para i##o #e fe) nee##;rio riar uma #e8uenia de bit# 8ue hamamo# de bMte#+ um bMte 6 uma #e8uenia de H bit# 8ue 6 e8ui.alente a /&G po##ibilidade#+ por e*emplo a letra JaK 6 um bMte 8ue tem a repre#enta52o deimal do nQmero 10 e em bin;rio do :di4o ,%%,,,,% ada nQmero dali 6 um bit+ a# opera59e# bit a bit manipula o bit alterando ele de aordo om re4ra# e#peifia#+ a primeira opera52o 6 ON (ou!+ a opera52o bit a bit ON manipula doi# bMte# omparando um om o outro ada bit e 4erando um $k bMte+ #e um do# doi# bit# for .erdadeiro ou #e3a % o re#ultado do bit #er; .erdadeiro ,%%,,,,% g a (10! ,%%,,,%, g b (1H! ,%%,,,%% g (11! para #e fa)er a opera52o bit a bit ON na lin4ua4em C/C++ u#amo# o operador pipe (l! Oinlude ]#tdio.hW int main(.oid! a int eof g 10 l 1HZ printf(^hd^+eof!Z return ,Z b outra opera52o bit a bit 6 o "ND (e!+ e##a opera52o tamb6m ompara doi# bMte# e 4era um $k+ por6m o re#ultado #: .ai #er .erdadeiro #e o# doi# bit# for .erdadeiro ,%%,,,,% g a (10! ,%%,,,%, g b (1H! ,%%,,,,, g n2o lembro o 8ue 6 i##o (1G! para fa)er a opera52o bit a bit "ND na lin4ua4em C/C++ u#amo# o operador JeK omerial (Y! Oinlude ]#tdio.hW int main(.oid! a int eof g 10 Y 1HZ printf(^hd^+eof!Z return ,Z b tamb6m e*i#te uma opera52o bit a bit hamador eON (ou e*lu#i.o!+ e##a opera52o tamb6m ompara doi# bMte# e 4erando um $k+ por6m o re#ultado #: .ai #er .erdadeiro #e o# doi# bit# for diferente um do outro ,%%,,,,% g a (10! ,%%,,,%, g b (1H! ,,,,,,%% g #: #ei 8ue 6 um :di4o U>U ($! para u#ar a opera52o bit a bit eON u#amo# e##e #7mbolo m Oinlude ]#tdio.hW int main(.oid! a int eof g 10 m 1HZ printf(^hd^+eof!Z return ,Z b diferente do# outro# anteriore# a opera52o bit a bit NO@ (ne4a52o! in.erte todo# o# bit de um Qnio bMte ,%%,,,,% g a (10! %,,%%%%, g deu ne4ati.o de.ido o primeiro nQmero #er % (>1H! para u#ar a opera52o bit a bit NO@ na lin4ua4em C/C++ u#amo# o operador til ante# do .alor (`! Oinlude ]#tdio.hW int main(.oid! a int eof g ` 10Z printf(^hd^+eof!Z return ,Z b 7.! ?peradores de comparao e logico @amb6m e*i#te o# operadore# de ompara52o e operadore# l:4io#+ o# operadore# de ompara52o ompara doi# .alore# retornando .erdadeiro ou fal#o (%/,!+ o primeiro operador 8ue .amo# .er 6 o operador de i4ualdade+ ele ompara doi# .alore# #e o# doi# .alore# for i4ual ele retorna % #e for diferente ele retorna ,+ n2o 6 po##7.el omparar uma #trin4 inteira apena# um Qnio ar;ter ou nQmero+ para e##e operador u#amo# dua# .e)e# o #7mbolo de i4ual (gg! Oinlude ]#tdio.hW int main(.oid! a int eof g $%& gg %,,Z printf(^hd^+eof!Z return ,Z b e*i#te o operador diferente 8ue 6 opo#to do operador i4ual+ a#o #e3a diferente ele retorna .erdadeiro e a#o #e3a i4ual ele retorna fal#o+ para u#ar e##e operador u#amo# o #imbolo de e*lama52o e o #7mbolo de i4ual (fg! Oinlude ]#tdio.hW int main(.oid! a int eof g $%& fg %,,Z printf(^hd^+eof!Z return ,Z b outro operador 6 o operador Jmaior 8ueK+ e##e operador retorna .erdadeiro a#o o .alor #e3a maior 8ue o outro para u#ar ba#ta u#ar o #7mbolo de maior (W! Oinlude ]#tdio.hW int main(.oid! a int eof g $%& W %,,Z printf(^hd^+eof!Z return ,Z b tem o operador Jmaior ou i4ual aK+ e##e operador retorna .erdadeiro #e o .alor for maior ou i4ual ao outro+ para u#ar e##e operador u#amo# o #7mbolo de maior #e4uido do #7mbolo de i4ual (Wg! Oinlude ]#tdio.hW int main(.oid! a int eof g $%& Wg %,,Z printf(^hd^+eof!Z return ,Z b tamb6m e*i#te o operador Jmenor 8ueK+ e##e operador retorna .erdadeiro #e o .alor for menor 8ue o outro+ para u#ar e##e operador u#amo# o #7mbolo de menor (]! Oinlude ]#tdio.hW int main(.oid! a int eof g $%& ] %,,Z printf(^hd^+eof!Z return ,Z b om o operador Jmenor ou i4ual aK ele retorna .erdadeiro #e o .alor for menor ou i4ual ao outro+ para u#ar e##e operador u#amo# o #7mbolo de menor #e4uido do #7mbolo de i4ual (]g! Oinlude ]#tdio.hW int main(.oid! a int eof g $%& ]g%,,Z printf(^hd^+eof!Z return ,Z b tamb6m e po##7.el u#ar o# operadore# l:4io# e##e# operadore# ompara o# doi# .alore# retornando .erdadeiro ou fal#o+ e##e# operadore# tem o# me#mo# nome# do# operadore# bit a bit mai# n2o onfunda um om o outro (o# operadore# bit a bit ompara ada bit de um bMte retornando um no.o bMte e o# l:4io# ompara doi# .alore# retornando .erdadeiro ou fal#o!+ o primeiro operador lo4io .ai #er o ON e##e operador ompara doi# .alore# e retorna .erdadeiro #e um do# doi# for .erdadeiro (#: lembrando 8ual8uer nQmero maior 8ue , 6 .erdadeiro e 8ual8uer numero menor ou i4ual a , 6 fal#o!+ para u#ar o operador lo4io ON u#amo# dua# .e)e# o #imbolo do pipe (ll! Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a int eof g true ll fal#eZ printf(^hd^+eof!Z return ,Z b o operador l:4io "ND retorna .erdadeiro apena# #e o# doi# .alore# for .erdadeiro+ para u#ar ele u#amo# dua# .e)e# o JeK omerial (YY! Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a int eof g true YY fal#eZ printf(^hd^+eof!Z return ,Z b o operador NO@ in.erte a l:4ia torando um .alor .erdadeiro ou fal#o+ para u#ar ele oloamo# o #7mbolo de e*lama52o ante# Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a int eof g f trueZ printf(^hd^+eof!Z return ,Z b #e .oL# lembra da fun52o #trmp da bibliotea #trin4.h ele retorna o nQmero , a#o a# dua# #trin4# #e3a i4ual+ #e ele retorna o .alor , i##o 8uer di)er 8ue em termo l:4io #eria fal#o e #e a 4ente omparar om uma e#trutura de ondi52o o ompilador .ai interpretar i##o omo fal#o e n2o fa)er a ondi52o+ para i##o e*i#te o operador NO@ para in.erter a l:4ia Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a int eof g f #trmp(^eof^+^eof^!Z printf(^hd^+eof!Z return ,Z b tamb6m podemo# u#ar o parLnte#e para #obrearre4ar o# operadore# Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a int eof g (f ((true YY true ! ll fal#e!! Z printf(^hd^+eof!Z return ,Z b 7.- strutura condicional "# e#trutura# ondiionai# permite ab#trair ou n2o determinada# parte# do :di4o #obre uma ondi52o l:4ia+ om e##a ondi52o .oL pode e#olher o 8ue #er; e*eutado a#o a ondi52o #e3a .erdadeira ou o 8ue #er; e*eutado a#o a ondi52o #e3a fal#o+ e*i#tem pelo meno# trL# e#trutura# ondiionai# na lin4ua4em C/C++ #2o ela# o if+ #'ith e ternaria+ a# trL# ondi59e# pode #er u#ada# para o me#mo prop:#ito embora o u#o de uma em determinada #itua52o pode dei*a o :di4o mai# le47.el+ a primeira ondi52o 8ue .amo# .er 6 o if e##a ondi52o permite e*eutar determinada parte do :di4o #e a ondi52o dentro do ar4umento for .erdadeiro+ tamb6m oloamo# um e#opo para o# :di4o# 8ue #er; e*eutado Oinlude ]#tdio.hW int main(.oid! a if($%& W %,,! a printf(^$%& e maior 8ue %,,^!Z b return ,Z b outro e*emplo om mai# de um if Oinlude ]#tdio.hW int main(.oid! a if($%& W %,,! a printf(^$%& e maior 8ue %,,^!Z b if($%& ] %,,! a printf(^$%& e menor 8ue %,,^!Z b return ,Z b para e.itar riar .;rio# if para o me#mo prop:#ito podemo# u#ar o Jel#e ifK+ a ondi52o Jel#e ifK #: #er; e*eutada #e nenhuma da# ondi59e# anteriore# for e*eutada e 8uando uma for e*eutada nenhuma outra ondi52o #er; e*eutada+ para u#ar o Jel#e ifK prei#a de uma ondi52o if ante# Oinlude ]#tdio.hW int main(.oid! a int eof g $%&Z if(eof W %,,! a printf(^maior 8ue %,,^!Z b el#e if(eof ] %,,! a printf(^$%& e menor 8ue %,,^!Z b return ,Z b #e prei#amo# e*eutar determinada ondi52o a#o nenhuma da# anteriore# for e*eutada u#amo# um el#e+ o el#e #empre tem 8ue fiar depoi# do if ou do Qltimo Jel#e ifK e ele n2o tem ar4umento# Oinlude ]#tdio.hW int main(.oid! a int eof g %,,Z if(eof W %,,! a printf(^maior 8ue %,,^!Z b el#e if(eof ] %,,! a printf(^menor 8ue %,,^!Z b el#e a printf(^#eu numero e i4ual a %,,^!Z b return ,Z b podemo# oloar uma e#trutura ondiional dentro da outra Oinlude ]#tdio.hW int main(.oid! a int idade g &1Z if(idade W %H! a printf(^.oe 3a e de maior^!Z if(idade ] &,! a printf(^.oe ainda e no.o ^! b el#e a printf(^.oe e .elho U>U ^!Z b b el#e a printf(^.oe ainda nao pode diri4ir^! b return ,Z b tamb6m d; para e*eutar o if #em e#opo+ por6m fia muito inle47.el Oinlude ]#tdio.hW int main(.oid! a int eof g $%&Z if (eof W %,,! printf(^maior^!Z el#e if(eof ] %,,! printf(^menor^!Z return ,Z b a outra ondi52o 6 o #'ith 8ue tem a me#ma utilidade do Jif>el#e ifK+ para u#ar o #'ith temo# 8ue definir o .alor nele e u#ar o a#e para hear #e o nQmero 6 o me#mo+ no a#e oloamo# o .alor depoi# doi# ponto# #e4uido do 8ue .ai #er e*eutado a#o #e3a .erdadeiro+ tamb6m #empre temo# 8ue oloar um break a ada final de a#e para e.itar ler o pr:*imo a#e Oinlude ]#tdio.hW int main(.oid! a int eof g %,,Z #'ith(eof! a a#e %: printf(^eof g %^!Z breakZ a#e %,,: printf(^eof g %,,^!Z breakZ a#e $%&: printf(^eof g $%&^!Z breakZ b return ,Z b podemo# u#ar o default a#o nenhuma da# ondi59e# anteriore# forem e*eutada# ele #er; e*eutado Oinlude ]#tdio.hW int main(.oid! a int eof g &,,Z #'ith(eof! a a#e %: printf(^eof g %^!Z breakZ a#e %,,: printf(^eof g %,,^!Z breakZ a#e $%&: printf(^eof g $%&^!Z breakZ default: printf(^nenhuma opao^!Z breakZ b return ,Z b outra e#trutura de ondi52o 6 a ternaria 8ue permite um retorno #obre uma determinada ondi52o+ para u#ar a ondi52o ternaria u#amo# um ar4umento 8ue 6 a ondi52o oloamo# interro4a52o #e4uido do primeiro retorno a#o #e3a .erdadeiro+ oloamo# doi# ponto# e o #e4undo retorno a#o #e3a fal#o+ no e*emplo abai*o ele .ai retorna o maior .alor Oinlude ]#tdio.hW int main(.oid! a int * g ($%& W %,,! j $%& : %,,Z printf(^hd^+*!Z return ,Z b podemo# u#ar na# ondi59e# ternaria# 8ual8uer tipo de retorno Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a (true! j printf(^end of file^! : printf(^eof^!Z return ,Z b 7.7 @ strutura de repetio "# e#trutura# de repeti52o permite repetir uma 8uantidade de .e)e# uma determinada parte do :di4o #obre uma determinada ondi52o+ e*i#tem pelo meno# E e#trutura# de repeti52o #2o ela# 'hile+ do>'hile+ for e 4oto+ a e#trutura de repeti52o 'hile repete en8uanto 8ue a ondi52o dela for .erdadeira a##im 8ue a ondi52o for fal#a o loop #e##a #e e##a ondi52o for #empre .erdadeira o loop #er; infinito e a# .e)e# tra.ando o pro4rama na8uela parte+ loop infinito pode #er peri4o#o a# .e)e# omo na hora de e*eutar um pro4rama ou aloar mem:ria #e e#ti.er pre#o ao um loop infinito pode tra.ar o omputador de.ido ao 4a#to de mem:ria+ para u#ar o 'hile temo# 8ue oloar a ondi52o omo ar4umento+ a ada loop o pro4rama .ai hear de no.o a ondi52o para .er #e .ai ou n2o fa)er mai# um loop+ depoi# da ondi52o riamo# um e#opo onde oloamo# o :di4o 8ue .ai #er repetido Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a 'hile(true! a printf(^forum eof Vn^!Z b return ,Z b para e.itar 8ue o pro4rama fi8ue pre#o a um loop infinito temo# 8ue riar um ontador e inrementar o ontador a ada loop ate determinada ondi52o+ no e*emplo a bai*o o ontador ome5a om o nQmero % e a ada loop hea para .er #e a ondi52o do ontador e maior do 8ue %, a#o n2o #e3a ele fa) o loop de no.o+ a ada loop o ontador .ai inrementar mai# um 8uando o ontador he4ar no nQmero %% a ondi52o .ai dar fal#o e #e##ar o loop Oinlude ]#tdio.hW int main(.oid! a int ontador g %Z 'hile(ontador ]g %,! a printf(^hd Vn^+ontador!Z ontador++Z b return ,Z b para #e##ar um loop podemo# u#ar o break+ no e*emplo abai*o ele fiaria pre#o ao um loop infinito #e n2o ti.er o break Oinlude ]#tdio.hW Oinlude ]#tdbool.hW int main(.oid! a 'hile(true! a breakZ b return ,Z b al6m do break e*i#te o ontinue 8ue fa) mai# um loop me#mo #e a ondi52o for fal#a+ no e*emplo abai*o ele fia pre#o em um loop infinito Oinlude ]#tdio.hW int main(.oid! a int ontador g %Z 'hile(ontador ]g %,! a ontinueZ ontador++Z b return ,Z b o la5o 'hile #: repete #e a ondi52o for .erdadeira me#mo #e for o primeiro loop+ 3; o la5o do>'hile ele repete pelo meno# uma .e) o la5o e #e a ondi52o for .erdadeira o loop ontinua ate 8ue a ondi52o #e3a fal#a+ para u#ar o do>'hile u#amo# o JdoK riamo# um e#opo para o :di4o 8ue #er; repetido+ depoi# riamo# um 'hile #em e#opo om a ondi52o Oinlude ]#tdio.hW int main(.oid! a int ontador g %Z do a printf(^hd Vn^+ontador!Z ontador++Z b 'hile(ontador ]g %,!Z return ,Z b o la5o JforK permite e#peifiar o ontador+ a ondi52o e o inremento+ para u#ar o la5o for riamo# uma .ari;.el 8ue #er; o ontador depoi# pa##amo# omo ar4umento e##a .ari;.el+ a ondi52o e o inremento da .ari;.el #eparado por ponto e .7r4ula e por fim o e#opo onde fia o :di4o 8ue #er; repetido Oinlude ]#tdio.hW int main(.oid! a int ontador g %Z for(ontador Z ontador ]g %, Z ontador++! a printf(^hd Vn^+ontador!Z b return ,Z b por fim o 4oto 8ue n2o 6 e*atamente um la5o e #im um pulo para determinada parte do odi4o embora #e3a limitado ao me#mo e#opo da fun52o+ para u#ar o 4oto temo# 8ue riar um label 8ue pode #er 8ual8uer nome #e4uindo de doi# ponto#+ depoi# do label riado ba#ta u#ar 4oto #e4uido do nome do label para ele pular Oinlude ]#tdio.hW int main(.oid! a 4oto eofZ eof: return ,Z b o e*emplo abai*o #eria um loop infinito Oinlude ]#tdio.hW int main(.oid! a eof: 4oto eofZ return ,Z b podemo# manipular o 4oto u#ando o if para e.itar um loop infinito Oinlude ]#tdio.hW int main(.oid! a int ontador g %Z eof: if(ontador W %,! a 4oto ft#Z b printf(^hdVn^+ontador!Z ontador++Z 4oto eofZ ft#: return ,Z b :.0 4uno e recursi1idade 3; u#amo# di.er#a# fun59e# e tamb6m riamo# a fun52o prinipal main+ por6m a ria52o de fun59e# pode #er Qtil para a4ili)ar o :di4o uma fun52o e um proedimento 8ue o ompilador pode fa)er inQmera# .e)e# 8uando for hamado+ uma fun52o tem o# ar4umento# e o retorno a# fun59e# de.e #er riada ante# da fun52o prinipal main ou de.e ter o prot:tipo dela ante#+ uma fun52o tamb6m pode ter 8ual8uer nome embora #e hou.er outra fun52o om o me#mo nome .ai d; erro+ para #e ria uma fun52o 6 a me#ma maneira 8ue riamo# a fun52o main oloamo# primeiro o tipo de retorno o nome da fun52o o ar4umento riamo# um e#opo e dentro dele no final do :di4o u#amo# o return+ na fun52o prinipal ou em outra# fun59e# podemo# hamar ela Oinlude ]#tdio.hW int eof(.oid! a printf(^.i#ite o forum eofVn^!Z return ,Z b int main(.oid! a eof(!Z return ,Z b podemo# riar a no##a fun52o depoi# da fun52o main para i##o temo# 8ue oloar o prot:tipo dela+ o prot:tipo ou a##inatura 6 a parte #em o e#opo da fun52o Oinlude ]#tdio.hW int eof(.oid!Z int main(.oid! a eof(!Z return ,Z b int eof(.oid! a printf(^.i#ite o forum eofVn^!Z return ,Z b podemo# riar .ari;.ei# omo ar4umento para en.iar para fun52o e u#ar o retorn para retornar da fun52o+ no e*emplo abai*o entramo# om um .alor ele retorna o 8uadrado do nQmero Oinlude ]#tdio.hW int eofi8uad(int numero! a return numero d numeroZ b int main(.oid! a int ft# g eofi8uad(&!Z printf(^hd^+ft#!Z return ,Z b toda# a# .ari;.ei# dentro da fun52o 6 liberada 8uando a fun52o 6 de#tru7da+ ent2o para 8ue um .alor fi8ue em uma .ari;.el podemo# u#ar a# .ari;.ei# 4lobai# Oinlude ]#tdio.hW int numero/ g ,Z .oid eof(int numero! a numero/ +g numeroZ printf(^hd Vn^+numero/!Z b int main(.oid! a eof(&!Z eof(G!Z return ,Z b outra maneira 6 u#ar a# .ari;.ei# e#t;tia# Oinlude ]#tdio.hW .oid eof(int numero! a #tati int numero/ g ,Z numero/ +g numeroZ printf(^hd Vn^+numero/!Z b int main(.oid! a eof(&!Z eof(G!Z return ,Z b para alterar .ari;.ei# loai# de um outro e#opo podemo# riar um ponteiro na fun52o e pa##ar omo ar4umento o endere5o de mem:ria i##o 6 hamado pa##a4em por referenia Oinlude ]#tdio.hW .oid eof(int dnumero! a dnumero g $%&Z b int main(.oid! a int ft# g ,Z eof(Yft#!Z printf(^hd^+ft#!Z return ,Z b ?ara pa##ar uma arraM omo ar4umento temo# 8ue pa##ar por referenia e ela# n2o prei#a oloar o #7mbolo de endere5o de mem:ria Oinlude ]#tdio.hW .oid eof(int dnumero! a numero[,\ g $%&Z b int main(.oid! a int ft#[%,\Z eof(ft#!Z printf(^hd^+ft#[,\!Z return ,Z b 8uando temo# 8ue pa##ar uma #trin4 omo ar4umento podemo# riar um ponteiro do tipo har e oloar on#t ante#+ de##a forma podemo# tanto pa##ar uma arraM omo uma #trin4 diretamente para #er aloada Oinlude ]#tdio.hW .oid eof(on#t har dte*to! a printf(te*to!Z b int main(.oid! a eof(^.i#ite o forum eof^!Z return ,Z b 8uando o #i#tema aha uma hamada de fun52o ele para de e*eutar a8uele treho do odi4o e pula para a parte da fun52o e 8uando a fun52o 6 de#tru7da ele .olta para o treho 8ue paro e ontinua a e*eu52o e i##o dei*a o pro4rama mai# lento para e.itar i##o podemo# u#ar fun59e# inline+ e##a# fun59e# n2o fa) o #i#tema pular para o endere5o ela# pu*a a fun52o para onde e#t; o :di4o de hamada dela+ para u#ar fun52o inline ba#ta oloar inline ante# do tipo de retorno Oinlude ]#tdio.hW inline .oid eof(on#t har dte*to! a printf(te*to!Z b int main(.oid! a eof(^.i#ite o forum eof^!Z return ,Z b a# fun59e# reur#i.a# permite hamar ela# me#ma#+ por6m de.e #e tomar uidado om um loop infinito Oinlude ]#tdio.hW .oid eof(.oid! a printf(^funao reur#i.a Vn^!Z eof(!Z b int main(.oid! a eof(!Z b para fa)er a no##a fun52o #e e*euta depoi# 8ue o pro4rama for finali)ado u#amo# a fun52o ate*it da bibliotea #tdlib.h e pa##amo# omo ar4umento a no##a fun52o Oinlude ]#tdio.hW Oinlude ]#tdlib.hW .oid eof(.oid! a printf(^#eu pro4rama foi finali)ado^!Z b int main(.oid! a ate*it(eof!Z return ,Z b :.1 Direti1as de pr>@processamento "# direti.a# de pre proe##amento di) ao ompilador omo ele de.e ompilar o :di4o+ e##a# direti.a# #2o a# primeira# oi#a# 8ue o ompilador hea ante# da ompila52o+ .oL pode u#ar e##a# direti.a# para definir #e determinada parte do :di4o .ai #er ompilada apena# para um #i#tema operaional ou impedir 8ue determinada bibliotea #e3a delarada dua# .e)e#+ e*i#tem .aria# direti.a# uma dela# e para inluir bibliotea header 8ue u#amo# inQmera# .e)e# a Oinlude Oinlude ]#tdio.hW int main(.oid! a return ,Z b outra direti.a 8ue 3; u#amo# anteriormente 6 a Odefine para riar on#tante+ por6m e##a direti.a pode #er u#ada para mai# oi#a# do 8ue #imple# on#tante#+ podemo# oloar :di4o# inteiro# na direti.a Odefine embora muita# .e)e# pode dei*ar o :di4o muito inle47.el Oinlude ]#tdio.hW Odefine F@C int main(.oid! a printf(^.i#item o forum eof^!Z return ,Zb F@C para u#ar :di4o# de mai# de uma linha para o Odefine ou ate me#mo para #trin4# podemo# u#ar ontra barra no final Oinlude ]#tdio.hW Odefine F@C V int main(.oid! V a V printf(^.i#item o forum eof^!Z V return ,Z V b F@C tamb6m podemo# pa##ar ar4umento# para direti.a Odefine para i##o ba#ta oloar entre parLnte#e# e oloar o# nome# do ar4umento 8ue #er; mudado Oinlude ]#tdio.hW Odefine F@C(@Ee@O! printf(@Ee@O! int main(.oid! a F@C(^forum eof^!Z return ,Z b outra direti.a 6 o Oif 8ue 6 bem pareida om a e#trutura ondiional if+ a diferen5a 8ue a direti.a Oif 6 te#tado o 8ue de.e #er ompilado e a e#trutura ondiional if o 8ue de.e #er e*eutado+ a direti.a Oif n2o tem e#opo #: um Oendif para finali)ar e pode #er u#ada em 8ual8uer parte do odi4o Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a printf(^.i#ite o forum Vn^!Z Oif % gg % #M#tem(^pau#e^!Z Oendif return ,Z b podemo# oloar uma direti.a Oif dentro da outra Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a printf(^.i#ite o forum Vn^!Z Oif % gg % Oif % W , #M#tem(^pau#e^!Z Oendif Oendif return ,Z b tamb6m podemo# u#ar um Oel#e depoi# do Oif Oinlude ]#tdio.hW Odefine O? , int main(.oid! a Oif O? gg % printf(^.i#ite o forum Vn^!Z Oel#e printf(^bM: hft#$%&^!Z Oendif return ,Z b tamb6m e*i#te a direti.a Oifdef 8ue ompila determinada parte do :di4o #e determinada direti.a foi delarada Oinlude ]#tdio.hW Odefine F@C $%& int main(.oid! a Oifdef F@C printf(^#im^!Z Oel#e printf(^nao^!Z Oendif return ,Z b e*i#te o opo#to da direti.a Oifdef 8ue 6 o Oifndef Oinlude ]#tdio.hW int main(.oid! a Oifdnef F@C printf(^#im^!Z Oel#e printf(^nao^!Z Oendif return ,Z b para remo.er uma direti.a Odefine podemo# u#ar a direti.a Oundef Oinlude ]#tdio.hW Odefine F@C $%& Oundef F@C int main(.oid! a Oifdef F@C printf(^#im^!Z Oel#e printf(^nao^!Z Oendif return ,Z b al6m da# direti.a# e*i#tem uma# on#tante# 8ue pode #er u#ada# 3unto om a# direti.a# omo por e*emplo e##a# 8ue da para #aber 8ual #i#tema operaional Oinlude ]#tdio.hW int main(.oid! a Oifdef AIN$/ printf(^'indo'# *$/^!Z Oendif Oifdef AINGE printf(^'indo'# *GE^!Z Oendif Oifdef ilinu* printf(^linu*^!Z Oendif return ,Z b e*i#te a direti.a Oline permite o ompilador definir o nQmero da linha+ tamb6m podemo# u#ar a on#tante iiLINEii para #aber 8ual 6 a linha atual Oinlude ]#tdio.hW int main(.oid! a printf(^o numero de linha: hd Vn^+iiLINEii!Z Oline , printf(^o numero de linha: hd Vn^+iiLINEii!Z Oline $%& printf(^o numero de linha: hd Vn^+iiLINEii!Z return ,Z b 8uando 8ueremo# 8ue a #oure n2o ompile podemo# u#ar a direti.a Oerror #e4uida de uma men#a4em Oinlude ]#tdio.hW Oerror nao .ai ompilar+ bem feito eD int main(.oid! a return ,Z b :.2 Criando +i,lioteca Aeader 3; u#amo# di.er#a# bibliotea# em no##a# #oure# a4ora .amo# aprender omo riar ela# para poder reapro.eitar o :di4o+ para riar uma bibliotea header 6 muito fail ba#ta riar um ar8ui.o om e*ten#2o .h (no meu a#o riei um hamado endoffile.h!+ e##e ar8ui.o de.e fiar ou na pa#ta inlude 3unto om a# outra# bibliotea# do ompilador (no meu a#o ela fia JC:VDe.>CppVinludeK! ou na pa#ta 3unto om a #oure+ omo foi dito em Jbibliotea# da lin4ua4em C/C++K #e o ar8ui.o bibliotea e#ti.er 3unto a #oure de.e inluir om a#pa# dupla# e #e ti.er na pa#ta inlude de.e inluir om abre e feha menor e maior Oinlude ^endoffile.h^ //bibliotea na pa#ta da #oure Oinlude ]endoffile.hW //bibliotea na pa#ta do ompilador int main(.oid! a return ,Z b a# bibliotea# header #: nee##ita riar a# fun59e# para funionar+ por6m 6 bom hear #e o ar8ui.o 3; n2o foi inlu#o para i##o u#amo# dua# direti.a# 8ue #2o a Oifndef e Odefine+ 6 omum u#ar omo ar4umento para Oifndef e Odefine o nome da bibliotea entre dua# .e)e# underline Oifndef iiENDOFFILEiIii Odefine iiENDOFFILEiIii Oendif #empre 8ue riar uma fun52o olo8ue o prot:tipo dela tamb6m Oifndef iiENDOFFILEiIii Odefine iiENDOFFILEiIii int eofi8uad(int numero!Z int eofiubo(int numero!Z int eofi8uad(int numero! a return numero d numeroZ b int eofiubo(int numero! a return numero d numero d numeroZ b Oendif podemo# riar bibliotea para arre4ar outra# bibliotea# 6 uma forma de failitar e n2o prei#ar fiar delarando .;ria# bibliotea# Oifndef iiENDOFFILEiIii Odefine iiENDOFFILEiIii Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]#tdbool.hW Oinlude ]#trin4.hW Oendif 8uando e#tamo# ompilando pelo 4 e temo# 8ue inluir um diretorio 8ue tem a# bibliotea# u#amo# a #inta*e >I #e4uido do endere5o do diretorio ft#$%&-#kMnet:`/De#ktopX 4 ft#. >o hak.o >I ^/home/ft#$%&/De#ktop/bibliotea#^ :.! Criando +i,lioteca sttica e LI+ a# bibliotea e#t;tia #2o ompilada# 3unto om ar8ui.o ob3eto 4erando o e*euta.el final+ para riar o ar8ui.o ob3eto e n2o o e*euta.el ba#ta adiionar a #inta*e de omando > no ompilador 4 ou na# op52o de ompila52o da IDE ft#$%&-#kMnet:`/De#ktopX 4 ft#. >o hak.o > poder7amo# u#ar ar8ui.o# ob3eto# omo bibliotea+ um e*emplo ba#io #eria e##a om apena# uma fun52o Oifndef iiI"CRiODPii Odefine iiI"CRiODPii int ft#(int *! a return * d *Z b Oendif depoi# de 4erar o ob3eto poder7amo# u#ar e##e ar8ui.o ob3eto 3unto a 8ual8uer outra #oure para poder u#ar a# fun52o nela+ porem na hora de ompilar ba#ta ompilar 3unto ft#$%&-#kMnet:`/De#ktopX 4 lol. hak.o >o eof tambem poderia oloar o prototipo dela dentro da# #oure#+ para fa)er i##o ter7amo# 8ue oloar o identifiador e*tern ante# Oinlude ]#tdio.hW e*tern int ft#(int *!Z int main(.oid! a printf(^hd^+ft#(&!!Z return ,Z b o# lib# #2o pareido om ar8ui.o ob3eto #: 6 inlu7do na hora da ompila52o ele# #2o uma e#p6ime de ompata52o de ar8ui.o# ob3eto#+ para #e riar um lib temo# 8ue riar um ar8ui.o ob3eto ante# no a#o .ou u#ar o hak.o 8ue eu 3; tinha riado+ depoi# u#amo# o pro4rama ar 8ue pro.a.elmente .em 3unto om #eu ompilador+ ne##e pro4rama u#amo# a #inta*e Jar ruK #e4uido do nome do ar8ui.o lib a #er riado (de.e ter e*ten#ao .a! e depoi# o# ar8ui.o# ob3eto# ft#$%&-#kMnet:`/De#ktopX ar ru ft#.a hak.o na ompila52o do 4 de.e inluir a #inta*e >L #e4uido do diretorio 8ue e#ta o ar8ui.o lib e a #inta*e >l #e4uido do ar8ui.o lib ft#$%&-#kMnet:`/De#ktopX 4 lol. >o hak >L ^/home/ft#$%&/De#ktop^ >l ft#.a para .i#uali)ar o# ar8ui.o# ob3eto# dentro de um lib podemo# u#ar a #inta*e Jar tK #e4uido do ar8ui.o ob3eto ft#$%&-#kMnet:`/De#ktopX ar t ft#.a hak.o ft#$%&-#kMnet:`/De#ktopX :.- Criando +i,lioteca Din9mica /DLL e *?0 "# bibliotea# dinamia# #2o arre4ada# em tempo de e*eu52o (run>time! diferente da# e#tatia# 8ue #2o ompilada# 3unto om e*euta.el 4erando o e*euta.el final+ a .anta4em da# bibliotea# dinamia# 8ue o e*euta.el fia menor e pode 4a#tar meno# memoria a de#.anta4em 8ue #e faltar a bibliotea o pro4rama pode n2o funionar+ a# bibliotea# dinamia# u#ada no #i#tema 'indo'# #2o a# dll boa parte da# "?I do #i#tema operaional e#ta dentro de al4uma dll ou pelo meno# o# prot:tipo dela+ e a maioria da# dll e#ta no diretorio 'indo'#V#M#tem$/ e##e diretorio tambem 6 on#iderado o inferno de dll de.ido a 8uantidade de dll 8uem tem nele+ para riar uma dll no #i#tema 'indo'# u#amo# a# "?I# do #i#tema operaional e tamb6m u#amo# a #inta*e >>#hared do 4+ em uma dll n2o u#amo# a fun52o prinipal main e #im DllBain 8ue tem um retorno do tipo DOOL "?IEN@N_+ o# ar4umento# dela #2o $ .aria.ei# do tipo IINC@"NCE+ DAOND e L?FOID+ e a fun52o tem um retorno @N<E+ tamb6m 6 nee##;rio inluir a bibliotea 'indo'#.h para pode u#ar a# "?I# itada# Oinlude ]'indo'#.hW DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.! a return @N<EZ b omo dito ante# para ompilar 6 nee##;rio u#ar a #inta*e >>#hared no 4 C:V<#er#Vft#$%&VDe#ktopW 4 ft#. >o ft#.dll >>#hared a8uela dll n2o tem nenhuma fun52o ent2o tambem n2o tem nehuma utilidade para noi# pro4ramadore#+ para riar uma fun52o 8ue #era e*portada+ ou #e3a #er; ae##ada pelo# pro4rama# 8ue arre4ar a8uela dll+ temo# 8ue oloar um prototipo da fun52o e no prototipo temo# 8ue oloar iidel#pe(dlle*port! no ome5o do prototipo i##o permite a fun52o #er e*portada Oinlude ]'indo'#.hW iidel#pe(dlle*port! int ft#i8uad(int .alor!Z DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.! a return @N<EZ b int ft#i8uad(int .alor! a return .alor d .alorZ b no e#opo da DllBain podemo# u#ar fun5oe# 8ue #era e*eutada a##im 8ue a dll for arre4ada #em prei#ar #er hamada a# fun5oe# (#eria um autorun+ uidado om a# fun5oe# hamada# ali por8ue #e n2o fi)er um hea4em ade8uada pode fiar em loop infinito! Oinlude ]'indo'#.hW Oinlude ]#tdio.hW iidel#pe(dlle*port! int ft#i8uad(int .alor!Z DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.! a FILE dar8 g fopen(^ft#.t*t^+^'^!Z fprintf(ar8+^lol #ou otaku+ urto rok+ fao pro4rama e #ou .iiado em afeinaVn^!Z return @N<EZ b int ft#i8uad(int .alor! a return .alor d .alorZ b omo dito ante# podemo# fa)er uma hea4em para i##o u#amo# a# on#tante# DLLi?NOCECCi"@@"CI e##a on#tante retorna .erdadeiro 8uando a dll for arre4ada+ e a on#tante DLLi?NOCECCiDE@"CI 8uando ela for liberada Oinlude ]'indo'#.hW Oinlude ]#tdio.hW iidel#pe(dlle*port! int ft#i8uad(int .alor!Z DOOL "?IEN@N_ DllBain(IINC@"NCE hin+ DAOND d'+ L?FOID lp.! a if(DLLi?NOCECCi"@@"CI! a
b el#e if(DLLi?NOCECCiDE@"CI! a b return @N<EZ b int ft#i8uad(int .alor! a return .alor d .alorZ b podemo# e*eutar fun59e# dentro de uma dll om um pro4rama do 'indo'# hamado rundll$/ a #inta*e dele 6 a dll uma .7r4ula e o nQmero da dll (ordem! ou nome dela C:V<#er#Vft#$%&VDe#ktopW rundll$/ ft#.dll+ft#i8uad para arre4ar uma dll na lin4ua4em C/C++ temo# 8ue u#ar a "?I LoadLibrarM e pa##ar omo ar4umento a dll+ e para libera>la ela podemo# u#ar o FreeLibrarM #e4uido da .aria.el do tipo IINC@"NCE 8ue tinha atribu7do a dll Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a IINC@"NCE dllZ dll g LoadLibrarM(^ft#.dll^!Z FreeLibrarM(dll!Z return ,Z b #: arre4ar a dll n2o 6 #ufiiente para u#ar a# fun59e# dentro dela+ para fa)er i##o temo# 8ue riar um tipo om o prototipo i4ual ao da fun52o e depoi# arre4ar ela pelo endere5o+ para riar o prototipo u#amo# tMpedef oloamo# o tipo de retorno da fun52o abrimo# e fehamo# parLnte#e# e la dentro oloamo# um ponteiro om um nome 8ual8uer+ depoi# abrimo# e fehamo# parLnte#e# de no.o e oloamo# o# tipo# do# ar4umento# #eparado# por .ir4ula a#o tenha mai# de um+ e depoi# in#taniamo# e##e tipo Oinlude ]#tdio.hW Oinlude ]'indo'#.hW tMpedef int (dfun!(int!Z int main(.oid! a fun eofZ IINC@"NCE dllZ dll g LoadLibrarM(^ft#.dll^!Z FreeLibrarM(dll!Z return ,Z b a4ora #: falta pe4ar o endere5o e atribuir ele para o tipo+ para pe4ar o tipo u#amo# a "?I (et?ro"ddre## pa##amo# omo ar4umento para ela a .aria.el 8ue e#ta atribuida a dll+ e uma #trin4 8ue #eria o nome da fun52o+ depoi# atribuimo# a fun52o (et?ro"ddre## para a in#t=nia do tipo 8ue t7nhamo# riado (u#amo# tMpe#a#t do tipo para on.eter #em erro#! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW tMpedef int (dfun!(int!Z int main(.oid! a fun eofZ IINC@"NCE dllZ dll g LoadLibrarM(^ft#.dll^!Z eof g (fun! (et?ro"ddre##(dll+^ft#i8uad^!Z FreeLibrarM(dll!Z return ,Z b para terminar #: a 4ente manipular a in#tania da8uele tipo 8ue riamo# omo #e fo##e a pr:pria fun52o da dll Oinlude ]#tdio.hW Oinlude ]'indo'#.hW tMpedef int (dfun!(int!Z int main(.oid! a int .alorZ fun eofZ IINC@"NCE dllZ dll g LoadLibrarM(^ft#.dll^!Z eof g (fun! (et?ro"ddre##(dll+^ft#i8uad^!Z .alor g eof(&!Z printf(^hd^+.alor!Z FreeLibrarM(dll!Z return ,Z b tambem 6 po##7.el riar bibliotea din=mia no linu* 8ue #2o o# ar8ui.o# CO+ a #inta*e para riar e##e ar8ui.o 6 mai# fail do 8ue a# dll 'indo'#+ para riar e##e# ar8ui.o# CO podemo# riar a# fun5oe# normai# n2o prei#ar oloar nenhuma fun52o DllBain i4ual a# dll do 'indo'# int ft#i8uad(int .alor! a return .alor d .alorZ b na hora de ompilar tambem temo# 8ue oloar a #inta*e >>#hared no 4 ft#$%&-#kMnet:`/De#ktopX 4 bibliotea. >o ft#.#o >>#hared para arre4ar o ar8ui.o u#amo# a "?I dlopen da bibliotea dlfn.h+ pa##amo# omo ar4umento para e##a "?I o ar8ui.o CO e omo ele #era aberto (podemo# oloar a on#tante N@LDiL"n_!+ e atribuimo# tudo a um ponteiro do tipo .oid Oinlude ]#tdio.hW Oinlude ]dlfn.hW int main(.oid! a .oid ddlZ dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z return ,Z b ?odemo# liberar o ar8ui.o om a "?I dllo#e o# ar4umento# dela 6 a .aria.el do tipo .oid Oinlude ]#tdio.hW Oinlude ]dlfn.hW int main(.oid! a .oid ddlZ dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z dllo#e(dl!Z return ,Z b a4ora riamo# um prot:tipo para i##o oloamo# o tipo de retorno abre e feha parLnte#e# um ponteiro om 8ual8uer nome la dentro+ abre e feha parLnte#e# o# ar4umento# Oinlude ]#tdio.hW Oinlude ]dlfn.hW int main(.oid! a .oid ddlZ int (dft#!(int numero!Z dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z dllo#e(dl!Z return ,Z b a4ora u#amo# a "?I dl#Mm pa##amo# omo ar4umento para ela a .aria.el 8ue e#ta arma)enada o ar8ui. CO+ e o nome da fun52o Oinlude ]#tdio.hW Oinlude ]dlfn.hW int main(.oid! a .oid ddlZ int (dft#!(int numero!Z dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z ft# g dl#Mm(dl+^ft#i8uad^!Z dllo#e(dl!Z return ,Z b depoi# #: u#ar a8uele tipo omo #e fo##e a fun52o Oinlude ]#tdio.hW Oinlude ]dlfn.hW int main(.oid! a .oid ddlZ int (dft#!(int numero!Z int eofZ dl g dlopen(^/home/ft#$%&/De#ktop/ft#.#o^+N@LDiL"n_!Z ft# g dl#Mm(dl+^ft#i8uad^!Z eof g (dft#!(%,!Z printf(^hd^+eof!Z dllo#e(dl!Z return ,Z b para ompilar e nee##;rio linkar a lib dl 3unto om o 4 ft#$%&-#kMnet:`/De#ktopX 4 ft#. >o hak >l dl :.7 Criando )aBe"ile O# make file# ou ar8ui.o# de ria52o #2o ar8ui.o# para failitar a ompila52o de determinada #oure e.itando do pro4ramador ou u#u;rio final ter 8ue di4itar todo# o# paramento# para poder ompilar+ e##e# ar8ui.o# #2o u#ado on#tantemente no linu* para in#talar paote#+ o# make file# permite u#ar .aria.ei# e ao me#mo tempo fa) hea4em do# paramento#+ o# ar8ui.o# make file de.e e#tar e#rito por padr2o JBakefileK a#o n2o e#te3a temo# 8ue e#peifiar uma #inta*e para inluir o ar8ui.o+ o pro4rama 8ue 6 u#ado para ompilar pelo# ar8ui.o# make file 6 o make 8ue o#tuma .im 3unto om o# ompiladore#+ o# ar8ui.o# make u#a a #e4uinte e#trutura 8ue 6 o nome do paramento #e4uido de doi# ponto# e o# ar8ui.o# de hea4em depoi# uma 8uebra de linha e uma tabula52o e o omando u#ado pelo terminal ar8ui.o: ft#. 4 ft#. >o hak para ompilar ba#ta ahar o ar8ui.o pelo prompt e di4itar make ft#$%&-#kMnet:`/De#ktopX make 4 ft#. >o hak ft#$%&-#kMnet:`/De#ktopX a#o o ar8ui.o n2o e*i#ti>#e ele n2o ia ompilar ft#$%&-#kMnet:`/De#ktopX make make: ddd Cem re4ra para proe##ar o al.o oft#.U+ nee##;rio por oar8ui.oU. ?are. ft#$%&-#kMnet:`/De#ktopX a#o o ar8ui.o make e#ti.er om outro nome temo# 8ue u#ar a #inta*e >f #e4uido do nome do ar8ui.o ft#$%&-#kMnet:`/De#ktopX make >f lol 4 ft#. >o hak ft#$%&-#kMnet:`/De#ktopX podemo# omentar o# make file# om #harp# (O! ObM hft#$%& ar8ui.o: ft#. 4 ft#. >o hak 6 po##7.el riar no.o# paramento# para i##o na hea4em oloamo# o nome do no.o paramento+ o no.o paramento #era e*eutado ante# do anterior e o anterior #era e*eutado apena# #e der erto o outro ar8ui.o: ft#. ob3eto 4 ft#. lol.o >o hak ob3eto: lol.o 4 ob3eto. >o lol.o > tamb6m 6 po##7.el riar .ari;.ei# para i##o ba#ta e#re.er o nome da .ari;.el depoi# u#ar i4ual #e4uido do .alor+ para u#ar a# .ari;.ei# u#amo# ifr2o #e4uido de abre e feha parLnte#e# dentro dele o nome da .ari;.el ompiladorg4 #ouregft#. #aidaghak ar8ui.o: X(#oure! X(ompilador! X(#oure! >o X(#aida! podemo# entrar om o .alor para a# .aria.el om a #inta*e >e #e4uido da# .aria.ei# e .alore# ft#$%&-#kMnet:`/De#ktopX make >e ompiladorg4++ #aidaghft# 4++ ft#. >o hft# ft#$%&-#kMnet:`/De#ktopX ;.0 struturas "# e#trutura# #2o meio# de arma)enamento de dado# do me#mo tipo ou de tipo# diferente#+ uma da# e#trutura# mai# u#ada# na lin4ua4em C 6 o #trut+ para riar uma e#trutura #trut temo# 8ue oloar a pala.ra #trut #e4uida do nome dela 8ue pode #er 8ual8uer um+ depoi# riamo# um e#opo para oloar o# tipo de dado# e .ari;.ei#+ depoi# do e#opo prei#amo# finali)ar om um ponto e .7r4ula Oinlude ]#tdio.hW #trut eof a bZ int main(.oid! a return ,Z b a4ora #: oloarmo# a# .ar;.ei# dentro da e#trutura Oinlude ]#tdio.hW #trut eof a int diaZ int me#Z int anoZ bZ int main(.oid! a return ,Z b depoi# de riar a e#trutura temo# 8ue in#taniar (delarar! ela na fun52o para poder u#ar+ ada in#t=nia riada n2o afeta a outra+ para in#taniar uma e#trutura na fun52o oloamo# a pala.ra #trut #e4uido do nome da e#trutura 8ue .amo# in#taniar e o nome da in#t=nia 8ue pode #er 8ual8uer um Oinlude ]#tdio.hW #trut eof a int diaZ int me#Z int anoZ bZ int main(.oid! a #trut eof ft#Z return ,Z b om a e#trutura riada e in#taniada ba#ta ae##ar a# .ari;.ei# dentro dela+ para i##o u#amo# o nome da in#t=nia #e4uido de um ponto e nome da .ari;.el depoi# podemo# atribuir omo #e fo##e uma .ari;.el me#mo Oinlude ]#tdio.hW #trut eof a int diaZ int me#Z int anoZ bZ int main(.oid! a #trut eof ft#Z ft#.dia g %/Z ft#.me# g %,Z ft#.ano g /,%$Z printf(^hd/hd/hd^+ft#.dia+ft#.me#+ft#.ano!Z return ,Z b omo dito ante# ada in#t=nia n2o afeta a outra Oinlude ]#tdio.hW #trut eof a int numeroZ bZ int main(.oid! a #trut eof ft#Z #trut eof lolZ ft#.numero g $%&Z lol.numero g %,,Z printf(^hd Vnhd^+ft#.numero+lol.numero!Z return ,Z b podemo# delarar u#ando a me#ma linha #eparando por .7r4ula 8uando 6 a me#ma e#trutura# Oinlude ]#tdio.hW #trut eof a int numeroZ bZ int main(.oid! a #trut eof ft#+lolZ ft#.numero g $%&Z lol.numero g %,,Z printf(^hd Vnhd^+ft#.numero+lol.numero!Z return ,Z b podemo# delarar e#trutura# omo ponteiro# adiionando a#teri#o ante# do nome da in#t=nia+ na hora de ae##ar o# dado# n2o u#amo# o ponto e #im o h7fen #e4uido do maior (>W! Oinlude ]#tdio.hW #trut eof a int numeroZ bZ int main(.oid! a #trut eof dft#Z ft#>Wnumero g $%&Z printf(^hd^+ft#>Wnumero!Z return ,Z b tamb6m e po##7.el pa##ar omo ar4umento o endere5o de mem:ria de uma e#trutura para uma fun52o para poder #er manipulada Oinlude ]#tdio.hW #trut eof a int numeroZ bZ .oid lol(#trut eof dponteiro! a ponteiro>Wnumero g $%&Z b int main(.oid! a #trut eof ft#Z lol(Yft#!Z printf(^hd^+ft#.numero!Z return ,Z b poder7amo# riar uma delara52o 4lobal u#ando tMpedef ante# do #trut+ e ante# do ponto e .7r4ula o# nome# predefinido# da #trut #eparado por .7r4ula+ de##a forma na hora de delarar podemo# delarar #em a pala.ra #trut Oinlude ]#tdio.hW tMpedef #trut eof a int numeroZ blolZ int main(.oid! a lol ft#Z ft#.numero g $%&Z printf(^hd^+ft#.numero!Z return ,Z b outra forma #eria riar o tMpedef #eparadamente Oinlude ]#tdio.hW tMpedef #trut eof lolZ #trut eof a int numeroZ bZ int main(.oid! a lol ft#Z ft#.numero g $%&Z printf(^hd^+ft#.numero!Z return ,Z b tamb6m podemo# aloar dinamiamente pelo mallo Oinlude ]#tdio.hW Oinlude ]#tdlib.hW #trut eof a int numeroZ bZ int main(.oid! a #trut eof dft# g mallo(#i)eof(#trut eof!!Z ft#>Wnumero g $%&Z printf(^hd^+ft#>Wnumero!Z free(ft#!Z return ,Z b e*i#tem outra# e#trutura# al6m da #trut uma dela# 6 o enum 8ue #er.e para enumerar on#tante# om nQmero# on#euti.o# (,+%+/+$+E et!+ para riar a e#trutura enum ba#ta u#ar o nome dela riar um e#opo e oloar o nome da# on#tante# #eparado por .7r4ula+ e para terminar um ponto e .ir4ula depoi# do e#opo+ o ontador ome5a no numero , e a pr:*ima on#tante #era o numero anterior inrementado mai# % Oinlude ]#tdio.hW enum a F@C+ BBeB+ CINiN"FIC+ C<C?EI@OiFIN@<"L bZ int main(.oid! a printf(^hd hd hd hd^+F@C+BBeB+CINiN"FIC+C<C?EI@OiFIN@<"L!Z return ,Z b para e#peifiar um nQmero de uma on#tante ba#ta atribuir o nQmero a ela+ #: lembrando 8ue a pr:*ima #er; um inremento da anterior Oinlude ]#tdio.hW enum a F@C g $%&+ BBeB+ CINiN"FIC+ C<C?EI@OiFIN@<"L bZ int main(.oid! a printf(^hd hd hd hd^+F@C+BBeB+CINiN"FIC+C<C?EI@OiFIN@<"L!Z return ,Z b outra e#trutura tamb6m da lin4ua4em C 6 o union 8ue permite uma aloa52o tenha mai# de um tipo de dado embora e##a aloa52o #: po##a 4uardar um .alor por .e) Oinlude ]#tdio.hW union eof a int ft#Z float lolZ bZ int main(.oid! a union eof hakZ hak.ft# g $%&Z hak.lol g $.%&Z printf(^hd Vnhd^+Yhak.ft#+Yhak.lol!Z b uma e#trutura da lin4ua4em C++ 6 o name#pae 8ue permite #eparar o :di4o e.itando .ari;.ei# fun59e# e e#trutura# om o me#mo nome o name#pae mai# u#ada na lin4ua4em C++ 6 o #td onde e*i#te a# fun59e# out+ in e endl+ para riar um name#pae ba#ta oloar a pala.ra name#pae #e4uida do nome dele 8ue pode #er 8ual8uer um+ depoi# um e#opo e la dentro a# .ari;.ei# e fun59e# Oinlude ]io#treamW name#pae eof a int ft#Z bZ int main(.oid! a return ,Z b para ae##ar o# dado# dentro do name#pae u#amo# o nome do name#pae #e4uida de dua# .e)e# doi# ponto# e a .ari;.el ou fun52o Oinlude ]io#treamW name#pae eof a int ft#Z bZ int main(.oid! a eof::ft# g $%&Z #td::out ]] eof::ft#Z return ,Z b omo dito ante# o name#pae permite oloar .ari;.ei# om o me#mo nome e.itando inompatibilidade Oinlude ]io#treamW name#pae eof a int ft#Z bZ name#pae hak a int ft#Z bZ int main(.oid! a eof::ft# g $%&Z hak::ft# g %,,Z #td::out ]] eof::ft# ]] #td::endlZ #td::out ]] hak::ft#Z return ,Z b para e.itar n2o fiar oloando o name#pae podemo# indiar 8ue determinada fun52o ou .ari;.el pertene a8uele name#pae+ para i##o u#amo# a pala.ra u#in4 #e4uido dele e a .aria.el ou fun52o (lembrando 8ue para fa)er i##o tem 8ue riar primeiro o name#pae! Oinlude ]io#treamW u#in4 #td::outZ u#in4 #td::endlZ name#pae eof a int ft#Z bZ u#in4 eof::ft#Z int main(.oid! a ft# g $%&Z out ]] ft#Z return ,Z b para fa)er i##o om toda# a# fun59e# e .ari;.ei# do name#pae podemo# u#ar Ju#in4 name#paeK e o nome do name#pae Oinlude ]io#treamW u#in4 name#pae #tdZ name#pae eof a int ft#Z bZ u#in4 name#pae eofZ int main(.oid! a ft# g $%&Z out ]] ft#Z return ,Z b tamb6m podemo# oloar um name#pae dentro de outro Oinlude ]io#treamW u#in4 name#pae #tdZ name#pae eof a name#pae ft# a int hakZ bZ bZ int main(.oid! a eof::ft#::hak g $%&Z out ]] eof::ft#::hakZ return ,Z b no u#in4 fiaria a##im Oinlude ]io#treamW u#in4 name#pae #tdZ name#pae eof a name#pae ft# a int hakZ bZ bZ u#in4 name#pae eof::ft#Z int main(.oid! a hak g $%&Z out ]] hakZ return ,Z b outra e#trutura da lin4ua4em C++ #2o a# la##e# 8ue .amo# .er mai# para frente em orienta52o a ob3eto ;.1 Con1erso de tipo e dados E*i#tem .;rio# tipo# de on.er#2o uma dela# 6 o tMpea#t+ e##e tipo de on.er#ao permite on.erter um tipo de dado para outro tipo de dado um e*emplo 6 int para har+ em teoria o tMpea#t pode #er uma #imple# atribui52o Oinlude ]#tdio.hW int main(.oid! a int eof g 10Z har ft# g eofZ printf(^h^+ft#!Z return ,Z b embora o :di4o anterior .ai funiona #eria mai# orreto e#peifiar a on.er#2o u#ando abre e feha parLnte#e# e o tipo de dado a #er on.ertido ante# da .ari;.el Oinlude ]#tdio.hW int main(.oid! a int eof g 10Z har ft# g (har! eofZ printf(^h^+ft#!Z return ,Z b outra on.er#2o intere##ante 6 tran#formar uma #trin4 em numero int om a fun52o atoi da bibliotea #tdlib.h+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento a #trin4 e pe4a o retorno do numero on.ertido Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a har eof[%,\ g ^$%&^Z int ft# g atoi(eof!Z printf(^hd^+ft#!Z return ,Z b para on.erte para um nQmero float u#amo# a fun52o atof da bibliotea #tdlib.h Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a har eof[%,\ g ^$.%&^Z float ft# g atof(eof!Z printf(^hf^+ft#!Z return ,Z b e*i#te a fun52o itoa da bibliotea #tdlib.h 8ue on.erte uma .ari;.el int para uma #trin4 #obre uma ba#e e#peifia+ para u#ar e##a fun52o pa##amo# omo ar4umento o nQmero a #er on.ertido+ a arraM do tipo har e por fim a ba#e (%, g deimal+ %G g he*adeimal+ H g otal+ / g binario! Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a har eof[%,\Z int ft# g $%&Z itoa(ft#+eof+/!Z printf(^h#^+eof!Z return ,Z b a fun52o atoi n2o permite al4un# formato# de nQmero# omo por e*emplo he*adeimal para i##o u#amo# a fun52o #trtol da bibliotea #tdlib.h+ para u#ar ele pa##amo# omo ar4umento a #trin4+ um endere5o de mem:ria de um ponteiro do tipo har 8ue podemo# oloar N<LL (N<LL g ,! e a ba#e do nQmero da #trin4+ o retorno da fun52o 6 o nQmero on.ertido Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a har eof[%,\ g ^,*G%^Z int ft# g #trtol(eof+N<LL+%G!Z printf(^hd^+ft#!Z return ,Z b onde oloamo# N<LL poder7amo# e#peifiar um ponteiro+ e##e ponteiro #eria Qtil a#o ti.e##e outro# nQmero# na #trin4 Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a har eof[%&\ g ^,*G% %%,,,,%^Z har dponteiroZ int ft# g #trtol(eof+Yponteiro+%G!Z printf(^,*G% g hd Vn^+ft#!Z ft# g #trtol(ponteiro+Yponteiro+/!Z printf(^%%,,,,% g hd^+ft#!Z return ,Z b ;.2 )anipulando o tempo Dom 4alera 6 muito Qtil aprender a manipular o tempo i##o permite fa)er pro4rama# 8ue #: e*eute determinado# proedimento# em um erto tempo ou em um inter.alo de tempo ou #imple#mente mo#tre a hora atual+ a hora no omputador 6 re4i#trado a ada #e4undo dei# de %10, i##o permite formatar o hor;rio onforme re4ra# do (B@ e n2o #e limitar apena# a um fu#o hor;rio ou tempo+ a primeira fun52o 8ue .amo# .er .ai #er o #leep da bibliotea #tdlib.h+ e##a fun52o permite pau#ar o pro4rama por um determinado tempo+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento o tempo em #e4undo# ou mil6#imo# 8ue pode .ariar entre o #i#tema operaional (o #i#tema 'indo'# o .alor 6 em mil6#imo# 3; no linu* o .alor 6 em #e4undo#+ ent2o % #e4undo no 'indo'# pelo #leep 6 e8ui.alente a %,,, 3; no linu* % #e4undo 6 %! Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a printf(^.i#item o ^!Z #leep(%,,,!Z printf(^forum eof^!Z return ,Z b no linu* o pro4rama anterior fiaria a##im Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a printf(^.i#item o ^!Z #leep(%!Z printf(^forum eof^!Z return ,Z b a fun52o time da bibliotea time.h retorna o #e4undo# dei# de %10,+ para u#ar e##a fun52o ba#ta pa##ar omo ar4umento o .alor N<LL e atribuir o retorno 8ue 6 o tempo+ embora po##amo# u#ar .ari;.ei# do tipo int 6 reomendado u#ar a .ari;.el do tipo timeit 8ue #e enontra na bibliotea time.h tamb6m Oinlude ]#tdio.hW Oinlude ]time.hW int main(.oid! a timeit eof g time(N<LL!Z printf(^hd^+eof!Z return ,Z b na fun52o time tamb6m 6 po##7.el pa##ar omo ar4umento o endere5o de mem:ria da .ari;.el em .e) de atribuir a me#ma Oinlude ]#tdio.hW Oinlude ]time.hW int main(.oid! a timeit eofZ time(Yeof!Z printf(^hd^+eof!Z return ,Z b uma forma de formatar o tempo para #trin4 no formato (o nome do dia+ o nome do mL#+ a data+ a hora e o ano! podemo# u#ar a fun52o time da bibliotea time.h+ pa##amo# omo ar4umento para ela o endere5o de mem:ria da .ari;.el timeit om o tempo Oinlude ]#tdio.hW Oinlude ]time.hW int main(.oid! a timeit eof g time(N<LL!Z printf(^h#^+time(Yeof!!Z return ,Z b outra forma #eria u#ar a e#trutura tm da bibliotea time.h+ para i##o riamo# um ponteiro da e#trutura tm e atribu7mo# a fun52o loaltime da bibliotea time.h+ na fun52o loaltime pa##amo# omo ar4umento o endere5o de mem:ria da .ari;.el timeit om o tempo em #e4undo#+ depoi# ba#ta ae##ar a# .ari;.ei# da e#trutura tm 8ue #2o tmi#e para o# #e4undo#+ tmimin para o# minuto#+ tmihour para a# hora#+ tmimdaM para o dia onforme o mL#+ tmiMdaM para o dia onforme o ano+ tmimon para o mL#+ tmi'daM para o dia da #emana+ tmiMear para o ano Oinlude ]#tdio.hW Oinlude ]time.hW int main(.oid! a #trut tm dft#Z timeit eof g time(N<LL!Z ft# g loaltime(Yeof!Z printf(^#e4undo# hd Vn^+ft#>Wtmi#e!Z printf(^minuto# hd Vn^+ft#>Wtmimin!Z printf(^hora hd Vn^+ft#>Wtmihour!Z printf(^dia(#emana! hd Vn^+ft#>Wtmi'daM!Z printf(^dia(me#! hd Vn^+ft#>WtmimdaM!Z printf(^dia(ano! hd Vn^+ft#>WtmiMdaM!Z printf(^me# hd Vn^+ft#>Wtmimon!Z printf(^ano hd Vn^+ft#>WtmiMear!Z return ,Z b a fun52o loaltime retorna om ba#e no hor;rio do #eu omputador para retorna o horario atual (B@+, para manipular outro# fu#o hor;rio# u#amo# a fun52o 4mtime da bibliotea time.h no lu4ar de loaltime e #omamo# ou #ubtra7mo# a hora onforme o (B@ de#e3ado+ no e*emplo abai*o podemo# .er o fu#o hor;rio 4reen'ih ((B@,!+ bra#il ((@B>/+(@B>$ e (@B>E! e 3apao ((B@+1+ adoro a# 3apone#a# d>d! Oinlude ]#tdio.hW Oinlude ]time.hW int main(.oid! a #trut tm dft#Z timeit eof g time(N<LL!Z ft# g 4mtime(Yeof!Z printf(^(B@, (4reen'ih!: hd:hd:hd Vn^+ft#>Wtmihour+ft#>Wtmimin+ft#>Wtmi#e!Z printf(^(B@>/ (are!: hd:hd:hd Vn^+ft#>Wtmihour>/+ft#>Wtmimin+ft#>Wtmi#e!Z printf(^(B@>$ (r3!: hd:hd:hd Vn^+ft#>Wtmihour>$+ft#>Wtmimin+ft#>Wtmi#e!Z printf(^(B@>E (f. noronha!: hd:hd:hd Vn^+ft#>Wtmihour>/+ft#>Wtmimin+ft#>Wtmi#e!Z printf(^(B@+1 (3apao!: hd:hd:hd Vn^+ft#>Wtmihour+1+ft#>Wtmimin+ft#>Wtmi#e!Z return ,Z b podemo# u#ar a fun52o difftime para retorna a diferen5a entre doi# tempo#+ pe4amo# o tempo iniial e o final om a fun52o time+ depoi# u#amo# a fun52o difftime pa##amo# omo ar4umento o# doi# e atribuindo o me#mo a uma .ari;.el do tipo timeit Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]time.hW int main(.oid! a timeit eof+ ft#+ hakZ eof g time(N<LL!Z #leep($,,,!Z ft# g time(N<LL!Z hak g difftime(ft#+eof!Z printf(^hd^+hak!Z return ,Z b uma outra fun52o intere##ante 6 o rand e #rand da bibliotea #tdlib.h 8ue retorna nQmero# aleat:rio#+ embora n2o #e3a uma maneira de manipular o tempo para u#ar e##a# fun59e# prei#a u#ar a fun52o time+ para retorna numero aleat:rio# u#amo# a fun52o #rand e pa##amo# omo ar4umento a fun52o time+ depoi# u#amo# a fun52o rand om modulo e um nQmero 8ue #eria o .alor m;*imo a #er retornado Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]time.hW int main(.oid! a #rand(time(N<LL!!Z printf(^numero randomio %: hd Vn^+rand(! h %,,!Z printf(^numero randomio /: hd Vn^+rand(! h %,,,!Z printf(^numero randomio $: hd Vn^+rand(! h %,!Z return ,Z b ;.! )anipulando arqui1os "ho 8ue a manipula52o de ar8ui.o# 6 uma da# oi#a# mai# importante na pro4rama52o de.ido o arma)enamento e leitura de informa52o+ 8uando u#amo# .aria.ei# a8uilo fia temporariamente na mem:ria en8uanto o pro4rama e#ti.er rodando depoi# do pro4rama #er finali)ado a memoria e liberada e o #eu onteQdo de#tru7do e i##o pode #er um problema #e prei#armo# reuperar e##e# dado# da .ari;.el+ para e.itar e##e problema podemo# riar ar8ui.o# no ID ou outro di#po#iti.o de arma)enamento e ae##ar ele# 8uando prei#ar+ para riar um ar8ui.o na lin4ua4em C/C++ podemo# u#ar a fun52o fopen da bibliotea #tdio.h+ para u#ar e##a fun52o temo# 8ue pa##ar omo ar4umento o nome do ar8ui.o ou endere5o ompleto dele e tipo de ae##o+ o tipo de ae##o 6 uma #trin4 om o# #e4uinte# aratere#+ J'K para e#rita+ JrK para leitura+ JaK para e#rita e onatena52o+ JbK para binario e de.e #er u#ada depoi# da e#rita ou leitura JrbK+ tamb6m podemo# oloar um + no final indiando e#rita e leitura ou leitura e e#rita J'+K+ o tipo de ae##o de leitura apena# abre o ar8ui.o 3; o tipo e#rita ele abre o ar8ui.o a#o o ar8ui.o n2o e*i#ta ele ria o ar8ui.o+ ent2o no a#o para riar u#amo# tipo de ae##o de e#rita Oinlude ]#tdio.hW int main(.oid! a fopen(^eof.t*t^+^'^!Z return ,Z b omo dito ante# podemo# u#ar o endere5o ompleto para riar ou ae##ar o ar8ui.o (#: lembrando 8ue a lin4ua4em C/C++ u#ar ontra barra omo :di4o de e#ape ent2o temo# 8ue u#ar ontra barra dupla! Oinlude ]#tdio.hW int main(.oid! a fopen(^C:VV<#er#VVft#$%&VVDe#ktopVVeof.t*t^+^'^!Z return ,Z b para ae##armo# um ar8ui.o para e#rita ou leitura n2o ba#ta u#ar apena# a fun52o fopen+ temo# 8ue atribuir ela a ponteiro do tipo FILE da bibliotea #tdio.h+ e depoi# u#ar a fun52o para e#re.er ou ler o ar8ui.o+ depoi# do u#o da e#rita ou leitura temo# 8ue fehar o ar8ui.o para atuali)ar para i##o u#amo# a fun52o flo#e da bibliotea #tdio.h #e4uido do ponteiro FILE Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z ft# g fopen(^eof.t*t^+^'^!Z flo#e(ft#!Z return ,Z b para e#re.er dentro do ar8ui.o e*i#tem muita# fun59e# uma dela# 6 o fprintf da bibliotea #tdio.h 8ue permite e#re.er nele formatando a #a7da+ para u#ar o fprintf 6 pareida om a fun52o #printf #: 8ue oloamo# o ponteiro FILE ante# Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z ft# g fopen(^eof.t*t^+^'^!Z fprintf(ft#+^.i#item o forum eofVnVn^!Z fprintf(ft#+^bM hft#h*^+$%&!Z flo#e(ft#!Z return ,Z b a diferen5a entre o tipo de ae##o J'K e JaK+ 8ue o tipo de ae##o J'K .ai abrir o ar8ui.o e apa4ar o 8ue e#ti.er la dentro 3; o tipo de ae##o JaK .ai e#re.er no final do 8ue e#ti.er la dentro Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z ft# g fopen(^eof.t*t^+^a^!Z fprintf(ft#+^.i#item o forum eofVnVn^!Z fprintf(ft#+^bM hft#$%&Vn^!Z flo#e(ft#!Z ft# g fopen(^eof.t*t^+^a^!Z fprintf(ft#+^#e fo##e o ae##o ' #o teria e##a #trin4 la dentro^!Z flo#e(ft#!Z return ,Z b podemo# e#re.er uma #trin4 om a fun52o f'rite da bibliotea #tdio.h+ porem e##a fun52o 6 um pouo mai# ompliada 8ue o fprintf+ nela temo# 8ue pa##ar omo ar4umento a #trin4 a #er arma)enada+ o tamanho do tipo de dado+ o tamanho da #trin4 e o ponteiro Oinlude ]#tdio.hW Oinlude ]#trin4.hW int main(.oid! a FILE dft#Z har hak[\ g ^e#ta muito alor a8ui^Z ft# g fopen(^eof.t*t^+^'^!Z f'rite(hak+#i)eof(har!+#trlen(hak!+ft#!Z flo#e(ft#!Z return ,Z b podemo# u#ar fput# da bibliotea #tdio.h para arma)enar uma #trin4+ o# ar4umento# dela #ao a #trin4 e o ponteiro Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z ft# g fopen(^eof.t*t^+^'^!Z fput#(^#ou um .iiado em anime# U>U ^+ft#!Z flo#e(ft#!Z return ,Z b para arma)enar um unio arater podemo# u#ar fput da bibliotea #tdio.h nele pa##amo# omo ar4umento o arater depoi# o ponteiro Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z ft# g fopen(^eof.t*t^+^'^!Z fput(UeU+ft#!Z fput(UoU+ft#!Z fput(UfU+ft#!Z flo#e(ft#!Z return ,Z b para fa)ermo# o in.er#o ou #e3a ler o ar8ui.o e arma)enar em uma .aria.el temo# di.er#a# fun59e#+ uma dela# 6 o f#anf da bibliotea #tdio.h 8ue ler o# dado# no ar8ui.o e arma)ena de forma formatada em uma .aria.el+ no# ar4umento# pa##amo# o ponteiro do ar8ui.o a #trin4# om tipo do ar8ui.o e por fim a .aria.el+ Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z int hakZ ft# g fopen(^eof.t*t^+^r^!Z f#anf(ft#+^hd^+Yhak!Z flo#e(ft#!Z printf(^hd^+hak!Z return ,Z b outra forma 6 u#ar o fread da bibliotea #tdio.h+ porem teriamo# 8ue #aber o tamanho e*ato do ar8ui.o a #er opiada para i##o termiamo# e u#ar dua# fun5oe# uma 6 o f#eek para pular para o final do ar8ui.o e o ftell para pe4ar a po#i52o (.amo# aprender i##o mai# para frente entao .ou u#ar um ar8ui.o 8ue eu 3a #ei o tamanho!+ o# ar4umento# do fread #ao a arraM do tipo har onde .ai #er arma)enado o tamanho do tipo de dado da .aria.el+ o tamanho do ar8ui.o derementado > % (no a#o o meu ar8ui.o tem a #trin4 eof 8ue #2o $! e por fim o ponteiro do ar8ui.o Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z har hak[%,,\Z ft# g fopen(^eof.t*t^+^r^!Z fread(hak+#i)eof(hak!+$ > %+ft#!Z flo#e(ft#!Z printf(^h#^+hak!Z return ,Z b Com a fun52o f4et# da bibliotea #tdio.h opiamo# uma 8uantidade e#peifia de #trin4+ pa##amo# omo ar4umento para ela o ponteiro a 8uantidade de #trin4 e a .aria.el 8ue #era arma)enada Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z har hak[%,,\Z ft# g fopen(^eof.t*t^+^r^!Z f4et#(hak+$+ft#!Z flo#e(ft#!Z printf(^h#^+hak!Z return ,Z b para opiar um unio arater u#amo# f4et da bibliotea #tdio.h+ #o pa##amo# omo ar4umento o ponteiro do ar8ui.o e atribuimo# o retorno para uma .aria.el do tipo har Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z har hak[%,,\Z ft# g fopen(^eof.t*t^+^r^!Z hak[,\ g f4et(ft#!Z hak[%\ g f4et(ft#!Z hak[/\ g f4et(ft#!Z hak[$\ g ,*,,Z flo#e(ft#!Z printf(^h#^+hak!Z return ,Z b ?ara riar um ar8ui.o temporario ou #e3a ele #era de#truido depoi# 8ue o pro4rama for finali)ado u#amo# a fun52o tmpfile da bibliotea #tdio.h+ para u#ar e##a fun52o ba#ta atribuir a um ponteiro do tipo FILE+ e##a fun52o 6 perfeita para arma)enar dado# temporariamente 8ue de.e #er de#truido no final do pro4rama Oinlude ]#tdio.hW int main(.oid! a FILE eof g tmpfile(!Z fprintf(eof+^$%&^!Z return ,Z b para deletar um ar8ui.o u#amo# a fun52o remo.e da bibliotea #tdio.h+ nela pa##amo# omo ar4umento o nome ou endere5o do ar8ui.o# Oinlude ]#tdio.hW int main(.oid! a remo.e(^eof.t*t^!Z return ,Z b para renomear u#amo# a fun52o rename no ar4umento dela pa##amo# o nome ou endere5o do ar8ui.o e o no.o nome Oinlude ]#tdio.hW int main(.oid! a rename(^eof.t*t^+^ft#.t*t^!Z return ,Z b podemo# no# mo.imentar dentro de um ar8ui.o om a fun52o f#eek da bibliotea #tdio.h+ pa##amo# omo ar4umento para e##a fun52o o ponteiro do ar8ui.o+ a po#i52o para onde ele .ai pular+ e a o#tante 8ue india ponto de partida do pulo (iniio g CEERiCE@+ atual g CEERiC<N+ fim g CEERiEND! Oinlude ]#tdio.hW int main(.oid! a FILE dft# g fopen(^eof.t*t^+^r^!Z f#eek(ft#+>%+CEERiEND!Z printf(^ultimo arater do ar8ui.o g h^+f4et(ft#!!Z flo#e(ft#!Z return ,Z b om a fun52o ftell da bibliotea #tdio.h podemo# retornar o a 8uantidade de po#i59e# ate he4a na po#i52o atual+ para u#ar ela ba#ta pa##ar omo ar4umento o ponteiro do ar8ui.o e atribuir a uma .aria.el do tipo int Oinlude ]#tdio.hW int main(.oid! a FILE dft# g fopen(^eof.t*t^+^r^!Z int eofZ f#eek(ft#+&+CEERiCE@!Z eof g ftell(ft#!Z printf(^hd^+eof!Z flo#e(ft#!Z return ,Z b
outra forma de pe4ar a po#i52o atual 6 u#ar a fun52o f4etpo# da bibliotea #tdio.h+ ne##a fun52o pa##amo# omo ar4umento o ponteiro do ar8ui.o+ e o endere5o de memoria de uma .aria.el do tipo fpo#it Oinlude ]#tdio.hW int main(.oid! a FILE dft# g fopen(^eof.t*t^+^r^!Z fpo#it eofZ f#eek(ft#+$+CEERiCE@!Z f4etpo#(ft#+Yeof!Z printf(^hd^+eof!Z flo#e(ft#!Z return ,Z b tambem podemo# a.an5ar para determinada po#i52o om a fun52o f#etpo#+ pa##amor omo ar4umento para ela o ponteiro do ar8ui.o e o endere5o de memoria de uma .aria.el do tipo fpo#it om a po#i52o Oinlude ]#tdio.hW int main(.oid! a FILE dft# g fopen(^eof.t*t^+^r^!Z fpo#it eof g EZ f#etpo#(ft#+Yeof!Z printf(^hd^+ftell(ft#!!Z flo#e(ft#!Z return ,Z b Com a fun52o re'ind da bibliotea #tdio.h .oltamo# para a po#i52o iniial+ nela #o pa##amo# omo ar4umento o ponteiro do ar8ui.o Oinlude ]#tdio.hW int main(.oid! a FILE dft# g fopen(^eof.t*t^+^r^!Z fpo#it eof g EZ f#etpo#(ft#+Yeof!Z re'ind(ft#!Z printf(^hd^+ftell(ft#!!Z flo#e(ft#!Z return ,Z b om a fun52o feof da bibliotea #tdio.h retornamo# .erdadeiro 8uando e#ti.er no final do ar8ui.o+ para u#ar e##a fun52o #o pa##amo# o ponteiro do ar8ui.o# e pe4amo# o retorno Oinlude ]#tdio.hW int main(.oid! a FILE dft# g fopen(^eof.t*t^+^r^!Z 'hile(%! a if(feof(ft#!! a breakZ b printf(^h^+f4et(ft#!!Z b flo#e(ft#!Z return ,Z b uma oi#a 8ue #e de.e tomar uidado na hora de arre4ar um ar8ui.o e oloar ele em uma arraM+ e##a arraM de.e #er maior 8ue 8uantidade de aratere# do ar8ui.o para e.itar falha buffer o.erflo' e falha de #e4menta52o+ para e.itar i##o podemo# abrir o ar8ui.o .er o tamanho ate o ultimo arater e aloar dinamiamente om a fun52o mallo Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z har deofZ int tam g ,Z ft# g fopen(^eof.t*t^+^r^!Z f#eek(ft#+,+CEERiEND!Z tam g ftell(ft#!Z re'ind(ft#!Z eof g mallo(#i)eof(har! d tam + %!Z return ,Z b na lin4ua4em C++ podemo# u#ar a bibliotea f#tream+ para abrir um ar8ui.o# in#taniamo# o f#tream+ depoi# u#amo# a fun52o open pa##amo# omo ar4umento o ar8ui.o depoi# o tipo de ae##o 8ue 6 (io#::in #eria o '+ io#::out #eria o r+ io#::binarM #eria o b+ io#::app #eria o a!+ no tipo de ae##o #er hou.er doi# #eparamo# pelo pipe+ tambem u#amo# a fun52o lo#e para fehar Oinlude ]io#treamW Oinlude ]f#treamW u#in4 name#pae #tdZ int main(.oid! a f#tream ft#Z ft#.open(^eof.t*t^+io#::out l io#::app!Z ft#.lo#e(!Z return ,Z b para e#re.ermo# no ar8ui.o ba#ta redireionar o flu*o 8ue #eria o me#mo do out para o ob3eto in#taniado Oinlude ]io#treamW Oinlude ]f#treamW u#in4 name#pae #tdZ int main(.oid! a f#tream ft#Z ft#.open(^eof.t*t^+io#::out l io#::app!Z ft# ]] ^eof ^Z ft#.lo#e(!Z return ,Z b para ler o ar8ui.o fa)emo# o in.er#o Oinlude ]io#treamW Oinlude ]f#treamW u#in4 name#pae #tdZ int main(.oid! a f#tream ft#Z har hak[%,,\Z ft#.open(^eof.t*t^+io#::in!Z ft# WW hakZ ft#.lo#e(!Z out ]] hakZ return ,Z b 6 po##i.el de#obrir o# atributo# do ar8ui.o omo tamanho+ ultima .e) 8ue foi ae##ado ou modifiado+ inode 8ue #eria uma e#peie de endere5o lo4io no linu*+ tipo de permi##2o et+ para i##o .amo# u#ar a e#trutura #tat e a fun52o #tat da bibliotea #M#/#tat.h embora e##a bibliotea #e3a do linu* ela tambem e*i#te no# ompiladore# do 'indo'#+ para ome5ar delaramo# a #trut #tat depoi# u#amo# a fun52o #tat pa##ando omo ar4umento para ela uma #trin4 8ue #eria o ar8ui.o+ e o endere5o de memoria da #trut+ por fim u#amo# o# atributo# da e#trutura #tat 8ue #2o #ti#i)e para retornar o tamanho em bit#+ #tiatime para o tempo do ultimo ae##o (tempo em #e4undo# dei# de %10,!+ #tiino para o inode (#o funiona no linu*!+ #tinlink 8uantidade de link# (#o funiona no linu*!+ #tiuid para identifiador do dono (#o funiona no linu*! e #ti4id para identifiar o 4rupo (#o funiona no linu*!+ e*i#tem outro# atributo# alem do# 8ue eu itei Oinlude ]#tdio.hW Oinlude ]#M#/#tat.hW Oinlude ]time.hW int main(.oid! a #trut #tat ft#Z timeit ae##o+ modifiZ #tat(^eof.t*t^+Yft#!Z printf(^tamanho: hd Vn^+ft#.#ti#i)e!Z ae##o g ft#.#tiatimeZ modifi g ft#.#timtimeZ printf(^ae##o: h# Vn^+time(Yae##o!!Z printf(^modifiado: h# Vn^+time(Ymodifi!!Z printf(^inode: hd Vn^+ft#.#tiino!Z printf(^8nt link#: hd Vn^+ft#.#tinlink!Z printf(^id do dono: hd Vn^+ft#.#tiuid!Z printf(^id do 4rupo: hd Vn^+ft#.#ti4id!Z return ,Z b ;.- )anipulando diretorio ?ara manipular diretorio no #i#tema 'indo'# u#amo# a bibliotea dirent.h 3a no #i#tema linu* u#amo# #M#/dir.h+ para li#tar o# ar8ui.o# de um diretorio temo# 8ue abrir e##e diretorio om a fun52o opendir da bibliotea dirent.h (#M#/dir.h no a#o do linu*!+ pa##amo# omo ar4umento o diretorio 8ue .amo# abrir e atribuimo# o retorno da fun52o para um ponteiro do tipo DIN+ podemo# u#ar o lo#edir para fehar o diretorio nele pa##amo# omo ar4umento o ponteiro DIN Oinlude ]#tdio.hW Oinlude ]dirent.hW int main(.oid! a DIN deofZ eof g opendir(^:VV^!Z lo#edir(eof!Z return ,Z b depoi# ba#ta u#ar a fun52o readdir da bibliotea dirent.h (#M#/dir.h!+ pa##ando omo ar4umento para ela o ponteiro 8ue atribuimo# o diretorio e por fim atribuimo# o retorno para um ponteiro de uma e#trutura do tipo dirent+ omo a fun52o readdir ler ar8ui.o por ar8ui.o u#ar ela em um la5o 6 a melhor alternati.a Oinlude ]#tdio.hW Oinlude ]dirent.hW int main(.oid! a DIN deofZ #trut dirent dft#Z eof g opendir(^:VV^!Z 'hile(ft# g readdir(eof!! a b lo#edir(eof!Z return ,Z b para ler o nome do# ar8ui.o# ba#ta u#ar a arraM diname da e#trutura dirent Oinlude ]#tdio.hW Oinlude ]dirent.hW int main(.oid! a DIN deofZ #trut dirent dft#Z eof g opendir(^:VV^!Z 'hile(ft# g readdir(eof!! a printf(^h# Vn^+ft#>Wdiname!Z b lo#edir(eof!Z return ,Z b tambem 6 po##i.el on#e4uir o inode do ar8ui.o ou diretorio pela e#trutura dirent pela .arai.el diino+ porem n2o 6 funional no 'indo'# Oinlude ]#tdio.hW Oinlude ]#M#/dir.hW int main(.oid! a DIN deofZ #trut dirent dft#Z eof g opendir(^/^!Z 'hile(ft# g readdir(eof!! a printf(^nome: h# Vninode: hd VnVn^+ft#>Wdiname+ft#>Wdiino!Z b lo#edir(eof!Z return ,Z b ;.7 )anipulando o terminal O u#o do terminal pode failtar na manipula52o do #i#tema operaional podendo a4ili)ar u#o de "?I para pro4rama# 3a riado+ para u#ar o terminal e*i#te a fun52o #M#tem da bibliotea #tdlib.h+ e##a fun52o permite pa##ar omo ar4umento o omando 8ue #eria u#ado no termina e depoi# e*ibi no pro4rama a #aida Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a #M#tem(^dir^!Z return ,Z b a ada fun52o #M#tem #eria e8ui.alente a um no.o terminal aberto entao n2o da para ae##ar informa52o de determinado #M#tem pelo outro #M#tem+ no e*emplo abai*o o primeiro #M#tem .ai para o diretorio anterior e o #e4undo #M#tem ler o diretorio+ o #e4undo #M#tem .ai ler o diretorio 8ue e#ta o e*euta.el e nao o diretorio anterior 8ue e#ta o primeiro #M#tem Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a #M#tem(^d ..^!Z #M#tem(^dir^!Z return ,Z b para e.itar o e*emplo aima podemo# u#ar omando# no me#mo #M#tem #eparado#+ no #i#tema 'indo'# u#amo# dua# .e)e# o ^e^ omerial (YY! no linu* u#amo# ponto e .ir4ula (Z! Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a #M#tem(^d .. YY dir^!Z return ,Z b o #M#tem .ai en.iar o flu*o diretamente para tela do omputador #em a po##ibilidade de manipular diretamente+ mai# podemo# manipular indiretamente arma)enando o flu*o para o ID om o operador de #aida do terminal 8ue 6 o #imbolo de maior #e4uido do nome do ar8ui.o+ depoi# abrimo# o ar8ui.o e pe4amo# o# dado# no.amente Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a FILE dft#Z har dhakZ int tam+ ont g ,Z #M#tem(^dir W eof.t*t^!Z ft# g fopen(^eof.t*t^+^r^!Z f#eek(ft#+,+CEERiEND!Z tam g ftell(ft#!Z re'ind(ft#!Z hak g mallo(#i)eof(har! d tam + %!Z 'hile(%! a if(feof(ft#!! a breakZ b hak[ont\ g f4et(ft#!Z ont++Z b flo#e(ft#!Z printf(^h#^+hak!Z return ,Z b podemo# tambem u#ar a fun52o popen da bibliotea #tdio.h para manipula a #aida do terminal+ o popen e paraido om a manipula52o de ar8ui.o+ u#amo# um ponteiro do tipo FILE para atribuir ele+ pa##amo# omo ar4umento o omando para fun52o popen e o tipo de ae##o+ depoi# e #o ler o ponteiro omo #e fo##e um ar8ui.o+ e para fehar u#amo# plo#e pa##ando omo ar4umento o ponteiro Oinlude ]#tdio.hW int main(.oid! a FILE dft#Z ft# g popen(^d .. YY dir^+^r^!Z 'hile(%! a if(feof(ft#!! a breakZ b printf(^h^+f4et(ft#!!Z b plo#e(ft#!Z return ,Z b <.0 ?rientao a o,2eto orienta52o a ob3eto tambem hamado ?OO (?ro4rama52o Orientada a Ob3eto! permite manipular o odi4o omo um todo+ permitindo ab#trair e or4ani)ar determinada# parte# omo uma unia e#trutura ou unia la##e+ de##a e#trutura podera #er 4erado o ob3eto ou in#taia+ 6 pelo ob3eto 8ue permite manipular a la##e e ada ob3eto 4erado da me#ma la##e n2o afetara o outro+ a# .ari.ei# e fun59e# u#ando o oneito de orienta52o a ob3eto de.era #er hamada de atributo# (.aria.ei#! e metodo# (fun59e#! embora hama>la# de .aria.ei# e fun59e# tambem 6 aeita.el porem #e3a mai# orreto o termo atributo# e metodo#+ uma la##e pode reeber o# atributo# e metodo# de outra la##e i##o 6 hamado heran5a e 6 forma fail de reapro.eitar o odi4o e n2o prei#ar re#re.e>lo+ om o enap#ulamento permitimo# e#olher omo de.e #er ae##ado a la##e e na lin4ua4em C++ e*i#te $ tipo# de ae##o 8ue #2o publi (publio!+ pri.ate (pri.ado!+ proteted (prote4ido!+ tambem e*i#te o polimorfi#mo 8ue 6 8uando determinada atributo ou metodo a#ume dua# ou mai# forma#+ e*i#tem o# on#trutore# 8ue permite iniiar um .alor dentro de um atributo ou hamar determinado metodo 8uando delarado <.1 ?rientao a o,2etoC Class Como dito ante# a# la##e# #2o a# e#trutura# u#ada# na orienta52o a ob3eto da lin4ua4em C+++ para #e riar uma la## 6 a me#ma oi#a 8ue riar uma e#trutura #trut delaramo# o tipo da e#trutura 8ue no a#o 6 la## #e4uida do nome e depoi# um e#opo e por fim um ponto e .ir4ula Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a bZ int main(.oid! a return ,Z b para in#taniar ou 4erar o ob3eto ba#ta oloar o nome da la## #e4uido do nome da in#tania Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a bZ int main(.oid! a eof ob3etoZ return ,Z b tambem poderiamo# in#taniar om ponteiro# Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a bZ int main(.oid! a eof dob3etoZ return ,Z b ou dinamiamente om o operador ne' e liberar om o operador delete Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a bZ int main(.oid! a eof dob3eto g ne' eof(!Z delete ob3etoZ return ,Z b <.2 ?rientao a o,2etoC ncapsulamento O enap#ulamento permite re#trin4ir determinado# ae##o dentro da la##e i##o permite manipular omo de.e #er ae##ado determinado# metodo# e atributo#+ em teoria nao prei#amo# #aber omo funiona internamente um omputador para poder u#alo o enap#ulamento permite fa)er i##o nao 6 nee##ario #aber omo a la## funiona para poder u#ala+ e*i#tem $ tipo# ae##o# na lin4ua4em C++ 8ue #2o o# publi+ pri.ate e proteted+ o# publi permite 8ual8uer ae##o onde a la## foi in#taniada ou herdada+ o# pri.ate permite ae##o apena# dentro da me#ma la##+ e o# proteted permite o ae##o dentro da me#ma la## e a# la## herdeira+ para definir o tipo de ae##o oloamo# o tipo de ae##o #e4uido de doi# ponto# (#e nao definimo# nenhum tipo o ompilador .ai definir o tipo padrao 8ue #eria o pri.ate! Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: bZ int main(.oid! a return ,Z b poderiamo# definir o# outro# tipo# dentro tambem Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: pri.ate: proteted: bZ int main(.oid! a return ,Z b n2o e*i#te uma ordem e nem um limite para o me#mo tipo Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a proteted: publi: pri.ate: proteted: publi: bZ int main(.oid! a return ,Z b o# atributo# e metodo# teram a permi##2o do ultimo tipo de ae##o ante# dele Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int ft#Z publi: int lolZ pri.ate: int hakZ bZ int main(.oid! a return ,Z b 8uando o tipo de ae##o 6 o me#mo 8ue o anterior nao prei#amo# definir o tipo de ae##o deno.o Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int ft#Z int lolZ pri.ate: int hakZ bZ int main(.oid! a return ,Z b para ae##ar atributo# 6 a me#ma oi#a 8ue a e#trutura #trut+ no a#o u#amo# ponto+ a#o #e3a ponteiro u#amo# h7fen e maior (>W! depoi# o atributo de#e3ado Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int ft#Z bZ int main(.oid! a eof aZ eof dbZ eof d g ne' eof(!Z a.ft# g $%&Z b>Wft# g %,,Z >Wft# g %&,Z out ]] a.ft# ]] endlZ out ]] b>Wft# ]] endlZ out ]] >Wft# ]] endlZ delete Z return ,Z b o# m6todo# tamb6m #2o i4uai# Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: .oid ft#(.oid! a out ]] ^alo te#tando+ te#tando %/$^Z b bZ int main(.oid! a eof hakZ hak.ft#(!Z return ,Z b podemo# riar m6todo# fora do e#opo da la##+ para fa)er i##o temo# 8ue oloar um prototipo dela dentro da la## e no m6todo temo# 8ue oloar o nome da la## 3unto om o nome do metodo #eparado por dua# .e)e# o ponto (::! Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: .oid ft#(.oid!Z bZ .oid eof::ft#(.oid! a out ]] ^alo te#tando+ te#tando %/$^Z b int main(.oid! a eof hakZ hak.ft#(!Z return ,Z b a maneira anterior .ai aloar a la## e o m6todo em parte# diferente na mem:ria ent2o n2o 6 muito reomendado fa)er i##o+ 6 po##7.el aloar o# doi# 3unto# me#mo #eparado# da8uela forma para i##o podemo# u#ar o inline Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: .oid ft#(.oid!Z bZ inline .oid eof::ft#(.oid! a out ]] ^alo te#tando+ te#tando %/$^Z b int main(.oid! a eof hakZ hak.ft#(!Z return ,Z b tamb6m podemo# riar uma la## dentro da la## Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: la## ft# a publi: int hakZ bZ bZ int main(.oid! a return ,Z b para ae##ar a #e4unda la## temo# 8ue in#taniar ela+ para i##o oloamo# a primeira la## #e4uida de doi# ponto# e a #e4unda la## Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: la## ft# a publi: int hakZ bZ bZ int main(.oid! a eof::ft# lolZ lol.hak g $%&Z out ]] lol.hakZ return ,Z b podemo# riar .aria# la## dentro da outra Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: la## ft# a publi: la## hak a publi: int .alorZ bZ bZ bZ int main(.oid! a eof::ft#::hak lolZ lol..alor g $%&Z out ]] lol..alorZ return ,Z b #e a 4ente oloar o identifiador friend ante# do metodo n2o prei#amo# in#taniar a la## para u#ar a8uele m6todo Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: friend .oid ft#(.oid! a out ]] ^a .ida e um al4oritimo in#ano U>U ^Z b bZ int main(.oid! a ft#(!Z return ,Z b ate a4ora a 4ente #: t; u#ando o ae##o publio .amo# u#ar o ae##o pri.ado um pouo+ a delara52o do# doi# #2o a# me#ma# omo dito ante#+ a diferen5a 8ue o ae##o publio pode #er u#ado em 8ual8uer parte do :di4o dei# de 8ue #e3a in#taniado+ 3; o pri.ado #: poder; #er u#ado dentro da pr:pria la##+ um e*emplo #eria riar um m6todo publio para entrar om o .alor e##e .alor #eria arma)enado dentro de um atributo pri.ado o me#mo m6todo anterior hamaria outro m6todo pri.ado 8ue faria uma onta e arma)enaria em um atributo publio+ em outra# pala.ra# a 4ente #: teria ae##o publio p entrada de dado# e o re#ultado e n2o ao proe##o da onta Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: .oid entrada(int .alor! a ft# g .alorZ 8uadrado(!Z b int re#ultadoZ pri.ate: int ft#Z .oid 8uadrado(.oid! a re#ultado g ft# d ft#Z b bZ int main(.oid! a eof ob3etoZ ob3eto.entrada(&!Z out ]] ob3eto.re#ultadoZ return ,Z b
no e*emplo aima n2o prei#amo# #aber omo a la## toda funiona a Qnia oi#a nee##;ria 6 u#o do m6todo JentradaK e do atributo Jre#ultadoK+ e*i#te tamb6m o# ae##o prote4ido 8ue .amo# .er mai# para frente em heran5a <.! ?rientao a o,2etoC Aerana " heran5a permite 8ue determinada la## reeba todo# o# atributo# e metodo# publio# e prote4ido# de uma outra la##+ i##o permite dei*ar o :di4o reutili);.el+ para herdar uma la## depoi# do nome dela oloamo# doi# ponto# (:! #e4uido do tipo de ae##o da8uela la## (maioria da# .e)e# 6 publio!+ e por fim o nome da la## da onde e#ta herdando o# metodo# e atributo#+ no e*emplo abai*o a la## ft# e#ta herdando o# m6todo# e atributo# da la## eof+ ou #e3a ele herdo apena# o m6todo hak Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int hak(int .alor! a return .alor d .alorZ b bZ la## ft#: publi eof a bZ int main(.oid! a return ,Z b para u#ar e me#ma oi#a 8ue ti.e##e riado e##e# m6todo# e atributo# dentro da la## Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int hak(int .alor! a return .alor d .alorZ b bZ la## ft#: publi eof a bZ int main(.oid! a ft# lolZ out ]] lol.hak($%&!Z return ,Z b no e*emplo aima eu in#taniei a la## ft# e u#ei o m6todo 8ue ele herdo+ o u#o de heran5a pode a4ili)ar ria52o de no.o# m6todo#+ por e*emplo o odi4o abai*o eu fa5o um no.o m6todo retornando o ubo do nQmero para i##o eu u#o o m6todo herdado Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int hak(int .alor! a return .alor d .alorZ b bZ la## ft#: publi eof a publi: int ubo(int numero! a return numero d hak(numero!Z b bZ int main(.oid! a ft# lolZ out ]] lol.ubo(&!Z return ,Z b podemo# herdar mai# de uma la## para i##o ba#ta #eparar por .7r4ula Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int hak(int .alor! a return .alor d .alorZ b bZ la## matematia a publi: float piZ bZ la## ft#: publi eof+ publi matematia a bZ int main(.oid! a ft# lolZ lol.pi g $.%E%&Z out ]] lol.piZ return ,Z b 8uando uma la## herda dua# ou mai# la## e e##a# la## tem um metodo ou atributo om o me#mo nome i##o pode 4erar ambi4uidade no odi4o e pode da erro+ para e.itar de.emo# e#peifiar o nome da la## #e4uido de dua# .e)e# doi# ponto# (::! e o atributo ou metodo Oinlude ]io#treamW u#in4 name#pae #tdZ la## ft# a publi: int .alorZ bZ la## eof a publi: int .alorZ bZ la## hak: publi ft#+ publi eof a publi: bZ int main(.oid! a hak lolZ lol.ft#::.alor g $%&Z lol.eof::.alor g %,,Z out ]] lol.ft#::.alor ]] endlZ out ]] lol.eof::.alor ]] endlZ return ,Z b tamb6m podemo# endere5ar um la## herdada para i##o ba#ta 4erar o ob3eto da# la## herdada e atribuir o outro ob3eto 8ue herdo ela# Oinlude ]io#treamW u#in4 name#pae #tdZ la## ft# a publi: int .alorZ bZ la## eof a publi: int .alorZ bZ la## hak: publi ft#+ publi eof a publi: bZ int main(.oid! a hak lolZ ft# herana% g lolZ eof herana/ g lolZ herana%..alor g $%&Z herana/..alor g %,,Z out ]] herana%..alor ]] endlZ out ]] herana/..alor ]] endlZ return ,Z b omo dito o tipo de ae##o prote4ido ou proteted pode #er ae##ado apena# pela me#ma la## ou pela# la## herdada+ no e*emplo abai*o eu n2o poderia u#ar diretamente o metodo hak embora eu poderia herdar ele e riar um metodo publio para hamar ele Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a proteted: int hak(int .alor! a return .alor d .alorZ b bZ la## ft#: publi eof a publi: int fla.io(int *! a return hak(*!Z b bZ int main(.oid! a ft# fZ out ]] f.fla.io($%&!Z return ,Z b <.- ?rientao a o,2etoC Construtores O# on#trutore# permite iniiar .alore# no# atributo# ou hamar metodo# a##im 8ue o ob3eto for in#taniado para #e riar um on#trutor ba#ta riar um metodo #em tipo de retorno om o me#mo nome da la## Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: eof(.oid! a b bZ int main(.oid! a eof lolZ return ,Z b e dentro do on#trutor atribu7mo# o# .alore# ao# atributo# Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: eof(.oid! a ft# g $%&Z b int ft#Z bZ int main(.oid! a eof lolZ out ]] lol.ft#Z return ,Z b tamb6m 6 po##7.el hamar m6todo# pelo on#trutor Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: eof(.oid! a ft#(!Z b .oid ft#(.oid! a out ]] ^boku 'a ft# de#u^Z b bZ int main(.oid! a eof lolZ return ,Z b podemo# pa##ar .alore# pelo on#trutor a##im 8ue in#taniar Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: eof(int *! a ft# g *Z b int ft#Z bZ int main(.oid! a eof lol($%&!Z out ]] lol.ft#Z return ,Z b tamb6m e*i#tem o# de#trutore# 8ue #2o hamado# 8uando o ob3eto for de#tru7do+ para riar um de#trutor riamo# um m6todo om o me#mo nome da la## i4ual ao on#trutor por6m oloamo# um til (`! ante# do nome Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: eof(! a on#truido(!Z b `eof(! a de#truido(!Z b .oid on#truido(.oid! a out ]] ^foi on#truido mm ^ ]] endlZ b .oid de#truido(.oid! a out ]] ^foi de#truido U>U ^ ]] endlZ b bZ int main(.oid! a eof dft# g ne' eof(!Z delete ft#Z return ,Z b <.7 ?rientao a o,2etoC 8olimor"ismo ?olimorfi#mo 6 8uando determinado ob3eto+ metodo+ atributo+ e.ento ou 8ual8uer outra oi#a a##ume dua# ou mai# forma#+ na lin4ua4em C++ o# ob3eto polim:rfio 6 u#ado o identifiador .irtual+ um do# metodo# .irtual 6 fa)er 8ue determinado metodo a ada heran5a ele fa5a a52o diferente+ para fa)er i##o delaramo# ele omo .irtual na la##+ e depoi# reriamo# o prototipo dele na# la## 8ue herdar Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: .irtual .oid lol(.oid! a b bZ la## ft#: publi eof a publi: .irtual .oid lol(.oid! a out ]] ^la## ft#^ ]] endlZ b bZ la## hak: publi eof a publi: .irtual .oid lol(.oid! a out ]] ^la## hak^ ]] endlZ b bZ la## fbi: publi hak+ publi ft# a publi: bZ int main(.oid! a fbi ob3etoZ ob3eto.hak::lol(!Z ob3eto.ft#::lol(!Z return ,Z b tambem 6 po##7.el oloar ae##o .irtual para uma la## herdada+ a##im toda# a# la## ae##ara a me#ma #em 4era ambi4uidade no :di4o Oinlude ]io#treamW u#in4 name#pae #tdZ la## eof a publi: int .alorZ bZ la## ft#: .irtual publi eof a publi: bZ la## hak: .irtual publi eof a publi: bZ la## lol: publi hak+ publi ft# a publi: bZ int main(.oid! a lol ob3etoZ ob3eto..alor g $%&Z out ]] ob3eto..alor ]] endlZ out ]] ob3eto.hak::.alor ]] endlZ out ]] ob3eto.ft#::.alor ]] endlZ return ,Z b uma e#trutura polimorfia 6 o union 8ue permite ter mai# de um tipo para o me#mo endere5o de memoria (embora #: po##a a##umir um .alor por .e)! Oinlude ]io#treamW u#in4 name#pae #tdZ union eof a int inteiroZ float 8uebradoZ bZ int main(.oid! a eof ft#Z ft#.inteiro g $%&Z out ]] ft#.inteiro ]] endlZ ft#.8uebrado g $.%&Z out ]] ft#.8uebrado ]] endlZ return ,Z b D.0 E8I &indo's <ma "?I 6 uma fun52o ou proedimento de determinada plataforma 8ue #: funiona para a8uela plataforma e nenhuma outra+ uma "?I 6 uma fun52o do pr:prio #i#tema operaional e n2o da lin4ua4em ou de uma bibliotea da lin4ua4em+ o #i#tema operaional 'indo'# e*i#tem milhare# de "?I# omo por e*emplo mo.imento do mou#e+ apertar de botao ou #imple#mente #imular aperta de bot2o+ de#li4ar ou li4ar #i#tema# e dri.e#+ manipular o editor de re4i#tro+ ae##ar tipo# ar8ui.o# 8ue #: e*item no #i#tema 'indo'#+ e*eutar pro4rama#+ manipular a memoria+ riar e deletar u#uario ou ar8ui.o#+ intera4ir om hard'are entre outra# milhare# de oi#a# 8ue #: 6 po##7.el no #i#tema 'indo'#+ boa parte da# "?I# do #i#tema 'indo'# fia dentro de ar8ui.o# hamado# DLL e #e faltar uma de##a# DLL o #i#tema operaional n2o podera e*eutar determinada# tarefa#+ e boa parte da# "?I do 'indo'# pode terminar om a letra " indiando "CC ou a letra A indiando <NICODE por e*emplo CopMFile" ou CopMFileA+ para u#ar boa parte da# "?I na lin4ua4em C/C++ temo# 8ue delarar a bibliotea J'indo'#.hK e##a bibliotea hama outra# bibliotea# 8ue ae##a a# DLL de forma fail+ omo dito ante# no #i#tema operaional 'indo'# e*i#tem milhare# de "?I# n2o 6 po##7.el eu oloar toda# a8ui me#mo por 8ue #: onhe5o um numero bem limitado de "?I+ a primeira "?I 8ue .amo# .er .ai #er a CopMFile da bibliotea 'indo'#.h 8ue permite opiar determinado ar8ui.o para outro diretorio+ ne##a "?I pa##amo# omo ar4umento o ar8ui.o a #er opiado e o de#tino tambem e*i#te um outro ar4umento 8ue #eria uma hea4em #e .ai opiar o ar8ui.o a#o e*i#ta ou n2o ne##e ar4umento u#amo# a on#tante @N<E ou F"LCE da bibliotea 'indo'#.h (no e*emplo abai*o eu to oloando apena# o nome da pa#ta+ ou #e3a+ e##a pa#ta e#ta no me#mo diret:rio do e*eut;.el por6m eu tambem poderia oloar o endere5o ompleto! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a CopMFile"(^ft#.t*t^+^ar8ui.oVVft#.t*t^+F"LCE!Z return ,Z b tambem e*i#te o tipo DOOL da bibliotea 'indo'#.h+ e a# on#tante @N<E e F"LCE 8ue #eria e8ui.alente a bibliotea #tdbool.h Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a DOOL .erdadeiro g @N<EZ DOOL fal#o g F"LCEZ printf(^. g hd Vnf g hd^+.erdadeiro+fal#o!Z return ,Z b
alem da "?I CopMFile e*i#te a "?I Bo.eFile 8ue mo.e o ar8ui.o+ para u#ar e##a "?I pa##amo# omo ar4umento o ar8ui.o a #er opiado e o de#tino Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a Bo.eFile"(^ft#.t*t^+^ar8ui.oVVft#.t*t^!Z return ,Z b e*i#te "?I DeleteFile 8ue remo.e o ar8ui.o+ o ar4umento dela 6 o ar8ui.o a #er deletado Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a DeleteFile"(^ft#.t*t^!Z return ,Z b om a "?I Nemo.eDiretorM podemo# remo.er um diret:rio+ o# ar4umento# dela 6 o diret:rio a #er remo.ido Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a Nemo.eDiretorM"(^ar8ui.o^!Z return ,Z b e*i#te "?I CreateDiretorM 8ue ria um diret:rio+ o# ar4umento# dela #2o o nome do diret:rio e o tipo de atributo de #e4uran5a (n2o .ou me aprofundar ni##o ent2o podemo# oloar um , nele! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a CreateDiretorM"(^ar8ui.o^+,!Z return ,Z b om a "?I (etCurrentDiretorM retornamo# o diret:rio atual+ nele pa##amo# omo ar4umento o tamanho da arraM onde #er; arma)enado e a arraM do tipo har Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a har ft#[%,,\Z (etCurrentDiretorM"(%,,+ft#!Z printf(^h#^+ft#!Z return ,Z b para mudar o diret:rio atual u#amo# a "?I CetCurrentDiretorM e pa##amo# omo ar4umento o diret:rio Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a har ft#[%,,\Z CetCurrentDiretorM"(^:VV^!Z (etCurrentDiretorM"(%,,+ft#!Z printf(^h#^+ft#!Z return ,Z b para a 4ente e*eutar um pro4rama ou abrir um diretorio ou ar8ui.o podemo# u#ar "?I ChellE*eute pa##amo# omo ar4umento o handle para 3anela (n2o .amo# u#ar i##o por en8uanto ent2o oloamo# ,!+ pa##amo# omo ar4umento de tipo de ae##o (open g e*euta+ e*plore g abri a#o #e3a diret:rio+ e*i#tem outro# al6m de##e# doi#!+ o nome do ar8ui.o ou diret:rio+ o ar4umento do ar8ui.o (e##e ar4umento #2o para a8uele# pro4rama de omando!+ o diretorio orrente (podemo# oloar , a#o definimo# o endere5o ompleto do ar8ui.o!+ e omo ele #era hamado (CAiCIOA g normal+ CAiIIDE g oulto+ CAiB"eIBInE g ma*imi)ado+ CAiBINIBInE g minimi)ado! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a ChellE*eute"(,+^open^+^:VV'indo'#VV#M#tem$/VVmd.e*e^+^/ dir YY pau#e^+,+CAiCIOA!Z return ,Z b a4ora u#ando o ChellE*eute para abrir uma pa#ta Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a ChellE*eute"(,+^e*plore^+^:VV^+,+,+CAiCIOA!Z return ,Z b tamb6m 6 po##7.el e*eutar pro4rama# om a fun52o AinE*e nele pa##amo# omo ar4umento omando a #er e*eutado e ontrole da 3anela (n2o .ou me aprofundar ni##o por en8uanto ent2o oloamo# ,! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a AinE*e(^:VV'indo'#VV#M#tem$/VVmd.e*e / dir YY pau#e^+,!Z return ,Z b para mudar o t7tulo da 3anela do on#ole u#amo# a "?I CetCon#ole@itle e pa##amo# omo ar4umento o no.o t7tulo+ por6m e##a "?I #: .ai mudar o t7tulo en8uanto o pro4rama e#ti.er rodando Oinlude ]#tdio.hW Oinlude ]onio.hW Oinlude ]'indo'#.hW int main(.oid! a CetCon#ole@itle(^forum eof^!Z 4eth(!Z return ,Z b para mudar a or do terminal tanto o te*to (fore4round! 8uanto o fundo (bak4round!+ temo# 8ue pe4ar o handle da 3anela para i##o u#amo# a "?I (etCtdIandle pa##amo# omo ar4umento para ela a on#tante C@DiO<@?<@iI"NDLE e atribu7mo# a fun52o para uma .ari;.el do tipo I"NDLE+ para terminar u#amo# a "?I CetCon#ole@e*t"ttribute para mudar a or+ pa##amo# omo ar4umento para ela a .ari;.el do tipo I"NDLE e um nQmero em he*adeimal de ,*,, ate ,*ff (o primeiro nQmero muda a or do fundo e o #e4undo muda a or do te*to+ e*emplo ,*GE o nQmero G .ai oloa o fundo amarelo e o E a or do te*to .ermelha! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a I"NDLE ft#Z ft# g (etCtdIandle(C@DiO<@?<@iI"NDLE!Z printf(^te*to om a or padrao do terminal^!Z CetCon#ole@e*t"ttribute(ft#+,*,/!Z printf(^fundo preto or .erde^!Z CetCon#ole@e*t"ttribute(ft#+,*f&!Z printf(^fundo brano or ro*o^!Z CetCon#ole@e*t"ttribute(ft#+,*GE!Z printf(^fundo amarelo or .ermelho^!Z return ,Z b podemo# mudar a po#i52o do ur#or do terminal tambem u#ando a "?I CetCon#oleCur#or?o#ition+ ne##a fun52o pa##amo# omo ar4umento o handle da 3anela 8ue no a#o teria 8ue u#ar a "?I (etCtdIandle para on#e4uir+ e uma e#trutura iCOOND om a po#i52o e e _ Oinlude ]#tdio.hW Oinlude ]'indo'#.hW int main(.oid! a #trut iCOOND eofZ I"NDLE ft#Z eof.e g $Z eof._ g &Z ft# g (etCtdIandle(C@DiO<@?<@iI"NDLE!Z CetCon#oleCur#or?o#ition(ft#+eof!Z return ,Z b para riar uma thread (#ubproe##o! u#amo# a "?I Create@hread+ nele pa##amo# omo ar4umento o atributo de #e4uran5a (.amo# oloar , a8ui!+ o tamanho do #tak (tambem .amo# oloar um ,!+ a fun52o 8ue #era hamada no thread (temo# 8ue u#ar tMpea#t para L?@INE"DiC@"N@iNO<@INE!+ o ar4umento da fun52o (podemo# oloar ,!+ omo #era iniiado a thread (podemo# oloar , para iniiar a##im 8ue u#ar fun52o ou u#ar CNE"@EiC<C?ENDED para ome5ar a thread pau#ado!+ e o Qltimo ar4umento 6 o endere5o de mem:ria de uma .ari;.el do tipo DAOND 8ue #eria o pid da thread+ para finali)ar atribuimo# a fun52o para uma .ari;.el do tipo I"NDLE para poder manipular mai# tarde Oinlude ]#tdio.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a printf(^proe##o filhoVn^!Z b int main(.oid! a DAOND pidZ I"NDLE filhoZ printf(^proe##o paiVn^!Z filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z return ,Z b para e.itar 8ue o thread pai #e finali)e ante# do filho podemo# u#ar a "?I AaitForCin4leOb3et no final do odi4o+ nela pa##amo# omo ar4umento a .aria.el do tipo I"NDLE e a on#tante INFINI@E ou tempo em mil6#imo# Oinlude ]#tdio.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a printf(^proe##o filhoVn^!Z b int main(.oid! a DAOND pidZ I"NDLE filhoZ printf(^proe##o paiVn^!Z filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z AaitForCin4leOb3et(filho+INFINI@E!Z return ,Z b ?odemo# iniiar a thread pau#ada u#ando a on#tante CNE"@EiC<C?ENDED+ e podemo# iniiar om a "?I Ne#ume@hread nela pa##amo# omo ar4umento a .aria.el I"NDLE Oinlude ]#tdio.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a printf(^proe##o filhoVn^!Z b int main(.oid! a DAOND pidZ I"NDLE filhoZ printf(^proe##o paiVn^!Z filho g Create@hread(,+,+ (L?@INE"DiC@"N@iNO<@INE!ft#+,+CNE"@EiC<C?ENDED+Ypid!Z Ne#ume@hread(filho!Z AaitForCin4leOb3et(filho+INFINI@E!Z return ,Z b tamb6m poder7amo# pau#ar uma thread om a "?I Cu#pend@hread+ para u#ar ela ba#ta pa##ar omo ar4umento a .aria.el I"NDLE da thread Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a 'hile(%! a printf(^loop infinito W.] ^!Z b b int main(.oid! a DAOND pidZ I"NDLE filhoZ filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z #leep(/,,,!Z Cu#pend@hread(filho!Z AaitForCin4leOb3et(filho+INFINI@E!Z return ,Z b para finali)ar uma thread podemo# u#ar E*it@hread dentro dela e pa##amo# omo ar4umento o retorno Oinlude ]#tdio.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a int eof g ,Z 'hile(%! a if(eof Wg %,! a E*it@hread(,!Z b printf(^loop g hd^+eof!Z eof++Z b b int main(.oid! a DAOND pidZ I"NDLE filhoZ filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z AaitForCin4leOb3et(filho+INFINI@E!Z return ,Z b poder7amo# finali)ar a thread filho pela thread pai om a fun52o @erminate@hread nela pa##amo# omo ar4umento o handle da thread #e4uido do .alor de retorno Oinlude ]#tdio.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a 'hile(%! a printf(^loop infinito W.] ^!Z b b int main(.oid! a DAOND pidZ I"NDLE filhoZ filho g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z @erminate@hread(filho+,!Z AaitForCin4leOb3et(filho+INFINI@E!Z return ,Z b om a "?I (etCurrent@hread ela retorna o handle da thread atual Oinlude ]#tdio.hW Oinlude ]'indo'#.hW I"NDLE filhoZ .oid ft#(.oid! a filho g (etCurrent@hread(!Z b int main(.oid! a DAOND pidZ Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid!Z @erminate@hread(filho+,!Z AaitForCin4leOb3et(filho+INFINI@E!Z return ,Z b 8uando temo# mai# de uma thread u#ar a "?I AaitForCin4leOb3et n2o funionaria muito bem ent2o temo# 8ue u#ar a "?I AaitForBultipleOb3et#+ o u#o de##a a "?I 6 um pouo diferente da outra por6m #eu ob3eti.o 6 o me#mo+ na# .aria.ei# I"NDLE e DAOND riamo# uma arraM para arma)enar amba# thread#+ e na "?I AaitForBultipleOb3et# pa##amo# omo ar4umento a 8uantidade de thread#+ a arraM om a handle da# thread#+ @N<E ou F"LCE para e#perar toda# a# thread# finali)ar para ontinuar+ e o tempo de e#pera (podemo# u#ar a on#tante INFINI@E! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW .oid ft#(.oid! a printf(^thread ft#Vn^!Z b .oid hak(.oid! a printf(^thread hakVn^!Z b int main(.oid! a I"NDLE filho[%,\Z DAOND pid[%,\Z filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z return ,Z b no :di4o aima podemo# .er 8ue amba# a# thread# .ai mo#tra al4o na tela porem #e amba# thread# tentar mo#tra al4o na tela ao me#mo tempo i##o .ai impedir 8ue uma mo#tre (i##o 6 bu4 muito omum onheido omo deadlok!+ para e.ita i##o podemo# u#ar mute* 8ue .ai dei*ar apena# um e.ento por .e) parando o# demai#+ para a 4ente riar um mute* temo# 8ue riar uma .aria.el do tipo I"NDLE para atribuir ele e u#ar a "?I CreateBute*+ pa##amo# omo ar4umento para e##a api o atributo de #e4uran5a (podemo# oloar ,!+ @N<E ou F"LCE para ome5ar om mute* parado+ 6 o nome (podemo# oloar , tambem!+ e no ome5o de ada thread u#amo# a "?I AaitForCin4leOb3et pa##amo# omo ar4umento o handle do mute* e on#tante INFINI@E i##o .ai pau#ar o# demai# e.ento#+ e no final da thread oloamo# a "?I Nelea#eBute* om o ar4umento handle do mute* i##o .ai ontinuar o e.ento Oinlude ]#tdio.hW Oinlude ]'indo'#.hW I"NDLE eofZ .oid ft#(.oid! a AaitForCin4leOb3et(eof+INFINI@E!Z printf(^thread ft#Vn^!Z Nelea#eBute*(eof!Z b .oid hak(.oid! a AaitForCin4leOb3et(eof+INFINI@E!Z printf(^thread hakVn^!Z Nelea#eBute*(eof!Z b int main(.oid! a I"NDLE filho[%,\Z DAOND pid[%,\Z eof g CreateBute*(,+F"LCE+,!Z filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z return ,Z b a#o iniiamo# o .alor @N<E em CreateBute* podemo# iniar om a pr:pria "?I Nelea#eBute* Oinlude ]#tdio.hW Oinlude ]'indo'#.hW I"NDLE eofZ .oid ft#(.oid! a AaitForCin4leOb3et(eof+INFINI@E!Z printf(^thread ft#Vn^!Z Nelea#eBute*(eof!Z b .oid hak(.oid! a AaitForCin4leOb3et(eof+INFINI@E!Z printf(^thread hakVn^!Z Nelea#eBute*(eof!Z b int main(.oid! a I"NDLE filho[%,\Z DAOND pid[%,\Z eof g CreateBute*(,+@N<E+,!Z Nelea#eBute*(eof!Z filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z return ,Z b al6m do mute* podemo# u#ar #em;foro# 8ue #eria uma forma mai# or4ani)ada de e*euta thread# e.itando deadlok+ diferente do mute* 8ue 6 a primeira thread a #er e*eutada pau#a a# demai# o #em;foro #e4ue uma ordem num6ria 8ue 6 inrementada ou derementado a ada final a##im e*eutando a outra thread+ todo #em;foro tem um nQmero iniial 8ue ome5a no , e o numero final (8uando he4a no nQmero final .olta para o nQmero iniial e ome5a a ordem de no.o e apena# e*euta 8uantidade de thread# e8ui.alente ao nQmero final!+ para riar um #em;foro u#amo# a "?I CreateCemaphore pa##amo# omo ar4umento o atributo de #e4unra5a (oloamo# ,!+ o numero ma*imo do ontado para iniiar+ o nQmero ma*imo de thread# no #emaforo+ e o nome (i##o opional pode oloar , a8ui tamb6m! e atribuimo# para uma .aria.el do tipo I"NDLE+ dentro de ada thread u#amo# o AaitForCin4leOb3et pa##amo# omo ar4umento para ele o handle do #emaforo e a on#tante INFINI@E+ e no final dele u#amo# a "?I Nelea#eCemaphore+ o# ar4umento# dela #2o+ handle do #emaforo+ a 8uantidade de inremento+ a Qltima po#i52o (i##o 6 opional podemo# oloar um ,! Oinlude ]#tdio.hW Oinlude ]'indo'#.hW I"NDLE eofZ .oid ft#(.oid! a AaitForCin4leOb3et(eof+INFINI@E!Z printf(^thread ft#Vn^!Z Nelea#eCemaphore(eof+%+,!Z b .oid hak(.oid! a AaitForCin4leOb3et(eof+INFINI@E!Z printf(^thread hakVn^!Z Nelea#eCemaphore(eof+%+,!Z b int main(.oid! a I"NDLE filho[%,\Z DAOND pid[%,\Z eof g CreateCemaphore(,+/+/+,!Z Nelea#eBute*(eof!Z filho[,\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!ft#+,+,+Ypid[,\!Z filho[%\ g Create@hread(,+,+(L?@INE"DiC@"N@iNO<@INE!hak+,+,+Ypid[%\!Z AaitForBultipleOb3et#(/+filho+@N<E+INFINI@E!Z return ,Z b D.1 E8I Linu( O #i#tema linu* tem mai# "?I# do 8ue o #i#tema 'indo'# i##o de.ido o kernel do linu* #er todo feito pela lin4ua4em C e o linu* 6 open#oure (todo# podem u#ar+ modifiar e di#tribuir da maneira 8ue de#e3ar! diferente do 'indo'#+ a# "?I# do 'indo'# e#t2o em DLL# no linu* e#tao em bibliotea header ou lib do pr:prio #i#tema+ no linu* .oL pode manipular ate o kernel diferente do 'indo'# 8ue .oL u#a #uperfiialmente+ 8uando in#tala al4un# pro4rama# no linu* o#tuma in#talar tamb6m no.a# bibliotea# no #i#tema operaional i##o permite no.a# "?I# para brinar+ a primeira "?I 8ue .amo# .er para o #i#tema linu* #er; o mkdir para riar diretorio nele pa##amo# omo ar4umento o nome do diret:rio 8ue #era riado Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a mkdir(^hft#$%&^!Z return ,Z b para remo.er diretorio podemo# u#ar a "?I rmdir pa##amo# omo ar4umento o diretorio Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a rmdir(^hft#$%&^!Z return ,Z b para riar um ar8ui.o podemo# u#ar a "?I reat pa##amo# omo ar4umento o nome do ar8ui.o Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a reat(^ft#.t*t^!Z return ,Z b podemo# u#ar "?I ae## para .er o tipo de ae##o de um ar8ui.o em uma ondi52o if+ o# ar4umento# da "?I 6 o ar8ui.o e tipo 8ue poderia #er a# on#tante# NiOR para leitura+ AiOR para e#rita+ eiOR para e*eu52o+ e FiOR para .er #e o ar8ui.o e*i#te Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a if(ae##(^ft#.t*t^+FiOR!! a reat(^ft#.t*t^!Z b return ,Z b para riar um hard link de um ar8ui.o ou diretorio u#amo# a "?I link #e4uida do ar8ui.o da onde #era riado e o nome do link Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a link(^ft#.t*t^+^link.t*t^!Z return ,Z b para riar um link #imb:lio u#amo# a "?I #Mmlink o u#o dela 6 o me#mo 8ue anterior+ a diferen5a entre o# doi# 8ue o hard link 4era um ar8ui.o apontando para o me#mo inode ent2o me#mo #e apa4ar um do# ar8ui.o ainda fia la+ 3; o link #imb:lio #2o pareido om o# do 'indo'# ou #e3a #e apa4ar o ar8ui.o o link fia 8uebrado Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a #Mmlink(^ft#.t*t^+^link.t*t^!Z return ,Z b podemo# u#ar "?I 4et'd para .er o diret:rio atual+ pa##amo# omo ar4umento uma arraM do tipo har e o tamanho dela Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a har hak[$,,\Z 4et'd(hak+$,,!Z printf(^h#^+hak!Z return ,Z b podemo# riar um #ubproe##o om a "?I fork+ ela n2o tem ar4umento# apena# atribuir ela para uma .ari;.el do tipo pidit Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a pidit ft# g fork(!Z return ,Z b a4ora u#amo# um ondi52o if e omparamo# a8uela .ari;.el om o .alor ,+ dentro da e#trutura if oloamo# a# fun59e# 8ue #er2o e*eutada pelo proe##o filho (a odin52o if de.e #er riada depoi# do fork por8ue #e n2o tanto o proe##o pai 8uanto filha .2o e*eutar o# :di4o# dua# ou mai# .e)e#! Oinlude ]#tdio.hW Oinlude ]uni#td.hW int main(.oid! a pidit ft# g fork(!Z if(ft# gg ,! a printf(^proe##o filhoVn^!Z b return ,Z b para e.itar 8ue o proe##o filho e*eute fora do e#opo u#amo# a fun52o e*it da bibliotea #tdlib.h para finali);>lo Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]uni#td.hW int main(.oid! a pidit ft# g fork(!Z if(ft# gg ,! a printf(^proe##o filhoVn^!Z e*it(,!Z b printf(^proe##o paiVn^!Z return ,Z b podemo# u#ar a "?I 4etpid para pe4ar o pid atual Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]uni#td.hW int main(.oid! a pidit ft# g fork(!Z if(ft# gg ,! a printf(^proe##o filho: hd Vn^+4etpid(!!Z e*it(,!Z b printf(^proe##o pai: hd Vn^+4etpid(!!Z return ,Z b ?odemo# u#ar "?I kill da bibliotea #i4nal.h para finali)ar determinado proe##o ou #ubproe##o+ o# ar4umento# dela #2o o pid #e4uido do #i4nal ode Oinlude ]#tdio.hW Oinlude ]#tdlib.hW Oinlude ]uni#td.hW Oinlude ]#i4nal.hW int main(.oid! a pidit ft# g fork(!Z if(ft# gg ,! a pidit hak g 4etpid(!Z printf(^proe##o filho: hd Vn^+hak!Z kill(hak+1!Z b printf(^proe##o pai: hd Vn^+4etpid(!!Z return ,Z b D.! E8I *ocBet /&indo's e Linu(0 O u#o de #oket# permite doi# ou mai# omputadore# #e omuni8uem tanto em rede loal uma lan ou uma rede remoto a internet+ o #i#tema linu* foi riado para #er u#ado em rede dei# do iniio 3; o #i#tema 'indo'# #: depoi# do 'indo'# 1& ent2o o linu* 8uando #e trata de rede 6 mil .e)e# melhor 8ue o #i#tema 'indo'# e tamb6m mai# r;pido+ a omunia52o entre dua# ma8uina# 6 u#ado di.er#o# protoolo# para intera4ir de maneira orreta entre ela# (e todo# o# demai# protoolo# #e4ue um Qnio padrao ou ar8uitetura 8ue nada mai# nada meno# 8ue um protoolo para o# outro# protoolo U>U !+ o# #oket# #2o um meio de omunia52o entre uma one*2o e e*i#tem pelo meno# doi# #oket# em uma one*2o+ 8ue #eria o #oket #er.idor e o #oket liente+ ambo# o# #oket# #2o onfi4urado para ambo# #oket# #2o onfi4urado para aeitar ou onetar a determinado I? ou porta (o ip nada mai# 6 8ue um protoolo de endere5amento!+ o #oket #er.idor .ai fiar e#perando uma one*2o em determinado porta e #oket liente .ai #er onetar ao I? da ma8uina na8uela porta #e a one*ao for um #ue##o amba# a# ma8uina poder2o #e omuniar (independente #e a ma8uina 6 o liente ou #er.idor poder; en.iar e reeber dado#+ embora omo e##e# dado# 6 proe##ado em ambo# #oket# i##o depende da onfi4ura52o e da pro4rama52o do liente e #er.idor!+ no 'indo'# 6 nee##ario iniiar um #er.i5o hamado AC" para poder u#ar #oket e tamb6m de.e inluir a lib '#ok$/ para ompilar e a# bibliotea para u#ar #oket na lin4ua4em /++ 6 o J'in#ok.hK e J'in#ok/.hK (reomendo u#ar 'in#ok/.h #e #eu 'indo'# for aima do 1H!+ 3; no #i#tema linu* n2o 6 nee##ario inluir nenhuma lib ou iniiar #er.i5o porem o u#o de bibliotea e bem e*ten#o #endo ela# J#M#/#oket.hK+ J#M#/tMpe#.hK+ Jnetdb.hK+ Jarpa/inet.hK+ Jnetinet/in.hK entre outra#+ para iniiar o #er.i5o AC" no 'indo'# riamo# uma .aria.el do tipo AC"D"@" e DAOND+ na .aria.el DAOND atribuimo# uma "?I 8ue #eria o B"REAOND da bibliotea 'indo'#.h ne##a api pa##amo# omo ar4umento / e , (i##o #eria a .er#ao!+ por fim u#amo# a "?I AC"Ctartup pa##amo# omo ar4umento para ela a .aria.el DAOND e o endere5o de memoria da .aria.el AC"D"@" Oinlude ]#tdio.hW Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW int main(.oid! a AC"D"@" #er.ioZ DAOND .er#ao g B"REAOND(/+,!Z AC"Ctartup(.er#ao+Y#er.io!Z return ,Z b #: lembrando para opilar no 'indo'# 6 nee##;rio delarar a lib '#ok$/ C:V<#er#Vft#$%&VDe#ktopW 4 ft#. >o hak >l '#ok$/ omo dito ante# a maioria da# "?I de #oket# do #i#tema 'indo'# e#ta na bibliotea 'in#ok/.h no linu* e#ta em .aria# bibliotea# para n2o oorrer onflito e para o :di4o fiar ae##7.el para o# doi# #i#tema# operaionai# reomendo u#ar a direti.a Oifdef Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif return ,Z b a4ora riamo# o #oket om a "?I #oket (e##a "?I e#ta na bibliotea #M#/#oket.h no linu*!+ pa##amo# omo ar4umento para ela a ar8uitetura ou familM do #oket 8ue no a#o u#aremo# "FiINE@ (e*i#tem outra# porem e##a 6 a mai# u#ada atualmente!+ o tipo de #oket (COCRiC@NE"B u#ado para tp+ COCRiD(N"B u#ado para udp e COCRiN"A!+ e por fim o protoolo 8ue podemo# u#ar al4uma# on#tante# #: temo# 8ue delarar a bibliotea netdb.h no linu* para i##o (I??NO@Oi@C? para protoolo tp+ I??NO@Oi<D? para protoolo udp+ I??NO@OiICB? para protoolo imp entre outro#!+ tamb6m atribu7mo# a "?I para uma .aria.el do tipo int Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z Oifdef AIN$/ Oendif return ,Z b podemo# fehar um #oket om a "?I lo#e#oket do 'indo'# ou a "?I lo#e no linu* (no a#o tambem olo8uei uma direti.a Oifdef Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b a4ora .em a parte 8ue onfi4uramo# o #oket para #er #er.idor ou liente+ no a#o do liente e nee##ario u#ar a "?I onnet e a #trut #okaddriin para onfi4urar o ip e porta onde .ai #e onetar+ no a#o do #er.idor 6 nee##ario u#ar a "?I bind+ li#ten e aept e dua# e#trutra# #okaddriin e mai# dua# .aria.ei# do tipo int+ primeiro .amo# aprender a fa)er o liente de.ido ele #er o mai# fail+ para ome5ar riamo# a e#trutura #okaddriin onde .amo# onfi4urar o ip e a porta onde ele .ai #e onetar+ no atributo do #okaddriin oloamo# #inifamilM e a me#ma ar8uitetura do #oket+ em #iniaddr.#iaddr u#amo# a "?I inetiaddr e pa##amo# omo ar4umento para ela o ip da ma8uina onde .ai onetar+ e por #iniport atribumo# a "?I hton# e pa##amo# o numero da porta Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ #trut #okaddriin remotoZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z remoto.#inifamilM g "FiINE@Z remoto.#iniaddr.#iaddr g inetiaddr(^%/0.,.,.%^!Z remoto.#iniport g hton#(H,!Z Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b a4ora u#amo# a "?I onnet para onetar+ pa##amo# omo ar4umento para ela a .aria.el 8ue tem o #oket+ o endere5o de memoria da #trut om o ip onde .ai #e onetar (tambem de.e u#ar tMpea#t para J#trut #okaddr dK !+ e o tamanho da #trut om o ip onde .ai #e onetar (u#amo# a fun52o #i)eof!+ pronto #e der tudo erto ele #e onetaria na8uele ip e porta Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ #trut #okaddriin remotoZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z remoto.#inifamilM g "FiINE@Z remoto.#iniaddr.#iaddr g inetiaddr(^%/0.,.,.%^!Z remoto.#iniport g hton#(H,!Z onnet(#ok+(#trut #okaddr d!Yremoto+#i)eof(remoto!!Z Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b depoi# de onetado 6 #: en.iar ou reeber o# dado# om a "?I #end para en.iar e a "?I re. para reeber+ o# ar4umento# de amba# a# "?I# #2o o #oket+ a arraM do tipo har 8ue .ai #er en.iado ou #era arma)enada+ o tamanho do dado en.iado ou reebido+ e a fla4 8ue podemo# oloar ,+ o# dado# en.iado ou reebido depende do #er.idor e a 8uantidade de dado# en.iado ou reebido om uma ordem ou #e o #er.idor e liente fia pre#o em um loop infinito e#perando no.o# men#a4em para en.iar ou reeber i##o depende do #er.idor e utilidade dele+ um e*emplo o# #er.idore# http #e reeber uma re8ui#i52o do tipo J4et / http/VnVnK ele# en.ia a pa4ina html Oinlude ]#tdio.hW Oinlude ]#trin4.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ #trut #okaddriin remotoZ har ft#[$\Z har dado[\ g ^4et / http/VnVn^Z Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z remoto.#inifamilM g "FiINE@Z remoto.#iniaddr.#iaddr g inetiaddr(^%/0.,.,.%^!Z remoto.#iniport g hton#(H,!Z onnet(#ok+(#trut #okaddr d!Yremoto+#i)eof(remoto!!Z #end(#ok+dado+#trlen(dado!+,!Z 'hile(re.(#ok+ft#+%+,!! a printf(^h^+ft#[,\!Z b Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b para riar um #oket #er.idor prei#amo# riar pelo meno# dua# #trut #okaddriin uma #era a e#trutura da onfi4ura52o do pr:prio #er.idor omo a porta onde o# liente# .2o onetar+ o outro #era a# onfi4ura52o do liente 8ue onetar+ tambem e nee##ario riar dua# no.a# .aria.ei# do tipo int uma .ai #er o no.o #oket e a outra o tamanho da e#trutura+ para ome5ar .amo# onfi4urar a #trut #okaddriin do #er.idor 8ue eu hamei de loal+ no #inifamilM tambem oloamo# a ar8uitetura do #oket+ na porta fa)emo# a me#ma oi#a (6 reomendado u#ar porta# alta# aima de %,/E de.ido a# porta# bai*a #er porta# padrao!+ no #iniaddr.#iaddr u#amo# IN"DDNi"N_ Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #ok+ #ok/+ tamZ #trut #okaddriin loal+ remotoZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z loal.#inifamilM g "FiINE@Z loal.#iniaddr.#iaddr g IN"DDNi"N_Z loal.#iniport g hton#(%,$%&!Z Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b a4ora u#amo# o bind 8ue #eria e8ui.alente ao onnet o# ar4umento# tamb6m #2o i4uai#+ depoi# u#amo# li#ten i##o permite oloar a 8uantidade ma*ima de one*ao na8uele #oket+ o# ar4umento #2o o #oket e 8uantidade Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #ok+ #ok/+ tamZ #trut #okaddriin loal+ remotoZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z loal.#inifamilM g "FiINE@Z loal.#iniaddr.#iaddr g IN"DDNi"N_Z loal.#iniport g hton#(%,$%&!Z bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z li#ten(#ok+%!Z Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b para terminar u#amo# aept dentro de um la5o 'hile para e#perar e permitir a one*2o+ o# ar4umento# #2o o #oket+ o endere5o de memoria da outra #trut #okaddriin+ e o endere5o de memoria da .aria.el int 8ue .ai arma)enar o tamanho+ e por fim atribu7mo# e##a "?I para outra .ari;.el int 8ue #era o outro #oket Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #ok+ #ok/+ tamZ #trut #okaddriin loal+ remotoZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z loal.#inifamilM g "FiINE@Z loal.#iniaddr.#iaddr g IN"DDNi"N_Z loal.#iniport g hton#(%,$%&!Z bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z li#ten(#ok+%!Z 'hile(#ok/ g aept(#ok+(#trut #okaddr d!Yremoto+Ytam!! a b Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b depoi# e #: en.iar ou reeber o# dado# om o #end e re.+ no a#o meu #er.idor .ai en.iar a hora e de#onetar a8uele o #oket apena# o #oket do liente Oinlude ]#tdio.hW Oinlude ]#trin4.hW Oinlude ]time.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #ok+ #ok/+ tamZ #trut #okaddriin loal+ remotoZ timeit tempo g time(N<LL!Z #trut tm dft#Z har hora[%,,\Z Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z loal.#inifamilM g "FiINE@Z loal.#iniaddr.#iaddr g IN"DDNi"N_Z loal.#iniport g hton#(%,$%&!Z bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z li#ten(#ok+%!Z 'hile(#ok/ g aept(#ok+(#trut #okaddr d!Yremoto+Ytam!! a ft# g loaltime(Ytempo!Z #printf(hora+^hd:hd^+ft#>Wtmihour+ft#>Wtmimin!Z #end(#ok/+hora+#trlen(hora!+,!Z Oifdef AIN$/ lo#e#oket(#ok/!Z b lo#e#oket(#ok!Z Oel#e lo#e(#ok/!Z b lo#e(#ok!Z Oendif return ,Z b para pe4ar .er o ip do #oket liente ba#ta u#ar a "?I inetintoa e pa##ar o atributo #iniaddr da e#trutura #okaddriin do #oket liente Oinlude ]#tdio.hW Oinlude ]#trin4.hW Oinlude ]time.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #ok+ #ok/+ tamZ #trut #okaddriin loal+ remotoZ timeit tempo g time(N<LL!Z #trut tm dft#Z har hora[%,,\Z Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z loal.#inifamilM g "FiINE@Z loal.#iniaddr.#iaddr g IN"DDNi"N_Z loal.#iniport g hton#(%,$%&!Z bind(#ok+(#trut #okaddr d!Yloal+#i)eof(loal!!Z li#ten(#ok+%!Z 'hile(#ok/ g aept(#ok+(#trut #okaddr d!Yremoto+Ytam!! a ft# g loaltime(Ytempo!Z #printf(hora+^hd:hd^+ft#>Wtmihour+ft#>Wtmimin!Z #end(#ok/+hora+#trlen(hora!+,!Z printf(^ip do #oket liente: h#Vn^+inetintoa(remoto.#iniaddr!!Z Oifdef AIN$/ lo#e#oket(#ok/!Z b lo#e#oket(#ok!Z Oel#e lo#e(#ok/!Z b lo#e(#ok!Z Oendif return ,Z b no# odi4o# anteriore# e#tamo# u#ando apena# o I? para #e onetar a um ho#t ou dom7nio temo# 8ue on.erter e##e dn# para o ip+ para fa)er i##o podemo# u#ar 4etho#tbMname e atribuir ela para um ponteiro de uma e#trutura ho#tent Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ #trut ho#tent dho#tZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif ho#t g 4etho#tbMname(^loalho#t^!Z printf(^h#^+inetintoa((#trut iniaddr!ho#t>Whiaddr!!Z return ,Z b depoi# #: on.erter o ip para #trin4 u#ando inetintoa+ pa##amo# omo ar4umento a#teri#o e abre e feha parLnte#e# e la dentro o atributo hiaddr da e#trutra ho#tent (tambem u#amo# tMpea#t J#trut iniaddr dK! Oinlude ]#tdio.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ #trut ho#tent dho#tZ Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif ho#t g 4etho#tbMname(^loalho#t^!Z printf(^h#^+inetintoa(d((#trut iniaddr d!ho#t>Whiaddr!!!Z return ,Z b outro e*emplo #eria e##e om #oket liente 8ue oneta.a ao #er.idor http 8ue tinha feito anteriormente Oinlude ]#tdio.hW Oinlude ]#trin4.hW Oifdef AIN$/ Oinlude ]'indo'#.hW Oinlude ]'in#ok/.hW Oel#e Oinlude ]uni#td.hW Oinlude ]#M#/tMpe#.hW Oinlude ]#M#/#oket.hW Oinlude ]netdb.hW Oinlude ]arpa/inet.hW Oinlude ]netinet/in.hW Oendif int main(.oid! a int #okZ #trut #okaddriin remotoZ #trut ho#tent dho#tZ har ft#[$\Z har dado[\ g ^4et / http/VnVn^Z Oifdef AIN$/ AC"D"@" #er.ioZ DAOND .er#aoZ AC"Ctartup(.er#ao+Y#er.io!Z Oendif #ok g #oket("FiINE@+COCRiC@NE"B+I??NO@Oi@C?!Z ho#t g 4etho#tbMname(^loalho#t^!Z remoto.#inifamilM g "FiINE@Z remoto.#iniaddr.#iaddr g inetiaddr(inetintoa(d((#trut iniaddr d!ho#t>Whiaddr!!!Z remoto.#iniport g hton#(H,!Z onnet(#ok+(#trut #okaddr d!Yremoto+#i)eof(remoto!!Z #end(#ok+dado+#trlen(dado!+,!Z 'hile(re.(#ok+ft#+%+,!! a printf(^h^+ft#[,\!Z b Oifdef AIN$/ lo#e#oket(#ok!Z Oel#e lo#e(#ok!Z Oendif return ,Z b 10.0 C#I @amb6m 6 po##7.el u#ar a lin4ua4em C/C++ para u#o 'eb omo 4i+ para u#ar e##e# e*eut;.ei# para u#o 'eb e nee##;rio um #er.idor http onfi4urado para u#o de 4i+ a #a7da de dado# do e*euta.el 6 redireionado para o #er.idor 'eb e a entrada de dado# para o e*euta.el #2o pela# .aria.ei# de ambiente do e*euta.el 8ue no a#o poderia #er por um formulario i4ual a lin4ua4em ?I? (metodo (E@ e ?OC@!+ tamb6m 6 nee##;rio na primeira #aida de dado# u#ar header para o #er.idor e de depoi# dua# 8uebra# de linha# #e4uida do odi4o html (tambem 6 nee##ario troar a e*ten#ao do e*euta.el para .4i! Oinlude ]#tdio.hW int main(.oid! a printf(^Content>@Mpe: te*t/htmlVnVn^!Z printf(^]htmlW]headW]/headW]bodMWpa4ina 'eb]/bodMW]/htmlW^!Z return ,Z b .oL tamb6m poderia u#ar ## e 3a.a#ript i##o por8ue e##a# dua# lin4ua4en# #2o e*eutada# no na.e4ador e n2o no #er.idor (lient>#ide! Oinlude ]#tdio.hW int main(.oid! a printf(^Content>@Mpe: te*t/htmlVnVn^!Z printf(^]htmlW]headW^!Z printf(^]#tMle tMpegV^te*t/##V^WbodMabak4round>olor: blakZ olor: 'hiteb]/#tMleW^!Z printf(^]#ript tMpegV^te*t/3a.a#riptV^Walert(V^#e3a bem .indoV^!Z]/#riptW]/headW^!Z printf(^]bodMWbM hft#$%&]/bodMW]/htmlW^!Z return ,Z b tamb6m podemo# u#ar .ari;.ei# e fun59e# da lin4ua4em C/C++ para dei*ar mai# din=mio Oinlude ]#tdio.hW Oinlude ]time.hW int main(.oid! a #trut tm dft#Z timeit tempo g time(N<LL!Z ft# g loaltime(Ytempo!Z printf(^Content>@Mpe: te*t/htmlVnVn^!Z printf(^]htmlW]bodMWhora atual: hd:hd]/bodMW]/htmlW^+ft#>Wtmihour+ft#>Wtmimin!Z return ,Z b para pe4ar informa52o do #er.idor omo I? ou ate a pa##a4em de ar4umento omo (E@ e ?OC@ podemo# u#ar a fun52o 4eten. da bibliotea #tdlib.h+ pa##amo# omo ar4umento o nome da .aria.el de ambiente (NEBO@Ei"DDN para o ip de 8uem oneto+ I@@?i<CENi"(EN@ para o a4ente+ S<EN_iC@NIN( para pe4ar a pa##a4em de formulario do metodo 4et n2o formatada+ I@@?iCOORIE para o# ookie# entre outra#! Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(! a har dip+ da4ente+ dar4umento+ dookieZ ip g 4eten.(^NEBO@Ei"DDN^!Z a4ente g 4eten.(^I@@?i<CENi"(EN@^!Z ar4umento g 4eten.(^S<EN_iC@NIN(^!Z ookie g 4eten.(^I@@?iCOORIE^!Z printf(^Content>@Mpe: te*t/htmlVnVn^!Z printf(^]htmlW]headW]/headW]bodMW^!Z printf(^#eu I?: h# ]brW^+ip!Z printf(^#eu a4ente: h# ]brW^+a4ente!Z printf(^pa##a4em: h#]brW^+ar4umento!Z printf(^ookie: h#]brW^+ookie!Z printf(^]/bodMW]/htmlW^!Z return ,Z b para adiionar um ookie podemo# u#ar a header JCet>Cookie: J #e4uido do ookie Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(! a har dookieZ ookie g 4eten.(^I@@?iCOORIE^!Z printf(^Content>@Mpe: te*t/htmlVn^!Z printf(^Cet>Cookie: ft#g$%&VnVn^!Z printf(^]htmlW]headW]/headW]bodMW^!Z printf(^ookie#: h# ]brW^+ookie!Z printf(^]/bodMW]/htmlW^!Z return ,Z b para redireionar u#amo# a header JLoation: K #e4uido da url Oinlude ]#tdio.hW Oinlude ]#tdlib.hW int main(.oid! a printf(^Content>@Mpe: te*t/htmlVn^!Z printf(^Loation: http://endoffile.umforum.netVnVn^!Z printf(^]htmlW]headW]/headW]bodMW]/bodMW]/htmlW^!Z return ,Z b 10.1 @ E*) " lin4ua4em a##emblM 6 uma lin4ua4em de bai*o n7.el tambem 6 on#iderada uma da# mai# dif7il de aprender omparada a# outra# lin4ua4en# de pro4rama52o por au#a da #inta*e dela+ a #inta*e dela pode .ariar de ompilador+ #i#tema operaional ou ate proe##ador+ a# #inta*e# mai# u#ada# de##a lin4ua4em pelo meno# eu aho 6 a IN@EL e "@Y@+ a #inta*e IN@EL #2o di.idida# por E parte# 8ue 6 o label (o label 6 opional na maioria da# .e)e#!+ a opera52o 8ue #er; feita (ou opode!+ onde #er; atribu7do depoi# um .ir4ula para #eparar e o .alor 8ue #er; atribu7do+ 3; na #inta*e "@Y@ 6 in.ertido a parte onde #er; atribu7do e o .alor intel: opera52o onde + .alor atYt: opere52o .alor + onde a lin4ua4em a##emblM diferente da# demai# lin4ua4en# 6 apena# uma pe8uena on.er#ao de odi4o# para lin4ua4em da ma8uina (um e*emplo 6 a opera52o nop 8ue 6 nada mai# 8ue o odi4o he*adeimal ,*1,!+ por ela #er uma pe8uena on.er#2o o e*euta.el fia mil .e)e# menor do 8ue um e*euta.el de outra lin4ua4em por6m a #oure fia muito maior e tem muito mai# hane de te al4um erro nela+ o proe##ador do omputador tem uma memoria interna hamada re4i#trador diferente da memoria N"B o# re4i#tradore# 6 muito mai# rapido por6m 6 limitado a 8uantidade e e#pa5o+ e*i#tem E re4i#tradore# padr9e# 8ue podemo# u#ar para arma)enar dado# #2o ele# JaK+ JbK+ JK e JdK e##e E re4i#tradore# podem #e di.idi por / re4i#tradore# #endo ada um H bMte#+ 8ue #eria o bMte alto JahK+ JbhK+ JhK+ JdhK+ e o bMte bai*o JalK+ JblK+ JlK+ JdlK+ e ada re4i#trador de Hbit# pode arma)enar e*atamente um .alor de , a /&&+ o# doi# re4i#tradore# de Hbit# 3unto# 4era um re4i#trador total de %Gbit# 8ue tem um J*K no final #ub#i#tido o JhK e o JlK 8ue #eria o Ja*K+ Jb*K+ J*K+ Jd*K e pode 4uardar um .alor de , a G&&$&+ um re4i#trador JahK om .alor ,$ e o re4i#trador al om .alor %& #eria e8ui.alente ao re4i#trado a* om o .alor ,$%& (pode #er 8ue o .alor formado n2o #e3a e##e ,$%& e #im %&,$ dependendo do proe##ador+ tambem nao #er; o numero em deimal ,$%& e #im o numero 0H$!+ e a maneira de omo o proe##ador .ai ler o .alor i##o depende de omo e#tamo# u#ado o re4i#trador #e for Ja*K ele ia ler ,$%& ou JahK ia ler apena# o ,$+ al6m de##e# re4i#tradore# de %GbMte# e*i#tem o de $/ e GE bMte# 8ue #2o o# mai# u#ado# atualmente no# #i#tema# operaionai#+ o# re4i#tradore# de $/ bMte# tem a letra JeK na frente Jea*K+Keb*K+Ke*K+Ked*K e o# GEbMte# a letra JrK #endo ele# Jra*K+Krb*K+Kr*K+Krd*K %G (H! $/ GE a* (ah + al! ea* ra* eu n2o .ou en#inar a pro4rama em a##emblM puro a8ui #: .ou en#inar apena# o ba#io de a#m inline+ ou #e3a u#ar a#m dentro da pr:pria lin4ua4em C/C+++ para ome5ar u#amo# a fun52o a#m #e4uido do ar4umento 8ue nada mai# 6 8ue uma #trin4 om o odi4o a#m Oinlude ]#tdio.hW int main(.oid! a a#m(^^!Z return ,Z b a primeira opera52o ou opode 8ue .amo# aprender #er; o JnopK itado anteriormente+ e##e opode n2o fa) nada 8uando o pro4rama he4a ne##a parte ele #imple#mente pula ela Oinlude ]#tdio.hW int main(.oid! a a#m(^nop^!Z return ,Z b podemo# fa)er outro# opode# #eparado# por ponto e .7r4ula (ponto e .ir4ula na lin4ua4em a##emblM pura 6 o oment;rio por6m no a#m inline da lin4ua4em /++ #eria e8ui.alente a uma 8uebra de linha! Oinlude ]#tdio.hW int main(.oid! a a#m(^nop Z nop^!Z return ,Z b tamb6m podemo# u#ar VrVn para 8uebra de linha Oinlude ]#tdio.hW int main(.oid! a a#m(^nop VrVn nop^!Z return ,Z b por preferLnia para manter o odi4o or4ani)ado fa5a de##a maneira Oinlude ]#tdio.hW int main(.oid! a a#m(^nop Z^ ^nop^!Z return ,Z b o# label #er.e para loali)ar+ hamar ou pular para determinada parte do odi4o e ele# #empre tem doi# ponto# no final+ o# label podem #er riado ante# de um opode de##a maneira Oinlude ]#tdio.hW int main(.oid! a a#m(^ft#: nop^!Z return ,Z b
ou #o)inho de##e 3eito Oinlude ]#tdio.hW int main(.oid! a a#m(^ft#:^!Z return ,Z b o# re4i#tradore# de.e #er oloado um #7mbolo de porenta4em ante# por e*emplo o re4i#trador ha*+ e o# numero# u#ado o #7mbolo de ifrao ante# X$%& (o# numero# he*adeimal oloamo# ,* fiando X,*%$b!+ para atribuirmo# um .alor a um re4i#trador u#amo# o opode mo. #e4uido do .alor 8ue #er; atribu7do e o re4i#trador #eparado por .ir4ula (#: lembrando 8ue i##o 6 a #inta*e atYt! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo. X$%&+ha*^!Z return ,Z b tamb6m podemo# atribuir um .alor de um re4i#trador para outro Oinlude ]#tdio.hW int main(.oid! a a#m(^mo. X$%&+hb* Z^ ^mo. hb*+ha*^!Z return ,Z b podemo# e#peifiar a 8uantidade de bMte# 8ue #er; opiado om mo.b (HbMte#!+ mo.'(%GbMte#!+ mo.l($/bMte#! e mo.8(GEbMte#! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.b X,$+hah Z^ ^mo.b X%&+hal Z^ ^mo.' ha*+hb*^!Z return ,Z b podemo# #omar um .alor a um re4i#trador om o opode add nele oloamo# o .alor a #er atribuido e o re4i#trador+ o e*emplo abai*o eu oloo o .alor /%& no re4i#trador a* depoi# eu adiiono mai# %,, ao .alor dando o .alor $%& Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X/%&+ha* Z^ ^add X%,,+ha*^!Z return ,Z b tamb6m 6 po##7.el #ubtrair om o opode #ub Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X/%&+ha* Z^ ^#ub X%,,+ha*^!Z return ,Z b para multiplia52o u#amo# o opode imul Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ha* Z^ ^imul X/+ha*^!Z return ,Z b podemo# inrementar mai# um ao nQmero om o opode in #e4uido do re4i#trador Oinlude ]#tdio.hW int main(.oid! a a#m(^in ha* Z^!Z return ,Z b tamb6m podemo# derementar om o opode de Oinlude ]#tdio.hW int main(.oid! a a#m(^de ha* Z^!Z return ,Z b podemo# d; um pulo para determinado label om o opode 3mp depoi# di4itamo# o nome do label para onde .amo# pular Oinlude ]#tdio.hW int main(.oid! a a#m(^3mp ft# Z^ ^ft#: ^!Z return ,Z b #empre tome uidado om loop infinito Oinlude ]#tdio.hW int main(.oid! a a#m(^ft#: Z^ ^3mp ft#^!Z return ,Z b podemo# pular para outro label 8ue e#te3a dentro de outra fun52o a#m+ no e*emplo abai*o ele pula para outro label #em e*eutar o printf Oinlude ]#tdio.hW int main(.oid! a a#m(^3mp ft# Z^!Z printf(^o arduino e #ho' d>d^!Z a#m(^ft#:^!Z return ,Z b para omparar doi# re4i#tradore# podemo# u#ar o opode mp Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X%,,+ hb* Z^ ^mp ha*+hb* Z^!Z return ,Z b para pular para determinado ponto #e a ompara52o for i4ual podemo# u#ar o opode mp e depoi# o opode 3e 8ue pula a#o a ompara52o #e3a .erdadeira (i##o #eria e8ui.alente e#trutura ondiional if! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X$%&+ hb* Z^ ^mp ha*+hb* Z^ ^3e ft#^!Z printf(^#e a omparaao for i4ual nao .ai mo#tra e##e te*to U>U ^!Z a#m(^ft#:^!Z return ,Z b e*i#te o 3ne 8ue pula a#o n2o #e ompara52o n2o for i4ual (i##o #eria e8ui.alente o if om um operador not! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X%,,+ hb* Z^ ^mp ha*+hb* Z^ ^3ne ft#^!Z printf(^#e a omparaao for diferente nao mo#tra e##e te*to U>U ^!Z a#m(^ft#:^!Z return ,Z b e*i#te o opode 34 pula a#o o numero #e3a maior (#: lembrando 8ue i##o atYt ent2o o e*emplo abai*o #eria e8ui.alente a i##o b* W a* ou %,, W $%&! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X%,,+ hb* Z^ ^mp ha*+hb* Z^ ^34 ft#^!Z printf(^#e o numero for maior nao mo#tra e##e te*to U>U ^!Z a#m(^ft#:^!Z return ,Z b om o opode 3l #eria o in.er#o do anterior ele pula a#o o numero #e3a menor Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X%,,+ hb* Z^ ^mp ha*+hb* Z^ ^3l ft#^!Z printf(^#e o numero for menor nao mo#tra e##e te*to U>U ^!Z a#m(^ft#:^!Z return ,Z b para maior e i4ual podemo# u#ar opode 3e4 Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X%,,+ hb* Z^ ^mp ha*+hb* Z^ ^34e ft#^!Z printf(^#e o numero for maior ou i4ual nao mo#tra e##e te*to U>U ^!Z a#m(^ft#:^!Z return ,Z b para o menor e i4ual #eria o opode 3le Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X$%&+ ha* Z^ ^mo.' X%,,+ hb* Z^ ^mp ha*+hb* Z^ ^3le ft#^!Z printf(^#e o numero for menor ou i4ual nao mo#tra e##e te*to U>U ^!Z a#m(^ft#:^!Z return ,Z b 3; aprendemo# a fa)er pulo ompara52o e inremento ent2o podemo# fa)er la5o# i4ual o 'hile+ um e*emplo #eria o re4i#trador a* om o .alor , e fiar em um loop inrementado ate he4a a determinada ondi52o para #e##ar (ou no a#o pular! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X,+ ha* Z^ ^eof: Z^ ^mp X%,+ha* Z^ ^3le ft# Z^ ^in ha* Z^ ^3mp eof Z^ ^ft#: ^!Z return ,Z b podemo# u#ar o opode loop para pular para determinado ponto+ para u#ar e##e opode temo# 8ue definir um .alor para o re4i#trador *+ riar um label e por fim u#ar o opode loop #e4uido do label (e##e opode e bem pareido om o la5o for! Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X%,+ h* Z^ ^ft#: Z^ ^loop ft#^!Z return ,Z b ate a4ora .imo# omo u#ar o# opode# e re4i#tradore# a4ora .amo# aprender omo 3o4ar o# .alore# 8ue e#tao em re4i#trador na mem:ria ou em .ari;.ei#+ a primeira manipula52o de mem:ria 8ue .amo# .er #era a #tak+ a #tak 6 uma mem:ria 8ue le.a uma e#trutura ba#ia 8ue #eria a primeira oi#a a entrar #er; a ultima a #air+ ela funiona empilhando o# dado# um em ima do# outro# por i##o o nome dela 6 #tak ou pilha+ a #tak tem .;ria# utilidade# uma dela# 6 empilhar dado# na ordem erta para #er e*eutada por determinada fun52o+ outra 6 para .oL arma)enar o# dado# do# re4i#tradore# ou ate manipular ele# mai# tarde #em perde ele#+ o# doi# opode mai# u#ado# para manipular o #tak 6 o pu#h para empilhar al4o no #tak e o pop para retirar tamb6m e*i#te um re4i#trado e#peifio 8ue aponta para o topo do #tak 8ue 6 o J#pK+ omo dito ante# para empilhar um .alor u#amo# opode pu#h depoi# o re4i#trador ou .alor Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X%,+ ha* Z^ ^pu#h ha*^!Z return ,Z b e para retirar u#amo# o opode pop Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X%,+ ha* Z^ ^pu#h ha* Z^ ^pop ha*^!Z return ,Z b no e*emplo abai*o eu u#o a pilha para troar de ordem o# re4i#tradore# a* e b* Oinlude ]#tdio.hW int main(.oid! a a#m(^mo.' X%,+ ha* Z^ ^mo.' X$%&+hb* Z^ ^pu#h ha* Z^ ^pu#h hb* Z^ ^pop ha* Z^ ^pop hb*^!Z return ,Z b para a 4ente atribuir um .alor de um re4i#trador para uma .ari;.el u#amo# doi# ponto# depoi# da ultima #trin4+ u#amo# uma outra #trin4 8ue de.e ter o #7mbolo de i4ual e a letra do re4i#trador de onde #er; atribu7do+ lo4o em #e4uida um abre e feha parLnte#e# e a .ari;.el dentro+ tambem todo# o# re4i#tradore# de.e ter doi# #7mbolo# de porenta4em Oinlude ]#tdio.hW int main(.oid! a int ft#Z a#m(^mo.' X$%&+ hha*^ : ^ga^(ft#!!Z printf(^re4i#trador a*: hd^+ft#!Z return ,Z b para arma)enar .alor de doi# ou mai# re4i#tradore# #eparamo# por .ir4ula Oinlude ]#tdio.hW int main(.oid! a int ft#+ eofZ a#m(^mo.' X$%&+ hha* Z^ ^mo.' X%,,+ hhb*^ : ^ga^(ft#!+ ^gb^(eof!!Z printf(^re4i#trador a*: hd Vn^+ft#!Z printf(^re4i#trador a*: hd^+eof!Z return ,Z b tamb6m podemo# d; uma 8uebra de linha para fiar or4ani)ado Oinlude ]#tdio.hW int main(.oid! a int ft#+ eofZ a#m(^mo.' X$%&+ hha* Z^ ^mo.' X%,,+ hhb*^ : ^ga^(ft#!+ ^gb^(eof!!Z printf(^re4i#trador a*: hd Vn^+ft#!Z printf(^re4i#trador a*: hd^+eof!Z return ,Z b para entrar om o# .alore# oloamo# doi# ponto# depoi# da8uele outro 8ue #eria a #aida+ uma #trin4 om a letra do re4i#trador+ abre e feha parLnte#e# om a .aria.el 8ue tem o .alor 8ue #era arma)enado no re4i#trador Oinlude ]#tdio.hW int main(.oid! a int ft# g $%&Z a#m(^in hha*^ : : ^a^(ft#!!Z return ,Z b podemo# entrar e #air om .alore#+ no e*emplo abai*o eu entro om a .ari;.el ft# o a#m proe##a e inrementa mai# um depoi# retorna para a me#ma .ari;.el o no.o .alor Oinlude ]#tdio.hW int main(.oid! a int ft# g $%&Z a#m(^in hha*^ : ^ga^(ft#! : ^a^(ft#!!Z printf(^hd^+ft#!Z return ,Z b 11.0 4im do arqui1o /?40 Dom 4alera eu a4rade5o a todo# 8ue he4aram no final de##e ar8ui.o #em pular nenhum arater eD+ a4rade5o tamb6m o# mano#(a#! 8ue #empre e#t2o a3udando no re#imento do f:rum n2o #: no f:rum eof omo 8ual8uer outro f:rum e blo4#+ tambem n2o po##o dei*ar de a4radeer o mm*m+ f.ramon e #u#p$it,-.irtual o# atuai# adm# do f:rum eof e outro# membro# ati.o# por #empre po#tar bon# onteQdo# e #oure# la+ #obre e##e ebook ter he4ado ao final eu futuramente .ou adiionar no.o# onteQdo# 8ue fio faltando e no.a# "?I# omo (@R e C<NL entre outra#+ 8ual8uer modifia52o 8ue eu fi)er po#tarei la no f:rum ou no faebook informando+ 8ual8uer #u4e#t2o ou ritia #er; bem>.inda+ du.ida# e#tarei #empre di#po#to a a3udar+ para a8uele# 8ue n2o 6 membro do f:rum reomendo muito #e ada#trar tem muito onteudo de primeira #obre di.er#o# a##unto# #endo ele# pro4rama52o+ pente#t+ #i#tema operaionai#+ 4ame#+ anime#+ filme# entre outro#+ ent2o 6 i##o 4alera ate a pr:*ima mm return ,Z