Вы находитесь на странице: 1из 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Linguagem C++

Autor: Jos Ferreira da Costa Neto

Pgina 1 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Linguagem C++ - Tutorial


Este Tutorial pretende dar uma breve e simples introduo a vrios aspectos da linguagem C++. No objetivo criar um Tutorial extenso, quer em teoria quer em prtica, mas sim dar a conhecer certos tpicos que podero ser posteriormente desenvolvidos. Este Tutorial foi criado a pensar em todo aquele que quer aprender C++. fundamental, para quem quiser seguir convenientemente o Tutorial, ter um compilador de C++ em casa. Aconselho o Visual C++ pela sua facilidade de funcionamento. O C++ uma linguagem difcil de aprender e, falando por experincia prpria, pouco estimulante. Digo isto porque se, por exemplo, no Visual Basic no preciso grandes conhecimentos para fazer janelas, desenhar imagens, incluir som, no C++ ! Nos primeiros captulos ir trabalhar-se com o DOS prompt, o que no muito apelativo... Mas o leitor tem de perceber que importante aprender as bases antes de criar programas mais vistosos. Este Tutorial tem um pouco de teoria, mas sobretudo com a prtica que se aprende programao! Se no experimentar os exemplos e ver as coisas funcionando no aprender nada!

Escrevendo na sada padro (tela DOS)


Um programa em C++ um conjunto de funes. O conceito de funo ser explicado mais frente. Por agora s preciso saber que todo o programa em C++ tem obrigatoriamente de conter uma funo main. Aqui est o programa mais bsico do C++, um programa que no faz nada: // programa que no faz nada! int main() { /* o cdigo que faria o programa funcionar deveria estar aqui */ return 0; } Aquele texto comeado por //, um comentrio, os comentrios so ignorados pelo compilador e devem ser usados abundantemente, para fazer com que o cdigo seja mais fcil de compreender. Existem duas maneiras de realizar comentrios, usando "//", o que far com que toda a linha, a partir da, seja comentada, e /* em que o texto que fica entre */ um comentrio. Antes de main() est a palavra int, que uma palavra reservada do C++. Por agora no necessrio compreender estes conceitos, necessrio compreender que aquilo acima a base de qualquer programa em C++. O C++ Case Sensitive,ou seja diferente escrever mAin(), Main(), MAIN(). Se no houver uma funo com o nome exatamente igual a main(), o programa no funcionar! Os Arquivos fonte da linguagem C++ tm a extenso ".cpp". Sempre que criar um arquivo com cdigo em C++ , ponha-lhe um nome do gnero: "nome_Arquivo.cpp".

Pgina 2 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Antes de mais nada, o que a sada padro? Sempre que me referir sada padro falo de uma sada no DOS. A seguir encontra-se o programa de praxe para quem comea a aprender uma linguagem de programao: // este programa escreve na sada padro a mensagem "Ol Mundo!" #include <iostream.h> // obrigatrio para poder usar cout<<"..."; int main() { cout<<"Ol Mundo!"<<endl; return 0; } Comecemos pela primeira linha, o C++ uma linguagem poderosa devido s suas bibliotecas, a primeira linha permite ao programa poder escrever na sada padro. Por agora o leitor ter de se contentar com esta explicao, e usar sempre aquela linha. S mais adiante ela poder ser explicada com clareza. Explicado assim por alto, o que #include <iostream.h> faz incluir no programa o contedo do arquivo iostream.h J dentro da funo main() encontra-se a instruo cout<<"Ol Mundo!";, que far aparecer na tela "Ol Mundo!". A palavra endl diz ao programa para mudar de linha e todas as instrues dentro do main() tm de ser concludas com ponto e vrgula ';'. Isto no bem assim, mas por agora ter de servir.

Sada formatada
Largura da sada: Voc pode querer que a sida seja alinhada em colunas, o que significa que a sada deve ser escrita com uma largura fixa. Um programa pode especificar uma largura default para cada item mostrado inserindo o manipulador setw no fluxo ou chamando a funo membro width. O manipulador setw e width usam um parmetro de largura. Exemplo: mostrando uma coluna de nmeros: #include <iostream.h> #include <iomanip.h> main() { static double values[]={1.23, 35.36, 653.7,4358.224}; for (int=I; I < 4; i++) cout << values[i] << \n; } Os programa mostra a seguinte tela: 1.23 35.36 653.7 4358.224 (repare que os nmeros esto desalinhados)

Pgina 3 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Chamando a funo width com um argumento de 10, o resultado seria:

#include <iostream.h> #include <iomanip.h> main() { static double values[]={1.23, 35.36, 653.7,4358.224}; for (int i=0; i < 4; i++) { cout.width(10); cout << values[i] << \n; } } Significa que a saida deve aparecer em colunas de pelo menos 10 caracteres de largura. O resultado seria assim: 1.23 35.36 653.7 4358.224 (a coluna possui 10 caracteres de largura e os nmeros alinhados a direita) Algumas vezes preciso usar larguras diferentes para dados diferentes. O manipulador setw oferece esta capacidade. Exemplo #include <iostream.h> #include <iomanip.h> main() { static double values[]={1.23, 35.36, 653.7,4358.224}; static char *nomes[]={Zoot, Jimmy, Al,Stan}; for (int i=0; i < 4; i++) { cout.<< setw(6) << nomes[i] << setw(10) << values[i] << \n; } } O resultado seria: Zoot Jimmy Al Stan 1.23 35.36 653.7 4538.224

