Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina...

Preview:

Citation preview

Universidade do Vale do ParaíbaColégio Técnico Antônio Teixeira Fernandes

Disciplina Programação Orientada a Objetos - II

Material III-BimestreManipulação de Arrays, Funções e Procedimentos

Ponteiros, Barra de Progressão, Barra de rastro, Timer , Gráficos e Imagens

site : http://www1.univap.br/~wagner

Prof. Responsáveis

Wagner Santos C. de Jesus

Array(Vetores)

Array vem a ser a forma de criar uma variável

que pode representar uma coleção de elementos.

Onde cada item de dado especifica um elemento

que deve ser associado a um índice.

Exemplo :

<tipo> <variável> [<indice>][...][...]... = <valor>;

Onde o índice representa o número de

elementos que o vetor irá possuir, Um vetor

poderá possuir mais de um índice.

Onde o índice representa o número de

elementos que o vetor irá possuir, Um vetor

poderá possuir mais de um índice.

Exemplo da utilização de um Array com os elementos fixos.

int k[] = { 50, 22, 38 };

Um Array poderá ser criado da seguintes Maneiras.

int k[3];

k[0] = 50;

k[1] = 22;

k[2] = 38;

Exemplo :

int m[3][4]; // Este exemplo cria um Array de três

linhas e quatro colunas.

Exemplo : Programa que preenche o vetor m com

elementos. int v1[3][4];

int k = 30;

for(int i=0;i<=2;i++){

for(int j=0;j<=3;j++){

v1[i][j] = k;

k+=5;

}

}

O programa irá preencher na memória o vetor v1 da

seguinte forma.

Obs : Todo o vetor em C++ será iniciado na posição (0). Portanto um vetor de três elementos irá ter o índices de zero à dois.

Funções e Procedimentos

Uma função vem a ser uma rotina externa ao programa principal que está sendo executado, normalmente uma função retorna um valor já um procedimento possui o mesmo comportamento da função mas não sendo possível retorna valor.

Declarando procedimentos e funções em C++.

Para se declarar um procedimento deve-se usar a palavra void em antes do nome do mesmo.

Sintaxe :

void <nome-procedimento>([<parâmetros>]) {

:

: <Instruções>

}

Exemplo declaração Procedimento

Exemplo

void teste(char letras[])

{

ShowMessage(letras);

}

:

:

teste("Teletubbies dizem Oi...");

Criando uma Função

Para declarar uma função usa-se a seguinte notação. O tipo de dados que esta função irá retornar seguindo do nome da função e logo após os parâmetros que serão passados.

Sintaxe :

<tipo> <nome-função>([<parâmetros>]) { : : <Instruções> return <valor>}

Importante : Toda função deverá possuir a instrução return após Ter sido encerrado seu processamento.

Exemplo :

int soma(int a, int b){

int v = a + b;

return v;

}

:

:

int c = 45;

int d = 2;

int s = soma(c, d);

ShowMessage(s);

Atenção : O local onde devem ser declaradas as funções e procedimentos é análogo ao das variáveis globais ou seja uma função ou procedimento será sempre global ao formulário que estará sendo executado.

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

void teste( char letras[] )

{

ShowMessage(letras);

}

int soma( int a, int b ){

int v = a + b;

return v;

}

Unidade para funções

Para que uma função possa ser chamada em qualquer formulário de um projeto devemos criar uma unidade (Unit) de funções e procedimentos.

Criando uma unidade (unit)

Basta selecionar File, New e Unit.

Será mostrada a seguinte estrutura

//---------------------------------------------------------------------------#pragma hdrstop

#include "Unit2.h"

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

#pragma package(smart_init)

int soma(int a, int b){ int v = a + b; return v;}

Para vincular a unidade nova ao formulário.

Selecione a opção File, Include Unit ou pressione a tecla Alt+F11. Em seguida a função deve ser declarada no formulário a ser usado.

Exemplo da inclusão e definição de uma função no formulário corrente.

//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop

#include "Unit1.h"#include "Unit2.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;int soma(int n,int y);//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}

Ponteiros

Um ponteiro é uma variável que representa a localização de um item de dados na memória ou seja ele aponta para um endereço de memória na qual existe um dado para ser processado.

Os ponteiros são usados para otimizar e aumentar performance de memória em uma aplicação.

A memória de um computador é dividida em células adjacentes que são numeradas consecutivamente, do inicio para o fim a área de memória associada com seu número e sua respectiva célula denominamos endereço. Que em sua grande maioria os computadores usam o sistema de numeração hexadecimal.

Abaixo encontramos a ilustração de endereço.

Armazenamento da informação na memória RAM

RAM0012F588

num = 80

x = 123.89

0012F580 Variável inteira (int)

Variável dupla

precisão (double)

Ponteiro

*p

*j

