Lógica de Programação. Algoritmos e implementação



Documentos relacionados
Algoritmos com VisuAlg

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Orientação a Objetos

PROGRAMAÇÃO DE COMPUTADORES (Teoria)

Programando em C# Orientado a Objetos. By: Maromo

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Algoritmos e Programação de Computadores

Resolução de problemas e desenvolvimento de algoritmos

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

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Dadas a base e a altura de um triangulo, determinar sua área.

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

Aula Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof. Fábio Nelson.

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

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Introdução a Algoritmos Parte 04

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP

Processamento da Informação Teoria. Algoritmos e Tipos de dados

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Aluísio Eustáquio da Silva

3. Tipos de Dados, Constantes e Variáveis.

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Introdução a linguagem C Estruturas de decisão

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Algoritmos Computacionais ( Programas )

Resumo da Matéria de Linguagem de Programação. Linguagem C

Algoritmos e Programação _ Departamento de Informática

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

ICC Introdução para JavaScript

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

ESTRUTURA CONDICIONAL

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Componentes da linguagem C++

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

AULA 12 FUNÇÕES Disciplina: Algoritmos e POO Professora: Alba Lopes alba.lopes@ifrn.edu.br

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

PROGRAMADOR JAVA. Aula 0 20 semanas. Instrutor : Léo Billi leo.billi@gmail.com

Programação de Computadores I Pseudocódigo PROFESSORA CINTIA CAETANO

1.1. Organização de um Sistema Computacional

20 Caracteres - Tipo char

Algoritmos e Programação. Prof. Tarcio Carvalho

Lista de Exercícios. Vetores

Introdução à Programação

Introdução a Java. Hélder Nunes

CURSO BÁSICO DE PROGRAMAÇÃO AULA 7

2. Representação Numérica

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Introdução à Programação e Algoritmos. Aécio Costa

VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior Felipe Schneider Costa

PROGRAMANDO EM C# ORIENTADO A OBJETOS

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Algoritmos e Programação Parte Teórica

Organização e Arquitetura de Computadores I

e à Linguagem de Programação Python

OPERADORES E ESTRUTURAS DE CONTROLE

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle

Aula 11 Introdução ao Pseudocódigo. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

CURSO DE PROGRAMAÇÃO EM JAVA

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

13 Números Reais - Tipo float

Aula 2 Variáveis. Precisamos armazenar os tipos de dados da aula anterior (inteiros, reais, literais e lógicos) em memória. Como fazer?

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

Algoritmos em Javascript

JSP - ORIENTADO A OBJETOS

1. Estrutura de seleção. Seleção: algumas etapas (passos) do algoritmo são executadas dependendo do resultado de uma condição

Programação para Computação

Conceitos Importantes:

Introdução aos cálculos de datas

Programação Elementar de Computadores Jurandy Soares

Algoritmo e Programação

Excel Planilhas Eletrônicas

I Lista de Exercícios

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

AMBIENTE DE PROGRAMAÇÃO PYTHON

Aula 3 - Sistemas de Numeração

Roteiro 1: Dados, variáveis, operadores e precedência

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados)

Algoritmos e Programação Estruturada

Prof. Esp. Adriano Carvalho

Organização de programas em Java. Vanessa Braganholo

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Programação Básica em Arduino Aula 2

ERROS MAIS COMUNS COMETIDOS EM PROGRAMAS E ALGORITMOS

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

Capítulo 2: Introdução à Linguagem C

Sistemas de Numeração

Sistemas de Numerações.

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO

Estruturas de Repetição

Organização de programas em Python. Vanessa Braganholo

Lição 1 - Criação de campos calculados em consultas

Python Condicionais e Loops. Introdução à Programação SI1

Transcrição:

Lógica de Programação Algoritmos e implementação Este material aborda os conceitos básicos de lógica de programação, com o intuito de auxiliar o aluno nos seus primeiros passos na programação de computadores. Versão: 1.03 Me. Marcos Roberto de Moraes - Maromo 01/08/2013

