You are on page 1of 55

Aula 2

Programao
Comandos e funes
Operadores
IDE
Variveis de memria
Array
Funes
Programao
Exerccios de Lgica

Aqurio

3 cestos com bolas pretas e brancas e etiquetas erradas

Preta Preta Branca


Branca Preta Branca
3 cestos: 1 hiptese

Preta Preta Branca


Branca Preta Branca
3 cestos: 2 hiptese

Preta Preta Branca


Branca Preta Branca
Resposta
Vai na caixa com etiqueta Preta-Branca
Saca uma bola

Se Branca
Conclui-se
a outra bola Branca e esta caixa a Branca-Branca
a caixa que est etiquetada Preta-Preta Preta-Branca
a caixa que est etiquetada Branca-Branca Preta-Preta

Se Preta
Conclui-se
a outra bola Preta e esta caixa a Petra-Preta
a caixa que est etiquetada Preta-Preta Branca-Branca
a caixa que est etiquetada Branca-Branca Preta-Branca
Cruzamento dos ponteiros do relgio

Entre 0 horas e 24 horas quantas


vezes os ponteiros se cruzam,
contando inclusive o cruzamento
das 0 horas e das 24 horas?
Resposta: 23 vezes
Travessia da passarela
Quatro pessoas tem de atravessar uma passarela bamba. H
muitos buracos na passarela, que suporta apenas 2 pessoas
de cada vez (mais que isso, ela cai). O grupo deve usar uma
lanterna para guiar seus passos, caso contrrio acabar
caindo no buraco e morrendo. S h uma lanterna. As 4
pessoas andam em velocidades diferentes. Antonio cruza a
passarela em 1 minuto. Bernardo em 2 minutos. Carlos leva 5
minutos. O mais lento, Roberto, leva 10 minutos. A passarela
vai ruir dentro de exatamente 17 minutos.

Como os 4 podem atravess-la?


Resposta
Tempo
Vai o1e2 2
Volta o1 3
Vai o 5 e 10 13
Volta o2 15
Vai o1e2 17
Programa

Conjunto de Instrues: Comandos e Funes

Instrues bsicas de uma Linguagem:

Aritmticas:
Somar / Subtrair / Multiplicar / Dividir

Entrada e Saida:
Ler / Gravar / Tela / Impresso / Teclado / Atribuio

Lgicas:
If...Else...EndIf
For...Next
While...End
Do Case...EndCase
Inicio A

Armar Sim
A Esposa
Despertador Resmungar quer $$ ?

Desligar No
Despertador
Casado
Dar-lhe Sim
h mais de
R$ 100,00 5 anos ?
Repetir Bocejar
3 No
vezes
Sacudir a Beijar a
Esposa esposa

Sair da Casado
Sim
Cama h mais de
1 ano ?

Sim No
Acender
a luz Est Escuro ? Beijar a
esposa
No
Sim Ir at o
Voltar para Est Frio ? carro
a cama
No
Possvel Voltar No Est
Fim Ir ao para peg-las Com as
Banheiro Chaves ?
da rotina
Sim
Tomar Dirigir-se
Caf ao escritrio

A Fim
Operadores
Matemticos

+ - * / ** ou ^ %

x := 10 + 20

nValor := nQtde * nPreco

nValor := nValor + (nValor * 18 / 100)


Operadores
Relacionais

< > == <= >= <> ou # ou !=

If nQtde < nSaldo


MsgAlert(Pedido liberado)
Else
MsgAlert(Pedido bloqueado: estoque insuficiente)
EndIf

If nSalario > 1257


nIR := 15
EndIf
Operadores
Lgicos

.And. .Or. .Not. ou !

If cCredito == OK .And. nQtde < nSaldo


Liberar venda
EndIf

cCredito == OK .And. nQtde < nSaldo

V V V

V F F

F V F

F F F
Operadores
Lgicos

.And. .Or. .Not. ou !

