Você está na página 1de 13

Algoritmo e Lgica I

1 Semestre
CONCEITOS BSICOS

Prof. Luciano

Modelo de um computador Unidade de Controle Unidade de Aritmtica e Lgica

U.C.P.

Unidades de Entrada

Unidade de Memria Principal

Unidades de Sada

Unidades de Memrias Auxiliares Unidade de Controle - identifica e decodifica a prxima instruo a ser executada e aciona a unidade responsvel pela sua execuo. Unidade de Aritmtica e Lgica - executa clculos aritmticos e lgicos Unidade de Memria Principal - armazena o programa e os dados por ele processados. Para executar um programa, ele e seus dados devem residir na memria principal no momento da sua execuo. Unidades de Entrada - transferem informaes de fora da mquina para a Unidade de Memria Principal. Ex: teclado, mouse, scanner, microfone. Unidades de Sada - exibem informaes armazenadas na Memria Principal em algum meio externo de exibio de dados, em geral em forma legvel pelo ser humano. Ex: impressora, monitor de vdeo, altofalantes. Unidades de Memrias Auxiliares - Armazenam por longo tempo dados e programas que no esto sendo processados pelo computador no momento. Ex: discos winchester, discos CD. Comando (Instruo) uma regra que especifica quais os dados a serem operados e quais as operaes. Ex: Numa calculadora comum 3 + 2 = Algoritmo (ou Programa) um conjunto de instrues para a resoluo, passo a passo, de um problema. Constante um valor fixo que no sofre alterao durante a execuo de um programa, nem de um programa para outro. Ex: 3 + x (3 uma constante)

Tipos de constantes em Pascal Inteira - um ou mais dgitos, com ou sem sinal. Ex: -3 2 318 0 Real - um ou mais dgitos, com ou sem sinal, com um ponto decimal. Ex: -3.0 2.51 Caractere - um caractere vlido, entre apstrofes. Ex: 'A' 'k' '@' '+' Cadeia (ou String de Caracteres) - conjunto de caracteres vlidos, entre apstrofes. Ex: 'Blablu' 'Z Colmia' 'Rua da Praia, 34 - ap. 23 B' Booleana (ou Lgica) - True False 0.031

Varivel a representao simblica de um elemento cujo valor pode ser alterado durante a execuo do programa. Ex: 3 + x (x uma varivel). Nome de varivel em Pascal composto de um at 63 caracteres (letras, dgitos e sublinha ( _ )), sendo que o primeiro deve ser letra ou sublinha. Ex: _Valor x1 x2 TotalSalarios Obs. Cada nome deve ser nico Pascal no diferencia maisculas de minsculas Um nome no pode ser igual a uma palavra chave da Linguagem No pode haver brancos dentro do nome Usar sempre nomes mnemnicos (nome deve lembrar a funo da varivel no programa) Estas regras valem para nome de qualquer tipo de identificador em Pascal (nomes de programas, de procedures, de funes, de units etc. ) Declarao de variveis Todas as variveis devem ser declaradas numa seo do programa chamada Var, localizada prxima ao incio do programa. Sintaxe Var <nomes de variveis> : <tipo>; Ex: Var M, N, Soma : integer; X, Y : real; Tipos inteiros em Pascal Integer -32768 a 32767 Byte 0 a 255 ShortInt -128 a 127 2 bytes com sinal 1 byte sem sinal 1 byte com sinal

Word 0 a 65535 2 bytes sem sinal LongInt -2147483648 a 2147483647 4 bytes com sinal Tipos reais em Pascal Real 2.9E-39 a 1.7E38 6 bytes; preciso de 11 ou 12 dgitos Single 1.5E-45 a 3.4E38 4 bytes; preciso de 7 a 8 dgitos Double 5.0E-324 a 1.1E308 8 bytes; preciso de 15 ou mais dgitos Extended 3.4E-4951 a 1.1E4932 10 bytes; preciso de 19 a 20 dgitos

