Algoritmo
Tese: Algoritmo. Pesquise 861.000+ trabalhos acadêmicosPor: • 24/11/2013 • Tese • 3.008 Palavras (13 Páginas) • 291 Visualizações
Respostas
1- Um algoritmo não computacional é um algoritmo cuja sequência de passos, a princípio, não pode ser executada por um computador.
• Ir até um banco 24 horas.
• Colocar o cartão.
• Digitar a senha.
2- O computador, a princípio, não executa nada. Para que ele faça uma determinada tarefa, calcular uma folha de pagamento, por exemplo -, é necessário que ele execute um programa.
Um programa é um conjunto de milhares de instruções que indicam ao computador, passo a passo, o que ele tem que fazer. Logo, um programa nada mais é do que um algoritmo computacional descrito em uma linguagem de programação.
Linguagens de programação são usadas para descrever algoritmos; isto é, sequências de passos que levam à solução de um problema.
Uma linguagem de programação precisa suportar a definição de ações e prover meios para especificar operações básicas de computação, além de permitir que os usuários especifiquem como estes passos devem ser sequenciados para resolver um problema.
Uma linguagem de programação pode ser considerada como sendo uma notação que pode ser usada para especificar algoritmos com precisão.
Uma linguagem de programação contém os comandos que fazem o computador escrever algo na tela, realizar cálculos aritméticos, receber uma entrada de dados via teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lógica.
3- As linguagens de programação podem ser agrupadas em dois grandes grupos: linguagens de baixo nível e linguagens de alto nível.
As linguagens de baixo nível
As linguagens de alto nível
4- As linguagens de baixo nível são restritas a linguagem de máquina e tem uma forte relação entre as operações implementadas pela linguagem e as operações implementadas pelo hardware.
5- As linguagens de alto nível por outro lado, aproximam-se das linguagens utilizadas por humanos para expressar problemas e algoritmos. Cada declaração numa linguagem de alto nível equivale a várias declarações numa linguagem de baixo nível.
6- A vantagem principal das linguagens de alto nível é a abstração. Isto é o processo em que as propriedades essenciais requeridas para a solução do problema são extraídas enquanto esconde os detalhes da implementação da solução adotada pelo programador. Com o nível de abstração aumentado, o programador pode concentrar-se mais na solução do problema ao invés de preocupar-se como o hardware vai tratar do problema.
7- Os algoritmos são independentes das linguagens de programação. Ao contrário de uma linguagem de programação não existe um formalismo rígido de como deve ser escrito o algoritmo.
8- Ler atentamente o enunciado
Retirar a relação das entradas de dados do enunciado (entrada)
Retirar do enunciado, a relação das saídas das informações (saída)
Determinar o que deve ser feito para transformar as entradas nas saídas especificadas(processamento)
Testar o algoritmo usando simulações.
9-
• ENTRADA: São os dados de entrada do algoritmo.
• PROCESSAMENTO: São os procedimentos utilizados para chegar ao resultado final.
• SAÍDA: São os dados já processados.
10- Após desenvolver um algoritmo ele deverá sempre ser testado. Este teste é chamado de TESTE DE MESA, que significa, seguir as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correto ou não.
11- Como o próprio nome diz, instruções primitivas são os comandos básicos que efetuam tarefas essenciais para a operação dos computadores, como entrada e saída de dados (comunicação com o usuário e com dispositivos periféricos), e movimentação dos mesmos na memória. Estes tipos de instrução estão presentes na absoluta maioria das linguagens de programação.
• Dispositivo de entrada
• Dispositivo de saída
• Sintaxe
• Semântica
12- Sintaxe é a forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor de programas. A violação das regras sintáticas é considerada um erro sujeito à pena do não reconhecimento por parte do tradutor.
13- Semântica é o significado, ou seja, o conjunto de ações que serão exercidas pelo computador durante a execução do referido comando.
14- O comando de atribuição ou simplesmente atribuição, é a principal maneira de armazenar uma informação numa variável. Sua sintaxe é:
<nome_da_variável> := <expressão>
Nome := “Jenoveva” //Caractere
preco := 18.25 //Real
quant := 8 //Inteiro
total := preco * quant //Real
imposto := total * 17 / 100 //Real
15-
16- Os comandos de entrada de dados são o meio pelo qual as informações dos usuários são transferidas para a memória dos computadores, para que possam ser usadas nos programas.
• Há duas sintaxes possíveis para esta instrução:
leia (variável)
Ex: leia(x)
leia (lista_de_variáveis)
Ex: leia(nome, endereco, cidade)
17- Os comandos de saída de dados são o meio pelo qual informações contidas na memória dos computadores são colocadas nos dispositivos de saída, para que os usuários possam apreciá-las.
• Escreval(<expressão ou identificador ou constante>) //Mostra o primeiro resultado na mesma linha depois em linhas diferentes.
• Escreva(<expressão ou identificador ou constante>) //Mostra o resultado na mesma linha, mas em colunas diferentes.
18- Uma preocupação constante de um bom programador deve ser a de conceber um programa “amigo do usuário”. Esta preocupação é traduzida no planejamento de uma interface com o usuário (meio pelo qual um programa e o usuário “conversam”) bastante amigável. Em termos práticos, isto se resume à aplicação de duas regras básicas:
• Toda vez que um programa estiver esperando que o usuário forneça a ele um determinado dado (operação de leitura), ele deve antes enviar uma mensagem dizendo ao usuário o que ele deve digitar, por meio de uma instrução de saída de dados;
• Antes de enviar qualquer resultado ao usuário, um programa deve escrever uma mensagem explicando o significado do mesmo.
19- De acordo com o modo como o controle do fluxo de instruções de um algoritmo é feito, as estruturas básicas de controle são classificadas em:
Estruturas de decisão
Estruturas de repetição
20- Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica.
• A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas para que se decida qual o caminho a ser seguido.
21- Segundo esta classificação, têm-se 3 tipos de estruturas de decisão:
Estrutura de Decisão Simples (Se ... entao)
Estrutura de Decisão Composta (Se ... entao ... senao)
Estrutura de Decisão Múltipla do Tipo Escolha (Escolha ... Caso)
22- Nesta estrutura uma única condição (expressão lógica) é avaliada. Dependendo do resultado desta avaliação, um comando ou conjunto de comandos serão executados (se a avaliação for verdadeira) ou não serão executados (se a avaliação for falsa).
se <condição> entao
<ações (uma ou mais) a serem realizadas se a condição for verdadeira>
Fimse
Exemplo:
SE X > 10 ENTAO
Escreva (“X é maior que 10”)
FIMSE
23- Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro, um comando ou conjunto de comandos serão executados. Caso contrário, ou seja, quando o resultado da avaliação for falso, um outro comando ou um outro conjunto de comandos serão executados.
se <condição> entao
<ações (uma ou mais) a serem realizadas se a condição for verdadeira>
senao
<ações (uma ou mais) a serem realizadas se a condição for falsa>
fimse
SE X > 10 ENTAO
Escreva (“X é maior que 10”)
SENAO
Escreva (“X é menor que 10”)
FIMSE
24- Este tipo de estrutura é uma generalização da construção Se, onde somente uma condição era avaliada e dois caminhos podiam ser seguidos. Na estrutura de decisão do tipo Escolha pode haver uma ou mais condições a serem testadas e um comando diferente associado a cada uma destas.
A sintaxe da construção de Escolha é:
escolha < expressão-de-seleção >
caso < exp 1 > , < exp 2 >, ... , < exp n >
< lista-de-comandos-1 >
caso < exp 1 > , < exp 2 >, ... , < exp n >
< lista-de-comandos-2 >
outrocaso
< lista-de-comandos-3 >
fimescolha
25- São muito comuns nas situações em que se deseja repetir um determinado trecho de um programa um certo número de vezes. Por exemplo, pode-se citar o caso de um algoritmo que calcula a soma dos números impares entre 500 e 1000 ou então um algoritmo que escreve os números maiores que 0 enquanto a sua soma não ultrapasse 1000.
26- As estruturas de repetição são muitas vezes chamadas de Laços ou também de Loops.
27- dividem em:
• Laços contados
• Laços condicionais
28-Laços Contados, quando se conhece previamente quantas vezes o comando composto no interior da construção será executado;
29- Laços Condicionais, quando não se conhece de antemão o número de vezes que o conjunto de comandos no interior do laço será repetido, pelo fato do mesmo estar amarrado a uma condição sujeita à modificação pelas instruções do interior do laço.
30- Todo algoritmo que possui um ou mais de seus passos repetidos um determinado número de vezes denomina-se ?
• Algoritmo com repetição.
31- Os laços contados são úteis quando se conhece previamente o número exato de vezes que se deseja executar um determinado conjunto de comandos. Então, este tipo de laço nada mais é que uma estrutura dotada de mecanismos para contar o número de vezes que o corpo do laço (ou seja, o comando composto em seu interior) é executado.
para <variável de controle> de <valor inicial> ate <valor final> faca
<lista de comandos>
Fimpara
32- Laços condicionais são aqueles cujo conjunto de comandos em seu interior é executado até que uma determinada condição seja satisfeita. Ao contrário do que acontece nos laços contados, nos laços condicionais não se sabe de antemão quantas vezes o corpo do laço será executado.
33- As construções que implementam laços condicionais mais comuns nas linguagens de programação modernas são:
Enquanto - laço condicional com teste no início
Repita - laço condicional com teste no final
34- Caracteriza-se por uma estrutura que efetua um teste lógico no início de um laço, verificando se é permitido ou não executar o conjunto de comandos no interior do laço.
• A sintaxe é mostrada a seguir:
enquanto <expressão lógica ou relacional> faca
<lista de comandos>
fimenquanto
35- Caracteriza-se por uma estrutura que efetua um teste lógico no final de um laço, verificando se é permitido ou não executar novamente o conjunto de comandos no interior do mesmo.
A sintaxe é mostrada a seguir:
repita
<lista de comandos>
ate <expressão lógica ou relacional>
36- Uma variável contadora é uma variável que recebe um valor inicial, geralmente 0 (zero) antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor constante, geralmente 1, conforme o exemplo abaixo:
cont := 0
<estrutura_de_repetição>
...
cont := cont + 1
...
<fim_da_estrutura_de_repetição>
37- Uma variável acumuladora é uma variável que recebe um valor inicial, geralmente 0 (zero) antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor variável, geralmente a variável usada na estrutura de controle, conforme o exemplo abaixo:
soma := 0
<estrutura_de_repetição_com_variável_x>
...
soma := soma + x
...
<fim_da_estrutura_de_repetição>
38- As estruturas de dados homogêneas permitem agrupar diversas informações dentro de uma mesma variável. Este agrupamento ocorrerá obedecendo sempre ao mesmo tipo de dado, e é por esta razão que estas estruturas são chamadas homogêneas.
39- Um vetor é uma variável composta homogênea unidimensional formada por uma sequência de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome) e alocadas sequencialmente na memoria.
40- Ao declararmos um vetor, estamos reservando na memória principal do computador uma série de células para uso da variável daquele tipo. O nome do vetor aponta para a base das células e o seu início dá a posição relativa do elemento referenciado ao primeiro (base).
41- Ao declararmos um vetor, estamos reservando na memória principal do computador uma série de células para uso da variável daquele tipo. O nome do vetor aponta para a base das células e o seu início dá a posição relativa do elemento referenciado ao primeiro (base).
42- Os vetores podem ser unidimensionais ou multidimensionais (matrizes). Um vetor unidimensional, como uma lista de notas dos 50 alunos de uma turma, tem apenas um índice.
43- Uma matriz, é nada mais, do que Vetores bidimensionais ou Multidimensionais. Onde podemos acessar os dados ali contidos através de dois valores. As “linhas” e as “colunas”.
44- Quando temos mais de uma dimensão então utilizamos as matrizes, que de diferente no uso e na declaração só tem estas dimensões mais explícitas.
45- O acesso individual a cada componente de um vetor é realizado pela especificação de sua posição na mesma por meio do seu índice. No exemplo anterior foi definida uma variável IDADES capaz de armazenar 5 número inteiros. Para acessar um elemento deste vetor deve-se fornecer o nome do mesmo e o índice do componente desejado do vetor (um número de 1 a 5, neste caso).
46- Por exemplo, IDADES[1] indica o primeiro elemento do vetor, IDADES[2] indica o segundo elemento do vetor e IDADES[5] indica o último elemento do vetor.
47- Exemplo
• M[1,1] := 15
• M[1,10] := 10
• M[3,5] := 20
• M[5,10] := 35
• 48- Uma observação importante a ser feita é a utilização de construções Para aninhadas ou encadeada a fim de efetuar a operação de leitura repetidas vezes, em cada uma delas lendo um determinado componente da matriz. Esta construção é muito comum quando se opera com matrizes, devido à necessidade de se realizar uma mesma operação com os diversos componentes das mesmas.
• 49- Vantagens da modularização:
Clareza e legibilidade do algoritmo.
Construção independente.
Testes individualizados.
Simplificação da manutenção.
Reaproveitamento de algoritmos.
• 50- A abordagem top-down aplicada em algoritmos consiste em dividir um algoritmo em subalgoritmos/subprogramas menores que executam partes da resolução do problema.
• Essa técnica é chamada de modularização de algoritmos.
• 51- Um subalgoritmo é um nome dado a um trecho de um algoritmo mais complexo e que, em geral, encerra em si próprio um pedaço da solução de um problema maior – o algoritmo a que ele está subordinado. Este conceito é essencial numa ciência bastante recente: a Engenharia de Software.
52- Em resumo, os subalgoritmos são importantes na:
• Subdivisão de algoritmos complexos, facilitando o seu entendimento;
• Estruturação de algoritmos, facilitando principalmente a detecção de erros e a documentação de sistemas; e
• Modularização de sistemas, que facilita a manutenção de softwares e a reutilização de subalgoritmos já implementados.
• 53- Variáveis locais são aquelas definidas dentro do próprio subalgoritmo e só podem ser utilizadas pelo mesmo.
54- Parâmetros são canais por onde os dados são transferidos pelo algoritmo chamador a um subalgoritmo, e vice-versa
55- funções, que retornam um, e somente um, valor ao algoritmo chamador;
procedimentos, que retornam zero (nenhum) ou mais valores ao algoritmo chamador.
56- Um procedimento é um subalgoritmo que retorna zero (nenhum) ou mais valores ao (sub)algoritmo chamador. Estes valores são sempre retornados por meio dos parâmetros ou de variáveis globais, mas nunca explicitamente, como no caso de funções
57- Funções são as estruturas que permitem ao desenvolvedores separar seus programas em blocos. Se não as tivéssemos, os programas teriam que ser curtos e de pequena complexidade. Para fazermos programas grandes e complexos temos de construí-los bloco a bloco.
58- Uma função é um módulo que tem por objetivo calcular e retornar ao algoritmo, procedimento ou função "chamador" um valor. A chamada de uma função para execução é feita apenas citando-se o seu identificador no meio de uma expressão. Vide as funções previamente existentes no nosso pseudo-código. Uma função é dita recursiva quando chama a ela própria.
59- A invocação de uma função é feita pelo simples aparecimento do nome da mesma, seguido pelos respectivos parâmetros entre parênteses, dentro de uma expressão. A função é executada e, ao seu término, o trecho do comando que a invocou é substituído pelo valor retornado pela mesma dentro da expressão em que se encontra, e a avaliação desta prossegue normalmente.
60- Variáveis globais são aquelas declaradas no início de um algoritmo. Estas variáveis são visíveis (isto é, podem ser usadas) no algoritmo principal e por todos os demais subalgoritmos.
61- Na passagem de parâmetros por valor (ou por cópia) o parâmetro real é calculado e uma cópia de seu valor é fornecida ao parâmetro formal, no ato da invocação do subalgoritmo. A execução do subalgoritmo prossegue normalmente e todas as modificações feitas no parâmetro formal não afetam o parâmetro real, pois trabalha-se apenas com uma cópia do mesmo.
62- Neste mecanismo de passagem de parâmetros não é feita uma reserva de espaço em memória para os parâmetros formais. Quando um subalgoritmo com parâmetros passados por referência é chamado, o espaço de memória ocupado pelos parâmetros reais é compartilhado pelos parâmetros formais correspondentes. Assim, as eventuais modificações feitas nos parâmetros formais também afetam os parâmetros reais correspondentes.
63- Um procedimento difere de uma função basicamente, pois, não tem um valor de retorno associado. Isto faz com que ele se comporte como um comando extra da linguagem ao passo que a função tem um comportamento mais parecido com o de uma expressão aritmética ou booleana. Um protótipo para um procedimento é de definido então com base em apenas duas informações:
• O identificador do procedimento (nome)
• A lista de parâmetros (que podem ser por valor ou referência).
64- Em termos simples, uma função pode ser usada em qualquer lugar onde uma variável também pode, a não ser, naturalmente, no "lado esquerdo da seta" em um comando de atribuição - uma função produz (diz-se no linguajar dos programadores retorna) um valor, e não o recebe.
...