Você está na página 1de 112

Boas Vindas Apresentao

AdvPL
Advanced Protheus Language

AdvPL Bsico
CONTEDO PROGRAMTICO Slide 3

TEORIA 1. Lgica de Programao 2. AdvPL e sua origem 3. Programao 4. Estruturao 5. Documentao 6. Funcionalidades 7. Variveis 8. Vetores 9. Controle de Fluxo

AdvPL Bsico
CONTEDO PROGRAMTICO Slide 4

PRTICA 1. Utilizao do IDE 2. Programao 3. Criao de telas 4. Criao de relatrios 5. Tratamento de Base de Dados 6. ndices 7. Pontos de Entrada 8. Programao para Banco de Dados 9. Diferenas entre DBF e SQL

Lgica de Programao

Lgica de Programao
Slide 6

Defina Lgica
Conjunto de instrues seqenciais definidas para a resoluo de um problema.

Defina Programao
Conjunto de comandos estruturados em uma linguagem qualquer para o desenvolvimento de sistemas.

Lgica de Programao
Definio passo a passo da estrutura de pensamentos
para execuo de tarefas a fim de atingir o objetivo.

Lgica de Programao
EXEMPLO Slide 7

Tarefa (Inicio)
Estou em casa e quero ir ao cinema.

Instrues (Meio)
1. 2. 3. 4. 5. 6. 7. Escolher o cinema; Escolher o filme; Sair de casa; Pegar o caminho do cinema; Pagar o ingresso; Entrar na sala; Assistir o filme escolhido.

Objetivo (Fim)
Assistir a um filme

Lgica de Programao
ALGORITMO Slide 8

Passos para construo:

Entender o problema destacando pontos mais importantes; Definir os dados de entrada; Definir o processamento; Definir os dados de sada; Construir o algoritmo; Testar o algoritmo;

Lgica de Programao
ALGORITMO Slide 9

Tipos de Algoritmo
Narrativa: Uso de linguagem Natural;

Fluxograma: Uso de smbolos Grficos;


Pseudocdigo: Uso de Regras definidas.

Lgica de Programao
ALGORITMO Slide 10

Mostrar o maior nmero dentre dois nmeros informados.

Lgica de Programao
ALGORITMO Slide 11

Exemplo de uma Narrativa


Passo 1: Receber dois nmeros; Passo 2: Comparar os dois nmeros; Passo 3: Mostrar o maior nmero.

Lgica de Programao
EXERCCIOS Slide 12

Exerccios da pgina 10
Fazer a Narrativa 1 ao 3

Lgica de Programao
NARRATIVA Slide 13

1. Leia de a at d e efetue a Multiplicao de X e Y e em seguida imprima seu resultado em Z:


Passo 1. Leia a Passo 2. Multiplique X por Y e atribua em Z. Passo 3. Mostre Z Passo 4. Leia b Passo 5. Multiplique X por Y e atribua em Z. Passo 6. Mostre Z Passo 7. Leia c Passo 8. Multiplique X por Y e atribua em Z. Passo 9. Mostre Z Passo 10. Leia d Passo 11. Multiplique X por Y e atribua em Z. Passo 12. Mostre Z

Lgica de Programao
NARRATIVA Slide 14

2. Leia de a at d e efetue a Diviso de X e Y e em seguida imprima seu resultado em Z:


Passo 1. Leia a Passo 2. Divida X por Y e atribua em Z. Passo 3. Mostre Z Passo 4. Leia b Passo 5. Divida X por Y e atribua em Z. Passo 6. Mostre Z Passo 7. Leia c Passo 8. Divida X por Y e atribua em Z. Passo 9. Mostre Z Passo 10. Leia d Passo 11. Divida X por Y e atribua em Z. Passo 12. Mostre Z

Lgica de Programao
NARRATIVA Slide 15

3. Leia quatro valores informados pelo usurio e calcule a mdia desses valores e mostre na tela
Passo 1. Receba quatro valores pelo Usurio. Passo 2. Some os quatro valores Passo 3. Divida o resultado por 4 Passo 4. Mostre o resultado

Lgica de Programao
ALGORITMO Slide 16

Exemplo de um Fluxograma
MOSTRAR A INICIO
S

FIM
N

RECEBER A RECEBER B

A>B

MOSTRAR B

Lgica de Programao
FLUXOGRAMA Slide 17

