Buscar

Lógica de programação algoritmica - Leopoldo França - 3 e 4 webconferência - Mód B Unidig

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Lógica de Programação 
Algorítmica 
Leopoldo França 
WEBCONFERÊNCIA III e IV 
Estruturas Compostas Homogêneas 
(Vetores) 
Até agora sempre utilizamos variáveis definidas a partir de tipos básicos de 
dados. 
•Cada variável só é capaz de armazenar um dado por vez. 
 
Existem situações em que é necessário armazenar uma grande quantidade 
de dados na memória ao mesmo tempo. 
•Esta quantidade torna inviável a criação de variáveis para cada um dos dados a 
ser armazenado. 
 
Para estes casos, poderemos criar variáveis a partir de tipos de dados 
estruturados. 
•Um tipo de dado estruturado é aquele formado pela junção ou combinação de 
tipos básicos, definindo apenas uma variável que o represente. 
Vetores 
Vetor (ou array) é uma estrutura de dados composta por 
uma quantidade determinada de elementos de um mesmo 
tipo primitivo. 
 
Como armazena sempre dados do mesmo tipo primitivo, 
diz-se que vetores são estruturas de dados homogêneas. 
Vetores 
Ao apresentar o conceito de variável, dissemos que ela 
funciona como uma caixa na memória do computador, 
capaz de armazenar um único dado de um determinado 
tipo. 
 
Por analogia, podemos imaginar um vetor como um 
conjunto de variáveis agrupadas sob um mesmo nome, 
todas de um mesmo tipo. 
 
• O vetor passa a ser um conjunto de caixinhas, contendo dados de 
mesma natureza e que estejam agrupados. 
Vetores 
Armazenamento em memória 
15 A 
-7 
15 
23 
A 
Variável simples Vetor 
Vetores 
Para referenciar o conteúdo de uma variável simples, basta 
indicar o nome que foi definido. 
 
Para vetores, somente o nome não é suficiente. Além do 
nome, preciso indicar a posição no vetor onde está o dado 
que queremos acessar/utilizar. 
• Esta posição é denominada índice. 
• Os vetores são também chamados de variáveis 
indexadas unidimensionais. 
Vetores 
Sintaxe para declaração de um vetor: 
 
 
 
Sintaxe para referenciação de uma posição: 
 
 
Suponha que é necessário armazenar 100 preços 
de produtos de uma loja. 
• Declaração: 
 
• Referenciação: 
<var> : vetor[<inicio>..<fim>] de <tipo>; 
preco : vetor[1..100] de real; 
preco[1] = 32.50; 
<nome_vetor>[<posicao>]; 
preco[102] = 43.80; 
Vetores 
Sintaxe para declaração de um vetor: 
 
 
 
Sintaxe para referenciação de uma posição: 
 
 
Suponha que é necessário armazenar 100 preços 
de produtos de uma loja. 
• Declaração: 
 
• Referenciação: 
<var> : vetor[<inicio>..<fim>] de <tipo>; 
preco : vetor[1..100] de real; 
preco[1] = 32.50; 
<nome_vetor>[<posicao>]; 
preco[102] = 43.80; 
Não é possível 
acessar posições 
fora do intervalo 
definido 
Vetores 
Observações 
 É necessário validar acessos a índices inexistentes, evitando 
erros no sistema; 
 Apenas variáveis inteiras podem ser utilizadas como índices 
de um vetor. 
 Cada elemento do vetor deve ser tratado como uma variável 
independente 
 Todas as operações que podem ser realizadas sobre 
variáveis de tipos básicos, podem ser aplicadas a posições 
de um vetor. 
• Ex.: ler preco[10]; escrever preco[12]; 
Vetores 
• Exemplo: 
• Uma prova de química foi feita por um grupo de 20 alunos. Faça 
um algoritmo para ler as notas obtidas pelos alunos, e depois 
exibir um relatório de notas iguais ou superiores a 7,5 no seguinte 
formato: 
Notas iguais ou superiores a 7,5: 
7.8 
9.4 
10.0 
7.7 
8.5 
7.5 
Vetores 
Solução: 
• Este exemplo é uma aplicação simples de vetores. 
• Existe uma repetição embutida, pois é necessário ler as 20 
notas. 
• Não poderíamos solucionar este problema sem a utilização 
de vetores, pois perderíamos as notas dos alunos, o que é 
uma má ideia. 
• Temos então quer ler todas as notas, e em seguida varrer 
todo o vetor, decidindo quais devem ser impressas. 
• Como a quantidade de leituras é fixa, podemos utilizar o 
comando PARA nas repetições. 
Vetores 
• Como fica o algoritmo: 
Variáveis 
 cont : inteiro; 
 nota : vetor[1..20] de real; 
