Download - 3393_Apostila TP
-
8/7/2019 3393_Apostila TP
1/190
PONTIFCIA UNIVERSIDADE CATLICA DO PARAN
CENTRO DE CINCIAS EXATAS E DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA MECATRNICA
TCNICAS DE PROGRAMAO
TPI e TPII
Verso: julho/2003
-
8/7/2019 3393_Apostila TP
2/190
1
PONTIFCIA UNIVERSIDADE CATLICA DO PARAN
CENTRO DE CINCIAS EXATAS E DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA MECATRNICA
APOSTILA DE TCNICAS DE PROGRAMAO
ELABORAO: PROF. MARCELO RUDEK
REVISO: PROF. MAURCIO C. MELLO
PROFa. MARIA A. ROVEREDO
COLABORAO: GELSON LUIZ CARNEIRO
ADRIANO ZELAZOWSKI PEREIRA
Verso: julho/2003
-
8/7/2019 3393_Apostila TP
3/190
I
1. INTRODUO PROGRAMAO: ALGORITMOS ................................................5
1.1.EXEMPLOS ...........................................................................................................................51.2.ALGORITMOSEMPORTUGOL ..................................................................................61.3.PORTUGOL ......................................................................................................................61.4.VARIVEIS ...........................................................................................................................71.4.1.DECLARAO DE VARIVEIS.............................................................................................71.4.1.1.TIPOS DE VARIVEIS.......................................................................................................81.4.1.2.IDENTIFICADORES DE VARIVEIS ...................................................................................81.4.2CONSTANTES ....................................................................................................................101.5.ESTRUTURA DO ALGORITMO EM PORTUGOL...................................................................10
1.5.1.COMANDO DE ATRIBUIO (
-
8/7/2019 3393_Apostila TP
4/190
II
a) Abrindo o C++ Builder.........................................................................................................30b) Adicionando Formulrio ......................................................................................................30c) Inserindo Componentes no Formulrio................................................................................30d) Codificao do Programa.....................................................................................................31
e) Compilando um Programa....................................................................................................32f) Executando um Programa .....................................................................................................32g) Salvando o Programa ...........................................................................................................332.2.5.EXERCCIOS .....................................................................................................................332.3.ESCOPODEVARIVEIS .............................................................................................342.3.1.VARIVEIS LOCAIS ..........................................................................................................34EXEMPLO...................................................................................................................................342.3.2.VARIVEIS GLOBAIS ........................................................................................................352.4.DESVIO CONDICIONAL EM C.............................................................................................362.4.1.DESVIO CONDICIONAL SIMPLES.......................................................................................362.4.2.DESVIO CONDICIONAL COMPOSTO ..................................................................................36
2.4.3.IFS ANINHADOS ..............................................................................................................372.4.4.EXEMPLO .........................................................................................................................37SOLUO SEM O USO DE IF.....................................................................................................372.4.5.EXERCCIO .......................................................................................................................392.5.LAOS DE REPETIO EM C..............................................................................................402.5.1.LOOP PARA/FAA (FOR) ..................................................................................................402.5.2.LOOP ENQUANTO/FAA (WHILE).....................................................................................402.5.3.LOOP FAA/ENQUANTO (DO/WHILE) ...............................................................................412.5.4.EXEMPLO .........................................................................................................................412.5.5EXERCCIOS ......................................................................................................................422.6.PROCEDIMENTOSEMC.............................................................................................432.6.1.DEFINIO.......................................................................................................................432.6.2.EXEMPLO 1 ......................................................................................................................432.6.3.PROTTIPO ......................................................................................................................462.6.4.PARMETROS...................................................................................................................472.6.5.EXEMPLO 2 ......................................................................................................................472.7.FUNOEMC ...............................................................................................................502.7.1.DEFINIO.......................................................................................................................502.7.2.DECLARAO ..................................................................................................................502.7.3PARMETROS E RETORNO .................................................................................................502.7.4.EXEMPLO 1 ......................................................................................................................51
2.7.5.EXEMPLO 2 ......................................................................................................................532.7.6.EXERCCIOS .....................................................................................................................552.8.INCREMENTOS E DECREMENTOS ......................................................................................562.8.1.INCREMENTO/DECREMENTO A POSTERIORI .....................................................................562.8.2.INCREMENTO/DECREMENTO A PRIORI .............................................................................572.8.3.EXERCCIO .......................................................................................................................572.9.ATRIBUIO COMPOSTA ..................................................................................................582.9.1.EXERCCIO .......................................................................................................................582.10. ATRIBUIO MLTIPLA.................................................................................................582.10.1.EXEMPLO .......................................................................................................................582.11.OPERADORINTERROGAO (?) .....................................................................................59
2.12.NMEROS ALEATRIOS ..................................................................................................59
-
8/7/2019 3393_Apostila TP
5/190
III
2.12.1.SINTAXE DO COMANDO .................................................................................................592.12.2.EXEMPLO .......................................................................................................................592.13 COMANDO SWITCH/CASE ..................................................................................................602.13.1.SINTAXE DO COMANDO ..................................................................................................60
2.13.2.EXEMPLO .......................................................................................................................602.14.TIMER..............................................................................................................................612.14.1.OCOMPONENTE TIMER NO C++BUILDER.....................................................................612.14.2.AS PROPRIEDADES DO TIMER.........................................................................................622.14.3.EXEMPLO .......................................................................................................................622.14.4.EXERCCIO .....................................................................................................................62
3. ESTRUTUAS HOMOGNEAS DE DADOS..................................................................63
3.1.MATRIZESUNIDIMENSIONAIS(VETORES) .........................................................63
3.1.1.EXEMPLOS .......................................................................................................................633.1.2.INDEXAO .....................................................................................................................633.1.3.EXEMPLO .........................................................................................................................643.1.4.EXERCCIO .......................................................................................................................653.2.ORDENAO DE VETORES .................................................................................................653.2.1.ALGORITMO DE ORDENAO (BOLHA).............................................................................653.2.2.EXERCCIO .......................................................................................................................663.3.STRINGS..........................................................................................................................673.3.1.EXEMPLO 1.......................................................................................................................673.3.2.EXEMPLO 2.......................................................................................................................683.3.3.COPIANDO STRINGS .........................................................................................................68
3.3.4.COMPARAO DE STRINGS ..............................................................................................693.3.5.TAMANHO DE STRINGS.....................................................................................................693.3.6.COMPARAO DE ELEMENTOS DA STRING ......................................................................703.3.7.CONVERSO DE TIPOS ......................................................................................................703.3.7.1. convertendo valores numricos para caracter..............................................................713.3.7.2. convertendo string para valores numricos .................................................................713.3.8EXERCCIOS ......................................................................................................................723.4.MATRIZES......................................................................................................................733.4.1.MATRIZES BIDIMENSIONAIS ............................................................................................733.4.2.MATRIZES MULTIDIMENSIONAIS ......................................................................................743.4.3.MATRIZES DE STRINGS.....................................................................................................74
3.4.4.EXERCCIOS .....................................................................................................................76
4. PONTEIROS EM C ...........................................................................................................78
4.1.DEFINIO ....................................................................................................................784.2.DECLARAO DE UM PONTEIRO .......................................................................................794.3.EXERCCIOS .......................................................................................................................804.4.PONTEIROS PARA MATRIZ.................................................................................................824.5.VETORES DE PONTEIROS ..................................................................................................854.5.1.EXEMPLO 1 ......................................................................................................................85
4.5.2.EXERCCIO .......................................................................................................................87
-
8/7/2019 3393_Apostila TP
6/190
IV
4.5.3.EXEMPLO 2 ......................................................................................................................874.5.4.EXERCCIOS .....................................................................................................................88
5. ALOCAO DINMICA DE MEMRIA ....................................................................89
5.1.INTRODUO .....................................................................................................................895.2.COMANDO DE ALOCAO .................................................................................................895.2.1.EXEMPLO DE ALOCAO USANDO O COMANDO MALLOC().............................................895.2.2.MELHORANDO O USO DE PONTEIROS...............................................................................925.3.EXERCCIOS .......................................................................................................................935.4.PORTABILIDADE ................................................................................................................935.4.1.EXEMPLO DO USO DE SIZEOF ............................................................................................945.5.EXERCCIOS..................................................................................................................94
6. ARQUIVOS EM C............................................................................................................99
6.1.PONTEIRO DE ARQUIVO.....................................................................................................996.2.ABRINDO ARQUIVOS ..........................................................................................................996.2.1.ARQUIVOS TIPO TEXTO .................................................................................................1006.2.2.ARQUIVOS BINRIOS .....................................................................................................1016.3.ABRINDO UM ARQUIVO PARA ESCRITA ...........................................................................1016.3.1.OBSERVAES ...............................................................................................................1026.4.ABRINDO UM ARQUIVO PARA LEITURA...........................................................................1036.5.FECHANDO UM ARQUIVO.................................................................................................103
6.6.COMANDOS DE ESCRITA E LEITURA ................................................................................1046.6.1. FPUTC()..........................................................................................................................1046.6.2. FGETC()..........................................................................................................................1076.6.3.EXERCCIO COM FPUTC() E FGETC() ...............................................................................1096.7.GRAVAO DE STRINGS COM FPUTS() ............................................................................1106.8.LEITURA DE STRINGS COM FGETS() ................................................................................1116.9.EXERCCIOS COM FPUTS() E FGETS()..............................................................................1126.10.LEITURA COM FREAD() .................................................................................................1126.11.GRAVAO COM FWRITE() ...........................................................................................1136.12.GRAVAO COM FPRINTF() ..........................................................................................1136.13.LEITURA COM FSCANF()................................................................................................114
6.14.EXERCCIOS ...................................................................................................................115
7. REGISTROS.....................................................................................................................116
7.1.DEFINIO.......................................................................................................................1167.2.INICIALIZAO ................................................................................................................1167.2.1.EXEMPLO 1 ....................................................................................................................1177.2.2.EXEMPLO 2 ....................................................................................................................1177.3.ACESSO AOS ELEMENTOS DA ESTRUTURA ......................................................................1177.4.EXERCCIO.......................................................................................................................118
7.5.MATRIZES DE ESTRUTURAS ............................................................................................118
-
8/7/2019 3393_Apostila TP
7/190
V
7.5.1.EXEMPLO........................................................................................................................1187.5.2.EXERCCIO .....................................................................................................................1197.6.USO DE TYPEDEF..........................................................................................................1217.6.1.EXEMPLO .......................................................................................................................121
7.6.2.EXEMPLO 2 ....................................................................................................................1217.7.GRAVAO E LEITURA DE REGISTROS ..........................................................................1227.7.1EXEMPLO ........................................................................................................................1227.7.2.EXERCCIO......................................................................................................................1227.8.PONTEIROS PARA REGISTROS .........................................................................................1237.8.1.EXEMPLO........................................................................................................................123
8. GRFICOS EM C............................................................................................................126
8.1.INTRODUO..............................................................................................................126
8.2.DESENHANDO LINHAS .....................................................................................................1268.3.USANDO O PAINTBOX......................................................................................................1288.4.COMPONENTE PANEL......................................................................................................1298.5.DESENHANDO RETNGULOS ...........................................................................................1308.6.DESENHANDO ELIPSES ....................................................................................................1318.7.DESENHANDO PONTOS (PIXELS).....................................................................................1328.8.EXEMPLO.........................................................................................................................1328.9EXERCCIOS ......................................................................................................................136
9. LISTAS LINEARES ........................................................................................................137
9.1.FILA .................................................................................................................................1379.1.1.DEFINIO.....................................................................................................................1379.1.2.OBJETIVO.......................................................................................................................1379.1.3.EXEMPLO .......................................................................................................................1379.2.FILA CIRCULAR...............................................................................................................1409.3.PILHA ...............................................................................................................................1429.3.1.DEFINIO.....................................................................................................................1429.3.2.EXEMPLO .......................................................................................................................1429.4.EXERCCIOS .....................................................................................................................1439.5.LISTAS ENCADEADAS ......................................................................................................144
9.6.EXEMPLO.........................................................................................................................1459.7.EXERCCIO.......................................................................................................................1469.8.EXEMPLO.........................................................................................................................1469.9.OPERAES COM LISTA ENCADEADA ............................................................................1479.10.EXEMPLO.......................................................................................................................1489.11.LISTAS DUPLAMENTE ENCADEADAS ............................................................................1509.12.EXEMPLO.......................................................................................................................1509.13.EXEMPLO.......................................................................................................................151
10. RECURSIVIDADE ........................................................................................................154
-
8/7/2019 3393_Apostila TP
8/190
VI
10.1.INTRODUO............................................................................................................15410.2.EXEMPLO ...................................................................................................................15410.3.EXERCCIOS ...................................................................................................................155
11.EXERCCIOS COM VETORES...................................................................................156
12 -EXERCCIOS COM MATRIZES ...............................................................................157
13. EVENTOS DE FORMULRIO E VARIVIES EXTERNAS .................................159
13.1.EXERCCIOPROPOSTO .........................................................................................15913.2.LISTAGEMDOPROGRAMA ..................................................................................16013.2.1.UMEDIA1.CPP ..............................................................................................................16013.2.2.UMEDIA.CPP ................................................................................................................161
14. ROTINAS DE ORDENAO ......................................................................................163
15.COMPONENTES DO C++ BUILDER E SUAS PRINCIPAIS PROPRIEDADES .166
15.1.BITBTN ........................................................................................................................16615.1.1.PRINCIPAIS PROPRIEDADES ..........................................................................................16615.1.2.EXEMPLO .....................................................................................................................16715.2CHECKBOX.................................................................................................................16715.2.1.PRINCIPAIS PROPRIEDADES ..........................................................................................16715.2.2.EXEMPLO .....................................................................................................................16815.3.COMBOBOX ...............................................................................................................16815.3.1.PRINCIPAIS PROPRIEDADES ..........................................................................................16815.3.2.EXEMPLO .....................................................................................................................16915.4.LISTBOX......................................................................................................................17015.4.1.PRINCIPAIS PROPRIEDADES ..........................................................................................17015.4.2.EXEMPLO .....................................................................................................................17015.5.PAGECONTROL........................................................................................................17115.5.1.PRINCIPAIS COMANDOS................................................................................................17215.5.2.EXEMPLO .....................................................................................................................172
15.6.RADIOBUTTON .........................................................................................................17315.6.1.PRINCIPAIS PROPRIEDADES ..........................................................................................17315.6.2.EXEMPLO .....................................................................................................................17315.7.RADIOGROUP............................................................................................................17415.7.1.PRINCIPAIS PROPRIEDADES ..........................................................................................17415.7.2.EXEMPLO .....................................................................................................................17415.8.SCROLLBAR ..............................................................................................................17515.8.1.PRINCIPAIS PROPRIEDADES ..........................................................................................17615.8.2.EXEMPLO .....................................................................................................................17615.9.SPEEDBUTTON..........................................................................................................17715.9.1.PRINCIPAIS PROPRIEDADES ..........................................................................................177
15.9.2.EXEMPLO .....................................................................................................................177
-
8/7/2019 3393_Apostila TP
9/190
VII
15.10.STRINGGRID............................................................................................................17815.10.1.PRINCIPAIS PROPRIEDADES ........................................................................................17815.10.2.EXEMPLO ...................................................................................................................17915.11.TABCONTROL.........................................................................................................179
15.11.1.PRINCIPAIS PROPRIEDADES ........................................................................................17915.11.2.EXEMPLO ...................................................................................................................180
-
8/7/2019 3393_Apostila TP
10/190
1
TP I
-
8/7/2019 3393_Apostila TP
11/190
TP I - Captulo 1
2
i. 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 ambienteWindows.
Na seo seguinte ser apresentado o contedo programtico de Tcnicas de
Programao I (TP I).
1. Identificao1.1. Campus: Curitiba1.2. Centro: CCET1.3. Curso: Engenharia Mecatrnica.1.4. Habilitao: Engenharia de Controle e Automao1.5 Programa de aprendizagem (PA) : Tcnicas de Programao I1.6 Ano Letivo: 2001 Perodo:1 e 2 (D & N) Semestre: 1 e 2 (D & N)1.7 Carga Horria Total: 54 N de crditos: 21.8 Carga Horria Semanal: 3 aulas Aulas Tericas: 0 Aulas Prticas: 31.9 Disciplina ou grupo de disciplinas que originou o PA: Aspectos Formais daComputao e Algoritmos1.10 Professor Responsvel: Marcelo Rudek
2. Aptides e competncias / habilidades a serem desenvolvidas pelos alunos
- Conhecer estruturas de dados, e suas representaes atravs de algoritmos, paraaplicar em ferramentas de programao.
- Conhecer tcnicas atuais de programao para aplicao em desenvolvimento desistemas usados em controle e automao de processos;
- Conhecer a linguagem de programao C para o desenvolvimento de programaselementares.
- Desenvolver habilidades de trabalho em equipe.
-
8/7/2019 3393_Apostila TP
12/190
TP I - Captulo 1
3
3. EmentaIntroduo sobre algoritmos. Metodologia de desenvolvimento de programas.Modularidade e abstrao. Introduo a linguagem de programao (C). Tipos de
dados bsicos e estruturados.
4. Temas de estudo- Conceitos de algoritmos e estruturas de dados: Conceituao sobre a construo
de programas. Introduo sobre fundamentos da computao e descrio dofuncionamento dos computadores.
- Portugol: Introduo ao portugol para o desenvolvimento de algoritmos, declaraode variveis, desvio condicional, laos de repetio.
- Programas em C: Apresentao dos comandos bsicos da linguagem C, variveis,desvio condicional, laos de repetio, estruturas homogneas de dados vetores e
matrizes.
5. MetodologiaO objetivo a aprendizagem atravs da prtica. As aulas so em laboratrio,onde pode ser apresentada a teoria, e imediatamente o tema pode sercomprovado pelos alunos. Isto torna a aula mais dinmica e participativa. Estametodologia permite atingir as aptides tcnicas e de trabalho em grupo,propostas neste programa de aprendizagem.
a. Procedimentos do ProfessorAs aulas sero prticas em laboratrio. Todas as aulas estaro previamentedisponveis na pgina do curso na internet, de forma que o aluno possa consultar otema da aula, dias antes da apresentao em sala, ou rever a aula posteriormente.
b. Atividades dos alunos
- Resoluo de exerccios,trabalhos individuais e em equipes.- Pesquisa bibliogrfica com utilizao da INTERNET.- Apresentao de trabalhos.c. Recursos e Materiais
Sero utilizados livros da rea, compilador da linguagem C, internet emicrocomputadores da Universidade.
6. Procedimetnos de AvaliaoAvaliaes somativas incluindo trabalhos, participao dos alunos nosquestionamentos e exerccios de aula, provas escritas e no computador, e trabalho final
do semestre.
-
8/7/2019 3393_Apostila TP
13/190
TP I - Captulo 1
4
7. Bibliografia Recomendada1. Algoritmos e Estruturas de Dados; Guimares e Lages, LTC Livros Tcnicos e
Cientficos.2. Estruturas de Dados Usando C; A. Tanenbaum; Makron Books3. Dominando Algoritmos com C; Kyle Loundon; Ed. Cincia Moderna.4. C Completo e Total; Hebert 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++ Buider 5 Developers Guide; J. Hollinworth, D. Butterfield, et al. Ed. SAMS;8. Internet
-
8/7/2019 3393_Apostila TP
14/190
TP I - Captulo 1
5
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: _________
-
8/7/2019 3393_Apostila TP
15/190
TP I - Captulo 1
6
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 dedadas 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 sie 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
-
8/7/2019 3393_Apostila TP
16/190
TP I - Captulo 1
7
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 tipoespecfico 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:
-
8/7/2019 3393_Apostila TP
17/190
TP I - Captulo 1
8
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 falsoExemplo: 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
-
8/7/2019 3393_Apostila TP
18/190
TP I - Captulo 1
9
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 outrosprogramas.
-
8/7/2019 3393_Apostila TP
19/190
TP I - Captulo 1
10
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 (
-
8/7/2019 3393_Apostila TP
20/190
TP I - Captulo 1
11
1.5.2. Operadores Aritmticos
Os smbolos das operaes bsicas so:
A multiplicao dada atravs do operador* (asterisco);Exemplo: z
-
8/7/2019 3393_Apostila TP
21/190
TP I - Captulo 1
12
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 emz. 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 dadosexternos, 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 ousurio.
Exemplo:
incio
real A, B, C;
leia(A);leia(B);
c
-
8/7/2019 3393_Apostila TP
22/190
TP I - Captulo 1
13
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 R3 ]
3 Desenvolva um programa que transforme um valor de temperatura fornecido pelo usurio,
de Farenheit ( F ) para Graus Celcius ( C ). [C = 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), oufazer 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 necessrioutilizar operadores lgicos e relacionais.
1.6.1.1. Operadores Lgicos
-
8/7/2019 3393_Apostila TP
23/190
TP I - Captulo 1
14
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
-
8/7/2019 3393_Apostila TP
24/190
TP I - Captulo 1
15
Desvio Condicional Simples
incio
inteiro A, B;
A
-
8/7/2019 3393_Apostila TP
25/190
TP I - Captulo 1
16
Desvio Condicional Composto
...
se A > B ento
A
-
8/7/2019 3393_Apostila TP
26/190
TP I - Captulo 1
17
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 nibusOu 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:
-
8/7/2019 3393_Apostila TP
27/190
TP I - Captulo 1
18
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 umcritrio de parada do loop, ouseja, at quando o loop vai serexecutado.
Um ou mais comandos quesero executados enquanto acondio for verdadeira.
-
8/7/2019 3393_Apostila TP
28/190
-
8/7/2019 3393_Apostila TP
29/190
TP I - Captulo 1
20
b) Corrigindo o problema do loop infinito:inicio
inteiro I;
I
-
8/7/2019 3393_Apostila TP
30/190
TP I - Captulo 1
21
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 Mesainicio1 iterao I = 12 iterao I = 33 iterao I = 55 < 5 ? sai do loop
Obs: No loop do tipo para/faa o valor davarivel de controle do loop incrementadaautomaticamente de 2 em 2 a cada loop.
Teste de Mesainicio1 iterao I = 52 iterao I = 33 iterao I = 11 < 1 ? sai do loop
Obs: No loop do tipo para/faa o valor davarivel de controle do loop
decrementada automaticamente de 2 em 2 acada loop.
-
8/7/2019 3393_Apostila TP
31/190
Captulo 2
22
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 serarmazenado 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
-
8/7/2019 3393_Apostila TP
32/190
Captulo 2
23
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 127int 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.647signed 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
-
8/7/2019 3393_Apostila TP
33/190
Captulo 2
24
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
-
8/7/2019 3393_Apostila TP
34/190
Captulo 2
25
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. Oarquivo 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 doprojeto, 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
-
8/7/2019 3393_Apostila TP
35/190
Captulo 2
26
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) queiro operar sobre o programa.
O formulrio a interface entre o programa e o usurio. o meio pelo qual o usuriointerage com o programa, seja inserindo dados atravs de uma caixa de texto, sejaexecutando uma funo ao clique de um boto, etc.
caixa de texto
boto
form
rtulo
-
8/7/2019 3393_Apostila TP
36/190
Captulo 2
27
2.2.2.3. Barra de Propriedades
Cada componente possui uma lista de propriedades (no object inspector) que pode ser alteradade 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, querealize 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 docomponente com o "foco". As propriedades, oueventos podem ser alterados nesta janela,quando da escrita do programa.
Por exemplo:
a) para alterar o ttulo do formulrio, alterara propriedade caption;
b) para alterar o nome do formulrio alterara propriedade name;
c) para alterar as cores do formulrioalterar a propriedade color.As propriedades podem ser alteradas tambmdurante a execuo do programa, bastandoreferenciar o componente e a respectivapropriedade atravs do conector "->". Assim,no programa, pode-se escrever:
Form1->Caption = programa1;
-
8/7/2019 3393_Apostila TP
37/190
Captulo 2
28
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; estaespecificamente diz respeito ao contedo da caixa de texto.
- Note tambm que Edit1 o nome do EditBox. Este nome ser usado para todoo programa. Lembre que atravs da propriedade name, o nome pode ser
alterado. Por exemplo, Texto1->Text = ...;
-
8/7/2019 3393_Apostila TP
38/190
Captulo 2
29
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.
-
8/7/2019 3393_Apostila TP
39/190
Captulo 2
30
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 aplicaoatravs 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 oprograma 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): Edit1Edit Box (caixa de texto): Edit2
Edit Box (caixa de texto): Edit3
label (rtulo): Label1
label (rtulo): Label2
label (rtulo): Label3
Button (Boto): Button1
-
8/7/2019 3393_Apostila TP
40/190
Captulo 2
31
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 componenteButton, 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 ouboto, deve-se alterar o contedoda propriedade Caption. ParaEdits, alterar a propriedade Text.Lembre que a propriedade Captionno altera o nome do componente,apenas altera o texto que aparecesobre o componente. Assim, noprograma os nomes continuamsendo Edit1, Edit2, ... etc. Para
mudar o nome usar a propriedadeName.
-
8/7/2019 3393_Apostila TP
41/190
Captulo 2
32
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 declaraodas bibliotecas
Evento clique do boto
Programa em C
-
8/7/2019 3393_Apostila TP
42/190
Captulo 2
33
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 nomesdiferentes 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.
-
8/7/2019 3393_Apostila TP
43/190
Captulo 2
34
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
}
-
8/7/2019 3393_Apostila TP
44/190
Captulo 2
35
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 queas 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.
-
8/7/2019 3393_Apostila TP
45/190
Captulo 2
36
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) entocomando;
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 umcomando no necessrio abrirum bloco comchaves { }.
Com apenas umcomando no necessrio abrirum bloco comchaves { }.
-
8/7/2019 3393_Apostila TP
46/190
Captulo 2
37
2.4.3. Ifs Aninhados
se (condio) entose (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;
elsecomando 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
-
8/7/2019 3393_Apostila TP
47/190
Captulo 2
38
- 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
-
8/7/2019 3393_Apostila TP
48/190
Captulo 2
39
- 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
-
8/7/2019 3393_Apostila TP
49/190
Captulo 2
40
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
-
8/7/2019 3393_Apostila TP
50/190
Captulo 2
41
2.5.3. Loop Faa/Enquanto (do/while)
Portugol Linguagem C++ Builder
inicio
inteiro x;
real C, F;
F Text = f;
}
-
8/7/2019 3393_Apostila TP
51/190
Captulo 2
42
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 quantosnmeros quiser, e pode encerrar o programa quando desejar.
-
8/7/2019 3393_Apostila TP
52/190
Captulo 2
43
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;
}
-
8/7/2019 3393_Apostila TP
53/190
Captulo 2
44
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:
-
8/7/2019 3393_Apostila TP
54/190
Captulo 2
45
//-----------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------------
float resp;
//-------------------------------------------------------------------------
voidSoma(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 decompilao
2-Espao para declarao devariveis globais
3-Espao para declararprocedimentos e funes ouseus rotti os.
4-Trecho de programa doboto [+] e a chamada doprocedimento Soma.
5-Trecho de programa doboto [+ 10] e a chamada doprocedimento Soma.
-
8/7/2019 3393_Apostila TP
55/190
-
8/7/2019 3393_Apostila TP
56/190
Captulo 2
47
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());
-
8/7/2019 3393_Apostila TP
57/190
Captulo 2
48
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.
-
8/7/2019 3393_Apostila TP
58/190
-
8/7/2019 3393_Apostila TP
59/190
-
8/7/2019 3393_Apostila TP
60/190
Captulo 2
51
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:
//-----------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
1-Bibliotecas e diretivas decompilao.
-
8/7/2019 3393_Apostila TP
61/190
Captulo 2
52
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------------
//-------------------------------------------------------------------------
float 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;
}
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-Espao para declarao devariveis globais.
3-Espao para declararprocedimentos e funes ouseus rotti os.
4-Trecho de programa do
boto [+] e a chamada dafuno Soma.
5-Trecho de programa do
boto [+ 10] e a chamada dafuno Soma.
-
8/7/2019 3393_Apostila TP
62/190
Captulo 2
53
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, portantono 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().
#include
#pragma hdrstop
#include "raizes.h"
#include // contm atoi()
#include // contm pow()
-
8/7/2019 3393_Apostila TP
63/190
Captulo 2
54
#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)
{ }
//-----------------------------------------------------
voidLimpaTela(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; xText.c_str());
B = atoi(Edit2->Text.c_str());
-
8/7/2019 3393_Apostila TP
64/190
Captulo 2
55
C = atoi(Edit3->Text.c_str());
D = potencia(B,2) - 4*A*C; // chamada da funo
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(); // chamada do procedimento}
}
//-----------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
LimpaTela(); // chamada do procedimento
}
//-----------------------------------------------------
2.7.6. Exerccios
1. Escreva e teste o funcionamento dos exerccios acima.
2. Modifique o programa do clculo do fatorial para uma funo que calcule o valor do
fatorial de um nmero.
3. Desenvolva um programa que permita realizar operaes de adio e subtrao de dois
valores fornecidos pelo usurio, atravs de uma funo.
-
8/7/2019 3393_Apostila TP
65/190
Captulo 2
56
2.8. Incrementos e Decrementos
Incrementar e decrementar variveis so tarefas muito comuns em programao. A linguagem
C oferece alguns comandos para realizar estas operaes.
Exemplo A:
{
int total, valor;
valor = 0;
total = valor + 1; //contedo de valor mais 1...
}
Exemplo B:
{
int total, valor;
valor = 0;
total = valor++; //contedo de valor mais 1 ?...
}
2.8.1. Incremento/Decremento a Posteriori
Neste caso, primeiro feito a operao de atribuio e depois incrementa/decrementa avarivel.
Exemplo:
Incremento Decremento
{
int total;
int valor;valor = 1;
total = valor++;
/** neste exemplo total recebe valor e depois
da atribuio somado 1 a varivel valor **/
...
}
{
int total;
int valor;valor = 1;
total = valor--;
/** neste exemplo total recebe valor e depois
da atribuio subtrado 1 da varivel valor
**/
...
}
-
8/7/2019 3393_Apostila TP
66/190
Captulo 2
57
2.8.2. Incremento/Decremento a Priori
Neste caso, primeiro incrementado o valor, e depois atribudo a varivel.
Exemplo:
Incremento Decremento
{
int total;
int valor;
valor = 1;
total = ++valor;
/** neste exemplo valor incrementadoe
depois feita a atribuio **/
...
}
{
int total;
int valor;
valor = 1;
total = --valor;
/** neste exemplo valor decrementado e
depois feita a atribuio **/
...
}
2.8.3. Exerccio
Qual o contedo das variveis total e valor aps a execuo dos seguintes comandos?
{
int valor, total;
valor = 3;
total = 5;
total = valor++;
total = ++valor;
total = valor--;
total = --valor;
}
-
8/7/2019 3393_Apostila TP
67/190
Captulo 2
58
2.9. Atribuio Composta
Atravs da combinao de operadores pode-se fazer atribuies das seguintes formas:
Exemplo:
total += valor; // total = total + valor;
valor += 1; // valor = valor + 1;
valor *= 10; // valor = valor * 10;
2.9.1. Exerccio
Qual o valor das variveis valor e total aps a execuo dos seguintes comandos?
{
int valor = 3;
int total = 5;
total *= ++valor;
}
2.10. Atribuio Mltipla
Depois de declaradas as variveis podem-se ter comandos de atribuio da seguinte forma:
total = valor = resposta = 0; // atribui 0 a todas as variveis
2.10.1. Exemplo
{
int resposta, valor, total;
resposta=total=0;
valor=4;
reposta = total + valor;
}
ou, {
int resposta, valor, total;
resposta=total=0;
reposta = total + (valor = 4);
}
-
8/7/2019 3393_Apostila TP
68/190
Captulo 2
59
2.11. Operador Interrogao (?)
Este operador substitui sentenas do tipo if/else.
O trecho de programa: pode ser escrito como:
...
if ( x >= 0 )
y = -1;
else
y = 1;
...
...
y = (x >= 0) ? -1 : 1; // se, por exemplo x=10, y = -1;
...
2.12. Nmeros Aleatrios
O comando random(), gera um nmero aleatrio (randmico), inteiro e positivo obtido
diretamente do computador.
2.12.1. Sintaxe do Comando
intnome_variavel= random(100);
Neste caso, uma varivel do tipo int recebe um valor aleatrio gerado pela funo
random(100). O valor 100 significa que o valor gerado estar compreendido entre 0 e 99. Para
usar o comando random, deve-se adicionar a biblioteca stdlib.h.
2.12.2. Exemplo
{
int a;
a = random(10); // gera um valor aleatrio entre 0 e 9
Edit1->Text = a;
}
-
8/7/2019 3393_Apostila TP
69/190
Captulo 2
60
2.13 comando switch/case
O comando switch/case pode ser usado para substituir uma sequncia de if/else aninhados. Os
comandos case realizam a escolha entre possveis valores para uma varivel, fornecida como
parmetro no comando switch.
2.13.1. Sintaxe do comando
switch (varivel)
{
casevalor_contante:{comando 1;
comando 2;
break;
}
casevalor_constante:{
comando 3;
comando 4;
break;}
default: comando 5;
}
2.13.2. Exemplo
Desenvolva um programa que apresente informao sobre o nvel de um reservatrio quando
atingir o nvel mximo e o nvel mnimo. Os valores de nvel devem ser aleatrios.
O valor proveniente da varivel testado em cada case,seqencialmente do primeiro aoltimo. Caso, o valor_constanteseja igual ao da varivel, ento aexecuo do programa entra nocase, e executa os comandos atencontrar um break.
Se nenhum case for satisfeito,automaticamente a execuo doprograma segue pela opodefault.
Nvel mximo
Nvel mnimo
-
8/7/2019 3393_Apostila TP
70/190
Captulo 2
61
Dentro do boto:
{
int x;
x = random(10);
switch(x)
{
case 0 :{
Edit1->Text = Reservatrio vazio;
break;
}
case 9 :{
Edit1->Text = Reservatrio cheio;
break;
}
default: ShowMessage(Reservatrio Ok);
}
}
2.14. Timer
A gerao de nmeros aleatrios muito utilizada em ambiente de simulao. No caso do
exemplo anterior, o usurio ao clicar um boto no formulrio, faz o computador gerar um
nico nmero aleatrio, que dependendo do valor, apresenta resultados diferentes do nvel do
reservatrio. O problema que o usurio dever clicar no boto toda vez que quizer gerar um
valor. Muitas vezes pode ser interessante que o computador gere vrios nmeros aleatrios a
fim de analizar um processo. Para isto usa-se o timer do Windows.
2.14.1. O Componente timer no C++ Builder
O componente timer pode ser acessado na barra de componentes dentro do menu system.
cone do timer.
-
8/7/2019 3393_Apostila TP
71/190
Captulo 2
62
2.14.2. As propriedades do timer
2.14.3. Exemplo
Pode-se modificar o exemplo 3.13.2, para que