Alguns Smbolos
Inicializao e finalizao do algoritmo Atribuio de valores

Entrada de dados Sada de Dados


Condio Sentido do fluxo de dados Ligao entre pginas

Lgica de Programao
EXERCCIOS Slide 18

Exerccios da pgina 10
Fazer o Fluxograma 1 ao 4

Lgica de Programao
FLUXOGRAMA Slide 19

1. Leia de a at d e efetue a Multiplicao de X e Y e em seguida imprima seu resultado em Z:


INICIO

LEIA A

Z := X * Y

MOSTRAR Z

LEIA B

Z := X * Y

MOSTRAR Z

LEIA C

Z := X * Y

MOSTRAR Z

3 2

LEIA D

Z := X * Y

MOSTRAR Z

FIM

Lgica de Programao
FLUXOGRAMA Slide 20

2. Leia de a at d e efetue a Diviso de X e Y e em seguida imprima seu resultado em Z:


INICIO

LEIA A

Z := X / Y

MOSTRAR Z

LEIA B

Z := X / Y

MOSTRAR Z

LEIA C

Z := X / Y

MOSTRAR Z

LEIA D

Z := X / Y

MOSTRAR Z

FIM

Lgica de Programao
FLUXOGRAMA Slide 21

3. Leia quatro valores informados pelo usurio e calcule a mdia desses valores e mostre na tela

INICIO

RECEBA ABCD

Z := (A + B + C + D)

Z := Z / 4

MOSTRAR Z

FIM

Lgica de Programao
FLUXOGRAMA Slide 22

4. Leia 6 valores informados pelo usurio e separe os valores pares dos impares e mostre na tela.
INICIO
S N

IMPAR := STR(A) 1 PAR := STR(A) IMPAR := IMPAR + STR(C)


S

RECEBER ABCDEF

A/2 TEM RESTO

IMPAR := IMPAR + STR(B)


S N

2
N

B/2 TEM RESTO

PAR := PAR + STR(B) IMPAR := IMPAR + STR(D)

C/2 TEM RESTO

PAR := PAR + STR(C)

IMPAR := IMPAR + STR(E)


S

3
N

D/2 TEM RESTO

PAR := PAR + STR(D)

E/2 TEM RESTO

PAR := PAR + STR(E)

IMPAR := IMPAR + STR(F)


S N

MOSTRAR PAR

MOSTRAR IMPAR

FIM

F/2 TEM RESTO

PAR := PAR + STR(F)

Lgica de Programao
ALGORITMO Slide 23

Exemplo de um Pseudocdigo
Inicio Declarar varivel A e B como numerico Mostrar tela digite numero 1 em varivel A; Mostrar tela digite numero 2 em varivel B; Pergunte Varivel A > B Se sim, Mostre varivel A Se no, Mostre varivel B Final

Lgica de Programao
EXERCCIOS Slide 24

Exerccios da pgina 10
Fazer o Pseudocdigo 1 ao 4

Lgica de Programao
PSEUDOCDIGO Slide 25

1. Leia de a at d e efetue a Multiplicao de X e Y e em seguida imprima seu resultado em Z:


Inicio Declarar varivel A, B, C, D como numerico Ler A Z := X * Y Mostrar Varivel Z Ler B Z := X * Y Mostrar Varivel Z Ler C Z := X * Y Mostrar Varivel Z Ler D Z := X * Y Mostrar Varivel Z Final

Lgica de Programao
PSEUDOCDIGO Slide 26

2. Leia de a at d e efetue a Diviso de X e Y e em seguida imprima seu resultado em Z:


Inicio Declarar varivel A, B, C, D como numerico Ler A Z := X / Y Mostrar Varivel Z Ler B Z := X / Y Mostrar Varivel Z Ler C Z := X / Y Mostrar Varivel Z Ler D Z := X / Y Mostrar Varivel Z Final

Lgica de Programao
PSEUDOCDIGO Slide 27

3. Leia quatro valores informados pelo usurio e calcule a mdia desses valores e mostre na tela
Inicio Declarar varivel A, B, C, D como numerico Receba A B C D Z := (A + B + C + D ) / 4 Mostrar Varivel Z Final

Lgica de Programao
PSEUDOCDIGO Slide 28