Lista de Figuras Figura 1 - Planilha Eletrônica... 5 Figura 2 - Trecho do programa Chrome em Binário (Fonte: K19)... 6 Figura 3 - Trecho de programa na Linguagem C#... 7 Figura 4 Compilação... 7 Figura 5 - Ilustração do Funcionamento de uma Máquina Virtual (Fonte: K19)... 8 Figura 9 Fila de Pessoas... 9 Figura 10 - Receita (Fonte: obadenbaden.com.br)... 10 Figura 11 - Principais formas usadas em fluxogramas (símbolos mais usados)... 12 Figura 12 - Fluxograma para soma de dois valores... 13 Figura 13 - Zebra (imagem construída em ASCII)... 15 Figura 14 - Exemplo de Tipos de dados na Linguagem C... 16 Figura 15 - Exemplo de declaração em C#... 17 Figura 16 - Exemplo de declaração em Java... 17 Figura 17 - Exemplo de inicialização em C#... 17 Figura 18 - Exemplo de inicialização em Java... 18 Figura 19 - Exemplo de nomes de variáveis válidos utilizando caracteres especiais em outros idiomas.... 20 Figura 20 - Operadores Matemáticos... 21 Figura 21 - Exemplo de uso de operador de verificação de igualdade em C#... 22 Figura 22 - Exemplo de uso do operador && em C#... 22 Figura 23 - Exemplo de Tabela da Verdade... 22 Figura 24 Fluxograma: média de duas notas... 26 Figura 25 - Exemplo If/then/else... 27 Figura 26 - Fluxograma com cadeia de ifs... 28 Figura 27 - Cadeia de Ifs em C#... 29 Figura 28 - Código Fatorial em C# (Condição pré-testada )... 35 Figura 29 - Código Fatorial em C# (Condição pós-testada )... 36 Figura 30 - Código Fatorial em C# (Comando for)... 37 Figura 31 - Exemplo de um algoritmo para o cálculo da média de 4 notas... 41 Figura 32 - Programa Visualg... 42 1

Sumário 1 Introdução... 4 2 Programação... 5 2.1 Programa... 5 2.2 Linguagem de Máquina... 6 2.3 Linguagem de Programação... 6 2.4 Compilador... 7 2.5 Máquinas Virtuais... 7 2.6 Exercícios de Fixação... 8 3 Lógica de Programação... 9 3.1 Lógica... 9 3.2 Algoritmos e Implementação... 10 3.3 Representação dos Algoritmos... 11 3.3.1 Linguagem Natural... 11 3.3.2 Fluxogramas... 11 3.3.3 Pseudocódigo... 13 3.4 Exercício de Fixação... 14 4 Tipos de Dados... 15 4.1 Constantes... 16 4.1.1 Constantes Inteiras... 16 4.2 Variáveis... 16 4.2.1 Declaração... 17 4.2.2 Inicialização... 17 4.3 Tipos de variáveis... 18 4.3.1 Tipos primitivos em C... 18 4.3.2 Tipos primitivos em C#... 18 4.3.3 Tipos primitivos em Java... 19 4.4 Convenção para a nomenclatura... 19 4.5 Regras para a nomenclatura... 20 4.6 Exercício de Fixação... 20 5 Operadores... 21 5.1 Tabela Verdade... 22 5.1.1 Exercícios de Fixação... 23 6 Controle de Fluxo - Decisão... 26 6.1 Estrutura SE ENTÃO SENÃO / IF... THEN... ELSE... 26 7 Comandos de Fluxo - Estruturas de Repetição... 31 2

7.1 Tipos ou modelos de repetição... 31 7.2 Repetição pré-testada... 31 7.3 Repetição pós-testada... 32 7.4 Repetição com variável de controle... 33 7.5 Iteração de coleção... 34 7.6 Exemplo em três formas:... 34 7.7 Exercícios de Fixação... 38 8 Linguagem de Projeto de Programação... 41 8.1 Linguagem PDL... 42 8.1.1 Tipos de Dados... 43 8.1.2 Nomes de Variáveis e sua Declaração... 43 8.1.3 Constantes e Comando de Atribuição... 44 8.2 Exercícios de Fixação... 45 9 Bibliografia... 46 3

1 Introdução Com base nas experiências que tive com os meus alunos nos últimos 15 anos, ao elaborar esta apostila resolvi usar uma abordagem um pouco diferente em relação ao que é apresentado na maioria dos livros sobre o assunto. Aqui se pretende embasar a teoria por meio da prática em linguagem de programação C e Pascal. A cada capítulo, serão apresentados diversos problemas que servirão de base para o aprendizado sobre algoritmos e lógica de programação. Os exercícios servem como complementação do aprendizado, por essa razão são chamados de exercícios de fixação. Bom aprendizado. Professor Me. Marcos Roberto de Moraes Mestre em Educação, Especialista em Administração de Sistemas de Informação, Tecnólogo em Processamento de Dados, Professor do Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas e Mecânica de Precisão da Fatec de Mogi Mirim-SP 4

