



































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Lógica de programação é uma técnica que visa desenvolver algoritmos a fim de alcançar determinados objetivos
Tipologia: Exercícios
1 / 43
Esta página não é visível na pré-visualização
Não perca as partes importantes!




































2014 - 1
Antes de aprendermos a desenvolver algoritmos, ou programas, precisamos entender um conceito muito utilizado em nosso cotidiano: Lógica. Lógica é algo que não se discute, por exemplo: “Pela manhã, o sol vai nascer e a tarde se por...”. Esta afirmação é óbvia, lógica e indiscutível. Não importa a crença, inteligência ou gosto, todos concordam com esta afirmação. Aristóteles, filósofo grego, foi o criador da ciência da lógica, onde ele estabeleceu critérios para resolver os problemas com respostas binárias (opostas); a partir de premissas chegava-se as conclusões.
A arquitetura magnética do computador, onde se processam as informações, é lógica; ou seja, uma combinação de passar ou não corrente elétrica caracteriza a informação. Teoricamente representado pelos algarismos 0 e 1. Partindo deste princípio a concepção de um algoritmo deve ser tratada da mesma forma, logicamente.
A lógica de programação é extremamente necessária para quem quer, de fato, aprender a programar em qualquer linguagem de programação. Ela nos ajuda a pensar pela razão e não pela emoção, como em muitas situações fazemos. Vamos dar um exemplo:
Um casal de namorados se ama, a garota pergunta ao garoto: “Você não me ama?”, ele, pela emoção, responderia que sim; mas pela razão, se responder sim, ele está confirmando a negação questionada por ela, de “não amar”. Esta situação pode ser bem resolvida em nosso cotidiano, porém, para o computador quer dizer que “o garoto não ama a garota”, lembrem-se, o computador raciocina logicamente. Devemos então entender e nos acostumarmos com a forma de “pensar” do computador, para não cometermos equívocos que possam ser fatais para o bom funcionamento do algoritmo.
Algoritmo é um termo usado em diversas disciplinas exatas, como: Matemática, cálculo, física, química, entre outras. Nestas disciplinas Algoritmo é a forma como um problema é resolvido. Na área de Lógica de programação o Algoritmo tem o mesmo significado. Muitos confundem e pensam que algoritmos é apenas a solução final do problema, mas não. Algoritmos é a especificação dos passos em ordem lógica que visam resolver o problema. Geralmente, é criada uma linguagem hipotética – normalmente em português – para a padronização do algoritmo. Os critérios empregados são similares aos das linguagens de programação reais. Didaticamente para o aluno, o fato da linguagem ser em português (pseudocódigo) facilita o aprendizado do algoritmo, até que ele tenha a disciplina necessária para encarar uma linguagem de programação real.
Todos os conceitos empregados ao algoritmo servem para o programa. O programa (código fonte) nada mais é do que um algoritmo desenvolvido em uma linguagem de programação real, ou seja, é o “objeto” que faz o Algoritmo realmente funcionar no computador.
Como vimos no capítulo anterior, para fazermos o programador interagir com o computador precisamos definir critérios. O computador é uma máquina de “processar informações (dados)”, logo, estes dados deverão seguir algumas propriedades que caracterize e o diferencie dos demais dados. Por estarmos tratando genericamente os padrões, os citados nesta literatura, não obedece totalmente o critério das linguagens de programação reais. Temos que saber diferenciar o Nome da Informação do Conteúdo da informação.
Nome da Informação é o Substantivo que caracteriza a informação. Conteúdo da informação é o que está contido neste substantivo. Esta informação pode ser alterada.
Exemplo: No cabeçalho de uma prova há diversas informações. Uma delas é a Nota. Para um aluno esta nota pode ser 7, para outro 4.5 ou 10... Portanto, Nome da Informação é NOTA e Conteúdo da Informação 7 , 4.5 ou 10. Nos próximos subtítulos falaremos de Conteúdo da Informação. Quando falarmos em Variáveis de Memória retomaremos o Nome da Informação.
São dados alfanuméricos^1 que servem para armazenar informações que contenham qualquer tipo de símbolo do teclado. Exemplos: “Rua Ataliba Vieira, 1025”, “Edson de Oliveira”, “São Paulo”. Repare que no exemplo acima os bytes (caracteres) que compõem o endereço são alfanuméricos, algarismos e símbolos especiais. Todo Conteúdo da Informação caractere é delimitado por aspas (“”).
Os dados do tipo caracteres ocupam na memória RAM o número de bytes nele contido, por exemplo: “computador” - 10 bytes, “casa” - 4 bytes e “Bom dia!” – 8 bytes.
São informações que só podem ser representadas por números, algarismos de 0 (zero) a 9 (nove).
Em alguns casos o armazenamento de conteúdos numéricos também serve ao tipo de dado Caractere. Para melhorar a classificação dos dados sugerimos que definam como tipo Numérico somente as informações que possam gerar cálculos, como o Salário.
Informações numéricas que tem a característica de não serem fracionárias, por exemplo: Quantidade de filhos: 5, Número de alunos: 40 e Total de rodas: 4. Os dados do tipo Inteiro ocupam na memória RAM 2 Bytes e pode armazenar números até o limite de 65535 positivo ou negativo.
As informações do parágrafo anterior podem variar dependendo da linguagem de programação utilizada.
Informações numéricas que tem a característica de ser fracionárias, por exemplo: Salário: 1254.25, Inflação: 0.75842 e Nota: 7.5.
(^1) Algarismos, letras e caracteres especiais (vírgula, ponto, hífem, parênteses entre outros)
Existem diversas formas para representarmos um algoritmo. Apresentaremos neste capítulo algumas destas formas.
Vale lembrar, que no decorrer do curso nos apoiaremos teoricamente na Descrição Narrativa, Fluxograma e Pseudocódigo; e na prática em Linguagem de programação C.
Descrição narrativa é a forma de representação do algoritmo através de um texto que expresse os processos a serem executados para resolução do problema compassadamente. Nesta forma de representação do algoritmo não é necessário técnicas, regras ou critérios; basta expressar os passos do algoritmo. Cada passo é uma instrução no Algoritmo.
Fluxograma é a forma de representação dos passos do algoritmo através de figuras que representam as ações deste passo. Nesta forma de representação do algoritmo usamos regras para cada uma das figuras/instruções. Começamos a despertar no aprendiz a necessidade e importância da disciplina na concepção de um algoritmo.
O pseudocódigo é uma linguagem hipotética que usamos para representar as instruções do algoritmo através de comandos pré-definidos. Estes comandos e regras são padrões para todos os algoritmos. A construção do algoritmo através do pseudocódigo é fundamental no aprendizado das regras de sintaxe, porque a obediência às regras será cobrada totalmente na utilização de uma linguagem de programação.
Nos meios teóricos (Descrição Narrativa, Fluxograma e Pseudocódigo) a consequência de qualquer tipo de erro não é mostrado ao aprendiz na confecção do Algoritmo na prática. A partir do momento que desenvolvemos o Algoritmo em uma linguagem de programação o compilador (software que permite o desenvolvimento de programas) despertará o erro por menor que ele seja.
Depois de concluído o Algoritmo em uma linguagem de programação o “programa” desenvolvido poderá ser executado pelo usuário.
Variável é o meio magnético que o computador utiliza para armazenar – na memória RAM – informações dadas pelo programador ou operador do algoritmo. Uma variável, analogamente, é como um papel que armazena uma informação escrita e que pode ser recuperada. Por ser um meio magnético, na falta de energia, por quaisquer motivos, acarretará na perda da informação nela armazenada.
Como diz o próprio nome, uma “variável” pode ter o seu Conteúdo da Informação mudado no decorrer do algoritmo.
Toda variável de memória devem ter um nome que a identifique (lembram-se do Nome da Informação ?), diferenciando-a das demais contidas no mesmo algoritmo. Cada linguagem de programação temas suas regras para nomear variáveis. Algumas regras podem coincidir. As regras mais comuns são:
Começar com letra;
Não conter caracteres especiais^3 , exceto o sublinhado ( _ ) e
Não ser palavra reservada 4 da linguagem.
Atribuição nada mais é do que preencher o conteúdo de uma variável com valores definidos pelo usuário do algoritmo, pelo programador pelo programa.
Tudo o que dissemos sobre Variáveis de Memória serve para constantes de memória. Exceto o último parágrafo, ou seja, o Conteúdo da Informação de uma Constante de Memória não pode ser mudado (Exceto pelo programador no desenvolvimento do algoritmo).
Uma vez que o Algoritmo esteja em modo de execução o valor atribuído à constante não se altera.
(^3) Todos os caracteres que não seja numero ou letra (^4) Palavra que a linguagem de programação utilize para algum fim específico
Teoricamente (fluxograma e Pseudocódigo), existe apenas um operador de caracteres: o sinal de adição (+). Sua função é concatenar (juntar) as cadeias de caracteres (strings). Em linguagem C este conceito não funciona; há funções apropriadas para este fim.
Este tipo de operador tem como objetivo comparar os operandos. Veja a tabela: Operador Em C Descrição
Maior < < Menor = >= Maior ou igual <= <= Menor ou igual <> != Diferente = == Igual
Estes operadores podem ser utilizados com qualquer tipo de dados, não importando a classificação ou o tipo.
A combinação dos operadores com os operandos^5 formam as expressões que o algoritmo irá calcular, retornando o resultado. Esta informação geralmente é armazenada em uma variável de memória, podendo também ser exibidas diretamente nos dispositivos de saída do computador (monitor ou impressora).
Os tipos de expressões matemáticas envolvem dados numéricos (inteiros e reais) e operadores aritméticos.
A precedência dos cálculos na expressão obedece a mesma ordem da matemática. Porém, uma expressão computacional só pode ser escrita em uma linha, diferentemente de uma expressão aritmética. Exemplo: Expressão Aritmética:
Expressão Computacional Teórica (Fluxograma ou Pseudocódigo): Y ← (4 * 6 ^3 + 9 - 4) / 5
(^5) Valores e informações (dados) contidas no algoritmo
Expressão Computacional em C: Y = (4 * (6 * 6 * 6) + 9 - 4) / 5;
As expressões lógicas processam operando lógicos.
As expressões as lógicas, também tem uma prioridade a ser considerada. Desconsiderando os parênteses (que quebram a prioridade) os operadores lógicos são executados na ordem: .NÃO., .E. e .OU..
Exemplo: .NÃO.((.V..OU..F.).E.(.NÃO..F..E..V.)) .NÃO.( .V. .E.(.V. .E..V.)) .NÃO.( .V. .E. .V. ) .NÃO. .V. Resulta .F.
A única operação que podemos usar em uma expressão caractere, é a concatenação (+). “String” é o termo usado para identificar uma sequência de valores caracteres, logo, concatenação nada mais é do que juntar duas ou mais strings independentes.
Exemplo: “Bom Dia”+”João Carlos” Resulta Bom DiaJoão Carlos “Bom Dia ”+”João Carlos” Resulta Bom Dia João Carlos “ Bom Dia ”+” “+” João Carlos” Resulta Bom Dia João Carlos
Existem situações, em programação, onde precisamos montar expressões que envolvam dados de tipos diferentes.
A seguir, um exemplo de expressão mista:
Exemplo: (4 + 7 <= 6).OU.(.NÃO..V..E..F.).E.(“ABC” <> ”BCA”) (11 <= 6).OU.(.F. .E..F.).E.(.V. ) .F. .OU. .F. .E. .V. .F. .OU. .F. Resultado .F.
Usamos este comando quando houver a necessidade da interação do usuário com o sistema em execução, ou seja, quando o programa precisar de alguma informação do usuário para o seu bom andamento. Os periféricos usados para este fim são os de entrada de dados. O mais comum e que usaremos no curso é o teclado.
Sintaxe:
Exemplo:
Observação: Um algoritmo representado no fluxograma simplesmente pede para o usuário digitar um valor na variável salário.
Sintaxe: Leia <variável>
Exemplo: Leia Salario
Sintaxe:
scanf(“<formato da variável>”,&<variável>);
Exemplo:
O <formato da variável> deve ser trocado pela formatação corresponde à variável lida: int %d float %f char %c
<variável>
No lugar de <variável> coloque somente o Nome da Variável que será lida. O mesmo vale para o pseudocódigo e C.
Salario
início
Fim
scanf(“%f”,&salario);
Observação:
Repare que o <formato da variável> deve ser colocado entre aspas e antes da <variável> deve conter o & (e comercial).
Usamos este comando quando houver a necessidade da interação do sistema com o usuário, ou seja, quando o programa precisa fornecer alguma informação ao usuário. Os periféricos usados para este fim são os de saida de dados. O mais comum e que usaremos no curso é o monitor.
Sintaxe:
Exemplo:
Observação: Neste exemplo aparecerá a mensagem “Boa aula” na tela.
Sintaxe: Escreva <expressão>
Exemplos: Escreva salario // exibe o conteúdo da variável salário Escreva “salário” // exibe a palavra salário Escreva “Salário: R$ “, salario // exibe o texto ‘Salário: R$’ e o conteúdo da // variável ‘salario’ Escreva “Salário: R$ “, 3000 * 1.1 // Exibe o texto ‘salário: R$’ com o resultado
<expressão> é uma mensagem, variável, cálculo ou uma combinação dos anteriores.
<expressão>
início
fim
“Boa aula”
Exemplo:
Observação: O cálculo pode envolver dados variáveis ou dados constantes. Por exemplo, no calculo acima (n * 2) envolve a variável ‘n’ e a constante ‘2’. <variável> é o local onde será armazenado o valor resultante do <cálculo>. <cálculo> o seu resultado será atribuído na <variável>. Lembrete – Não existe um nome próprio para o comando processamento no pseudocódigo, como nos outros comandos, bastando assim colocar a expressão e atribuí-la, obrigatoriamente e exclusivamente, em uma variável.
Sintaxe: <variável> ← <cálculo>
Exemplo: reajuste ← salario * 1.
Sintaxe: <variável> = <cálculo>;
Exemplo: reajuste = salario * 1.25;
A seguir, daremos o exemplo de um algoritmo construído em suas três representações e na linguagem C. Problema: Dado o salário pelo usuário, fazer um algoritmo que calcule as férias (salário + 1/3), subtraindo a contribuição de INSS de 11%. Exibir as férias brutas, contribuição de INSS e as férias líquidas. Entrada:^7 2100.00 Saída:^8 2799.30 307.92 2491.
Passo 1: Obter o salário do funcionário (SAL) Passo 2: Calcular as Férias Bruta (FB) Passo 3: Calcular o INSS (INSS)
(^7) “Entrada” é o termo que usamos no enunciado dos Algoritmos para representar um exemplo de dado(s) inserido
pelo usuário. (^8) “Saída” é o termo que usamos no enunciado dos Algoritmos para representar os valor(es) que serão apresentados
depois do algoritmo ter processado as informações e finalizado.
início
fim
dobro ← n * 2
Passo 4: Calcular as Férias Líquida. (FL) Passo 5: Exibir um relatório detalhado das férias.
programa ferias_ var sal , fb : real fl , inss : real inicio escreva “Digite o salário:” leia sal // Passo 1 fb sal1.333 // Passo 2 inss* fb0.11 // Passo 3 fl* fb-inss // Passo 4 escreva“Férias Bruta:”,fb, “INSS:”,inss, “Férias líquida:”,fl // Passo 5 fim
#include <stdio.h> #include <stdlib.h>
int main() { float sal, fb, inss, fl; printf("Digite o salario:"); scanf("%f",&sal); // Passo 1 fb = sal * 1.333; // Passo 2 inss = fb0.11; // Passo 3*
A constante 1.333 vem do 1 que representa 100% + 0,333 que representa 33,3%, ou seja, um terço (1/3)
início
fim
fb ← sal * 1.
sal
inss ← fb * 0.
fl ← fb – inss
“Férias Bruta:”, fb , “INSS:”, inss , “Férias Liquida:”, fl
“Digite o salário:”
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Parte 1: Nome do Algoritmo
Parte 3: Corpo do Algoritmo
Parte 2: Declaração das variáveis
Reservaremos este espaço pra falar da linguagem C. Nesta material didático mostraremos na Linguagem C o suficiente para executar os algoritmos teóricos desenvolvidos em Fluxograma e Pseudocódigo, ou seja, o foco é desenvolver algoritmos: Lógica de Programação.
Em 1947, três cientistas do Laboratório Telefonia Bell, William Shockley, Walter Brattain, e John Bardeen criaram o transistor. A computação moderna teve início. Em 1956 no MIT o primeiro computador completamente baseado em transistores foi concluído, the TX-0. Em 1958 na Texas Instruments, Jack Kilby construiu o primeiro circuito integrado. Mas mesmo antes do primeiro circuito integrado existir, a primeira linguagem de alto nível já tinha sido escrita. Em 1954 Fortran, a Formula Translator, foi escrito. Começou como Fortran I em 1956. Fortran veio a ser Algol 58, o Algorithmic Language, em 1958. Algol 58 veio a ser Algol 60 em 1960. Algol 60 veio a ser CPL, o Combined Programming Language, em 1963. CPL veio a ser BCPL, Basic CPL, em 1967. BCPL veio a ser B em 1969. B veio a ser C em 1971. B foi a primeira língua da linhagem C diretamente, tendo sido criado no Bell Labs por Ken Thompson. B era uma linguagem interpretada, utilizada no início, em versões internas do sistema operacional UNIX. Thompson e Dennis Ritchie, também da Bell Labs, melhorou B, chamando-NB; novas prorrogações para NB criaram C, uma linguagem compilada. A maioria dos UNIX foi reescrito em NB e C, o que levou a um sistema operacional mais portátil. B foi, naturalmente, o nome de BCPL e C foi o seu sucessor lógico. A portabilidade do UNIX foi a razão principal para a popularidade inicial de ambos, UNIX e C; rather than creating a new operating system for each new machine, system programmers could simply write the few system dependent parts required for the machine, and write a C compiler for the new system; and since most of the system utilities were written in C, it simply made sense to also write new utilities in the language. Fonte e outras informações: http://pt.wikibooks.org/wiki/Programar_em_C/Hist%C3%B3ria_da_linguagem_C
Uma Linguagem de Programação (compilador) é um software, sendo assim o software deve ser instalado no computador. Existem versões em português e inglês. O problema é a versão do sistema operacional que comporta cada versão.
Até o Windows 7: http://dev-c.softonic.com.br/ Windows 8: http://dev-c.updatestar.com/pt/technical
Como sou avesso ao Windows 8 e não o uso, não tive como testar o ultimo link.
Para que todos consigam rodar um programa em C satisfatoriamente, falaremos sobre algumas peculiaridades da Linguagem C. Para tal utilizaremos o programa que fizemos no exemplo anterior com a exibição melhor ajustada.
Todos os comandos e palavras reservadas escrever em letras minúsculas; Coloca-se “;” (ponto e vírgula) em todo final de instrução; O compilador ignora espaços, tabulações e quebras de linha no meio do código; O padrão da linguagem C é criar variáveis com letras minúsculas. Caso uma ou mais letras seja maiúscula o compilador pode interpretar como outra variável; O programa só executa (“roda”) se estiver isento de erros de compilação; Linhas 1 e 2: Inclusão das bibliotecas^9 utilizadas no programa. Para nós, estas bibliotecas serão suficientes até o final do curso; Linhas 4, 5 e 17: É o corpo da linguagem C, todas as instruções devem ser escritas entre as linhas 6 e 16; Linha 6: Nesta linha estão declaradas as variáveis. Em C as variáveis podem ser declaradas em qualquer linha do programa; Linha 8: leitura da variável ‘sal’. No scanf() deve-se colocar o % e o formato da variável a ser lida (sem formatações ou \n) e antes da variável o &; Linha 9: Repare que quando vamos utilizar um dado constante em um programa neste caso o 1.333 usamos o PONTO para separar as casas decimais e não a vírgula; Os comentários em Linguagem C são // para comentar linha e /* */ para comentar múltiplas linhas. No exemplo acima os comentários estão na cor azul e Linhas 12, 13 e 14: nestas linhas estamos exibindo os valores com formatação de 2 casas decimais “%.2f”. Este tipo de formatação funciona somente com dados do tipo float. “\n” quebra a linha na execução do algoritmo.
(^9) Cada comando está contido em uma biblioteca