Algoritmo e Lgica I

1 Semestre

Prof. Luciano

Comp 9.2E-18 a 9.2E18 8 bytes; preciso de 19 a 20 dgitos Obs: Single, double, extended e comp exigem uso do coprocessador aritmtico. {$N+} EXPRESSES ARITMTICAS Expresso Aritmtica Uma expresso aritmtica combina dados e operadores para produzir um valor resultante. Dados: variveis e constantes. Resultado: uma constante numrica. Ex: M + N / 2 Operadores aritmticos Na ordem de prioridade 1o .) + - (unrios) 2o .) * (multiplicao) / (diviso real) 3o .) + - (adio e subtrao)

DIV (diviso inteira)

MOD(resto da div. Inteira)

Obs. a) se os operandos so de um s tipo, o resultado ser daquele tipo. Ex: M + N - 3 resultado Inteiro X*Y resultado real b) Se operandos so de tipos diferentes, o resultado ser real. Ex: M + N / 2.0 c) O operador ( / ) pode ser usado com inteiros ou reais, mas sempre produz resultado real. Ex: m + n / 2 real d) parnteses podem mudar a ordem de precedncia das operaes. Ex: (m + n) / 2 e) A diviso inteira (DIV) trunca a parte decimal do resultado. Ex: 12 DIV 5 d 2 365 div 7 d 52 f) O MOD calcula o resto da diviso inteira. Ex: 12 MOD 5 d 2 12 mod 6 d 0 ATRIBUIO Atribuio o comando (instruo) que serve para atribuir um valor a uma varivel. Sintaxe: <nome da varivel> := <expresso> ; Ex: M := -3; N := M + 8: X := 2.0; M N X -3 5 2.0

Y := X + N; Y 7.0 Obs. a) Em princpio, a varivel deve ser do mesmo tipo da expresso; b) Se a expresso combinar tipos diferentes (real e inteiro), a varivel atribuda deve ser real.

Ex: Y := X + N;

M := X + N; (invlido). TIPOS CHAR E STRING

Servem para armazenar dados compostos de caracteres (textos em geral). Tipo Char armazena um nico caractere Tipo String armazena uma cadeia de at 255 caracteres. Ex: Var C : Char; Cad : String; C := 'A'; C A Cad Isto uma cadeia

Cad := 'Isto uma cadeia'; Podemos delimitar o tamanho da cadeia. Ex: Var Cad15 string[15];

Cad := 'Esta cadeia tem mais de 15 caracteres';

Cad15 Esta cadeia tem

ESTRUTURA DE UM PROGRAMA PASCAL Program <nome do programa>; Uses <lista de nomes de unidades>; Label <lista de nomes de rtulos>; Const <nome da constante> = <valor>; ..... Type <nome do tipo> = <definio do tipo>; ..... Procedure ... ...... Function ... ..... Var <nomes de variveis> : <tipo> ..... Begin ....... End.

Sees de definies

Seo de procedures e funes

Bloco do Programa principal

Algoritmo e Lgica I
Sintaxe: Write (<lista de expresses>); Writeln (<lista de expresses>);

1 Semestre

Prof. Luciano
SADA NA TELA

Onde <lista de expresses> composta de uma ou mais expresses separadas por vrgula. Ambas as instrues exibem o resultado das expresses na tela do monitor a partir da posio onde se encontra o cursor. Aps a exibio, o Write deixa o cursor aps o ltimo caractere exibido; o Writeln faz o cursor saltar para o incio da prxima linha da tela. Ex: M := 3; X := -5.3; Y := X + M; Write('Valor de M: ', M); Writeln(' Valor de X ', X); Write('Blablu'); Sada na tela: Valor de M: 3 Valor de X: -5.3000000000E+00 Blablu Na memria, temos: M X Y 3 -5.3 -2.3