2 Programação Neste capítulo serão apresentados alguns conceitos importantes antes de iniciarmos o estudo da lógica de programação. Afinal o que são programas? O que é uma linguagem de máquina? Para que servem as diferentes linguagens de programação, o que é um Compilador? O que é o processo de compilação? E por fim, o que são Máquinas Virtuais? 2.1 Programa O que é um programa de computador? Figura 1 - Planilha Eletrônica Um programa ou programa de computador é um conjunto de instruções que são interpretadas pelo computador com a finalidade de se executar uma determinada tarefa. Essas instruções estão armazenadas em um arquivo que comumente é chamado de executável e, dentro deste arquivo, as instruções aparecem no formato binário que é extremamente difícil de ser lido por um ser humano. É uma coleção de instruções que descrevem uma tarefa a ser realizada por um computador. O termo pode ser uma referência ao código fonte, escrito em alguma linguagem de programação, ou ao arquivo que contém a forma executável deste código fonte. No momento em que um programa é gerado, é dito a ele em qual sistema operacional e em qual arquitetura de processador ele será executado. Ou seja, nele estarão contidas instruções específicas para um determinado tipo de processador, além de instruções específicas para um determinado sistema operacional. (K19, 2011) 5

2.2 Linguagem de Máquina Todo computador possui um conjunto de instruções que seu processador é capaz de executar. Essas instruções são chamadas de código de máquina, são representadas por sequências de bits, normalmente limitadas pelo número de bits do registrador principal da CPU. Esse código é chamado de código binário. São formados por 0 e 1. Na Linguagem de Máquina o código é escrito como uma sequência de números que representam as instruções a serem executadas pelo processador. É uma linguagem praticamente impossível de se trabalhar dado à dificuldade de se ler o código e de mantê-lo. (K19, 2011). Podemos verificar essa complexidade na figura abaixo: Figura 2 - Trecho do programa Chrome em Binário (Fonte: K19) 2.3 Linguagem de Programação 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. 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 sobre várias circunstâncias. Outra definição dada por Said (2007) é que linguagens de programação são conjuntos de padrões e comandos com sintaxes predefinidas que o programador utiliza para traduzir os algoritmos escritos, o que permite dar ordens ao processador e à memória de um computador. Escrever um programa em Linguagem de Máquina é totalmente inviável. As Linguagens de Programação que tentam se aproximar das linguagens humanas. Veja um trecho de código na Linguagem C#. 6

Figura 3 - Trecho de programa na Linguagem C# 2.4 Compilador Se o processador entende apenas Linguagem de Máquina, como ele irá interpretar o código escrito em uma Linguagem de Programação? Um compilador é um programa de computador ou um conjunto de programas que, a partir de um código fonte escrito em uma linguagem de programação, cria um programa semanticamente equivalente, porém escrito em outra linguagem, objeto. Ou seja, o papel do compilador é, basicamente, traduzir um código em Linguagem de Programação para um código em Linguagem de Máquina. Figura 4 Compilação 2.5 Máquinas Virtuais A empresa que desejar ter a sua aplicação disponível para diversos sistemas operacionais (Windows, Linux, Mac OS X, etc), e arquiteturas de processadores (Intel, ARM, PowerPC, etc), terá que escrever versões diferentes do código fonte para cada plataforma (sistema operacional + arquitetura de processador). Isso pode ser traduzido, do ponto de vista dos administradores de uma empresa, como um investimento muito alto em desenvolvimento e manutenção de um sistema. (K19, 2011) 7

Para solucionar esse problema, ou seja, a tarefa custosa de gerenciar diversas versões do código, alguns softwares compilar os programas para uma máquina virtual. De acordo com os autores da K19, Uma máquina virtual funciona como uma camada a mais entre o código compilado e a plataforma. Portanto, quando compilamos um código fonte, estamos criando um executável que a máquina virtual saberá interpretar e ela é quem deverá traduzir as instruções do seu programa para a plataforma. (K19, 2011) Figura 5 - Ilustração do Funcionamento de uma Máquina Virtual (Fonte: K19) 2.6 Exercícios de Fixação 1. O que são algoritmos? E qual sua importância? 2. Pesquise informações na internet sobre a história das linguagens de programação. Crie uma linha do tempo identificando os principais acontecimentos sobre o assunto nos últimos 40 anos. 8

3 Lógica de Programação Neste capítulo são apresentados os conceitos de lógica, algoritmos e implementação. 3.1 Lógica Existem muitas definições para a palavra lógica, porém no caso do nosso estudo não é relevante um aprofundamento nesse ponto, é suficiente apenas discutir alguns pontos de vista sobre o assunto. Lógica é uma parte da filosofia que estuda o fundamento, a estrutura e as expressões humanas do conhecimento. A lógica foi criada por Aristóteles no século IV a.c. para estudar o pensamento humano e distinguir interferências e argumentos certos e errados. (CABRAL, 2012) A lógica estuda a correção do raciocínio, ou seja a ordem da razão. Isso dá para entender que a nossa razão pode funcionar desordenadamente. Por isso, a lógica estuda maneiras de colocar ordem no pensamento. (SAID, 2007) Considere o problema de descobrir a idade da pessoa mais velha de um grupo de pessoas. Suponha que estas pessoas estão em uma fila qualquer (banco, cinema, etc.), e que esta fila não está vazia. Figura 6 Fila de Pessoas Vamos elaborar uma estratégia para resolver este problema. Uma solução bem simples seria fazer o seguinte (Veja a seção a seguir - 3.2 Algoritmos e Implementação). 9