Início 
 // Lê as notas e armazena no vetor 
 para cont de 1 até 20 faça 
 [[ 
 escrever “Digite a ”, cont, “ª nota: “; 
 ler nota[cont]; 
 ]]; 
 // imprime as notas acima de 7.5 
 escrever “Notas iguais ou superiores a 7,5: ”; 
 para cont de 1 até 20 faça 
 se nota[cont] >= 7.5 então 
 escrever nota[cont]; 
Fim. 
Vetores em VisuAlg 
• Exemplo: 
var 
 vet: vetor [1..10] de real 
inicio 
 vet[1] <- 12 
 escrevaL( vet[1] ) 
 escreva("Digite um valor: ") 
 leia(vet[2]) 
 escrevaL( vet[2] ) 
fimalgoritmo 
Vetores em VisuAlg 
•Como ficaria o exemplo anterior 
escrito em VisuAlg? 
 
 
Exercícios: 
1) Faça um programa que leia, via teclado, 200 valores do tipo inteiro e os guarde 
na memória. 
2) Amplie o exercício anterior emitindo um relatório com todos os números pares 
que você leu. 
3) Faça um programa que determine qual o menor valor existente no vetor do 
exercício número 1. 
4) Faça um programa que imprima quantos dos valores do exercício número 1 são 
maiores que a média desses valores. 
Matrizes 
 Vimos que vetores são utilizados para armazenar dados de uma única “fileira”. 
 Porém, existem situações em que a natureza dos dados exige uma forma de 
armazenamento em mais de uma dimensão. 
 Para estas situações, existem as matrizes, que podem ser vistas como vetores que 
possuem mais de uma dimensão (nesse caso, duas). 
 Por ser bidimensional, uma matriz representa uma tabela de valores colocados 
em linhas e colunas. 
• Para identificar um valor é necessário informar a linha e a coluna 
• Conhecidas como tabelas, ou variáveis indexadas bidimensionais 
• Um vetor pode ser visto como uma matriz com uma única linha. 
Matrizes 
Sintaxe para declaração de uma matriz: 
 
 
Sintaxe para referenciar uma posição: 
 
 
Exemplos: 
• Declaração: 
 
• Referenciação: 
<var> : vetor[<inicio1>..<fim1>,<inicio2>..<fim2>,...] de <tipo>; 
valor : vetor[1..3,1..4] de real; 
valor[1,1] <- 8.50; 
<nome_vetor>[<posicao1>,<posicao2>,...]; 
valor[2,3] <- 7.3; 
Matrizes 
 Exemplo 
• Um distribuidor de refrigerantes vende seu produto em todo o país. 
Em cada trimestre do ano passado ele vendeu uma certa quantidade 
de garrafas em cada região do Brasil. Faça um algoritmo para ler as 
quantidades vendidas e escrever a quantidade total vendida em todo 
o país. 
 
 Solução 
• Pelo enunciado do problema, vimos que existem 20 dados de 
entrada, pois temos 4 trimestres no ano e cada trimestre teve uma 
venda para cada uma das cinco regiões do Brasil. 
• O enunciado do problema também nos leva a concluir que devemos 
utilizar uma estrutura matricial ao invés de vetorial. 
• Temos vendas para regiões por trimestre. 
Matrizes 
Solução (cont.) 
 
• A tabela abaixo mostra uma representação possível para os dados 
do problema: 
150 1150 900 1500 400 
180 980 1100 2300 650 
140 1000 950 2100 500 
210 1600 1400 2600 840 
1 - Norte 2 - Nordeste 3 - Sul 4 - Sudeste 5 – Centro- 
Oeste 
1º Trimestre 
2º Trimestre 
3º Trimestre 
4º Trimestre 
Matrizes 
• Solução (cont.): 
Variáveis 
 quant : vetor[1..4,1..5] de inteiro; 
 i, j, soma : inteiro; 
Início 
 para i de 1 até 4 faça 
 para j de 1 até 5 faça [[ 
 escrever “Informe a quantidade do “, i, “º trimestre e “, j, “ª região: “; 
 ler quant[i,j]; 
 ]]; 
 soma = 0; 
 para i de 1 até 4 faça 
 para j de 1 até 5 faça 
 soma = soma + quant[i,j]; 
 escrever “O total das quantidades vendidas é ”, soma; 
