1. INTRODUÇÃO E CONCEITOS BÁSICOS

Documentos relacionados
INTRODUÇÃO À PROGRAMAÇÃO

Processamento de Dados aplicado à Geociências. AULA 3: Algoritmos computacionais Representação de Algoritmos Sintaxe Tipos de dados Expressões

Curso Superior de Análise e Desenvolvimento de Sistemas. Disciplina: : Algoritmo 2009 / 1

Capítulo 2 Introdução à Programação

I - CONCEITOS INICIAIS

Fábio Rodrigues / Israel Lucania

Capítulo 2 Introdução à Programação

Capítulo 1 Conceitos Básicos

O nome da variável é utilizado para identificação (para carga e posterior uso). Porém, são necessárias algumas regras para nomear essa variável:

4 Introdução ao Algoritmo

Algoritmos e Linguagem de Programação I

Introdução a Lógica de Programação

Pseudocódigo e Visualg

ALGORITMOS. Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Computação e Automação

Noções de algoritmos - Aula 1

Técnicas de Programação

Fundamentos de Programação

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Aula 4B. Lógica e Algoritmos. Profª. Fabiany

LÓGICA DE PROGRAMAÇÃO 1

Algoritmos - 1. Alexandre Diehl. Departamento de Física - UFPel

Algoritmos e Lógica de Programação Introdução e formas de representação

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados

Algoritmos e Técnicas de Programação Introdução Givanaldo Rocha de Souza

Conceitos Básicos de Algoritmos

INF1005: Programação I. Capítulo 2. Ivan Mathias Filho Algoritmo

Conceitos Básicos. Professor: Juliano Lucas Gonçalves.

Apêndice A. Pseudo-Linguagem

5. Expressões aritméticas

Programação Estruturada Aula VisualG

Algoritmos e Estrutura de Dados I Conceitos de Algoritmos. Prof. Elyssandro Piffer

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

ALGORITMOS E ESTRUTURA DE DADOS

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

01/08/2011. Tipos de dados Numéricos Alfanuméricos Lógicos. Numéricos. Tipos de dados. Dados Numéricos Inteiros. Dados Numéricos Reais.

Algoritmos e Estruturas de Dados I

Introdução à Ciência da Computação

PDF created with pdffactory trial version Elementos Básicos de Algoritmos. Elementos Básicos de Algoritmos Palavras Reservadas

SUMÁRIO PARTE I - INTRODUÇÃO... 8

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

Algoritmos e Programação

Algoritmos e Programação de Computadores Disciplina:

08/05/2012. Tipos de dados. Tipos de dados. Elementos Básicos. Tipos de dados. Elementos Básicos Tipos de dados. Dados e seus tipos:

LÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior

CONCEITOS DE ALGORITMOS

Algoritmos e Programação

Introdução a programação Visão geral

01/08/2011. Introdução Lógica Sequencia lógica Instruções Algoritmos Programas. Lógica. Lógica na programação. Instrução.

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Lógica de Programação e Algoritmos. Prof. André Y. Kusumoto

Introdução à Programação de Computadores Fabricação Mecânica

SSC304 Introdução à Programação Para Engenharias

Algoritmo e Programação Matemática

Introdução à Computação

Conceitos e Representação de Algoritmos

Português Estruturado

Portugol. Tiago Alves de Oliveira

Prof. Jorge Cavalcanti

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

Conceitos básicos de algoritmos

Algoritmos e Programação

- Aula 01, 02, 03 e 04 Apresentação da disciplina.

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

ALGORITMO. Professor: RODRIGO GOBBI TIPOS DE DADOS E INSTRUÇÕES PRIMITIVAS

Introdução à Computação

CAPÍTULO 2 TIPO DE DADOS

Definições de Algoritmos. Algoritmos e Programação I. Conceitos Básicos de Algoritmos. Relação entre Algoritmos e Programação

LINGUAGEM E TECNICAS DE PROGRAMAÇÃO

Fluxogramas e variáveis

Curso: Análise e Desenvolvimento de Sistemas. (Conceitos Práticos de Lógica de Programação)

Algoritmos - 2. Alexandre Diehl. Departamento de Física - UFPel

Programação em C. Victor Amorim dos Santos

Programação de Redes de Computadores

Programação Introdução

PROGRAMAÇÃO I. Introdução

Aula 08 Introdução à Algoritmos. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

TIPOS DE DADOS E VARIÁVEIS

Métodos para a construção de algoritmo

TECNOLOGIA EM REDES DE COMPUTADORES. computadores. Aula 4

Universidade Federal de Uberlândia Faculdade de Computação. Conceitos básicos de algoritmos Prof. Renato Pimentel. Computação

Pseudocódigo e visualg

Algoritmos Parte 2. Introdução à Ciência da Computação

Programação em C. Victor Amorim dos Santos

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

ALGORITMOS CONCEITOS PRELIMINARES. Prof. Angelo Augusto Frozza, M.Sc.

Programação I A Linguagem C. Prof. Carlos Alberto

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Programação em C. Victor Amorim dos Santos

