Baixe o app para aproveitar ainda mais
Prévia do material em texto
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) definidoem 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.
Compartilhar