Apostila_portugol

184
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA MECATRÔNICA APOSTILA DE TÉCNICAS DE PROGRAMAÇÃO CURITIBA JANEIRO/2002

Transcript of Apostila_portugol

  • PONTIFCIA UNIVERSIDADE CATLICA DO PARAN

    CENTRO DE CINCIAS EXATAS E DE TECNOLOGIA

    DEPARTAMENTO DE ENGENHARIA MECATRNICA

    APOSTILA DE TCNICAS DE PROGRAMAO

    CURITIBA

    JANEIRO/2002

  • 1

    PONTIFCIA UNIVERSIDADE CATLICA DO PARAN

    CENTRO DE CINCIAS EXATAS E DE TECNOLOGIA

    DEPARTAMENTO DE ENGENHARIA MECATRNICA

    APOSTILA DE TCNICAS DE PROGRAMAO

    ELABORAO: PROFESSOR MARCELO RUDEK

    COLABORAO: GELSON LUIZ CARNEIRO

    ADRIANO ZELAZOWSKI PEREIRA

    CURITIBA

    JANEIRO/2002

  • Captulo 1

    1

    APOSTILA DE TCNICAS DE PROGRAMAO ...........................................................0

    APOSTILA DE TCNICAS DE PROGRAMAO ...........................................................1

    I. CONTRATO DIDTICO ....................................................................................................8

    I. INFORMAES GERAIS ..................................................................................................8 II. SISTEMA DE AVALIAO..............................................................................................8 III. O PROGRAMA DE APRENDIZAGEM (P.A.)...............................................................9

    II. APRESENTAO DO PROGRAMA DE APRENDIZAGEM (P.A.) ........................10

    I. CONTEDO PROGRAMTICO: ...................................................................................10 II. BIBLIOGRAFIA RECOMENDADA: .........................................................................................10

    1. INTRODUO PROGRAMAO: ALGORITMOS ..............................................11

    1.1. EXEMPLOS .........................................................................................................................11 1.2. ALGORITMOS EM PORTUGOL ................................................................................12 1.3. PORTUGOL ....................................................................................................................12 1.4. VARIVEIS .........................................................................................................................13 1.4.1. DECLARAO DE VARIVEIS...........................................................................................13 1.4.1.1. Tipos de Variveis .......................................................................................................14 1.4.1.2. Identificadores de Variveis ........................................................................................14 1.4.2 CONSTANTES ....................................................................................................................16 1.5. ESTRUTURA DO ALGORITMO EM PORTUGOL...................................................................16 1.5.1. COMANDO DE ATRIBUIO (

  • Captulo 1

    2

    2.1.1. DECLARAO DE VARIVEIS...........................................................................................28 2.1.2. COMANDO DE ATRIBUIO:.............................................................................................30 2.1.3. BLOCOS DE COMANDOS:..................................................................................................30 2.2. BORLAND C++ BUILDER............................................................................................31 2.2.1. O AMBIENTE DE DESENVOLVIMENTO ...............................................................................31 2.2.2. A INTERFACE DE DESENVOLVIMENTO ..............................................................................32 3.2.2.1. Barra de Componentes.................................................................................................32 2.2.2.2. Formulrio (form) ........................................................................................................32 2.2.2.3. Barra de Propriedades ..................................................................................................33 2.2.3. A CRIAO DE PROGRAMAS.............................................................................................33 A) ENTRADA DE DADOS.............................................................................................................34 B) ATRIBUIO..........................................................................................................................35 C) SADA DE DADOS ..................................................................................................................35 E) OPERADORES RELACIONAIS...................................................................................................35 2.2.4. PASSOS PARA CRIAR UMA APLICAO EM C ...................................................................35 a) Abrindo o C++ Builder.........................................................................................................36 b) Adicionando Formulrio ......................................................................................................36 c) Inserindo Componentes no Formulrio ................................................................................36 d) Codificao do Programa .....................................................................................................37 e) Compilando um Programa ....................................................................................................38 f) Executando um Programa .....................................................................................................38 g) Salvando o Programa ............................................................................................................39 2.2.5. EXERCCIOS .....................................................................................................................39 2.3. ESCOPO DE VARIVEIS .............................................................................................40 2.3.1. VARIVEIS LOCAIS ..........................................................................................................40 EXEMPLO ...................................................................................................................................40 2.3.2. VARIVEIS GLOBAIS ........................................................................................................41 2.4. DESVIO CONDICIONAL EM C .............................................................................................42 2.4.1. DESVIO CONDICIONAL SIMPLES .......................................................................................42 2.4.2. DESVIO CONDICIONAL COMPOSTO ..................................................................................42 2.4.3. IFS ANINHADOS ..............................................................................................................43 2.4.4. EXEMPLO .........................................................................................................................43 SOLUO SEM O USO DE IF. ....................................................................................................43 2.4.5. EXERCCIO.......................................................................................................................45 2.5. LAOS DE REPETIO EM C..............................................................................................46 2.5.1. LOOP PARA/FAA (FOR) ..................................................................................................46 2.5.2. LOOP ENQUANTO/FAA (WHILE) .....................................................................................46 2.5.3. LOOP FAA/ENQUANTO (DO/WHILE) ...............................................................................47 2.5.4. EXEMPLO .........................................................................................................................47 2.5.5 EXERCCIOS ......................................................................................................................48 2.6. PROCEDIMENTOS EM C............................................................................................49 2.6.1. DEFINIO.......................................................................................................................49 2.6.2. EXEMPLO 1 ......................................................................................................................49 2.6.3. PROTTIPO ......................................................................................................................52 2.6.4. PARMETROS...................................................................................................................53 2.6.5. EXEMPLO 2 ......................................................................................................................53 2.7. FUNO EM C...............................................................................................................56 2.7.1. DEFINIO.......................................................................................................................56

  • Captulo 1

    3

    2.7.2. DECLARAO..................................................................................................................56 2.7.3 PARMETROS E RETORNO .................................................................................................56 2.7.4. EXEMPLO 1 ......................................................................................................................57 2.7.5. EXEMPLO 2 ......................................................................................................................59 2.7.6. EXERCCIOS .....................................................................................................................61 2.8. INCREMENTOS E DECREMENTOS ......................................................................................62 2.8.1. INCREMENTO/DECREMENTO A POSTERIORI .....................................................................62 2.8.2. INCREMENTO/DECREMENTO A PRIORI .............................................................................63 2.8.3. EXERCCIO.......................................................................................................................63 2.9. ATRIBUIO COMPOSTA ..................................................................................................64 2.9.1. EXERCCIO .......................................................................................................................64 2.10. ATRIBUIO MLTIPLA.................................................................................................64 2.10.1. EXEMPLO .......................................................................................................................64 2.11. OPERADOR INTERROGAO (?) .....................................................................................65 2.12. NMEROS ALEATRIOS ..................................................................................................65 2.12.1. SINTAXE DO COMANDO .................................................................................................65 2.12.2. EXEMPLO .......................................................................................................................65 2.13 COMANDO SWITCH/CASE..................................................................................................66 2.13.1. SINTAXE DO COMANDO..................................................................................................66 2.13.2. EXEMPLO .......................................................................................................................66 2.14. TIMER ..............................................................................................................................67 2.14.1. O COMPONENTE TIMER NO C++ BUILDER.....................................................................67 2.14.2. AS PROPRIEDADES DO TIMER .........................................................................................68 2.14.3. EXEMPLO .......................................................................................................................68 2.14.4. EXERCCIO.....................................................................................................................68

    3. ESTRUTUAS HOMOGNEAS DE DADOS ..................................................................69

    3.1. MATRIZES UNIDIMENSIONAIS (VETORES).........................................................69 3.1.1. EXEMPLOS .......................................................................................................................69 3.1.2. INDEXAO.....................................................................................................................69 3.1.3. EXEMPLO .........................................................................................................................70 3.1.4. EXERCCIO.......................................................................................................................71 3.2. ORDENAO DE VETORES .................................................................................................71 3.2.1. ALGORITMO DE ORDENAO (BOLHA).............................................................................71 3.2.2. EXERCCIO.......................................................................................................................72 3.3. STRINGS..........................................................................................................................73 3.3.1.EXEMPLO 1 .......................................................................................................................73 3.3.2.EXEMPLO 2 .......................................................................................................................74 3.3.3. COPIANDO STRINGS .........................................................................................................74 3.3.4. COMPARAO DE STRINGS ..............................................................................................75 3.3.5. TAMANHO DE STRINGS .....................................................................................................75 3.3.6. COMPARAO DE ELEMENTOS DA STRING......................................................................76 3.3.7. CONVERSO DE TIPOS ......................................................................................................76 3.3.7.1. convertendo valores numricos para caracter ..............................................................77 3.3.7.2. convertendo string para valores numricos .................................................................77 3.3.8 EXERCCIOS ......................................................................................................................78 3.4. MATRIZES ......................................................................................................................79

  • Captulo 1

    4

    3.4.1. MATRIZES BIDIMENSIONAIS ............................................................................................79 3.4.2. MATRIZES MULTIDIMENSIONAIS ......................................................................................80 3.4.3. MATRIZES DE STRINGS .....................................................................................................80 3.4.4. EXERCCIOS .....................................................................................................................82 9) DESENVOLA UM PROGRAMA QUE PERMITA MOVIMENTAR O ELEMENTO 1 DA MATRIZ ABAIXO EM UMA DIREO ALEATRIA A CADA 1S. O MOVIMENTO DO ELEMENTO NO PODE EXTRAPOLAR OS LIMITES DA MATRIZ.........................................................................................82

    4. PONTEIROS EM C ...........................................................................................................83

    4.1. DEFINIO ....................................................................................................................83 4.2. DECLARAO DE UM PONTEIRO .......................................................................................84 4.3. EXEMPLOS .........................................................................................................................85 4.4. PONTEIROS PARA MATRIZ .................................................................................................87 4.5. VETORES DE PONTEIROS ..................................................................................................89 4.5.1. EXEMPLO 1 ......................................................................................................................89 4.5.2. EXERCCIO.......................................................................................................................91 4.5.3. EXEMPLO 2 ......................................................................................................................91 4.5.4. EXERCCIOS .....................................................................................................................92

    5. ALOCAO DINMICA DE MEMRIA ....................................................................93

    5.1. INTRODUO .....................................................................................................................93 5.2. COMANDO DE ALOCAO .................................................................................................93 5.2.1. EXEMPLO DE ALOCAO USANDO O COMANDO MALLOC().............................................93 5.2.2. MELHORANDO O USO DE PONTEIROS...............................................................................96 5.3. EXERCCIOS.......................................................................................................................97 5.4. PORTABILIDADE................................................................................................................97 5.4.1. EXEMPLO DO USO DE SIZEOF ............................................................................................98 5.5. EXERCCIOS ..................................................................................................................98

    6. ARQUIVOS EM C ..........................................................................................................103

    6.1. PONTEIRO DE ARQUIVO...................................................................................................103 6.2. ABRINDO ARQUIVOS ........................................................................................................103 6.2.1. ARQUIVOS TIPO TEXTO .................................................................................................104 6.2.2. ARQUIVOS BINRIOS .....................................................................................................105 6.3. ABRINDO UM ARQUIVO PARA ESCRITA ...........................................................................105 6.3.1. OBSERVAES ...............................................................................................................106 6.4. ABRINDO UM ARQUIVO PARA LEITURA ...........................................................................107 6.5. FECHANDO UM ARQUIVO.................................................................................................107 6.6. COMANDOS DE ESCRITA E LEITURA................................................................................108 6.6.1. FPUTC() ..........................................................................................................................108 6.6.2. FGETC()..........................................................................................................................110 6.6.3. EXERCCIO COM FPUTC() E FGETC() ...............................................................................111 6.7. GRAVAO DE STRINGS COM FPUTS() ............................................................................111

  • Captulo 1

    5

    6.8. LEITURA DE STRINGS COM FGETS() ................................................................................112 6.9. EXERCCIOS COM FPUTS() E FGETS()..............................................................................113 6.10. LEITURA COM FREAD() .................................................................................................113 6.11. GRAVAO COM FWRITE() ...........................................................................................114 6.12. GRAVAO COM FPRINTF() ..........................................................................................115 6.13. LEITURA COM FSCANF() ................................................................................................115 6.14. EXERCCIOS...................................................................................................................116

    7. REGISTROS .....................................................................................................................117

    7.1. DEFINIO.......................................................................................................................117 7.2. INICIALIZAO................................................................................................................117 7.2.1. EXEMPLO 1 ....................................................................................................................118 7.2.2. EXEMPLO 2 ....................................................................................................................118 7.3. ACESSO AOS ELEMENTOS DA ESTRUTURA ......................................................................118 7.4. EXERCCIO.......................................................................................................................119 7.5. MATRIZES DE ESTRUTURAS ............................................................................................119 7.5.1.EXEMPLO ........................................................................................................................119 7.5.2. EXERCCIO.....................................................................................................................120 7.6. USO DE TYPEDEF..........................................................................................................122 7.6.1. EXEMPLO .......................................................................................................................122 7.6.2. EXEMPLO 2 ....................................................................................................................122 7.7. GRAVAO E LEITURA DE REGISTROS ..........................................................................123 7.7.1 EXEMPLO ........................................................................................................................123 7.7.2.EXERCCIO......................................................................................................................123 7.8. PONTEIROS PARA REGISTROS .........................................................................................124 7.8.1.EXEMPLO ........................................................................................................................124

    8. GRFICOS EM C............................................................................................................127

    8.1. INTRODUO..............................................................................................................127 8.2. DESENHANDO LINHAS .....................................................................................................127 8.3. USANDO O PAINTBOX......................................................................................................129 8.4. COMPONENTE PANEL......................................................................................................130 8.5. DESENHANDO RETNGULOS ...........................................................................................131 8.6. DESENHANDO ELIPSES ....................................................................................................132 8.7. DESENHANDO PONTOS (PIXELS).....................................................................................133 8.8. EXEMPLO .........................................................................................................................133 8.9 EXERCCIOS......................................................................................................................137

    9. LISTAS LINEARES.........................................................................................................138

    9.1. FILA .................................................................................................................................138 9.1.1. DEFINIO.....................................................................................................................138 9.1.2. OBJETIVO .......................................................................................................................138 9.1.3. EXEMPLO .......................................................................................................................138

  • Captulo 1

    6

    9.2. FILA CIRCULAR ...............................................................................................................141 9.3. PILHA ...............................................................................................................................143 9.3.1. DEFINIO.....................................................................................................................143 9.3.2. EXEMPLO .......................................................................................................................143 9.4. EXERCCIOS.....................................................................................................................144 9.5. LISTAS ENCADEADAS ......................................................................................................145 9.6. EXEMPLO .........................................................................................................................146 9.7. EXERCCIO.......................................................................................................................147 9.8. EXEMPLO .........................................................................................................................147 9.9. OPERAES COM LISTA ENCADEADA ............................................................................148 9.10. EXEMPLO .......................................................................................................................149 9.11. LISTAS DUPLAMENTE ENCADEADAS ............................................................................151 9.12. EXEMPLO .......................................................................................................................151 9.13. EXEMPLO .......................................................................................................................152

    10. RECURSIVIDADE.........................................................................................................155

    10.1. INTRODUO............................................................................................................155 10.2. EXEMPLO ...................................................................................................................155 10.3. EXERCCIOS...................................................................................................................156

    11.EXERCCIOS COM VETORES ...................................................................................157

    12 -EXERCCIOS COM MATRIZES................................................................................158

    13. EVENTOS DE FORMULRIO E VARIVIES EXTERNAS..................................160

    13.1. EXERCCIO PROPOSTO .........................................................................................160 13.2. LISTAGEM DO PROGRAMA..................................................................................161 13.2.1. UMEDIA1.CPP ..............................................................................................................161 13.2.2. UMEDIA.CPP ................................................................................................................162

    14. ROTINAS DE ORDENAO ......................................................................................164

    15.COMPONENTES DO C++ BUILDER E SUAS PRINCIPAIS PROPRIEDADES..167

    15.1. BITBTN ........................................................................................................................167 15.1.1. PRINCIPAIS PROPRIEDADES ..........................................................................................167 15.1.2. EXEMPLO .....................................................................................................................168 15.2 CHECKBOX .................................................................................................................168 15.2.1. PRINCIPAIS PROPRIEDADES ..........................................................................................168 15.2.2. EXEMPLO .....................................................................................................................169 15.3. COMBOBOX ...............................................................................................................169 15.3.1. PRINCIPAIS PROPRIEDADES ..........................................................................................169 15.3.2. EXEMPLO .....................................................................................................................170

  • Captulo 1

    7

    15.4. LISTBOX......................................................................................................................171 15.4.1. PRINCIPAIS PROPRIEDADES ..........................................................................................171 15.4.2. EXEMPLO .....................................................................................................................171 15.5. PAGECONTROL ........................................................................................................172 15.5.1. PRINCIPAIS COMANDOS................................................................................................173 15.5.2. EXEMPLO .....................................................................................................................173 15.6. RADIOBUTTON .........................................................................................................174 15.6.1. PRINCIPAIS PROPRIEDADES ..........................................................................................174 15.6.2. EXEMPLO .....................................................................................................................174 15.7. RADIOGROUP............................................................................................................175 15.7.1. PRINCIPAIS PROPRIEDADES ..........................................................................................175 15.7.2. EXEMPLO .....................................................................................................................175 15.8. SCROLLBAR ..............................................................................................................176 15.8.1. PRINCIPAIS PROPRIEDADES ..........................................................................................177 15.8.2. EXEMPLO .....................................................................................................................177 15.9. SPEEDBUTTON..........................................................................................................178 15.9.1. PRINCIPAIS PROPRIEDADES ..........................................................................................178 15.9.2. EXEMPLO .....................................................................................................................178 15.10. STRINGGRID............................................................................................................179 15.10.1. PRINCIPAIS PROPRIEDADES ........................................................................................179 15.10.2. EXEMPLO ...................................................................................................................180 15.11. TABCONTROL.........................................................................................................180 15.11.1. PRINCIPAIS PROPRIEDADES ........................................................................................180 15.11.2. EXEMPLO ...................................................................................................................181

  • Captulo 1

    8

    I. Contrato Didtico

    i. INFORMAES GERAIS

    Todas as aulas (teoria e prtica) sero em laboratrio; ento todos devero estar

    familiarizados com o manuseio dos computadores, pois o contedo da aula ser

    fornecido pela internet atravs do endereo http://www.las.pucpr.br/rudek

    Trazer disquetes para armazenar os trabalhos de aula;

    Quem necessitar pode (e deve) usar os laboratrios da PUC para aprender a usar

    o computador; cada laboratrio possui um monitor responsvel que pode ajudar nas

    dvidas, fora dos horrios de aula;

    Observar as normas de utilizao do laboratrio e das aulas de TP1,

    principalmente em relao ao zelo pelos equipamentos e ateno s atividades de aula;

    Informaes sobre o curso de Engenharia de Controle e Automao (ECA) e de

    atividades do Laboratrio de Automao e Sistemas (LAS) podem ser obtidas

    diretamente no site do LAS atravs do endereo www.las.pucpr.br.

    ii. SISTEMA DE AVALIAO

    A avaliao contnua durante todo o curso. Ser composta de provas, trabalhos,

    exerccios em sala (participao);

    A nota semestral ser composta de 3 notas parciais:, sendo:

    o 1. parcial : prova (80%) + exerccios (20%);

    o 2. parcial: prova (60%) + exerccios (10%) + trabalhos (30 %);

    o 3. parcial: prova (50%) + exerccios (20%) + trabalhos (30 %);

    OBS: a forma de avaliao das parciais, pode variar de acordo com o

    andamento das aulas e nvel de aprendizado0 da turma.

    Os trabalhos sero divulgados na minha pgina; Trabalhos entregues com atraso

    no sero cosiderados, ou tero nota reduzida (2,0 pts por dia de atraso), de acordo

    com critrio do professor.

    Faltas: no mximo 12 faltas (4 dias de aula). Mais de 12 faltas o aluno estar

    automaticamente reprovado por falta, independente das notas que possua.

  • Captulo 1

    9

    iii. O PROGRAMA DE APRENDIZAGEM (P.A.)

    Este programa de aprendizagem explora o estudo de algoritmos e programao em

    linguagem C. Para aprovao neste semestre o aluno dever estar apto a raciocinar e

    desenvolver a sua capacidade de abstrao, para a criao de algoritmos e programas

    elementares.

    As tcnicas de programao sero vistas atravs da utilizao de uma pseudolinguagem

    em portugus, denominada "Portugol". Assim, o aluno poder escrever algoritmos e

    aplicar as tcnicas de desenvolvimento para serem usadas com qualquer linguagem de

    programao. Para este P.A., ser utilizada a linguagem C padro, em ambiente

    Windows.

    Na seo seguinte ser apresentado o contedo programtico de Tcnicas de

    Programao I e II (TPI e TPII ).

  • Captulo 1

    10

    II. Apresentao do Programa de Aprendizagem (P.A.)

    i. CONTEDO PROGRAMTICO:

    - Conceitos de Informtica e Programao;

    . Princpios de funcionamento;

    . Sistemas Operacionais (DOS e WINDOWS);

    . Sistemas Numricos;

    . Memria e Dispositivos de Armazenamento;

    . Linguagens de Programao;

    - Algoritmos: Introduo;

    - Algoritmos: Portugol;

    - Introduo a Linguagem C : Principais comandos e programao para Windows;

    - OBS: Contedo das aulas em www.las.pucpr.br/rudek

    ii. Bibliografia Recomendada:

    1. Algoritmos e Estruturas de Dados; Guimares e Lages; LTC Livros Tcnicos e Cientficos.

    2. Estruturas de Dados Usando C; A. Tanenbaum; Makron Books

    3. Dominando Algoritmos com C; Kyle Loundon; Ed. Cincia Moderna.

    4. C Completo e Total; Herbert Schildt; Makron Books;

    5. C A Linguagem de Programao Padro Ansi; Brian W. Kerninghan, Dennis M. Ritchie; Editora Campus;

    6. C++ Builder 5 - Guia Prtico; Csar A Mateus. Ed. rica (www.erica.com.br);

    7. C++ Builder 5 Developers Guide; J. Hollinworth, D. Butterfield, et al. Ed. SAMS;

    8. C Completo e Total; Herbert Schildt; Makron Books;

    9. Internet.

  • Captulo 1

    11

    1. INTRODUO PROGRAMAO: ALGORITMOS

    Vrias definies de algoritmos esto presentes na literatura (ver bilbliografia

    indicada). De forma geral um algoritmo pode ser definido como:

    Um algoritmo representa de forma estruturada, um padro de comportamento de

    eventos ou sequncia de aes, que levam a um resultado esperado.

    Resumindo:

    algoritmo = como definir o problema, esquematizar, exerccio do raciocnio;

    tcnicas de programao = como operacionalizar, recursos, exerccio da implementao.

    1.1. Exemplos

    a) Seqncia de aes para chegar ao trabalho/universidade:

    Acordar levantar tomar caf pegar o nibus

    Ou chegar ao destino

    pegar o carro

    Note que, para cada ao acontecer, necessrio que a ao imediatamente anterior

    tenha sido executada.

    Note tambm que, cada ao pode conter outros eventos associados (outros algoritmos).

    b) Manuais de montagem e utilizao de equipamentos;

    c) Qual o padro de comportamento utilizado para gerar a sequncia abaixo?

    1, 5, 9, 13, 17, 21, 25 ...

    resposta: _________

  • Captulo 1

    12

    1.2. ALGORITMOS EM PORTUGOL

    Como no item 1 ".... um algoritmo de forma geral, uma descrio passo a passo de

    como um problema pode ser solucionado. A descrio deve ser finita, e os passos devem

    ser bem definidos sem ambiguidades" [Terada] . A razo da existncia do algoritmo

    vem da dissonncia entre um estado desejado e aquele observado na realidade.

    Algoritmo no a soluo de um problema, mas o meio de obt-la. A resoluo de um

    problema envolve vrios parmetros que devem ser organizados atravs de alguma

    tcnica formal.

    As tcnicas de desenvolvimento estruturado de algoritmos, tem o objetivo de:

    Facilitar o desenvolvimento de algoritmos;

    Facilitar o seu entendimento pelos operadores;

    Antecipar a correo;

    Facilitar manuteno e modificaes;

    Permitir que o desenvolvimento seja feita por uma equipe de pessoas.

    Uma tcnica formal afasta a possibilidade de uma ambiguidade. Ou seja, a partir de

    dadas condies iniciais a execuo do algoritmo ser realizada por um mesmo

    "caminho" (sequncia de aes), que deve resultar num mesmo estado final. Uma destas

    tcnicas o portugol.

    1.3. PORTUGOL

    Portugol uma pseudolinguagem que permite ao programador pensar no problema em si

    e no no equipamento que ir executar o algoritmo. Devem ser considerados a sintaxe

    (em relao forma) e a semntica (em relao ao contedo ou seu significado). Em

    portugol a sintaxe definida pela linguagem e a semntica depende do significado que

    quer se dar ao algoritmo.

    No portugol e nas linguagens de programao, basicamente tm-se comandos e

    variveis que operacionalizam a execuo de um algoritmo. Estes comandos so

  • Captulo 1

    13

    executados sequencialmente, de forma que um comando s ser executado aps a

    finalizao do comando anterior.

    A estrutura de um algoritmo em portugol pode ser dada como:

    Exemplo:

    incio

    fim

    1.4. Variveis

    1.4.1. Declarao de Variveis

    Uma varivel um local (rea na memria do computador) que armazena um tipo

    especfico de contedo. Uma varivel contm um valor que se modifica durante a

    execuo do programa. A varivel possui um identificador (nome), que pode ser

    representado da seguinte forma:

  • Captulo 1

    14

    1.4.1.1. Tipos de Variveis

    Variveis so componentes das linguagens de programao, que identificam os valores que

    esto sendo manipulados pelos programas. Uma varivel, como o prprio nome sugere,

    contm valores que variam de acordo com a execuo do programa. Uma varivel deve

    possuir um tipo especfico. As variveis em portugol, so divididas em 4 tipos principais,

    (embora na linguagem C existam modificaes para estes tipos principais).

    No portugol, os tipos bsicos de variveis so:

    Inteiro: Qualquer nmero inteiro (negativo, nulo ou positivo).

    Exemplo: -100, 0, 1, 2, 1250.

    Real: Qualquer nmero real, nulo ou positivo.

    Exemplo: -10, -1.5, 11.2, 0,1, 2, 50.

    Caracter: Caracteres alfanumricos.

    Exemplo: casa, Win31, 123, alfa#2, etc...

    Lgico: valor lgico verdadeiro ou falso

    Exemplo: x > y ?

    Exemplos: inteiro: valor; // a varivel valor do tipo inteiro

    real: media; // a varivel media do tipo real

    caracter: nome_aluno; // a varivel nome_aluno do tipo caracter

    lgico: maior; // a varivel maior do tipo booleano

    1.4.1.2. Identificadores de Variveis

    O identificador de uma varivel, se refere ao nome de como ela vai ser conhecida no

    programa. importante no esquecer que:

    a) No possvel definir variveis de diferentes tipos com o mesmo identificador

    (nome); O exemplo: real A; inteiro A; causaria erro na programao, mas pode ser

  • Captulo 1

    15

    usado real A1; inteiro A2; ou normalmente um nome mais significativo, como real

    media, inteiro valor, caracter nome, etc.

    b) Tomar alguns cuidados em relao sintaxe da linguagem, por exemplo, no

    possvel ter identificador como: caracter ?nome, real valor*, inteiro 1x, .

    c) .Letras maisculas e minsculas so tratadas de forma diferente, ento Media

    diferente de media, como tambm de MEDIA.

    Cada varivel definida no programa usa um local da memria, que acessada atravs do

    nome dado a varivel. O espao de memria ocupado pelo contedo da varivel,

    depende do tamanho destes tipos de dados, que variam de acordo com o tipo do

    processador a com a implementao do compilador. Como referncia inicial para este

    estudo sobre variveis, pode-se considerar pelo ANSI C, o seguinte:

    Tipo Inteiro com 2 bytes;

    Tipo real com 4 bytes;

    Tipo caracter com 1 byte;

    Exemplo:

    Pode-se supor a memria como uma matriz, como a figura abaixo, onde cada clula possui

    tamanho de 1 byte (8 bits):

    Para armazenar o valor inteiro A= 1, necessita-se de 2 bytes (1 inteiro = 2 bytes na memria*);

    Para armazenar o valor real B= 1, necessita-se de 4 bytes (1 real = 4 bytes na memria*);

    * no C ANSI; no C++ Builder os tamanhos das variveis so diferentes.

    A B

    rea ocupada por outros programas.

  • Captulo 1

    16

    1.4.2 Constantes

    Uma constante um valor fixo, que no se modifica ao longo do tempo, durante a

    execuo do programa. Em algoritmos representaremos constantes pelo tipo const,

    constante ou #define (eventualmente, na elaborao dos algoritmos, alguns elementos da

    linguagem C podem ser escritos no algoritmo).

    Exemplo: const M 10;

    1.5. Estrutura do Algoritmo em Portugol

    1.5.1. Comando de Atribuio (

  • Captulo 1

    17

    1.5.2. Operadores Aritmticos

    Os smbolos das operaes bsicas so:

    A multiplicao dada atravs do operador * (asterisco);

    Exemplo: z

  • Captulo 1

    18

    Obs:

    - O incoveniente deste algoritmo que sempre fornecer o mesmo resultado, o que no

    interessante. De maneira mais correta, os valores de x e y podem ser fornecidos pelo

    usurio, permitindo ao algoritmo que efetue a soma de dois nmeros quaisquer.

    - Neste exemplo podemos observar que o resultado da soma de x + y ser armazenado em

    z. Como o usurio ficar sabendo da resposta ? necessrio usar comandos de escrita,

    para apresentar os resultados.

    1.5.3. Entrada e Sada de Dados

    Na construo de algoritmos, conveniente que o usurio possa informar dados

    externos, para serem operados pelo programa. Assim, um programa pode receber um

    dado informado por um operador atravs de um comando de leitura. Da mesma forma,

    pode ser necessrio conhecer o resultado de determinada operao executada pelo

    computador, ento ser necessria uma forma de exibir os dados.

    Cada linguagem tem uma forma especfica para entrada e sada de dados. Em algoritmos

    usaremos os comandos genricos leia() e escreva(), para realizar a interface com o

    usurio.

    Exemplo:

    incio

    real A, B, C;

    leia(A);

    leia(B);

    c

  • Captulo 1

    19

    1.5.4. Regras para escrever algoritmos em portugol

    Incluir comentrios pelo menos nas linhas mais importantes do programa;

    Usar nomes significativos para as variveis e constantes, que possam identificar o

    contedo;

    Grifar as palavras chaves do portugol;

    Alinhar os comandos facilita a legibilidade do algoritmo e reduz a possibilidade

    de erros.

    1.5.5. Exerccios

    1 Desenvolva um algoritmo em portugol para calcular xy. Os valores de x e y sero

    fornecidos pelo usurio do programa;

    2 Desenvolva um programa que calcule o volume de uma esfera de raio R, fornecido pelo

    usurio. [ V = 4/3 p R3 ]

    3 Desenvolva um programa que transforme um valor de temperatura fornecido pelo usurio,

    de Farenheit ( F ) para Graus Celcius ( C ). [V = 5/9 (F 32)]

    4 Desenvolva um algoritmo para calcular a mdia entre 4 valores fornecidos pelo usurio.

    5 Desenvolva um algoritmo para encontrar as razes de uma equao do tipo Ax2 + Bx + C.

    1.6. Comandos de Controle

    Os comandos de controle permitem alterar a direo tomada por um programa (desvio), ou fazer com que partes especficas de um algoritmo seja executada mais de uma vez (loop).

    1.6.1. Desvio Condicional

    Muitas vezes ser necessrio desviar a execuo do programa segundo uma condio. (Exemplo: ir a universidade de carro ou de nibus ?). Para se testar condies necessrio utilizar operadores lgicos e relacionais. 1.6.1.1. Operadores Lgicos

  • Captulo 1

    20

    Os operadores "e", "ou" e "no" permitem realizar a combinao lgica de variveis do

    tipo booleana (lgico).

    Para isto utilizam-se as tabelas verdade:

    Var1 Var2 E

    V V V

    V F F

    F V F

    F F F

    Var1 Var2 OU

    V V V

    V F V

    F V V

    F F F

    Var1 No

    V F

    F V

    1.6.1.2. Operadores Relacionais

    Permitem realizar a comparao de contedos das variveis:

    A igualdade dada por = ; Maior ou igual, pelo smbolo >=;

    A desigualdade dada por ; Menor ou igual, pelo smbolo ; No !;

    Menor que, pelo smbolo

  • Captulo 1

    21

    Desvio Condicional Simples

    incio

    inteiro A, B;

    A

  • Captulo 1

    22

    Desvio Condicional Composto

    ...

    se A > B ento

    A

  • Captulo 1

    23

    1.6.2. Laos de Repetio (loop)

    Uma sequncia de aes repetida por um nmero especfico de vezes, at que uma

    condio seja satisfeita. Enquanto a condio for verdadeira, as instrues sero

    executadas. O lao de repetio tambm pode ser chamado de loop.

    Exemplo 1:

    Durante uma semana, um ms, etc, vc pode realizar a mesma seqncia de aes, como

    no exemplo:

    1 Dia

    Acordar levantar tomar caf pegar o nibus

    Ou chegar ao destino

    pegar o carro

    2 Dia

    Acordar levantar tomar caf pegar o nibus

    Ou chegar ao destino

    pegar o carro

    .

    .

    .

    N simo Dia

    Acordar levantar tomar caf pegar o nibus

    Ou chegar ao destino

    pegar o carro

    Como as aes se repetem durante um perodo ou at que um evento ocorra (chegar ao

    fim de semana) , pode-se melhorar escrita da sequncia do exemplo acima, como:

  • Captulo 1

    24

    Exemplo 2:

    Enquanto ( no chegar ao fim de semana) faa

    Acordar levantar tomar caf pegar o nibus

    Ou chegar ao destino

    pegar o carro

    Exemplo 3:

    Enquanto ( dia < N) faa

    Acordar levantar tomar caf pegar o nibus

    Ou chegar ao destino

    pegar o carro

    Ento, pode-se observar que as construes dos exemplos 2 e 3, representam as N

    repeties do exemplo 1. Em termos prticos da programao, a forma dos exemplos 2 e

    3, de escrever aes que se repetem, so corretas. A forma de escrever as aes do

    exemplo 1 que se repetem incorreta, apesar de levar o mesmo resultado, pois imagine

    reescrever as mesmas aes para 365 dias, ou mais...

    1.6.2.1. Comando: enquanto/faa

    Em portugol, escreve-se o comando enquanto / faa, da forma apresentada abaixo.

    Note que se forma um bloco de comandos, delimitado ente o incio e o fim do loop.

    Veja o exemplo:

    enquanto (condio) faa

    fim enquanto

    ... lista de comandos;

    ...

    A condio se refere a um critrio de parada do loop, ou seja, at quando o loop vai ser executado.

    Um ou mais comandos que sero executados enquanto a condio for verdadeira.

  • Captulo 1

    25

    Suponha os algoritmos abaixo que calculam o valor de x10, sendo x fornecido pelo

    usurio. Em termos de programao, pode-se ver a diferena na escrita dos programas a

    seguir, com e sem o uso de um lao de repetio (loop):

    Exemplo sem loop Exemplo com loop inicio

    inteiro x,y; leia (x);

    y

  • Captulo 1

    26

    b) Corrigindo o problema do loop infinito:

    inicio

    inteiro I;

    I

  • Captulo 1

    27

    b) Loop para/faa com passo diferente de 1 (incremento):

    inicio

    inteiro I;

    para I de 1 at 5 passo 2 faa

    escreva (I);

    fim para

    fim

    c) Loop para/faa com passo decrescente:

    inicio

    inteiro I;

    para I de 5 at 1 passo -2 faa escreva (I);

    fim para

    fim

    Exerccios:

    1 Escreva um algoritmo para gerar uma PA de razo qualquer, com uma srie de 10 termos.

    2 Modifique o exerccio 5.1 para uma PA de N termos.

    3 Escreva um algoritmo para gerar a sequncia de Fibonacci da forma abaixo, at o

    vigsimo termo: 1,1,2,3,5,8,13, ...

    4 Sejam dados P(X1,Y1) e Q(X2,Y2) dois pontos quaisquer no plano. Escreva um algoritmo

    que leia os pares de coordenada x e y e calcule a distncia entre estes dois pontos.

    5 Escreva um algoritmo que gere uma tabela com a converso de graus para Fahrenheit para

    Celsius e vice versa, com valores variando de 1 em 1 grau, de 0 a 100 graus Celsius.

    Teste de Mesa inicio 1 iterao I = 1 2 iterao I = 3 3 iterao I = 5 5 < 5 ? sai do loop

    Obs: No loop do tipo para/faa o valor da varivel de controle do loop incrementada automaticamente de 2 em 2 a cada loop.

    Teste de Mesa inicio 1 iterao I = 5 2 iterao I = 3 3 iterao I = 1 1 < 1 ? sai do loop

    Obs: No loop do tipo para/faa o valor da varivel de controle do loop decrementada automaticamente de 2 em 2 a cada loop.

  • Captulo 2

    28

    2. PROGRAMAO EM LINGUAGEM C

    2.1. INTRODUO A PROGRAMAO EM LINGUAGEM C

    2.1.1. Declarao de Variveis

    As diferenas entre os tipos de variveis do portugol para o C so:

    inteiro = int

    real = float, double

    caracter = char

    lgico = bool (normalmente no necessrio tipos booleanos para testes lgicos)

    Para alterar a preciso dos valores podem ser utilizados modificadores:

    C ANSI Modificadores Exemplos:

    char

    int

    float

    double

    signed

    unsigned

    long

    short

    int x ; (x um inteiro com sinal - signed)

    unsigned int y; (x um inteiro sem sinal - unsigned)

    long z; (z um inteiro com o dobro do tamanho de um int)

    short int v; (v tem o mesmo tamanho de um int)

    Exemplos:

    a) signed int (ou simplesmente int):

    Tipo de varivel que se refere a um nmero inteiro com sinal. Ou seja, se um

    varivel int ocupa dois bytes na memria, ento, o maior valor decimal que pode ser

    armazenado neste tipo de varivel deve estar entre 32.767 a 32.767.

    O primeiro bit (mais significativo) representa o sinal (0 positivo e 1 negativo). Ento o

    maior valor decimal que pode ser armazenado em 15 bits 32.767.

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

    1 bit de sinal 15 bits de informao

  • Captulo 2

    29

    b) unsigned int;

    Tipo de varivel que se refere a um nmero inteiro sem sinal. Ou seja, se um varivel

    int ocupa dois bytes na memria, ento, o maior valor decimal que pode ser

    armazenado neste tipo de varivel deve estar entre 0 a 65.535.

    O primeiro bit (mais significativo) no representa mais o sinal. Ento o maior valor

    decimal que pode ser armazenado em 16 bits 65.535.

    O tamanho em bytes de cada tipo de varivel no C, apresentado na tabela abaixo.

    Tipo Tamanho em Bits Faixa de valores

    char 8 -127 a 127

    unsigned char 8 0 a 255

    signed char 8 -127 a 127

    int 16 -32767 a 32767

    unsigned int 16 0 a 65.535

    signed int 16 mesmo que int

    short int 16 mesmo que int

    unsigned short int 16 mesmo que unsigned int

    signed short int 16 mesmo que short int

    long int 32 -2.147.483.647 a 2.147.483.647

    signed long int 32 Mesmo que long int

    unsigned long int 32 0 a 4.294.967.295

    float 32 seis dgitos de preciso

    double 64 dez dgitos de preciso

    long double 80 dez dgitos de preciso

    Fonte: C Completo e Total; Herbert Schildt.

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

    16 bits de informao

  • Captulo 2

    30

    2.1.2. Comando de atribuio:

    O comando de atribuio em linguagem dado pelo smbolo = (igual).

    Exemplo:

    float A, B, C;

    A = 10;

    B = 20;

    C = A + B;

    2.1.3. Blocos de Comandos:

    Os blocos de comando, definidos no portugol pelas palavras incio/fim, na linguagem C

    sero representados pelas { } (chaves).

    Exemplo:

    Portugol Linguagem C

    incio

    real A, B, C;

    A

  • Captulo 2

    31

    2.2. BORLAND C++ BUILDER

    2.2.1. O ambiente de desenvolvimento

    O C++ Builder tem um ambiente de desenvolvimento integrado, com as ferramentas

    necessrias para a criao dos mais variados programas. Para o desenvolvimento de

    aplicaes sero usados basicamente, formulrios, alguns componentes e suas

    propriedades, "units", e bibliotecas.

    Um programa escrito em ANSI C representado por um arquivo que contm o cdigo

    fonte e possui extenso .C (nomearquivo.c). No C++ Builder o cdigo fonte escrito

    dentro de uma unit e o arquivo gravado possui a extenso ".cpp". O projeto tambm

    tem extenso .cpp, e pode conter uma ou mais units, e um ou mais formulrios

    (forms). Ao ser compilado gerado um arquivo executvel com a extenso .exe. O

    arquivo com extenso .h, armazena as definies dos recursos usados pela unit, e o

    arquivo com extenso .dfm, contm os recursos usados pelo programa.

    Os arquivos .cpp so criados pelo programador, e os demais arquivos so criados

    automaticamente pelo compilador. Os aquivos destacados em negrito fazem parte do

    programa fonte, e sero necessrios toda a vez que for preciso modificar o programa.

    Os demais so gerados a cada compilao.

    Project

    unit

    form

    Os aquivos que fazem parte do projeto, de um programa em C++ Builder, so:

    - unit1.cpp - project1.cpp - unit1.h - unit1.dfm - unit1.obj - project1.obj - project1.res - project1.bpr - project1.exe

  • Captulo 2

    32

    2.2.2. A interface de desenvolvimento

    Quando se inicia a criao de um programa (opo new aplicattion do menu), so

    apresentados ao usurio, a janela do formulrio (form), a barra de componentes

    (component palette) e a barra de propriedades e eventos (object inspector).

    3.2.2.1. Barra de Componentes

    A barra de componentes apresenta todos os elementos que podem ser adicionados a um

    formulrio, para a criao de um programa.

    2.2.2.2. Formulrio (form)

    O formulrio (form) a janela que ir receber os componentes (botes, edits, etc) que iro operar sobre o programa.

    O formulrio a interface entre o programa e o usurio. o meio pelo qual o usurio interage com o programa, seja inserindo dados atravs de uma caixa de texto, seja executando uma funo ao clique de um boto, etc.

    caixa de texto

    boto

    form

    rtulo

  • Captulo 2

    33

    2.2.2.3. Barra de Propriedades

    Cada componente possui uma lista de propriedades (no object inspector) que pode ser alterada

    de acordo com a necessidade do programador. Da mesma forma os eventos podem ser

    utilizados para executarem aes durante o uso do programa.

    2.2.3. A criao de programas

    Enunciado:

    Dado o algoritmo que calcula a soma de dois nmeros, elabore um programa em C, que

    realize as operaes representadas no algoritmo.

    Para resolver este problema, primeiramente necessrio conhecer as diferenas entre os

    comandos do portugol e da linguagem C, como apresentado a seguir:

    Esta janela apresenta as propriedades do componente com o "foco". As propriedades, ou eventos podem ser alterados nesta janela, quando da escrita do programa. Por exemplo:

    a) para alterar o ttulo do formulrio, alterar a propriedade caption;

    b) para alterar o nome do formulrio alterar a propriedade name;

    c) para alterar as cores do formulrio alterar a propriedade color.

    As propriedades podem ser alteradas tambm durante a execuo do programa, bastando referenciar o componente e a respectiva propriedade atravs do conector "->". Assim, no programa, pode-se escrever:

    Form1->Caption = programa1; .

  • Captulo 2

    34

    Portugol Linguagem C

    inicio

    inteiro a,b,c;

    leia(a);

    leia(b);

    c = a + b:

    escreva(c);

    fim

    {

    int a,b,c;

    a = atoi(Edit1->Text.c_str());

    b = atoi(Edit2->Text.c_str());

    c = a + b;

    Edit3->Text = c;

    }

    Algumas diferenas ocorrem na leitura, escrita e atribuio de valores, como tambm em

    relao aos operadores relacionais, lgicos e aritmticos, como apresentado a seguir:

    a) Entrada de Dados

    leia(n); escrito como n = atoi(Edit1->Text.c_str());

    Onde,

    Edit1 o nome do componente EditBox;

    Edit1->Text a propriedade texto de Edit1;

    Edit1->Text.c_str() o formalismo do Builder para leitura de string;

    atoi() a funo do C para converter caracteres alfanumricos (texto) em valor

    numrico do tipo inteiro.

    Para usar a funo atoi() necessrio incluir uma biblioteca do C:

    #include

    Obs:

    - Note que Edit1 o nome do componente e Text uma das propriedades; esta

    especificamente diz respeito ao contedo da caixa de texto.

    - Note tambm que Edit1 o nome do EditBox. Este nome ser usado para todo

    o programa. Lembre que atravs da propriedade name, o nome pode ser

    alterado. Por exemplo, Texto1->Text = ...;

  • Captulo 2

    35

    b) Atribuio

    f Text = f; (a propriedade Text do Edit2, ir conter o valor de f).

    d) Operadores aritmticos em C

    Operao Smbolo Operao Smbolo

    Adio + Raiz quadrada sqrt()

    Subtrao - Exponenciao pow()

    Multiplicao * Resto %

    Diviso /

    e) Operadores relacionais

    Operao Smbolo Operao Smbolo

    Maior que > Menor ou igual < =

    Menor que < Igualdade = =

    Maior ou igual > = Diferena ! =

    2.2.4. Passos para Criar uma Aplicao em C

    A seguir ser apresentada uma sequncia de passos para a criao de programas em C, no

    ambiente do Borland C++ Builder.

  • Captulo 2

    36

    a) Abrindo o C++ Builder

    No Windows, a partir do menu iniciar (ou atalho) selecione a opo "C++Builder 5". Ao

    ser iniciado, o ambiente apresenta os menus, barras de ferramentas, um formulrio

    denominado Form1 e uma rea de texto, denominada Unit1.cpp. Estes elementos

    flutuam sobre a tela, e sua exibio pode ser alternada, apenas mudando o "foco".

    b) Adicionando Formulrio

    Um formulrio em branco (sem componentes) automaticamente apresentado ao se

    criar uma aplicao. Se necessrio, um formulrio pode ser adicionado aplicao

    atravs do boto "new form" como apresentado pelo menu abaixo.

    c) Inserindo Componentes no Formulrio

    O formulrio representa a rea de trabalho, onde ser realizada a interface entre o

    programa e o usurio. Neste formulrio devem ser inseridos os componentes da

    linguagem (botes, caixas de texto, caixas de verificao, etc). Para inserir um

    componente, necessrio escolher o componente desejado na barra de componentes e

    clicar na regio do formulrio onde quiser adicion-lo.

    Ao serem incorporados ao Formulrio, os componentes assumem nomes padronizados.

    O formulrio Form1 contm:

    Edit Box (caixa de texto): Edit1

    Edit Box (caixa de texto): Edit2

    Edit Box (caixa de texto): Edit3

    label (rtulo): Label1

    label (rtulo): Label2

    label (rtulo): Label3

    Button (Boto): Button1

  • Captulo 2

    37

    Os nomes podem ser alterados atravs das propriedades do object inspector. Ento o

    formulrio pode ficar como:

    d) Codificao do Programa

    A janela de edio permite visualizar e alterar o cdigo do programa de cada "Unit"

    como mostra a figura abaixo. Cada componente pode perceber a ocorrncia de um

    evento, por exemplo, o clique em um boto. Ento, pode-se associar ao componente

    Button, as linhas de cdigo que executam as operaes. Ou seja, para calcular a soma

    entre dois nmeros, devemos fornecer um valor como parmetro atravs de uma

    EditBox, e o clculo do fatorial s ser executado mediante o clique do boto.

    Normalmente associa-se:

    comandos, aos componentes do tipo Button;

    entrada e sada de dados na tela, aos componentes EditBox ou Label;

    parmetros condicionais aos componentes RadioButton e CheckBox.

    Para modificar o texto do label ou boto, deve-se alterar o contedo da propriedade Caption. Para Edits, alterar a propriedade Text. Lembre que a propriedade Caption no altera o nome do componente, apenas altera o texto que aparece sobre o componente. Assim, no programa os nomes continuam sendo Edit1, Edit2, ... etc. Para mudar o nome usar a propriedade Name.

  • Captulo 2

    38

    e) Compilando um Programa

    O C++ Builder deve compilar o programa para verificar a sintaxe, e gerar o cdigo

    executvel. Para compilar selecione a opo correspondente no menu, ou use as teclas

    de atalho Ctrl F9 ou F9.

    f) Executando um Programa

    Para executar o programa, utilize o comando RUN ou a tecla F9.

    Local para declarao das bibliotecas

    Evento clique do boto

    Programa em C

  • Captulo 2

    39

    g) Salvando o Programa

    Para gravar o programa recomenda-se criar uma pasta, pois vrios arquivos gerados pelo

    compilador devem ser armazenados. Se este local for conhecido, ento facilitar a

    localizao e manuteno dos programas. Use o comando "Save All" para que todos os

    arquivos sejam salvos. Uma janela, como abaixo, apresentada. Fornea um nome para

    o arquivo Unit1.cpp. Em seguida dever ser fornecido um nome para o arquivo de

    projeto Project1.cpp .

    Obs:

    - Como a unit e o projeto tem a mesma extenso (.cpp), no esquea de dar nomes

    diferentes para os dois arquivos.

    - Grave sempre no HD, pois o C++ gera vrios arquivos durante a compilao.

    2.2.5. Exerccios

    1. Escreva um programa em C para somar e subtrair dois nmeros fornecidos por um

    usurio, e apresentar o resultado usando um Editbox.

    2. Modifique o exerccio 3.1, para apresentar o resultado atravs de um Label;

    3. Escreva um programa em C que calcule as razes de uma equao de 2. grau.

    4. Escreva um algoritmo e um programa em C que conte quantas vezes um boto foi

    pressionado, e apresente o resultado em um EditBox.

  • Captulo 2

    40

    2.3. ESCOPO DE VARIVEIS

    2.3.1. Variveis locais

    As variveis devem existir (ser declaradas) antes de serem usadas no programa. Existem

    duas formas de declarao de variveis. As variveis locais so declaradas dentro de um

    procedimento ou funo, ou associadas a um evento, como por exemplo, um boto no

    formulrio. Estas variveis so utilizadas dentro do bloco de comandos do boto. Estas

    variveis no so acessveis por outras partes do programa, por exemplo, associadas a

    um segundo boto.

    Exemplo

    Escreva um algoritmo e um programa em C (usando C++ Builder), para contar o

    nmero de vezes que foi apertado o boto [OK] do formulrio abaixo. Implementar este

    exemplo e analisar o resultado obtido.

    Dentro do boto OK:

    { int vezes = 0; // varivel local

    vezes = vezes + 1; // incrementa o nmero de vezes

    Edit1->Text = vezes; // apresenta resultado

    }

  • Captulo 2

    41

    2.3.2. Variveis globais

    As variveis globais devem ser declaradas em um local que possa ser conhecida por

    todos os componentes do programa, normalmente no incio do programa (da unit). Uma

    varivel global pode ser usada por qualquer componente do programa. Por exemplo,

    dois botes que realizam operaes diferentes tm acesso s mesmas variveis.

    No incio da UNIT.CPP

    int vezes = 0; // varivel global

    Dentro do boto OK: {

    vezes = vezes + 1; // conta o num. de vezes

    Edit1->Text = vezes; // apresenta resultado

    }

    Quando usar variveis locais ou globais?

    Normalmente usa-se variveis globais quando um valor deve ser conhecido e

    manipulado em vrias partes do programa. Normalmente usa-se variveis locais quando

    a varivel tem uma funo especfica dentro de um bloco de comandos (por exemplo,

    contador de loop).

    Talvez a diferena mais importante entre os dois tipos, que os contedos de variveis

    locais esto alocadas na memria somente durante a execuo do bloco de programa que

    as necessita. Assim, depois de usada a memria liberada e quando necessrio alocada

    novamente.

    Os contedos de variveis globais esto disponveis enquanto o programa estiver sendo

    executado. A regio de memria alocada para cada varivel, permanece bloqueada

    durante toda a execuo do programa.

  • Captulo 2

    42

    2.4. Desvio condicional em C

    O comando if - else permite expressar decises que alteram o fluxo de execuo de um

    programa. A sintaxe dada por:

    2.4.1. Desvio Condicional Simples

    Portugol Bloco com N comandos Apenas um comando

    ...

    se (condio) ento

    comando;

    fim se

    ...

    ... if (condio)

    { comando 1;

    comando 2;

    ...

    comando n;

    }

    ...

    ...

    if (condio)

    comando;

    ...

    2.4.2. Desvio Condicional Composto

    Portugol Bloco com N comandos Apenas um comando

    se (condio) ento

    comando 1;

    seno comando 2;

    fim se

    if (condio)

    { comando 1;

    comando 2;

    comando 3;

    } else

    { comando n-1; comando n;

    }

    if (condio)

    comando 1;

    else

    comando 2;

    Com apenas um comando no necessrio abrir um bloco com chaves { }.

    Com apenas um comando no necessrio abrir um bloco com chaves { }.

  • Captulo 2

    43

    2.4.3. Ifs Aninhados

    se (condio) ento

    se (condio)

    ento comando 1;

    fim se se (condio)

    ento comando 2;

    seno comando 3;

    fim se

    seno comando 4;

    fim se

    if (condio)

    { if (condio) comando 1;

    if (condio) comando 2;

    else comando 3;

    } else

    comando 4;

    if (condio)

    comando 1;

    else

    if (condio)

    comando 2;

    else if (condio)

    comando 4;

    2.4.4. Exemplo

    Escreva um algoritmo em portugol e o respectivo programa em C, para calcular as razes de

    uma equao do 2.o grau: Ax + Bx + C.

    Soluo sem o uso de if.

    - Algoritmo em Portugol: Inicio

    inteiro: A, B, C;

    real: x1, x2;

    leia(A, B, C);

    x1

  • Captulo 2

    44

    - Programa em Linguagem C++ Builder #include // contm atoi()

    #include // contm pow() e sqrt()

    // no boto OK:

    {

    int A, B, C;

    float x1, x2;

    A = atoi(Edit1->Text.c_str());

    B = atoi(Edit2->Text.c_str());

    C = atoi(Edit3->Text.c_str()); x1 = (-B + sqrt(pow(B,2) - 4*A*C))/ 2*A;

    x2 = (-B - sqrt(pow(B,2) - 4*A*C))/ 2*A;

    Edit4->Text = x1;

    Edit5->Text = x2;

    } b) Soluo com o uso de if.

    - Algoritmo em Portugol:

    inicio

    inteiro: A, B, C, D; real: x1, x2;

    leia(A, B, C);

    D = 0) ento

    x1

  • Captulo 2

    45

    - Programa em Linguagem C++ Builder

    #include // contm atoi()

    #include // contm pow()

    // no boto OK:

    { int A, B, C, D;

    float x1, x2;

    A = atoi(Edit1->Text.c_str());

    B = atoi(Edit2->Text.c_str());

    C = atoi(Edit3->Text.c_str());

    D = pow(B,2) - 4*A*C; if (D >= 0)

    {

    x1 = (-B + sqrt(D))/ 2*A;

    x2 = (-B - sqrt(D))/ 2*A;

    Edit4->Text = x1;

    Edit5->Text = x2;

    } else

    ShowMessage("Delta < 0"); }

    2.4.5. Exerccio

    1. Escreva um programa para converter graus Celsius para Fahrenheit, e vice versa, a partir de

    uma temperatura fornecida por um usurio, usando o form A) e o form B).

    form A form B

  • Captulo 2

    46

    2.5. Laos de repetio em C

    2.5.1. Loop Para/Faa (for)

    Exemplo :

    Desenvolva um programa que gere uma tabela de converso de temperatura de graus

    Farenheit para graus Celcius.

    Portugol Linguagem C++ Builder

    inicio

    inteiro x;

    real C, F;

    para F de 0 at 100 faa

    C

  • Captulo 2

    47

    2.5.3. Loop Faa/Enquanto (do/while)

    Portugol Linguagem C++ Builder

    inicio

    inteiro x;

    real C, F;

    F Text = f;

    }

  • Captulo 2

    48

    2.5.5 Exerccios

    1. Altere o loop for do exemplo anterior, para os loops while e do/while.

    2. Escreva o algoritmo e o respectivo programa em C para um programa que conte a

    quantidade de nmeros pares e mpares digitados por um usurio. O usurio pode digitar

    quantos nmeros quiser, e pode encerrar o programa quando desejar.

    3. Escreva o algoritmo e o respectivo programa em C, para um programa que conte a

    quantidade de nmeros primos digitados por um usurio. O usurio pode digitar quantos

    nmeros quiser, e pode encerrar o programa quando desejar.

  • Captulo 2

    49

    2.6. PROCEDIMENTOS EM C

    2.6.1. Definio

    A utilizao de procedimentos permite que um conjunto de comandos possa ser usado

    repetidas vezes dentro de um programa, sem a necessidade de reescrever o cdigo vrias

    vezes. Um bloco de comandos associado a um nome (nome do procedimento); sempre que

    for necessrio executar estes comandos, basta chamar o nome do procedimento.

    2.6.2. Exemplo 1

    Desenvolva um programa que calcule a soma de dois valores reais fornecidos pelo usurio.

    - Formulrio:

    - Dentro do Boto [+]:

    void __fastcall TForm1::Button1Click(TObject *Sender)

    { float valor1,valor2,resp;

    valor1 = atof(Edit1->Text.c_str());

    valor2 = atof(Edit2->Text.c_str());

    resp = valor1 + valor2;

    Edit3->Text = resp;

    }

  • Captulo 2

    50

    Agora suponha que o usurio queira somar 10 a cada valor1 fornecido. Pode-se criar um novo

    boto para realizar esta operao como apresentado abaixo:

    - Formulrio:

    - Dentro do Boto [+ 10]:

    void __fastcall TForm1::Button2Click(TObject *Sender)

    { float valor1,resp;

    valor1 = atof(Edit1->Text.c_str());

    resp = valor1 + 10;

    Edit3->Text = resp;

    }

    Observando-se os dois botes, percebe-se facilmente que os dois realizam uma operao de

    soma de dois valores (valor1 + valor2 ou valor1 + 10).

    Cada uma das operaes de soma ter um cdigo correspondente em linguagem de mquina.

    Ou seja, dois trechos em liguagem de mquina que iro realizar a mesma operao: somar

    dois valores. Pode-se otimizar este programa escrevendo uma nica vez a operao de soma

    de forma que possa ser acessada pelos dois botes.

    Ento podemos criar um procedimento que realiza a soma, da seguinte forma:

  • Captulo 2

    51

    //-----------------------------------------------------------------------

    #include

    #pragma hdrstop

    #include

    #include "Unit1.h"

    #pragma package(smart_init)

    #pragma resource "*.dfm"

    TForm1 *Form1;

    //------------------------------------------------------------------------

    float resp;

    //-------------------------------------------------------------------------

    void Soma(float a, float b)

    {

    resp = a + b;

    }

    //-------------------------------------------------------------------------

    __fastcall TForm1::TForm1(TComponent* Owner)

    : TForm(Owner)

    {

    }

    //-------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    float valor1,valor2;

    valor1 = atof(Edit1->Text.c_str());

    valor2 = atof(Edit2->Text.c_str());

    Soma(valor1,valor2);

    Edit3->Text = resp;

    }

    //-------------------------------------------------------------------------

    void __fastcall TForm1::Button2Click(TObject *Sender)

    {

    float valor1;

    valor1 = atof(Edit1->Text.c_str());

    Soma(valor1,10);

    Edit3->Text = resp;

    }

    //------------------------------------------------------------------------

    1-Bibliotecas e diretivas de compilao

    2-Espao para declarao de variveis globais

    3-Espao para declarar procedimentos e funes ou seus prottipos.

    4-Trecho de programa do boto [+] e a chamada do procedimento Soma.

    5-Trecho de programa do boto [+ 10] e a chamada do procedimento Soma.

  • Captulo 2

    52

    Da listagem anterior pode-se observar que a observao nmero:

    1 identifica o local aonde so adicionadas as bibliotecas e diretivas do programa. Sempre no

    incio da Unit,

    2 identifica o local para declarao de variveis globais. As variveis globais devem existir

    antes de serem usadas pelo programa, pos isto vem antes; note que a varivel resp usado

    dentro do procedimento, e tambm dentro de cada boto.

    3 identifica o local para escrever os procedimentos (ou prottipos). Da mesma forma que a

    varivel global, o procedimento precisa primeiro existar para que possa ser usado pelo resto

    do programa. Pode ser escrito o procedimento inteiro ou apenas o prottipo; neste caso o

    bloco do procedimento pode ser escrito em qualquer parte do programa. (menos dentro de

    eventos do formulrio).

    4- identifica a chamada do procedimento. No momento em que precisa-se calcular a soma,

    chama-se o procedimento. Note que existe passagem de parmetros. O contedo de valor1

    passado para a varivel a do procedimneto e o contedo de valor2 passado para a varivel b

    do procedimento. Observe tambm que valor1 e valor2 so variveis locais do boto, portanto

    no podem ser acessadas pelo procedimento; por isto necessrio realizar passagem de

    parmetros. As variveis a e b so locais do procedimento (s existem dentro do

    procedimento), mas a resposta atribuda a resp, que uma varivel global, portanto pode ser

    acessada por todo o programa.

    5- igual ao item 4, com o valor constante 10 em vez da varivel valor2.

    2.6.3. Prottipo

    Dado o exemplo anterior, formalmente pode-se criar o prottipo de um procedimento com

    apresentado a seguir:

    NomeDoProcedimento(lista de parmetros);

    Sempre declarando o procedimento como global, ele pode ser acessado em qualquer parte do

    programa.

  • Captulo 2

    53

    2.6.4. Parmetros

    Uma ou mais variveis de tipos iguais ou diferentes que so utilizadas pelo procedimento para

    a realizao de alguma operao especfica. Durante a execuo sequencial de um programa,

    um procedimento pode ser chamado e pode receber alguns valores para serem operados.

    2.6.5. Exemplo 2

    Dado o programa em C, que calcula as razes de uma equao do segundo grau, modifique a

    estrutura para a utilizao de um procedimento para limpar a tela (contedo das variveis e

    caixas de texto).

    a) Sem Procedimento

    // declarao de variveis globais int A, B, C, D; // parmetros da equao

    float x1, x2; // razes da equao

    . . .

    //-----------------------------------------------------

    // boto para o clculo das razes

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    A = atoi(Edit1->Text.c_str()); // entrada dos valores

    B = atoi(Edit2->Text.c_str());

    C = atoi(Edit3->Text.c_str());

  • Captulo 2

    54

    D = pow(B,2) - 4*A*C; // calcula delta

    if ( D >= 0 ) // testa se existe razes

    {

    x1 = (-B + sqrt(D))/ 2*A;

    x2 = (-B - sqrt(D))/ 2*A;

    Edit4->Text = x1; // apresenta resposta

    Edit5->Text = x2;

    }

    else

    {

    ShowMessage("Delta < 0");

    Edit1->Text = ""; // limpa Caixas de Texto

    Edit2->Text = "";

    Edit3->Text = "";

    Edit4->Text = "";

    Edit5->Text = "";

    A=0;B=0;C=0;D=0; // limpa valores da equao

    x1=0;x2=0; // limpa resultado

    }

    }

    //-----------------------------------------------------

    // boto para limpar os valores da tela

    void __fastcall TForm1::Button2Click(TObject *Sender)

    {

    Edit1->Text = ""; // limpa Caixas de Texto

    Edit2->Text = "";

    Edit3->Text = "";

    Edit4->Text = "";

    Edit5->Text = "";

    A=0;B=0;C=0;D=0; // limpa valores da equao

    x1=0;x2=0; // limpa resultado

    }

    //-----------------------------------------------------

    No exemplo acima , note que os trechos de programa escritos em vermelho se repetem. Ento

    podemos transformar o trecho repetido, em um procedimento.

  • Captulo 2

    55

    b) Com Procedimento

    // declarao de variveis globais int A, B, C, D;

    float x1, x2;

    //----------------------------------------------------

    // procedimento para limpar a tela

    void LimpaTela(void)

    {

    Form1->Edit1->Text = ""; // limpa Caixas de Texto

    Form1->Edit2->Text = "";

    Form1->Edit3->Text = "";

    Form1->Edit4->Text = "";

    Form1->Edit5->Text = "";

    A=0;B=0;C=0;D=0; // limpa valores da equao

    x1=0;x2=0; // limpa resultado

    }

    //-----------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    A = atoi(Edit1->Text.c_str());

    B = atoi(Edit2->Text.c_str());

    C = atoi(Edit3->Text.c_str());

    D = potencia(B,2) - 4*A*C;

    if ( D >= 0 )

    {

    x1 = (-B + sqrt(D))/ 2*A;

    x2 = (-B - sqrt(D))/ 2*A;

    Edit4->Text = x1;

    Edit5->Text = x2;

    }

    else

    {

    ShowMessage("Delta < 0");

    LimpaTela();

    }

    }

    //-----------------------------------------------------

  • Captulo 2

    56

    //-----------------------------------------------------

    void __fastcall TForm1::Button2Click(TObject *Sender)

    {

    LimpaTela();

    }

    //----------------------------------------------------

    Neste exemplo, foi criado um procedimento com a funo de limpar os edits. Note que neste

    caso no existe passagem de parmetros (void) porque o procedimento no precisa receber

    nenhum valor.

    2.7. FUNO EM C

    2.7.1. Definio

    Uma funo um procedimento que retorna um valor (um resultado). Normalmente um

    bloco de comandos que executa uma tarefa especfica, e aps execut-la devolve um resultado

    das operaes realizadas. Este resultado pode ser atribudo a uma varivel em qualquer parte

    do programa principal. Tanto uma funo, como um procedimento podem ser chamados

    (executados) vrias vezes, durante o funcionamento do programa.

    2.7.2. Declarao

    tipo NomeFuncao(tipo do parametro 1, tipo do parametro2, ... , tipo do parametroN)

    {

    . . .

    return valor;

    }

    2.7.3 Parmetros e retorno

    Parmetros so os valores passados para a funo que vo sofrer algum tipo de modificao

    durante a execuo dos comandos da funo. Sempre deve ser retornado um valor (return). A

  • Captulo 2

    57

    varivel que vai retornar o valor deve ser do mesmo tipo da funo. Observe que a funo

    sempre tem um tipo, ou seja, uma funo pode ser do tipo inteiro, real, etc. Quando a funo

    no tem um tipo (void), ento ela no pode retornar um valor, ou seja passa a ser um

    procedimento.

    2.7.4. Exemplo 1

    Desenvolva um programa que calcule a soma de dois valores reais fornecidos pelo usurio.

    - Formulrio:

    No exemplo de procedimento os contedos das variveis locais eram trocados via passagem

    de parmetros, mas a varivel de resposta resp, passou a ser global a fim de receber a soma

    dos contedos passados para a e b.

    Agora, se a varivel resp no for mais declarada como global, ou seja, passar a ser local de

    cada boto, ento pode-se reescrever o procedimento na forma de uma funo, como

    apresentado a seguir:

  • Captulo 2

    58

    //-----------------------------------------------------------------------

    #include

    #pragma hdrstop

    #include

    #include "Unit1.h"

    #pragma package(smart_init)

    #pragma resource "*.dfm"

    TForm1 *Form1;

    //------------------------------------------------------------------------

    //-------------------------------------------------------------------------

    void Soma(float a, float b)

    {

    float r;

    r = a + b;

    return r;

    }

    //-------------------------------------------------------------------------

    __fastcall TForm1::TForm1(TComponent* Owner)

    : TForm(Owner)

    {

    }

    //-------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    float valor1,valor2,resp;;

    valor1 = atof(Edit1->Text.c_str());

    valor2 = atof(Edit2->Text.c_str());

    resp = Soma(valor1,valor2);

    Edit3->Text = resp;

    }

    //-------------------------------------------------------------------------

    void __fastcall TForm1::Button2Click(TObject *Sender)

    {

    float valor1, resp;

    valor1 = atof(Edit1->Text.c_str());

    resp = Soma(valor1,10);

    Edit3->Text = resp;

    }

    1-Bibliotecas e diretivas de compilao.

    2-Espao para declarao de variveis globais.

    3-Espao para declarar procedimentos e funes ou seus prottipos.

    4-Trecho de programa do boto [+] e a chamada da funo Soma.

    5-Trecho de programa do boto [+ 10] e a chamada da funo Soma.

  • Captulo 2

    59

    Da listagem anterior pode-se observar que a observao nmero:

    1 identifica o local aonde so adicionadas as bibliotecas e diretivas do programa. Sempre no

    incio da Unit,

    2 identifica o local para declarao de variveis globais. Note que neste exemplo, no

    utiliza-se mais variveis globais;

    3 identifica o local para escrever os procedimentos (ou prottipos). Da mesma forma que a

    varivel global, o procedimento precisa primeiro existar para que possa ser usado pelo resto

    do programa. Pode ser escrita toda a funo ou apenas o prottipo; neste caso o bloco do

    procedimento pode ser escrito em qualquer parte do programa. (menos dentro de eventos do

    formulrio).

    4- identifica a chamada da funo. No momento em que precisa-se calcular a soma, chama-se

    o procedimento. Note que existe passagem de parmetros. O contedo de valor1 passado

    para a varivel a do procedimneto e o contedo de valor2 passado para a varivel b do

    procedimento. Observe tambm que valor1 e valor2 so variveis locais do boto, portanto

    no podem ser acessadas pelo procedimento; por isto necessrio realizar passagem de

    parmetros. As variveis a e b so locais do procedimento como tambm agora, a varivel r.

    para que o valor de r possa ser conhecido pelo restante do programa a funo deve retornar o

    contedo de r, atravs do comando return. A varivel local resp recebe o valor retornado por r.

    5- igual ao item 4, com o valor constante 10 em vez da varivel valor2.

    2.7.5. Exemplo 2

    Modifique o programa de clculo das razes, para o uso de uma funo que calcule o valor da

    exponencial de um nmero qualquer (x^y), sem o uso do comando pow().

  • Captulo 2

    60

    #include

    #pragma hdrstop

    #include "raizes.h"

    #include // contm atoi()

    #include // contm pow()

    #pragma package(smart_init)

    #pragma resource "*.dfm"

    TForm1 *Form1;

    //----------------------------------------------------

    // declarao de variveis globais

    int A, B, C, D;

    float x1, x2;

    //----------------------------------------------------

    __fastcall TForm1::TForm1(TComponent* Owner)

    : TForm(Owner)

    { }

    //-----------------------------------------------------

    void LimpaTela(void)

    {

    Form1->Edit1->Text = ""; // limpa Caixas de Texto

    Form1->Edit2->Text = "";

    Form1->Edit3->Text = "";

    Form1->Edit4->Text = "";

    Form1->Edit5->Text = "";

    A=0;B=0;C=0;D=0; // limpa valores da equao

    x1=0;x2=0; // limpa resultado

    }

    //------------------------------------------------------

    // funo que realiza o clculo da potncia

    long potencia(int base, int exp)

    {

    int x; // conta o nmero de vezes a ser multiplicado

    long resp = base;

    for (x=1; x

  • Captulo 2

    61

    //-----------------------------------------------------

    void __fastcall TForm1