Buscar

Algoritmos e Lógica de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 1/1 
I. ALGORITMOS E LÓGICA DE PROGRAMAÇÃO 
 
I.1. Algoritmos 
 
O conceito central da programação e da ciência da computação é o conceito de algoritmo. 
Programar é, basicamente, construir algoritmos. 
Um algoritmo é um texto (do tipo receita de bolo) onde cada linha contém uma ação 
primitiva (ação passível de execução por um ser humano ou por uma máquina). 
A função do algoritmo é agir sobre dados, transformando-os em informações. 
 
 
Algoritmo 
Entrada 
de Dados 
Saída de 
Informação 
 
 
Portanto, um algoritmo apresenta dois aspectos: 
��Caráter Estático: Descrição das etapas de resolução de um problema ou a indicação 
ordenada de uma seqüência de ações bem definidas (receita). 
��Caráter Dinâmico: efeito que sua execução gera no decorrer do tempo (ação sobre os 
dados). 
Uma dificuldade básica na concepção e entendimento de algoritmos é a falta do 
estabelecimento de uma relação entre esses dois aspectos, ou seja, como visualizar as estruturas 
dinâmicas a partir da estrutura estática (ou ainda, como dados vão sendo transformados durante a 
execução do algoritmo). Este tipo de relação é compreendida conforme o aluno vai construindo 
algoritmos e testando sua validade, procedendo, desta forma, como o próprio computador. 
O desenvolvimento de um algoritmo exige do programador as capacidades de abstração e a 
de organizar um processo utilizando lógica. 
Uma vez realizada a abstração e determinada a lógica do algoritmo, o programador deve ser 
capaz de descrever o processo lógico em termos de uma linguagem de programação. 
Note-se, no entanto, que um algoritmo é independente da linguagem de programação na qual 
será implementada. A inclusão da linguagem de programação, neste ponto, tem a função apenas de 
interligar as idéias que estamos apresentando. 
Antes de continuarmos, vamos definir um pouco melhor estes conceitos do ponto de vista da 
programação de computadores. 
 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 2/2 
I.1.1. Abstração 
Para automatizar um processo manual é necessário reproduzir o seu comportamento por 
meio de instruções que serão executadas em um computador. Desta forma, o que fazemos é, antes 
de tudo, gerar um modelo do processo que se deseja automatizar. Um modelo é uma abstração da 
realidade. As propriedades relevantes (note-se que não dissemos todas as propriedades) do 
fenômeno que está sendo modelado são identificadas, enquanto outras, que não são importantes 
para o processo de automatização, são ignoradas. 
Este processo de modelar o fenômeno, identificando propriedades e procedimentos 
relevantes para a solução do problema e ignorando outros é denominado Abstração. 
Note-se que, a identificação de quais propriedades são relevantes depende do processo que 
se deseja automatizar. Um mesmo problema pode ser modelado de diferentes maneiras, dependendo 
do fenômeno físico que se deseja estudar. 
I.1.2. Lógica 
 
Lógica, no seu sentido mais amplo, está presente em todos os passos de nossas vidas, 
servindo de base para resolução de nossos problemas diários. 
Podemos tomar qualquer situação, tal como, sacar dinheiro do banco fora do horário normal 
de expediente. Nestas condições a solução é passar num caixa automático. Esta decisão lógica, pode 
ser detalhada nos seguintes passos: 
a) Localizar um caixa automático; 
b) Passar o cartão magnético pela tranca eletrônica; 
c) Verificar se o caixa automático está funcionando; 
NÃO: Voltar ao passo a); 
SIM: continua (próximo passo); 
d) Passar o cartão magnético pela leitora do caixa; 
e) Digitar a senha eletrônica; 
f) Senha aceita? 
NÃO: voltar ao passo d); 
SIM: continua ( próximo passo); 
g) Acionar a opção de saque; 
h) Preencher e confirmar o valor do saque; 
i) Digitar novamente a senha eletrônica; 
j) Senha aceita? 
NÃO: voltar ao passo d) 
SIM: continua ( próximo passo); 
k) Máquina tem dinheiro suficiente? 
NÃO: volta ao passo a); 
SIM: continua; 
l) Retirar o dinheiro e guarda-lo; 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 3/3 
m) Sair do caixa eletrônico; 
n) FIM. 
 