If cEstNeg == "S" .Or. nQtdVenda < nSaldo


MsgAlert("OK, pode faturar!")
Else
MsgAlert("Estoque insuficiente!")
EndIf

cEstNeg == S .Or. nQtdeVenda < nSaldo

V V V

V F V

F V V

F F F
Operadores
Lgicos

.And. .Or. .Not. ou !


If cCredito == "OK" .And. (cEstNeg == "S" .Or. nQtdVenda < nSaldo)
MsgAlert("OK, pode faturar!")
Else
MsgAlert("Sem credito ou estoque insuficiente!")
EndIf

cCredito == OK .And. ( cEstNeg == S .Or. nQtdVenda < nSaldo )


V V V V
V V F V
V F V V
V F F F
F V V V
F V F V
F F V V
F F F F
Operadores
Lgicos

.And. .Or. .Not. ou !


If cCredito == "OK" .And. (cEstNeg == "S" .Or. nQtdVenda < nSaldo)
MsgAlert("OK, pode faturar!")
Else
MsgAlert("Sem credito ou estoque insuficiente!")
EndIf

cCredito == OK .And. ( cEstNeg == S .Or. nQtdVenda < nSaldo )


V V V V V
V V F V V
V F V V V
V F F F F
F V V V F
F V F V F
F F V V F
F F F F F
Operadores
Lgicos

.And. .Or. .Not. ou !

If a <> b If .Not. a==b If !a==b


... ... ...
EndIf EndIf EndIf
Operadores
Atribuio

:= += -= *= /= ^= ou **= %=

x := 10

x := x + 20
o mesmo que: x += 20

nValor := nValor + (nValor * 18 / 100)


o mesmo que: nValor += (nValor * 18 / 100)
Operadores
Incremento / Decremento

i++ ++i i-- --i

i++ equivale a i := i + 1

i := 1
i := 1
equivale a MsgAlert(i) mostra 1
MsgAlert(i++) i := i + 1

i := 1
i := 1 equivale a i := i + 1
MsgAlert(++i) MsgAlert(i) mostra 2
Operadores
Strings

x + y x - y x $ y

Concatenao
cNome := Joo
cSobreNome := Silva
cNomeCompleto := cNome + cSobreNome JooSilva

A - B AB

Pertence
Silva $ cNomeCompleto .T.
SILVA $ cNomeCompleto .F.
Operadores
Especiais

( ) Funcao()
{ } Array, bloco de cdigo
[ ] Array
& Macro
|| Bloco de cdigo
-> Alias de arquivo e var. de memria
SA1->A1_Nome M->A1_Nome
@ Parmetros por referncia
; Quebra de linha
If cCredito == "OK" .And.;
(cEstNeg == "S" .Or. nQtdVenda < nSaldo)
MsgAlert("OK, pode faturar!")
Else
MsgAlert("Sem credito ou estoque insuficiente!")
EndIf
: Objetos oBotao:cCaption := OK
IDE Primeiro Programa

1. Criar atalho do IDE (\erp811\bin\remote\mp8ide.exe)


2. Criar um novo projeto
3. Criar um novo arquivo
4. Digitar o primeiro programa User Function Se()
5. Salv-lo na pasta \erp811\My Projects
6. Inseri-lo no projeto Local nX := 10
7. Compilar:
(Servidor ativado / nenhum Remote em uso)
If nX > 5
Usurio: Administrador
MsgAlert("Maior")
Senha: admin
EndIf
8. Executar

Return

Ver 010_If.prw / 020_For.prw / 030_While.prw / 040_Case.prw


Organizao dos Programas-Fonte

Projeto (.PRJ)
Programa (.PRW) Funo
Funo
Funo

Programa (.PRW) Funo


Funo
Funo
Programa (.PRW) Funo
Funo
Funo
Variveis de Memria
Armazenamento temporrio de dados

Cadastro

Nome: Jos