Conceitos Básicos de Algoritmos

Introdução. Lógica e Algoritmo. Lógica e Algoritmo. Lógica e Algoritmo. Lógica e Algoritmo. Lógica e programação Aula 02

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior

Algoritmos. Conceitos e Comandos

TÉCNICO EM MANUTENÇÃO E SUPORTE EM INFORMÁTICA FORMA SUBSEQUENTE. Professora: Isabela C. Damke

Linguagem de Descrição de algoritmos

Instruções, dados e expressões

Transcrição:

1 1. INTRODUÇÃO E CONCEITOS BÁSICOS 1.1. OBJETIVOS DA DISCIPLINA Preparar o aluno para o desenvolvimento de soluções computacionais eficientes. Capacitar o aluno ao desenvolvimento de algoritmos capazes de resolver problemas simples e aplicá-los, na prática, em uma linguagem de programação pré-definida. SISTEMA DE AVALIAÇÃO O critério de avaliação deverá ser composto por instrumentos diversificados de avaliação, identificados como AV1, AV2 e AV3. A média da disciplina curricular será composta pela média aritmética das duas maiores notas. 1.2. CONCEITOS INICIAIS Desde os primórdios, o homem vem tentando resolver seus problemas com maior rapidez e o menor esforço possíveis, procurando automatizar as tarefas rotineiras. Isso possibilitou o aparecimento de instrumentos como a roda, roldana, alavanca, carro e até o computador. No entanto as tarefas que devem ser realizadas pelo computador, de forma automática, têm de ser anteriormente pensadas e colocadas em uma seqüência de ações para, posteriormente, serem inseridas na máquina. A essa seqüência de ações denomina-se Programa e à fase de formular soluções que gerem programas denomina-se Lógica de Programação. Programar é basicamente Construir Algoritmos. A meta principal de qualquer programador é resolver problemas por meio de soluções lógicas para obter resultados eficientes (corretos) e eficazes (com qualidade). Porém, se as soluções não forem bem planejadas (passo a passo), com certeza essa meta não será atingida. LÓGICA As pessoas utilizam a lógica no cotidiano sem perceber; chegam mesmo a citá-la, sem entender direito o seu significado. Segundo o dicionário Aurélio, a lógica é a coerência de raciocínio, de idéias, ou ainda a seqüência coerente, regular e necessária de acontecimentos, de coisas. Às vezes o raciocínio funciona desordenadamente. Quantas vezes você já ouviu as frases: E se acontecer aquilo?, ou É, mas eu não tinha pensado nisso! A lógica (do grego clássico λογική - logos, que significa palavra, pensamento, ideia, argumento, relato, razão lógica ou princípio lógico), é uma ciência de índole matemática e fortemente ligada à Filosofia. Já que o pensamento é a manifestação do conhecimento, e que o conhecimento busca a verdade, é preciso estabelecer algumas regras para que essa meta possa ser atingida. Assim, a lógica é o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um instrumento do pensar. A aprendizagem da lógica não constitui um fim em si. Ela só tem sentido enquanto meio de garantir que nosso pensamento proceda corretamente a fim de chegar a conhecimentos verdadeiros.

2 Podemos, então, dizer que a lógica trata dos argumentos, isto é, das conclusões a que chegamos através da apresentação de evidências que a sustentam. LÓGICA DE PROGRAMAÇÃO Falar em Lógica de Programação significa apenas contextualizar a lógica na programação de computadores, buscando a melhor seqüência de ações para solucionar determinado problema. Na programação de computadores, o nome dessa seqüência de ações é Algoritmo, que é, de maneira bem simples, a seqüência de passos ou ações para atingir um objetivo. Já ação é um fato que, a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e definido. Por exemplo, abrir uma porta é uma ação. Figura 1 Exemplo de ação. ALGORITMOS Um Algoritmo é uma seqüência finita de instruções bem claras, bem definidas e bem detalhadas que, quando colocadas em uma ordem lógica, nos levam a solução de um problema. Os Algoritmos independem da linguagem de programação a ser utilizada. O objetivo da construção de Algoritmos é que eles possam ser adaptados a qualquer linguagem de programação. O conceito de algoritmo é freqüentemente ilustrado pelo exemplo de uma receita, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada. Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema. Um algoritmo não representa, necessariamente, um programa de computador, e sim os passos necessários para realizar uma tarefa. Sua implementação pode ser feita por um computador, por outro tipo de autômato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instruções em mais ou menos tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode especificar que você vista primeiro as meias e os sapatos antes de vestir a calça enquanto outro algoritmo especifica que você deve primeiro vestir a calça e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil de executar que o segundo apesar de ambos levarem ao mesmo resultado. Não existe apenas um Algoritmo para a solução de um problema. Um Algoritmo pode ser numérico ou não. Um Algoritmo pode ter tantas entradas e saídas de dados, quantas forem necessárias, pode até não ter entradas, mas obrigatoriamente deverá ter pelo menos uma saída de dados que é o resultado do processamento. LINGUAGEM É um código de comunicação formado por sintaxe e semântica.