Note que a utilizao de setw ou width no provoca nenhuma truncagem. Se o valor mostrado for maior do que a largura corrente, o dado inteiro ser mostrado mesmo assim. Para restaurar a largura default do objeto, usa a funo width ou o setw com um argumento zero.

Pgina 4 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Voc pode usar a funo fill para definir o valor do caractere de preenchimento para sadas que tem larguras diferentes da default. Exemplo:

#include <iostream.h> #include <iomanip.h> main()


{

static double values[]={1.23, 35.36, 653.7,4358.224}; for (int i=0; i < 4; i++) { cout.width(10); cout.fill(*); cout << values[i] << \n; } }
A saida gerada :

**********1.23 *********35.36 *********653.7 ******4358.224 O asterisco completa o que falta para ficar com o tamanho de 10.

Justificando a sada
Suponha que voc queira que os nomes do exerccio anterior fiquem justificados esquerda e que os nmeros permaneam justificados direita. Voc pode usar o manipulador setioflags para especificar que a sada deve ser justificada esquerda ou direita. Exemplo: #include <iostream.h> #include <iomanip.h> main() { static double values[]={1.23, 35.36, 653.7,4358.224}; static char *nomes[]={"Zoot", "Jimmy", "Al","Stan"}; for (int i=0; i < 4; i++) { cout << setiosflags(ios::left) << setw(6) << nomes[i] << resetiosflags(ios::left) << setw(10) << values[i] << '\n'; } cin.get(); } O resultado seria: Zoot 1.23

Pgina 5 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Jimmy 35.36 Al 653.7 Stan 4538.224 O exerccio ajusta a justificao esquerda usando o manipulador setiosflags com um argumento de ios::left. (isso tem que ser includo). O manipulador resetiosflags desliga a justificao esquerda para retornar ao modo default de justificao direita.

Preciso
Suponha que voc queira que os nmeros de ponto flutuante do exerccio anterior sejam mostrados com uma casa decimal. O manipulador setprecision informa ao objeto para usar um determinado nmero de dgitos de preciso. Exemplo: #include <iostream.h> #include <iomanip.h> main() { static double values[]={1.23, 35.36, 653.7,4358.224}; static char *nomes[]={"Zoot", "Jimmy", "Al","Stan"}; for (int i=0; i < 4; i++) { cout << setiosflags(ios::left) << setw(6) << nomes[i] << resetiosflags(ios::left) << setw(10) << setprecision(1) << values[i] << '\n'; } cin.get(); } O resultado seria: Zoot Jimmy Al Stan 1 4e+001 7e+002 4e+003

A notao cientfica mostrada pode no ser aquilo que o programa precisa mostrar. Existem dois sinalizadores, ios::fixed e ios::cientific, que controlam a maneiro como um nmero de ponto flutuante mostrado. Um programa pode ligar e desligar estes sinalizadores utilizando os manipuladores setiosflags e restiosflags. #include <iostream.h> #include <iomanip.h> main() { static double values[]={1.23, 35.36, 653.7,4358.224}; static char *nomes[]={"Zoot", "Jimmy", "Al","Stan"}; for (int i=0; i < 4; i++) { cout << setiosflags(ios::left) << setw(6) << nomes[i] << resetiosflags(ios::left) << setiosflags(ios::fixed) << setw(10) << setprecision(1) << values[i] << '\n';

Pgina 6 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados } cin.get(); } O O resultado seria: Zoot Jimmy Al Stan 1.2 35.4 653.7 4358.2

Apostila de C++

O exerccio a seguir usa o manipulador setiosflags para ligar o sinalizador ios::fixed, de modo que o programa no mostre mais os nmeros em notao cientfica.

OBSERVAES IMPORTANTES
Os dois comandos a seguir so semelhantes: cout.put(A); cout << A; Os dois commandos a seguir tambm so semelhantes: cin.getline(nome, 35); (considerando um char com 35 posies) gets(nome); Os dois commandos a seguir tambm so semelhantes: cin.get(ch); cin >> ch;

(considerando ch uma varivel tipo char)

No h nada melhor para aprender estes conceitos que experimentar! Faa um programa parecido, mude as palavras... E j agora um pouco de teoria extra. Existem trs momentos na realizao de um programa: design time (tempo de criao do cdigo), compile time(quando o compilador est a criar o executvel) e run time(durante a execuo do programa).

Lendo Valores da Entrada Padro (teclado) Variveis e Seus Tipos