Fim. 
Matrizes em VisuAlg 
• Acessando os elementos de um array multidimensional: 
 
var 
i , j : inteiro 
a : vetor [1..3, 1..2] de inteiro 
inicio 
para i de 1 ate 3 faca 
 para j de 1 ate 2 faca 
 escrevaL(a[ i , j ] ) 
 fimpara 
fimpara 
fimalgoritmo 
 
Solução Exemplo em VisuAlg 
algoritmo "matriz_vendas" 
 
var 
 quant : vetor [1..4, 1..5] de inteiro 
 i , j , soma : inteiro 
inicio 
 para i de 1 ate 4 faca 
 para j de 1 ate 5 faca
escreva("Informe a quantidade do ", i,"º trimestre e ", j, "ª região: ") 
 leia(quant[ i , j ]) 
 fimpara 
 fimpara 
 soma <- 0 
 para i de 1 ate 4 faca 
 para j de 1 ate 5 faca 
 soma <- soma + quant[ i , j ] 
 fimpara 
 fimpara 
 escrevaL("O total das quantidades vendidas é ", soma) 
fimalgoritmo 
Matrizes 
•Exercício: 
 
• Faça um programa que solicite ao usuário os dados de uma 
matriz com 3 linhas e 4 colunas de números inteiros. Em 
seguida, exiba a matriz digitada pelo usuário, colocando 
todos os elementos de cada linha em uma mesma linha da 
tela. 
Solução (VisuAlg) 
algoritmo "matriz" 
var 
i , j : inteiro 
a : vetor [1..3, 1..4] de inteiro 
inicio 
para i de 1 ate 3 faca 
 para j de 1 ate 4 faca 
 escreva("digite o valor do elemento da ",i,"º linha e ",j,"º coluna: ") 
 leia(a[ i , j ]) 
 fimpara 
fimpara 
escrevaL("A matriz digitada foi:") 
para i de 1 ate 3 faca 
 para j de 1 ate 4 faca 
 escreva(a[ i , j ] ) 
 fimpara 
 escrevaL() 
fimpara 
fimalgoritmo 
Matrizes 
•Exercícios (1 e 2) 
 
•Faça um programa que leia uma matriz 5x3 e 
exiba o menor valor, o maior valor e a média dos 
elementos presentes nesta matriz. 
 
•Crie uma matriz 7x8 onde cada elemento é a 
soma dos índices de sua posição dentro da 
matriz. 
Modularização de algoritmos 
• Consiste em dividir um algoritmo em etapas, fazendo com que cada 
etapa seja parte da solução de um problema maior. 
 
• Se um subproblema ainda parecer muito complexo, podemos tentar dividi-
lo em partes menores, para facilitar sua solução, e assim sucessivamente. 
• “Dividir para conquistar” 
 
• Nós temos dificuldade de resolver problemas quando os mesmos 
possuem uma grande quantidade de elementos inseridos. 
 
• A modularização é a forma humilde de reconhecermos esta dificuldade, 
mas ainda assim resolvermos o problema. 
Modularização: funções e procedimentos 
• Realizada através de sub-algoritmos, também chamados de funções 
e procedimentos. 
• Todas as funções precisam ser chamadas para ser executadas. 
• Ao encontrar uma chamada para uma função ou procedimento, o 
fluxo de execução do programa desvia para o local onde a função 
existe, e executa a mesma. Ao terminar a execução da função, o 
fluxo de execução retorna para o local onde a função foi chamada. 
• A execução do programa é reiniciada na linha seguinte à linha onde 
a função foi acionada. 
 
Modularização 
Modularização em VisuAlg 
• Todas as funções devem indicar um valor para quem chamou a 
função. Caso não seja necessário retornar um valor, deve-se 
usar um procedimento. Como a função retorna um valor, 
devemos usar o comando retorne seguido de uma variável ou 
constante para retornar esse valor para quem chamou a função. 
 
• VisuAlg possui uma grande quantidade de funções disponíveis 
para uso imediato pelo programador. 
Criando Funções 
 
 A criação de uma Função deve ser declarada no início do programa. Este 
tipo de sub-algoritmo sempre retornam um e apenas um valor ao 
algoritmo que lhe chamou. Cada função tem associada ao seu valor de 
retorno um tipo explícito. Da mesma maneira com que os parâmetros 
são fixos para todas as chamada o retorno também é fixo. 
Algoritmo "<nome do algoritmo>" 
var 
 <declaração de variáveis globais> 
 <definição da função> 