3 LINGUAGEM DE PROGRAMAÇÃO É uma notação formal para descrever a execução de algoritmos em computador. Também é formada por uma sintaxe e uma semântica. Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. Uma linguagem de programação é um conjunto de símbolos ( comandos, identificadores, caracteres ASCII, etc.... ) e regras de sintaxe que permitem a construção de sentenças que descrevem de forma precisa ações compreensíveis e executáveis para o computador. LINGUAGEM DE PROGRAMAÇÃO = SÍMBOLOS + REGRAS DE SINTAXE Uma linguagem de programação é uma notação formal para descrição de algoritmos que serão executados por um computador. Como todas as notações formais, uma linguagem de programação tem dois componentes: Sintaxe e Semântica. A sintaxe consiste em um conjunto de regras formais, que especificam a composição de programas a partir de letras, dígitos, e outros símbolos. Por exemplo, regras de sintaxe podem especificar que cada parênteses aberto em uma expressão aritmética deve corresponder a um parênteses fechado, e que dois comandos quaisquer devem ser separados por um ponto-e-vírgula. As regras de semântica especificam o significado de qualquer programa, sintaticamente válido, escrito na linguagem. TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Existem diversas linguagens de programação, cada uma com suas características específicas e com níveis de complexidade e objetivos diferentes, como pode ser visto na tabela abaixo: Tabela 1 Tipos de Linguagem de Programação PROCESSO DE CRIAÇÃO E EXECUÇÃO DE UM PROGRAMA Embora seja teoricamente possível a construção de computadores especiais, capazes de executar programas escritos em uma linguagem de programação qualquer, os computadores, existentes hoje em dia são capazes de executar somente programas em linguagem de baixo nível, a Linguagem de Máquina. Linguagens de Máquina são projetadas levando-se em conta os seguintes aspectos:

4 rapidez de execução de programas; custo de sua implementação; e 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 função de : facilidade de construção de programas; e confiabilidade dos programas. O PROBLEMA É: Como a linguagem de nível mais alto pode ser implementada em um computador, cuja linguagem é bastante diferente e de nível mais baixo? SOLUÇÃO: Através da tradução de programas escritos em linguagens de alto nível para a linguagem de baixo nível do computador. Para isso existem três tipos de programas tradutores : Montadores, Interpretadores e Compiladores. MONTADOR Efetua a tradução de linguagem de montagem (Assembly) para a linguagem de máquina, da seguinte forma: obtém a próxima instrução do Assembly; traduz para as instruções correspondentes em linguagem de máquina; executa as instruções em linguagem de máquina; e repete o passo 1 até o fim do programa. INTERPRETADOR Efetua a tradução a de uma linguagem de alto nível para linguagem de máquina da seguinte forma: obtém próxima instrução do código-fonte em linguagem de alto nível; traduz para as instruções correspondentes em linguagem de máquina; executa as instruções em linguagem de máquina; e repete o passo 1 até o fim do programa COMPILADOR Efetua a tradução de todo o código-fonte em linguagem de alto nível para as instruções correspondentes em linguagem de máquina, gerando o código-objeto do programa. Em seguida é necessário o uso de um outro programa (Link-Editor) que é responsável pela junção de diversos códigosobjeto em um único programa executável. POSSIBILIDADES DE ERROS NO PROGRAMA: Erros de Compilação : erros de digitação e de uso da sintaxe da linguagem. Erros de Link-Edição : erro no uso de bibliotecas de sub-programas necessárias ao programa principal. Erros de Execução : erro na lógica do programa (algoritmo). CRITÉRIOS DE QUALIDADE DE UM PROGRAMA Integridade: refere-se à precisão das informações manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrário o programa simplesmente não tem sentido; Clareza: refere-se à facilidade de leitura do programa. Se um programa for escrito com clareza, deverá ser possível a outro programador seguir a lógica do programa sem muito esforço, assim como o próprio autor do programa entendê-lo após ter estado um longo período afastado dele. O Pascal favorece a escrita de programas com clareza e legibilidade;