Obs. a) Sintaxe para formatao de nmeros reais na sada: <valor>:<tamanho total do campo de sada>:<nmero de casas decimais> Ex: writeln (X : 5 : 2); -5.30 (ajustado direita dentro do campo) b) Sintaxe para formatao de nmeros inteiros na sada: <valor> : <tamanho do campo de sada> Ex: write (M : 5 ); 3 (ajustado direita dentro do campo) c) Writeln; Leva o cursor para o incio da prxima linha. ENTRADA PELO TECLADO Sintaxe: Readln (<lista de nomes de variveis>); O programa interrompe sua execuo e aguarda a digitao de valores em quantidade e tipos correspondentes s variveis da lista. Os valores digitados (constantes) sero atribudos s respectivas variveis da lista. Ex: Readln (M, N, X); Se forem digitadas as constantes 23, 12 e 5.7, teremos, na memria M 23 N 12 X 5.7

Obs. a) Se a constante digitada no for do mesmo tipo da varivel correspondente haver um runtime error nmero 106; b) Se a varivel no comportar o valor digitado, armazenar um valor aleatrio e no acusar erro; c) Constantes tipo string ou char devem ser digitadas sem apstrofes Ex: var Nome : string[5]; Car : char; Begin Readln(Nome, Car); ..... End. Texto digitado Blablu Bla r Nome Blabl Bla Car u r

POSICIONAMENTO DO CURSOR Sintaxe: Clrscr; De clear screen limpa a tela e posiciona o cursor na primeira posio da primeira linha. Exige a instruo Uses Crt; na seo Uses do programa. Sintaxe: Gotoxy (<coluna>, <linha>); Posiciona o cursor na coluna e linha indicadas. Tambm requer Uses Crt; Usa-se antes de leitura e impresso, se deseja-se definir a posio exata da leitura ou da impresso. COMENTRIOS Sintaxe: {<texto de comentrio>} Ex: {Programa principal} Var ....... FUNES E PROCEDIMENTOS (PROCEDURES) PR-DEFINIDAS So subprogramas j prontos que executam certas tarefas bastante freqentes. Aciona-se uma procedure ou uma funo chamando-a pelo seu nome e passando os argumentos que ela exige. A chamada a) de uma funo dentro de uma expresso b) de uma procedure fora de qualquer instruo

Algoritmo e Lgica I

1 Semestre

Prof. Luciano

Alguns exemplos ilustrativos: a) Funo SQR de square, eleva um valor ao quadrado Y:= 5; X := SQR (Y) + 3; Writeln(X:6:1); 28.0 b) Procedure INC incrementa 1 ou outro inteiro a uma varivel inteira. Inc (M); o mesmo que a atribuio M:=M + 1; Inc (M, 2); o mesmo que M:=M + 2; c) Funo Round retorna o valor arredondado para o inteiro mais prximo; Funo Trunc trunca a parte inteira, sem arredondar; Ex: X:= 27.8; M:= Round (X); Write(M:5); Write (Trunc (X):10); 28 27

d) Funo Random gera um nmero randmico (aleatrio). Random; {retorna um valor fracionrio no intervalo [0.0, 1)} Random (M); {onde M inteiro, retorna um valor inteiro aleatrio no intervalo [0, M)}

TIPO BOOLEAN Uma varivel do tipo Boolean (ou Lgico) s admite dois valores: True ou False. Ex: Var

Achou : boolean; ...... Achou := True; Achou := False; EXPRESSO RELACIONAL

Uma expresso relacional permite comparar duas expresses de mesmo tipo, usando os operadores relacionais, que so os seguintes em Pascal: > maior que < menor que = igual a >= maior ou igual <= menor ou igual <> diferente de in ser estudado mais tarde Ex: x + y > 0 {compara duas expresses aritmticas} Nome <> 'Anna Carolina' {compara duas expresses do tipo cadeia ou string} Car = 'a' {compara dois caracteres} O resultado de uma expresso relacional sempre uma constante booleana, isto , true ou false. Obs. Ao comparar operandos numricos, pode-se utilizar tipos diferentes. Exerccio: sendo x = 3.5, y = 2, Nome = 'Blu', Car = 'a' e vLog = true, qual o resultado de cada expresso relacional abaixo? a) x > y b) Nome <> 'blo' c) x - 1.5 = y d) Car > x e) Nome = Car f) vLog