At aqui j sabemos escrever na sada padro, mas fundamental que escrevamos aquilo que queremos e quando queremos. Ao escrever cout<<"Ol!; sempre que rodarmos o programa aparecer "Ol!", e se quisermos escrever outras coisas? O conceito de varivel nasce daqui. Varivel tipo uma gaveta onde temos um valor que pode mudar quando quisermos e h vrios tipos de variveis, sendo as mais simples as seguintes: // declarao int main() { int a; double b; char c; bool d; return 0; de variveis

// cria uma varivel numrica de tipo inteiro com o nome a // cria uma varivel real com o nome b // cria uma varivel que contm um nico caractr // cria uma varivel booleana (true ou false)

Pgina 7 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados }

Apostila de C++

Isto assim no d muito jeito, preciso poder alterar o contedo das variveis. Para isso existe o operador '='. O exemplo seguinte mostra como declarar, inicializar e mostrar na sada padro variaveis. // declarao, inicializao e escrita de variveis na sada padro #include <iostream.h> int main() { int a; // declarar a varivel a como inteiro a = 2; // atribui a varivel a com o nmero 2 cout<<"a = "<< a<<endl; // escreve na sada padro a = 2

double b = 1.2; // declarar e inicializar a varivel b com 1,2 /* ateno que no C++ a vrgula ',' representada por um ponto '.' */ cout<<"b = "<< b<<endl; // escreve b = 1.2

char c = 'C'; // declarar e inicializar a varivel c com o caractr 'C' cout<<"Linguagem "<< c <<"++"<<endl; /* escreve Linguagem C++ */

return 0; } As variveis podem ter qualquer nome e diferente escrever int verde; e int Verde; Sero criadas duas variveis distintas. No sei se reparou mas por vezes uso aspas ' " ', e outras vezes a apstrofo ' ' ' para representar texto. Isto funciona assim, texto entre aspas considerado uma string (conjunto de caracteres) e entre apstrofo(aspas simples) um nico caracter. O tipo bool apenas suporta os valores 1(true) ou 0(false). A sua utilidade ser verificada mais frente.

Lendo da Entrada Padro (teclado)


Em programao muito comum precisarmos de pedir valores ao usurio do programa em run time. Para isso usa-se um mtodo semelhante ao cout<<""; // declarao, inicializao e escrita de variveis na sada padro #include <iostream.h> // a varivel de leitura tambm se encontra neste Arquivo int main() { int a; // declarao da varivel a cout<<"introduza um nmero inteiro:"<<endl; cin>>a; // l do teclado um valor inteiro e guarda na varivel a

cout<<endl<<"Acabou de introduzir o nmero: "<< a << endl;

Pgina 8 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados cout<<"Pressione ENTER para terminar o programa."; cin.get(); // espera que o usurio pressione ENTER }

Apostila de C++

A melhor maneira de aprender o conceito de cin, testar o programa. Resumidamente o que ele faz parar o programa espera que o usuro introduza um nmero seguido de ENTER. Outra novidade a instruo cin.get(); Se algum experimentou testar algum dos programas anteriores clicando no seu executvel, com certeza que no viu nada! Isto porque no havia nada que indicasse ao programa para parar, para que o usuario pudesse ver o que estava a acontecer! O cin.get(); faz com que o programa pare, espera da tecla ENTER por parte do usurio.

Variveis Constantes
Pode haver a necessidade de se ter uma varivel constante, que no mude durante a execuo do programa, para isso basta fazer const in a =10; Desta forma o a permanecer igual a 10 durante todo o programa. A utilidade das variveis constantes ser verificada novamente quando falarmos de arrays. Nos prximos captulos vamos-nos debruar sobre os tipos de variveis numricas, s depois falando do char.

Operaes aritmticas com variveis numricas


Este captulo mostra como efetuar clculos na Linguagem C++ com base num exemplo prtico. A tabela seguinte mostra os operadores aritmticos do C++: operador exemplo = + * / descrio

a = b = c; o exemplo teria o seguinte resultado a = ( b = c ) a = b + c; guarda na varivel a a soma de b e c a = b - c; guarda na varivel a a diferena entre b e c a = b * c; guarda na varivel a o produto de b e c a = b / c; guarda na varivel a a diviso de b com c

Desta maneira representam-se as operaes aritmticas bsicas. Contudo o C++ disponibiliza outros operadores (de convenincia): operador o mesmo que: a += b; a = a + b; a -= b; a /= b; a *= b; a; --a; a = a -b; a = a / b; a = a *b; a = a + 1; a = a - 1;

a %= b; a = a % b;

Para aquele que est a aprendendo, penso que a instruo a=a+b; poder ser um pouco confusa. O que vai se passar o seguinte: o a armazenar a soma do seu valor com b. Se a=2 e b=3, (a=a+b) o mesmo que (a=2+3).

Pgina 9 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Para solidificar esta teoria, fica aqui um exemplo prtico. O objetivo deste programa pedir ao usurio 3 nmeros e apresentar a sua mdia. // mdia de 3 valores #include <iostream.h> int main() { // declaraes das variveis int a, b, c; // o mesmo que int a; int b; int c; double media; /* varivel para armazenar o valor da mdia, double porque o resultado pode no ser inteiro */