4. Leia 6 valores informados pelo usurio e separe os valores pares dos impares e mostre na tela.
Inicio Declarar varivel A, B, C, D E F como numerico Receba A B C D E F Pergunte A / 2 tem resto Se Sim, Impar = A como texto Se No, Par = A como texto Pergunte B / 2 tem resto Se Sim, Impar = Impar + B como texto Se No, Par = Par + B como texto Pergunte C / 2 tem resto Se Sim, Impar = Impar + C como texto Se No, Par = Par + C como texto Pergunte D / 2 tem resto Se Sim, Impar = Impar + D como texto Se No, Par = Par + D como texto Pergunte E / 2 tem resto Se Sim, Impar = Impar + E como texto Se No, Par = Par + E como texto Pergunte F / 2 tem resto Se Sim, Impar = Impar + F como texto Se No, Par = Par + F como texto Mostrar Varivel Par Mostrar Varivel Impar Final

Lgica de Programao
TABELA VERDADE Slide 29

Conectivos:

~ ^ v

No E Ou
Ento Se e somente se

Lgica de Programao
TABELA VERDADE Slide 30

Proposies Simples
Conjuno (^) - Se uma das condies for falsa o resultado ser falso. Disjuno (v) - Se uma das condies for verdadeira o resultado ser verdadeiro Condicional ()- Somente ser falso se A for Verdadeiro e B for falso. Bicondicional ()- Somente ser verdadeiro se A e B forem iguais.

Lgica de Programao
TABELA VERDADE Slide 31

A V V F

B V F V

A^B V F F

AvB V V V

AB AB V F V V F F

Lgica de Programao
TABELA VERDADE Slide 32

Tautologia
Sempre verdadeiro independente do contedo lgico das variveis A/B .

A V V

B V F

AB ~AvB (A B) AvB) V F V F V V

F
F

V
F

V
V

V
V

V
V

Lgica de Programao
TABELA VERDADE Slide 33

Contradio
Sempre falso independente do contedo lgico das variveis A/B .

A V F

~A F V

A A F F

Lgica de Programao
TABELA VERDADE Slide 34

Equivalncia Lgica
Quando possui a mesma tabela verdade.

A V V F F

B V F V F

AB V F V V

~AvB V F V V

Lgica de Programao
TESTE DE MESA Slide 35

a. b. c. d.

Algoritmo que l de a at d e efetua a Soma de X e Y em seguida imprime seu resultado em Z, considerando:


X = 2 e Y = 5; X = 1 e Y = 7; X = 3 e Y = 3; X=9eY=2

Inicio Declare X, Y Receba valor de X Receba valor de Y Soma X e Y em Z Imprimir Z Fim

Var
X Y Z

2 5 7

1 7 8

3 3 6

9 2 11

Lgica de Programao
EXERCCIOS Slide 36

Exerccios da pgina 10
Fazer o Teste de Mesa 1 ao 4

Dados Exerccio 3
A 1 B 6 C 7 D 10 8 15 19 9 10 13 22 8 6 22 10 6

Dados Exerccio 4

A 12 19 13 61 B 11 9 25 33 C 16 45 44 18 D 7 8 5 9

3 12 17 6

8 44 13 2

Lgica de Programao
EXERCCIOS Slide 37

Exerccios da pgina 10
Fazer exerccios do 5 ao 10

Lgica de Programao
EXERCCIOS Slide 38

5. Leia nmeros de 1 a 10 e mostre na tela qual deles divisvel por 3.


INICIO

RECEBA A=0
N S

DIV += STR(A)
A >= 10
N

MOSTRAR DIV

A := A + 1

A/3 TEM RESTO

FIM

Lgica de Programao
EXERCCIOS Slide 39

6.Trocar o pneu de um carro. 7.Comprar um sanduche. 8.Beber gua. 9.Trocar de roupa.

Lgica de Programao
EXERCCIOS Slide 40

10. Ir ao supermercado com uma lista e comprar tudo que custar menos

de R$ 10,00.

8, 10, 9, 6, 15, 60, 12

INICIO

RECEBA PRECO EM A
N S S

A < 10
N

COMPRA ITEM

LE PROXIMO ITEM

FIM DE LISTA

FIM

Lgica de Programao
EXERCCIOS Slide 41

Lio de Casa
Fazer exerccio 11

Lgica de Programao
EXERCCIOS Slide 42

