Programação em C++ Iniciação à linguagem C++ Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa 1º Programa em C++ • Um programa em C++ é constituído por: – Várias funções, das quais uma obrigatoriamente tem que se chamar main. • A função main(), como qualquer outra é definida : #include <iostream.h> int main() { // Mensagem a mostrar no ecra. cout << "Hello, World!\n"; return 0; } – por um cabeçalho constituído por: • tipo de dados que a função devolve. • o seu nome. • parâmetros formais que recebe. – por um corpo (definido entre “{ }”) com : • declarações • definições • instruções • comentários – Inclusão de ficheiros header com: • protótipos de funções, macros, instruções, declarações de tipos Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-2 Outro exemplo Ex . - Mostrar a equivalência entre números decimais, hexadecimais e octais #include<iostream.h> #include<iomanip.h> void main() { int fim,inc,num; // Primeira linha (declaracoes). fim=16; // Segunda linha (afectação). inc=1; // Terceira linha (afectação). // Quarta linha (expressão). cout << "decimal hexadecimal octal" << endl; // Quinta linha (instrução for). for (num =0; num <= fim ;num= num + inc) cout << dec <<num<<´-´<< hex <<num<<´-´<< oct <<num<<endl; } Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-3 Ambiente de desenvolvimento - editor –compilador –linker/locator –debugger Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-4 Editar (.CPP) Compilar (.OBJ) Ligar (.EXE) ou (.COM) Não cumpre os objectivos Modulo Compilado Executável Erro Modulo C++ Erro Enunciado do problema Erro Fases de geração de um programa T estar OK Sempre que um programa for constituído por vários módulos, torna-se necessário criar um projecto, indicando quais os módulos que devem ser ligados, na fase de criação do programa final. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-5 Palavras chave do C++ O C++ (como qualquer linguagem) define um conjunto de palavras que não podem ser usadas para objectivos diversos do seu significado. Palavras chave do C++ asm auto break case catch char class const continue default delete do double else enum extern float for friend goto if inline int long new operator private protected public register return short signed sizeof static struct switch template this throw try typedef union unsigned virtual void volatile while Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-6 Declarações e definições Em C++ qualquer identificador tem que ser declarado antes de ser usado. Declarar uma entidade, consiste exclusivamente em anunciar a sua existência, explicitando-lhe o nome e o tipo. extern int x; float sqrt ( float ); No entanto, a maior parte das declarações, são também definições, isto é, definem a entidade que passa a ser designada por esse nome. int y; // variável y do tipo inteiro /*variável do tipo char, iniciada com o caracter 'k'.*/ char c='k'; Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-7 Operadores e expressões Com variáveis e operadores, constroem-se expressões a que ficam associados valores. Expressões operam sobre variáveis de forma a produzir novos valores. Como constituintes de um programa, constam também operadores aritmético, lógicos e relacionais ( +, -, *, /, =, &&, ||, etc. ). #include <iostream.h> void main() { // Directiva para o pré processador. // Declaração (definição e iniciação) de uma constante do tipo float. const float pi = 3.14159265; int raio; // Declaração (definição) de um inteiro. float area; // Declaração (definição) de um float. // Instruções de saída e entrada de dados Cálculo da área de um circulo cout << "Qual o raio do circulo? "; cin >> raio; area = pi * ( raio * raio ); // Aqui têm que existir conversões de tipos. cout << "A area e’ " << area << endl; // Escrita do área no ecrã. } Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-8 Tipos primitivos de dados e sua representação Tipos fundamentais Significado Qualificadores Aplica-se a Representa int inteiro short int menor dimensão char carácter long int ; double maior dimensão float vírgula flutuante (floating point) de precisão simples signed char; int com sinal double vírgula flutuante de precisão dupla unsigned char; int valor sem sinal A partir dos tipos de variáveis básicos, definem-se outros tipos de variáveis ditos tipos derivados, tais como arrays, enumerados, apontadores, referências, estrutura e uniões desses tipos fundamentais (ou básicos). Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2-9 Alcance e espaço de memória ocupado Tipo Ambiente 16 bits Ambiente 32 bits signed int 2 bytes (de -32768 a +32767) 4 bytes (- 2 147 483 648 a + 2 147 483 647) unsigned int 2 bytes (de 0 a 65535) 4 bytes (de 0 a 4 194 967 295) float 4 bytes (de 3.4E-38 a 3.4E+38) 4 bytes (de 3.4E-38 a 3.4E+38) signed char 1 byte (-128 a +127) 1 byte (-128 a +127) unsigned char 1 byte (de 0 a 255) 1 byte (de 0 a 255) short ou short int 2 bytes (Idêntico a int) 2 bytes (de -32768 a +32767) unsigned short ou 2 bytes (Idêntico a unsigned int) 2 bytes (de 0 a 65535) long ou long int 4 bytes (- 2 147 483 648 a + 2 147 483 647) 4 bytes (- 2 147 483 648 a + 2 147 483 647) unsigned long int ou unsign long 4 bytes (0 a 4 194 967 295) 4 bytes (0 a 4 194 967 295) unsigned short int double ou long double 8 bytes (1.7E-308 a 1.7E+308) 8 bytes (1.7E-308 a 1.7E+308) Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 10 Representação de dados formatados no stdout #include <iostream.h> #include <iomanip.h> void main() { int int_num = 255; float float_num = 99.99895; // long int por omissão. long big_num = 1250500750.75; cout <<"12345678901234567890\n"; cout << int_num << endl; cout << setw(6) << int_num << endl; cout << big_num << endl; cout << float_num << endl; } Qual será o output deste programa 12345678901234567890 255 255 1250500750 99.99895 Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 11 Operadores - Precedência e ordem de avaliação (1) Símbolo :: :: De scrição sumária resolução de alcance refere nome global Forma de aplicação nome_classe :: membro :: nome selecção de membro Indexação chamada a função construção de objecto dimensão de objecto dimensão de tipo apontador -> membro apontador [ exp ] exp ( lista_exp ) tipo ( lista_exp ) sizeof exp sizeof tipo pós ou pré incremento pós ou pré decremento complemento bit a bit negação lógica unário menos unário mais endereço de desreferência criar , alojar destruir , desalojar destruir array cast , conversão de tipo lvalor ++ ou ++ lvalor lvalor -- ou -- lvalor ~ exp ! exp - exp + exp & lvalor * exp new tipo delete apontador delete [ ] apontador ( tipo ) exp * / % multiplicar dividir módulo, resto exp * exp exp / exp exp % exp + - adição , mais subtracção , menos exp + exp exp - exp << >> deslocar esquerda deslocar direita lvalor << exp lvalor >> exp -> [] () () sizeof sizeof ++ -~ ! + & * new delete delete[] () Associatividade Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 12 Operadores - Precedência e ordem de avaliação (2) Símbolo < <= > >= Descrição sumária menor que menor ou igual que maior que maior ou igual que exp exp exp exp == != Igual Diferente exp == exp exp != exp & AND bit a bit exp & exp ^ XOR bit a bit exp ^ exp | OR bit a bit exp | exp && AND lógico exp && exp || OR lógico exp || exp ?: Operador condicional exp ? exp : exp afectação simples multiplica e afecta divide e afecta módulo e afecta soma e afecta subtrai e afecta desloca direita e afecta desloca esquerda e afecta AND e afecta bit a bit OR e afecta bit a bit XOR e afecta bit a bit lvalor = exp lvalor * = exp lvalor / = exp lvalor % = ex lvalor + = exp lvalor - = exp lvalor >> = exp lvalor <<= exp lvalor & = exp lvalor | = exp lvalor ^ = exp vírgula, sequência exp , exp = *= /= %= += -= >>= <<= &= |= ^= , Forma de aplicação < exp <= exp > exp >= exp Associatividade Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 13 Instrução de controlo de execução Decisão binária - if Fluxograma Em C++ if ( A < B ) FALSE A<B cout<<"A>=B"; TRUE cout<<"A<B"; cout << “A<B”; else cout << “A>=B”; Programa em C++ O ano é bissexto? #include <iostream.h> void main() { int year; cout << "Ano -> "; cin >> year; if (year%400 == 0 || year%4 == 0 && year%100 != 0) cout << "E’"; else cout << "Nao e’"; cout << " um ano bissexto." << endl; } Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 14 Operador condicional ternário (?:) O operador condicional ternário é uma forma compactada de exprimir uma acção condicional ifelse; modulo_n = (n<0) ? -n: n; if (n<0) modulo_n=-n; else modulo_n=n; Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 15 Instrução de controlo de execução Decisão múltipla - switch Fluxograma i == 0 Em C++ TRUE cout<<"zero"; FALSE i == 1 TRUE cout<<"um; FALSE i == 2 switch( i ) { case 0: cout<<“zero”; break; case 1: cout<<“um”; break; case 2: cout<<“dois”; break; default: cout<<“outro”; } TRUE cout<<"dois"; FALSE cout<<"outro"; Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 16 Quantos dias faltam até ao fim do mês? #include<iostream.h> void main() { int dia, mes, a, numDias; cout << "Dia -> "; cin >> dia; cout << "Mes -> "; cin >> mes; cout << "Ano -> "; cin >> a; if ( mes > 0 && mes <= 12) switch (mes) { case 2 : numDias = 28 + (a%400 == 0 || a%4 && a%100 != 0); break; case 4 : case 6 : case 9 : case 11: numDias = 30; break; default: numDias = 31; } else numDias = 0; if (dia > 0 && dia <= numDias) cout << "Faltam " << (numDias - dia) << "dias." << endl; else cout << "Data invalida." << endl; } Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 17 Instruções de controlo de execução Repetição condicional - while, for, do-while Em C++ Fluxograma i = 1; while ( i < 6 ) { cout << “i=“ << i << endl; i = i + 1 ; } i = 1; i = i + 1; cout<<" i = "<<i<<endl; i<6 T RUE for ( i=1 ; i<6 ; i=i+1 ) cout << “i=“ << i << endl; F ALSE cout<<" i = "<<i<<endl; TRUE i = i + 1; do { cout << “i=“ << i << endl; i = i + 1 ; } while ( i < 6 ); i<6 FALSE Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 18 Adivinhar um nº entre 0 e 7 em 3 tentativas (1) Arvore de decisão binária X>=4 FALSE FALSE X>=2 T RUE T RUE X>=1 FALSE X>=3 X>=6 T RUE X>=5 X>=7 FALSE T RUE FALSE T RUE FALSE T RUE FALSE T RUE X=0 X=1 X=2 X=3 X=4 X=5 X=6 X=7 Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 19 Adivinhar um nº entre 0 e 7 em 3 tentativas (2) Fluxograma Programa em C++ i=4; n=0; i>0 FALSE X=n; i /= 2; T RUE X >= i+n T RUE n += i; FALSE #include <iostream.h> #include <ctype.h> void main() { cout << "Pense num numero de 0 a 7 " " e prima uma tecla."; cin.get(); // Adivinhar o número. int number = 0; for(int i = 4 ; i > 0; i /= 2) { char ch; cout << "\nE’ maior ou igual que " << (i + number) << " (S/N)?"; cin >> ch; if (toupper(ch) == 'S') number += i; } cout <<"\nO numero que pensou e’ ” << number <<'.' << endl; } Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 20 Instruções de transferência de controlo break e continue void main() { char buf[80]; cout << "Escreve uma string : "; cin.getline(buf, 80, '\n'); for(int i = 0; i < strlen(buf); ++i) if(buf[i] != '@') continue; else { cout << "Caracter '@' encontrado na posição " << i << endl; break; } if ( i == strlen(buf) ) cout << "caracter '@' não encontrado!" << endl; } cout << “BYE” << endl; Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 21 Instruções de transferência de controlo goto #include <iostream.h> #include <ctype.h> void main() { char ch; cout<<"O programa verifica se um inteiro e' capicua.\n"; do { unsigned long number, invNumber = 0; cout <<"Escreva o inteiro - "; cin >> number; while ( number ) { int digit = (int) (number % 10); if ( (number/=10) == invNumber || E´capicua? number == (invNumber = invNumber * 10 + digit)) { cout << "Muito bem, o inteiro escrito"; } goto endProgram; } cout<<"Nao e' capicua.\nQuer tentar de novo (S/N) ? "; cin>>ch; } while ( tolower(ch) == 's’ ); // Repetir até basta. cout << "Por exemplo 12321"; endProgram: cout << " e' capicua." << endl; } Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Iniciação à linguagem C++ 2 - 22