3.2 Algoritmos e Implementação Um algoritmo é uma sequência de passos que resolve algum problema ou alcança algum objetivo, como a sequência de passos para resolver o problema de descobrir a idade mais velha de uma pessoa. É importante salientar que um algoritmo simplesmente diz o que deve ser feito. Como uma receita de bolo. Dizemos que um algoritmo é um sequencia finita de passos, descritos em uma ordem lógica, que visam atingir um objetivo bem definido. Figura 7 - Receita (Fonte: obadenbaden.com.br) Para resolver um problema, como em uma receita qualquer, devemos definir como executar os passos do algoritmo. Por exemplo, para o problema anterior (Seção 3.1- Lógica) de encontrar a maior idade do grupo de pessoas na fila, deveríamos definir como colher as informações sobre as idades das pessoas (perguntar para a própria pessoa, ver a data de nascimento em algum cadastro que a pessoa tenha feito) e como manter as informações sobre as idades (anotar em um papel ou guardar em uma variável no computador). A definição de como os passos de um algoritmo serão executados é uma implementação do algoritmo. Resumindo, algoritmo é o que deve ser feito e implementação é o como deve ser feito. (CAELUM, 2011) Uma solução simples para o nosso problema: 1) Pegue a idade da primeira pessoa. A única informação que você tem é que esta idade é a maior até o momento. Então, guarde em algum lugar esta informação. 2) Percorra cada uma das próximas pessoas e faça o seguinte: a) Pegue a idade da pessoa, esta é a idade atual. b) Compare a idade atual com a maior até o momento. Esta comparação pode resultar em três possibilidades: a idade atual é menor, é igual ou é maior. c) Se a altura atual for maior, então faça o valor da maior idade ser igual a atual. Um algoritmo deve ter uma sequencia de passos finitos e que garanta a sua repetição, ou seja, toda vez que for executado deve chegar ao resultado desejado. 10

3.3 Representação dos Algoritmos Há diversas formas de representar os algoritmos, as formas mais utilizadas de representação: Fluxograma e Pseudocódigo. Há ainda a linguagem natural, que será apresentada apenas como forma introdutória neste material, já que não se recomenda solucionar um problema computacional com o seu uso. 3.3.1 Linguagem Natural Suponha que você tenha um colega que é o mais novo cliente do seu banco, e ele quer aprender a sacar dinheiro no caixa eletrônico. Você já tem uma solução para o problema dele, então resolve ensiná-lo a sacar dinheiro. Para tanto, você escreve no papel as seguintes instruções: 1. Passe o cartão do banco no leitor. 2. Digite a senha da conta-corrente. 3. No menu que aparecer, escolha a opção SAQUE. 4. Digite o valor desejado e tecle ENTRA. 5. Confirme o valor do saque e aperte ENTRA. 6. Aguarde na frente do caixa até sair o dinheiro. 7. Pegue o dinheiro. Com esse algoritmo para sacar dinheiro, de forma ordenada, se seu amigo seguir os passos conseguirá ter as notas em suas mãos. Mas, Seu amigo já recebeu o cartão? Tem dinheiro na máquina? Tem saldo na conta? Muitas vezes, terão diferentes versões, ou diferentes fluxos de uma mesma versão de um algoritmo, para se resolver um problema, como esse que foi exemplificado. 3.3.2 Fluxogramas Fluxograma é um tipo de diagrama, às vezes conhecidos como diagrama de blocos, e pode ser entendido como uma representação esquemática de um processo, muitas vezes feito através de gráficos que ilustram de forma descomplicada a transição de informações entre os elementos que o compõem. É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam ações distintas (instruções e comandos). Facilita o entendimento das ideias contidas nos algoritmos. 11

Forma Significado Terminador: Início e Fim do Fluxograma. Processo Entrada de Dados Saída de Dados Decisão Conector Sentido do fluxo Figura 8 - Principais formas usadas em fluxogramas (símbolos mais usados) 12

Exemplo: Vamos supor que precisemos criar um algoritmo para somar dois valores (dados pelo usuário) e exibir o seu resultado. Início A, B SOMA A + B SOMA Fim Figura 9 - Fluxograma para soma de dois valores 3.3.3 Pseudocódigo Esta forma de representação de algoritmos é rica em detalhes, como a definição dos tipos das variáveis usadas no algoritmo. Por assemelhar-se bastante à forma em que os programas são escritos, encontra muita aceitação. Na verdade, esta representação é suficientemente geral para permitir a tradução de um algoritmo nela representado para uma linguagem de programação específica seja praticamente direta. (UFRN, 2004) A forma geral da representação de um algoritmo na forma de pseudocódigo é a seguinte: 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 distingui-los 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. 13

