370 likes | 655 Views
Professor Fernando Luís fernandomaia@hotmail.com.br. Algoritmos. Introdução e objetivos. Introdução geral sobre Algoritmos; Diferenças entre Algoritmos e Programas; Compiladores e Montadores; Formas populares de estruturação de Algoritmos; Notações. 1.1 Conceituação. Algoritmos
E N D
Professor Fernando Luís fernandomaia@hotmail.com.br Algoritmos
Introdução e objetivos • Introdução geral sobre Algoritmos; • Diferenças entre Algoritmos e Programas; • Compiladores e Montadores; • Formas populares de estruturação de Algoritmos; • Notações.
1.1 Conceituação • Algoritmos • É bastante associada à informática, porém não é restrito apenas a ela. • É usada também em outras áreas como administração e engenharias. • Vem do nome do matemático iraniano al-Khawarizmi.
1.1 Conceituação • Com isso definimos o termo como sendo: • Um procedimento passo a passo para a solução de um problema. • Uma sequência detalhada de ações a serem executadas para realizar uma tarefa.
1.2 Programas de computador • Processo necessário para criação de programas de computador.
1.2.1 O que é um programa? • Os computadores, independentemente de sua arquitetura, têm funcionamento similar. UCP – Unidade Central de Processamento Memória barramento Dispositivos Entrada/Saída
...continuando • A UCP (unidade central de processamento) contém um pequeno conjunto de instruções. • Estas instruções que o processador executa são buscadas na memória e podem ser: • Operações matemáticas; • Interações com dispositivos de entrada e saída.
... Concluindo! • Programas de computadores são conjuntos de instruções executadas pelos processadores em uma determinada seqüência. • Esse programa fará com que o computador execute uma tarefa!
Programas x Algoritmos • Fica claro que: • Um programa nada mais é que um tipo de algoritmo onde suas operações são específicas para o computador. • Atenção: é preciso ressaltar que tais operações são restritas ao conjunto de instruções (linguagem de máquina) que o processador pode executar!
Linguagens de programação • Existem atualmente centenas de linguagens. • Elas são classificadas de acordo com o “distanciamento” em relação à linguagem de máquina. Ou seja: • Quanto mais semelhante com a linguagem de máquina, mais baixo é o nível da linguagem.
Linguagens de baixo e alto nível • Baixo Nível: • São aquelas mais semelhantes à linguagem de máquina. • Alto Nível: • São aquelas mais distantes da linguagem de máquina. • Estão mais próximas à linguagem natural. • Guardam pouca similaridade à ling máquina.
1.2.2 Executando um programa • Compilador (compilação): • É aquele que faz a tradução do código de alto nível (código-fonte) para a linguagem de máquina (código-objeto). • Esse código-objeto fica armazenado em disco e só é carregado em memória durante a execução. Código-fonte (linguagem de alto nível) Código –objeto (linguagem de máquina) Compilador
1.2.2 Executando um programa • Interpretador (interpretação): • Faz o mesmo trabalho (final) que o compilador, entretanto não gera nenhum código-objeto. • A tradução do código-fonte (linguagem de alto nível) é executada em tempo de instrução, ou seja: instrução por instrução diretamente na memória. Tradução de cada instrução Código-fonte (linguagem de alto nível) Interpreta-dor Memória
1.2.3 Linguagens de programação e sistemas operacionais • É muito complexo, até mesmo para programadores experientes, a realização de determinadas operações usando linguagem de máquina. • Essa não é apenas importante aos programadores, é também uma das funções do sistema operacional.
1.2.3 Linguagens de programação e sistemas operacionais • Máquina real: • É a máquina propriamente dita, física. • Operada pela linguagem de máquina (complicada). • Máquina virtual: • É uma camada que está entre o sistema operacional e a estrutura física do computador. • Facilita para o usuário a utilização dos recursos. • Exemplo: arquivos (manipulação dos dados).
1.2.3 Linguagens de programação e sistemas operacionais • Além disso, os sistemas operacionais, fornecem interfaces para que outros programas possam ser executados. • Essas interfaces são conhecidas como system calls (chamadas de sistema) e o conjunto de operações disponibilizadas são as bibliotecas do sistema.
1.2.3 Linguagens de programação e sistemas operacionais • Durante a compilação de um programa, o compilador encontra no código-fonte as chamadas de sistema e as transforma em referências no código-objeto (linguagem de máquina). • Para ser executado, esse código precisa ser “ligado” ao sistema operacional (que é quem efetivamente “faz o trabalho”). Esse processo se chama ligação do código ou linking.
Código-fonte Compilador (ETAPA I) Código-objeto Memória Código-objeto (executável) Compilador (ETAPA II) Biblioteca do sistema operacional
Portabilidade • A relação entre o compilador e o sistema operacional faz com que o programa independa da arquitetura física do computador (processador). • Assim, programas executados em LINUX dificilmente poderão ser executados em um sistema operacional da família MICROSOFT.
1.3 Estruturação de algoritmos • Com o passar do tempo, as linguagens de programação acabaram se distanciando da linguagem de máquina e se aproximando da “lógica humana”. • Mesmo assim, linguagens de alto nível podem ser MUITO complexas para quem não é acostumado a fazer ALGORITMOS.
Diferenças entre linguagem humana e computacional • As máquinas: • Não podem tomar decisões com base em premissas; • Não podem escolher alternativas; • Não podem corrigir comandos mal redigidos; • Não podem descobrir a intenção do programador;
Rigidez (regras) • Sintática: • A tradução no computador é bastante limitada devido seu idioma também ser limitado. • “Se sei poucas palavras, me comunico com dificuldade” • Semântica: • Não podem existir ambigüidades. • O computador é, portanto, um ótimo cumpridor de ordens.
Exemplos • A velhinha ouviu o barulho da janela • Interpretações • A velhinha ouviu o barulho produzido pela janela. • A velhinha estava junto à janela e ouviu o barulho. • A velhinha ouviu o barulho que veio através da janela.
Dilema! • A linguagem natural (humana) não é adequada porque não tem rigidez semântica e sintática e a linguagem de programação não é adequada justamente por ter essas características que dificultam o desenvolvimento por sua complexidade.
Como resolver? • Na realidade, já existem algumas alternativas. • Apresento duas delas: • FLUXOGRAMA • PSEUDO-CÓDIGO
1.3.2 Fluxograma • Apresentam os ALGORITMOS de forma gráfica. • São formados por CAIXAS que contém as instruções. • As CAIXAS são ligadas por SETAS que indicam o FLUXO.
CAIXAS • Algumas caixas especiais indicam a possibilidade de o FLUXO seguir caminhos diferentes. • Para isso acontecer, precisamos de CONDIÇÕES e DECISÕES.
VANTAGENS • Facilidade para o desenvolvimento e compreensão do funcionamento do ALGORITMO.
DESVANTAGEM • Não é prática. • A correção de uma linha do pensamento pode implicar na reconstrução de muitas instruções. • A construção de ALGORITMOS mais complexos pode se torna demasiadamente trabalhoso.
Exemplo • Façamos um ALGORITMO, usando a notação de FLUXOGRAMAS, para a escolha do maior de dois números distintos.
Início Leia num1, num2 Num1 > num2 Maior num1 Maior num2 Escreva Maior Fim
1.3.3 Pseudo-código • Visa trazer ao código a rigidez semântica e sintática sempre tentando reduzir a dificuldade de uma linguagem de programação. • Será intermediária entre a linguagem natural e a linguagem de programação.
PORTUGOL • É um Pseudo-código muito popular no BRASIL. • É bastante simples e atende as características básicas da rigidez semântica e sintática. • Nas próximas aulas estudaremos a fundo a linguagem PORTUGOL e facilitaremos o estudo das linguagens de maior nível.
Algoritmo MAIOR • Var num1, num2, maior : inteiro; • Início • Leia(num1, num2); • Se (num1 > num2) então • Maior num1; • Se não • Maior num2; • Escreva (Maior); • Fim
Exercícios • Defina o que é ALGORITMO. • Diferencie um ALGORITMO de um PROGRAMA. • Explique como um programa é executado em um computador. • Defina o que é uma linguagem de programação de alto nível e uma linguagem de baixo nível. • Porque a linguagem natural não é adequada para a construção de ALGORITMOS para computador? • Quais as vantagens e desvantagens da utilização de FLUXOGRAMA e de PSEUDOCÓDIGO na construção de ALGORITMOS?