Correo do Exerccio 11
Faa um algoritmo para calcular reajuste salarial dos funcionrios. Premissas: Salrio at R$ 660,00 tero aumento de 15%, at R$ 1.000,00 tero 10%, acima de R$ 1.000,00 tero 6% de aumento. Alem disso aqueles funcionrios que tiverem mais de 2 anos de casa recebero um extra de 78% do valor do salrio reajustado.

Lgica de Programao
EXERCCIOS Slide 43

INICIO

RECEBA SALARIO EM S

FIM DE LISTA RECEBA TEMPO EM T

FIM S

LE PROXIMO ITEM

S
S <= 660 S := S * 1.15

N S
S <= 1000 S := S * 1.10

N S
T >= 2 S := S * 1.78

S := S * 1.06

Como Programar

Como Programar
ADVPL Slide 45

Surgiu com a tecnologia Protheus em 1994 Derivada do Clipper Linguagem orientada a objetos; Ambiente de desenvolvimento (IDE) APOs (Advanced Protheus Objects),

Como Programar
ADVPL Slide 46

Interface com o Usurio Processos Programao de RPC Programao Web Programao TelNet

Como Programar
PROGRAMAO Slide 47

Compilao

Execuo

Como Programar
PROGRAMAO Slide 48

Linhas de Programa Linhas de comentrio


* (asterisco) && // *Programa para recalculo do custo mdio &&Programa para recalculo do custo mdio // Programa para recalculo do custo mdio

Podemos documentar blocos de texto inicializando com /* e finalizando com */


/* Programa para recalculo do custo mdio Autor: Biale ADVPL e Consultoria em Informtica Data: 15 de dezembro de 2006 */

Como Programar
PROGRAMAO Slide 49

Linhas de Programa
Linhas de comando
Local nSoma := 0

Linhas mistas
Local nSoma := 0 //Utilizada para totalizar o relatrio.

Como Programar
PROGRAMAO Slide 50

Tamanho de Linha
Linha fsica Linha lgica
If !Empty(cNome) .And. !Empty(cEnd) .And. ; <enter> !Empty(cTel) .And. !Empty(cFax) .And. ; <enter> !Empty(cEmail) GravaDados(cNome,cEnd,cTel,cFax,cEmail) Endif

Como Programar
ESTRUTURAO Slide 51

Identificao
/*****************************************************************************\ |Funcao para separao de nmeros pares e impares | |Autor: Cristiane C. Figueiredo | |Data : 01/03/06 | \*****************************************************************************/

Como Programar
ESTRUTURAO Slide 52

Inicializao
User Function fSeparaNum Local nBI Local cBIImpares := "" //Numeros Impares Local cBIPares := "" //Nmeros Pares

Como Programar
ESTRUTURAO Slide 53

Corpo do programa
For nBI:=1 to 12 If mod(nBI)== 0 cBIPares += Alltrim(str(nBI)) + Else cBIImpares += Alltrim(str(nBI)) + Endif Next

Como Programar
ESTRUTURAO Slide 54

Encerramento
// Exibe em tela o resultado encontrado Msginfo("Pares + cBIPares + " Impares + cBIImpares) // Termina o programa Return

Como Programar
ESTRUTURAO Slide 55

/****************************************************************************\ |Funcao para separao de nmeros pares e impares | |Autor: Cristiane C. Figueiredo | |Data : 01/03/06 | \****************************************************************************/ User Function fSeparaNum Local nBI Local cBIImpares := "" //Numeros Impares Local cBIPares := "" //Nmeros Pares For nBI:=1 to 12 If mod(nBI)== 0 cBIPares += Alltrim(str(nBI)) + Else cBIImpares += Alltrim(str(nBI)) + Endif Next // Exibe em tela o resultado encontrado Msginfo("Pares + cBIPares + " Impares + cBIImpares) Return

Como Programar
DOCUMENTAO Slide 56

Funes
/*============================================================================| |Funo |ADV0070A |Autor|Cristiane C. Figueiredo | Data |23/07/04| |==========|==================================================================| |Descrio |Verifica se campo do E2 pode ser alterado ou no. | |==========|==================================================================| |Modulo | SIGAFIN | |==========|==================================================================| |OBS | Especifico para BIALE | |==========|==================================================================| |Alteraes solicitadas | |=============================================================================| |Descrio |Sol.por|Atend.por |Data | |=============================================================================| |Incluida verificao de chamada por MsExecAuto | | | | |ISInCallStack('msexecauto'). |Gerente|Lucas Borges|30/01/07| |============================================================================*/ User Function COM0070A(nCampo) Comandos... Return