<subalgoritmos> consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos. Exemplo: A soma de dois valores, agora representados em pseudocódigo. A representação em pseudocódigo é bem simples e na maioria dos casos é o suficiente para se explicar um algoritmo. Existem alguns interpretadores de portugol como o VisuAlg e, no caso da língua inglesa, temos algumas linguagens como Pascal e BASIC cuja sintaxe se assemelha muito com a sintaxe de um pseudocódigo em inglês. (K19, 2011) 3.4 Exercício de Fixação 1. Pesquise sobre as formas de representar algoritmos. O que é dito sobre descrição narrativa? É interessante ou não utilizar essa forma para a elaboração de algoritmos? 2. Baixe o aplicativo VISUALG e tente executar o algoritmo acima. Veja instruções no capítulo 8 - Linguagem de Projeto de Programação. 14

4 Tipos de Dados Neste capítulo são apresentados os conceitos de tipos de dados, constantes e variáveis. Declaração e inicialização de variáveis nas linguagens C# e Java. Apresenta-se também as regras de declaração e as convenções utilizadas. Figura 10 - Zebra (imagem construída em ASCII) Nota sobre ASCII: ASCII (acrônimo para American Standard Code for Information Interchange, que em português significa "Código Padrão Americano para o Intercâmbio de Informação") é uma codificação de caracteres de oito bits baseada no alfabeto inglês. Os códigos ASCII representam texto em computadores, equipamentos de comunicação, entre outros dispositivos que trabalham com texto. Desenvolvida a partir de 1960, grande parte das codificações de caracteres modernas a herdaram como base. Os dados representam as informações processadas pelo computador. Alguns tipos de dados: numéricos (inteiros e reais), dados caracteres ou literais, lógicos, datas, entre outros. Os tipos numéricos inteiros são dados numéricos positivos, negativos e não fracionários. Ex: 50, 12, 0, -14. Já os tipos reais são aqueles também numéricos positivos e negativos, mas, nesse caso, fracionário. Exemplo: 50.34, 12.14, -14.23. Os tipos caracteres são sequencias de letras, números e símbolos especiais, também é conhecido por cadeia de string, literal ou alfanumérico. São representados entre aspas. Exemplo: bola, Programa, 19-3806-5555, etc. Os tipos lógicos, chamados de booleanos, são dados que representam apenas dois valores: verdadeiro e falso. Nas linguagens de alto nível como Pascal, C/C++, PHP, é reconhecido pelos termos em inglês, ou seja, true ou false. Nota: Algumas linguagens tratam datas como tipos especiais. Nos exemplos deste material, quando usarmos datas, utilizaremos entre aspas como se fosse um tipo string. 15

Figura 11 - Exemplo de Tipos de dados na Linguagem C 4.1 Constantes Constantes são usadas em expressões para representar vários tipos de valores. Em C# existem regras rígidas para determinar como devem ser escritos estes valores. A seguir iremos mostrar as regras para escrever constantes. 4.1.1 Constantes Inteiras São valores numéricos sem ponto decimal, precedidos ou não por um sinal. Não é possível separar o sinal do valor numérico. Constantes válidas são, por exemplo: 1997-3 +5 0-32000 Alguns exemplos de erros na escrita de constantes inteiras são: 1.3 (Não é possível usar ponto decimal). - 345 (Não é possível colocar um espaço entre o sinal e o valor numérico). 2 3 (Não é possível usar notação de expoentes) 4.2 Variáveis varx 189 Em computação uma variável representa um endereço da memória RAM. Nela somos capazes de armazenar informações de vários tipos: numéricos, strings (texto), booleanos (verdadeiro ou falso), objetos e etc. Quando declaramos uma variável estamos atribuindo um nome simbólico à um endereço da memória RAM. Dentro de nosso programa utilizaremos esse nome 16

para manipular a informação contida no endereço da memória relacionado à variável. (K19, 2011) O computador, para poder trabalhar com algumas destas informações precisa saber onde, na memória, o dado está localizado. Fisicamente, cada posição de memória, possui um endereço, ou seja, um número, normalmente em hexadecimal, que indica onde cada informação está localizada. Como utilizamos as variáveis? Para utilizarmos as variáveis na linguagem Java ou C# (duas das mais utilizadas atualmente) precisamos passar pelas seguintes etapas: declaração e inicialização. 4.2.1 Declaração Tanto em Java como em C# declaramos uma variável informando o seu tipo e o seu nome (identificador). Figura 12 - Exemplo de declaração em C# Figura 13 - Exemplo de declaração em Java 4.2.2 Inicialização Após declararmos uma variável, antes de utilizá-la, devemos inicializá-la para evitarmos um erro de compilação. Figura 14 - Exemplo de inicialização em C# 17