Memria
Nome
Jos
Valor
1000

A1_NOME
Jos
D2_VALOR ICMS = Valor * 18 / 100
1000
CPU
Tipos de Variveis de Memria

Notao Hngara:
Caractere Casa 1 cTexto
Numricas 1234.56 nValor
Data CtoD(25/10/05) dData
Lgicas .T. .F. lOk

n X := 1 nX
X numrico
numrico

c X := Jos X agora
cX caracter
caracter

n X := n X + 1 Operao
ERRO
matemtica
!
Tipos de Variveis de Memria

Notao Hngara:
Caractere Casa 1 cTexto
Numricas 1234.56 nValor
Data CtoD(25/10/05) dData
Lgicas .T. .F. lOk

Funo ValType(NomeVar) tipo da varivel: C, N, D, L, A, U


Exemplo:
cNome := Jose ValType(cNome) C
nValor := 1000 ValType(nValor) N
x := Nil ValType(x) U

Ver Operadores.PRW
Exercicio
Array, Vetor ou Matriz

Variveis do tipo Caracter: uma para cada nome


cNome1 := Joao
Memria
cNome2 := Alberto
cNome1 cNome2 cNome3 cNome4
cNome3 := Pedro Joao Alberto Pedro Maria

cNome4 := Maria
aNomes
Joao Alberto Pedro Maria

Variveis do tipo Array: todos os nomes numa nica varivel


aNomes := {Joao, Alberto, Pedro, Maria}

aNomes[1]
aNomes[2]
aNomes[3]
aNomes[4]
Array, Vetor ou Matriz

Variveis
Armrio 1 Armrio 2 Armrio 3 Armrio 4

Joao Alberto Pedro Maria

Array
Armrio

Gaveta 1 Gaveta 2 Gaveta 3 Gaveta 4


Joao Alberto Pedro Maria
Array, Vetor ou Matriz

Gaveta 1 Joao

Gaveta 2 Alberto

Gaveta 3 Pedro

Gaveta 4 Maria
Array, Vetor ou Matriz

Um array pode conter tipos diferentes de dados


aPessoa := {Joao, 25, .T.}

Um array pode conter outros arrays: Matriz


aMatriz := {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.} }

aMatriz[1][1]
aMatriz[1]
aMatriz[1][2]
aMatriz[1][3]

aMatriz[2]
aMatriz[2][1]
aMatriz[2][2]
aMatriz[2][3]

aMatriz := {{Joao , 25, .T.},;


{Alberto, 18, .F.},;
{Pedro , 40, .T.},;
{Maria , 33, .F.}}
Array, Vetor ou Matriz

aMatriz := {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.}}

aMatriz := {{Joao , 25, .T.},;


{Alberto, 18, .F.},;
{Pedro , 40, .T.},;
{Maria , 33, .F.}}

Gaveta 1 Gaveta 2 Gaveta 3 Gaveta 4


1 2 3 1 2 3 1 2 3 1 2 3
Joao 25 T Alberto 18 F Pedro 40 T Maria 33 F

Gaveta 1 Gaveta 2 Gaveta 3 Gaveta 4


1 Joao 1 Alberto 1 Pedro 1 Maria

2 25 2 18 2 40 2 33

3 T 3 F 3 T 3 F
Array, Vetor ou Matriz

Adicionar elementos num array vazio

aNomes := {Joao,
{}
{Joao} Pedro, Maria}
Alberto} Pedro}
Alberto,

AAdd(aNomes, Joao)
AAdd(aNomes, Alberto)
AAdd(aNomes, Pedro)
AAdd(aNomes, Maria)

AAdd(aMatriz, {Joao,25,.T.})
AAdd(aMatriz, {Alberto,18,.F.})
AAdd(aMatriz, {Pedro,40,.T.})
AAdd(aMatriz, {Maria,33,.F.})

aMatriz: {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.}}


Array, Vetor ou Matriz