inicio 
 < lista de comandos> 
fimalgoritmo 
Criando Funções 
 
• Identificador: Nome da função. 
• Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos identificadores para 
indicar a passagem por referência. Os identificadores são separados por vírgula. 
• Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de dados a 
separação é feita com ponto-e-vírgulas ';'. 
• Tipo de retorno da função: Real, Inteiro, Lógico ou Caractere. 
• Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis declaradas 
localmente tem validade dentro do escopo da função. 
• Retorne: local onde é colocado a variável de retorno. 
funcao <identificador> ([var]<parâmetros>) <tipo de retorno> 
var 
<declaração de variáveis locais> 
inicio 
<lista de comandos> 
retorne <variável de retorno> 
fimfuncao 
Exemplo 
algoritmo "funcao" 
var 
a , b , s : inteiro 
 
funcao soma (x,y: inteiro): inteiro 
inicio 
 retorne x + y 
fimfuncao 
 
inicio 
 escreva("Dig. o 1º número: ") 
 leia(a) 
 escreva("Dig. o 2º número: ") 
 leia(b) 
 s <- soma(a,b) 
 escrevaL("A soma é ", s) 
fimalgoritmo 
Criando Procedimentos 
 
• Identificador: Nome do procedimento. 
• Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos 
identificadores para indicar a passagem por referência. Os identificadores são 
separados por vírgula. 
• Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos 
de dados a separação é feita com ponto-e-vírgulas ';'. 
procedimento <identificador> ([var]<parâmetros>) 
 
var 
 
<declaração de variáveis locais> 
inicio 
 
<lista de comandos> 
 
fimprocedimento 
Exemplo 
algoritmo "procedimento" 
var 
a , b : inteiro 
 
procedimento escreve_soma (x,y: inteiro) 
inicio 
 escrevaL(x + y) 
fimprocedimento 
 
inicio 
 escreva("Dig. o 1º número: ") 
 leia(a) 
 escreva("Dig. o 2º número: ") 
 leia(b) 
 escreva("A soma é ") 
 escreve_soma(a,b) 
fimalgoritmo 
Compartilhando variáveis entre funções 
• Caso seja necessário acessar ou alterar o valor de uma variável 
dentro de mais de uma função, devemos declarar a variável dentro 
do algoritmo, mas fora de qualquer função. 
 
• As variáveis criadas dentro de funções recebem o nome de variáveis 
locais, e só existem dentro das funções onde foram criadas. 
 
• As variáveis criadas dentro de um algoritmo podem ser utilizadas em 
qualquer lugar. São chamadas de variáveis globais. 
Exemplo 
 algoritmo "escopo" 
 
var 
a , b , s : inteiro 
 
procedimento altera_s (x,y: inteiro) 
inicio 
 s <- x + y 
fimprocedimento 
 
inicio 
 escreva("Dig. o 1º número: ") 
 leia(a) 
 escreva("Dig. o 2º número: ") 
 leia(b) 
 altera_s( a , b ) 
 escreva("A soma é ", s) 
fimalgoritmo 
Vantagens do uso de funções 
• Facilita a resolução de problemas complexos; 
 
• Viabiliza a divisão do trabalho entre a equipe de 
desenvolvimento (cada programador ou grupo de 
programadores pega um pedaço do problema para 
resolver e trabalha de forma independente); 
 
• Desenvolvimento mais rápido de programas (várias 
funções podem ser escritas em paralelo pelos membros da 
equipe). 
Vantagens do uso de funções 
• Incentiva a divisão de responsabilidades; 
 
• Reuso de funções desenvolvidas em projetos anteriores ou 
obtidas externamente diminui o tempo de 
desenvolvimento de novos programas; 
 
• Aumento de qualidade pelo uso de funções cujo 
funcionamento foi validado em projetos anteriores. 
Exercícios 
• Escreva uma função que receba um número inteiro positivo e 
retorne o fatorial desse número. 
 
• A fábrica de refrigerantes Meia-Cola vende seu produto em três 
formatos: lata de 350ml, garrafa de 600ml e garrafa de 2 litros. 
Se um comerciante compra uma determinada quantidade de 
cada formato, faça um programa para calcular quantos litros de 
refrigerante ele comprou. Resolva o problema utilizando 
funções. 
 