Figura 15 - Exemplo de inicialização em Java 4.3 Tipos de variáveis Pelo fato das variáveis possuírem um tipo nas linguagens C, Java e C#, normalmente dizemos apenas qual o tipo da variável? quando queremos saber qual o tipo de dado associado àquela variável em questão. Existem diversos tipos de dados, sendo os mais básicos os tipos primitivos que são pré-definidos pelas duas linguagens. (K19, 2011) 4.3.1 Tipos primitivos em C Tipo Tamanho em Bytes Faixa Mínima char 1-127 a 127 unsigned char 1 0 a 255 signed char 1-127 a 127 int 4-2.147.483.648 a 2.147.483.647 unsigned int 4 0 a 4.294.967.295 signed int 4-2.147.483.648 a 2.147.483.647 short int 2-32.768 a 32.767 unsigned short int 2 0 a 65.535 signed short int 2-32.768 a 32.767 long int 4-2.147.483.648 a 2.147.483.647 signed long int 4-2.147.483.648 a 2.147.483.647 unsigned long int 4 0 a 4.294.967.295 float 4 Seis digitos de precisão double 8 Dez digitos de precisão long double 10 Dez digitos de precisão 4.3.2 Tipos primitivos em C# Tipo C# Tipo.NET Descrição Faixa de dados Bool System.Boolean Booleano true ou false Byte System.Byte Inteiro de 8-bit com sina -127 a 128 Char System.Char Caracter Unicode de 16-bit U+0000 a U+ffff Decimal System.Decimal Inteiro de 96-bit com sinal 1,0 10-28 a 7,9 1028 com 28-29 dígitos significativos Double System.Double Flutuante IEEE 64-bit com 15- ±5,0 10-324 a ±1,7 10308 16 dígitos significativos Float System.Single Flutuante IEEE 32-bit com 7 ±1,5 10-45 a ±3,4 1038 18

dígitos significativos Int System.Int32 Inteiro de 32-bit com sinal -2.147.483.648 a 2.147.483.647 Long System.Int64 Inteiro de 64-bit com sinal 9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 Object System.Object Classe base Sbyte System.Sbyte Inteiro de 8-bit sem sinal 0 a 255 Short System.Int16 Inteiro de 16-bit com sinal -32,768 a 32,767 String System.String String de caracteres Unicode Uint System.UInt32 Inteiro de 32-bit sem sinal 0 a 4,294,967,295 Ulong System.UInt64 Inteiro de 64-bit sem sinal 0 a 18,446,744,073,709,551,615 Ushort System.UInt16 Inteiro de 16-bit sem sinal 0 a 65,535 4.3.3 Tipos primitivos em Java Java possui 8 tipos primitivos. Quatro deles são usados para representar inteiros. São eles: byte, short, int, long. A diferença entre eles é o tamanho em bytes. Todos representam números inteiros positivos e negativos. Outros dois tipos primitivos são usados para representar números reais (ponto flutuante). São eles: float e double. A diferença entre eles é a quantidade de bytes utilizados para sua representação. Tanto float quanto o double seguem a norma IEE754 1 para formação de números de ponto flutuantes. Os dois últimos tipos são char e boolean. O primeiro é utilizado para representar caracteres ou números positivos. O segundo aceita dois valores lógicos true ou false. Tipo Faixa de dados byte (8bits) -128 a 127 short (16bits) -32768 a 32767 int (32bits) 2147483648 a 2147483647 long (64bits) 9223372036854775808 a 9223372036854775807 float (32 bits) single-precision 32-bit IEEE 754 floating point double (64 bits) double-precision 64-bit IEEE 754 floating point char (16 bits) '\u0000' (ou 0) a '\uffff' (or 65.535 inclusive) Boolean Assume true ou false (tamanho não defnido) 4.4 Convenção para a nomenclatura Tanto em Java como em C# existe uma convenção para a escrita dos nomes das variáveis. Ambas as linguagens utilizam o padrão Camel Case, que consiste em escrever o nome da variável com a primeira letra de cada palavra em maiúscula exceto a primeira. Também devemos nos lembrar de que as três linguagens são Case Sensitive, ou seja, numerodaconta e NumeroDaConta são consideradas duas variáveis diferentes pelo fato do nome da primeira começar com letra minúscula e a da segunda maiúscula. 1 A Norma IEEE 754-2008 define os formatos adequados para representar números em ponto flutuante de precisão simples (32 bits) e de precisão dupla (64 bits) 19

