Académique Documents
Professionnel Documents
Culture Documents
SUMARIO PAGINA
1. Conceit os Básicos 2
2. E trutura de Cont role 17
3. Programação orientada a objetos 27
Exercícios comentados 31
Considerações Finais 66
Exercícios 67
Gabarito 85
Toda e qualquer atividade, por mais intuitiva que nos pareça, pode ser
organizada em uma sequência lógica de passos. Por exemp lo, para acessar um
curso completo em PDFs aqui no Estratégia, você precisa :
1.Ligar o computador;
2.Abrir o navegador de Internet;
3.Acessar o site do Estratégia;
4. Selecionar o curso;
S.Confirmar a compra;
6.Se não for usuário cadastrado do site, preencher cadastro;
7. Realizar o pagamento;
S.Acessar os PDFs.
Por exemplo, um algoritmo que calcu le a média entre dois números inteiros
deverá :
Algoritmo
Exemplo de pseudocódigo:
ALGORITMO MEDIA_FINAL;
VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO;
NOME: CARACTERE [35]
INICIO
LER (NOME);
LER (NOTA1, NOTA2, NOTA3, NOTA4);
MEDIA:= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
ESCREVER (NOME, MEDIA)
FIM.
FLUXO DE DADOS
Indica o sentido do fluxo de dados. Conecta os
demais símbolos
TERMINAL
Indica o INÍCIO ou FIM de um processamento
Exemplo: Início do algoritmo
PROCESSAMENTO
Processamento em geral
Exemplo: Calculo de dois números
ENTRADA/SAÍDA (Genérica)
Operação de entrada e saída de dados
Exemplo: Leitura e Gravação de Arquivos
DECISÃO
Perm ite elaborar processos de decisão
Digite numero nl
SIM
NÃO
Imprima o resultado
Variável
ALGORITMO MEDIA_FINAL;
VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO; (tipo de variável,
número inteiro)
NOME: CARACTERE [35]; (tipo de variável, texto até 35 caracteres)
INICIO
LER (NOME);
LER (NOTA1, NOTA2, NOTA3, NOTA4);
MEDIA:= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
ESCREVER (NOME, MEDIA)
FIM.
Constante
Constante, conforme o próprio nome diz, difere da variável por não permitir
modificação em seus valores pelo algoritmo.
ALGORTIMO AREA_CIRCUNFERENCIA;
CONST PI = 3.1416;
VAR RAIO, AREA: REAL;
INICIO
LER (RAIO);
AREA:= PI * SQR(RAIO);
ESCREVER (‘AREA =’, AREA)
FIM.
Instrução
ALGORITMO MEDIA_FINAL;
VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO;
NOME: CARACTERE [35]
INICIO
LER (NOME);
LER (NOTA1, NOTA2, NOTA3, NOTA4);
MEDIA:= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
ESCREVER (NOME, MEDIA)
FIM.
Conjunto de instruções
ALGORITMO MEDIA_FINAL;
VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO;
NOME: CARACTERE [35]
INICIO
LER (NOME);
LER (NOTA1, NOTA2, NOTA3, NOTA4);
MEDIA:= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
ESCREVER (NOME, MEDIA)
FIM.
E agora? Ficou mais compreensível o nosso algoritmo? Mas ainda tem mais!
A 1,33
B
10
Em programação orientada a o bjet os, são objetos, pro pria ment e ditos.
1.5 Atribuição
Em lóg ica de programação, temos que prest ar atenção à m anipu lação das
variáve is. Representadas por um":= " ou por uma seta para a esquerda (+--),a
at r ibuição implica em atribu ir a uma variável o va lor do out ro lado do símbo lo
( := ou +--) .
Caso você tenha começado a sent ença com "Média é igua l a .... " PARA
TUDO!!! Ent re mos na lóg ica de programação desde já!
Você deverá ler a se ntença da segu inte form a : " Méd ia recebe o va lor de
NOTA 1 + ....... "
Atribuição Exemplo
variáve l +--constante A +-- 45 ("A recebe 45")
variáve l +--variável A +-- B ("A recebe o valor de B")
variáve l +--expressão A +-- B + C ("A recebe o valor de B + C")
variáve l +--função A +-- calculo(B,C) ("A recebe o retorno da função calculo")
Operador Significado
> maior
< menor
= igual
>= maior ou igual
<= menor ou igual
<> d iferente
Prof. Victor Da/ton
www.estrategiaconcursos.com.br 11 de 85
Tecnologia da Informação para /CMS/SP 2015- Pré Edital
Agente Fiscal de Rendas- Especialidade Gestão Tributária
Pro/ Victor Dalton -Aula 06
Operação Operador
Negação não
Conj unção e
Disjunção ou
Disjunção exclusiva xou (lido como " ou exclusivo" )
X y X eY X ou Y não X X xou Y
v v v v F F
v F F v F v
F v F v v v
F F F F v F
LER (NOME);
LER (NOTAl, NOTA2, NOTA3, NOTA4);
Uma função, por sua vez, é um pouco mais peculiar, pois obrigatoriamente
retorna um valor.
ALGORTIMO AREA_CIRCUNFERENCIA;
CONST PI = 3.1416;
VAR RAIO, AREA: REAL;
INICIO
LER (RAIO);
AREA:= PI * SQR(RAIO);
ESCREVER (‘AREA =’, AREA)
FIM.
SQR(NUMERO:real):real;
VAR QUADRADO:real
INICIO
QUADRADO:= NUMERO * NUMERO;
RETORNAR QUADRADO;
FIM
Ficou complicado?
Algoritmo VALOR
VAR TESTE:inteiro
INICIO
TESTE 30;
MANIPULA_VARIAVEL(TESTE);
ESCREVA(TESTE);
FIM
Algoritmo MANIPULA_VARIAVEL(X:inteiro)
INICIO
X X + 10;
ESCREVA(X);
FIM
Algoritmo REFERENCIA
VAR TESTE:inteiro
INICIO
TESTE 30;
MANIPULA_VARIAVEL(TESTE);
ESCREVA(TESTE);
FIM
Algoritmo MANIPULA_VARIAVEL(X:inteiro)
INICIO
Resumindo:
2. Estruturas de controle
ALGORITMO NUMEROS_IGUAIS;
1.VAR A, B: INTEIRO;
2.INICIO
3.LER (A, B);
4.SE (A=B)
5.ENTÃO ESCREVER (“Os números são iguais!”);
6.FIM.
ALGORITMO NUMEROS_IGUAIS;
1.VAR A, B: INTEIRO;
2.INICIO
3.LER (A, B);
4.SE (A=B)
5.ENTÃO ESCREVER (“Os números são iguais!”);
6.FIM.
ALGORITMO MAIOR_NUMERO;
1.VAR A, B: INTEIRO;
2.INICIO
3.LER (A, B);
4.SE (A>B)
5.ENTÃO ESCREVER (A);
6.SENAO ESCREVER (B);
7.FIM.
Acho que você já está entrando no ritmo!
ALGORITMO ACHA_MAIOR_NUMERO;
1.VAR A, B, C: INTEIRO;
2.INICIO
3.LER (A, B, C);
4.SE (A>B) E (A>C)
5.ENTÃO ESCREVER (A)
6.SENÃO SE (B>A) E (B>C)
7.ENTÃO ESCREVER (B)
8.SENÃO ESCREVER (C)
9.FIM.
ALGORITMO_NUMEROLOGIA
FIM
J X
J X
1 2
J X
1 2
3 3
5 4
J X
1 2
3 3
5 4
Nesse momento, verifica-se que J (11) não é menor que 10. Aqui sim, o
laço termina, e pula-se, então, para a linha imediatamente após o laço.
Exemplo:
ALGORITMO EXIBE_NUMEROS;
Var N: inteiro;
Inicio
Leia(N);
Prof. Victor Dalton
www.estrategiaconcursos.com.br 24 de 85
Tecnologia da Informação para ICMS/SP 2015 Pré Edital
Agente Fiscal de Rendas Especialidade Gestão Tributária
Prof Victor Dalton Aula 06
REPITA
Escreva(N);
N:= N + 1
ATÉ N>10;
Fim
Bem, acho que você já percebeu que esse algoritmo vai escrever, na tela
do computador, números de N (que será a entrada do usuário) até 10, não é
verdade?
ALGORITMO EXIBE_NUMEROS_COM_FOR;
Var N: inteiro;
Inicio
Leia(N);
PARA cont 1 até N passo 1 FAÇA
Escreva(cont);
FIM-PARA
Fim
A essa altura, creio que você já esteja entendendo bem. A estrutura PARA
criou uma variável, chamada cont, que inicia com o valor 1. Esse laço deverá se
repetir até que cont assuma o valor N, que, neste código, é uma entrada do
usuário.
Naturalmente, cont precisa sofrer alguma forma de modificação a cada
passagem pelo laço. Caso isso não ocorresse, ficaríamos em loop infinito, presos
no laço. Para o código acima, o passo 1 indica que, a cada volta no laço, cont
deverá ser incrementado em um inteiro.
Não existe uma convenção muito “amarrada” em pseudocódigo para esse
incremento. Esse laço também poderia estar escrito assim:
ALGORITMO EXIBE_NUMEROS_COM_BREAK;
Var N: inteiro;
Inicio
Leia(N);
FOR cont 1 até N passo 1
Escreva(cont);
if (cont >=25) break;
END-FOR
Imprima (“O programa chegou ao seu final”);
Fim
Neste caso, perceba que o break, nesse código, funciona como uma
proteção. Caso o usuário atribua um valor acima de 25 a N, quando aquele if se
tornar verdadeiro, o laço será interrompido “à força”, e o programa continua
normalmente, fora do laço. No exemplo acima, após imprimir 25 na tela do
computador, o algoritmo imprime O programa chegou ao seu final. Tudo
bem?
O comando break pode ser utilizado com for, while e repeat until, sem
problemas.
public Pessoa(){
nome = “Nome Genérico”
}
}
// fim da declaração da classe Departamento
Vejam que neste pedaço de código estamos falando da classe Pessoa, que
contém atributos, como nome, cpf e idade, e também contém métodos, como o
setNome e getNome. Além disso, ele possui dois construtores, um Pessoa() e
Pessoa(String novo_nome, String numerocpf, int idadeatual).
A classe Funcionario, por sua vez, também tem seu atributo departamento,
e seus métodos setDepartamento e getDepartamento.
Algoritm o Cálcu lo
var n, r, cont: inteiro
início
r f- 1
cont f- 1
enquanto (cont<=S) faça
leia(n)
r f- r * n
cont f- cont + 1
fi m_enquanto
imprima (r)
fim
n r cont
1 1
n r cont
2 1 1
2
n r cont
2 1 1
7 2 2
14
n r cont
2 1 1
7 2 2
5 14 3
3 70 4
4 210 5
840 6
Concorda com igo? Faça com ca lma, à mão. Perceba que cont a lca nça o
va lor 6 , para então interromper o laço.
atribuir 50 a I
atribuir O a TOTAL
atribuir O a K
imcio
somar 10 a K;
atribuir TOT AL+K a TOTAL
imprimir(K);
fim;
fim-enquanto;
imprimir(TOTAL) ;
a) 100 e 4
b) 150 e 5
c) 150 e 8
d) 150 e 9
e) 210 e 6
inıcio
somar 10 a K;
atribuir TOTAL+K a TOTAL
imprimir(K);
fim;
fim-enquanto;
inıcio
somar 10 a K;
atribuir TOTAL+K a TOTAL
imprimir(K);
fim;
fim-enquanto;
se (C ou (X – Y > 0))
se (verdadeiro e falso)
a) 6.
b) 22.
c) 86.
d) 0.
e) 342.
Quando nos deparamos com esse tipo de exercício, a melhor coisa que se
pode fazer, para não se perder durante a “debugação”, é fazer uma tabela com
N 4
X 2
CONTA
CONTB
EXP
RESP 2
Agora, toda vez que alguma variável sofrer uma modificação, basta
escrevê-la na tabela, para não se perder. Sem mais rodeios, vamos encarar o
algoritmo:
Com N,X e RESP recebendo seus valores iniciais, temos a primeira
estrutura para. Nela, CONTA recebe o valor 2 e tal estrutura deverá ser repetida
até que CONTA alcance o valor de N (ou seja, quando o valor de CONTA for
maior ao valor de N a estrutura deverá ser pulada). Detalhe: a estrutura tem
passo 2, ou seja, o contador incrementa de 2 em 2 inteiros. Como 2 é menor do
que 4, entra-se.
Ao entrar no primeiro para, EXP recebe o valor de X, 2, CONTB recebe o
valor de 1, e precisamos entrar na segunda estrutura para. Mantenhamos o
controle do valor das variáveis!
N 4
X 2
CONTA 2
CONTB 1
EXP 2
RESP 2
No segundo para, a estrutura deverá ser executada até que CONTB atinja
o VALOR de CONTA-1, com passo 1. Como 1 é igual a 1, entra-se.
Dentro do segundo para, EXP recebe o próprio valor multiplicado por X, ou
seja, 2*2, que é igual a 4. EXP passa a valer 4.
No fim_para, volta-se ao seu início, incrementa-se o contador e verifica-se
a condição novamente. CONTB agora vale 2, CONTA -1 continua sendo 1. Logo,
o segundo para deve ser pulado.
Ainda estamos dentro do primeiro para! Chegamos á linha remanescente,
na qual RESP deverá receber seu próprio valor acrescido de EXP. 2 + 4, 6. Você
continua controlando as variáveis?
N 4
X 2
CONTA 2
N 4
X 2
CONTA 2 4
CONTB 1 2 1
EXP 2 4 2
RESP 2 6
Acompanhou?
N 4
X 2
CONTA 2 4
CONTB 1 2 1 1 2 3 4
EXP 2 4 2 4 8 16 16
RESP 2 6
RESP foi impresso, com o valor 22, e você já sabe os valores finais de
todas as variáveis do código. É importante manter esse controle, para que você
não se perca.
a) resp = 0 + 1 – 2 + 3 – 4 + 5 – ... (+ ou –) n
b) resp = 0 + 1 – 22 + 34 – 46 + 5n
c) resp = 0 – 1 – 2 – 3 – 4 – 5 – ... – n
d) resp = 0 + 1! – 2! + 3! – 4! + 5! – n!
e) resp = 0 – 1 + 2 – 3 + 4 – 5 + ... – n
Esse código já está com cara de que vai dar trabalho! Então, logo pra início
de conversa, vamos fazer a nossa tabelinha com as variáveis do código:
N ?
CONT 1
RESP 0
S -1
N, pelo visto, será o parâmetro inserido pelo usuário. A função leia(n) nos
mostra isso. Logo, toda vez que esse programa for executado, leia(n) trará o
valor de N para o programa e continuará a sua execução.
N ? ? ? ?
CONT 1 1 2 3
RESP 0 1 (0+1) -1(0+1-2) 2(0+1-2+3)
S -1 -1 -1 -1
Alternativa a).
a) 0
b) 1
c) 3
d) 5
e) 6
Pessoal, esta aqui é a nossa questão desafio. Se você entender este código,
não existe algortimo que você não consiga decifrar na prova. Além dos conceitos
que vimos até agora, este código também trabalha com vetores, que nada mais
são do que um conjunto de variáveis organizadas unidimensionalmente.
ordena (int vet[], int n) é uma função que recebe como parâmetros um
vetor de inteiros e um inteiro. Lembro que o que caracteriza um vetor (array)
são os colchetes ([]), e não o nome “vet”. O nome da variável é apenas o nome
dela. O vetor que a questão está passando é {6,5,4,3,2,1} e o inteiro é 6,
conforme enunciado.
VET[] {6,5,4,3,2,1}
N 6
I
J
POS
AUX
VET[] {6,5,4,3,2,1}
N 6
I 1
J 2
POS 1
AUX
VET[] {6,5,4,3,2,1}
N 6
I 1
J 7
POS 6
AUX
Tudo bem ter achado esse exercício difícil, e ele realmente o é. Se você
tiver, ao menos, acompanhado esse raciocínio, está de ótimo tamanho.
início
CONTADOR : numérico
VET2[CONTADOR] (VET1[CONTADOR] * 3)
fim-para
fim
Algoritmo REFERENCIA
VAR TESTE:inteiro
INICIO
TESTE 30;
MANIPULA_VARIAVEL(TESTE);
ESCREVA(TESTE);
FIM
Algoritmo MANIPULA_VARIAVEL(X:inteiro)
INICIO
X X + 10;
ESCREVA(X);
FIM
Correta. Se um comando while verificar uma condição que seja falsa logo
na primeira verificação, a estrutura de repetição é pulada sem nenhuma
execução.
Correta.
Vamos treinar!
a) A visibilidade a ser atribuída é a privada. Errada;
b) C++ permite herança múltipla, Java não. Herança múltipla seria
algo como, por exemplo, criar uma subclasse SofaCama, que
herdasse, ao mesmo tempo, as superclasses Sofa e Cama. Isso é
herança múltipla. Entretanto, se a classe Funcionario herda Pessoa
e Pessoa herda Mamifero que herda SerVivo, todos ao mesmo
tempo, isso não é Herança Múltipla. Errada;
c) Java procura contornar o problema de herança múltipla permitindo a
implementação de múltiplas interfaces. Errada;
Eu já disse antes e digo novamente: não estamos aqui para nos formarmos
experts em programação, estamos aqui para dizermos para a banca o que ela
quer ouvir. A FCC parece abraçar esse conceito, mas eu não me surpreenderia
se uma outra questão da mesma banca se opusesse à mesma ideia. O mais
importante é você saber que a dobradinha polimorfismo/sobrecarga de métodos
pode querer atrapalhar a sua vida em provas.
class c{
void m(int i);
void m(float i);
void m(double i);
}
a) polimorfismo
b)herança múltipla
c)métodos virtuais
d)métodos privados
e)sobrecarga de métodos
Uma questão que cobra de você uma visualização na prática dos conceitos
POO, diferenciando o polimorfismo da sobrecarga de métodos.
a) da extensão do procedimento.
b) do quanto uma classe depende ou está relacionada à outra.
c) da intensidade das ligações entre procedimentos.
d) das relações entre atributos.
e) das ligações redundantes entre formas de processamento.
III. Na agregação, quando uma instância for removida, suas partes não
necessariamente deverão ser removidas.
(D) I, II e III.
Analisando as assertivas:
III. Na agregação, quando uma instância for removida, suas partes não
necessariamente deverão ser removidas. – correto. Na agregação, as partes
podem existir sem o todo.
A questão pode até assustar, no começo, mas é simples. Basta entender o que
se pede.
44 23 31 51 92 77 45 37 61 17 83 0
a)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > c entao
c <- a
senao
se a < b
b <- a
fim
fim
leia(a)
fim
imprima(c,b)
b)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > c entao
c <- a
senao
se a < b
b <- a
fim
fim 21600511287
leia(a)
fim
imprima(b,c)
fim
c)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > b entao
b <- a
senao
se a < c
c <- a
fim
d)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > b entao
b <- a
senao
c <- a
fim
leia(a)
fim
imprima(b,c)
fim
e)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > b entao
c <- a
fim
se a < c
b <- a
fim
leia(a)
fim
imprima(b,c)
fim
Outra questão que vem para testar seu raciocínio lógico, mais do que qualquer
outra coisa.
Neste caso, não resta outra opção a não ser inserir este array em todas as
21600511287
d) Uma classe abstrata não pode ser usada como base para outras classes.
CONSIDERAÇÕES FINAIS
Companheiros e companheiras,
Espero que esta apostila tenha sido de valia para vocês, em especial se
você nunca viu programação na vida. Chega de ter medo de código!
Victor Dalton
Algoritmo Cálculo
var n, r, cont: inteiro
início
r f- 1
cont f- 1
enquanto (cont<=S) faça
leia(n)
r f- r * n
cont f- cont + 1
fim_enquanto
imprima (r)
fim
atribuir 50 a I
atribuir 0 a TOTAL
atribuir 0 a K
inıcio
somar 10 a K;
atribuir TOTAL+K a TOTAL
imprimir(K);
fim;
fim-enquanto;
imprimir(TOTAL);
a) 100 e 4
b) 150 e 5
c) 150 e 8
d) 150 e 9
e) 210 e 6
a) 6.
b) 22.
c) 86.
d) 0.
e) 342.
a) resp = 0 + 1 – 2 + 3 – 4 + 5 – ... (+ ou –) n
b) resp = 0 + 1 – 22 + 34 – 46 + 5n
c) resp = 0 – 1 – 2 – 3 – 4 – 5 – ... – n
d) resp = 0 + 1! – 2! + 3! – 4! + 5! – n!
e) resp = 0 – 1 + 2 – 3 + 4 – 5 + ... – n
a) 0
b) 1
c) 3
d) 5
e) 6
início
CONTADOR : numérico
fim-para
fim
Algoritmo REFERENCIA
VAR TESTE:inteiro
INICIO
TESTE 30;
MANIPULA_VARIAVEL(TESTE);
ESCREVA(TESTE);
FIM
Algoritmo MANIPULA_VARIAVEL(X:inteiro)
INICIO
X X + 10;
ESCREVA(X);
FIM
class c{
void m(int i);
void m(float i);
void m(double i);
}
a) polimorfismo
b)herança múltipla
c)métodos virtuais
d)métodos privados
e)sobrecarga de métodos
a) da extensão do procedimento.
b) do quanto uma classe depende ou está relacionada à outra.
c) da intensidade das ligações entre procedimentos.
d) das relações entre atributos.
e) das ligações redundantes entre formas de processamento.
III. Na agregação, quando uma instância for removida, suas partes não
necessariamente deverão ser removidas.
(D) I, II e III.
44 23 31 51 92 77 45 37 61 17 83 0
a)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > c entao
c <- a
senao
se a < b
b <- a
fim
fim
leia(a)
fim
imprima(c,b)
b)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > c entao 21600511287
c <- a
senao
se a < b
b <- a
fim
fim
leia(a)
fim
imprima(b,c)
fim
c)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
d)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > b entao
b <- a
senao
c <- a
fim
leia(a)
fim
imprima(b,c)
fim
e)
inicio
leia(a)
b <- a
c <- a
enquanto a 6 0 faca
se a > b entao
c <- a
fim
se a < c
b <- a
fim
leia(a)
fim
imprima(b,c)
fim
21600511287
d) Uma classe abstrata não pode ser usada como base para outras classes.
GABARITO
1.a 2.b 3.c 4.b 5.a 6.c 7.c 8.e 9.c 10.e
11.c 12.c 13.e 14.c 15.e 16.c 17.c 18.e 19.e 20.c
21.c 22.c 23.c 24.c 25.e 26.b 27.c 28.d 29.d 30.e
31.b 32.b 33.c 34.d 35.a 36.a 37.c