resumo teórico turbo pascal 7

61
Resumo Teórico Turbo Pascal 7.0 - Prof Alexandre Rojas 1 Capitulo I – Introdução ao Turbo Pascal 1. Instalação e inicialização do Turbo Pascal 7.0 Junto com sua documentação você estará recebendo dois disquetes: um intitulado Turbo Pascal 7.0 que é uma versão compacta deste software. O outro é um disquete vazio para você armazenar seus programas desenvolvidos durante o curso. Para instalar o Turbo Pascal, proceda da seguinte forma: Coloque o disquete no drive A: No menu Iniciar – Executar do Windows 95/98 digite: a:\Install.exe e pressione enter ou clique em OK; Capitulo II – Itens Básicos 2.1Tipos de dados 2.1.1 Numérico Os dados numéricos podem ser inteiros ou reais. Os números inteiros podem ser positivos ou negativos e não possuem parte fracionária. A faixa de valores inteiros possíveis está relacionada com a definição do seu tipo Tipo Faixa Tamanho em bytes Shortint De –128 a 127 1 Integer De –32768 a 32767 2 Longint De 2147483648 a 2147483648 4 Byte De 0 a 255 1 Word De 0 a 65535 2 Exemplo: 4 -123 57 Os números reais podem positivos ou negativos e possuem parte fracionária A faixa de valores inteiros possíveis está relacionada com a definição do seu tipo Tipo Faixa Tamanho em bytes Real De 2,9 x 10 –39 a 1,7 x 10 38 ( 10 a 12 dígitos) 6 Single De 1,5 x10-45 a 3,4 x10 38 4 Double De 5,0 x 10 –324 a 1,7 x 10 308 8 Extended De 3,4 x 10 –4932 a 1,1 x 10 4932 10 Comp De –9,2 x 10 18 a 9,2 x 10 18 8 Observe-se que: Os números reais, a separação da parte inteira da parte fracionária é representada pr um(.) ponto e não pela (,) virgula. Não pode haver espaços em branco entre os algarismos usados

Upload: anon-345086

Post on 07-Jun-2015

1.757 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: Resumo Teórico Turbo Pascal 7

Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1

Capitulo I ndash Introduccedilatildeo ao Turbo Pascal1 Instalaccedilatildeo e inicializaccedilatildeo do Turbo Pascal 70Junto com sua documentaccedilatildeo vocecirc estaraacute recebendo dois disquetes um intitulado TurboPascal 70 que eacute uma versatildeo compacta deste software O outro eacute um disquete vazio paravocecirc armazenar seus programas desenvolvidos durante o cursoPara instalar o Turbo Pascal proceda da seguinte forma1048707 Coloque o disquete no drive A1048707 No menu Iniciar ndash Executar do Windows 9598 digite aInstallexe e pressione enterou clique em OK

Capitulo II ndash Itens Baacutesicos21Tipos de dados211 NumeacutericoOs dados numeacutericos podem ser inteiros ou reais1048707 Os nuacutemeros inteiros podem ser positivos ou negativos e natildeo possuem partefracionaacuteriaA faixa de valores inteiros possiacuteveis estaacute relacionada com a definiccedilatildeo do seu tipoTipo Faixa Tamanho em bytesShortint De ndash128 a 127 1Integer De ndash32768 a 32767 2Longint De 2147483648 a 2147483648 4Byte De 0 a 255 1Word De 0 a 65535 2Exemplo 4 -123 571048707 Os nuacutemeros reais podem positivos ou negativos e possuem parte fracionaacuteriaA faixa de valores inteiros possiacuteveis estaacute relacionada com a definiccedilatildeo do seu tipoTipo Faixa Tamanho em bytesReal De 29 x 10 ndash39 a 17 x 10 38 ( 10 a 12 diacutegitos) 6Single De 15 x10-45 a 34 x10 38 4Double De 50 x 10 ndash324 a 17 x 10 308 8Extended De 34 x 10 ndash4932 a 11 x 10 4932 10Comp De ndash92 x 10 18 a 92 x 10 18 8Observe-se queOs nuacutemeros reais a separaccedilatildeo da parte inteira da parte fracionaacuteria eacute representada prum() ponto e natildeo pela () virgulaNatildeo pode haver espaccedilos em branco entre os algarismos usadosSe existir o ponto decimal pelo menos um digito deve preceder e um digito deve sucedero pontoPodemos representar os valores reais pela notaccedilatildeo escalar ou exponencial por exemplo532 -348978E3 ndash onde a letra E significa 10 elevado a assim teremos 78 x 1000 = 7800078 E-1 ndash significa 78 x 01= 078Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2212 LoacutegicoOs dados loacutegicos podem ser TRUE ou FALSE isto eacute verdadeiro ou falso Este tipo dedado ocupa apenas 1 byte e natildeo pode ser lido ou escrito sendo usado para controle defluxo do programaTipo Faixa Tamanho em bytesBoolean 1 1213 Literal ou caracterSatildeo formados por um uacutenico caracter ou por um conjunto de caracteres Os caracterespodem ser letras maiuacutesculas minuacutesculas siacutembolos especiais ou nuacutemeros que seratildeotratados como letras

Este tipo de dados eacute referenciado porTipo Faixa Tamanho em bytesstring De 1 a 255 1 byte por caracter + 1 byte inicial com otamanho da cadeiaChar 1 1Os dados destes tipos dentro dos programas satildeo representados da seguinte forma1048707 Entre apoacutestrofos Ex lsquoAlexandrersquolsquo1234rsquolsquoarojasimeuerjbrrsquo1048707 Pelo seu valor ASCII ndash neste caso o siacutembolo precede o coacutedigo ASCII166 significa a1048707 Pelo seu valor em hexadecimal ndash neste caso o siacutembolo $ precede o coacutedigo$FFFF22 Formaccedilatildeo dos IdentificadoresOs identificadores satildeo os nomes das variaacuteveis dos programas das constantes dasrotinas e das unidadesAs regras para formaccedilatildeo dos identificadores satildeo1048707 Podem ter qualquer tamanho poreacutem somente os 63 primeiros caracteres seratildeoconsiderados1048707 Podem ter letras e nuacutemeros ou underscore (sublinhado _)1048707 Natildeo podem ter espaccedilos em branco ou caracteres especiais ( )amp$+-=gtlt1048707 Iniciam sempre por uma letra1048707 Natildeo pode ser uma palavra reservada1048707 Podem ser usadas letras maiuacutesculas ou minuacutesculasPalavras reservadasAND ASM ARRAY BEGIN CASECONST DIV DO DOWNTO ELSEEND FILE FOR FUNCTION GOTOIF IN LABEL MOD NILNOT OF OR PACKED PROCEDUREResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 3Palavras reservadasPROGRAM RECORD REPEAT SET THENTO TYPE UNTIL VAR WHILEWITHExemplosNomeIdadeTelefoneNome_do_alunoA123423 Estrutura de um programa PascalO Pascal eacute uma linguagem procedural ou seja obedece a um procedimento sendo asinstruccedilotildees executas em ordem sequumlencialTodo programa escrito em Pascal eacute subdividido em 3 aacutereas aacuterea de cabeccedilalho aacuterea dedeclaraccedilotildees e corpo do programa231 Aacuterea de cabeccedilalhoO cabeccedilalho de um programa eacute representado pela palavra PROGRAM ltidentificadorgt232 Aacuterea de declaraccedilotildeesEm um programa natildeo eacute obrigatoacuterio existir todas as seccedilotildeesSeccedilatildeo Funccedilatildeo ExemploUSES Informa as unidades a seremutilizadas Caso uma rotina natildeo esteja

no corpo do programa a instruccedilotildeesnecessaacuterias seratildeo procuradas nasunidades relacionadasUSES CRT(usa o monitor)USES PRN(usa aimpressora)CONST Atribui a identificadores valoresconstantes que natildeo poderatildeo seralterados dentro do programaCONSTNMAX = 100LABEL Define o nome dos roacutetulos LABELFIM INICIOVAR Define as variaacuteveis usadas e seu tipo VARNOME STRING[30]IDADEINTEGERTYPE Define um tipo de variaacutevel criada pelousuaacuterioTYPEALUNO=STRING[60]PROCEDURE Define as instruccedilotildees de um subprogramaPROCEDURE LERFUNCTION Define as instruccedilotildees de uma funccedilatildeo FUNCTIONSOMAINTEGER233 Corpo do ProgramaO programa propriamente dito estaacute contido no corpo do programa Esta aacuterea tem iniacuteciocom a instruccedilatildeo BEGIN e teacutermino com a instruccedilatildeo END seguida de ()Chamamos de BLOCO ao conjunto de instruccedilotildees entre o begin e o end234 Exemplo de programa PascalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4Program umUses crtVarAbc integerBeginClrscrWrite(lsquoDigite A lsquo)readln(a)Write(lsquoDigite B lsquo)readln(b)C=a+bWriteln(lsquoA soma eacute lsquoc)End24 ComentaacuteriosOs comentaacuterios satildeo introduzidos no corpo do programa para aumentar sua legibilidadeUsa-se para iniciar e para terminarEx Programador Alexandre 25 Declaraccedilatildeo de variaacuteveisAs declaraccedilotildees de variaacuteveis satildeo obrigatoacuterias para validar os identificadores Todas asvariaacuteveis devem ser incluiacutedas em uma uacutenica declaraccedilatildeo do tipoVARLista de variaacuteveis tipoLista de variaacuteveis tipoOs tipos de variaacuteveis podem ser

Meia precisatildeoNumeacutericas Inteiras precisatildeo simplesEscalares Literais Reais precisatildeo duplaPreacute definidas LoacutegicasPonteirosArrays() (dados homogecircneos)Estruturados Registros() (dados heterogecircneos)objetosDefinidas pelo usuaacuterio EnumeradosConjuntos Natildeoenumerados() estes tipos seratildeo apresentados durante o curso1048707 Tipos Preacute definidosOs tipos preacute definidos escalares jaacute foram examinados no item 21Exemplo de trecho de programa com declaraccedilatildeo de variaacuteveisPROGRAM DOISnome do programaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 5USES CRT carrega as rotinas para a manipulaccedilatildeo da telaVARNOMESTRING[30] a variaacutevel nome armazena ateacute 30 caracteresIDADE INTEGERSEXO CHARSALARIO REALACHEI BOOLEANBEGINEND1048707 Tipo definido pelo usuaacuterioO comando TYPE permite a definiccedilatildeo de um tipo de dados utilizando os tipos preacutedefinidos na linguagem ou outro tipo previamente definido pelo usuaacuterio e permite umamaior legibilidade do programaA declaraccedilatildeo eacute do tipoTYPEVARIAacuteVEL = tipoA criaccedilatildeo de um tipo natildeo atribui a nenhuma variaacutevel que deve ser realizada peladeclaraccedilatildeo VARExemplo de trecho de programa com declaraccedilatildeo de tipo e de variaacuteveisPROGRAM TRESUSES CRTTYPETIPO_DE_NOME = STRING[30]VARNOME TIPO_DE_NOMEIDADE INTEGERSEXO CHARSALARIO REALBEGINENDPodemos definir um conjunto heterogecircneo do tipo RECORD da seguinte formaPROGRAM TRES1USES CRTTYPETIPO_ALUNO = RECORD

NOME STRING[30]IDADEINTEGERSEXOCHARENDencerra a definiccedilatildeo do RECORDVARResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 6ALUNOTIPO_ALUNOBEGINALUNONOME=rsquoALEXrsquoALUNOIDADE =20hellipEND1048707 ConjuntosNo Turbo Pascal um conjunto eacute um grupo de nuacutemeros ou caracteres inter-relacionados Os conjuntos satildeo basicamente utilizados para verificar se um caracter ou um nuacutemeropertence ao conjunto O operador IN verifica se um determinado valor pertence aoconjuntoO tipo SET define o conjuntoExemplo usando conjuntoPROGRAM QUATROUSES CRTVARLETRAS SET OF lsquoArsquorsquoZrsquoNUMERO SET OF 09TODOS SET OF CHARBEGINENDOs conjuntos podem ser enumerados como por exemploPROGRAM QUATROUSES CRTVARINGREDIENTES(OVOSLEITEMANTEIGAFARINHA)NUMERO SET OF 09TODOS SET OF CHARBEGINEND1048707 ConstantesAs definiccedilotildees de constantes satildeo realizadas antes das declaraccedilotildees das variaacuteveis Todasas declaraccedilotildees devem ser incluiacutedas da seguinte formaCONSTVariaacutevel = valorAlgumas constantes estatildeo preacute definidas Por exemploPI ndash 31416Maxint - 32767Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 7Exemplos de definiccedilatildeo de constantePROGRAM CINCOUSES CRTCONSTNOME = lsquoANA FERREIRArsquoNUM = 100

LETRA =rsquoArsquoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 8