Ponteiro vem a ser a variável que aponta para um desses endereços.

Usando um ponteiro.

Para declarar um ponteiro devemos usar o símbolo de asterisco na frente da variável.

Exemplo:

int *j;

Obs: Neste caso a variável j será um ponteiro de inteiro.

Para que j aponte para um endereço devemos indicar para que endereço de memória desejamos que j aponte. Para fazer isso usamos o símbolo de (e comercial) &.

Exemplo :

int *j;

int k = 3;

j = &k;

Veja a ilustração do que irá ocorrer na memória.

Se o valor do ponteiro j for alterado logo será alterada o valor de k.

Ou seja :

int *j;

int k = 3;

j = &k;

*j = 6;

Obs : Logo o novo valor da variável k será 6 pelo simples motivo de j estar apontando para o endereço da variável k.

Visualizando o endereço de memória onde o ponteiro esta.#include <stdio.h> // Deverá ser colocada

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int *p;

char buffer[8];

int num = 123;

p = &num;

sprintf(buffer,"%p",p);

ShowMessage(buffer); // O resultado Será buffer=0063F2B8

}

Aplicações como ponteiros.

Um exemplo da aplicação com ponteiros é o caso do evento OnKeyPress que pega o valor da tecla pressionada.

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

char *j = &Key;

ShowMessage(*j);

}

Este exemplo captura o valor ASCII da tecla pressionada.

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

char *j = &Key;

int k = *j;

ShowMessage(k);

}

Exemplo usando ponteiro para usar a caixa de texto aceitando somente números.

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

char *j = &Key;

if(*j < '0' || *j > '9') {

ShowMessage("Digito Não Permitido...");

Edit1->SetFocus();

Edit1->Clear();

}

}

Exemplo de Ponteiro na manipulação de caracteres.

void __fastcall TForm1::Button1Click(TObject *Sender)

{

char *a = "As Poderosa dizem oi para Teletubbies";

int x = strlen(a);

int i = 1;

while(i <= x ) {

char y = *a++;

if(y=='o')

ShowMessage(y);

i++;

}

}

Operadores de deslocamento de bits

Para realizarmos o deslocamento em uma variável que contém 1 byte podemos realizar operações matemática binária ou utilizar recursos da linguagem para efetuar as operações de maneira mais rápida e com segurança.

Esses operadores sãos denominados shift.

E são representados da seguinte forma >> <<Onde :>> - deslocamento para direita.<< - deslocamento para esquerda.Sintaxe :Variável >> num-bits; // para direitaVariável << num-bits; // para esquerda

Observação

Os operadores de deslocamento de bits devem ser usados para tipos de dados char, int(correspondente) e byte; que é o mais recomendado. São muito eficientes para decodificar input de dispositivos internos, como conversor A/D.

Exemplo de operação

128 64 32 16 8 4 2 1

1 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0

0 0 0 1 0 0 0 0

0 0 0 0 1 0 0 0

byte nbit = 128;

nbit = nbit >> 1; // Desloca um bit para direita

nbit = nbit >> 2; // Desloca dois bit para direita

nbit = nbit >> 1; // Desloca dois bit para direita

Exemplo de deslocamento de bits à esquerda bit a bit

128 64 32 16 8 4 2 1

0 0 0 0 0 0 0 1

0 0 0 0 0 0 1 0

0 0 0 0 0 1 0 0

0 0 0 0 1 0 0 0

0 0 0 1 0 0 0 0

0 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

Programa Exemplo

byte a = 1;

int x = 1;

while( x <= 8){

ShowMessage(a);

a = a << 1 ;

x++;

}

Passando Parâmetros por Valor e por Referencia.

Para passarmos parâmetros para uma função podemos usar duas formas muito comuns uma é a passagem de parâmetros por valor que já foi vista no inicio da abordagem de funções e procedimentos, a outra é a passagem por intermédio de referencia no que é passado endereço e não o valor de conteúdo da variável.

Exemplo de passagem por valor.

int soma( int a, int b ){

int v = a + b;

return v;

}

:

:

int c = 45;

int d = 2;

int s = soma(c, d);

ShowMessage(s);

Exemplo de passagem por referencia.

void soma(int &a, int &b){

int *pont = &b;

b = a + b;

}

:

int h = 3;

int y = 2;

soma(h,y);

ShowMessage(y);

Obs : Ao final da execução desse programa o valor da variável y será igual a cinco que corresponde a soma de h e y.b

Objetos Especiais.

Em Builder C++ temos a palheta win32 na qual podemos observar alguns componentes para fazermos representações estatísticas de dados.

Propriedade importantes :

Position - que captura o ascendente onde a barra de rolagem esta posicionada.

Max - permite atribuir o valor máximo onde a barra deverá alcançar

Min - permite atribuir o valor mínimo onde será iniciada a contagem.