O grau de detalhamento da solução pode ser tão grande quanto se necessite. Este conjunto 
de instruções, que parece uma receita de bolo, é um algoritmo. 
Do ponto de vista deste curso, lógica é um conjunto de princípios e de métodos que dão base 
a raciocínios coerentes, induzindo a soluções eficazes para problemas que devem ser resolvidos 
utilizando recursos computacionais. 
Existem vários tipos de lógica. Algumas das utilizadas em processamento de dados por 
computador são: 
��Lógica Linear; 
��Lógica Modular; 
��Lógica Estruturada, e 
��Lógica por objetos. 
O tipo de lógica a ser utilizada depende do problema que se pretende resolver e da 
experiência do programador. 
I.1.1.1 Lógica linear 
Neste tipo de lógica, procura-se resolver os problemas linearmente, tratando cada ação na 
ordem em que sua necessidade aparece (ver figura ). 
 
 
. 
. 
. 
Rotina 1 
Rotina 2 
Rotina 3 
Rotina N 
 
I.1.1.2 Lógica modular 
Caracteriza-se pela subdivisão do problema proposto em diversos módulos (subproblemas), 
para poder analisar melhor cada rotina (separadamente). 
 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 4/4 
 Rotina 1 
Rotina 2 
Rotina 3 
Rotina N 
Bloco 
Principal 
 
I.1.1.3 Lógica estruturada 
Esta lógica é muito utilizada. Nela evita-se, cuidadosamente, o uso de desvios 
incondicionais. 
Esta lógica caracteriza-se por resoluções de laços, de dentro para fora. Dentro de uma rotina 
existem outras rotinas, numa espécie de aninhamento. A representação gráfica desta lógica não 
ajuda a esclarecer a frase anterior. Por esse motivo, preferimos apresentar o exemplo a seguir, 
comparando um algoritmo criado com a adoção de lógica linear e outro com a lógica estruturada. 
Nos dois casos utiliza-se uma linguagem natural. 
 
Exemplo de algoritmo usando lógica linear e estruturada 
Linear Estruturada 
1. Definir X = 0; 
2. Mostrar o valor de X; 
3. X é igual a 10? 
SIM: Finalizar (interrupção do programa) 
Não: Continuar 
4. Adicionar 1 à variável X; 
5. Voltar para o item 2 (desvio incondicional!) 
1. Definir X = 0; 
2. Fazer enquanto X for menor que 10; 
Mostrar o valor de X; 
Adicionar 1 à variável X; 
3. Mostrar o valor de X; 
 
Note-se que no caso do uso de lógica estruturada não ocorre uma instrução de desvio 
incondicional. O processamento ocorre no interior de um laço, representado pelo conjunto de 
instruções “aninhadas”na instrução 2. Terminado processamento do laço da instrução 2, o 
processamento continua com a execução do passo 3 e, em seguida, o algoritmo termina. 
I.1.1.4 Lógica por objetos 
Neste tipo de lógica, a maior atenção é direcionada para a identificação de objetos que 
representam entidades no domínio do problema. Os objetos apresentam como característica a 
combinação de atributos e comportamento, o que, numa linguagem de programação correspondem a 
dados e funções. O assunto é suficientemente abrangente para ser tratado como um tópico à parte. 
 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 5/5 
I.1.1.5 Instrumentos da Lógica de programação 
Vários instrumentos estão a disposição do programador para desenvolver um algoritmo e 
para sua posterior implementação. Entre estes instrumentos cita-se: 
��Pictóricos ou gráficos:• Fluxogramas e Diagramas de blocos; 
• Diagramas hierárquicos de fluxo ou diagramas hierárquicos estruturados; 
• Gráficos de estrutura; 
��Narrativos 
• Linguagem natural estruturada; 
• Pseudocódigo. 
��De detalhes: 
• Árvore de decisão; 
• Tabela de Decisão. 
a) Fluxogramas e Diagramas de Blocos 
Utilizados para descrever o método e a seqüência de execução do processo. Podem ser 
desenvolvidos em qualquer nível de detalhe que se deseje, podendo chegar até o nível de 
implementação na linguagem de alto nível escolhida. Esses diagramas utilizam vários símbolos 
geométricos, os quais estabelecem as seqüências de operação a serem efetuados no processamento 
computacional. 
 
Principais símbolos utilizados em um Diagrama de Blocos: 
 
 
Terminal: indica o início e/ou fim do fluxo de um 
programa. Não é codificado em forma de comando. 
 
 
Seta de Fluxo de dados: indica o sentido do fluxo de dados. 
Serve para conectar os símbolos ou blocos existentes. 
 
 
Processamento: indica a existência de cálculos (algoritmos) 
a efetuar, atribuições de valores, ou qualquer manipulação de 
dados que tenha um bloco específico para sua descrição. 
 
 
Entrada de dados ou operação manual: utilizado para ler 
os dados necessários a programa fora de linha sem 
intervenção de dispositivos mecânicos. 
 
 
Entrada e saída de dados: indica dispositivo qualquer de 
entrada ou saída de dados, como fornecedor de informações 
para processamento, gravação e outros. 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 6/6 
 
 
Teclado: informações recebidas ou fornecidas de ou por um 
computador. 
 
ou 
 