cout<<"Introduza 3 nmeros inteiros: "; cin>> a >> b >> c; // o mesmo que cin>>a; cin>>b; cin>>c;

// calcular a mdia media = (a+b+c) / 3;

// apresentar o resultado cout<< endl<< "A mdia : "<< media<< endl; cout<<"Enter para terminar"; cin.get(): return 0; }

Operadores de Incremento e Decremento


Existem dois tipos de operadores de incremento e decremento: exemplo: ++i; i++; No primeiro caso a varivel incrementada e retorna o seu valor. No segundo, primeiro retornado o valor da varivel i e s depois esta incrementada. Exemplo prtico: #include <iostream.h> int main() { int i = 2, j = 3; // declarao e inicializao das variveis j e i int a = 0; // para testes

a = ++i; a = j++;

// a=3, i=3 // a=3, j=4

--i; // i = 2 j--; // j=3

Pgina 10 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados return 0; }

Apostila de C++

Instrues de controle de execuo com operadores lgicos


J aprendemos a usar variveis, a fazer clculos e apresentar resultados. Agora chega a parte de aprender a fazer com que o nosso programa tome decises, decida entre fazer isto ou aquilo, fazer a mesma coisa um nmero pr-definido de vezes, ou simplesmente enquanto ns quisermos! Nos prximos captulos falaremos do que so as instrues de Controle e Execuo, porm, para as podermos utilizar convenientemente e com sabedoria, necessrio primeiro conhecer os operadores lgicos.

Operadores Lgicos
As seguintes tabelas definem todos os operadores lgicos do C++. Sejam a e b duas variveis booleanas (do tipo bool): Operao AND (&&) a b a && b 000 010 000 111 Operao OR ( || ) a ba||b 000 011 101 111 Operao IGUAL ( = = ) a bab 001 010 000 111

Lembre-se que um bool apenas permite os dois valores lgicos true e false. Tente fazer o seguinte exerccio: int main() {

Pgina 11 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados bool b = true, c = false; bool a = 0; /* embora se possa inicializar ou atribuir um bool com 0 ou 1 recomenda-se sempre que se use true ou false */

Apostila de C++

// exemplo b = !a; // b passou a false c = a || b; // c continua a false

// tente encontrar o novo valor de a a = (!b) || (a && c); return 0; } Operadores Relacionais operador descrio a>b a<b a <= b a >= b a == b a != b retorna true se a maior que b retorna true se a menor que b retorna true se a menor ou igual a b retorna true se a maior ou igual a b retorna true se a igual a b retorna true se a diferente de b

Instruo if-else
A instruo if-else tem a seguinte sintaxe: if( <teste> ) <instruo 1> else <instruo 2> ou simplesmente if( <teste> ) <instruo 1> No primeiro caso, se <teste> for true, ento realizar-se- a <instruo 1>, se for false passa para a <instruo 2>. No segundo caso apenas se <teste> for true se poder efetuar a <instruo 1>. Vejamos o seguinte exemplo prtico: #include <iostream.h> int main() { int a, b;

// pedir dois valores inteiros

Pgina 12 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados cout<<"Introduza 2 valores inteiros: "<< endl; cin>>a>>b;

Apostila de C++

if( a == b ) cout<<"Os valores sao iguais!"; else cout<<"Os valores sao diferentes!";

cin.get(); return 0; } No parmetro de teste do if pode-se ter qualquer expresso, mas s ser efetuada a instruo correspondente se o resultado dessa expresso for true. Talvez voc se pergunte: Ento e se eu quiser por mais que uma instruo? Aqui entra o conceito de scopo. Um scopo sempre limitado por chaves, por exemplo, existe o scopo da funo main. Penso que com o seguinte exemplo as coisas se tornaro mais claras: #include <iostream.h> int main() { int a, b;

// pedir dois valores inteiros cout<<"Introduza 2 valores inteiros: "<<endl; cin>>a>>b;

if( a == b ) { cout<<"Os valores so iguais!"; cout<<"Veja, foi usada outra instruo dentro deste if!"; } else{ cout<<"Os valores so diferentes!"; } cin.get(); } Se a condio do if for true, ele realiza a instruo seguinte, e um scopo um conjunto de instrues (tambm pode ter s uma como se v no else). Ateno que uma varivel declarada dentro de um scopo deixa de existir fora dele! Exemplo: #include <iostream.h> int main() { bool b = true;

if(b){ // entrar sempre pois b = true int a = 4;

Pgina 13 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados cout<<"a= "<<4; } a = 3; // ERRO!!! /* a variavel s existe dentro do scopo em que foi declarada! */ }

Apostila de C++

Operador Ternrio
O operador ternrio um caso especial de if e tem a seguinte sintaxe: ( <teste> ) ? <instruo 1> : <instruo 2>; Programa exemplo em que o operador ternrio recebe a varivel a com o mdulo da varivel b. Para os mais esquecidos chama-se mdulo de um nmero sua verso positiva, exemplo: mdulo de -1 1, mdulo de 2 2, mdulo de 0 0; #include <iostream.h> int main() { int a, b; cout<<"Introduza um nmero inteiro diferente de zero:"; cin>>b;

