4 – Variáveis Unesp – Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante Composição do Hardware MEMÓRIA UNIDADES FUNCIONAIS BÁSICAS MEMÓRIA AUXILIAR MEMÓRIA PRINCIPAL UNIDADE DE ENTRADA UNIDADE DE CONTROLE UNIDADE DE SAÍDA UNIDADE LÓGICA E ARITMÉTICA CPU Variáveis 2 A Memória do Computador A memória do computador é dividida em unidades pequenas (células) e de mesmo tamanho, chamadas PALAVRAS. Cada PALAVRA tem um único endereço Os endereços são permanentes (vêm da fábrica) e não podem ser modificados pelo programador Variáveis 3 A Memória do Computador Memória de Tamanho “n” Capacidade da memória X Espaço “endereçável” Endereço 00 Palavra 1 01 Palavra 2 02 Palavra 3 03 Palavra 4 ... ... n Palavra n-1 Variáveis 4 A Memória do Computador A PALAVRA (célula) é formada por um grupo de 2, 4, 6 e até 8 BYTES (depende do modelo de computador). Exemplo: Palavra de 4 bytes, indica que se está usando uma célula cujo tamanho é de 4 bytes PALAVRA endereço endereço PALAVRA byte byte byte byte byte byte byte byte 00 01 02 03 04 05 06 07 00 04 Variáveis 5 A Memória do Computador BYTE (binary term) : Unidade básica da informação. O byte é composto por 8 BITS BIT (binary digit) - dígitos binários BYTE bit bit bit bit bit Variáveis bit bit bit 6 Representação da Informação Os computadores armazenam as informações e fazem todo seu tratamento baseado em fenômenos sobre sistemas biestáveis Os símbolos básicos usados para representar os dois estágios são o 0 e o 1 (dígitos binários) BYTE bit 0 ou 1 bit 0 ou 1 bit 0 ou 1 bit 0 ou 1 bit 0 ou 1 bit 0 ou 1 bit 0 ou 1 bit 0 ou 1 COMO FAZER PARA REPRESENTAR UM NÚMERO BINÁRIO? Variáveis 7 A MEMÓRIA DO COMPUTADOR Sistema de numeração binária É um sistema de numeração posicional (o valor de um dígito é dado pela sua posição no número) No sistema decimal, o número 2562 tem a seguinte interpretação: 2 x 1000 (103) = 2000 5 x 100 (102) = 500 6 x 10 (101) = 60 2 x 1 (100) = 2 Variáveis 8 A MEMÓRIA DO COMPUTADOR No sistema binário de numeração a base é 2. Assim o valor do número 110101 é: 1 x 25 + 1 x 24 + 0 x 23 + 1 x 22 + 0 x 21 +1 x 20 = 32 + 16 + 0 + 4 + 0 + 1 = 53 Costuma-se representar um número na base binária por (110101)2 e na base decimal por (2562)10 ou simplesmente 2562. Variáveis 9 A MEMÓRIA DO COMPUTADOR Correspondências entre as bases 2, 8, 10 e 16 Base 10 (decimal) Base 2 (binária) Base 8 (octal) Base 16 (hexadecimal) 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 110 6 6 7 111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F Variáveis 10 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números nas bases 2, 8 e 16 para a base 10 (101101)2 = 1x25 + 0x24 + 1x23 + 1x22 + 0x21 + 1x20 = 32 + 0 + 8 + 4 + 0 + 1 = (45)10 (27)8 = 2x81 + 7x80 = 16 + 7 = 23 (4F5C)16 = 4x163 + 15x162 + 5x161 12x160 = 4x4096 + 15x256 + 5x16 + 12 = 16384 + 3840 + 80 + 12 = 20316 Variáveis 11 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números nas bases 2, 8 e 16 para a base 10 binária para decimal octal para decimal hexadecimal para decimal Variáveis 12 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números na base 10 para as bases 2, 8 e 16 dividendo divisor 45 1 resto 2 22 2 quociente 0 11 1 45 = (101101)2 Variáveis 2 5 1 2 2 0 2 1 1 2 0 13 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números na base 10 para as bases 2, 8 e 16 dividendo divisor 123 2 61 1 resto 2 quociente 1 30 2 0 15 1 123 = (1111011)2 Variáveis 2 7 1 2 3 1 2 1 1 2 0 14 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números na base 10 para as bases 2, 8 e 16 decimal para binária Variáveis 15 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números na base 10 para as bases 2, 8 e 16 decimal para octal Variáveis 16 A MEMÓRIA DO COMPUTADOR Conversão Inteira de Números na base 10 para as bases 2, 8 e 16 decimal para hexadecimal Variáveis 17 A MEMÓRIA DO COMPUTADOR Conversão Real de Números na base 2 para a base 10 (10.101)2 = 1x21 + 0x20 + 1x2-1 + 0x2-2 + 1x2-3 = 2 + 0,5 + 0,25 + 0,125 = (2,875)10 (0.01101)2 = 0x20 + 0x2-1 + 1x2-2 + 1x2-3 + 0x2-4 + 1x2-5 = 0,25 + 0,125 + 0,03125 = (0,40625)10 Variáveis 18 A MEMÓRIA DO COMPUTADOR Conversão Real de Números na base 10 para a base 2 45,1875 Representação finita na base 10 parte inteira 0,1875 x 2 = 0,375 dividendo divisor 45 1 resto 2 22 0,375 x 2 = 0,75 2 quociente 0 parte decimal (fracionária) 11 1 2 5 1 0,75 x 2 = 1,5 2 2 0 0,5 x 2 = 1,0 2 1 1 2 0 45,1875 = (101101.0011)2 Representação finita na base 2 Variáveis 19 A MEMÓRIA DO COMPUTADOR Conversão Real de Números na base 10 parte decimal (fracionária) para a base 2 15,65 parte inteira Representação finita na base 10 0,65 x 2 = 1,3 0,3 x 2 = 0,6 15 = (1111)2 0,6 x 2 = 1,2 0,2 x 2 = 0,4 0,4 x 2 = 0,8 0,8 x 2 = 1,6 Representação infinita na base 2 0,6 x 2 = 1,2 Dízima periódica 15,65 = (1111.1010011)2 Variáveis ... 20 A MEMÓRIA DO COMPUTADOR Conversão Real de Números na base 10 parte decimal (fracionária) para a base 2 0,1 Representação finita na base 10 0,1 x 2 = 0,2 0,2 x 2 = 0,4 0,4 x 2 = 0,8 0,8 x 2 = 1,6 0,6 x 2 = 1,2 0,2 x 2 = 0,4 Representação infinita na base 2 Dízima periódica 0,1 = (0.0001100110011...)2 Variáveis ... 21 A MEMÓRIA DO COMPUTADOR REPRESENTAÇÃO DE NÚMEROS INTEIROS (PONTO FIXO) Dados numéricos ponto fixo são números inteiros, isto é, sem parte fracionária. Os dados NUMÉRICOS INTEIROS POSITIVOS são sempre representados com o sinal (convencionado que bit mais significativo 0 = sinal positivo) e em seguida o valor do dado em binário. Porém, devido à complexidade dos algoritmos para os computadores operarem com NÚMEROS NEGATIVOS quando se usa a representação em sinal e magnitude, são comumente adotadas outras formas que facilitam e tornam mais eficiente a manipulação de operações aritméticas em computadores: as representações em complemento. Vamos analisar cada uma dessas representações. Variáveis 22 A MEMÓRIA DO COMPUTADOR REPRESENTAÇÃO EM SINAL E MAGNITUDE A magnitude (isto é, o valor absoluto, que independe de sinal) de um número é representada em binário. O sinal é representado por um bit (o bit mais significativo, isto é, o bit mais à esquerda na representação). Por convenção, o bit de sinal 0 (zero) significa que o número é positivo e o bit 1 representa número negativo. Variáveis 23 A MEMÓRIA DO COMPUTADOR REPRESENTAÇÃO EM SINAL E MAGNITUDE O valor dos bits usados para representar a magnitude independe do sinal, isto é, sendo o número positivo ou negativo, a representação binária da magnitude será a mesma, o que varia é apenas o bit de sinal. Ex.: 0011 = +3 1011 = -3 (011 equivale ao valor absoluto 3) Variáveis 24 A MEMÓRIA DO COMPUTADOR REPRESENTAÇÃO EM SINAL E MAGNITUDE FAIXA DE REPRESENTAÇÃO A representação na base b em sinal e magnitude com n bits (incluindo o bit de sinal) possui bn representações e permite representar bn -1 valores, de vez que há duas representações para o zero. A faixa de representação de uma representação na base 2 em sinal e magnitude com n bits (incluindo o bit de sinal) possui 2n representações, representando os valores entre - ( 2n-1-1) e + ( 2n-1-1). O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1-1). Variáveis 25 A MEMÓRIA DO COMPUTADOR REPRESENTAÇÃO EM SINAL E MAGNITUDE A representação em sinal e magnitude apresenta uma grande desvantagem: ela exige um grande número de testes para se realizar uma simples soma de dois números inteiros, o que resulta em baixa eficiência (execução lenta). Um outro ponto negativo é termos duas representações para o zero. Para resolver o problema da soma utiliza-se a representação em COMPLEMENTO A BASE 1 e para resolver o problema das duas representações para o zero utiliza-se a representação em COMPLEMENTO A BASEVariáveis 2. 26 Unesp-Campus de Guaratinguetá 4.1 – Variáveis 4.1 - Variáveis Como visto anteriormente, o computador possui uma área de armazenamento conhecida como memória. A memória do computador pode ser entendida como uma seqüência finita de células, que num dado momento, guardam algum tipo de informação, como por exemplo um número, uma letra, uma palavra, uma frase etc, não importa, basta saber que lá sempre existe alguma informação. O computador precisa saber onde, na memória, o dado está localizado. Variáveis 27 Unesp-Campus de Guaratinguetá 4.1 – Variáveis Fisicamente, cada célula, ou cada posição de memória, possui um endereço, ou seja, um número, que indica onde cada informação está localizada. Este número é representado através da notação hexadecimal, tendo o tamanho de quatro, ou mais bytes. A seguir é mostrado um exemplo: Exemplo 1. 3000:B712 “Joao” Endereço físico 3000:0004 ‘H’ Informação 2000:12EC 12345 Variáveis 28 Unesp-Campus de Guaratinguetá 4.1 – Variáveis O endereço MAC é formado por um conjunto de 6 bytes separados por dois pontos (“:”) ou hífen (“-”), sendo cada byte representado por dois algarismos na forma hexadecimal, como por exemplo: "00:19:B9:FB:E2:58". Cada algarismo em hexadecimal corresponde a uma palavra binária de quatro bits, desta forma, os 12 algarismos que formam o endereço totalizam 48 bits. Variáveis 29 Unesp-Campus de Guaratinguetá 4.1 – Variáveis O endereçamento das posições de memória através de números hexadecimais é perfeitamente compreendido pela máquina, mas para nós humanos esta tarefa é complicada. As linguagens de computador permitem que, ao invés de trabalhar diretamente com os números hexadecimais, sejam dados nomes diferentes a cada posição de memória (a cada célula). Tais nomes são de livre escolha do usuário, mas seguem algumas regras. Os usuários ficaram livres dos endereços físicos (números hexadecimais) e passaram a trabalhar com endereços lógicos (nomes dados pelos próprios usuários para cada posição de memória). Variáveis 30 Unesp-Campus de Guaratinguetá 4.1 – Variáveis Então o Exemplo 1 anterior, pode ser alterado para: nome “Joao” Endereço lógico letra ‘M’ Informação numero 12345 Assim, podemos dizer que os endereços lógicos são como células, que num dado instante guardam algum tipo de informação. Observe que o conteúdo destas células não é algo fixo, permanente. Na verdade, uma célula pode conter diversas informações, isto é, uma informação diferente a cada momento Variáveis 31 Unesp-Campus de Guaratinguetá 4.1 – Variáveis Então, sempre que for necessário, pode-se alterar o conteúdo armazenado em cada caixa. A figura do Exemplo 1, mostrado a seguir, ilustra esse fato. nome “Maria” Endereço lógico letra ‘F’ Informação numero 54321 No exemplo 1 a célula (Endereço Lógico) rotulada de nome num primeiro momento continha a informação “Joao”, mas agora ela contém a informação “Maria”. O mesmo acontece com as células numero e letra, que antes continham respectivamente as informações 12345 e ‘M’, e agora contém as informações 54321 e ‘F’. Variáveis 32 Unesp-Campus de Guaratinguetá 4.1 – Variáveis Então a informação armazenada em cada célula (endereço lógico) pode variar. Isto é, podem ocorrer alterações em seu conteúdo. Tendo este conceito em mente, a partir de agora iremos chamar, as células ou endereços lógicos, de VARIÁVEIS. Desta forma podemos dizer que uma VARIÁVEL é uma posição de memória, representada por um nome simbólico (atribuído pelo usuário), a qual contém, num dado instante, uma informação. Então, uma variável é qualquer quantidade que possa mudar de valor em diferentes estágios, dentro de um programa. O uso de variáveis permite a especificação de uma fórmula geral de cálculo. Variáveis 33 Unesp-Campus de Guaratinguetá 4.1 – Variáveis Vejamos então, um outro exemplo. Exemplo 2: Seja um triângulo com os seguintes lados: A, B, C. Do Teorema de Pitágoras temos: A2 = B2 + C2 Para cada conjunto de valores atribuídos a B e C teremos um valor de A, ou seja: Caso A B C 1 5 4 3 2 3 13 10 5 6 12 8 Observe então que neste exemplo temos 3 variáveis. A variável A, a variável B e a variável C. E quando fazemos B=4 e C=3, teremos A=5 Variáveis 34 Unesp-Campus de Guaratinguetá 4.1.1 - Nomes de Variáveis 4.1.1 - Nomes de Variáveis Para que as variáveis possam ser identificadas no programa, elas necessitam ter um nome. Este nome deve ser significativo tais como: hipotenusa, lado1 e lado2. OBS: Na fórmula do exemplo 2, foi dado o nome de A para a hipotenusa, B para o lado 1 e de C para o lado 2 (catetos) do triângulo retângulo. Contudo, esses nomes não são suficientemente significativos para se usar num programa de computador, ao passo que se for usado o nome hipotenusa, por exemplo, imediatamente sabe-se que se trata da dimensão de um triângulo retângulo. Regras para dar nomes as variáveis As regras para dar nomes as variáveis podem variar ligeiramente dependendo da linguagem de programação ou do sistema de computador em utilização. Variáveis 35 Unesp-Campus de Guaratinguetá 4.1.1 - Nomes de Variáveis O nome de uma variável pode ser constituído por letras do alfabeto (minúsculas ou maiúsculas), dígitos (0 até 9) e ainda pelo caractere underscore (_); O primeiro caractere do nome da variável NÃO pode ser um dígito. Terá que ser uma letra ou o caractere underscore. No entanto, é desaconselhável a utilização deste último como primeira letra identificadora de uma variável; NÃO é permitido o uso de espaços em branco ou de qualquer outro caractere (#, %, &, !, -, @, *), que não seja letra ou dígito, na composição do nome da variável; Maiúsculas e minúsculas representam caracteres diferentes (case sensitive), logo variáveis distintas; Variáveis 36 Unesp-Campus de Guaratinguetá 4.1.1 - Nomes de Variáveis Uma variável NÃO pode ter por nome uma palavra reservada da própria linguagem C. Assim, não podemos ter uma variável com alguma palavra-chave de C. A tabela a seguir mostra todas as palavras-chave da linguagem C. Categoria Palavras-chave Tipos de dados char, int, float, double, void Modificadores de tipo long, short, signed, unsigned Modificadores de tipo de acesso const, volatile Classes de armazenamento auto, extern, static, register Tipos definidos pelo usuário struct, enum, union, typedef Comandos condicionais if, else, switch, case, default Comandos de laços while, for, do Comandos de desvio break, goto, return, continue Operador sizeof DICA: quando for utilizar algum nome para uma variável procure utilizar um nome em português já que as palavras reservadas da linguagem C estão em inglês! Variáveis 37 Unesp-Campus de Guaratinguetá 4.1.1 - Nomes de Variáveis NÃO é aconselhável a utilização de caracteres acentuados (ã, õ, á, é, etc.) no nome das variáveis, pois a grande maioria dos compiladores não os aceita como caracteres admissíveis; Os nomes das variáveis podem ser tão longos quanto quisermos, no entanto, o compilador só vai considerar os primeiros 32 caracteres; O caractere underscore (_) é habitualmente utilizado para fazer a separação entre palavras que representam uma única variável. Ex: Num_Cliente, Id_Fatura, Vou_Continuar, etc. Variáveis 38 Unesp-Campus de Guaratinguetá 4.1.1 - Nomes de Variáveis Exemplos de nomes válidos Exemplos de nomes não válidos 3cubo começa com número Lado1 A3 Caixa_preta Xmetro X+Y o “+” não vale pois confunde com o sinal Caixa preta não é permitido caractere branco OBS: A Linguagem C é CASE-SENSITIVA, isto é, ela faz diferença entre letras maiúscula e minúscula. Então em C, Lado1 ≠ lado1 ≠ LADO1 Em C, existem cinco tipos básicos de variáveis: char, int, float, double e void. OBS: em C NÃO existe nenhum tipo específico de dados para armazenar valores lógicos. Variáveis 39 Unesp-Campus de Guaratinguetá 4.1.1 - Nomes de Variáveis Nome variável Correto ou Incorreto? Idade Correto a1b2c3 Correto 1a2b3c Incorreto Primeiro caractere é um dígito nome do cliente Incorreto Utilizou-se espaços em branco Num_Cliente Correto auto Incorreto Utilizou-se uma palavra reservada Simnão Correto Mas, não aconselhável vinte% Incorreto Utilizou-se caractere inadmissível continuar? Incorreto Utilizou-se caractere inadmissível _alfa Correto Mas, não aconselhável Num, NUM Correto Por quê? Variáveis Será aconselhável ??? 40 Unesp-Campus de Guaratinguetá 4.1.2 - Tipos de Variáveis 4.1.2 Tipos de Variáveis Considere a fórmula matemática para o cálculo do volume de uma esfera: 4 3 V R 3 Pode-se dizer que esta fórmula contém basicamente duas coisas: 1) Valores que podem ser classificados como constantes e variáveis. Constantes são os valores que não variam em todas as aplicações da fórmula. Na fórmula acima os valores 4, 3 e são chamados de constantes; Variáveis são valores que mudam a cada aplicação da fórmula. Na fórmula acima o V e o R são variáveis. Variáveis 41 Unesp-Campus de Guaratinguetá 4.1.2 - Tipos de Variáveis 2) Operações que devem ser feitas sobre determinados valores para a obtenção da solução do problema. Então para cada valor de R que atribuímos a fórmula, 4 3 V R 3 obtemos um valor de volume V. Deste modo esta fórmula pode ser usada para resolver uma certa classe de problemas e não apenas um problema específico. Variáveis 42 Unesp-Campus de Guaratinguetá 4.1.2.1 - Tipos de Dados 4.1.2.1- Tipos de Dados A Linguagem C exige que no momento em que se for utilizar variáveis, seja indicado o tipo de informação que a (célula) variável vai conter, isto é, se numa dada posição de memória será armazenado um número ou uma letra, etc. Para isto, a linguagem C já tem definido alguns tipos de dados que deverão ser usados quando se quiser utilizar variáveis. As características de cada um destes tipos de dados será mostrada gradativamente a medida em que ser for trabalhando com eles. Variáveis 43 Unesp-Campus de Guaratinguetá 4.1.2.1 - Tipos de Dados Resumindo: O tipo de uma variável define os valores que ela pode assumir e as operações que podem ser realizadas com ela Ex: – variáveis tipo int recebem apenas valores inteiros – variáveis tipo float armazenam apenas valores reais A seguir são mostrados alguns dos tipos de variáveis mais utilizados. Variáveis 44 Unesp-Campus de Guaratinguetá 4.1.2.1 - Tipos de Dados Algoritmo C Inteiro int Real float Real double Caractere char Cadeia char [ ] Lógica int float Descrição Representa números entre -2147483647 e +2147483647. Ocupa 4 bytes de memória. Representa números entre 3.4x10-38 e 3.4x10+38. Ocupa 4 bytes de memória. Representa números entre 1.7x10-308 e 1.7x10+308. Ocupa 8 bytes de memória. Representa um dos caracteres da Tabela ASCII. Ocupa 1 byte de memória. Vetor de caracteres. Cada elemento do vetor ocupa 1 byte de memória. Qualquer valor diferente de zero é associado ao valor lógico verdadeiro. Senão é falso. Variáveis 45 Unesp-Campus de Guaratinguetá 4 – Variáveis e Expressões FIM Aula 4 Referências dos slides Curso de Programação de Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Prof. Décio Mourão Variáveis 46 Prof. Galeno Sena