Capitulo III - Comando de Atribuiccedilatildeo31 Um comando de atribuiccedilatildeo eacute sempre do tipovariaacutevel = expressatildeoAs expressotildees podem serExpressotildees matemaacuteticas ndash Satildeo escritas linearmente usando a notaccedilatildeo matemaacutetica Osoperadores satildeoOperador Funccedilatildeo Operandos Resultado+ Somar Inteiro ou real Inteiro ou real- Subtrair Inteiro ou real Inteiro ou real Multiplicar Inteiro ou real Inteiro ou real Dividir Inteiro ou real RealDiv Quociente inteiro Inteiro InteiroMod Resto da divisatildeo Inteiro inteiroDeve-se observar as seguintes regrasNatildeo pode existir nenhuma operaccedilatildeo impliacutecitaDois operadores natildeo podem aparecer juntos ndash usa- se o parecircntesis para separarPor natildeo existir operador para a exponenciaccedilatildeo temos A B = EXP(BLN(A))Para cada ( deve existir um )O siacutembolo = significa atribua a e tem sentido diferente do igual da matemaacuteticaHierarquia dos operadores1ordm sinal unaacuterio2ordm parecircntesis3ordm funccedilotildees4ordm div mod5ordm + -Em caso de mesma hierarquia resolve-se da esquerda para a direitaExemplos de operaccedilatildeo matemaacuteticaA=2 B=3Expressatildeo Pascal ResultadoZ= A+B2Z=(A+B)2 Z=25Z=A B Z=EXP(LN(A)B) Z=8Z= 11 MOD A Z=1Z= 11 DIV A Z= 5Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 932 Principais Funccedilotildees Matemaacuteticas preacute definidasFunccedilatildeo Pascal Argumentos Resultado| x | Valor absoluto ABS(X) Inteiro ou real Inteiro ou reale X Exponencial de e EXP(X) Inteiro ou real RealSen(X) Seno de X SIN(X) X em radianos RealCos(X) Co seno de X COS(X) X em radianos RealArctg(x) Arco tangente de X ARCTAN(X) X em radianos RealLN(X) Logaritmo neperiano de X LN(X) Inteiro ou real RealArredondar ROUND(X) Real InteiroParte inteira de X TRUNC(X) Real InteiroParte fracionaacuteria de X FRAC(X) Real RealRaiz quadrada SQRT(X) Inteiro ou real RealX 2 SQR(X) Inteiro ou real RealSemente de no randocircmico RANDOMIZENo randocircmico entre 0 e 1 RANDOM Real

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 2: Resumo Teórico Turbo Pascal 7

Este tipo de dados eacute referenciado porTipo Faixa Tamanho em bytesstring De 1 a 255 1 byte por caracter + 1 byte inicial com otamanho da cadeiaChar 1 1Os dados destes tipos dentro dos programas satildeo representados da seguinte forma1048707 Entre apoacutestrofos Ex lsquoAlexandrersquolsquo1234rsquolsquoarojasimeuerjbrrsquo1048707 Pelo seu valor ASCII ndash neste caso o siacutembolo precede o coacutedigo ASCII166 significa a1048707 Pelo seu valor em hexadecimal ndash neste caso o siacutembolo $ precede o coacutedigo$FFFF22 Formaccedilatildeo dos IdentificadoresOs identificadores satildeo os nomes das variaacuteveis dos programas das constantes dasrotinas e das unidadesAs regras para formaccedilatildeo dos identificadores satildeo1048707 Podem ter qualquer tamanho poreacutem somente os 63 primeiros caracteres seratildeoconsiderados1048707 Podem ter letras e nuacutemeros ou underscore (sublinhado _)1048707 Natildeo podem ter espaccedilos em branco ou caracteres especiais ( )amp$+-=gtlt1048707 Iniciam sempre por uma letra1048707 Natildeo pode ser uma palavra reservada1048707 Podem ser usadas letras maiuacutesculas ou minuacutesculasPalavras reservadasAND ASM ARRAY BEGIN CASECONST DIV DO DOWNTO ELSEEND FILE FOR FUNCTION GOTOIF IN LABEL MOD NILNOT OF OR PACKED PROCEDUREResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 3Palavras reservadasPROGRAM RECORD REPEAT SET THENTO TYPE UNTIL VAR WHILEWITHExemplosNomeIdadeTelefoneNome_do_alunoA123423 Estrutura de um programa PascalO Pascal eacute uma linguagem procedural ou seja obedece a um procedimento sendo asinstruccedilotildees executas em ordem sequumlencialTodo programa escrito em Pascal eacute subdividido em 3 aacutereas aacuterea de cabeccedilalho aacuterea dedeclaraccedilotildees e corpo do programa231 Aacuterea de cabeccedilalhoO cabeccedilalho de um programa eacute representado pela palavra PROGRAM ltidentificadorgt232 Aacuterea de declaraccedilotildeesEm um programa natildeo eacute obrigatoacuterio existir todas as seccedilotildeesSeccedilatildeo Funccedilatildeo ExemploUSES Informa as unidades a seremutilizadas Caso uma rotina natildeo esteja

no corpo do programa a instruccedilotildeesnecessaacuterias seratildeo procuradas nasunidades relacionadasUSES CRT(usa o monitor)USES PRN(usa aimpressora)CONST Atribui a identificadores valoresconstantes que natildeo poderatildeo seralterados dentro do programaCONSTNMAX = 100LABEL Define o nome dos roacutetulos LABELFIM INICIOVAR Define as variaacuteveis usadas e seu tipo VARNOME STRING[30]IDADEINTEGERTYPE Define um tipo de variaacutevel criada pelousuaacuterioTYPEALUNO=STRING[60]PROCEDURE Define as instruccedilotildees de um subprogramaPROCEDURE LERFUNCTION Define as instruccedilotildees de uma funccedilatildeo FUNCTIONSOMAINTEGER233 Corpo do ProgramaO programa propriamente dito estaacute contido no corpo do programa Esta aacuterea tem iniacuteciocom a instruccedilatildeo BEGIN e teacutermino com a instruccedilatildeo END seguida de ()Chamamos de BLOCO ao conjunto de instruccedilotildees entre o begin e o end234 Exemplo de programa PascalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4Program umUses crtVarAbc integerBeginClrscrWrite(lsquoDigite A lsquo)readln(a)Write(lsquoDigite B lsquo)readln(b)C=a+bWriteln(lsquoA soma eacute lsquoc)End24 ComentaacuteriosOs comentaacuterios satildeo introduzidos no corpo do programa para aumentar sua legibilidadeUsa-se para iniciar e para terminarEx Programador Alexandre 25 Declaraccedilatildeo de variaacuteveisAs declaraccedilotildees de variaacuteveis satildeo obrigatoacuterias para validar os identificadores Todas asvariaacuteveis devem ser incluiacutedas em uma uacutenica declaraccedilatildeo do tipoVARLista de variaacuteveis tipoLista de variaacuteveis tipoOs tipos de variaacuteveis podem ser

Meia precisatildeoNumeacutericas Inteiras precisatildeo simplesEscalares Literais Reais precisatildeo duplaPreacute definidas LoacutegicasPonteirosArrays() (dados homogecircneos)Estruturados Registros() (dados heterogecircneos)objetosDefinidas pelo usuaacuterio EnumeradosConjuntos Natildeoenumerados() estes tipos seratildeo apresentados durante o curso1048707 Tipos Preacute definidosOs tipos preacute definidos escalares jaacute foram examinados no item 21Exemplo de trecho de programa com declaraccedilatildeo de variaacuteveisPROGRAM DOISnome do programaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 5USES CRT carrega as rotinas para a manipulaccedilatildeo da telaVARNOMESTRING[30] a variaacutevel nome armazena ateacute 30 caracteresIDADE INTEGERSEXO CHARSALARIO REALACHEI BOOLEANBEGINEND1048707 Tipo definido pelo usuaacuterioO comando TYPE permite a definiccedilatildeo de um tipo de dados utilizando os tipos preacutedefinidos na linguagem ou outro tipo previamente definido pelo usuaacuterio e permite umamaior legibilidade do programaA declaraccedilatildeo eacute do tipoTYPEVARIAacuteVEL = tipoA criaccedilatildeo de um tipo natildeo atribui a nenhuma variaacutevel que deve ser realizada peladeclaraccedilatildeo VARExemplo de trecho de programa com declaraccedilatildeo de tipo e de variaacuteveisPROGRAM TRESUSES CRTTYPETIPO_DE_NOME = STRING[30]VARNOME TIPO_DE_NOMEIDADE INTEGERSEXO CHARSALARIO REALBEGINENDPodemos definir um conjunto heterogecircneo do tipo RECORD da seguinte formaPROGRAM TRES1USES CRTTYPETIPO_ALUNO = RECORD

NOME STRING[30]IDADEINTEGERSEXOCHARENDencerra a definiccedilatildeo do RECORDVARResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 6ALUNOTIPO_ALUNOBEGINALUNONOME=rsquoALEXrsquoALUNOIDADE =20hellipEND1048707 ConjuntosNo Turbo Pascal um conjunto eacute um grupo de nuacutemeros ou caracteres inter-relacionados Os conjuntos satildeo basicamente utilizados para verificar se um caracter ou um nuacutemeropertence ao conjunto O operador IN verifica se um determinado valor pertence aoconjuntoO tipo SET define o conjuntoExemplo usando conjuntoPROGRAM QUATROUSES CRTVARLETRAS SET OF lsquoArsquorsquoZrsquoNUMERO SET OF 09TODOS SET OF CHARBEGINENDOs conjuntos podem ser enumerados como por exemploPROGRAM QUATROUSES CRTVARINGREDIENTES(OVOSLEITEMANTEIGAFARINHA)NUMERO SET OF 09TODOS SET OF CHARBEGINEND1048707 ConstantesAs definiccedilotildees de constantes satildeo realizadas antes das declaraccedilotildees das variaacuteveis Todasas declaraccedilotildees devem ser incluiacutedas da seguinte formaCONSTVariaacutevel = valorAlgumas constantes estatildeo preacute definidas Por exemploPI ndash 31416Maxint - 32767Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 7Exemplos de definiccedilatildeo de constantePROGRAM CINCOUSES CRTCONSTNOME = lsquoANA FERREIRArsquoNUM = 100

LETRA =rsquoArsquoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 8

Capitulo III - Comando de Atribuiccedilatildeo31 Um comando de atribuiccedilatildeo eacute sempre do tipovariaacutevel = expressatildeoAs expressotildees podem serExpressotildees matemaacuteticas ndash Satildeo escritas linearmente usando a notaccedilatildeo matemaacutetica Osoperadores satildeoOperador Funccedilatildeo Operandos Resultado+ Somar Inteiro ou real Inteiro ou real- Subtrair Inteiro ou real Inteiro ou real Multiplicar Inteiro ou real Inteiro ou real Dividir Inteiro ou real RealDiv Quociente inteiro Inteiro InteiroMod Resto da divisatildeo Inteiro inteiroDeve-se observar as seguintes regrasNatildeo pode existir nenhuma operaccedilatildeo impliacutecitaDois operadores natildeo podem aparecer juntos ndash usa- se o parecircntesis para separarPor natildeo existir operador para a exponenciaccedilatildeo temos A B = EXP(BLN(A))Para cada ( deve existir um )O siacutembolo = significa atribua a e tem sentido diferente do igual da matemaacuteticaHierarquia dos operadores1ordm sinal unaacuterio2ordm parecircntesis3ordm funccedilotildees4ordm div mod5ordm + -Em caso de mesma hierarquia resolve-se da esquerda para a direitaExemplos de operaccedilatildeo matemaacuteticaA=2 B=3Expressatildeo Pascal ResultadoZ= A+B2Z=(A+B)2 Z=25Z=A B Z=EXP(LN(A)B) Z=8Z= 11 MOD A Z=1Z= 11 DIV A Z= 5Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 932 Principais Funccedilotildees Matemaacuteticas preacute definidasFunccedilatildeo Pascal Argumentos Resultado| x | Valor absoluto ABS(X) Inteiro ou real Inteiro ou reale X Exponencial de e EXP(X) Inteiro ou real RealSen(X) Seno de X SIN(X) X em radianos RealCos(X) Co seno de X COS(X) X em radianos RealArctg(x) Arco tangente de X ARCTAN(X) X em radianos RealLN(X) Logaritmo neperiano de X LN(X) Inteiro ou real RealArredondar ROUND(X) Real InteiroParte inteira de X TRUNC(X) Real InteiroParte fracionaacuteria de X FRAC(X) Real RealRaiz quadrada SQRT(X) Inteiro ou real RealX 2 SQR(X) Inteiro ou real RealSemente de no randocircmico RANDOMIZENo randocircmico entre 0 e 1 RANDOM Real

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 3: Resumo Teórico Turbo Pascal 7