Ordenação e busca de dados 
Ordenação de dados 
 Vejamos o algoritmo abaixo : 
 
VAR 
I : inteiro 
nomes :vetor[1..4] de caractere 
Inicio 
Para i:=1 ate 4 faca 
 Escreval(“informe nome da posição ” , i) 
 leia(nomes[i]) 
Fimpara 
Ordenação de dados 
• Da forma em que está, os nomes são armazenados na ordem 
em que são inseridos 
 
• Seria interessante ordenar esses dados em ordem alfabética. 
 
• Se inseríssemos os nomes assim : 
• Maria, João, Ana, Bruno 
 
• Após ordenamento ficariam assim : 
• Ana, Bruno, Maria, João 
Ordenação de dados 
• Para isso, um algoritmo apropriado seria bastante útil.
• Bastaria fazer a leitura normal e depois ordenar. 
• Vejamos abaixo como seria a leitura : 
 
var 
I : inteiro 
nomes :vetor[1..4] de caractere 
trocou, aux : caractere 
 
Inicio 
Para i:=1 ate 4 faca 
 Escreval("informe nome da posição " , i) 
 leia(nomes[i]) 
Fimpara 
Ordenação de dados 
• Para ordenar, usaríamos o código abaixo, por exemplo : 
 
trocou <- "v" 
enquanto trocou = "v" faca 
 trocou <- "f" 
 para i <- 1 ate 3 faca 
 se nomes[i] > nomes[i +1] entao 
 aux <- nomes[i] 
 nomes[i] <- nomes[i+1] 
 nomes[i+1] <- aux 
 trocou <- "v" 
 fimse 
fimpara 
fimenquanto 
fimalgoritmo 
Ordenação de dados 
Vetor antes da ordenação 
Vetor depois da ordenação 
Vetor intermediário 
maria joão ana bruno 
joão ana bruno maria 
ana bruno joão maria 
Ordenação de dados 
• Existem diversos tipos de ordenação 
• Todas têm a mesma função 
• São usadas em diversas aplicações 
• Bubble Sort, Quick Sort, Heap Sort 
• As ordenações são uteis para preparar vetores 
para buscas. 
LINGUAGENS DE PROGRAMAÇÃO 
Tipos de linguagem de programação 
• 3 Tipos de programação (existem outros mas só 
abordaremos estes) 
 
• Sequencial 
• Estruturada 
• Orientada a objetos 
 Programação sequencial 
• Usada nos primórdios da informática 
• Muito ligada à máquina (hardware) 
• Exemplo : 
 sub esp, 2D0h 
 mov dword ptr [ebp+FFFFFDDCh], eax 
 mov dword ptr [ebp+FFFFFDD8h], ecx 
 mov eax, dword ptr [ebp+8] 
 mov ecx, dword ptr [ebp+4] 
 mov dword ptr [eax+0Ch], ecx 
 Programação estruturada 
• Baseada na ideia de dividir um problema em partes 
para depois resolver as partes menores 
• Ao final, acabamos abordando o problema todo a 
partir do entendimento das partes. 
• Usa subprogramas, funções e tarefas subdivididas 
para resolver o problema 
• Cobol, C, Pascal, Fortran, e muitas outras linguagens 
 Programação Orientada a Objetos 
• Decorre da modelagem orientada a objetos 
• Consiste em analisar um cenário particular, verificar 
quais são os seus objetos, como interagem e como 
um programa de computador pode representar 
esses objetos e sua interação. 
• Os objetos são modelados partindo do pressuposto 
de que possuem atributos e comportamentos. 
 Programação Orientada a Objetos 
• Usada em sistemas modernos 
• Linguagens como Java, C#, C++ 
• É a metodologia mais utilizada atualmente. 
Referências Bibliográficas 
• ASCENCIO, A. F. G., CAMPOS, E. A. V. Fundamentos da Programação 
de Computadores. 2ª Edição. São Paulo: Prentice Hall, 2008. 448p. 
• FORBELLONE, A. V. Lógica de Programação – A construção de 
Algoritmos e Estruturas de Dados, Makron Books, 2005. 
• LOPES, A., GARCIA, G. Introdução à Programação: 500 Algoritmos 
Resolvidos Ed. Campus, 2002. 488p. 
• SEBESTA, R.W. Conceitos de linguagens de programação. 5 ed. Porto 
Alegre: Bookman, 2003. 
 
 
 
 
 
OBRIGADO 
LEOPOLDO FRANÇA Professor

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando