Distancia de Fortaleza as Municipios do Ceara Das Cidades MaisCeará
Apostila_portugol
-
Upload
gustavo-nunes -
Category
Documents
-
view
15 -
download
0
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