5 Simplicidade: a clareza e precisão de um programa são normalmente melhoradas tornando seu entendimento o mais simples possível, consistente com os objetivos do programa. Muitas vezes tornase necessário sacrificar alguma eficiência de processamento, de forma a manter a estrutura do programa mais simples; Eficiência: refere-se à velocidade de processamento e a correta utilização da memória. Um programa deve ter desempenho SUFICIENTE para atender às necessidade do problema e do usuário, bem como deve utilizar os recursos de memória de forma moderada, dentro das limitações do problema; Modularidade: consiste no particionamento do programa em módulos menores bem identificáveis e com funções específicas, de forma que o conjunto desses módulos e a interação entre eles permite a resolução do problema de forma mais simples e clara; Generalidade: é interessante que um programa seja tão genérico quanto possível de forma a permitir a reutilização de seus componentes em outros projetos. 1.3. REPRESENTAÇÃO DE ALGORITMOS Existem diversas formas de representação de algoritmos, mas não há um consenso com relação à melhor delas. Algumas formas de representação de algoritmos tratam dos problemas apenas em nível lógico, abstraindo-se de detalhes de implementação muitas vezes relacionados com alguma linguagem de programação específica. Por outro lado, existem formas de representação de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idéia principal, o algoritmo, dificultando seu entendimento. Dentre as formas de representação de algoritmos mais conhecidas, sobressaltam: a Descrição Narrativa o Fluxograma Convencional o Pseudocódigo, também conhecido como Linguagem Estruturada ou Portugol. Descrição Narrativa Nesta forma de representação os algoritmos são expressos diretamente em linguagem natural. Como por exemplo, têm-se os algoritmos seguintes: Troca de um pneu furado: Afrouxar ligeiramente as porcas Suspender o carro Retirar as porcas e o pneu Colocar o pneu reserva Apertar as porcas Abaixar o carro Dar o aperto final nas porcas. Cálculo da média de um aluno: Obter as notas da primeira e da segunda prova Calcular a média aritmética entre as duas Se a média for maior ou igual a 7, o aluno foi aprovado, senão ele foi reprovado Esta representação é pouco usada na prática porque o uso de linguagem natural muitas vezes dá oportunidade a más interpretações, ambigüidades e imprecisões.

6 Por exemplo, a instrução afrouxar ligeiramente as porcas no algoritmo da troca de pneus está sujeita a interpretações diferentes por pessoas distintas. Uma instrução mais precisa seria: afrouxar a porca, girando-a de 30 no sentido anti-horário. Fluxograma ou Diagrama de Blocos É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam ações (instruções, comandos) distintos. Tal propriedade facilita o entendimento das idéias contidas nos algoritmos. Nota-se que os fluxogramas convencionais preocupam-se com detalhes de nível físico da implementação do algoritmo. Por exemplo, figuras geométricas diferentes são adotadas para representar operações de saída de dados realizadas em dispositivos distintos, como uma unidade de armazenamento de dados ou um monitor de vídeo. A figura 2 mostra as principais formas geométricas usadas em fluxogramas. Figura 2 - Principais formas geométricas usadas em fluxogramas. De modo geral, o fluxograma se resume a um único símbolo inicial, por onde a execução do algoritmo começa, e um ou mais símbolos finais, que são pontos onde a execução do algoritmo se encerra. Partindo do símbolo inicial, há sempre um único caminho orientado a ser seguido, representando a existência de uma única seqüência de execução das instruções. Isto pode ser melhor visualizado pelo fato de que, apesar de vários caminhos poderem convergir para uma mesma figura do diagrama, há sempre um único caminho saindo desta. Exceções a esta regra são os símbolos finais, dos quais não há nenhum fluxo saindo, e os símbolos de decisão, de onde pode haver mais de um caminho de saída (normalmente dois caminhos), representando uma bifurcação no fluxo.

7 Um diagrama de blocos é uma forma de fluxograma usada e desenvolvida por profissionais da programação, tendo como objetivo descrever o método e a seqüência do processo dos planos num computador. Pode ser desenvolvido em qualquer nível de detalhe que seja necessário. Quando se desenvolve um diagrama para o programa principal, por exemplo, seu nível de detalhamento pode chegar até as instruções. Esta ferramenta usa diversos símbolos geométricos, os quais estabelecerão as seqüências de operações a ser efetuadas em um processamento computacional. Após a elaboração do diagrama de bloco, é realizada a codificação do programa. Figura 3 Exemplo de fluxograma: cálculo de média aritmética. Pseudocódigo (Português Estruturado ou Portugol) Esta forma de representação de algoritmos é bastante rica em detalhes e, por assemelhar-se bastante à forma em que os programas são escritos, encontra muita aceitação, sendo portanto a forma de representação de algoritmos que será adotada nesta disciplina. Na verdade, esta representação é suficientemente geral para permitir que a tradução de um algoritmo nela representado para uma linguagem de programação específica seja praticamente direta. Representação de Um Algoritmo na Forma de Pseudocódigo A representação de um algoritmo na forma de pseudocódigo é a seguinte: Algoritmo <nome_do_algoritmo>; <declaração_de_variáveis>; <subalgoritmos>; Inicio <corpo_do_algoritmo>; Fim.