Saída de dados em vídeo: símbolos utilizados quando se 
deseja exibir informações dados na tela do vídeo. 
 
 
Saída de dados em impressora: utilizado quando se deseja 
que os dados sejam impressos. 
 
 
Disco magnético: memória de massa para armazenamento 
de dados (disco rígido). 
 
 
Decisão: indica a decisão que deve ser tomada. Este símbolo 
indica a possibilidade de desvios para diversos outros pontos 
do fluxo, dependendo do resultado de comparação e de 
acordo com situações variáveis. 
 
 
Preparação: refere-se a um determinado grupo de 
operações não inclídas na diagramação, bem como na 
elaboração de uma chave que modificará aexecução de um 
determinado programa (na prática está associado a laços). 
 
 
Conector: utilizado quando é preciso particionar o 
diagrama.Quando ocorre mais de uma partição, é colocado 
uma letra, ou um número, dentro do símbolo de conexão 
para identificar os pares de ligação. 
 
 
Conector: específico para indicar conexão do fluxo em 
outra página. 
 
Exemplo 1: Achar o valor da expressão D = B2 – 4AC 
 Início 
Ler A, B e C 
D = B2 – 4 * A* C 
Escrever D 
Fim 
 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 7/7 
 
Exemplo 2: Achar o maior de dois números A e B 
 Início 
Ler A e B 
Fim 
Comparar 
A com B 
Escrever: 
A é maior 
Escrever : 
A e B iguais 
A = B 
A > B A < B 
Escrever: 
B é maior 
 
 
I.1.3. Linguagem de programação 
Uma linguagem de programação é uma notação formal para descrição de algoritmos que 
serão executados por um computador. Como todas as linguagens formais, uma linguagem de 
programação apresenta dois componentes: Sintaxe e Semântica. 
��Sintaxe: consiste de um conjunto de regras formais que especificam a composição do 
programa a partir de letras, dígitos e outros símbolos. Como exemplo, regras de 
sintaxe podem exigir que para cada parêntese aberto em uma expressão aritmética 
corresponda um parêntese fechado. Outro exemplo: dois comandos quaisquer 
devem ser separados por um ponto e vírgula. 
��Semântica: Especifica o significado de qualquer programa, sintaticamente válido. 
Os computadores de uso geral, encontrados atualmente no mercado, são capazes de executar 
somente programas em linguagens de nível baixo, a linguagem de máquina. Linguagens de máquina 
são projetadas em função da rapidez de execução de programas, do custo de sua implementação e 
da flexibilidade com que permite a construção de programas de nível mais alto. Por outro lado, 
linguagens de programação de alto nível são projetadas, em geral, em função da facilidade na 
construção e da confiabilidade de programas. 
Para que um computador, que só compreende linguagem de máquina, se comporte como se 
entendesse linguagens de alto nível, são utilizados programas “tradutores” capazes de traduzir uma 
programa escrito numa linguagem de alto nível para a linguagem de máquina. Os principais tipos de 
programas tradutores são: 
��Interpretador: Nesta solução, as ações indicadas pelos comandos da linguagem são 
interpretadas e executadas diretamente, uma a uma, num processo interativo. 
Desta forma, traduz-se uma instrução; executa-se esta instrução; traduz-se nova 
instrução; executa-se esta nova instrução; e assim sucessivamente. Instruções 
erradas são identificadas no momento de sua tradução. As instruções anteriores 
são executadas normalmente. Nenhum arquivo adicional é criado. Exemplos de 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 8/8 
linguagens que utilizam um processo interpretativo são o Basic, o MATLAB, e 
antigas versões do Pascal. 
��Tradutor: Nesta solução, o conjunto de instruções escritas em uma linguagem de alto 
nível é primeiramente traduzido para versões da linguagem de máquina e somente 
então executadas. A tradução é feita em vários passos. Por exemplo, 
subprogramas podem ser traduzidos, primeiramente, para código de montagem 
(assembly code). Em seguida este código de montagem é traduzido para código 
relocável em linguagem de máquina. Num próximo passo, unidades de código 
relocável podem ser ligadas em uma única unidade relocável. Finalmente, o 
programa ineiro é carregado na memória principal, como código executável de 
máquina. Os tradutores utilizados em cada um desses passos recebe nomes 
especiais: compilador, montador, ligador (ou editor de ligações – “linker”) e 
carregador devem ser confeccionados para cada linguagem de alto nível e 
computador utilizados. A figura a seguir ilustra o processo: 
 
 
Editor de 
texto 
(ASCII) 
Nomearq.c ou 
Nomearq.cpp 
ou 
nomearq.pas, 
ou ...... 
Gera arquivos fonte 
compilador 
Sucesso? 
Não 
Gera arquivos objeto 
nomearq.obj ou 
nomearq.o. 
ligador 
Sucesso? 
Gera arquivo executável 
nomearq.exe 
Sim 
Não Sim 
Carregar e 
executar 
 