no corpo do programa a instruccedilotildeesnecessaacuterias seratildeo procuradas nasunidades relacionadasUSES CRT(usa o monitor)USES PRN(usa aimpressora)CONST Atribui a identificadores valoresconstantes que natildeo poderatildeo seralterados dentro do programaCONSTNMAX = 100LABEL Define o nome dos roacutetulos LABELFIM INICIOVAR Define as variaacuteveis usadas e seu tipo VARNOME STRING[30]IDADEINTEGERTYPE Define um tipo de variaacutevel criada pelousuaacuterioTYPEALUNO=STRING[60]PROCEDURE Define as instruccedilotildees de um subprogramaPROCEDURE LERFUNCTION Define as instruccedilotildees de uma funccedilatildeo FUNCTIONSOMAINTEGER233 Corpo do ProgramaO programa propriamente dito estaacute contido no corpo do programa Esta aacuterea tem iniacuteciocom a instruccedilatildeo BEGIN e teacutermino com a instruccedilatildeo END seguida de ()Chamamos de BLOCO ao conjunto de instruccedilotildees entre o begin e o end234 Exemplo de programa PascalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4Program umUses crtVarAbc integerBeginClrscrWrite(lsquoDigite A lsquo)readln(a)Write(lsquoDigite B lsquo)readln(b)C=a+bWriteln(lsquoA soma eacute lsquoc)End24 ComentaacuteriosOs comentaacuterios satildeo introduzidos no corpo do programa para aumentar sua legibilidadeUsa-se para iniciar e para terminarEx Programador Alexandre 25 Declaraccedilatildeo de variaacuteveisAs declaraccedilotildees de variaacuteveis satildeo obrigatoacuterias para validar os identificadores Todas asvariaacuteveis devem ser incluiacutedas em uma uacutenica declaraccedilatildeo do tipoVARLista de variaacuteveis tipoLista de variaacuteveis tipoOs tipos de variaacuteveis podem ser

Meia precisatildeoNumeacutericas Inteiras precisatildeo simplesEscalares Literais Reais precisatildeo duplaPreacute definidas LoacutegicasPonteirosArrays() (dados homogecircneos)Estruturados Registros() (dados heterogecircneos)objetosDefinidas pelo usuaacuterio EnumeradosConjuntos Natildeoenumerados() estes tipos seratildeo apresentados durante o curso1048707 Tipos Preacute definidosOs tipos preacute definidos escalares jaacute foram examinados no item 21Exemplo de trecho de programa com declaraccedilatildeo de variaacuteveisPROGRAM DOISnome do programaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 5USES CRT carrega as rotinas para a manipulaccedilatildeo da telaVARNOMESTRING[30] a variaacutevel nome armazena ateacute 30 caracteresIDADE INTEGERSEXO CHARSALARIO REALACHEI BOOLEANBEGINEND1048707 Tipo definido pelo usuaacuterioO comando TYPE permite a definiccedilatildeo de um tipo de dados utilizando os tipos preacutedefinidos na linguagem ou outro tipo previamente definido pelo usuaacuterio e permite umamaior legibilidade do programaA declaraccedilatildeo eacute do tipoTYPEVARIAacuteVEL = tipoA criaccedilatildeo de um tipo natildeo atribui a nenhuma variaacutevel que deve ser realizada peladeclaraccedilatildeo VARExemplo de trecho de programa com declaraccedilatildeo de tipo e de variaacuteveisPROGRAM TRESUSES CRTTYPETIPO_DE_NOME = STRING[30]VARNOME TIPO_DE_NOMEIDADE INTEGERSEXO CHARSALARIO REALBEGINENDPodemos definir um conjunto heterogecircneo do tipo RECORD da seguinte formaPROGRAM TRES1USES CRTTYPETIPO_ALUNO = RECORD

NOME STRING[30]IDADEINTEGERSEXOCHARENDencerra a definiccedilatildeo do RECORDVARResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 6ALUNOTIPO_ALUNOBEGINALUNONOME=rsquoALEXrsquoALUNOIDADE =20hellipEND1048707 ConjuntosNo Turbo Pascal um conjunto eacute um grupo de nuacutemeros ou caracteres inter-relacionados Os conjuntos satildeo basicamente utilizados para verificar se um caracter ou um nuacutemeropertence ao conjunto O operador IN verifica se um determinado valor pertence aoconjuntoO tipo SET define o conjuntoExemplo usando conjuntoPROGRAM QUATROUSES CRTVARLETRAS SET OF lsquoArsquorsquoZrsquoNUMERO SET OF 09TODOS SET OF CHARBEGINENDOs conjuntos podem ser enumerados como por exemploPROGRAM QUATROUSES CRTVARINGREDIENTES(OVOSLEITEMANTEIGAFARINHA)NUMERO SET OF 09TODOS SET OF CHARBEGINEND1048707 ConstantesAs definiccedilotildees de constantes satildeo realizadas antes das declaraccedilotildees das variaacuteveis Todasas declaraccedilotildees devem ser incluiacutedas da seguinte formaCONSTVariaacutevel = valorAlgumas constantes estatildeo preacute definidas Por exemploPI ndash 31416Maxint - 32767Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 7Exemplos de definiccedilatildeo de constantePROGRAM CINCOUSES CRTCONSTNOME = lsquoANA FERREIRArsquoNUM = 100

LETRA =rsquoArsquoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 8

Capitulo III - Comando de Atribuiccedilatildeo31 Um comando de atribuiccedilatildeo eacute sempre do tipovariaacutevel = expressatildeoAs expressotildees podem serExpressotildees matemaacuteticas ndash Satildeo escritas linearmente usando a notaccedilatildeo matemaacutetica Osoperadores satildeoOperador Funccedilatildeo Operandos Resultado+ Somar Inteiro ou real Inteiro ou real- Subtrair Inteiro ou real Inteiro ou real Multiplicar Inteiro ou real Inteiro ou real Dividir Inteiro ou real RealDiv Quociente inteiro Inteiro InteiroMod Resto da divisatildeo Inteiro inteiroDeve-se observar as seguintes regrasNatildeo pode existir nenhuma operaccedilatildeo impliacutecitaDois operadores natildeo podem aparecer juntos ndash usa- se o parecircntesis para separarPor natildeo existir operador para a exponenciaccedilatildeo temos A B = EXP(BLN(A))Para cada ( deve existir um )O siacutembolo = significa atribua a e tem sentido diferente do igual da matemaacuteticaHierarquia dos operadores1ordm sinal unaacuterio2ordm parecircntesis3ordm funccedilotildees4ordm div mod5ordm + -Em caso de mesma hierarquia resolve-se da esquerda para a direitaExemplos de operaccedilatildeo matemaacuteticaA=2 B=3Expressatildeo Pascal ResultadoZ= A+B2Z=(A+B)2 Z=25Z=A B Z=EXP(LN(A)B) Z=8Z= 11 MOD A Z=1Z= 11 DIV A Z= 5Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 932 Principais Funccedilotildees Matemaacuteticas preacute definidasFunccedilatildeo Pascal Argumentos Resultado| x | Valor absoluto ABS(X) Inteiro ou real Inteiro ou reale X Exponencial de e EXP(X) Inteiro ou real RealSen(X) Seno de X SIN(X) X em radianos RealCos(X) Co seno de X COS(X) X em radianos RealArctg(x) Arco tangente de X ARCTAN(X) X em radianos RealLN(X) Logaritmo neperiano de X LN(X) Inteiro ou real RealArredondar ROUND(X) Real InteiroParte inteira de X TRUNC(X) Real InteiroParte fracionaacuteria de X FRAC(X) Real RealRaiz quadrada SQRT(X) Inteiro ou real RealX 2 SQR(X) Inteiro ou real RealSemente de no randocircmico RANDOMIZENo randocircmico entre 0 e 1 RANDOM Real

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 4: Resumo Teórico Turbo Pascal 7

Meia precisatildeoNumeacutericas Inteiras precisatildeo simplesEscalares Literais Reais precisatildeo duplaPreacute definidas LoacutegicasPonteirosArrays() (dados homogecircneos)Estruturados Registros() (dados heterogecircneos)objetosDefinidas pelo usuaacuterio EnumeradosConjuntos Natildeoenumerados() estes tipos seratildeo apresentados durante o curso1048707 Tipos Preacute definidosOs tipos preacute definidos escalares jaacute foram examinados no item 21Exemplo de trecho de programa com declaraccedilatildeo de variaacuteveisPROGRAM DOISnome do programaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 5USES CRT carrega as rotinas para a manipulaccedilatildeo da telaVARNOMESTRING[30] a variaacutevel nome armazena ateacute 30 caracteresIDADE INTEGERSEXO CHARSALARIO REALACHEI BOOLEANBEGINEND1048707 Tipo definido pelo usuaacuterioO comando TYPE permite a definiccedilatildeo de um tipo de dados utilizando os tipos preacutedefinidos na linguagem ou outro tipo previamente definido pelo usuaacuterio e permite umamaior legibilidade do programaA declaraccedilatildeo eacute do tipoTYPEVARIAacuteVEL = tipoA criaccedilatildeo de um tipo natildeo atribui a nenhuma variaacutevel que deve ser realizada peladeclaraccedilatildeo VARExemplo de trecho de programa com declaraccedilatildeo de tipo e de variaacuteveisPROGRAM TRESUSES CRTTYPETIPO_DE_NOME = STRING[30]VARNOME TIPO_DE_NOMEIDADE INTEGERSEXO CHARSALARIO REALBEGINENDPodemos definir um conjunto heterogecircneo do tipo RECORD da seguinte formaPROGRAM TRES1USES CRTTYPETIPO_ALUNO = RECORD

NOME STRING[30]IDADEINTEGERSEXOCHARENDencerra a definiccedilatildeo do RECORDVARResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 6ALUNOTIPO_ALUNOBEGINALUNONOME=rsquoALEXrsquoALUNOIDADE =20hellipEND1048707 ConjuntosNo Turbo Pascal um conjunto eacute um grupo de nuacutemeros ou caracteres inter-relacionados Os conjuntos satildeo basicamente utilizados para verificar se um caracter ou um nuacutemeropertence ao conjunto O operador IN verifica se um determinado valor pertence aoconjuntoO tipo SET define o conjuntoExemplo usando conjuntoPROGRAM QUATROUSES CRTVARLETRAS SET OF lsquoArsquorsquoZrsquoNUMERO SET OF 09TODOS SET OF CHARBEGINENDOs conjuntos podem ser enumerados como por exemploPROGRAM QUATROUSES CRTVARINGREDIENTES(OVOSLEITEMANTEIGAFARINHA)NUMERO SET OF 09TODOS SET OF CHARBEGINEND1048707 ConstantesAs definiccedilotildees de constantes satildeo realizadas antes das declaraccedilotildees das variaacuteveis Todasas declaraccedilotildees devem ser incluiacutedas da seguinte formaCONSTVariaacutevel = valorAlgumas constantes estatildeo preacute definidas Por exemploPI ndash 31416Maxint - 32767Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 7Exemplos de definiccedilatildeo de constantePROGRAM CINCOUSES CRTCONSTNOME = lsquoANA FERREIRArsquoNUM = 100

LETRA =rsquoArsquoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 8

Capitulo III - Comando de Atribuiccedilatildeo31 Um comando de atribuiccedilatildeo eacute sempre do tipovariaacutevel = expressatildeoAs expressotildees podem serExpressotildees matemaacuteticas ndash Satildeo escritas linearmente usando a notaccedilatildeo matemaacutetica Osoperadores satildeoOperador Funccedilatildeo Operandos Resultado+ Somar Inteiro ou real Inteiro ou real- Subtrair Inteiro ou real Inteiro ou real Multiplicar Inteiro ou real Inteiro ou real Dividir Inteiro ou real RealDiv Quociente inteiro Inteiro InteiroMod Resto da divisatildeo Inteiro inteiroDeve-se observar as seguintes regrasNatildeo pode existir nenhuma operaccedilatildeo impliacutecitaDois operadores natildeo podem aparecer juntos ndash usa- se o parecircntesis para separarPor natildeo existir operador para a exponenciaccedilatildeo temos A B = EXP(BLN(A))Para cada ( deve existir um )O siacutembolo = significa atribua a e tem sentido diferente do igual da matemaacuteticaHierarquia dos operadores1ordm sinal unaacuterio2ordm parecircntesis3ordm funccedilotildees4ordm div mod5ordm + -Em caso de mesma hierarquia resolve-se da esquerda para a direitaExemplos de operaccedilatildeo matemaacuteticaA=2 B=3Expressatildeo Pascal ResultadoZ= A+B2Z=(A+B)2 Z=25Z=A B Z=EXP(LN(A)B) Z=8Z= 11 MOD A Z=1Z= 11 DIV A Z= 5Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 932 Principais Funccedilotildees Matemaacuteticas preacute definidasFunccedilatildeo Pascal Argumentos Resultado| x | Valor absoluto ABS(X) Inteiro ou real Inteiro ou reale X Exponencial de e EXP(X) Inteiro ou real RealSen(X) Seno de X SIN(X) X em radianos RealCos(X) Co seno de X COS(X) X em radianos RealArctg(x) Arco tangente de X ARCTAN(X) X em radianos RealLN(X) Logaritmo neperiano de X LN(X) Inteiro ou real RealArredondar ROUND(X) Real InteiroParte inteira de X TRUNC(X) Real InteiroParte fracionaacuteria de X FRAC(X) Real RealRaiz quadrada SQRT(X) Inteiro ou real RealX 2 SQR(X) Inteiro ou real RealSemente de no randocircmico RANDOMIZENo randocircmico entre 0 e 1 RANDOM Real

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 5: Resumo Teórico Turbo Pascal 7

