Você está na página 1de 51

Curso de Programao em C++

Universidade Federal do Cear Departamento de Engenharia Estrutural e Construo Civil


Prof: Evandro Parente Junior Monitor: Renato Peixoto Abril/2007

Mdulo I Programao Estruturada


Introduo Caractersticas bsicas Decises condicionais Laos Vetores e matrizes Apontadores (ponteiros) Funes Estruturas Entrada e sada Aplicaes
2

Introduo

C++ uma evoluo da linguagem C

Criada por Bjarne Stroustrup na dcada de 80 (http://www.research.att.com/~bs/)

C++

uma linguagem de aplicao geral. Contm a linguagem C (padro ANSI). Suporta abstrao de dados. Suporta programao orientada a objetos. Suporta programao genrica (templates).
3

Introduo

C++ um linguagem compilada.


Compilador Executvel

Arquivos fonte

Compiladores livres para C++

Linux: g++ (http://gcc.gnu.org/) Windows: Cygwin (http://www.cygwin.com/) Dev-C++ (http://www.bloodshed.net/devcpp.html)


4

Introduo

C++ uma linguagem padronizada (ANSI/ISO)


Organizao e comandos da liguagem. Bibliotecas (entrada/saida, matemtica, STL, etc.)


Windows

Independncia de plataformas

98/NT/2000/Me/XP Solaris/IRIX/AIX/Linux

Unix

Macintosh Os arquivos fonte (.cpp e .h) no precisam ser modificados.

Dev-C++

Editor Janela auxiliar

Mensagens

Esquema de um programa C++

Um programa C++ dividido em funes:


As definies/declaraes no interior funes so locais. As definies/declaraes fora das funes so globais.

Todo programa precisa ter uma funo chamada main

Esta funo a primeira a ser chamada quando um programa executado. Sintaxe:


// exemplo.cpp

int main(void) { Bloco de comandos return(0); }

Comentrio Espao global Funo principal O smbolo ; indica fim de linha


7

Biblioteca padro

Conjunto de funes/operadores pr-definidos.

Precisa incluir (#include) a biblioteca antes de usar. sqrt, exp, log, sin, cos, tan, asin, acos, ... Leitura e impresso. Manipulao de arquivos (texto/binrios). Medio e manipulao de datas e tempo. Manipulao de palavras, textos, etc.

Matemtica (math.h/cmath)

Entrada/Sada (stdio.h/iostream)

Tempo (time.h/ctime)

Cadeias de caracteres (string.h/string)

Standard Template Library (STL)


Estruturas de dados: vetores, listas, rvores, ... Algoritmos: ordenao, procura, ...

Exemplo
// programa1.cpp #include <iostream> using namespace std;

int main(void) { cout << "Primeiro programa em C++!\n"; return(0); // Sucesso }

Biblioteca padro de E/S Evita conflito com nomes da bib. padro

E/S bsica

A classe iostream contm os procedimentos de entrada e sada de dados. cout o dispositivo de sada padro. << (operador de insero) utilizado para inserir dados. cin o dispositivo de entrada padro. >> (operador de extrao) utilizado para extrair dados. Dispositivos padro:

Entrada teclado. Sada monitor.


10

Identificadores

Nomes usados para fazer referncia a variveis, funes, tipos definidos pelo usurio, etc. Caractersticas:

O primeiro caractere deve ser letra ou underscore os demais podem ser nmeros. Maisculas e minsculas so consideradas diferentes. No permitido o uso de espaos ou outros caracteres especiais.

Sugestes:

Usar nomes com significado. Variveis locais nomes curtos. Variveis globais nomes mais longos. Evitar comear com underscore uso do compilador. No usar palavras reservadas da linguagem.
11

Variveis

Espao de memria usado para armazenar dados. Tipos bsicos em C++:


Tipo de varivel char unsigned char short unsigned short long unsigned long int unsigned int float double bool Tamanho em Bytes 1 1 2 2 4 4 4 4 4 8 1 Faixa de valores -128 a 126 0 a 255 -32.768 a 32.767 0 a 65.535 -2.147.483.648 a 2.147.483.648 0 a 4.294.967.295 mesmo que long mesmo que unsigned long 1.2E-38 a 3.4E381 2.2E-308 a 1.8E3082 true (1) ou false (0)

12

Variveis

Declarao:

Tipo var1, var2,,varn;

Declarao com inicializao:

Tipo var1 = val1, var2 = val2;

Exemplos:

char c1, s2 = a; int i, j, k, n = 2, m = 3; double x = 2.0, y; bool novo = true;


13

Operadores

Aritmticos Relacionais Lgicos Atribuio: =, +=, -= Incremento: ++ Decremento: -Tamanho: sizeof(tipo) Bit-a-bit Outros

14

Operadores
Aritmticos
Operao
Soma Subtrao Multiplicao Diviso Mdulo (resto)

Lgicos
Operao
E OU NO

Operador
+ * / %

Operador
&& || |

Regras de precedncia igual as da matemtica.


Mdulo (%) vlido s para inteiros.
15

Operadores
Relacionais retornam true (1) or false (0).
Operador
== != < > <= >=

Descrio
Igualdade Desigualdade Menor que Maior que Menor ou igual Maior ou igual
16

Decises condicionais

if/else
O comando if ser executado somente se a expresso for verdadeira (1).

if (expresso lgica) { bloco de comandos; } else { bloco de comandos; }

O else um comando opcional e ser executado se a expresso for falsa (0).

17

Decises condicionais

if/else

Exemplo:
#include <iostream> using namespace std; int main(void) { int n; cin >> n;

Linhas em branco aumentam a clareza do cdigo

if (n > 0) // Executado apenas se n positivo. cout << n positivo.\n"; else // Executado se n negativo ou nulo. cout << n negativo ou nulo.\n"; return(0); }
18

Decises condicionais

switch

int ou char

switch (varivel condicional) { Constante case expresso lgica_1: Lista de comandos_1 break; case expresso lgica_2: Lista de comandos_2 break; Sada imediata default: lista de comandos }

O comando switch testa apenas a igualdade. A lista de comandos ser executada se a expresso lgica for igual a varivel condicional. O comando default ser executado se nenhuma das igualdades forem vlidas.

19

Decises condicionais
#include <iostream> using namespace std; int main(void) { cout << "Transformacao de temperaturas.\n"; cout << "1 - Celsius para Fahrenheit\n"; cout << "2 - Fahrenheit para Celsius\n\n"; cout << "Escolha uma opcao: "; int opcao; cin >> opcao; double temp; switch (opcao) { case 1: cout << "Digite a temperatura em Celsius: "; cin >> temp; cout << temp << " C corresponde a " << 1.8*temp + 32.0 << F.\n"; break; case 2: cout << "Digite a temperatura em Fahrenheit: "; cin >> temp; cout << temp << " F corresponde a " << (temp - 32.0)/1.8 << " C .\n"; break; default: cout << "Opcao invalida!!!\n"; break; } return(0); }

20

Comandos de Repetio

Permitem a repetio de um bloco de comandos.

Conhecidos com laos ou loops.

Tipos de laos em C++:


while: teste no incio do/while: teste no fim for: while com incremento

Interrupo:

break: sai do lao, mas continua na funo. return: sai do lao e da funo.
21

Comandos de Repetio

Comando while:
while (condio) { <bloco de comandos>; }

O bloco de comandos executado enquanto a condio for verdadeira. A lao s executado na primeira vez se a condio for verdadeira.
22

Comandos de Repetio

for

Sintaxe:
for (inicializao; condio; incremento) { bloco de comandos; }

Inicializao: usada para inicializar a(s) varivel(is). Condio: expresso determinar o trmino do lao. Incremento : define a atualizao das variveis do lao.

23

Comandos de Repetio

Comando do while:
do { <bloco de comandos>; } while (condio)

O bloco de comandos executado enquanto a condio for verdadeira. A lao executado pelo menos uma vez, independe da condio ser verdadeira.
24

Arrays

O que um array?

um conjunto de variveis do mesmo tipo, acessveis com um nico nome e armazenadas de forma contnua na memria.
um identificador que obedece as mesmas regras de formao de identificadores de variveis simples. A individualizao dos elementos deste conjunto de variveis feita atravs da associao de ndices.
25

Nome de um array:

Vetores e matrizes

Os arrays podem ter de uma a muitas dimenses. Os mais comuns


Vetor = 1 dimenso. Matriz = 2 dimenses.


3 Colunas

10 Colunas 1 Linha 2 Linhas

Exemplo de vetor de inteiros

Exemplo de matriz
26

Vetores e matrizes

Utilizao:

Manter um grupo de valores de mesmo tipo em memria Reduzir a quantidade de variveis. Exemplo: armazenamento de um ponto:

double px,py,pz; // Usando variveis independentes double p[3]; // Usando vetor

ndice:

Define a posio da varivel dentro do vetor. sempre um inteiro (int, short, long). O primeiro elemento fica na posio 0 (zero). Assim, se tomarmos dim" como sendo o tamanho do vetor, a ltima posio a de ndice dim-1
27

Vetores e matrizes
Supondo que as notas de 10 alunos estejam armazenadas em um vetor identificado por notas, a representao seria a seguinte:
Tipo homogneo
Notas ndice 0 1 2 3 4 5 6 7 8 9

Para referenciar o terceiro elemento desta varivel devemos usar nota[2].


O contedo armazenado nesta posio 6.
28

Vetores e matrizes

Declarao:

tipo identificador[tamanho]; tipo identificador[n] = {val0, ..,valn-1 }

// Armazenar os nmeros de 1 a 5 em um vetor.

int vet1[5]; Declarao


for (int i = 0; i < 5; i++) vet[i] = i+1;

double vet2[3] = {0.0, 1.0, -1.0};


for (int i = 0; i < 3; i++) cout << "vet2[" << i << "] = " << vet2[i] << "\n";
29

Vetores e matrizes

Cadeias de caracteres:

Vetores de caracteres:
char texto[100]; char palavra[] = Testando...;

Caractere especial de terminao \0 Maneira mais simples de representar e manipular strings em C++. Biblioteca string.h (ANSI C). Uso superado pela classe string.

30

Vetores e matrizes

Matrizes:

Array bidimensional (dois ndices). Corresponde ao conceito matemtico de matriz, com linhas e colunas. O primeiro ndice indica a linha e o segundo a coluna.

// Declarao de uma matriz com 5 linhas e 20 colunas. double matDouble[5][20];

31

Vetores e matrizes

Matrizes

Supondo que 2 materiais e 3 caractersticas de cada um deles estejam armazenadas em uma matriz bidimensional, a representao seria a seguinte:
Caractersticas

Material 1
Material 2 0 1 2

0
1

Neste caso, para referenciar ao material 1 e sua caracterstica 3 devemos usar nomeMatriz[0][2]. 32

Vetores e matrizes

Arrays multidimensionais:

Declarao
tipo identificador[tamanho1][tamanho2][tamanhon];
// Declarao de uma matriz de inteiros com 3 dimenses int matInt[10][50][30] ; // Declarao de uma matriz de floats com 4 dimenses float matFloat[100][100][20][6] ;

33

Matrizes
#include <iostream> using namespace std; int main(void) { int A[2][3]={2,3,4,5,2,0}; int B[2][3]={0,23,2,4,0,6}; int C[2][3]; // Soma as matrizes.

for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) C[i][j] = A[i][j] + B[i][j];
// Imprime o resultado. for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) cout << C[i][j] << " cout << "\n"; } return(0); } 34

";

Apontadores (ponteiros)

So variveis que armazenam endereos de memria.


Apontam para o endereo de outras variveis. Sintaxe:

int *p; // p um ponteiro para inteiro double *x; // x um ponteiro para double & retorna o endereo de uma varivel. * retorna o contedo de um endereo de memria.
35

Operadores associados:

Apontadores (ponteiros)
#include <iostream> using namespace std; int main(void) { int a = 10; // cria uma varivel inteira a int *p; // cria um ponteiro para inteiro cout << "Valor inicial de a: " << a << "\n"; p = &a; *p = 8; // faz apontar para a // altera o contudo do endereo apontado por p

cout << "Valor do ponteiro p: " << p << "\n"; cout << "Conteudo do endereco apontado por p: " << *p << "\n"; cout << "Valor final de a: " << a << "\n"; return(0);

}
Valor inicial de a: 10 Valor do ponteiro p: 0x22ff74 Conteudo do endereco apontado por p: 8 Valor final de a: 8
36

Apontadores (ponteiros)

Operaes aritmticas:

Igualdade

p1 = p2 // p1 aponta para o mesmo endereo de p2 *p1 = *p2 // copia o contedo de p2 para p1

Incremento e decremento

Usandos para percorrer arrays. p++; // p = p + sizeof(tipo_de_p) p--; // p = p - sizeof(tipo_de_p) Na prtica p++ faz p apontar para o prximo elemento do array.
37

Apontadores (ponteiros)

Aplicaes mais importantes:


Alocao dinmica de memria. Passagem de parmetros para funes.

Alocao dinmica de memria:

Utilizada quando as dimenses de um array so conhecidas apenas durante a execuo. Criao de estruturas de dados mais complexas:

Pilhas, filas, listas, rvores, ...


38

Utilizao de classes (herana/polimorfismo).

Alocao dinmica

Operadores:

new: reserva o espao de memria necessrio delete: libera a memria alocada.

Exemplo:
int n; cin >> n; double *x = new double[n]; // Aloca um vetor com n posies for (int i = 0; i < n; i++) x[i] = 0.0; // Inicializa o vetor alocado delete []x; // Libera a memoria alocada

Toda memria alocada deve ser liberada:


Cuidado com alocao dentro de laos e de funes. Evitar memory leaks (memria perdida). Ao final da execuo a memria alocada pelo programa liberada pelo sistema.
39

Alocao dinmica

Matrizes:

So tratadas como um vetor de ponteiros para vetores. As linhas correspondem a um vetor de ponteiros que apontam para o primeiro elemento de cada coluna. Cada coluna um vetor independente. Exemplo:

int n,m; cin >> n >> m; double **A = new double*[n]; for (int i = 0; i < n; i++) A[i] = new double[m]; for (int i = 0; i < n; i++) delete []A[i]; delete []A;

// Aloca as n linhas da matriz A // Aloca as m colunas de cada linha // Libera as m colunas de cada linha // Libera as n linhas da matriz A
40

Funes

Importncia para programao:

Permite que um procedimento utilizado em vrias partes diferentes do cdigo seja programada uma nica vez. Permite dividir um tarefa complexa em uma srie de tarefas mais simples. Cada funo deve executar uma (ou algumas) tarefa(s) especfica(s). Uma funo pode chamar outras funes e a si mesmo (recursividade). Cada funo pode ser testada isoladamente antes de ser utilizada. Criao de bibliotecas de funes.
41

Observaes:

Funes

Filosofia caixa-preta:
Dados

Funo

Resultados

Para utilizar uma funo no preciso saber como ela executa a tarefa desejada.

Como calculada a raiz quadrada de um nmero?


O objetivo da funo. Os parmetros de entrada e sada.

necessrio conhecer apenas:


importante saber quais as variveis so modificadas pela funo.

42

Funes

Estratgias de programao:

Top-down:

Parte do conceito geral do sistema e vai detalhando suas partes at chegar nas funes mais simples. A programao s deve comear aps um certo nvel de detalhamento ser atingido. Estratgia dominante antes do aparecimento da POO.

Botton-up:

Parte da especificao dos elementos mais simples e obtm o sistema final pelo agrupamento destes elementos. nfase na definio de funes genricas e testadas independentemente das demais. Favorece a reutilizao de cdigo.

Combinao das duas estratgias.

43

Funes

Sintaxe:
Tipo NomeFuno(tipo1 arg1, ... , tipon angn) { ... // Corpo da funo. } Tipo o tipo de retorna da funo (int, double, ...). Comando return utilizado para retornar o resultado. Tipo1 indica o tipo do argumento 1 (arg1).

Exemplo:
int Max(int a, int b) { if (a > b) return(a); return(b); } int i = 2, j = 4; cout << Max(i, j); // Definicao da funcao Max para dois nmeros

// Chamada da funcao no programa

44

Funes

Sobrecarga de funes:

C++ permite que diferentes funes tenham o mesmo nome. Desde que o nmero de argumentos ou seus tipos sejam diferentes.

Exemplo:
int Max(int a, int b, int c) // Definicao da funcao Max para 3 nmeros { return(Max(Max(a, b), c)); // Retorna Max(d, c), onde d = Max(a,b) } int i = 2, j = 4, k = 3; cout << Max(i, j, k);

// Chamada da funcao no programa

45

Estruturas

Estruturas:

So utilizadas para armazenar dados heterogneos (tipos diferentes). Ex: dados de um aluno

Nome (string) Matrcula (inteiro) Data de nascimento (dd/mm/aaaa => 3 inteiros) Curso (inteiro ou string) IRA (real). Armazenam um conjunto de dados do mesmo tipo (dados homogneos). 46

Vetores e matrizes:

Estruturas

Definio:

struct DadosAluno{ char Nome[200]; int Matricula; int DiaNasc; int MesNasc; int AnoNasc; int Curso; // Codigo do curso double IRA // Indice de rendimento academico };

Declarao de variveis:

struct DadosAluno aluno; struct DadosAluno vet_aluno[1000]; struct DadosAluno *ptr_aluno;


47

Estruturas

Acesso aos dados:


Atravs do nome da varivel e do nome do campo. Exemplos: cout << aluno.Matricula; cout << vet_aluno[i].Matricula; cout << ptr_aluno->Matricula; Importante: Utiliza-se . nas variveis comuns. Utiliza-se -> nas variveis tipo ponteiro. Vetores alocados dinamicamente so tratados como variveis comuns aps a alocao.
48

Estruturas

Tipos Abstratos de Dados (TAD):

Verifica-se que as estruturas podem ser encaradas como novos tipos definidos pelo programa. Alm dos dados contidos na estrutura possvel definir funes que atuem sobre estes dados.

Estas funes definem o comportamento dos tipos criados.


Este mecanismo permite criar novos tipos alm dos bsicos definidos pela linguagem:

char, int, bool, float, double, ...


49

Tipos Abstratos de Dados

Tipo Abstrato de Dados ou Tipo Definido pelo Usurio:

Nomes utilizados para descrever os novos tipos de dados criados em um programa.

Mecanismos de definio: Estruturas (struct). Enumerados (enum). Unies (union): pouco utilizado. Enumerados: Utilizados para definir os valores possveis de uma varivel (inteira):
enum _eResultado{VITORIA, EMPATE, DERROTA}; enum _eResultado jogo; if (jogo == VITORIA) cout << Ganhamos!;

50

Tipos Abstratos de Dados

Comando typedef:

Formaliza a definio de novos tipos:


typedef struct {int dia,mes,ano;} sData; typedef enum _eResultado eResultado;

Define um nome para o tipo criado. Pode ser utilizado para renomear tipos existentes:
typedef float Real; // usar double se necessario! Real x[100];
51

Você também pode gostar