EXPRESSO LGICA

Expresso lgica toda aquela que envolve um ou mais operadores booleanos (ou lgicos), que so, em Pascal: Not operador unrio; pode anteceder qualquer operando que resulte true ou false And, or, xor operadores binrios: ligam dois operandos booleanos. Ex: a) Not (Nome = 'Jos') b) (x > y) and (Nome <> 'Car') Recomendao: coloque entre parnteses toda expresso relacional que participa de uma expresso lgica.

Algoritmo e Lgica I
Tabelas verdade Sejam A e B operandos booleanos. A True True False False B True False True False Not A False False True True A and B True False False False

1 Semestre

Prof. Luciano

A or B True True True False

A xor B False True True False

Prioridades dos operadores lgicos em Pascal: 1) Not 2) And 3) Or e xor O resultado de uma expresso lgica sempre uma constante booleana, isto , true ou false. Exerccio: qual o resultado de cada expresso abaixo, usando os mesmos valores do exerccio anterior? a) (x > y) and (nome = car) b) not (x > y) and (nome = car) or (vLog) c) not (x > y) or (nome = car) and not (vLog)

Exerccio: qual o valor final de cada varivel, aps a execuo do seguinte trecho de programa Pascal? X := 1.2; Y := x + 3; VLog := x >= y; Nome := 'Blu' ; VLog := not vLog and ((x > y) or (nome <> 'blu')); X Y Vlog Nome

COMANDOS SIMPLES DE TOMADA DE DECISO Comando If-then. Sintaxe: If <condio> Then <comando>; Onde <condio> uma varivel booleana ou qualquer expresso lgica ou relacional; <comando> um comando executvel simples ou composto. Um comando composto formado de dois ou mais comandos simples, delimitados por begin... end. Ex: If Saldo < 0 Then writeln( 'Conta no tem fundos. ' );

