CONSTRUÇÃO DE ALGORITMOS E PROGRAMAS O computador é capaz de manipular e armazenar uma grande quantidade de dados ou informações com alto desempenho, liberando o homem para outras tarefas nas quais o seu conhecimento é indispensável. A informação é a matéria-prima que faz com que seja necessária a existência dos computadores. A Informática é a ciência que estuda a informação e suas aplicações. Informação INFORMÁTICA COMPUTADOR Automática TIPOS BÁSICOS DE DADOS (OU TIPOS PRIMITIVOS) Aproximando-se da maneira pela qual o computador manipula as informações, quatro tipos primitivos de dados podem ser definidos: Inteiro: toda e qualquer informação númérica que pertença ao conjunto dos números Inteiros (...-3, -2, -1, 0, 1, 2, 3, ...); Exemplos: a-) Ele tem 15 irmãos; b-) A temperatura desta noite será de –2 graus; Real: toda e qualquer informação numérica que pertença ao conjunto dos números Reais (-, +); Exemplos: a-) Ela tem 2,05 metros de altura; b-) Meu saldo bancário é de -211,87 Reais; Caractere: toda e qualquer informação composta por um conjunto de caracteres alfanuméricos (0...9) e/ou especiais (por exemplo: # $ % & * ? ~ < ! @); Exemplos: a-) Constava na prova: “Use somente caneta !!”; ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 22 b-) O parque estava repleto de placas: “Não pise na grama.”; Lógico: toda e qualquer informação que pode apenas assumir duas situações (biestável); Exemplos: a-) A porta pode estar aberta ou fechada. b-) A lâmpada pode estar acessa ou apagada. A Linguagem de Programação C++ possui os seguintes tipos básicos de dados: char int float double void Tipo Descrição char Espaço que ocupa na memória equivale ao tipo caractere 1 byte int equivale ao tipo inteiro 2 bytes float equivale ao tipo real 4 bytes double void equivale ao tipo real, mas possui uma escala maior que a do tipo float 8 bytes tipo nenhum 0 bytes Faixa -128 a 127 (incluindo letras e símbolos) -32768 a 32767 3.4E-38 a 3.4E+38 1.7E-308 a 1.7E+308 nenhum valor Com exceção do tipo void, os tipos básicos de dados podem ser acompanhados por modificadores. Os modificadores de tipo oferecidos em C++ são: - long (mais longo, escala maior) short (mais curto, escala menor) unsigned (sem sinal, somente valores positivos) ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 23 Um modificador de tipo pode ser utilizado sem que seja especificado o tipo do dado. Quando isso é feito, o compilador assume, por default, que o tipo é int. A tabela a seguir mostra as características dos modificadores em C++: Tipo unsigned char unsigned short Descrição Espaço que ocupa na memória equivale ao tipo char considerando apenas valores positivos 1 byte equivale ao tipo int considerando apenas valores positivos 2 bytes equivale ao tipo int 2 bytes long unsigned long long double equivale ao tipo int ou short, mas com uma escala maior equivale ao tipo long considerando apenas valores positivos equivale ao tipo double, mas com uma escala maior 4 bytes 4 bytes 10 bytes Faixa 0 a 255 0 a 65535 -32768 a 32767 -2147483648 a 2147483647 0 a 4294967295 3.4E-4932 a 1.1E+4932 ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 24 VARIÁVEIS Uma informação é classificada como variável quando tem a possibilidade de ser alterada ao longo do tempo. Em um programa de computador cada variável corresponde uma posição de memória, cujo conteúdo pode variar no decorrer do tempo de execução do programa. Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor a cada instante. Toda variável é identificada por um nome ou identificador. Exemplo: Num algoritmo ou programa para cálculo das raízes de uma equação de 2o grau (ax2 + bx + c = 0), os identificadores a, b e c podem representar as posições de memória que armazenam os coeficientes (a, b e c) da equação, fazendo neste caso o papel das variáveis. FORMAÇÃO DOS IDENTIFICADORES (NOMES DAS VARIÁVEIS) Como na memória de um computador podem existir inúmeras variáveis, é necessário então diferenciá-las. Isto é feito por meio de identificadores. Na maioria das linguagens de programação, inclusive na linguagem C++, um identificador ou um nome de uma variável é formado por um ou mais caracteres, sendo que: o primeiro caractere é uma letra ou travessão ( _ ); os outros caracteres podem ser letras, algarismos ou travessão ( _ ). Exemplos: a-) Nomes válidos: L a de op1 V9a Lista_Notas a_2 p56 A1 _2A b-) Nomes Inválidos: x+ t.6 43x &ah $dolar Lista-Notas n! %p Em C++, letras maiúsculas e minúsculas são diferentes. Os seguintes nomes são distintos: PESO Peso peso peSo ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 25 Uma variável não pode ter o mesmo nome de uma palavra-chave de C++, como por exemplo: main cout cin float char short return case void DECLARAÇÃO DE VARIÁVEIS As variáveis só podem armazenar informações ou dados sempre de um mesmo tipo (inteiro, real, caractere ou char). Para indicar o tipo de uma ou mais variáveis é usada a declaração de variáveis. Na linguagem C++, a declaração de variáveis obedece a seguinte sintaxe: <tipo><nome>; Consiste no nome de um tipo, seguido do nome da variável, seguido de ponto-e-vírgula. O tipo da variável pode ser um daqueles tipos básicos de dados ou tipos primitivos vistos anteriormente (int, char, float, double, bool, ...). Exemplos: (declaração de variáveis em C++) int a; float soma; char nome; double x; unsigned b; long double valor; Se tivermos mais de uma variável do mesmo tipo, elas podem ser declaradas de uma única vez, separando seus nomes por vírgulas. Exemplos: int a, b, c; float divisao, soma, produto; char nome1, nome2, nome3; ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 26 É importante não esquecer que quando se declara uma variável, um espaço num determinado endereço na memória é alocado para armazenar um dado que obrigatoriamente tem que ser do mesmo tipo que o da variável. a int a; float x; MEMÓRIA espaço alocado para armazenar somente valores inteiros x espaço alocado para armazenar somente valores reais Em C++, toda e qualquer variável deve ser declarada e sua declaração deve ser feita antes de sua utilização no programa. Uma variável em C++, pode ser declarada em qualquer lugar do programa. Convencionalmente, os nomes das variáveis (identificadores) são sempre definidos com letras minúsculas. Exemplo: (programa em C++ com declarações de variáveis) # include <iostream.h> # include <conio.h> int a,b; // declaração de variáveis main() { int soma; // declaração de variável cout<<"Forneca dois valores: \n"; cin>>a>>b; soma = a + b; cout<<"A soma e: "<< soma; char letra1, letra2; // declaração de variáveis cout<<”Digite duas letras:\n”; cin>>letra1>>letra2; float produto; double quadrado; // declarações de variáveis produto = a * b; quadrado = a * a ; } Observação: Geralmente, as declarações de todas as variáveis são feitas no início da parte principal do programa (dentro do main()), logo depois da abertura de chave ({). CONSTANTES ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 27 Uma constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa. Um constante pode ser um número, um valor lógico ou uma seqüência de caracteres quaisquer com algum significado para o problema em estudo. A declaração de constantes em C++ pode ser feita de duas maneiras: 1-) Usando a diretiva define: # define <nome_da_constante> <valor> 2-) Usando o qualificador const: const <tipo_da_constante><nome_da constante> = <valor>; Exemplos: #define PI 3.1415 const float PI = 3.1415; #define AVISO “Pare !!” const double MAX = 32767; #define MAX 32767 É importante lembrar que o valor de uma constante não muda durante a execução de um programa. Convencionalmente, os nomes das constantes são sempre definidos com letras maiúsculas. Exemplo: (programa em C++ usando constantes) # include <iostream.h> # include <conio.h> #define AVISO "Pare" //declaração de uma constante const int VERDADE = 1; // declaração de uma constante main() { const float raio = 2; // declaração de uma constante float volume; ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 28 #define PI 3.1415 // declaração de uma constante volume = (4/3)*PI*raio*raio*raio; if (VERDADE) cout<<AVISO; getch(); } Observação: Geralmente, as declarações das constantes são feitas utilizando a diretiva define e colocadas antes da parte principal do programa (antes do main()), logo depois das diretivas include. ASPAS SIMPLES OU ASPAS DUPLAS A linguagem C++ reconhece uma cadeia de caracteres constante quando delimitada por aspas duplas. As aspas simples servem para representar um único caracter. Exemplos: #define NOME “Cadeia de Caracteres” #define LETRA ‘A’ INICIALIZAÇÃO DE VARIÁVEIS É possível combinar uma declaração de variável com o operador de atribuição para que a variável tenha um valor inicial ao mesmo tempo de sua declaração; é o que se chama de inicialização de variável. Exemplos: (inicialização de variáveis) int evento = 5; char corrida = ‘C’; float tempo = 27.32; double total1 = 37.6956, total2 = 0,5656; Inicializar uma variável significa atribuir um valor a ela na mesma instrução de sua declaração. Exercícios de Fixação: 1-) Quais dos seguintes nomes são válidos para variáveis em C++: a-) 3ab b-) _sim c-) n_a_o ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 29 d-) 00FIM e-) int f-) A123 g-) x**x h-) --A i-) y-2 K-) \meu l-) *y2 j-) OOFIM 2-) Quais das seguintes instruções são corretas ? a-) int a; d-) unsigned d; b-) float b; e-) long e; c-) double float c; f-) long char f; g-) unsigned char g; h-) short h; 3-) O tipo float ocupa o mesmo espaço que ______ variáveis do tipo char. 4-) Supondo que as variáveis nota, nmat, sx sejam utilizadas para armazenar a nota do aluno, o número da matrícula e o sexo, declare-as corretamente. 5-) Encontre os erros da seguinte declaração de variáveis: int idade, nfilhos; char placa; aviso; float soma, total, double saldo, debito, float produto; float idade; 6-) Qual o trecho de programa que inicializa a variável x ? a-) int x; x = 5; b-) int x = 5; c-) int x, y = 5; d -) x = y; 7-) Qual a diferença no uso de aspas simples e aspas duplas em C++? ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 30 OPERADORES E EXPRESSÕES A linguagem C++ é rica em operadores, possui aproximadamente 50. Alguns são mais utilizados que outros, como é o caso do operador de atribuição e dos operadores aritméticos. Operador de Atribuição: = Em C++, o sinal de igual não tem a interpretação dada em matemática. Representa a atribuição da expressão à sua direita à variável à sua esquerda. Exemplo: memória x 2000 x = 2000; atribui o valor 2000 à variável de nome x. A ação é executada da direita para a esquerda. É possível realizar em C++ atribuições múltiplas. Exemplo: memória y = z = 3; yy 33 z 3 atribui o valor 3 às variáveis de nome x e y. Operadores Aritméticos: + - * / % C++ oferece cinco operadores aritméticos binários (que operam sobre dois operandos) e um operador aritmético unário (que opera sobre um operando). Binários: + * / % Soma Subtração Multiplicação Divisão Módulo Unário: - Menos (unário) O operador módulo (%) opera somente com operandos inteiros e dá como resultado o resto da divisão do inteiro à sua esquerda pelo inteiro à sua direita. ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 31 Exemplo: (expressões aritméticas) x = 7; y = 3; soma 10 soma = x+y; sub = x – y; produto 21 produto = x * y; div = x / y; mod 1 mod = x % y; x = -y; sub 4 div 2,333 x -3 y 3 Valores atribuídos às variáveis depois da execução das operações aritméticas ao lado. A multiplicação, a divisão e o módulo têm precedência sobre a soma e subtração. Exemplo: int x = 5, y = 3, z = 1, n; n = z + y * x; o valor 16 será atribuído à variável n. Os parênteses têm maior prioridade. Eles são sempre avaliados primeiro. Exemplo: n = (z + y) * x; agora n conterá o valor 20. Quando uma expressão contém todos os operadores com mesma prioridade, a precedência das operações é da esquerda para a direita. É importante salientar que o operador unário é usado somente para indicar a troca do sinal algébrico do valor. Pode também ser pensado como o operador que multiplica seu operando por –1. Exemplo: x = -8; x = -x; depois destas duas instruções, o conteúdo de x será 8. Operadores de Incremento (++) e Decremento (--) O operador de incremento (++) é um operador unário que adiciona 1 à variável operando. ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 32 O operador de incremento pode ser usado de duas formas: prefixado quando aparece antes do nome da variável e pós-fixado quando aparece em seguida ao nome da variável. A instrução: x = x +1; é equivalente a: ++x; que é equivalente a: x++; A sintaxe e modo de uso do operador de decremento (- -) prefixado e pós-fixado é idêntica à do operador de incremento, exceto porque a variável é decrementada de 1. x = x –1; é equivalente a: --x; que é equivalente a: x--; Operadores Aritméticos de Atribuição: += -= *= /= %= Estes operadores são binários e combinam as operações aritméticas com atribuição. O operando da esquerda é sempre o nome de uma variável e o da direita, uma expressão qualquer. A operação consiste em atribuir um novo valor à variável que dependerá do operador e da expressão à direita. Exemplos: i += 2; equivale a i = i + 2; x *= y+1; equivale a x = x * (y + 1); t /= 2.5; equivale a t = t /2.5; p %= 5; equivale a p = p % 5; d -= 3; equivale a d = d –3; ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 33 Operadores Relacionais: > >= < <= == != Os operadores relacionais fazem comparações. São eles: > maior <= menor ou igual >= maior ou igual == igual < menor != diferente Os operadores relacionais serão utilizados sobre laços e comandos de decisão. Estas construções requerem que o programa pergunte sobre relações entre variáveis ou expressões. Exemplos: int x = 4; ((2 * x) == (24 / 3)) verdade ((15 % x) != (19 % 6)) verdade ((2 + 8 % 7) >= (3 * 6 – x)) falso Operadores Lógicos: && || ! Operadores lógicos também fazem comparações. A diferença entre comparações lógicas e relacionais está na forma como os operadores avaliam seus operandos. Operandos de operadores lógicos são avaliados como lógicos (0 ou 1), e não como numéricos. A linguagem C++ oferece três operadores lógicos: && lógico E || lógico OU ! lógico NÃO Destes operadores, ! é unário e os outros dois são binários. Se p e q são duas expressões, então: p && q p || q Resulta 1 (verdadeiro) somente se p e q forem outra situação, resulta 0 (falso). verdadeiras. Em qualquer Resulta 0 (falso) somente se p e q forem falsas. Em qualquer outra situação, resulta 1 (verdadeiro) ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 34 ! p Resulta 1 (verdadeiro) somente se p for 0 (falsa). Exemplos: int a = 2, b = 5; (a <= b) || ( a == 0) resulta 1 (verdadeiro) ! ((a <= b) || ( a == 0)) resulta 0 (falso) (b < a) && (b == 5) resulta 0 (falso) !(b < a ) && (a ==2) resulta 1 (verdadeiro) (!(b < a ) && (a ==2)) && (a <= b) resulta 1 (verdadeiro) ((b < a) && (b == 5)) || (a ==2) resulta 1 (verdadeiro) FUNÇÕES MATEMÁTICAS PRÉ-DEFINIDAS Em C++ existem diversas funções matemáticas já definidas. As mais utilizadas são: sqrt (x) equivale a x1/2 (raiz quadrada) pow(x,n) equivale a xn abs (x) equivale a |x| (valor absoluto) sin(x) equivale a sen(x) cos(x) equivale a cos(x) Para utilizar as funções matemáticas pré-definidas em um programa em C++ é necessário incluir a biblioteca math.h. # include <math.h> Exercícios de Fixação: 1-) Assuma que todas as variáveis são do tipo int e encontre o valor de cada uma delas: a-) x = (2 + 1) * 6; b-) y = (5 + 1) / 2 * 3; ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 35 c-) i = j = (2 + 3) / 4; d-) a = 3 + 2 * (b = 7 / 2); e-) c = 5 + 10 % 4 / 2; 2-) Reescreva as seguintes instruções usando os operadores de incremento e decremento: numero = numero + 1; valor = valor –1; 3-) Quais são os valores de cada variável nas seguintes expressões ? int a = 1, b = 2, c = 3, d = 4; a-) a = b % c; b-) a = b++; c-) a = ++b; d-) a += b + c; e-) d %= b; f-) b *= c; g-) b *= c = d + 2; h-) d %= a + a + a; i-) d -= c -= b -= a; j-) a += b += c += 7; 4-) Quais das seguintes expressões estão corretas ? a-) a == ‘A’ b-) a > b c-) a =< b d-) a >= b e-) –a = b f-) –a == b g-) a =! b h-) –85.2 >= (x * 45.3 + 32.34) 5-)Qual é o valor (0 ou 1) das seguintes expressões: int x =2, y = 5; bool a =1; a-) 1 > x d-) (x + y == 10) && ( 3 < x) b-) ! (1 > x) c-) 3 == x e-) !((0 < -1) || (x < y)) f-) !((3 < 10) && (y > 7)) || ((4 +1 = 6) && ( x < y) && !(x==y)) g-) a h-) !a i-) !(a==0) 6-) Qual é o valor da variável y em cada expressão? ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 36 float x = 4, n = 0.5, y; a-) y = pow(x,n) b-) y = cos(0) + sen(0) ; c-) y = abs(1 – x); d-) y = sqrt(x); e-) y = pow(sqrt(x), n + 0.5); COMANDOS DE ENTRADA E SAÍDA cout O comando cout é utilizado para imprimir uma mensagem na tela. O operador inserção << conecta a mensagem a ser impressa à cout. de As definições necessárias ao uso de cout e << estão no arquivo “iostream.h”. Exemplo: cout<<“Primeiro Programa !!!”; A instrução acima imprimirá na tela: Primeiro Programa !!! A mensagem a ser imprimida pelo cout deve ser colocada obrigatoriamente entre aspas duplas. Tudo o que está entre as aspas será imprimido de maneira idêntica na tela, exceto códigos especiais. Códigos Especiais \n \b \a \r \” Significado Nova linha Retrocesso Beep – Toca o alto-falante Cursor para o início da linha Aspa dupla (“) O código especial mais utilizado é o \n que ativa uma nova linha. Exemplo: cout<<“Primeiro \n Programa \n !!!”; A instrução acima imprimirá na tela: ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 37 Primeiro Programa !!! O comando cout também pode ser utilizado para imprimir o conteúdo de uma variável na tela. Exemplo: float x = 2.54; cout<<“O conteúdo de X é: ”<<x; A instrução acima imprimirá na tela: O conteúdo de X é: 2.54 O exemplo acima mostra o conteúdo de uma variável sendo impresso no final da frase. Os conteúdos das variáveis também podem ser impressos no meio das frases. Exemplo: float x = 2.53; int y = 300; cout<<“O conteúdo de X é ”<<x<<“ e o de Y é ”<<y; A instrução acima imprimirá na tela: O conteúdo de X é 2.53 e o de Y é 300 cin O comando cin manipula toda entrada do teclado por meio do operador de extração >> que conecta a entrada de dados à variável que a conterá. As definições necessárias ao uso de cin e >> estão no arquivo “iostream.h”. Exemplo: int anos; cout<<”\n Digite a sua idade em anos: “; cin>>anos; No momento da execução da instrução “cin>>anos;”, o cursor ficará “piscando” na tela de execução do compilador C++ esperando que o usuário digite a idade. O número digitado será armazenado na variável “anos” declarada como “int”. O operador >> pode apresentar-se diversas vezes numa instrução com a finalidade de permitir a introdução de diversos valores ao mesmo tempo. ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 38 Quando se utiliza múltiplos valores de entrada, a primeira variável mencionada conterá o valor digitado, e as outras serão sempre preenchidas na ordem em que aparecem. Exemplo: float p1, p2, p3, p4; cout<<”\n Digite as notas das 4 provas: “; cin>>p1>>p2>>p3>>p4; Múltiplas entradas são digitadas separadas por um espaço em branco. O comando cin entende um espaço em branco como término de uma entrada e o [ENTER] como finalizador geral. É recomendado sempre utilizar o comando cout antes do cin, para imprimir uma frase na tela explicando qual a informação que o usuário deve fornecer. getche( ) e getch( ) Em algumas situações, o comando cin não se adapta perfeitamente, pois há a necessidade de pressionar a tecla [ENTER] toda vez que se deseja terminar a leitura de dados. A biblioteca C++ oferece duas funções seguintes que lêem um caractere no instante que é digitado, sem esperar [ENTER]: getche() e getch() A diferença entre as duas é que quando se utiliza a função getche() o caractere digitado é impresso no vídeo, o que não acontece quando se utiliza a função getch(). A expressão: ch = getche( ); atribui o valor da função getche à variável ch. ____________________________________________________________________________________ Algoritmos Professor: Pa ulo Renato 39