a = ( b>0) ? b : -b; /* l-se: o b maior que 0? se sim retorna b : se no retorna -b */

cout<<"O modulo de "<<b<<" "<<a; cin.get(); }

Instruo Switch
Penso que o switch fcil de compreender e penso tambm que a melhor maneira de explicar atravs de um exemplo prtico: #include <iostream.h> int main() { char c; cout<<"Introduza uma vogal minscula:"<<endl; cin>>c;

switch(c) {

case 'a': cout<<"Introduziu um a!"<<endl; break;

Pgina 14 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados case 'e': cout<<"Introduziu um e!"<<endl; break;

Apostila de C++

case 'i': cout<<"Introduziu um i!"<<endl; break;

case 'o': cout<<"Introduziu um o!"<<endl; break;

case 'u': cout<<"Introduziu um u!"<<endl; break;

default: // se a varivel do switch no for nenhuma das anteriores cout<<"No introduziu uma vogal!"<<endl; break; } cin.get(); } O switch vai ver qual a varivel, caso seja uma das opes de que dispe, faz as instrues necessrias. O break faz com que se saia imediatamente do switch e no obrigatrio em cada case. #include <iostream.h> // programa que diz se um nmero introduzido maior, igual ou menor que 3 int main() { int a; cout<<"Introduza um nmero entre 0 e 5:"<<endl; cin>>a;

switch(a) {

case 0: case 1: case 2: cout<<"O nmero "<<a<<" menor que 3!"; break;

case 3: cout<<"O nmero "<<a<<" igual a 3!"; break;

case 4:

Pgina 15 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados case 5: cout<<"O nmero "<<a<<" maior que 3!"; break;

Apostila de C++

default: cout<<"No introduziu um nmero entre 0 e 5..."; break; } cin.get(); }

Instruo While
A sintaxe do while a seguinte: while( <teste> ) <instruo> Para este programa de exemplo, devo fazer uma introduo. O cin.get() que usvamos para esperar por um ENTER, na verdade l qualquer caracter, e podemos inclusive fazer char a=cin.get(); Mais, h vrios caracteres especiais (dos quais falaremos mais frente). O que vamos usar no prximo programa o '\n', que tem a funo de mudar de linha. Fazer cout<<"Ol"<<endl; o mesmo que fazer cout<<"Ol \n"; Quando o usurio aperta a tecla ENTER o cin.get() retorna o caractr '\n'. #include <iostream.h> // programa que pede que o usurio escreva uma linha de texto e conta os caracteres int main() { unsigned charCount = 0; // inteiro sem sinal, >= 0 cout<<"Introduza uma linha de texto:"<<endl;

while( cin.get() != '\n' ) ++charCount;

// enquanto o usurio no teclar ENTER // conta o caractr

cout<<"\nDigitou "<< charCount <<" caracter" << ( charCount != 1 ? "es." : "." ) <<endl;

cin.get(); return 0; } Este programa j mais complicado, mas temos de comear a evoluir... Enquanto a condio de teste dentro do while for true, ou seja, enquanto o usurio no digitar ENTER, realizar-se- a instruo charCount.

Pgina 16 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados Exemplo:

Apostila de C++

Tutorial de c++ <ENTER> O programa ir ler todos os caracteres at encontrar <ENTER> e por cada caracter que ler incrementar o charCount. Parece ser complicado entender isto, mas tem de testar o programa e ver como ele funciona, s assim compreender. Depois de contar o nmero de caracteres aparece um cout um pouco esquisito... Penso que ningum tem dvidas que o operador ternrio est l para completar a frase com "." ou com "ers.", consoante o nmero de caracteres. No cout, em vez de fazer cout<<"Atirei o pau ao gato"<<endl; cout<<"Mas o gato assustou-se..."<<endl; Pode-se fazer: cout<<"Atirei o pau ao gato"<<endl <<"Mas o gato assustou-se..."<<endl; Que o mesmo que cout<<"Atirei o pau ao gato"<<endl<<"Mas o gato assustou-se..."<<endl;

Instruo do-while
Na instruo while, primeiro testa-se a condio e somente depois se prossegue com as instrues. No entanto poder haver casos em que se queira fazer primeiro a instruo e s depois testar a condio. #include <iostreamh> // programa que soma nmeros at o usurio escolher -1 int main() { int soma = 0, num=0; cout<<"Introduza vrios nmeros. -1 para acabar"<<endl;

do{ soma += num; cin>>num; } while( num != -1 );

cout<<"Soma: "<<soma; cin.get(); }

Pgina 17 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Penso que com exemplos que se aprende. Parece-me que um bom mtodo tentar descobrir o que cada programa faz sozinho! Lembre-se que acompanhando um programa que est explicado e perceb-lo, no tem nada a ver com saber programar! uma coisa perceber quando explicam, outra criar as coisas sozinho!