4.5 Regras para a nomenclatura As linguagens C, Java e C# possuem regras muito parecidas. O nome de uma variável: 1. Não deve começar com um dígito; 2. Não pode ser igual a uma palavra reservada; 3. Não pode conter espaço(s); 4. Pode ser uma palavra de qualquer tamanho; 5. Pode conter letras, dígitos e _ (underscore). Em Java, pode conter também o caractere $. As linguagens Java e C# nos permite escrever os nomes das variáveis em qualquer idioma, pois elas aceitam qualquer caractere Unicode. Portanto são válidas as variáveis escritas com as acentuações do português, assim como as variáveis escritas em japonês, por exemplo. int númerodaconta; int アカウント 番 号 ; Figura 16 - Exemplo de nomes de variáveis válidos utilizando caracteres especiais em outros idiomas. Apesar de ser possível o uso de caracteres em outros idiomas, assim como o uso dos caracteres $ (cifrão) e _ (underscore), não é recomendável utilizá-los. Não utilizar tais caracteres é uma das boas práticas de programação. 4.6 Exercício de Fixação 1. Indique os nomes de variáveis que são válidos. Justifique os nomes inválidos. a) tempo b) nota_final c) us$ d) char e) 2dias f) teste 1 g) raio.do.circulo 2. Indique quais dos números abaixo são constantes inteiras (longas ou não) válidas. Justifique suas respostas. a) 100 b) 2 345 123 c) 3.0 d) -35 e) - 234 f) 0L g) 2l 20

5 Operadores Nas diferentes linguagens de programação utilizamos os operadores para manipularmos as variáveis de nossa aplicação. As linguagens C, Java e C# possuem diversos operadores que são categorizados da seguinte forma: Aritmético (+, -, *, /, %) Atribuição (=, +=, -=, *=, /=, %=) Relacional (==,!=, <, <=, >, >=) Lógico (&&, ) Veja a seguir uma lista de operadores matemáticos básicos, listados em ordem de precedência. Use parênteses para outra ordem. Operador Objetivo *, /, % Multiplicação, Divisão, Módulo +, - Adição, subtração Exemplo Figura 17 - Operadores Matemáticos Lista de operadores de atribuição e Incremento: Operador Objetivo = Atribuir valor v++ Incremento variável v por 1. v+=n Incremento variável v por n. v*=n Multiplique variável v por n. v-=n Subtrair n da variável v. Veja lista de operadores relacionais: Operador Objetivo == Verifica a igualdade.!= Verifica a desigualdade. 21

> Mais de. < Menor que. >= Maior que ou igual a. <= Menor ou igual a. Figura 18 - Exemplo de uso de operador de verificação de igualdade em C# Veja a lista dos operadores lógicos: Operador Objetivo && And condicional. OR condicional.! NOT condicional. Figura 19 - Exemplo de uso do operador && em C# 5.1 Tabela Verdade Os autores da K19 (K19, 2011) apresentam a tabela verdade com uma tabela matemática muito utilizada na Álgebra Booleana e faremos o uso dela para compreendermos melhor os operadores lógicos. Sendo A e B duas variáveis booleanas, confira como ficaria a tabela verdade para os operadores lógicos E (&&) e OU ( ): Figura 20 - Exemplo de Tabela da Verdade 22

Rapidamente notamos que a operação E devolve true apenas quando A e B são true. Também notamos que a operação OU devolve false apenas quando A e B são false. Vamos utilizar os exemplos de operadores lógicos dados anteriormente para ilustrarmos melhor como funciona a tabela verdade. Exemplo 1: Seja A=5, B=3, C=2. Calcule o resultado da expressão lógica: 1) A + 7 > B * C Sendo A = 5 Então 5 + 7 = 12 E 3 * 2 = 6 Então a expressão é 12 > 6, ou seja, o resultado é.verdadeiro. (Verdadeiro) Exemplo 2: Suponha que temos três variáveis A = 5, B = 8 e C =1, os resultados das expressões seriam: Operações Lógicas são utilizadas quando se torna necessário tomar decisões em um fluxograma ou diagrama de bloco. Num fluxograma, toda decisão terá sempre como resposta o resultado.verdeiro. ou.falso. (true ou false) Uma estrutura de decisão ou desvio faz parte das técnicas de programação que conduzem a estruturas de programas que não são totalmente sequenciais. Com as instruções de SALTO ou DESVIO pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decisões lógicas tomadas em função dos dados ou resultados anteriores. 5.1.1 Exercícios de Fixação 1. Crie um fluxograma para calcular o estoque médio de uma peça, sendo que: ESTOQUEMÉDIO = (QUANTIDADE MÍNIMA + QUANTIDADE MÁXIMA) /2. 23