If Atraso > 0 Then begin Multa := Prestacao + 0.05 * Prestacao; Juro := Prestacao * 0.01 * Atraso; ValorFinal := Prestacao + Multa + Juro; End; Semntica: A <condio> avaliada. Se der true, o <comando> executado; caso contrrio, o <comando> no executado. Comando If-then-else. Sintaxe: If <condio> Then <comando-1> Else <comando-2>; Ex: If Media >= 6 Then writeln (' Aluno aprovado.') Else begin Writeln (Escolha o grau a ser substitudo: '); Readln (Grau); End; Obs: repare que antes do else no h ponto-e-vrgula. Semntica: Se a <condio> der true, s <comando-1> ser executado; se for false, somente <comando-2> ser executado.

PROGRAMAS COM REPETIO Comando WHILE. Sintaxe: While <condio> do <comando>; Onde <condio> uma constante ou varivel booleana, ou uma expresso relacional ou lgica; <comando> um comando simples ou um bloco begin .... end (comando composto).

Algoritmo e Lgica I

1 Semestre

Prof. Luciano

Semntica: 1. A <condio> avaliada: se resultado true, o <comando> executado e o controle volta automaticamente para o while; 2. O processo repete, enquanto a <condio> tem resultado true; 3. Quando a <condio> d resultado false, o controle passa para a primeira instruo aps o grupo while. Ex: {Exibir os inteiros de 1 a 10} i := 1; While i <= 10 do Begin Writeln( i ); i := i + 1; end;

Contador toda a varivel que executa uma contagem dentro do programa. Ela inicializada antes do grupo de repetio e a cada repetio (ou em algumas delas) sofre um incremento constante. Ex: a varivel i do exemplo anterior. Acumulador toda a varivel que executa uma acumulao ou soma dentro do programa. Ela inicializada antes do grupo de repetio e a cada repetio (ou em algumas delas) sofre um incremento varivel. Ex: {Ler nome e idade de 15 pessoas, calcular e exibir a mdia das idades, e dizer quantas pessoas tm seu nome iniciando com a letra 'N'} Program repetio; Var I, Cont, Soma, Idade : integer; Media : real; Nome : string[20]; Begin Soma:=0; {Acumulador para somar as idades} I := 1; {contador para contar as repeties} Cont := 0; {contador para contar quantos nomes tm a inicial N} While i <= 15 do Begin Write('Nome: '); readln(Nome); Write('Idade: '); readln (Idade); If Copy(Nome,1,1) = 'N' Then inc (Cont); Soma := Soma + Idade; i := i + 1; end; Media := Soma / i; Writeln('Mdia das idades: ', Media: 6:2); Writeln('Quant. nomes com inicial N: ', cont: 3 ); Readln; End.

Comando REPEAT-UNTIL.

11

Sintaxe: Repeat <comando> Until <condio>; Obs. Se o comando for composto, no necessrio delimit-lo com begin ... end. Semntica: O <comando> executa repetidas vezes, at que a <condio> tenha resultado true. Ex: {Exibir os nmeros pares de 1 a 10} i := 0; Repeat i := i + 2; writeln ( i ); Until i = 10;

Diferenas entre While e Repeat. 1. While testa a condio no incio, Repeat no final do grupo; 2. Devido diferena (1), o grupo Repeat executa pelo menos uma vez enquanto o While pode executar "zero" repeties. 3. O While termina quando a <condio> se torna false; o Repeat acaba quando a <condio> se torna true. Comando FOR. Sintaxe: For <varivel de controle> := <valor inicial> to <valor final> do <comando>; For <varivel de controle> := <valor inicial> downto <valor final> do <comando>; {1} {2}

Onde <varivel de controle> deve ser uma varivel de tipo ordinal; <valor inicial> e <valor final> so expresses compatveis com o tipo da <varivel de controle>. Ex: {Exibir os inteiros de 1 a 10} For i := 1 to 10 do Writeln ( i );

Semntica: Quando o grupo inicia, as expresses <valor inicial> e <valor final> so avaliadas e seus resultados valem at o final da execuo do grupo; O grupo <comando> executado uma vez para cada valor do intervalo [<valor inicial>, <valor final>]; A <varivel de controle> sempre comea com o <valor inicial>; Na sintaxe (1), a <varivel de controle> incrementada de 1 a cada iterao; na (2), este incremento de -1, a cada repetio.

Algoritmo e Lgica I
Ex:

1 Semestre

Prof. Luciano

{Exibir as letras do alfabeto, de trs para a frente} For c := 'Z' downto 'A' do Writeln ( c ); {a varivel c deve ser declarada do tipo char}

Obs. a) Nunca altere o valor da <varivel de controle> dentro do corpo do grupo FOR; Ex: For i := 1 to 10 do Begin writeln ( i ); readln ( i ); {jamais faa isto} end; b) O grupo For pra sua execuo quando a <varivel de controle> ultrapassa o <valor final> (ou seja, quando ela maior que o <valor final> na sintaxe (1), ou quando menor que o <valor final> na sintaxe (2)). Em virtude disso, se logo ao entrar no for o <valor inicial> j maior que o <valor final> (sintaxe (1)), o for no executar nenhuma vez. Idntico comportamento na sintaxe (2), se o <valor inicial> j for menor que o <valor final> logo que o programa entra no for. Ex: os dois grupos abaixo no exibiro nada: For k := 10 to 5 do Writeln ( 'blablu' ); For j := 10 downto 100 do Writeln (j + 2 );

c) O valor da <varivel de controle> aps a ltima iterao igual ao da ltima iterao, isto , <valor final> (restrio da linguagem Pascal); Ex: for i := 1 to 5 do Write (i : 3); Write (i : 3); Sada na tela: 1 2 3 4 5 5

13

Você também pode gostar