O processo de compilar, ligar e executar um programa. 
Programas interpretados apresentam tempo de execução maior que os traduzidos, uma vez 
que cada instrução deve ser, primeiramente, traduzida e, somente então, executada. No segundo 
caso, todas as instruções já estão em condições de serem executadas pelo computador. 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 9/9 
A função do programador é criar um algoritmo, traduzir o algoritmo para uma linguagem de 
programação, de preferência de alto nível, obedecendo as regras de sintaxe dessa linguagem e 
preocupando-se com a semântica, de forma a que o programa executado gere a solução do 
problema. Neste pronto tem-se um programa escrito em linguagem de programação de alto nível. 
A função do programa tradutor (seja um interpretador ou tradutor) é a de converter o 
programa escrito na linguagem de alto nível adotada em um programa executável (em linguagem de 
máquina). O compilador auxilia o programador com a identificação de não conformidadescom as 
regras de sintaxe, mas pouco pode fazer com erros semânticos. O ligador, além de criar o código 
relocável unificado, realiza verificações de consistência. Essas verificações de consistência 
permitem identificar a falta de definição funções ou outros componentes no conjunto do programa, 
componentes esses que podem ser encontrados em outros arquivos fonte ou em bibliotecas. 
 
I.2. Lógica na programação de sistemas 
I.2.1. Princípios e resolução de problemas 
Problema, no contexto deste curso, é uma questão que foge a uma determinada regra, um 
desvio de percurso que impede que se alcance com sucesso um objetivo predefinido, com eficácia e 
eficiência. 
Em geral, diagramas de blocos são excelentes instrumentos para a avaliação do problema do 
fluxo de informação d um dado sistema. Logo, o que se precisa é resolver um problema de lógica, 
usando, preferencialmente, um procedimento de desenvolvimento. 
Para desenvolver um diagrama, deve-se considerar como procedimentos prioritários os 
seguintes itens: 
��Os diagramas devem ser desenvolvidos e quebrados em vários níveis. Os primeiros 
devem conter apenas as idéias básicas, deixando para as etapas posteriores o 
detalhamento que se fizer necessário (desenvolvimento Top-Down); 
��Um fluxograma ou diagrama de blocos deve, sempre que possível, ser desenvolvido 
de cima para baixo e da esquerda para a direita; 
��É incorreto e proibido ocorrer cruzamento das linhas de fluxo de dados. 
 
Exemplo 3: Calculo da média de dois números e determinação de aprovação, num processo 
Top-Down. 
Primeiro nível 
 Início 
Calcular média e 
determinar 
aprovação 
Fim 
 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 10/10 
Segundo nível 
 Início 
Ler notas Pi 
Calcular média e 
determinar 
aprovação 
Fim 
Apresentar 
se houve ou 
não 
reprovação 
Início 
Ler notas Pi 
Calcular média e 
determinar 
aprovação 
Fim 
Apresentar 
se houve ou 
não 
reprovação 
ou 
 
Terceiro nível 
 Início 
Ler notas Pi 
Calcular média 
Fim 
Início 
Ler notas Pi 
Fim 
ou 
Apresentar no 
vídeo 
REPROVADO 
Calcular média 
Média >=6 Média >=6 
Apresentar no 
vídeo 
REPROVADO 
Não 
Apresentar no 
vídeo 
APROVADO 
Fim 
Apresentar no 
vídeo 
APROVADO 
Não Sim Sim 
 
 
 
APOSTILA : LINGUAGENS DE PROGRAMAÇÃO C E C++ 
Prof. Angelo Passaro página 11/11 
I.3. Ambientes de desenvolvimento para as linguagens C e C++ 
Os ambientes de desenvolvimento de programas modernos, para todas as linguagens, 
incluem os seguintes componentes, que podem ou não estar integrados: 
��editor de texto: permite a edição de arquivos fonte, gravando-os em formato ASCII. 
Além disso costumam apresentar um conjunto de recursos avançados de edição, 
que podem incluir as conhecidas ferramentas de cortar e colar e mover texto, além 
de recursos visuais que permitem identificar comandos da linguagem, constantes, 
comentários, dentre outros, utilizando diferentes cores. 
��Compilador (compiler): cuja função foi apresentada em seção anterior. 
��Ligador (linker): cuja função também foi apresentada em seção anterior. 
��Execução monitorada (debbuger): permite acompanhar a execução de um programa 
sendo executado na memória do computador. Esta ferramenta é muito útil para 
identificar erros semânticos, desde o ligador tenha sido capaz de criar o código 
executável e se o programador for capaz de acompanhar o desenvolvimento 
dinâmico do algoritmo.

Continue navegando