2. Crie um fluxograma para calcular a idade aproximada em anos de uma pessoa, Sendo que IDADE = ANOATUAL ANONASC. 3. Crie um fluxograma para calcular a seguinte expressão: X:= X ^ 2 + 2. Onde X é informado como entrada pelo usuário. 4. Crie um fluxograma para calcular a seguinte expressão: A:= A + B * C. Os valores devem ser lidos do teclado. 5. Crie um fluxograma para calcular a média ponderada de duas notas de um aluno. A nota 1 tem peso 3 e a nota 2 tem peso 7. 6. Indique com um I os tipos inteiros, R os tipos reais, B os tipos booleanos e L os tipos literais para os dados abaixo: ( ) 100 ( ) 34.34 ( ) 12.12 ( ) 0 ( ) -34 ( ) -9 ( ) 10/11/09 ( ) Maria ( ) 0 ( ).verdadeiro. ( ).falso. ( ) ( ) 34 ( ) -1.45 ( ) -30.3 7. Construa um fluxograma que: Leia a cotação do dólar Leia um valor em dólares Converta esse valor para Real Mostre o resultado 8. Construa um fluxograma que: Leia 4(quatro) números Calcule o quadrado para cada um Somem todos e Mostre o resultado 9. Construa um algoritmo para pagamento de comissão de vendedores de peças, levando-se em consideração que sua comissão será de 5% do total da venda e que você tem os seguintes dados: Identificação do vendedor Código da peça Preço unitário da peça Quantidade vendida 10. Construa um algoritmo que receba como entrada os seguintes dados: Peso de uma pessoa; Sua altura em centímetros; E em seguida calcule o Índice de Massa Corpórea (IMC) através da seguinte fórmula: PESO / ALT ^ 2 24

11. Construa um algoritmo que leia três valores e mostre o produto dos mesmos. 12. Construa um algoritmo para calcular o volume de uma garrafa de água, utilizando a fórmula: VOLUME:= 3.14159 * R ^ 2 * H, onde R é o valor do Raio, e H é a altura. 13. Construa um algoritmo para efetuar as operações básicas de adição, multiplicação e divisão de dois valores dados pelo usuário A e B, apresentando ao final todos os resultados. 14. Uma loja de animais precisa de um programa para calcular o custo da criação de determinada ave. O custo é calculado com a fórmula CUSTO:= (NRAVES * 0.30) / 15 + 10. Construa um algoritmo para efetuar o presente cálculo e apresentar ao final o custo de criação do número de aves informado pelo usuário (Valor lido). Até agora entendemos o que é um programa, como ele funciona, de que maneira armazenamos os dados na memória do computador através das variáveis e como realizamos operações de diversos tipos por meio dos operadores que as linguagens disponibilizam. Nos dois próximos capítulos serão estudadas instruções para o controle de fluxo: instruções de decisão e de repetição. 25

6 Controle de Fluxo - Decisão Por meio do fluxograma que calcula a média de duas notas de um aluno e mostra como resultado se o mesmo foi aprovado ou não, de acordo com a seguinte condição: para ser aprovado o aluno deverá ter média superior ou igual a sete. Início N1, N2 Soma N1 + N2 Media (N1 + N2) / 2 Media, Reprovado Não Media>=7 Sim Media, Aprovado Fim Figura 21 Fluxograma: média de duas notas 6.1 Estrutura SE ENTÃO SENÃO / IF... THEN... ELSE A estrutura de decisão SE/IF normalmente vem acompanhada de um comando, ou seja, se determinada condição for satisfeita pelo comando SE/IF então execute determinado comando. Imagine um algoritmo que determinado aluno somente estará aprovado se sua média for maior ou igual a 7.0, como visto no fluxograma da Figura 24 Fluxograma: média de duas notas. SE MEDIA >= 7.0 ENTÃO ALUNO APROVADO SENÃO ALUNO REPROVADO Veja o código na linguagem C#. 26

Figura 22 - Exemplo If/then/else Podemos também, dentro de uma mesma condição testar outras condições. Supondo que agora tenhamos uma nova condição, a de RECUPERAÇÃO. Dessa forma, se a Média for Menor ou igual a 3.5 o aluno está REPROVADO, com Média superior a 3.5 e menor que 7 o aluno está de RECUPERAÇÃO, caso seja maior ou igual a 7.0 sua situação será aprovado. 27

Início N1, N2 Soma N1 + N2 Media (N1 + N2) / 2 N Media<=3.5 S Media, Reprovado Media>3.5 && Media<7.0 S Media, Recuperação N Media, Aprovado Fim Figura 23 - Fluxograma com cadeia de ifs 28