ProgressBar : Permite criar uma barra de progressão onde o usuário da aplicação pode verificar a porcentagem da operação que estará sendo realizada. Palheta win32.

Exemplo :

for(int i=0;i<=100;i++){

for(int j=0;j<=200000000;j++);

ProgressBar1->Position++;

}

O exemplo acima preenche a barra de rolagem em 100% contando para cada valor Position aproximadamente 20 segundo. Onde Max = 100 e Min = 0.

Propriedade importantes :

Position - que captura o ascendente onde a barra de rolagem esta posicionada.

Max - permite atribuir o valor máximo onde a barra deverá alcançar

Min - permite atribuir o valor mínimo onde será iniciada a contagem.

TrackBar - Permite criar uma barra de rastro Barra de Rastro possibilitando o usuário da aplicação escolher a escala em que deseja trabalhar. Palheta win32.

Exemplo :

void __fastcall TForm1::TrackBar1Change(TObject *Sender)

{

Label1->Font->Size = TrackBar1->Position;

}

Propriedade importantes :

Enabled - Habilita ou desabilita o timer o padrão é true habilitado.

Interval - Determina o intervalo de espera para execução do evento.

Timer - Permite executar uma operação recursivamente em um determinado intervalo de tempo de 1000 milisegundo que equivale a um segundo. Palheta system.

Exemplo :

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

AnsiString linha[] = {"Abacaxi","Laranja","Banana"};

Label1->Caption = linha[i];

i++;

if(i= =3)

i = 0;

}

Exemplo : Para carregar uma figura na tela.

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Image1->Picture->LoadFromFile("c:/windows/lixo.bmp");

}

VtChart - O objeto VtChart permite a criação de gráficos para realização de estatística de valores e visualização de dados, esse objeto se encontra na palheta ActiveX.

Sintaxe :

VtChart1.<propriedade>=valor | [<método>];

Propriedade Principais para a configuração de

visualização do gráfico.

ChartType : determina qual o tipo de gráfico será desenhado.

VtChart1->ChartType = <valor>;

O valor deverá ser instânciado de acordo com a tabela abaixo:

Valor Tipo0 Barras em três dimensões1 Barras em duas dimensões2 Linhas em três dimensões3 Linhas em duas dimensões4 Área em três dimensões5 Área em duas dimensões10 Barras horizontais em três dimensões11 Barras horizontais em duas dimensões13 Tortas em três dimensões14 Tortas em duas dimensões21 Gráfico de Gantt em duas dimensões22 Gráfico de Gantt em três dimensões

ShowLegend : Permite mostrar ou não a

legenda de um gráfico. Booleano (true/false)

Exemplo :

VtChart1->ShowLegend = true;

TitleText : Exibe um título para o gráfico.

Exemplo :

VtChart1->TitleText = "Rendimeto Bimestral 2 Anos de Informática";

TitleText

ColumnCount : Determina o número de colunas ou setores que o gráfico terá.

Exemplo:

VtChart1->ColumnCount = 2;

ColumnCount

RowCount : Determina o número de linhas

de dados que o gráfico irá ter.(Número de

divisões do eixo x).

Exemplo :

VtChart1->RowCount = 3;

RowCount

Column : Seta em que coluna do gráfico será alterado por uma informação ou dado.

VtChart1->Column = 1;

Column =1Column =2

ColumnLabel : Determina um título para a coluna setada por Column(Título da Legenda).

Exemplo :

VtChart1->ColumnLabel = "1-Trim-2004";

Column =1Column =2

ColumnLabel

FootnoteText : Coloca uma mensagem no rodapé do gráfico.

VtChart1->FootnoteText = "Acompanhamento Trimestral de vedas";

FootnoteText

Row : Determina o número da linha que receberá os dados .

VtChart1->Row = 1;

Row =1 Row =2 Row =3

RowLabel : Determina o título para o eixo x.

Exemplo :

VtChart1->RowLabel = "JAN";

RowLabel = “2J2D – 4.5/5.0”

Data : Propriedade mais importante do objeto gráfico, permite atribuição

do valor que irá desenhar o gráfico.

Atenção : Mesmo sendo um valor numérico para o desenho do gráfico

essa informação deverá ser sempre uma string, como o exemplo abaixo.

Exemplo :

VtChart1->Data = "5.5";

Data = “5.5”

DrawMode : Desenha o gráfico na tela por intermédio dos valores (0 ou 1).

0 - Desenha o gráfico com a cor de fundo padrão.

1 - Desenha o gráfico com cor de fundo branca.

DrawMode : Desenha o gráfico na tela por intermédio dos valores (0 ou 1).

0 - Desenha o gráfico com a cor de fundo padrão.

1 - Desenha o gráfico com cor de fundo branca.

Exemplo :

VtChart1->DrawMode = 0;

Recommended