NOME STRING[30]IDADEINTEGERSEXOCHARENDencerra a definiccedilatildeo do RECORDVARResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 6ALUNOTIPO_ALUNOBEGINALUNONOME=rsquoALEXrsquoALUNOIDADE =20hellipEND1048707 ConjuntosNo Turbo Pascal um conjunto eacute um grupo de nuacutemeros ou caracteres inter-relacionados Os conjuntos satildeo basicamente utilizados para verificar se um caracter ou um nuacutemeropertence ao conjunto O operador IN verifica se um determinado valor pertence aoconjuntoO tipo SET define o conjuntoExemplo usando conjuntoPROGRAM QUATROUSES CRTVARLETRAS SET OF lsquoArsquorsquoZrsquoNUMERO SET OF 09TODOS SET OF CHARBEGINENDOs conjuntos podem ser enumerados como por exemploPROGRAM QUATROUSES CRTVARINGREDIENTES(OVOSLEITEMANTEIGAFARINHA)NUMERO SET OF 09TODOS SET OF CHARBEGINEND1048707 ConstantesAs definiccedilotildees de constantes satildeo realizadas antes das declaraccedilotildees das variaacuteveis Todasas declaraccedilotildees devem ser incluiacutedas da seguinte formaCONSTVariaacutevel = valorAlgumas constantes estatildeo preacute definidas Por exemploPI ndash 31416Maxint - 32767Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 7Exemplos de definiccedilatildeo de constantePROGRAM CINCOUSES CRTCONSTNOME = lsquoANA FERREIRArsquoNUM = 100

LETRA =rsquoArsquoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 8

Capitulo III - Comando de Atribuiccedilatildeo31 Um comando de atribuiccedilatildeo eacute sempre do tipovariaacutevel = expressatildeoAs expressotildees podem serExpressotildees matemaacuteticas ndash Satildeo escritas linearmente usando a notaccedilatildeo matemaacutetica Osoperadores satildeoOperador Funccedilatildeo Operandos Resultado+ Somar Inteiro ou real Inteiro ou real- Subtrair Inteiro ou real Inteiro ou real Multiplicar Inteiro ou real Inteiro ou real Dividir Inteiro ou real RealDiv Quociente inteiro Inteiro InteiroMod Resto da divisatildeo Inteiro inteiroDeve-se observar as seguintes regrasNatildeo pode existir nenhuma operaccedilatildeo impliacutecitaDois operadores natildeo podem aparecer juntos ndash usa- se o parecircntesis para separarPor natildeo existir operador para a exponenciaccedilatildeo temos A B = EXP(BLN(A))Para cada ( deve existir um )O siacutembolo = significa atribua a e tem sentido diferente do igual da matemaacuteticaHierarquia dos operadores1ordm sinal unaacuterio2ordm parecircntesis3ordm funccedilotildees4ordm div mod5ordm + -Em caso de mesma hierarquia resolve-se da esquerda para a direitaExemplos de operaccedilatildeo matemaacuteticaA=2 B=3Expressatildeo Pascal ResultadoZ= A+B2Z=(A+B)2 Z=25Z=A B Z=EXP(LN(A)B) Z=8Z= 11 MOD A Z=1Z= 11 DIV A Z= 5Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 932 Principais Funccedilotildees Matemaacuteticas preacute definidasFunccedilatildeo Pascal Argumentos Resultado| x | Valor absoluto ABS(X) Inteiro ou real Inteiro ou reale X Exponencial de e EXP(X) Inteiro ou real RealSen(X) Seno de X SIN(X) X em radianos RealCos(X) Co seno de X COS(X) X em radianos RealArctg(x) Arco tangente de X ARCTAN(X) X em radianos RealLN(X) Logaritmo neperiano de X LN(X) Inteiro ou real RealArredondar ROUND(X) Real InteiroParte inteira de X TRUNC(X) Real InteiroParte fracionaacuteria de X FRAC(X) Real RealRaiz quadrada SQRT(X) Inteiro ou real RealX 2 SQR(X) Inteiro ou real RealSemente de no randocircmico RANDOMIZENo randocircmico entre 0 e 1 RANDOM Real

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 6: Resumo Teórico Turbo Pascal 7

LETRA =rsquoArsquoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 8

Capitulo III - Comando de Atribuiccedilatildeo31 Um comando de atribuiccedilatildeo eacute sempre do tipovariaacutevel = expressatildeoAs expressotildees podem serExpressotildees matemaacuteticas ndash Satildeo escritas linearmente usando a notaccedilatildeo matemaacutetica Osoperadores satildeoOperador Funccedilatildeo Operandos Resultado+ Somar Inteiro ou real Inteiro ou real- Subtrair Inteiro ou real Inteiro ou real Multiplicar Inteiro ou real Inteiro ou real Dividir Inteiro ou real RealDiv Quociente inteiro Inteiro InteiroMod Resto da divisatildeo Inteiro inteiroDeve-se observar as seguintes regrasNatildeo pode existir nenhuma operaccedilatildeo impliacutecitaDois operadores natildeo podem aparecer juntos ndash usa- se o parecircntesis para separarPor natildeo existir operador para a exponenciaccedilatildeo temos A B = EXP(BLN(A))Para cada ( deve existir um )O siacutembolo = significa atribua a e tem sentido diferente do igual da matemaacuteticaHierarquia dos operadores1ordm sinal unaacuterio2ordm parecircntesis3ordm funccedilotildees4ordm div mod5ordm + -Em caso de mesma hierarquia resolve-se da esquerda para a direitaExemplos de operaccedilatildeo matemaacuteticaA=2 B=3Expressatildeo Pascal ResultadoZ= A+B2Z=(A+B)2 Z=25Z=A B Z=EXP(LN(A)B) Z=8Z= 11 MOD A Z=1Z= 11 DIV A Z= 5Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 932 Principais Funccedilotildees Matemaacuteticas preacute definidasFunccedilatildeo Pascal Argumentos Resultado| x | Valor absoluto ABS(X) Inteiro ou real Inteiro ou reale X Exponencial de e EXP(X) Inteiro ou real RealSen(X) Seno de X SIN(X) X em radianos RealCos(X) Co seno de X COS(X) X em radianos RealArctg(x) Arco tangente de X ARCTAN(X) X em radianos RealLN(X) Logaritmo neperiano de X LN(X) Inteiro ou real RealArredondar ROUND(X) Real InteiroParte inteira de X TRUNC(X) Real InteiroParte fracionaacuteria de X FRAC(X) Real RealRaiz quadrada SQRT(X) Inteiro ou real RealX 2 SQR(X) Inteiro ou real RealSemente de no randocircmico RANDOMIZENo randocircmico entre 0 e 1 RANDOM Real

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 7: Resumo Teórico Turbo Pascal 7

No randocircmico entre 0 e o paracircmetro RANDOM(x) Inteiro realExemplosConsidere que A= 30 B=20 C=7 D=4O valor da expressatildeo Z= AB (C MOD D) seraacute igual a3020 (7 MOD 4)3020 315 3 = 4533 Expressotildees LoacutegicasSatildeo expressotildees cujos operadores satildeo loacutegicos e cujos operandos satildeo relaccedilotildees tendocomo resposta um valor booleano (true ou false)Os operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorExemplosPara X=1 Y=2 Z=5 considere a expressatildeo X X + Y gt Z assim teremos 1 1 + 2 gt 53gt 5 o resultado eacute FALSEPara X=4 Y=3 Z=1 considere a expressatildeo X X + Y gt Z assim teremos 4 4 + 3 gt 119 gt 1 logo o resultado eacute TRUEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 10Os operadores loacutegicos AND OR e NOT significam e ou natildeo sendo usados paraconjunccedilatildeo disjunccedilatildeo e negaccedilatildeo34 Expressotildees LiteraisSatildeo expressotildees cujas respostas satildeo valores literaisbull Principais funccedilotildees literais preacute definidasFunccedilatildeo Descriccedilatildeo ExemploORD(X) Retorna um valor inteiro que indica o valorde X no coacutedigo ASCIIZ=ORD(lsquoArsquo)Z=65CHR(X) Retorna um caracter representado por X ndashinteiro ndash no coacutedigo ASCIIZ=CHR(65) Z=rsquoArsquoSUCC(X) Retorna o sucessor de X no coacutedigo ASCII Z=SUCC(lsquoArsquo) Z=rsquoBrsquoPRED(X) Retorna o predecessor de X no coacutedigoASCIIZ=PRED(166) Z=165UPCASE(X) Retorna X maiuacutesculo Z=UPCASE(lsquoarsquo) z=rsquoArsquo35 Principais funccedilotildees para tratamento de cadeias de caracteres (string)Funccedilatildeo DescriccedilatildeoCOPY(cadeia posiccedilatildeo nuacutemero) Copia da cadeia a partir da posiccedilatildeo o numero decaracteresLENGTH(cadeia) Retorna o numero de caracteres da cadeiaPOS(cadeia1cadeia2) Retorna em que posiccedilatildeo a cadeia1 aparecedentro da cadeia2DELETE(cadeia posiccedilatildeo nuacutemero) Apaga a partir da posiccedilatildeo o nuacutemero decaracteresINSERT(cadeia1 cadeia2 posiccedilatildeo) Insere na cadeia2 a cadeia1 a partir da posiccedilatildeoCONCAT(cadeia1cadeia2) ouCadeia1+cadeia2+

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 8: Resumo Teórico Turbo Pascal 7

Soma as cadeiasVAL(cadeia variaacutevel coacutedigo) Transforma a cadeia no equivalente numeacutericointeiro ou real conforme a variaacutevel Se tiver ecircxito ocoacutedigo vale zeroSTR(valor tamanho cadeia) Transforma um valor em uma cadeiaExemplo de programa usando as funccedilotildees de manipulaccedilatildeo de cadeiasPROGRAM FUNCAOUSES CRTCONSTCADEIA = UNIVERSIDADE DO ESTADO DO RIO DE JANEIROSEQ = VERSIGLA = UERJNUM1=123NUM2=1234NUM3 = 5678VARABINTEGERCSDEHSTRING[60]Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 11FCODINTEGERGREALBEGINCLRSCRA=POS(SEQCADEIA) posiccedilatildeo em que seq aparece na cadeiaWRITELN(A = A)a partir da 4 posiccedilatildeoB=LENGTH(CADEIA)quantidade de caracteres de cadeiaWRITELN(B = B)40 caracteresC=COPY(CADEIA176)copia de cadeia a partir da posiccedilatildeo 176 caracteresWRITELN(C = C)ESTADOD=CADEIADELETE(D116)retira da frase 16 caracteres a partir da posiccedilatildeo 1WRITELN(D = D)E=CADEIA + - +SIGLAsoma as duas cadeiasWRITELN(E = E)VAL(NUM1FCOD) transforma 123 em numero inteiroWRITELN(F = F E INTEIRO)VAL(NUM2GCOD) transforma 1234 em numero realWRITELN(G = G62 E REAL)STR(NUM352H)transforma 5678 em stringWRITELN(H = H)READKEYENDResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 12

Capiacutetulo IVndash Comandos de Entrada e Saiacuteda41 Os comandos de entrada satildeoREAD(arq lista de variaacuteveis eou constantes eou expressotildees)ouREADLN(arq lista de variaacuteveis eou constantes eou expressotildees)O comando READ lecirc permanece na mesma linha O comando READLN lecirc e muda delinhaOs valores somente seratildeo atribuiacutedos as variaacuteveis apoacutes pressionarmos a tecla ltentergtExemplosREAD(NOME)

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 9: Resumo Teórico Turbo Pascal 7

