apresentação do powerpoint -...
TRANSCRIPT
1
Introdução
• Programa Computacional busca da necessidade de solução de um problema particular: – a geração automática de documentos, – o controle de um equipamento eletrodoméstico, – a transmissão de informações em longas distâncias, – a agilização de cálculos científicos, e outras motivações mais.
• A solução dos nossos problemas através de um sistema computacional só é obtida no momento em que é definido um conjunto coerente de instruções de um programa que permita estabelecer que ações deverão ser executadas e em que ordem.
Por que desenvolver ALGORITMO?
2
Definição de Algoritmo
“um procedimento consistindo de um conjunto finito de regras não ambíguas que especificam uma seqüência finita de
operações necessárias à solução de um problema ou para especificar uma classe de problemas”. (Kronsjö)
• Conceitos inter-relacionados: – Algoritmo:
• Abstrato e distinto de sua representação.
– Programa: • É uma das possíveis representações do algoritmo.
– Processo: • A atividade de executar um algoritmo.
3
Representação de Algoritmos
• Primitivas: – Conjunto bem definido de elementos funcionais básicos
com os quais podem ser construidas representações de algoritmos.
– Cada primitiva consiste de duas partes: • Sintaxe: representação simbólica da primitiva • Semântica: significado da primitiva
• Linguagem de Programação:
– Um conjunto de primitivas, juntamente com um de regras, estabelecendo de que maneira as primitivas podem ser combinadas
4
Delineamento de Algoritmos
• O desenvolvimento de um programa consiste de duas atividades – delinear o algoritmo subjacente, e representar o algoritmo na forma de um programa.
• Delinear um algoritmo é descobrir um método de solucionar um problema. Assim, entender como os algoritmos são delineados é entender o próprio processo de resolução de problemas.
5
Resolução de Problemas “Arte de Pensar” (1960)
• Modelo de G. Polya (matemático):
– Fase 1 – Entender o problema
– Fase 2 – Construir um plano para solucionar o problema
– Fase 3 – Executar o plano em funcionamento.
– Fase 4 – Avaliar a solução quanto à precisão e quanto ao seu potencial como ferramenta para solucionar outros problemas.
6
Desenvolvimento de Programas para Resolução de Problemas
• Traduzindo o modelo de Polya para o contexto do desenvolvimento de programas, estas fases se tornam:
– Fase 1 – Compreender o problema
– Fase 2 – Adquirir uma idéia da forma como um procedimento algorítmico poderia resolver o problema
– Fase 3 – Formular o algoritmo e representá-lo na forma de um programa.
– Fase 4 – Avaliar o programa quanto à precisão e quanto ao seu potencial como ferramenta para solucionar outros problemas. (ANÁLISE DE ALGORITMO)
7
Análise de Algoritmos
• DEFINIÇÃO: Determinar os recursos necessários para executar um dado algoritmo: tempo de execução e o espaço de armazenamento de dados. A maior parte dos algoritmos são pensados para trabalhar com entradas (inputs) de tamanho arbitrário.
• Em geral, a eficiência ou complexidade de um algoritmo é função: – do tamanho do problema, – do número de passos necessário (complexidade temporal) e – da complexidade espacial ou de memória do sistema usado para
executar o algoritmo.
O objetivo final não é apenas fazer códigos que funcionem,
mas que sejam também eficientes.
8
Por que estudar Estrutura de Dados?
• Porque os programas de computador são formados por:
Algoritmo + Dados
9
Estrutura de Dados
• Motivação: Conhecer técnicas de estruturar os dados para que possam ser manipulado pelos algoritmos dos programas!
• Objetivo: Estudo das principais técnicas de representação e manipulação de dados na memória
• Tipos de dados: – Básicos: inteiros, reais, caracteres, strings etc.
– Abstratos: valores + funções aplicadas aos valores
Vetores
• Uma matriz é uma coleção de variáveis de mesmo tipo, acessíveis com um único nome e armazenados contiguamente na memória.
• A individualização de cada variável de um vetor é feita através do uso de índices.
• Os Vetores são matrizes de 1 só dimensão.
• Matrizes Bidimensionais - São matrizes linha-coluna, onde o primeiro índice indica a linha e o segundo a coluna. Esse tipo de matriz é considerado o caso mais simples de matrizes multidimensionais.
• int[,] matriz = new int[2,2];
• int[] vetor = new int[10];
Funções e Procedimentos
• Diferenças – Procedimentos são estruturas que agrupam um conjunto de
comandos, que são executados quando o procedimento é chamado;
– Funções são procedimentos que retornam um valor ao seu término
• Vantagens – Evitam que os blocos do programa fiquem grandes demais e mais
difíceis de ler e entender;
– Ajudam a organizar o programa;
– Permitem reaproveitamento de códigos construídos anteriormente;
– Evitam repetição de trechos de códigos, minimizando erros e facilitando alterações.
Funções e Procedimentos
• Funções – Sintaxe de uma função:
static tipo_de_retorno nome_da_função (com ou sem parâmetros)
{
corpo_da_função
return (valor de retorno);
}
• Procedimentos – Sintaxe de um procedimento:
static void nome_da_função (com ou sem parâmetros)
{
código;
}
Funções e Procedimentos
•O tipo-de-retorno é o tipo de variável que a função vai retornar. •A declaração de parâmetros é uma lista com a seguinte forma geral: tipo var1, tipo var2, ... , tipo varN •O tipo deve ser especificado para cada uma das N variáveis de entrada. É na declaração de parâmetros que informamos ao compilador quais serão as entradas da função. •O corpo da função é onde as entradas são processadas, saídas são geradas, etc. •O comando return tem a seguinte forma geral: return valor_de_retorno; •Quando se chega a uma declaração return a função é encerrada imediatamente e, se o valor de retorno é informado, a função retorna este valor. É importante lembrar que o valor de retorno fornecido tem que ser compatível com o tipo de retorno declarado para a função. • static – Um método estático, indica que não precisa ser instaciado para ser utilizado (orientação a objetos).
Estrutura de Dados 14
Passagem de Parâmetros • Passagem por valor:
– Passagem do conteúdo da variável
– Parâmetro do mesmo tipo da variável
– Independência entre variáveis e parâmetros
– Valores das variáveis são copiados para os parâmetros
– Mudanças em parâmetros não afetam as variáveis
• Passagem por referência: – Passagem do endereço da variável
– Parâmetro do tipo apontador
– Dependência entre variáveis e parâmetros
– Parâmetros apontam para o conteúdo das variáveis
– Mudanças em parâmetros refletem nas variáveis
Estrutura de Dados 15
Tipos Abstratos de Dados (TDAs)
• Agrupa a estrutura de dados juntamente com as operações que podem ser feitas sobre esses dados;
• O TAD encapsula a estrutura de dados. Os usuários do TAD só tem acesso a algumas operações disponibilizadas sobre esses dados;
• Usuário do TAD x Programador do TAD
– Usuário só “enxerga” a interface, não a implementação
Estrutura de Dados 16
Tipos Abstratos de Dados (TDAs) na Programação
• Tipos Abstratos de Dados (TDAs) usados na programação:
– Estáticos:
• Vetores, matrizes e registros
– Dinâmicos:
• Tabelas e índices (aplicações de banco de dados)
• Listas, pilhas, filas, árvores e grafos
Estrutura de Dados 17
ED Estáticas: REGISTROS
• Combinação de diferentes “tipo base” para formar um tipo heterogêneo;
• Tamanho (estrutura) definido em tempo de programação
• Acesso aleatório a qualquer posição através do nome do campo dentro do registro.
• Váriáveis (campos ou membros) com nomes diferentes mas relacionadas e referenciada por um nome comum:
Nome (string) Estado (string) Idade (int) Sexo (char)
Pessoa
Registros em Java • Um registro é uma classe em Java e é composto de vários campos (chamados de
variáveis de instâncias). class AlunoUNIP{
String nome;
String curso;
int codcurso;
char sexo;
String codRA;
// construtor
AlunoUNIP (String nomealuno, String cursoaluno,
int codCurso,char sexoaluno,
String raaluno){
nome = nomealuno;
curso = cursooaluno;
codcurso = codCurso;
sexo = sexoaluno;
codRA = raaluno;
}
}
Construtor, que inicializa as variáveis de
instância
Variáveis de instância
Registros em Java
Com a definição de classe AlunoUNIP nós criamos um modelo para o registro aluno. Quando quisermos utilizar o registro AlunoUNIP, devemos utilizar a sentença abaixo: AlunoUNIP aluno = new AlunoUNIP (inicialização dos campos); A partir daí nós podemos acessar a variável aluno que neste ponto é uma instância da classe AlunoUNIP, nosso registro.
Registros em Java
• Para acessarmos o campo nome do registro AlunoUNIP, basta usarmos a expressão:
aluno.nome
• De forma semelhante, aluno.codcurso acessa o campo codcurso do registro AlunoUNIP.
• Para atribuirmos o valor “M” ao campo sexo, faremos: aluno.sexo = ‘M’; // atribui “M” ao campo sexo.
Registros em Java
public class AlunoUNIP{
String nome;
String curso;
int codcurso;
char sexo;
String codRA;
// construtor
public AlunoUNIP (String nomealuno, String cursoaluno, int codCurso, char sexoaluno, String
raaluno){
nome = nomealuno;
curso = cursoaluno;
codcurso = codCurso;
sexo = sexoaluno;
codRA = raaluno;
}
}
Registros em Java
import java.util.Scanner;
public class TestaAlunoUNIP {
public static void main (String args []) throws Exception {
AlunoUNIP aluno = new AlunoUNIP ("","",0,' ',"");//inicializando os campos do
construtor
Scanner ler = new Scanner(System.in);
System.out.printf("Digite o nome do aluno\n");
aluno.nome = ler.next();
System.out.printf("Digite o curso\n");
aluno.curso = ler.next();
System.out.printf("Digite o codigo do curso\n");
aluno.codcurso = ler.nextInt();
Registros em Java
System.out.printf("Digite o sexo do aluno ( M / F)\n");
//Lendo um caractere usando o método read() do pacote de classes System.in
aluno.sexo = (char)System.in.read();
System.out.printf("Digite o RA do aluno (alfanumerico\n");
aluno.codRA = ler.next();
System.out.printf("O nome do aluno eh: %s.\n",aluno.nome);
System.out.printf("O curso do aluno eh: %s.\n",aluno.curso);
System.out.printf("O codigo curso do aluno eh: %d.\n",aluno.codcurso);
System.out.printf("O sexo do aluno eh: %c.\n",aluno.sexo);
System.out.printf("O RA do aluno eh: %s.\n",aluno.codRA);
System.exit(0);
}
}
Registros em Java
• Exercício Lab • Criar um programa em Java que tenha os mesmos
campos apresentados no exemplo apresentado em aula, poré armazenando os dados de 10 alunos. Dica: Usaremos um vetor de registros.