Como Programar
DOCUMENTAO Slide 57

Solicitao de Customizaes
Dados da Requisio
Data Solicitao rea Responsvel
<data da solicitao> <nome da rea solicitante/centro de custo> <nome do solicitante responsvel>

Analista de Negcio
Volume de esforo Previsto Data de entrega Prevista

< nome do analista de negcio >


<quantidade de horas necessrias para o desenvolvimento/testes> <data de entrega prevista (uso da rea de TI)>

Como Programar
DOCUMENTAO Slide 58

Objetivo Programas envolvidos (anlise inicial)

Comentrios/Observaes do Responsvel pela Customizao

Como Programar
DOCUMENTAO Slide 59

Aprovaes
Nome Assinatura Data

Como Programar
FUNCIONALIDADES Slide 60

Function

Limitada a programas padres, permitindo ser compilada por clientes.

no

User Function Static Function

Funes de usurio, podendo ser utilizadas para fazer customizaes. Funes chamadas pelas User Functions e pelas Functions.

Como Programar
CRIAO DE VARIVEIS Slide 61

Identificadores
Public: Visvel a partir do momento que criada at o termino da aplicao, no deve ser utilizada para qualquer coisa pois ocupa espao de memria. Private: Visvel na funo que a criou e nas demais chamadas por ela, at que a funo que a criou seja finalizada Local: Visvel somente na funo que a criou, variveis locais ocupam pouco espao de memriae so criadas automaticamente quando no declaradas ou quando provierem de parametrizao de funo

Como Programar
CRIAO DE VARIVEIS Slide 62

Tipos de Variveis
Tipo Caracter Numrica Exemplo cVar nVar Descritivo Aceita nmeros e letras Aceita apenas nmeros

Data
Lgica Array Objeto

dVar
lVar aVar oVar

Aceita apenas Datas


Aceita Verdadeiro ou Falso Aceita Vetores Usada em objetos

Como Programar
CRIAO DE VARIVEIS Slide 63

Variveis e nomes de campos


cRes := MEMVAR->NOME cRes := FIELD->NOME

Inicializao de Variveis

Como Programar
CRIAO DE VARIVEIS Slide 64

Utilizao da Funo CRIAVAR( )


Sintaxe: uRet := CriaVar(cCampo,lIniPad,cLado )

tipo de retorno de acordo com o dicionrio de dados, considerando inicializador padro. cCampo Nome do campo

uRet

lIniPad

cLado

Indica se considera (.T.) ou no (.F.) o inicializador padrao (X3_RELACAO) Lado para inicializao padro

Como Programar
OPERADORES BSICOS Slide 65

Matemticos
+ * / ** ou ^ % Adio Subtrao Multiplicao Diviso Exponenciao Mdulo (Resto da Diviso)

Como Programar
OPERADORES BSICOS Slide 66

String
+ Concatenao de strings (unio) - Concatenao de strings com eliminao dos brancos finais das strings intermedirias $ Comparao de Substrings (contido em)

Como Programar
OPERADORES BSICOS Slide 67

Relacionais
< > = == <= >= <> ou # ou != Menor que Maior que Igual Exatamente Igual (para caracteres) Menor ou Igual Maior ou Igual Diferente

Como Programar
OPERADORES BSICOS Slide 68

Lgicos
.And. .Or. E OU

.Not. ou ! NO

Como Programar
OPERADORES BSICOS Slide 69

Atribuies
= := += -= *= /= Atribuio Simples Atribuio em Linha Adio e Atribuio em Linha Subtrao e Atribuio em Linha Multiplicao e Atribuio em Linha Diviso e Atribuio em Linha

**= ou ^= %= ++ --

Exponenciao e Atribuio em Linha Mdulo (resto da diviso)/Atribuio em Linha Incremento Ps ou Pr-fixado Decremento Ps ou Pr-fixado

Como Programar
OPERADORES BSICOS Slide 70

Especiais
() Utilizados para agrupar elementos em uma expresso priorizando essas condies, ao qual damos o nome de ordem de precedncia da avaliao da expresso. Tambm servem para envolver os argumentos de uma funo. Elemento de Matriz. Utilizados para especificar um elemento especfico de uma matriz. Definio de Matriz, Constante ou Bloco de Cdigo. Por exemplo: aArray := {1,2,3,4,5} cria uma matriz chamada aArray com cinco elementos.

[]

{}

Como Programar
OPERADORES BSICOS Slide 71

Especiais
-> Identificador de Apelido (Alias). identifica um campo de um arquivo diferenciando-o de uma varivel. Exemplo: SA1->A1_NOME

&

Identifica uma avaliao de expresso atravs macrossubstituio.

Como Programar
OPERADORES BSICOS Slide 72

Especiais
@ Passagem de parmetro por referncia. Utilizado para indicar que durante a passagem de uma varivel para uma funo ou procedimento ela seja tomada como uma referncia e no como valor. Passagem de parmetro por valor. Utilizado para indicar que durante a passagem de uma varivel para uma funo ou procedimento ela seja tomada como um e valor no como referncia.

||

Como Programar
PRECEDNCIA Slide 73

Incremento/Decremento pr-fixado String Matemticos Relacionais Lgicos Atribuio Incremento/Decremento ps-fixado

Como Programar
PRECEDNCIA Slide 74

Matemtica
Exponenciao Multiplicao e Diviso Adio e Subtrao

Como Programar
PRECEDNCIA Slide 75

Exemplo
Local nVar := 15+12/3+7*3-2^3 Calcula-se a exponenciao: 2^3 =8 Calcula-se diviso: 12/3 =4 Calcula-se a multiplicao: 7*3 =21 Efetua a soma e subtrao: 15 + 4 + 21 - 8 O resultado desta expresso 32

Como Programar
PRECEDNCIA Slide 76

Exemplo
Local nVar := (15+12)/(3+7)*3-2^3 Calcula-se a exponenciao: 2^3 =8 Calcula-se o primeiro grupo de parnteses: 15+12 = 27 Calcula-se o segundo grupo: 3+7=10 Calcula-se a diviso: 27/10 = 2.7 Calcula-se a multiplicao: 2.7 * 3 = 8.1 Efetua a soma e subtrao: 8.1-8 O resultado desta expresso 0.1

Como Programar
MACRO SUBSTITUIO Slide 77

Exemplo
nVar := 20 cVar := nVar + 35 nResult := &cVar nResult := nVar + 35 nResult := 20 + 35 nResult := 55

Variveis
EXERCCIOS Slide 78

Exerccios da pgina 23

Variveis
EXERCCIOS Slide 79

Correo dos Exerccios

Vetores

Utilizao de Vetores
Slide 81

Array ou Matrizes Tabela Virtual


aArray Lin1 Lin2 Lin3 Col1 A D G Col2 B E H Col3 C F I

Utilizao de Vetores
Slide 82

Exemplo
Local aArray //Declarao da varivel aArray := {{"A", "B", "C"}, ; {"D", "E", "F"}, ; {"G", "H", "I"}} //Atribuio da matriz varivel

Utilizao de Vetores
Slide 83

Exemplo
MsgInfo(aArray[nLin][nCol]) Onde: nLin -> Linha onde se encontra o contedo que se quer exibir nCol -> Coluna onde se encontra o contedo que se quer exibir MsgInfo(aArray[2][3])

Utilizao de Vetores
Slide 84

Exemplo
aArray[nLin][nCol] := cVar Onde: nLin -> Linha onde se encontra o contedo que se quer alterar nCol -> Coluna onde se encontra o contedo que se quer alterar cVar -> Novo Contedo aArray[2][3] := X

Utilizao de Vetores
Slide 85

Cuidados Estrutura

Vetores
EXERCCIOS Slide 86

Exerccios da pgina 25

Vetores
EXERCCIOS Slide 87

1. Criar um vetor de 5 linhas com 3 Colunas e dar o nome de aArray1

aArray := {{a,b,c }; {d,e,f}; {g,h,i}; {j,k,l}; {m,n,o}}

Vetores
EXERCCIOS Slide 88

1. Criar um vetor de 5 linhas com 3 Colunas e dar o nome de aArray1

aArray := {{a},{b},{c},; {d},{e},{f},; {g},{h},{i},{j}}

Vetores
Slide 89

AAdd Adiciona um novo elemento ao final do array.