Funo Array(n): retorna um array com n elementos nulos

aArray := Array(5)
aArray {Nil, Nil, Nil, Nil, Nil}

Atribuio de valor aos elementos do array


aArray[1] := A
aArray[2] := B
aArray[3] := C
aArray[4] := D
aArray[5] := E
aArray {A, B, C, D, E}

Ver 050_Array.prw
Exercicio: fazer o sort de um array
Funes
Conjunto de Comandos

Programa.PRW
User Function Teste()

Comandos
Comandos
Comandos
Comandos

Return

Execuo (chamada) da funo: u_Teste()


Funes
Rotinas repetitivas

User Function CadCli() User Function CadFor()

Comandos Comandos
If CGC(cCGC) Comandos
continua Comandos
Else If CGC(cCGC)
abandona continua
EndIf Else
Comandos abandona
Comandos EndIf
Comandos Comandos

Return Return

Function CGC(cCGC)

If cCGC OK

.T. ou .F.
.T. ou .F.

lOK := .T.
Else
lOK := .F.
EndIf

Return lOK
Funes
Programao Estruturada

User Function Relato()


u_PreparaImpr()
u_LeDados()
u_Imprime()
Return

User Function PreparaImpr()


...
Return

User Function LeDados()


...
Return

User Function Imprime()


...
Return
Funes
Tipos de funo: Function, User Function, Static Function

CAD1.PRW CAD2.PRW GENERICAS.PRW


User Function CadCli() User Function CadFor() Function CGC(cCGC)

If CGC(cCGC) If CGC(cCGC) If cCGC OK


... ... lOK := .T.
Else Else Else
... ... lOK := .F.
EndIf EndIf EndIf

Grava() Grava() Return lOK

Return Return

Static Function Grava() Static Function Grava()


... ...
Return Return

Function e User Function podem estar em outro .PRW


Static Function somente na prpria .PRW
Funes
Passagem de parmetros

User Function Venda()

nImposto := u_ICMS(NE, 1000)

Return

User Function ICMS(cRegiao, nValor)


NE 1000
If cRegiao == SE
nICMS := nValor * 18 / 100
ElseIf cRegiao == NE
nICMS := nValor * 7 / 100
Else
nICMS := nValor * 12 / 100
EndIf

Return nICMS
Escpo das Varivies

Local
Visvel somente na funo em que foi criada

Private
Visvel na funo em que foi criada e nas funes seguintes

Public
Visvel em todas as funes, a partir do momento em que foi criada

Static
Visvel somente no programa (PRW)
Escpo das Varivies

User Function Func1()

Local cVar := "Func1" LOCAL Contedo


u_Func2()

Return

User Function Func2()

Local cVar := "Func2" PRIVATE Contedo


Local cVar1 := "Func2"
Private cVar2 := "Private Func2"
Public cVar3 := "Public Func2"

u_Func3()

Return

PUBLIC Contedo
User Function Func3()

cVar2 := ABC"

Return
Escpo das Varivies

User Function Func1()

Local cVar := "Func1" LOCAL Contedo


u_Func2() cVar Func1
Return

User Function Func2()

Local cVar := "Func2" PRIVATE Contedo


Local cVar1 := "Func2"
Private cVar2 := "Private Func2"
Public cVar3 := "Public Func2"

u_Func3()

Return

PUBLIC Contedo
User Function Func3()

cVar2 := ABC"

Return
Escpo das Varivies

User Function Func1()

Local cVar := "Func1" LOCAL Contedo


u_Func2() cVar Func2
cVar1 Func2
Return

User Function Func2()

Local cVar := "Func2" PRIVATE Contedo


Local cVar1 := "Func2"
Private cVar2 := "Private Func2" cVar2 Private Func2
Public cVar3 := "Public Func2"

u_Func3()

Return

PUBLIC Contedo
User Function Func3()
cVar3 Public Func2
cVar2 := ABC"