Instruo For
A sintaxe do for a seguinte: for( <inicializao> ; <teste> ; <incremento> ) <instruo> Programa de exemplo: #include <iostream.h> // programa que escreve o alfabeto int main() { for( char c = 'A'; c <= 'Z' ; ++c ) { cout<<' '<< c; if( (c - 'A' + 1) % 4 == 0 ) cout<<endl; /* esta parte serve para mudar de linha de 4 em 4 caractres */ } return 0; } claro que em vez de um char podia-se ter um utilizado um int, ou qualquer outra coisa. Usei o char neste exemplo para mostrar esta potencialidade do C++. O for funciona assim: 1. Primeiro, faz o que se pede na iniciao: char c = 'A'; 2. faz o teste, se for true, realiza as instrues, se for false sai do for: cout<<' '<< c; if( (c - 'A' + 1) % 4 == 0 ) cout<<endl; 3. Realiza o incremento: ++c; 4. Volta ao ponto 2 Sublinho que s se sai do for quando o teste for false! Ou seja, quando a varivel c for 'Z'. De seguida esto vrios exemplos do for. #include <iostream.h> // programa que pede um caracter e um numero(n) e escreve esse caracter n vezes int main() {

Pgina 18 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados int num; char c;

Apostila de C++

cout<<"introduza um numero:"; cin>>num; cout<<"introduza um caracter:"; cin>>c; cout<<endl;

int i; // no obrigatrio declarar a varivel dentro do for for( i = 0; i < num; ++i ) cout<<c;

cout<<endl; i = 2; num += 2; // no so obrigatrios os campos do for for( ; i < num; ++i ) cout<<c;

cin.get(); } Por vezes utiliza-se mesmo um for forever: // no experimentar este programa int main() { for( ; ; ) // forever! ; /* pode-se dar o caso de se ter um for sem nenhuma instruo especfica nesse caso utiliza-se o ';' como se mostra no exemplo. Pe-se na linha seguinte para mostrar que mesmo essa a inteno do for */ } No sei que mais dizer sobre o for, penso que com o que foi escrito se pode apreender o conceito do for. Aproveito para deixar um pequeno reparo: // programa de exemplo sobre o scopo do for int main() { for( int a = 0 ; ... ; ... ) { // os pontos significam qualquer coisa .... } a = 2; // j est fora do scopo do for, dar erro? } Pois, isso ir depender do compilador. O Visual C++, por exemplo, faz com que aquela varivel a esteja acessvel no resto do scopo da funo main, no dando erro a instruo a=2; Mas em compiladores como o gcc a coisa j no assim... Nesses, o scopo da varivel o do for! O que por acaso at standard C++...

Pgina 19 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Arrays em C++
Para introduzir o conceito de array, vou comear por apresentar um programa simples, que no contm nada de novo e depois, mostro a utilidade dos arrays. O seguinte exemplo pede 3 nmeros ao usurio e em seguida os mostra pela ordem inversa de insero: #include <iostream.h> // programa que l 3 nmeros e os escreve de ordem inversa void main() { // declarar as variveis int a, b, c;

// pedir as variveis cout<<"Introduza 3 inteiros:"<<endl; cin >> a >> b >> c;

// escrever cout<<"Os numeros de ordem inversa:"<<endl <<c<<b<<a;

cin.get(); } Este programa cumpre a sua funo sem qualquer problema. Mas imaginemos que queramos fazer o mesmo com... 100 nmeros! Teramos de declarar 100 variveis distintas e para l-las... imaginem o cdigo! Um array um gnero de uma tabela, e podem ser de qualquer tipo. A sintaxe de um array a seguinte: tipo nome_variavel[n_elementos]; e cria uma tabela de 0 a n_elementos-1. Vejamos agora o programa utilizando arrays. #include <iostream.h> // programa que l n nmeros e os escreve de ordem inversa void main() { // declarar as variveis const int n_elementos = 3; int i; int a[n_elementos]; /* a varivel a fica com 3 "casas". a[0], a[1] e a[2] e podemos trabalhar com cada uma delas como sendo variveis distintas */

// pedir as variveis for( i=0; i<n_elementos; ++i ) { cout<<"introduza o "<< i <<" Numero: "; cin>>a[ i ];

Pgina 20 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados cout<<endl; }

Apostila de C++

// escrever for( i=n_elementos-1; i>=0; --i ) cout<<a[ i ]<<endl;

cin.get(); }

/* na inicializao de um array tambm se pode fazer o seguinte: int a[2] = { 1,2 }; o que faria com que a[0]=1 e a[1]=2 */ Em C++ no se pode inicializar arrays com variveis comuns, s o possvel fazer com constantes. Mais frente quando falar em apontadores veremos como ultrapassar esta "caracterstica". Chamo ateno que a0 diferente de a[0]. So os colchetes que indicam que se trata de um array. a0 uma varivel como qualquer outra. Mais uma vez, a melhor maneira de apreender o conceito de array, realizar o programa e test-lo. Ver como funciona! #include <iostream.h> ; // programa que encontra o maior de 10 nmeros lidos void main() { const int n_elementos = 10; int i, e[n_elementos];