READLN(IDADE)READKEYO comando READKEY lecirc a tecla pressionada atribuindo a uma variaacutevel CHAR Natildeo eacutenecessaacuterio pressionar ltentergtExemploRESP=READKEY a tecla pressionada seraacute atribuiacuteda a RESP42 Os comandos de saiacuteda satildeoWRITE(arq lista de variaacuteveis eou constantes eou expressotildees)ouWRITELN(arq lista de variaacuteveis eou constantes eou expressotildees)OndeO comando WRITE exibe e permanece na mesma linha O comando WRITELN exibe emuda de linhaArq nome do arquivo selecionado para ler ou exibir O uso de arquivos seraacute examinadono decorrer do cursoPodemos enviar dados para a impressora para tanto o nome do arquivo eacute lst Devemosincluir o comando USES PRINTER Obs Deve existir uma impressora conectada aocomputadorSe a unidade selecionada para exibir for o monitor natildeo eacute necessaacuterio especificar oarquivoExemplosWRITE(lsquoA =rsquo A) exibe a mensagem entre apoacutestrofos A= e exibe o conteuacutedo da variaacutevelA mantendo o cursor na mesma linhaWRITELN(A+B) exibe a soma da variaacutevel A + BWRITE(LST lsquoIsto vai para a impressorarsquo)43 Comandos e funccedilotildees para controle do viacutedeo431 Comando para limpar a telaCLRSCR significa clear screenPara usarmos este comando eacute necessaacuterio especificar USES CRT no iniacutecio do programa432 Comando para apagar a partir do cursor ateacute o final da linhaResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 13CLREOL significa clear end of line433 Comando para posicionar o cursor na telaGOTOXY(XY)O comando posiciona na coluna X e na linha Y sabendo-se que a tela tem 80 colunas e25 linhas e que a primeira posiccedilatildeo eacute 11Exemploprogram exemplo333uses crtvar xybytebeginclrscrgotoxy(105)writeln(Estou na coluna 10 linha 5)x=40y=20gotoxy(xy)writeln(Estou na coluna 40 linha 20)x=x-20x = 40-20 =20y=y+1 y =20+1=21gotoxy(xy)writeln(Estou na linha seguinte pressione qq tecla para

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 10: Resumo Teórico Turbo Pascal 7

continuar)readkeygotoxy(2921)clreolwriteln(lt------- observe o que apagou)readkeyend434 Comando para formatar os valores exibidosWRITE(variaacutevel nuacutemero total de casas casas decimais)ExemploPROGRAM exemplo334uses crtvarr reali integernome string[10]beginclrscrr=31416writeln(r)writeln(r104)i=10writeln(i)writeln(i5)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 14nome= Alexwriteln(nome)writeln(nome10)readkeyendResultaria na seguinte tela3141599999902E00314161010ALEXALEX435 Comando para alterar a cor das letrasTEXTCOLOR(coacutedigo da cor)Exemplo TEXTCOLOR(1) todas as letras passam para azul ateacute que outro comandoaltereOs coacutedigos das cores podem ser agrupados em 0-7 cores pasteis 8-15 cores fortes 16-23 cores piscantesNumeroda corcor Numero dacorcor Numeroda corcor0 Preto 8 Cinza escuro 16 Preto piscante

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 11: Resumo Teórico Turbo Pascal 7

1 Azul 9 Azul claro 17 Azul piscante2 Verde 10 Verde claro 18 Verde piscante3 Ciano 11 Ciano claro 19 Ciano piscante4 Vermelho 12 Vermelho claro 20 Vermelho piscante5 Magenta 13 Magenta claro 21 Magenta piscante6 Marrom 14 amarelo 22 Amarelo piscante7 Cinza claro 15 Branco 23 Cinza piscanteA cor da letra padratildeo eacute branca (15)45 Comando para alterar a cor do fundo da telaTEXTBACKGROUND(coacutedigo da cor)Os coacutedigos das cores satildeoNumero da cor cor 4 Vermelho0 (padratildeo) Preto 5 Magenta1 Azul 6 Marrom2 Verde 7 Cinza claro3 Ciano336 Comando para eliminar a linha onde esta o cursorDELLINEResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 15As demais linhas abaixo sobem uma linha337 Comando para inserir linha na posiccedilatildeo do cursorINSLINEAs demais linhas descem uma linhaExemploprogram exemplo334uses crtbeginclrscrwriteln(linha 1)writeln(linha 2)writeln(linha 3)writeln(linha 4)writeln(pressione qq tecla para continuar)readkeygotoxy(12)vaacute para coluna 1 linha 2dellinegotoxy(202)write(lt--- observe que linha 2 apagou)readkey aguarda pressionar qq teclagotoxy(202) VA para coluna 20 linha 2clreol limpa a partir do cursorinsline insere uma linha na posiccedilatildeo do cursorgotoxy(12)write(inseri a linha 2)readkeyendExemplosElabore um programa Pascal que1 Leia dois valores determine e exiba a soma elesprogram exercicio1uses crt

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 12: Resumo Teórico Turbo Pascal 7

varabc realbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)c=A+Bwriteln(A soma e C102)readkeyend2 Leia uma determinada quantia em Reais e exiba a menor quantidade de ceacutedulas de1005010 e 1 real que seratildeo necessaacuterios para obtermos esta importacircnciaprogram trocouses crtResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 16varvalornota100nota50nota10nota1resto100resto50resto10integerbeginclrscrwrite(Digite o valor R$)readln(valor)nota100=valor div 100resto100=valor mod 100nota50= resto100 div 50resto50 =resto100 mod 50nota10=resto50 div 10resto10=resto50 mod 10nota1= resto10writeln(nota100 notas de R$100)writeln(nota50 notas de R$ 50)writeln(nota10 notas de R$10)writeln(nota1 notas de R$1)readkeyend3 Leia uma frase e exiba-a centralizada na telaprogram centrauses crtvarfrase string[80]beginclrscrwrite(Digite a frase )readln(frase)writeln(frase(40+trunc(length(frase)2)))readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 17

Capitulo V ndash Estruturas de decisatildeo (ou seleccedilatildeo)51 Decisatildeo simplesIF condiccedilatildeo THEN comandoOu

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 13: Resumo Teórico Turbo Pascal 7

IF condiccedilatildeo THENBEGINComando 1Comando 2ENDO comando ou o bloco de comandos eacute executado caso a condiccedilatildeo seja verdadeiraOs operadores relacionais satildeoOperador Significado= Igualltgt Diferentelt= Menor ou igualgt= Maior ou iguallt Menorgt maiorTambeacutem podemos usar os operadores loacutegicosOperador SignificadoAND E As duas condiccedilotildees devem ser verdadeirasOR ou Uma das duas condiccedilotildees deve ser verdadeiraNOT natildeo A condiccedilatildeo natildeo deve ser verdadeiraExemploprogram decisao1uses crtvarabrealbeginclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if A=B thenwrite(Os valores sao iguais a102)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 1852 Decisatildeo compostaIF condiccedilatildeo THENComando ou bloco de comandos 1ELSEComando ou bloco de comandos 2Se a condiccedilatildeo for verdadeira o bloco de comandos 1 eacute executado Se a condiccedilatildeo for falsao bloco de comandos 2 eacute executadoO comando anterior ao ELSE natildeo tem ()ExemploPrograma para determinar o maior de dois valores reais lidosprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 14: Resumo Teórico Turbo Pascal 7

if AgtB thenwrite(A e o maior A102)elsewrite(B e o maior B102)readkeyendObserve que se os valores forem iguais seraacute impresso que B eacute o maior Para corrigirmosisto iremos colocar outro IF dentro do primeiro IFprogram maior_de_doisuses crtvarabrealbeginmaior de dois valores lidosclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)if AgtB thenwrite(A e o maior A02)elseif A = B thenwrite(A e B sao iguais a A02)elsewrite(B e o maior B02)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 19Programa para determinar o maior de 3 valores lidos Os valores satildeo diferentes entre siprogram maior_de_tresuses crtvarabcrealbeginmaior de tres valores lidosos valores sao diferentes entre siclrscrwrite(Digite A )readln(A)write(Digite B )readln(B)write(Digite C )readln(C)if (AgtB) and (AgtB) thenwrite(A e o maior A02)elseif (BgtA) and (BgtC) thenwrite(B e o maior B02)elsewrite(C e o maior C02)readkeyend43 Seleccedilatildeo muacuteltiplaCASE opcao OF

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 15: Resumo Teórico Turbo Pascal 7

Lista de alvos 1 BEGINENDLista de alvos 2 BEGINENDELSE comando 3ENDObs a variaacutevel opcao deve ser do tipo INTEGER ou CHARA lista de alvos pode ser uma constante numeacuterica inteira do tipo caracter um conjunto devalores ou um intervalo de valoresprogram escolhauses crtvaropcaocharbeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 20exemplo do CASEclrscrwrite(Digite a opcao )readln(opcao)escolha entre as opccedilotildees listadascase opcao of1 write(Voce digitou 1)26write(Voce digitou entre 2 e 6)AEIOUwrite(Voce digitou vogalmaiuscula)elsese natildeo for nenhuma das opcoesbegintextcolor(19)write(voce digitou outro caracter)end este end encerra o else end este end encerra o casereadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 21

Capitulo VI ndash Estruturas de repeticcedilatildeo61 Comando WHILERepete um conjunto de instruccedilotildees enquanto uma condiccedilatildeo for verdadeiraDevemos estar atentos para que a condiccedilatildeo se torne falsa durante a execuccedilatildeo parainterromper a repeticcedilatildeoA condiccedilatildeo eacute testada antes de entrar na estrutura de repeticcedilatildeoWHILE condiccedilatildeo DOComando ou bloco de comandosFLAG eacute um tipo de valor que eacute lido e que representa o final dos dados Seu valor natildeopode ser considerado nos caacutelculos realizadosExemplosPrograma para calcular a soma de um conjunto de valores reais positivos O Flag eacute umvalor negativo O termino ocorreraacute quando o flag for lidoprogram repete1uses crtvarnumsomareal

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 16: Resumo Teórico Turbo Pascal 7

beginclrscrwrite(Digite um numero )readln(num)while num gt= 0 do enquanto nao for o flag repitabeginsoma=soma+numwrite(Digite um numero )readln(num)endwriteln(A soma e soma02)readkeyendPrograma para calcular a soma de 5 valores reaisNeste caso o termino da repeticcedilatildeo ocorreraacute quando o contador de valores lidos chegar a 5program repete2uses crtvarnumsomarealcontintegerbeginclrscrcont=0while cont lt 5 do enquanto o contador for menor que 5repitabeginwrite(Digite um numero )readln(num)soma=soma+numResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 22cont=cont+1endwriteln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nUNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscr

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 17: Resumo Teórico Turbo Pascal 7

cont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyend62 Comando REPEAT UNTILA loacutegica eacute semelhante ao comando While somente que repete ateacute a condiccedilatildeo sejaverdadeiraA condiccedilatildeo eacute testada no final do conjunto de comandosREPEATComando1Comando 2Comando nResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 23UNTIL condiccedilatildeoExemplosPrograma para calcular a soma de 5 valores reaisprogram repete3uses crtvarnumsomarealcontintegerbeginclrscrcont=0repeatwrite(Digite um numero )readln(num)soma=soma+numcont=cont+1until cont=5repete ate que cont = 5writeln(A soma e soma02)readkeyendPrograma para ler nome idade e sexo de um conjunto de pessoas calcular e exibira) Nome da pessoa mais velhab) Meacutedia das idades dos homensc) Meacutedia das idades das mulheresO flag eacute a palavra pare no campo do nome Usando o comando WHILE e o comandoREPEATprogram exemplo521uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbegin

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 18: Resumo Teórico Turbo Pascal 7

clrscrwriteln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idadewhile nome ltgt pare dobeginResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 24if idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)endendmediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyendO mesmo programa usando o REPEAT

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 19: Resumo Teórico Turbo Pascal 7

program exemplo522uses crtvarnomenomevstring[30]idadeidadevcontmcontfsomamsomafintegersexocharmediammediafrealbeginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 25writeln(Entrada dos Dados45)writelnwritelnleitura da primeira informacaowrite(Digite o Nome---gt)readln(nome)write(Digite a Idade--gt)readln(idade)write(Digite o sexo---gt)readln(sexo)nomev=nomeidadev=idaderepeatif idade gt idadev thenbeginidadev=idadenomev=nomeendif sexo = m thenbeginsomam=somam+idadecontm=contm+1endelsebeginsomaf=somaf+idadecontf=contf+1endwrite(Digite o Nome---gt )readln(nome)if nome ltgt pare thenbeginwrite(Digite a Idade--gt )readln(idade)write(Digite o sexo---gt )readln(sexo)enduntil nome= pare mediam=somamcontmmediaf=somafcontfclrscrgotoxy(110)writeln(Nome da pessoa mais velha enomev comidadev3 anos)writeln(Media da idade dos homens mediam02)

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 20: Resumo Teórico Turbo Pascal 7