Return
Escpo das Varivies

User Function Func1()

Local cVar := "Func1" LOCAL Contedo


u_Func2()

Return

User Function Func2()

Local cVar := "Func2" PRIVATE Contedo


Local cVar1 := "Func2"
Private cVar2 := "Private Func2" cVar2 ABC
Public cVar3 := "Public Func2"

u_Func3()

Return

PUBLIC Contedo
User Function Func3()
cVar3 Public Func2
cVar2 := ABC"

Return
Escpo das Varivies

User Function Func1()

Local cVar := "Func1" LOCAL Contedo


u_Func2() cVar Func2
cVar1 Func2
Return

User Function Func2()

Local cVar := "Func2" PRIVATE Contedo


Local cVar1 := "Func2"
Private cVar2 := "Private Func2" cVar2 ABC
Public cVar3 := "Public Func2"

u_Func3()

Return

PUBLIC Contedo
User Function Func3()
cVar3 Public Func2
cVar2 := ABC"

Return
Escpo das Varivies

User Function Func1()

Local cVar := "Func1" LOCAL Contedo


u_Func2() cVar Func1
Return

User Function Func2()

Local cVar := "Func2" PRIVATE Contedo


Local cVar1 := "Func2"
Private cVar2 := "Private Func2"
Public cVar3 := "Public Func2"

u_Func3()

Return

PUBLIC Contedo
User Function Func3()
cVar3 Public Func2
cVar2 := ABC"

Return
Ver 052_EscopoVar.prw
Passagem de Parmetros
Por Valor

User Function Venda()


Local cRegiao := NE
Local nValor := 1000
nImposto := ICMS(cRegiao, nValor)
Return NE 1000

User Function ICMS(cRegiao, nValor) So criadas


NE 1000 variveis
If cRegiao == SE LOCAIS
nICMS := nValor * 18 / 100
ElseIf cRegiao == NE
nICMS := nValor * 7 / 100
Else
nICMS := nValor * 12 / 100
EndIf

Return nICMS
Passagem de Parmetros
Por Valor

User Function Param1()

Local x := 1
Local y := 2 x=1
u_Param2(x, y) y=2
MsgAlert(x+y)

Return

User Function Param2(x, y)

x := 50
y := 100

Return
Ver 060_Param.prw
Passagem de Parmetros
Por Valor

User Function Param1()

Local x := 1
Local y := 2 x=1
u_Param2(x, y) y=2
MsgAlert(x+y)

Return

User Function Param2(x, y)

x := 50 x = 50
y := 100
y = 100
Return
Ver 060_Param.prw
Passagem de Parmetros
Por Valor

User Function Param1()

Local x := 1
Local y := 2 x=1
u_Param2(x, y) y=2
MsgAlert(x+y)

Return

User Function Param2(x, y)

x := 50
y := 100

Return
Ver 060_Param.prw
Passagem de Parmetros
Por Referncia

User Function Param1()

Local x := 1
Local y := 2 x=1
u_Param2(@x, y) y=2
MsgAlert(x+y)

Return

User Function Param2(x, y)

x := 50
y := 100

Return
Ver 060_Param.prw
Passagem de Parmetros
Por Referncia

User Function Param1()

Local x := 1
Local y := 2 x = 50
u_Param2(@x, y) y=2
MsgAlert(x+y)

Return

User Function Param2(x, y)

x := 50 y = 100
y := 100

Return
Ver 060_Param.prw
Passagem de Parmetros
Por Referncia

User Function Param1()

Local x := 1
Local y := 2 x = 50
u_Param2(@x, y) y=2
MsgAlert(x+y)

Return

User Function Param2(x, y)

x := 50
y := 100

Return
Ver 060_Param.prw
Funes de Caracteres, Nmeros e Datas

Manipulao de textos (strings)


Converso de nmeros
Funes de data e hora
Converso de datas

Ver 053_Tratamentos.PRW

You might also like