cout<<"Introduza 10 nmeros: "<<endl;

for( i = 0 ; i < n_elementos ; ++i ) cin>> e[ i ];

int max = 0; // varivel que ir conter o ndice do valor mximo

for( i = 0; i < n_elementos; ++i ) if( e[ i ] > e[ max ] ) max = i;

cout<<"O maior nmero foi o "<< e[ max ] <<" e foi o "<< max <<" Nmero a ser introduzido.";

cin.get(); }

Pgina 21 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

Arrays de caracteres
At agora praticamente s tratamos nmeros. Com arrays de caracteres temos a possibilidade de tratar tambm strings. Um array de caracteres um array normal, s que tem letras em cada ndice. #include <iostream.h>

void main() { // maneiras de inicializar arrays de caracteres char s1[ 5 ] = "Ol\0"; char s2[ 6 ] = { 'A', 'd', 'e', 'u', 's', '\0' }; char nome[10];

cout<<"Introduza o seu nome: (max 10 letras)"<<endl; cin >> nome;

cout<< s1 << nome << endl; cout<< s2;

cin.get(); } Este exemplo mostra como se pode pedir uma string ao usurio e depois escrev-la na sada padro novamente. Note que todas as strings que foram inicializadas tm '\0' como ltimo caractr. Todas as cadeias de caracteres em C++ tm de terminar com '\0', o caractere terminador. No se podem atribuir arrays; no se poderia fazer nome = "Pedro"; O que se teria de fazer era aribuir cada casa do array com a letra correspondente. Em princpio eu devia neste Tutorial mostrar uma srie de algoritmos para tratamento de strings, como concatenar, substituir letras... etc. No o fao porque o C++ fornece ao usurio um objeto string que j faz essas coisas todas e onde se pode fazer string p,r; p="Pedro"; p += r; Este objeto ser tratado mais frente. Seja como for aconselho aos interessados que procurem noutro lado toda essa matria relacionada com arrays de caracteres. Tabela de Caracteres Especiais Caracter Descrio \a \b \0 \f \n bell, emite um som retrocesso ( backspace ) caractr terminador incio de pgina mudana de linha

Pgina 22 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados \r \t \v \\ \' \" \ooo \xhh incio de linha tab horizontal tab vertical backslash plica aspas caractr cujo cdigo em octal ooo caractr cujo cdigo em hexadecimal hh

Apostila de C++

Funes em C++
J tinha dito que a funo main a primeira a ser chamada, como se fosse o corpo do programa. Mas o C++ no vive s da funo main e podemos criar quantas funes quisermos como quisermos a fazer aquilo que quisermos! #include <iostream.h> // programa que introduz as funes

void ola_mundo() // declarao + definio { cout<<"OlA Mundo!"<<endl; }

void f1() // declarao + definio { cout<<"Estou na funcao f1!"<<endl; }

void main() { ola_mundo(); f1(); cin.get(); } O programa entra em main(), quando chega instruo ola_mundo(); vai procura dessa funo e faz tudo o que ela mandar antes de prosseguir. Sempre usamos a palavra chave void antes da funo main. O que ela indicava que a funo no retornava nada. Estas funes so denominadas de procedimentos. Se quisermos que uma funo retorne qualquer coisa, mudamos o tipo de retorno. O exemplo seguinte mostra uma funo que retorna o maior de 2 valores. #include <iostream.h> // programa que introduz as funes

Pgina 23 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

int max( int a, int b ); // declarao

void main() { int v1, v2; cout<<"introduza dois inteiros: "<<endl; cin>> v1>> v2;

cout<<endl<<"O maior "<< max(v1,v2) << endl; cin.get(); }

int max( int a, int b ) // definio { return a>=b ? a : b; } A funo max recebe dois valores como parmetro, o que se vai fazer que o compilador ir criar duas variveis a e b e ir atribui-las com os valores de v1 e v2 respectivamente. como se fossem criadas cpias dos valores originais. Todas as funes que retornam alguma coisa tm obrigatoriamente de ter a palavra return. No caso da funo max o operador ternrio ir ver qual o maior e retorna esse valor. Sempre que o return chamado a funo acaba, e pode ser chamado em qualquer lugar do programa. Aproveito para lanar tambm o conceito de varivel global. Se houvesse uma varivel declarada fora da funo main ela estaria acessvel em todas as funes do programa. Exemplo: #include <iostream.h> //varivel global int v1;

int max( int a, int b ); // declarao

void main() { int a; v1 = 2; // correcto, v1 est acessvel pois global }

void f1() // definio { v1 = 5; // correto, v1 est acessvel pois global a = 2; // ERRO! varivel declarada na funo main e portanto s est acessvel em // main! teria de haver tambm uma declarao int a; nesta funo para que // no desse erro

Pgina 24 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados }

Apostila de C++