writeln(Media da idade das mulheres mediaf02)writelnwritelntextcolor(20)write(Pressione qq tecla para encerrar)readkeyend53 Comando FORRepete uma quantidade determinada de vezesResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 26bull FOR I= valor inicial TO valor final DOComando ou bloco de comandosA variaacutevel I chamada de variaacutevel de controle eacute inicializada com o valor inicial executatodas as instruccedilotildees do bloco de comandos e retorna para o iniacutecio do comandoAcrescenta uma unidade a variaacutevel de controle e verifica se eacute superior ao valor final seafirmativo encerra o comando passando para a instruccedilatildeo seguinte ao termino do blocoO bloco eacute executado pelo menos uma vezA variaacutevel de controle natildeo pode ter seu valor alterado dentro do bloco e eacute do tipoINTEGER ou CHAR desde que a variaccedilatildeo seja ordinal(obedecendo a ordem doscaracteres ASCII)bull FOR I= valor final DOWNTO valor inicialComando ou bloco de comandosIraacute decrescer os valores da variaacutevel de controleExemplosImpressatildeo dos valores de 1 ateacute 10 Impressatildeo das letras de a ateacute zprogram ex531uses crtvariintegerbeginclrscrexibe os valores de 1 ate 10for i=1 to 10 dowriteln(i)readkeyendprogram ex532uses crtvaricharbeginclrscrexibe os valores de a ate zfor i=a to z dowriteln(i)readkeyendFatorial de um nuacutemero n lido Impressatildeo das letras de z ateacute aprogram fatorialuses crtvarifatnintegerbeginclrscrwrite(Digite o valor )readln(n)fat=1

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 21: Resumo Teórico Turbo Pascal 7

for i=n downto 1 dofat=fatiwriteln(O fatorial de ne fat)readkeyendprogram ex533uses crtvaricharbeginclrscrexibe os valores de z ate afor i=z downto a dowriteln(i)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 27

Capitulo VII Estruturas de Dados HomogecircneasAs variaacuteveis compostas homogecircneas conhecidas como Arrays matrizes variaacuteveisindexadas variaacuteveis subscritas ou tabelas em memoacuteria satildeo conjunto de elementos demesma natureza identificados por um iacutendiceOs arrays podem ser unidimencionais (tambeacutem satildeo chamados de vetores) quandopossuem apenas uma dimensatildeo ou multidimensionais quando posuem mais de umadimensatildeo71 VetoresVetores satildeo conjunto de dados com uma uacutenica dimensatildeoPor exemploSupondo que o vetor NOTA contivesse os seguintes valoresNOTA100 75 43 82 601 2 3 4 5NOTA[4] conteria o valor 82Declaramos as variaacuteveis como Array da seguinte formaVARNOME ARRAY[iacutendice inicial iacutendice final] OF tipo de variaacutevelO iacutendice inicial e o iacutendice final satildeo constantes inteiras o caracteres ordinaisExemplosVAR nome array[1100] of string[30] nome eacute uma variaacutevel com 100 elementos e cadaelemento pode ter ateacute 30 caracteresVAR idade array [-1010] of integer o iacutendice da variaacutevel idadeVAR cod array [lsquoarsquorsquozrsquo] of charNo corpo do programa as variaacuteveis satildeo identificadas pelo seu nome e pelo iacutendice que alocalizaNome[1]=rsquoAlexandrersquo Idade[-5]=52 Cod[lsquoarsquo]= lsquoxrsquoVetor1Uses crtVarnotaarray[110] of realicharbeginclrscrfor I= 1 to 10 dobeginwrite(Digite o itermo) readln(nota[i])

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 22: Resumo Teórico Turbo Pascal 7

endfor I=a to e dowriteln(nota[i])readkeyendprogram vetor2uses crtvarnotaarray[az] of realicharbeginclrscrfor I= a to e dobeginwrite(Digite o itermo)readln(nota[i])endfor I=a to e dowriteln(nota[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 2872 MatrizesAs matrizes satildeo conjunto de dados de duas ou mais dimensotildees Ateacute 3 dimensotildees existerepresentaccedilatildeo no espaccedilo cartesianoA declaraccedilatildeo de uma variaacutevel tipo matriz eacute do tipoVARX ARRAY[110120] OF REAL onde x tem 2 dimensotildees uma com 10 elementos eoutra com 20 elementos totalizando 200 elementos reaisA referecircncia a variaacutevel eacute realizada por intermeacutedio de seus iacutendicesX[11]= 507OuI=5 J=8X[ij]= 23Exemplosbull Programa que leia duas matrizes de 3x3 elementos reais determine sua somaImprimir sob a forma de tabelaprogram exemplo62uses crtvarabcarray[1515] of realijintegerbeginler duas matrizes e determinar sua somaclrscrwrite(Matriz A44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite A[i2j2] )readln(A[ij])endclrscr

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 23: Resumo Teórico Turbo Pascal 7

writeln(Matriz B44)writelnwritelnfor i=1 to 3 dofor j=1 to 3 dobeginwrite(Digite B[i2j2] )readln(B[ij])C[ij]=A[ij]+B[ij]endimprimir as duas matrizesclrscrwriteln(Matriz Soma27)for i= 1 to 3 dobeginfor j=1 to 3 dowrite(C[ij]02 )writelnendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 29readkeyendbull Programa que leia uma matriz de 3x3 elementos reais e determine a soma ddostermos cada linha e de cada colunaprogram matriz2uses crtvarcentraintegertitulostring[30]aarray[1313] of realslinha scolarray[13] of real ijintegerbeginclrscrtitulo=Leitura da Matrizcentra determina o formato para centralizar o titulocentra=trunc(40+length(titulo)2) writeln(titulocentra)for i= 1 to 3 dofor j= 1 to 3 dobeginwrite(Digite A[i1j1] = )readln(A[ij])endcalculo da soma da linhafor i=1 to 3 dofor j=1 to 3 doslinha[i]=slinha[i]+a[ij]calculo da soma da colunafor j= 1 to 3 dofor i=1 to 3 doscol[j]=scol[j]+a[ij]impressao do resultado

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 24: Resumo Teórico Turbo Pascal 7

clrscrwriteln( Impressao do Resultado) writelnwrite(Matriz Lida15)gotoxy(253)writeln(Soma )writelnfor i=1 to 3 dobeginfor j=1 to 3 dowrite(a[ij]52 )writeln( slinha[i]52)endwritelnfor i= 1 to 3 dowrite(scol[i]52 )Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 30readkeyend72 Exerciacutecios Resolvidosbull Procura sequumlencial em uma tabela Consideraremos uma tabela com nomes eleremos um determinado nome para verificar se o mesmo se encontra na tabela Oprograma deveraacute prever a procura de vaacuterios nomes ateacute que o usuaacuterio responda quenatildeo que continuarprogram pesqsequses crtvarnomearray[1100] of string[30]nomepstring[30]acheibooleaninintegercontinuacharbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endwhile continua ltgt (N) dobeginclrscrwrite(Digite o nome a ser procurado )readln(nomep)achei=falsei=0while (ilt n) and (achei=false) dobegini=i+1if nomep = nome[i] thenachei= true

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 25: Resumo Teórico Turbo Pascal 7

endif achei = true thenwriteln(O nome nomep foi localizado na i166posicao)elsewriteln(O nome nomep nao foi localizado)write(Deseja continuar SN )continua=readkeycontinua=upcase(continua)endendbull Ordenaccedilatildeo de valoresExistem vaacuterios processos para ordenar valores O que seraacute apresentado abaixo eacutedenominado meacutetodo da seleccedilatildeoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 31program classificauses crtvarnomearray[1100] of string[30]auxstring[30]ijnintegerbeginclrscrleitura da tabela com os nomeswrite(Digite a quantidade de dados )readln(n)for i=1 to n dobeginwrite(Digite o i nome )readln(nome[i])endrotina de ordenacaofor i= 1 to n-1 dofor j=i+1 to n doif nome[i] gt nome[j] thenbeginaux=nome[i]nome[i]=nome[j]nome[j]=auxendimpressao dos valoresclrscrwriteln(Valores ordenados)for i= 1 to n dowriteln(nome[i])readkeyend1048707 Outro processo de ordenaccedilatildeo eacute o chamado Bubble Sortprogram bubbleuses crtvaraarray[123] of integerauxinteger

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 26: Resumo Teórico Turbo Pascal 7

kbooleanijintegerbeginclrscrpara facilidade iremos preencher a tabela com valoresaleatorios de 0-100randomizecria a semente para os numeros aleatoriosfor i= 1 to 23 doa[i]=trunc(random(100))writeln(Valores inciciais)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 32for i=1 to 23 dowriteln(a[i]7)k=falsewhile k = false dobegink=truefor i= 1 to 22 doif a[i] gt a[i+1] thenbeginaux=a[i]a[i]=a[i+1]a[i+1]=auxk=falseendendreadkeygotoxy(201)writeln(Valores ordenados)for i=1 to 23 dobegingotoxy(20i+1)write(a[i]7)endreadkeyend1048707 A manipulaccedilatildeo de cadeias tem vaacuterios usos praacuteticos O programa abaixo usa umacadeia de 80 caracrteres de linha dupla horizontal para dividir a tela em duas partesprogram splitscreenuses crtvardividerstring[255]beginclrscrfillchar(dividersizeof(divider)205)divider[0]=chr(80)gotoxy(114)write(divider)readkeyendA primeira instruccedilatildeo da rotina fillchar(dividersizeof(divider)205)

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 27: Resumo Teórico Turbo Pascal 7

Preenche a cadeia toda da posiccedilatildeo 0 a 255 com o valor ASCII 205 Para fazer com quea cadeia preencha a linha na tela eacute necessaacuterio alterar o tamanho da cadeiaO byte de tamanho da cadeia deve ser definido como 80Divider[0]=80Agora a cadeia pode ser exibida na tela de forma agradaacutevel1048707 Rotina para localizaccedilatildeo e substituiccedilatildeo de cadeiasDada a frase Diga ao Fernando para pagar os R$1000 que ele me deve SubstituirFernando por RaulResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 33Program acha_e_trocauses crtvarfrasestring[80]achatrocastring[20]iintegerbeginclrscracha=Fernandotroca=Raulfrase=Diga ao Fernando para pagar os R$1000 que ele medevewriteln(frase)i=pos(achafrase)localiza o texto de acha em frasedelete(fraseilength(acha))apaga em frase os caracteresde achainsert(trocafrasei)insere na frase o texto troca apartir de iwriteln(frase)readkeyend1048707 Entrada numeacuterica livre de erroUm dos problemas para entrada de valores numeacutericos eacute que o usuaacuterio poderaacute digitardados natildeo numeacutericos e gerar um erro de execuccedilatildeo do programa A forma de solucionareste aspecto eacute ler o valor para uma variaacutevel string e converte-la para numeacuterica Esteprograma emite uma mensagem de erro caso seja digitado um valor natildeo numeacutericoprogram entra_numerouses crtvaridadecodintegeridade_alfastring[10]beginrepeatclrscrwrite(Digite sua idade )readln(idade_alfa)val(idade_alfaidadecod)converte idade_alfa p idadeif cod ltgt 0 then se retornar com errobegintextcolor(red+blink)writeln(Idade errada Tente de novo)delay(1000)textcolor(white)

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 28: Resumo Teórico Turbo Pascal 7

enduntil cod = 0 ate que nao tenha errowriteln(Sua idade e idade)readkeyend1048707 Remover espaccedilos em branco de uma fraseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 34Program tira_brancouses crtvarfrasestring[80]ijintegerbeginclrscrwrite(Digite uma frase )readln(frase)for j= 1 to length(frase) dobegini=pos( frase)delete(frasei1)endwriteln(frase)readkeyend1048707 Programa para separar as palavras de uma frase Cada frase contem um maacuteximode 10 palavras de 20 caracteres cadaprogram separa_palavrauses crtvarfrasestring[200]palstring[20]palavraarray[110] of string[20]ikiniciotamintegerbeginclrscrwrite(Digite a frase )readln(frase)k=1inicio=1tam=1for i=1 to length(frase) doif (frase[i] = ) thenbegintam=i-iniciopalavra[k]=copy(fraseiniciotam)k=k+1inicio=i+1endfor i=1 to k dowrite(palavra[i] )readkey

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 29: Resumo Teórico Turbo Pascal 7

end1048707 Programa para traduzir palavras do portuguecircs para o inglecircs (palavra a palavra)program tradutorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 35uses crtvarportuguesinglesarray[110] of string[20]palavrastring[20]iintegeracheibooleancontcharbeginclrscrleitura das tabelaswriteln( Leitura das Tabelas)writeln( Portugues Ingles)for i=1 to 10 dobegingotoxy(2i+2)write(i166 palavra )readln(portugues[i])gotoxy(35i+2)readln(ingles[i])endleitura da palava a traduzirclrscrwrite(Digite a palavra a traduzir )readln(palavra)i=0achei=falsewhile (achei = false) and (ilt=10) dobegini=i+1if portugues[i] = palavra thenachei=trueendif achei = false thenwriteln(A palavra palavra nao esta cadastrada)elsewriteln(A traducao de palavra e ingles[i])readkeyend1048707 Programa para calcular a ldquosurpresinhardquo da megasenaInicialmente sorteamos 6 nuacutemeros ordenamos os valores e verificamos se cada valor eacutediferente do seguinte Caso afirmativo sorteamos um novo valor e repetimos o processoateacute que todos os valores sejam diferentesprogram surpresinhauses crtvarsortearray[16] of integerijtintegerigualboolean

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 30: Resumo Teórico Turbo Pascal 7

beginclrscrResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 36sorteio dos 6 primeiros valoresrandomizefor i= 1 to 6 dosorte[i]=trunc(random(60))igual=truewhile igual = true dobeginigual=falserotina de ordenacaofor i= 1 to 5 dofor j=i+1 to 6 doif sorte[i] gt sorte[j] thenbegint=sorte[i]sorte[i]=sorte[j]sorte[j]=tendverifica se existem 2 iguaisfor i= 1 to 5 doif sorte[i] = sorte[i+1] thenbeginsorte[i+1]=trunc(random(60))igual=trueendendwriteln(Valores sorteados)for i= 1 to 6 dowriteln(sorte[i])readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 37

Capitulo VIII Estruturas de Dados Heterogecircneas81 RegistrosQuando nos referimos a algum elemento geralmente o caracterizamos por um conjuntode dados loacutegicamente relacionados e de diferentes tipos de informaccedilatildeo Por exemplo senos referimos a dados pessoais estamos querendo o nome idade sexo filiaccedilatildeoendereccedilo etcEste conjunto chama-se registro ou RECORD em inglecircs e tem as seguintescaracteriacutesticasa) conteacutem um nuacutemero fixo de elementos chamados camposb) os campos podem ser de tipos diferentesc) cada campo tem um nome proacuteprio chamado de identificador do campoEstabelecemos os registros da seguinte formaProgram nomeTypeNome_do_registo = recordCampo1tipo

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 31: Resumo Teórico Turbo Pascal 7