8 onde: Algoritmo é uma palavra que indica o início da definição de um algoritmo em forma de pseudocódigo. <nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a finalidade de distinguí-lo dos demais. <declaração_de_variáveis> consiste em uma porção opcional onde são declaradas as variáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos. <subalgoritmos> consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos. Início e Fim são respectivamente as palavras que delimitam o início e o término do conjunto de instruções do corpo do algoritmo. O caractere ; (ponto e vírgula) é utilizado para representar o encerramento de uma operação no algoritmo. Como exemplo, a seguir é mostrado a representação do algoritmo de cálculo da média de um aluno na forma de um pseudocódigo. Algoritmo Media; Var N1, N2, Media; Inicio Leia N1, N2; Media (N1+N2)/2; Se Média >= 7 Entao Senao Fim. Escreva Aprovado Escreva Reprovado ; Diretrizes para a Elaboração de Algoritmos As diretrizes apresentadas abaixo são genéricas e podem ser usadas ou adaptadas na organização dos passos que comporão a solução de um determinado problema (ou seja, na criação de um algoritmo para atingir um objetivo determinado). 1. Identificação do problema: determinar o que se quer resolver ou qual objetivo a ser atingido. 2. Identificação das entradas de dados : informações fornecidas, a partir das quais se desenvolverão os cálculos. 3. Identificação das saídas de dados : as informações a serem geradas como resultado. 4. Identificação das regras e limitações do problema ou das limitações do agente executante (ex: se o agente fosse uma calculadora não-científica, iriam existir limitações no cálculo de funções, por exemplo). 5. Determinação do que deve ser feito para transformar as entradas em saídas. Neste ponto deve ser determinada a seqüência de ações que leve à solução do problema. Para isto é preciso: 5.1. observar as regras e limitações já identificadas; 5.2. determinar ações possíveis de serem realizadas pelo agente. 6. Construção do Algoritmo: utilizando uma das formas de representação de algoritmos.

9 7. Teste da solução: execução de todas as ações do algoritmo, seguindo o fluxo estabelecido para verificar se ele está realmente gerando os resultados esperados ou detectar possíveis erros em sua descrição. Exemplo: Imagine o seguinte problema: Calcular a média final dos alunos da 6ª Série. Os alunos realizarão quatro provas: P1, P2, P3 e P4. A Média Final é calculada por: (P1 + P2 + P3 + P4) / 4. Para montar o algoritmo proposto, faremos três perguntas: a) Quais são os dados de entrada? R: Os dados de entrada são P1, P2, P3 e P4 b) Qual será o processamento a ser utilizado? R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro) (P1 + P2 + P3 + P4)/4 c) Quais serão os dados de saída? R: O dado de saída será a média final 1.4. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que comandam o funcionamento da máquina e determinam a maneira como devem ser tratados os dados. Os dados propriamente ditos, que correspondem à porção das informações a serem processadas pelo computador. A classificação apresentada a seguir não se aplica a nenhuma linguagem de programação específica; pelo contrário, ela sintetiza os padrões utilizados na maioria das linguagens. Tipos Inteiros São caracterizados como tipos inteiros, os dados numéricos positivos ou negativos, excluindo-se destes qualquer número fracionário. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024 entre outros. Tipos Reais São caracterizados como tipos reais, os dados numéricos positivos e negativos e números fracionários. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, -45.987, entre outros. Tipos Caracteres São caracterizados como tipos caracteres, as seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas ( ). Este tipo de dado também é

10 conhecido como alfanumérico, string, literal ou cadeia. Como exemplo deste tipo de dado, tem-se os valores: Programação, Rua Alfa, 52 Apto 1, Fone 574-9988, 04387-030,, 7 entre outros. Tipos Lógicos São caracterizados como tipos lógicos os dados com valor verdadeiro e falso, sendo que este tipo de dado poderá representar apenas um dos dois valores. Ele é chamado por alguns de tipo booleano, devido à contribuição do filósofo e matemático inglês George Boole na área da lógica matemática. 1.5. VARIÁVEIS E CONSTANTES Armazenamento de Dados na Memória Para armazenar os dados na memória, imagine que a memória de um computador é um grande arquivo com várias gavetas, onde cada gaveta pode armazenar apenas um único valor (seja ele numérico, caractere ou lógico). Se é um grande arquivo com várias gavetas, é necessário identificar com um nome a gaveta que se pretende utilizar. Desta forma o valor armazenado pode ser utilizado a qualquer momento. Variáveis Conceituação e Utilização Têm-se como definição de variável tudo aquilo que é sujeito a variações, que é incerto, instável ou inconstante. E quando se fala de computadores, temos que ter em mente que o volume de informações a serem tratadas é grande e diversificado. Desta forma, os dados a serem processados serão bastante variáveis. Como visto anteriormente, informações correspondentes a diversos tipos de dados são armazenadas nas memórias dos computadores. Para acessar individualmente cada uma destas informações, em princípio, seria necessário saber o tipo de dado desta informação (ou seja, o número de bytes de memória por ela ocupados) e a posição inicial deste conjunto de bytes na memória. Percebe-se que esta sistemática de acesso a informações na memória é bastante ilegível e difícil de se trabalhar. Para contornar esta situação criou-se o conceito de variável, que é uma entidade destinada a guardar uma informação. Basicamente, uma variável possui três atributos: um nome, um tipo de dado associado à mesma e a informação por ela guardada. Toda variável possui um nome que tem a função de diferenciá-la das demais. Cada linguagem de programação estabelece suas próprias regras de formação de nomes de variáveis. Adotaremos para os algoritmos, as seguintes regras: um nome de variável deve necessariamente começar com uma letra; um nome de variável não deve conter nenhum símbolo especial, exceto a sublinha ( _ ) e nenhum espaço em branco; um nome de variável não poderá ser uma palavra reservada a uma instrução de programa. Exemplos de nomes de variáveis:

11 Salario correto Salário errado (contém acentuação) 1ANO errado (não começou com uma letra) ANO1 correto a casa errado (contém o caractere branco) SAL/HORA errado (contém o caractere / ) SAL_HORA correto _DESCONTO errado (não começou com uma letra) Obviamente é interessante adotar nomes de variáveis relacionados às funções que serão exercidas pelas mesmas dentro de um programa. Outro atributo característico de uma variável é o tipo de dado que ela pode armazenar. Este atributo define a natureza das informações contidas na variável. Por último há o atributo informação, que nada mais é do que a informação útil contida na variável. Uma vez definidos, os atributos nome e tipo de dado de uma variável não podem ser alterados e assim permanecem durante toda a sua existência, desde que o programa que a utiliza não seja modificado. Por outro lado, o atributo informação está constantemente sujeito a mudanças de acordo com o fluxo de execução do programa. Em resumo, o conceito de variável foi criado para facilitar a vida dos programadores, permitindo acessar informações na memória dos computadores por meio de um nome, em vez do endereço de uma célula de memória. Definição de Variáveis em Algoritmos Todas as variáveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessário para permitir que o compilador reserve um espaço na memória para as mesmas. Mesmo que algumas linguagens de programação (como BASIC e FORTRAN) dispensam esta definição, uma vez que o espaço na memória é reservado à medida que novas variáveis são encontradas no decorrer do programa, nos algoritmos usaremos a definição de variáveis por assemelhar-se com as principais linguagens de programação como Pascal e C. Nos algoritmos, todas as variáveis utilizadas serão definidas no início do mesmo, por meio de um comando de uma das seguintes formas: VAR <nome_da_variável> : <tipo_da_variável>; ou VAR <lista_de_variáveis> : <tipo_das_variáveis>; a palavra-chave VAR deverá estar presente sempre e será utilizada um única vez na definição de um conjunto de uma ou mais variáveis;

12 numa mesma linha poderão ser definidas uma ou mais variáveis do mesmo tipo; Para tal, deve-se separar os nomes das mesmas por vírgulas; variáveis de tipos diferentes devem ser declaradas em linhas diferentes. Exemplos de definição de variáveis: VAR nome: caracter[30]; idade: inteiro; salario: real; tem_filhos: lógico; No exemplo acima foram declaradas quatro variáveis: a variável nome, capaz de armazenar dados caractere de comprimento 35 (35 caracteres); a variável idade, capaz de armazenar um número inteiro; a variável salario, capaz de armazenar um número real; a variável tem_filhos, capaz de armazenar uma informação lógica. Conceito e Utilidade de Constantes Têm-se como definição de constante tudo aquilo que é fixo ou estável. Existirão vários momentos em que este conceito deverá estar em uso, quando desenvolvermos programas. É comum definirmos uma constante no início do programa, e a utilizarmos no decorrer do programa, para facilitar o entendimento, a programação ou então para poupar tempo no caso de ter que alterar o seu valor, de modo que alterando uma única vez a declaração da constante, todos os comandos e expressões que a utilizam são automaticamente atualizados. Definição de Constantes em Algoritmos Nos algoritmos, todas as constante utilizadas serão definidas no início do mesmo, por meio de um comando da seguinte forma: CONST <nome_da_constante> <valor>; Exemplo de definição de constantes: CONST pi 3.14159; nome_da_empresa Enxuga Gelo SA ; 1.6. EXPRESSÕES E OPERADORES OPERADORES Operadores são elementos fundamentais que atuam sobre operandos e produzem um determinado resultado. Por exemplo, a expressão 3 + 2 relaciona dois operandos (os números 3 e 2) por meio do operador (+) que representa a operação de adição.

13 De acordo com o número de operandos sobre os quais os operadores atuam, os últimos podem ser classificados em: binários, quando atuam sobre dois operandos. Esta operação é chamada diádica. Ex.: os operadores das operações aritméticas básicas (soma, subtração, multiplicação e divisão). unários, quando atuam sobre um único operando. Esta operação é chamada monádica. Ex.: o sinal de (-) na frente de um número, cuja função é inverter seu sinal. Outra classificação dos operadores é feita considerando-se o tipo de dado de seus operandos e do valor resultante de sua avaliação. Segundo esta classificação, os operandos dividem-se em aritméticos, lógicos e literais. Esta divisão está diretamente relacionada com o tipo de expressão onde aparecem os operadores. Um caso especial é o dos operadores relacionais, que permitem comparar pares de operandos de tipos de dados iguais, resultando sempre num valor lógico. Operadores de Atribuição Um operador de atribuição serve para atribuir um valor a uma variável. Em Algoritmo usamos o operador de atribuição: (linguagem Pascal, utilizada em alguns livros de lógica de programação) ou (símbolo utilizado pela maioria dos autores) A sintaxe de um comando de atribuição é: NomedaVariável expressão; (utilizaremos esta forma ao longo da disciplina) Ou NomedaVariável = expressão; (esta forma será utilizada quando for utilizada a linguagem de programação C) A expressão localizada no lado direito do sinal de igual é avaliada e armazenado o valor resultante na variável à esquerda. O nome da variável aparece sempre sozinho, no lado esquerdo do sinal de igual deste comando. Operadores Aritméticos Os operadores aritméticos se relacionam às operações aritméticas básicas, conforme a tabela abaixo:

14 Tabela 2 Operadores aritméticos. A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expressão. Operadores Relacionais Os operadores relacionais são operadores binários que devolvem os valores lógicos verdadeiro e falso. Tabela 3 Operadores relacionais. Estes valores são somente usados quando se deseja efetuar comparações. Comparações só podem ser feitas entre objetos de mesma natureza, isto é, variáveis do mesmo tipo de dado. O resultado de uma comparação é sempre um valor lógico. Por exemplo, digamos que a variável inteira escolha contenha o valor 7. A primeira das expressões a seguir fornece um valor falso, e a segunda um valor verdadeiro: escolha <= 5 escolha > 5 Com valores string, os operadores relacionais comparam os valores ASCII dos caracteres correspondentes em cada string. Uma string é dita "menor que" outra se os caracteres correspondentes tiverem os números de códigos ASCII menores. Por exemplo, todas as expressões a seguir são verdadeiras:

15 algoritmo > ALGORITMO ABC < EFG Pascal < Pascal compiler Observe que as letras minúsculas têm códigos ASCII maiores do que os das letras maiúsculas. Observe também que o comprimento da string se torna o fator determinante na comparação de duas strings, quando os caracteres existentes na string menor são os mesmos que os caracteres correspondentes na string maior. Neste caso, a string maior é dita maior que a menor. Operadores Lógicos Os operadores lógicos ou booleanos são usados para combinar expressões relacionais. Também devolvem como resultado valores lógicos: verdadeiro ou falso. Tabela 4 Operadores lógicos. Uma expressão relacional ou lógica retornará falso para o valor lógico falso e verdadeiro para o valor lógico verdade. Fornecendo dois valores ou expressões lógicas, representadas por expressão1 e expressão2, podemos descrever as quatro operações lógicas a seguir: expressão1 E expressão2 é verdadeiro somente se ambas, expressão1 e expressão2, forem verdadeiras. Se uma for falsa, ou se ambas forem falsas, a operação E também será falsa. expressão1 OU expressão2 é verdadeiro se tanto a expressão1 como a expressão2 forem verdadeiras. As operações OU só resultam em valores falsos se ambas, expressão1 e expressão2, forem falsas. NÃO expressão1 avalia verdadeiro se expressão1 for falsa; de modo contrário, a expressão NÃO resultará em falso, se expressão1 for verdadeira. Operadores Literais Os operadores que atuam sobre caracteres variam muito de uma linguagem para outra. O operador mais comum e mais usado é o operador que faz a concatenação de strings: toma-se duas strings e acrescenta-se (concatena-se) a segunda ao final da primeira. O operador que faz esta operação é: + Por exemplo, a concatenação dos strings ALGO e RITMO é representada por: ALGO + RITMO e o resultado de sua avaliação é: ALGORITMO PRIORIDADE ENTRE OS OPERADORES

16 A maioria das linguagens de programação utiliza as seguintes prioridades de operadores: 1º - Efetuar operações embutidas em parênteses (prioridade maior para os parênteses mais internos); 2º - Efetuar funções; 3º - Efetuar multiplicação e/ou divisão; 4º - Efetuar adição e/ou subtração; 5º - Operadores relacionais; 6º - Operadores lógicos (NAO, E e OU, na sequência de maior prioridade para menor). EXPRESSÕES O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão ou fórmula matemática, onde um conjunto de variáveis e constantes numéricas relacionam-se por meio de operadores aritméticos compondo uma fórmula que, uma vez avaliada, resulta num valor. Expressões Aritméticas Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, seja ele inteiro ou real. Somente o uso de operadores aritméticos, variáveis numéricas e parênteses é permitido em expressões deste tipo. Expressões Lógicas Expressões lógicas são aquelas cujo resultado da avaliação é um valor lógico verdadeiro ou falso. Nestas expressões são usados os operadores relacionais e os operadores lógicos, podendo ainda ser combinados com expressões aritméticas. Quando forem combinadas duas ou mais expressões que utilizem operadores relacionais e lógicos, os mesmos devem utilizar os parênteses para indicar a ordem de precedência. Expressões Literais Expressões literais são aquelas cujo resultado da avaliação é um valor literal (caractere). Neste tipo de expressões só é usado o operador de literais (+). Avaliação de Expressões Expressões que apresentam apenas um único operador podem ser avaliadas diretamente. No entanto, à medida que as mesmas vão tornando-se mais complexas com o aparecimento de mais de um operando na mesma expressão, é necessária a avaliação da mesma passo a passo, tomando um operador por vez. A seqüência destes passos é definida de acordo com o formato geral da expressão, considerando-se a prioridade (precedência) de avaliação de seus operadores e a existência ou não de parênteses na mesma. As seguintes regras são essenciais para a correta avaliação de expressões: 1. Deve-se observar a prioridade dos operadores, conforme mostrado nas tabelas de operadores: operadores de maior prioridade devem ser avaliados primeiro. Se houver empate com relação à precedência, então a avaliação se faz da esquerda para a direita.