Mais uma coisa, standard C++ que o tipo de retorno da funo main seja inteiro. H mesmo compiladores que no aceitam void main(). Por norma usa-se int main() { /.. / return 0; } A partir de agora no usarei mais void main(). Para solidificar o conceito de funo e fazer uma reviso em tudo o que j foi falado, vou deixar aqui um jogo simples. O objetivo ser o usurio adivinhar uma palavra que s o programa saber. No passo aqui o cdigo pois iria ocupar muito espao. Todas as funes e variveis esto comentadas e explicadas. Tente fazer uma evoluo do jogo, incluir alguns temas, mais palavras, por mais opes!

Enumeraes e Estruturas
As enumeraes so uma alternativa a definir constantes e, visto que em C++ so mesmo um tipo, so mesmo muito teis. Exemplo: enum { GREEN, YELLOW, RED }; era o mesmo que criar trs constantes com os valores 0, 1 e 2. Por padro o primeiro valor de uma enum zero. Exemplos: enum Mes { JAN = 1, FEV, MAR, ABR, MAI, JUN, JUL, AGO, SET, NOV, DEZ }; // o valor de FEV = 2, MAR = 3... por ai adiante

Mes mes; // ...

switch( mes ) { case JAN: //... break;

case FEV: //... break; } As enums ajudam muito em termos de raciocnio pois podemos usar palavras para descrever o que quisermos. Por norma as constantes so escritas com letras maisculas.

Estruturas
Uma estrutura em C servia para agrupar diferentes variveis. Em C++ muito mais poderosa dando para incluir construtores e mtodos, mas destes assuntos s falarei no captulo das classes. Aqui veremos as estruturas como agrupamentos de variveis. #include <iostream.h> enum Especialidade { VENDAS, PUBLICIDADE };

struct Empregado { int num; int idade; Especialidade esp; };

Pgina 25 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados

Apostila de C++

void main() { // diferentes maneiras de inicalizar estruturas Empregado emp1 = { 1, 35, VENDAS }; Empregado emp2;

// utiliza-se o ponto '.' para se referenciar a cada atributo da variavel emp2 emp2.num = 2; emp2.idade = 19; emp2.esp = PUBLICIDADE;

cout<<"Empregados:" <<endl<< emp1.num <<", "<< emp1.idade <<" anos. Especialidade: "<< emp1.esp <<endl<< emp2.num <<", "<< emp2.idade <<" anos. Especialidade: "<< emp2.esp;

cin.get(); } Quando se faz cout<<emp1.esp; no aparecer escrito VENDAS, mas sim 0, que o valor da constante lgica.

Objeto String
Como j tinha referido, o tratamento de cadeias de caracteres exigia certos algoritmos e conhecimento de variadas funes. Em C++ foi criado um objeto string que facilita muito a tarefa do programador. Este j no precisa de se preocupar com os arrays dinmicos de caracteres e ganha inclusive em eficincia. #include <string.h> // necessrio para se ter acesso ao objeto string #include <iostream> // demonstrao do uso de strings int main() { string nome, sobrenome;

cout<<"Introduza o seu nome:"<<endl; cin >> nome;

cout<<"Ento " + nome + ", que tal este Tutorial? :) "<<endl;

cout<<"Qual o seu ltimo nome?"<<endl; cin >> sobrenome;

sobrenome = " " + sobrenome; // para ficar " Sobrenome" nome += sobrenome; // para ficar "Nome Sobrenome"

Pgina 26 de 27

Curso de Rede de Comutadores Algoritmo e Estrutura de Dados cout<<"O seu nome completo : "<< nome;

Apostila de C++

cin.get(); return 0; } Penso que este exemplo demonstra algumas das facilidades dadas pelo objeto string. De fato, tratar strings como um objeto em vez de como um array de caracteres mesmo muito prtico.

Acesso Arquivos
A sintaxe de escrita e leitura num Arquivo de texto igual quela usada no cout e no cin, s que desta vez somos ns que declaramos as variveis, com o Arquivo pretendido. Para se ler de um Arquivo usa-se um objecto ifstream( de input file stream ) e para escrita usa-se o ofstream ( de output file stream ). Vejamos o seguinte exemplo: #include <fstream.h> // necessrio para se ter acesso a Arquivos #include <iostream.h> // demonstrao de escrita e leitura em Arquivos int main() { char aux[10];

// criar o Arquivo ofstream out("output_file.txt"); // agora ir escrever no Arquivo out << "Arquivo criado recorrendo biblioteca fstream do C++"<<endl; // fechar o Arquivo out.close();

// abrir novamente o Arquivo,mas agora para leitura ifstream in("output_file.txt"); // ler e escrever no standard input while( in >> aux ) // enquanto houver alguma coisa para ler cout<<aux<<" ";

cout<<endl; cin.get(); return 0; } No necessrio fechar o Arquivo in porque ele fechado automaticamente quando a funo em que est acaba. Falando de acesso a Arquivos em modo texto, no h muito mais para dizer, mas deixo s mais um exemplo, que por ser um pouco grande, no passo aqui. Esse programa ir pedir um caractere ao usurio e ir mostrar o seu nmero de ocorrncias num determinado Arquivo.

Pgina 27 de 27

Вам также может понравиться