Campo2tipoEndVarNome_da_variavelnome_do_registroPor exemploProgram exemploUses crtTypeficha = recordnomestring[30]idadeintegersexo charsalario realendvarfuncionariofichaA variaacutevel funcionario tem os campos de FichaPara nos referenciarmos a um determinado componente dentro do programa indicamos onome da variaacutevel () nome do campoPor exemploFuncionarionome = lsquoAlexrsquoFuncionariosalario=10000001048707 Os nomes dos campos podem ser arraysTypeResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 38Ficha = recordNomestring[30]Notaarray[13] of realEndVarAlunofichaNo programa nos referimos a primeira nota do aluno da seguinte formaAlunonota[1]=10Alunonota[2]=751048707 As variaacuteveis tambeacutem podem ser arraysTypeFicha = recordNomestring[30]Notaarray[13] of realEndVarAlunoarray[1100] of fichaNo programa nos referimos ao 1 aluno da seguinte formaAluno[1]nome=rsquoAlexrsquoAluno[1]nota[1]=10ExerciacutecioElabore um programa pascal que leia nome idade sexo e salaacuterio de um conjunto depessoas ordene e exiba em ordem ascendente por nome A quantidade maacutexima depessoas eacute 100 e eacute lida no iniacutecio do programaprogram ordenauses crttypecadastro = record

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 32: Resumo Teórico Turbo Pascal 7

nomestring[30]idadeintegersexocharsalariorealendvarpessoaarray[1100] of cadastroauxcadastroijnintegerbeginclrscrwrite(Digite a quantidade de pessoas )readln(n)clrscrwriteln(Entrada de dados48)for i=1 to 80 doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 39write(205)writelnfor i= 1 to n dobeginclrscrwriteln(i2167 Pessoa ) writelnwrite(Digite o nome ) readln(pessoa[i]nome)write(Digite a idade )readln(pessoa[i]idade)write(Digite o sexo )readln(pessoa[i]sexo)write(Digite o salario )readln(pessoa[i]salario)endrotina de ordenacaofor i=i to n-1 dofor j=i+1 to n doif pessoa[i]nome gt pessoa[j]nome thenbeginaux=pessoa[i]pessoa[i]=pessoa[j]pessoa[j]=auxendrotina de exibicaoclrscrwriteln(Valores Ordenados48)for i=1 to 80 dowrite(205)writeln(Nome15Sexo15Idade15Salario15)for i= 1 to n dowith pessoa[i] dowriteln(nome15sexo15idade15salario152)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 40

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 33: Resumo Teórico Turbo Pascal 7

Capitulo IX ndash Sub RotinasA complexidade do desenvolvimento dos softwares exigem algoritmos complexos quenecessitam ser divididos em partes para poderem ser resolvidosO uso da modularizaccedilatildeo permitiraacute uma maior legibilidade dos software uma melhormanutenccedilatildeo enfim um menor custo e prazo de desenvolvimento91 Utilizaccedilatildeo da Sub RotinasAs sub rotinas podem ser as PROCEDURES e as FUNCTION que satildeo trechos deprograma que podem ser invocados em qualquer parte do programa retornando apoacutes ocomando que a chamouA diferenccedila entre os dois tipos estaacute no fato que uma PROCEDURE pode ou natildeo retornarum valor enquanto uma FUNCTION sempre iraacute retornar um valorO Turbo Pascal dispotildee de um conjunto de rotinas preacute definidas Algumas destas rotinas jaacuteforam examinadas nos capiacutetulos anterioresAs sub-rotinas aparecem no inicio do programa com a seguinte sintaxeProgram nomeUses crt e demais unidades necessaacuteriasVar variaacuteveis globaishellipPROCEDURE ltnomegt [(paracircmetros)]Var variaacuteveis locaisBeginhellipEndBeginltnomegt [(paracircmetros)]end92 Variaacuteveis Globais e variaacuteveis LocaisUma variaacutevel global eacute definida no iniacutecio do programa (antes das procedures) e eacute vista portodo o programa e proceduresUma variaacutevel local eacute definida dentro de uma procedure e somente eacute vista pelo subprograma onde foi criadoProcedures e functionPrograma principalResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 4193 Exemplo de programa usando procedures e variaacuteveis globaisEste programa eacute para realizar as 4 operaccedilotildees matemaacuteticas O diagrama abaixo mostracomo o programa principal estaacute ligado as vaacuterias tarefasprogram subrotinauses crtvartodas as variaveis sao globaisrespabrealopcaocharprocedure lebeginwrite(Digite o primeiro valor )readln(a)write(Digite o segundo valor )readln(b)endprocedure imprimebeginwriteln(A resposta e resp02)write(Pressione qq tecla para voltar ao menu)

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 34: Resumo Teórico Turbo Pascal 7

readkeyendprocedure somabeginclrscrwriteln (Rotina de Soma30)leresp=a+bProgramaprincipalSoma Subtrai Multiplica Dividelecircimprime As subrotinas lecirc eimprime serepetem em todosos moacutedulosResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 42imprimeendprocedure subtraibeginclrscrwriteln (Rotina de Subtracao30)leresp=a-bimprimeendprocedure multiplicabeginclrscrwriteln (Rotina de Multiplicacao30)leresp=abimprimeendprocedure dividebeginclrscrwriteln (Rotina de Divisao30)leresp=abimprimeendbeginprograma principalopcao=0while opcao ltgt 5 dobeginclrscrgotoxy(331)write(Menu Principal)

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 35: Resumo Teórico Turbo Pascal 7

gotoxy(286)write(1Soma)gotoxy(288)write(2Subtracao)gotoxy(2810)write(3Multiplicacao)gotoxy(2812)write(4Divisao)gotoxy(2814)write(5Fim do Programa)gotoxy(2818)write(Escolha uma opcao)opcao=readkeyif opcao ltgt 5 thencase opcao of1soma2subtrai3multiplica4divideelseResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 43gotoxy(2724)writeln(Opcao invalida - tecle algo)readkeyendfim do caseendfim do whileend94 ParacircmetrosOs paracircmetros tem como finalidade servir como pont de comunicaccedilatildeo bidirecional entre asub-rotina e o programa principal ou com uma sub-rotina hierarquicamente de niacutevel maisalto Os paracircmetros podem ser formais ou reaisSeratildeo paracircmetros formais quando forem declarados atraveacutes das variaacuteveis juntamentecom a identificaccedilatildeo do nome da sub-rotina os quais seratildeo tratados exatamente damesma forma como satildeo tratadas as variaacuteveis globais ou locaisConsidere o programa abaixoprogram parametrouses crtprocedure soma(abinteger)varzintegerbeginz=a+bwriteln(z)z e variavel localreadkeyendprograma principalvarxywzintegerbeginclrscrwrite(Digite x )readln(x)write(Digite y )readln(y)soma(xy)soma(34)endAs variaacuteveis a e b satildeo paracircmetros formais da sub-rotina soma Z eacute uma variaacutevel local esomente eacute reconhecida dentro da sub-rotina As variaacuteveis X e Y satildeo paracircmetros reais

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 36: Resumo Teórico Turbo Pascal 7

assim como os valores 3 e 495 Passagem de ParacircmetrosA passagem de paracircmetros pode ser por ser por valor ou por referecircncia951 Passagem por valorResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 44A passagem por valor caracteriza-se pela natildeo alteraccedilatildeo do valor do paracircmetro realquando o paracircmetro formal eacute manipulado dentro da sub-rotinaprogram parametro_valoruses crtprocedure soma(abcinteger)beginc=a+bendprograma principalvarwintegerbeginclrscrw=9876soma(34w)writeln(w)readkeyendObserve que a sub-rotina soma os valores de a com b armazenando em cNo programa principal passamos os paracircmetros 3 e 4 para a sub rotina O paracircmetro w eacuteum paracircmetro real que foi passado para a sub-rotina como valor Assim natildeo pode seralterado dentro da sub-rotina permanecendo com o valor existente antes da chamadaO valor impresso seraacute 9876 atribuiacutedo no iniacutecio do programa952 Passagem por referecircnciaA passagem de paracircmetro por referecircncia caracteriza-se pela ocorrecircncia de valor doparacircmetro real quando o paracircmetro formal eacute manipulado dentro da sub-rotinaA alteraccedilatildeo efetuada no paracircmetro formal corresponde a alteraccedilatildeo no paracircmetro realIdentificamos a passagem por referecircncia colocando na relaccedilatildeo de paracircmetros aexpressatildeo VARPor exemploProcedure troca (var ab real)Var auxrealBeginAux=aA=bB=auxEnd1048707 Calcular o fatorial de um numero lido usando procedureprogram fatorialuses crtprocedure fat(var vallongintninteger)variintegerbeginval=1for i= 1 to n doResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 45

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 37: Resumo Teórico Turbo Pascal 7

val=valiendvarresplongintkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)fat(respk)writeln(O fatorial de k e resp)readkeyendNeste caso a variaacutevel n eacute passada como valor e a variaacutevel val eacute passada como referecircncia96 FunctionUma function eacute um bloco de programa ao qual satildeo validadas todas as regras vistasanteriormente A diferenccedila eacute que uma function sempre retorna um valor no proacuteprio nomeda funccedilatildeo cujo tipo eacute definido na sua definiccedilatildeoUma function possui a seguinte sintaxeFunction ltnomegt [(paracircmetros)] lttipogtvarltvariaacuteveisgtbeginltcomandosgtendPor exemplo Funccedilatildeo para determinar o fatorial de um nuacutemeroprogram fatorial2uses crtfunction fat(ninteger) longintvarfatoriallongintiintegerbeginfatorial=1for i= 1 to n dofatorial=fatorialifat=fatorialendprograma principalvarkintegerbeginclrscrwrite(Digite um valor inteiro )readln(k)writeln(O fatorial de k e fat(k))fat(k) retorna com o fatorial de kreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 46

Capitulo X ArquivosA manipulaccedilatildeo de um conjunto de dados requer uma forma de armazenamento que

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 38: Resumo Teórico Turbo Pascal 7