17 2. Os parênteses usados em expressões tem o poder de roubar prioridade dos demais operadores, forçando a avaliação da subexpressão em seu interior. 3. Entre os quatro grupos de operadores existentes, a saber, aritmético, lógico, literal e relacional, há uma certa prioridade de avaliação: os aritméticos e literais devem ser avaliados primeiro; a seguir, são avaliadas as subexpressões com operadores relacionais e, por último os operadores lógicos são avaliados. Exercícios 1. Se X possui o valor 15 e foram executadas as seguintes instruções: X X + 3; X X 6; X X / 2; X 3 * X; Qual será o valor armazenado em X? 2. Apresente os resultados para as seguintes expressões: a) 5+9+7+8/2 = b) 1-4*3/6-2**3 = c) 3**2-4/2+(5-3*5)/2 = d) 2 < 5 E 15 / 3 = 5 = e) 2 < 5 OU 15 / 3 = 5 = f) 12*3+(3/2) = g) 750*0.18/100 = h) (1258*3)/100+5 = i) 23+2-3**2+(5/3) = j) (((12+2)/3)+2)-(100-(34-54/2)) = k) 18*4/3+54/28*6+7-2 = l) 4*3*1/2/3+5+2-1-3 = 3. Tendo as variáveis SALARIO, IR e SALLIQ, e considerando os valores abaixo. Informe se as expressões são verdadeiras ou falsas. SALARIO IR SALLIQ EXPRESSÃO V OU F 100,00 0,00 100 (SALLIQ>=100,00) 200,00 10,00 190,00 (SALLIQ<190,00) 300,00 15,00 285,00 (SALLIQ=SALARIO-IR) 4. Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou falsas. a) (A+C) > B ( ) b) B >= (A + 2) ( ) c) C = (B A) ( ) d) (B + A) <= C ( ) e) (C+A) > B ( ) 5. Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo são verdadeiras ou falsas. a) (A > C) E (C <= D) ( ) b) (A+B) > 10 OU (A + B ) = (C + D) ( ) c) (A>=C) E (D >= C) ( ) 6. Com base na tabela-verdade, determine o resultado lógico das expressões mencionadas (Verdadeira ou Falsa). Considere para as respostas os seguintes valores: X=1, A=3, B=5, C=8 e D=7. a) NAO (X > 3) b) (X < 1) NAO (B > D) c) NAO (D < 0) E (C > 5) d) NAO ((X > 3) OU (C < 7)) e) (A > B) OU (C > B) f) (X >= 2)

18 g) (X < 1) E (B >= D) h) ( D < 0) OU (C > 5) i) NAO (D > 3) OU (NAO (B < 7)) j) (A > B) OU (NAO (C > B)) 7. Suponha que w=f, x=v e z=v. Resolva as expressões: a) x OU z E w b) z OU x E x c) z OU z OU w E x d) x E z E w OU NAO w b) x OU NAO z E w OU z E x OU NAO w c) NAO w OU z OU x E x NAO z E w d) z E z OU x OU z E w E x OU z OU w OU z 8. Suponha A=127, B=10, C=5, D=falso e E=verdadeiro. Qual é o valor produzido por cada uma das sentenças abaixo? a) não D b) D e E c) não A>B d) A-B>C e) B-C<0 ou A>B f) (A>B) ou (B<C) g) não (A<B) h) A/5>10 e E i) D e E ou não B<C j) D ou E e A/5-B>B k) (D e E) ou (A=B) BIBLIOGRAFIA BÁSICA: MANZANO, José Augusto Navarro Garcia & OLIVEIRA, Jair Figueiredo de. Algoritmos: Lógica para o desenvolvimento de programação. São Paulo: Ed. Érica, 2004. MIZRAHI, Victorine Viviane. Treinamento em Linguagem C Módulo I. São Paulo: Ed. Makron Books, 1990. FORBELLONE, André Luiz Villar & EBERSPACHER, Henri Frederico. Lógica de Programação. Ed. Pearson Brasil, 2000. BIBLIOGRAFIA REFERÊNCIA: SCHILDT, Hebert. C Completo e total. Ed. Makron Books, 1995. ARRER & BECKER, Cristiano Gonçalves & FARIA, Eduardo Chaves. Algoritmos Estruturados. Ed. LTC, 1999 PREISS, Bruno R. Estrutura de dados e Algoritmos. Ed. Campos, 2001. BIBLIOGRAFIA COMPLEMENTAR: PEREIRA, Silvio do Lago Pereira. Estruturas de Dados Fundamentais - Conceitos e Aplicações. Editora Érica, 2ª edição. São Paulo, 2000. SALIBA, Walter Luís Caram. Técnicas de Programação: Uma Abordagem Estruturada. Makron-McGraw-Hill. São Paulo, 1992. ASCENCIO, A. F. G. Lógica de Programação com Pascal. Makron Books. São Paulo. FARRER, H. et al. Algoritmos Estruturados. Editora LTC. São Paulo.