aArray := {} // Resultado: aArray vazio AADD(aArray, 5) // Resultado: { 5 } AADD(aArray, 10) // Resultado: { 5, 10 } AADD(aArray, { 12, 10 }) // Resultado: { 5, 10, { 12, 10 } } aArray[1] // Resultado 5 aArray[2] // 10

Vetores
Slide 90

Array Cria um array com dados no inicializados.


aArray := ARRAY(5) aArray := { NIL, NIL, NIL, NIL, NIL }

aArray := ARRAY(3, 2) aArray := { {NIL, NIL}, {NIL, NIL}, {NIL, NIL} }

Vetores
Slide 91

AScan Busca em um array at que o bloco retorne verdadeiro .T.


aArray := { "Tony, "Maria", "Sueli" } nPos := ASCAN(aArray, Maria") // Result: 2 nPos := ASCAN(aArray, maria") // Result: 0

AADD(aArr,{um",dois"}) AADD(aArr,{tres",quatro"}) AADD(aArr,{cinco",seis"}) nPos := ASCAN(aArr, {|x| x[2] == quatro"}) // Result: 2

Vetores
Slide 92

ASort Ordena um array.


aArray := { 3, 5, 1, 2, 4 } ASORT(aArray) // Resultado: { 1, 2, 3, 4, 5 } aArray := { {Maria", 14}, {Joao", 23}, {Arlete", 16} } aArray := ASORT(aArray ,,, { |x, y| x[2] < y[2] }) Resultado: { {"Maria", 14}, {"Arlete", 16}, {"Joao", 23} }

Controle de Fluxo
Slide 93

Estruturas de Repetio
Estruturas de Deciso

Controle de Fluxo
REPETIO Slide 94

For ... Next


Sintaxe FOR Variavel := nValorInicial TO nValorFinal [STEP nIncremento] Comandos... [EXIT] [LOOP] NEXT

Controle de Fluxo
REPETIO Slide 95

EXEMPLO
For nBI:=1 to 12 If mod(nBI)== 0 cBIPares += Alltrim(str(nBI)) + Else cBIImpares += Alltrim(str(nBI)) + Endif Next

Controle de Fluxo
REPETIO Slide 96

While ... Enddo


Sintaxe WHILE lExpressao Comandos... [EXIT] [LOOP] ENDDO

Controle de Fluxo
REPETIO Slide 97

EXEMPLO
Local nSomaPar := 0, nNumber := 350 nNumber := Int(nNumber / 2) While nNumber > 0 nSomaPar += nCnt nNumber := nNumber - 2 Enddo Alert( "A quantidade de nmeros pares : " + str(nSomaPar) ) Return

Controle de Fluxo
DECISO Slide 98

If ... Endif
Sintaxe IF lExpressao Comando Verdadeiro... ELSE Comando Falso... ENDIF

Controle de Fluxo
DECISO Slide 99

EXEMPLO
Local dVencto := CTOD("31/12/01") If Date() > dVencto Alert("Titulo vencido!") Else Alert("Titulo a vencer!") Endif Return

Controle de Fluxo
DECISO Slide 100

EXEMPLO
Local nMes := Month(Date()) Local cPeriodo := "" DO CASE CASE nMes <= 3 cPeriodo := "Primeiro Trimestre" CASE nMes >= 4 .And. nMes <= 6 cPeriodo := "Segundo Trimestre" CASE nMes >= 7 .And. nMes <= 9 cPeriodo := "Terceiro Trimestre" OTHERWISE cPeriodo := "Quarto Trimestre" ENDCASE Return

Controle de Fluxo
DECISO Slide 101

Do Case ... EndCase


Sintaxe DO CASE CASE lExpressao1 Comandos CASE lExpressao2 Comandos ... CASE lExpressaoN Comandos [OTHERWISE] Comandos ENDCASE

Controle de Fluxo
EXERCCIOS Slide 102

Lio de Casa Exerccios da pgina 31

Controle de Fluxo
PROBLEMAS COMUNS Slide 103

Exemplo 1: dbSeek(xFilial(SE1)+DTOS(dDtIni))

Do While SE1->(!Eof())
@ lin, col SAY teste

SA1->(DBSKIP())
Enddo

Controle de Fluxo
PROBLEMAS COMUNS Slide 104

Exemplo 2: aCampos := {} Do while .T. Aadd(aCampos, Teste) If Len(aCampos) > 100 EXIT Endif Enddo

Controle de Fluxo
PROBLEMAS COMUNS Slide 105

Exemplo 3:
aCampos := {} dbSeek(xFilial(SE1)+DTOS(dDtIni)) Do While SE1->(!Eof()) If !EMPTY(SE1->E1_BAIXA) Reclock(SE5 , .T.) Endif SE1->(dbSkip()) Enddo

Controle de Fluxo
CORREO DOS EXERCCIOS Slide 106

Exerccio 1 Pag. 31 (For)


User Function fExFluxo1 Local aArray := { { Linha1, A, B, C, D },; { Linha2, E, F, G, H }, { Linha3, I, J, K, L }} For I := 1 to 3 Mostre na tela aArray[I][1] Mostre na tela aArray[I][2] Mostre na tela aArray[I][3] Mostre na tela aArray[I][4] Mostre na tela aArray[I][5] Next Return

Controle de Fluxo
CORREO DOS EXERCCIOS Slide 107

Exerccio 1 Pg. 31 (While)


User Function fExFluxo1 Local aArray := { { Linha1, A, B, C, D },; { Linha2, E, F, G, H },; { Linha3, I, J, K, L }} I := 1 While I <= 3 Mostre na tela aArray[I][1] Mostre na tela aArray[I][2] Mostre na tela aArray[I][3] Mostre na tela aArray[I][4] Mostre na tela aArray[I][5] I++ Enddo Return

Controle de Fluxo
CORREO DOS EXERCCIOS Slide 108

Exerccio 1 Pg. 31 (Sem Constante)


User Function fExFluxo1() Local aArray := { { Linha1, A, B, C, D },; { Linha2, E, F, G, H },; { Linha3, I, J, K, L }} I := 1 While I <= len(aArray) Mostre na tela aArray[I][1] Mostre na tela aArray[I][2] Mostre na tela aArray[I][3] Mostre na tela aArray[I][4] Mostre na tela aArray[I][5] I++ Enddo Return

Controle de Fluxo
CORREO DOS EXERCCIOS Slide 109

Exerccio 2 Pg. 31
User Function fExFluxo2() Local aArray := { { Maria, 10, 7, 15, 31} ,; { Jose , 15, 16, 21, 33} , ; { Petrucio, 8, 8, 8, 6} , ; { Firmino, 15, 16, 21, 33} , ; { Felizberto, 10, 17, 31, 25} } For I:=1 to Len(aArray) Mostra Nome + aArray[I][1] nMedia := (aArray[I][2] + aArray[I][3] +; aArray[I][4] + aArray[I][5])/4 Mostra Media + str(nMedia) Next Return

Controle de Fluxo
CORREO DOS EXERCCIOS Slide 110

Exerccio 3 Pag. 31 (If)


User Function fExFluxo3() Local aArray:={{Maria,10,7,15,31},; {Jose,15,16,21,33},; {Petrucio,8,8,8,6},; {Firmino,15,16,21,33},; {Felizberto, 10, 17, 31, 25} } For I:=1 to Len(aArray) Mostra Nome + aArray[I][1] nMedia:=(aArray[I][2]+ aArray[I][3]+; aArray[I][4]+ aArray[I][5])/4 If nMedia < 10 cSit := Reprovado ElseIf nMedia >=10 .and. nMedia < 25 cSit := Exame Else cSit := Aprovado Endif Mostra Resultado: + str(cSit) Next Return

Controle de Fluxo
CORREO DOS EXERCCIOS Slide 111

Exerccio 3 Pag. 31 (Case)


User Function fExFluxo3() Local aArray:={{Maria,10,7,15,31},; {Jose,15,16,21,33},; {Petrucio,8,8,8,6},; {Firmino,15,16,21,33},; {Felizberto, 10, 17, 31, 25} } For I:=1 to Len(aArray) Mostra Nome + aArray[I][1] nMedia:=(aArray[I][2]+ aArray[I][3]+; aArray[I][4]+ aArray[I][5])/4 Do Case Case nMedia < 10 cSit := Reprovado Case nMedia >=10 .and. nMedia < 25 cSit := Exame Otherwise cSit := Aprovado EndCase Mostra Resultado: + cSit Next Return

Controle de Fluxo
EXERCCIOS Slide 112

Lio de Casa Exerccios da pgina 32