permita ser acesso e tratamento de um grande volume de informaccedilotildees com facilidade101 Definiccedilatildeo do ArquivoOs arquivos em Pascal podem ser texto ou de tipo definido chamado de ldquotipadosrdquo ecompostos de registrosA sintaxe eacute a seguinte OndeTypeltarquivogt = [text] ou [file of lttipogt]varltvariaacutevelgt ltarquivogtltarquivogt nome do tipo do arquivolttipogt tipo do arquivo (text string integerrecord )ltvariaacutevelgt nome que seraacute usada dentro doprograma para representar o arquivo102 Principais comandos com arquivosInstruccedilatildeo Sintaxe DescriccedilatildeoAssign Assign(ltvariaacutevelgtrsquocaminhoarquivo)Associa a variaacutevel ao arquivo gravadoRewrite Rewrite(ltvariaacutevelgt) Cria o arquivo com o nome davariaacutevelSe o arquivo jaacute existir apaga oantigo e re-cria um novoReset Reset(ltvariaacutevelgt) Abre um arquivo existente e posiciona oponteiro no 1ordm registroAppend Append(ltvariaacutevelgt) Abre um arquivo texto existente eposiciona o ponteiro no ultimo registroWrite Write(ltvariaacutevelgt dados) Grava no arquivo ltvariaacutevelgt os dadosWriteln Writeln(ltvariaacutevelgtdados) Grava em um arquivo texto os dadosRead Read(ltvariaacutevelgtdados) Le do arquivo ltvariaacutevelgt os dadosReadln Readln(ltvariaacutevelgtdados) Le de um arquivo texto ltvariaacutevelgt osdadosClose Close(ltvariaacutevelgt) Fecha o arquivoSeek Seek(ltvariaacutevelgtposiccedilatildeo) Posiciona o ponteiro na posiccedilatildeo indicadaO primeiro registro eacute 0 (zero)Filesize Filesize(ltvariaacutevelgt) Retorna o numero de registros do arquivoFilepos Filepos(ltvariaacutevelgt) Retorna o numero do registro onde estaacuteposicionado O primeiro registroNot eof Not eof(ltvariaacutevelgt) Verifica o final do arquivoNot eoln Not eoln(ltvariaacutevelgt) Verifica o final da linha em um arquivotextoResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 47103 Meacutetodos de acessoOs arquivos satildeo um conjunto de informaccedilotildees gravadas fisicamente de forma sequumlencialEntretanto podemos acessar as informaccedilotildees de 3 formas distintasAcesso sequumlencial as informaccedilotildees satildeo acessadas uma apoacutes a outra assim como emuma fita k-7 Haacute a necessidade da leitura da informaccedilatildeo anterior para o prosseguimentoda leituraAcesso direto ou randocircmico as informaccedilotildees satildeo acessadas diretamente sem anecessidade da leitura da informaccedilatildeo anterior Os discos CD permitem que localizemosuma determinada muacutesica sem ouvirmos a trilha anteriorAcesso sequumlencial indexado O arquivo tem um outro arquivo auxiliar que conteacutem oendereccedilo da informaccedilatildeo desejada Eacute como se procuraacutessemos no iacutendice a informaccedilatildeodesejada e fossemos diretamente a paacutegina que procuramos

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 39: Resumo Teórico Turbo Pascal 7

No nosso curso veremos apenas os acessos sequumlenciais e de acesso direto104 Exemplos1048707 Arquivo tipo textoO programa abaixo lecirc uma frase e grava a frase lida Depois inclui novas frasesFinalmente exibe todas as frases gravadasprogram arq_textouses crtvararqtextfrasestring[255]contcharbeginclrscrassign(arqaarq1txt)associa arq ao arquivo aarq1txtrewrite(arq)cria o arquivo arq)trecho para ler uma frase e gravar no arquivocont=s continua = simwriteln(Leitura dos dados)while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para incluir novas frases no final do arquivoappend(arq) abre posicionando no final do arquivowriteln(Inclusao de novos dados)cont=s continua = simResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 48while cont ltgt N dobeginwrite(Digite uma frase )readln(frase)le do teclado uma frasewriteln(arqfrase)escreva em arq a frase lidawrite(Deseja continuar SN )readln(cont)cont=upcase(cont) transforma em maiusculaendclose(arq)fecha o arquivo arqtrecho para exibir as informacoes do arquivoreset(arq)abre posicionando no inicio do arquivowriteln(Informacoes do arquivo)while not eof(arq) do enquanto nao for o final do arquivorepitabeginreadln(arqfrase)leia em arq uma frase

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 40: Resumo Teórico Turbo Pascal 7

write(frase ) exiba na tela a frase lidaendreadkeyend1048707 Arquivos ldquoTipadosrdquoPara facilidade de entendimento adotaremos um arquivo de empregados de uma empresaonde cada registro contem o coacutedigo do empregado seu nome idade e sexo1048707 Cadastra os empregadosprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharbeginclrscrassign(cadaempregdat)associa cad a empregdatrewrite(cad)cria cadwriteln(Entrada de dados)cont=SResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 49while cont ltgt N dowith empregado do simplifica a descricao do campobeginwrite(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)write(cadempregado)write(Deseja continuar SN ) readln(cont)cont=upcase(cont)endfilesize mostra o numero de registros do arquivowriteln(filesize(cad) registros cadastrados)close(arq)readkeyend1048707 Inclusatildeo de um novo empregadoprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = record

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 41: Resumo Teórico Turbo Pascal 7

codigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharnovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a incluir)while cont ltgt N dobeginwith novo_empreg dobeginwrite(Digite o codigo do empregado )readln(codigo)write(Digite o nome )readln(nome)write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 50endrotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=trueendse tiver achado nao pode ser cadastrado de novoif achei = true thenwrite(Empregado ja cadastrado )elsewrite(cadnovo_empreg)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endclose(cad)readkeyend

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 42: Resumo Teórico Turbo Pascal 7

1048707 Edita os dados de um empregadoprogram arq_tipadouses crttypedados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregempregadodados_empregcontcharkintegernovo_empregdados_empregachei booleann_empregintegerbeginclrscrassign(cadaempregdat)associa cad a empregdatreset(cad)abre o arquivo criado anteriormenteleitura dos dados do novo empregadowriteln(Empregado a Alterar)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 51while cont ltgt N dobeginwrite(Digite o codigo do empregado)readln(novo_empregcodigo)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) and (achei=false) dobeginread(cadempregado)if empregadocodigo = novo_empregcodigo thenachei=truek=k+1enda posicao em que foi encontrado e k-1if achei = true thenbeginwriteln(Dados atuais)with empregado dowriteln(codigo nome idade2 sexo)writeln(Dados a alterar)with novo_empreg dobeginwrite(Digite o nome )readln(nome)

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 43: Resumo Teórico Turbo Pascal 7

write(Digite a idade )readln(idade)write(Digite o sexo )readln(sexo)endseek(cadk-1)posiciona onde foi encontradowrite(cadnovo_empreg)endelsewrite(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endseek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 521048707 Retira empregado do cadastroprogram arq_tipadouses crttypedefine o registro empregadodados_empreg = recordcodigostring[5]nomestring[30]idadeintegersexocharendvarcad file of dados_empregaux file of dados_empregempregadodados_empregcontcharkintegercod_demitidostring[5]achei booleanbeginclrscrassign(cadaempregdat)associa cad a empregdatassign(auxaauxiliardat)reset(cad)abre o arquivo criado anteriormenterewrite(aux)

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 44: Resumo Teórico Turbo Pascal 7

leitura dos dados do novo empregadowriteln(Empregado a Retirar)while cont ltgt N dobeginwrite(Digite o codigo do empregado )readln(cod_demitido)rotina de critica dos dadosverifica se o empregado ja e cadastradoachei=falsewhile not eof(cad) dobeginread(cadempregado)if empregadocodigo = cod_demitido thenbeginwriteln(empregadonome empregadoidadeempregadosexo)achei=trueendelsewrite(auxempregado)endif achei = true thenwriteln(Empregado removido)Resumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 53elsewriteln(Empregado nao cadastrado)write(Deseja continuar sn )readln(cont)cont=upcase(cont)endrewrite(cad)apaga cad e mantem abertoseek(aux0)posiciona no 1 registrowhile not eof(aux) dobeginread(auxempregado)write(cadempregado)enderase(aux)seek(cad0)writelnwriteln(Cadastro atual)while not eof(cad) dobeginread(cadempregado)with empregado dowriteln(codigo nome idade2 sexo)endclose(cad)readkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 54

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 45: Resumo Teórico Turbo Pascal 7

Capitulo XI ConjuntosO conceito de conjunto eacute usado em matemaacutetica como uma coleccedilatildeo de objetosnuacutemeros etcEm Pascal um conjunto pode ser composto por zero elementos ndash conjunto vazio ndashou por vaacuterios elementos ndash no maacuteximo 256Os elementos integrantes de um conjunto satildeo representados em colchetes eseparados por virgulas como por exemplo[13579] - alguns inteiros[37] - inteiros entre 3 e 7[lsquoArsquorsquoZrsquo] - letras maiuacutesculas de A ateacute Z[golf mareaaudi] - marcas de carro[] - conjunto vazioDeclaraccedilatildeoA forma geral para a definiccedilatildeo de conjuntos eacuteTypeltidentificadorgt = set of lttipogtExemplosTypeCaracteres = set of charLetras_maiusculas = set of lsquoArsquorsquoZrsquoDigitos = set of 09Carros = set of (golfmareaaudi)VarLetrasletras_maiusculasMarca carrosOperaccedilotildees em tipo SETAtribuiccedilatildeoA atribuiccedilatildeo eacute realizada de forma semelhante aos demais tiposC=[lsquoarsquorsquoersquo lsquoirsquo lsquoorsquo lsquoursquo]Numero=[345]UniatildeoO operador de uniatildeo eacute representado pelo sinal + fazendo que esta uniatildeo resulteem um terceiro conjunto constituido por elementos dos outros doisPor exemploa=[123]B=[2345]C=a+b resulta em c=[12345]InterseccedilatildeoEuml representada pelo operador resultando por um terceiro conjunto com oselementos comuns aos outros dois conjuntosPor exemploResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 55A=[123]B=[2345]C=ab resulta em c= [23]DiferenccedilaEacute representada pelo operador ndash resultando em um terceiro conjunto cujoselementos estatildeo em um conjunto e natildeo no outro

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 46: Resumo Teórico Turbo Pascal 7

Por exemploA=[1236]B=[2345]C=a-b resulta em c=[ 16]C=b-a resulta em c=[45]Operadores relacionaisA= B todos os elementos estatildeo em ambos conjuntosAltgtB alguns ou todos os elementos natildeo estatildeo em ambos conjuntosAgt= B todos os elementos de B estatildeo em AAlt= B todos os elementos de A estatildeo em BA IN B A eacute um elemento de B ndash este operador eacute o que apresenta maior uso nosprogramasExemplosprogram set1uses crtle uma tecla e informa se e maiuscula minuscula ou numerotypesimbolo= set of charvarmaiuminunumesimboloteclacharbeginclrscrmaiu=[AZ]minu=[az]nume=[09]repeatwrite(Pressione uma tecla ) tecla= readkeyif tecla IN maiu thenwriteln(Voce pressionou letra maiuscula)elseif tecla IN minu thenwriteln(Voce pressionou letra minuscula)elseif tecla IN nume thenwriteln(Voce pressionou numero)elsewriteln(Voce pressionou outra tecla)until tecla = 27endprogram alteraResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 56uses crtvarnomelstring[30]nomearray[130] of charijlintegerletra set of chartcharbeginclrscrwriteln(Alteracao de dados de Clientes45)gotoxy(13)

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 47: Resumo Teórico Turbo Pascal 7

write(Digite o Nome do Cliente )readln(nomel)letra=[AZ]+[az]+[ ]gotoxy(14)Write(Nome )gotoxy(104)write(nomel)gotoxy(104)t=readkeyif (t in letra) thenbegingotoxy(104)clreolnome[1]=tendelsebeginwriteln(Voce pressionou dif de letra)readkeyexitendj=1l=11while (nome[j] in letra) dobegingotoxy(l4)write(nome[j])l=l+1j=j+1nome[j]=readkeyendwritelnwriteln(Nome Alterado )i=1while nome[i] ltgt 13 dobeginwrite(nome[i])i=i+1endreadkeyendResumo Teoacuterico Turbo Pascal 70 - Prof Alexandre Rojas 57

Capitulo XII ndash UnitNa linguagem Pascal existem vaacuterias Unit preacute definidas que jaacute vem sendo utilizadascomo por exemplo a CRT DOS entre outrasEntretanto podemos criar nossas proacuteprias unidades que funcionaratildeo comoprogramas autocircnomos que seratildeo ligados aos programa principalCompilar um programa Pascal para a memoacuteria iraacute gerar um arquivo PASCompilar um programa Pascal para o disco iraacute gerar um arquivo EXECompilar uma Unit iraacute gerar um arquivo TPUA sintaxe de uma Unit eacuteUNIT nome da unidadeINTERFACEDeclaraccedilatildeo de outras unidades utilixzadasDeclaraccedilatildeo das procedures e funccedilotildeesIMPLEMENTATION

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend

Page 48: Resumo Teórico Turbo Pascal 7

Desenvolvimento das procedures e funccedilotildeesENDExemplo Criar uma unidade que escreva ldquoEstou na procedurerdquo1) Digite o programaunit uni1interfaceuses crtprocedure acheiimplementationprocedure acheibeginclrscrwriteln(Estou na procedure)endend11 Natildeo esqueccedila de alterar o destino da compilaccedilatildeo para o disco 12 O nome usado para salvar o arquivo seraacute a referecircncia para a ligaccedilatildeo com oprograma principal2 Digite agora o programa principalprogram unidade2uses crtuni1beginacheireadkeyend