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

Professora ANITA LOPES

FUNDAMENTOS DA LINGUAGEM C++ 1 A linguagem C++


1.1 Introduo

A linguagem C++ foi desenvolvida nos Laboratrios da BELL. Ela baseada na linguagem C, mas acrescenta caractersticas de uma linguagem orientada a objetos. Nosso estudo no far meno a orientao a objetos. A linguagem C++ "Case Sensitive", isto , maisculas e minsculas fazem diferena. 1.2 Estrutura de um programa em C++

Um programa em C++ constitudo de: cabealhos que contm definies de pr-processamento tais como os arquivos de cabealho, as definies de constantes simblicas, uso de namesapces, declarao de variveis globais, declarao de rotinas, etc. um bloco da funo principal e outros blocos de outras funes. comentrios. [ <definies de pr-processamento> ] [ <declarao de variveis globais> ] int main() { Bloco de comandos } <tipo de retorno da funo> <nome_da_funo1 >( <parmetros>) > { Bloco de comandos da funo1 } ... <tipo de retorno da funo> <nome_da_funon >( <parmetros>) > { Bloco de comandos da funo2 } Exemplo de um programa em C++ #include <iostream> using namespace std; int main() { cout<<"\nPRIMEIRO PROGRAMA EM C++"; }
1

Professora ANITA LOPES


Explicando: #include <iostream>

instrui o compilador a usar a biblioteca padro de entrada e sada using namesapce std; uso do namespace padro std int main() main o nome da funo principal; { inicia a funo cout imprime na tela a msg aps alimentar linha } finaliza a funo

1.2.1 Conjunto de caracteres Um programa fonte em C++ um texto no formatado escrito em um editor de textos usando um conjunto padro de caracteres ASCII. Caracteres vlidos: As letras minsculas e maisculas no acentuadas Os algarismos de 0 - 9 + - * / \ = | & ! ? # % ( ) { } [ ] _ . , : < > Observao: Qualquer outro caracter valido para as strings(palavras). 1.2.2 Comentrios Os comentrios em C++ podem aparecer em qualquer lugar do programa e tm como objetivo fazer um esclarecimento sobre uma linha ou trecho do programa. Os comentrios de bloco tero um /* antes e um */ depois, ou // quando se deseja comentar uma linha. Exemplos: /* programar em C++ eh facil */ // so uma linha 1.2.3 Diretivas de Compilao Na linguagem C++, alguns comandos so processados durante a compilao. Estes comandos so chamados de diretivas de compilao e so eles que informam quais bibliotecas e constantes simblicas devero ser anexadas quando for gerado o programa executvel. A diretiva #include diz ao compilador para incluir na compilao do programa outros arquivos. Geralmente estes arquivos contem bibliotecas de funes ou rotinas do usurio. As bibliotecas agrupam funes de acordo com as finalidades. Se no fizssemos uso delas, nossos programas seriam muito extensos e teramos problemas na linkedio.
2

Professora ANITA LOPES

Sintaxes:

#include <nome_da_biblioteca > #include ...nome_da_biblioteca

onde nome_da_biblioteca o nome da biblioteca que se deseja incluir. Estando entre os sinais < e > significa que est no diretrio padro e ficando entre , significa que precisamos fornecer o caminho onde se encontra a biblioteca. Exemplos de bibliotecas: BIBLIOTECA ctype.h Converte para maiscula ou para minscula uma letra toupper(letra) tolower(letra)

BIBLIOTECA math.h fabs(double d) sin(double arco) cos(double arco) tan(double arco) asin(double arco) acos(double arco) atan(double arco)

Calcula o valor absoluto real d

Funes trigonomtricas do ngulo arco, em radianos

Funes de arredondamento para inteiro ceil(double num) Ex. ceil(3.2) => 4.0 arredonda pra cima floor(double num) Ex. floor(3.2) => 3.0 arredonda para baixo Funes logartmicas: log() logaritmo natural (base e), log10() logaritmo decimal (base 10) log(double num) log10(double num) Funes: potncia e raiz quadrada pow(double base, double exp); Potenciacao: pow(3.2,5.6) => 3.25.6 sqrt(double num); Raiz quadrada: sqrt(9.0) = >3.0. BIBLIOTECA stdlib.h Calcula o valor absoluto do inteiro i e do real d, respectivamente abs(int /float) rand()

Professora ANITA LOPES

BIBLIOTECA string.h Ver Anexo I Concatena duas strings strcat(str1, str2); Copia o contedo de uma varivel em outra varivel strcpy(str1, str2) /* no permitido: str1 =str2;*/ Fornece o nmero de caracteres de uma string strlen(str1) Compara duas strings devolve nmero menor que 0 se str1 vier antes de str2 strcmp(str1, str2) devolve nmero maior que 0 se str1 vier depois de str2 devolve 0 se str1 for igual str2

2. Sada
O objeto cout permite que enviemos dados/mensagens para a tela. cout<< ; cout<<variavel<<endl; cout<< ; cout<<variavel<<endl; std::cout<< ; std::cout<<variavel<<endl; Seqncia de escape \0 \a \b \t \n \v \f \r \" \' \? \\

Usando: using namespace std;

Usando: using std::cout;

No usando namespace

Controle/Caracter nulo (null) campainha (bell) retrocesso (backspace) tabulacao horizontal nova linha (new line) tabulacao vertical alimentacao de folha (form feed) retorno de carro (carriage return) aspas (") apostrofo (') interrogacao (?) barra invertida (\)

Professora ANITA LOPES

#include <iostream> using namespace std; int main() { cout << "Aprendendo a usar \"cout\"\n"; // o caracter \" imprime aspas na tela cout << "O operador de insercao << separa os elementos que se desja colocar na tela\n"; cout << "O caracter de controle \'\\n\' equivale a endl, alimenta linha" << endl; cout << "Usando \'\\t\' \timprime-se na proxima zona\n"; // o caracter \ imprime apostrofo na tela e o carcater \\ imprime \ na tela system("pause"); }

3. Constantes e variveis
3.1 Constantes O C++ possui quatro tipos bsicos de constantes: inteiras, de ponto flutuante, caracteres e strings. Constantes inteiras e de ponto flutuante representam nmeros de um modo geral. 3.1.1 Constantes inteiras As constantes inteiras na linguagem C++ podem ser escritas no formato decimal (base 10), hexadecimal (base 16) ou octal (base 8). Exemplos: Decimal: 12 Octal : 033 ( em decimal vale 27. O zero antes do nmero caracteriza a constante octal) Hexadecimal: 0xff ( em decimal vale 255. O zero e o x antes do nmero caracterizam a constante hexadecimal) 3.1.2 Constantes de ponto flutuante So nmeros reais com um ponto decimal e (opcionalmente) um expoente. Exemplos: 1.876 476.65 1.23e-9 -1.e2 10.6e18 -.853E+67
5

Professora ANITA LOPES


3.1.3 Constantes caracteres Uma constante caracter uma letra ou smbolo colocado entre plicas. Exemplo: A N I T A As constantes caracter so armazenadas como nmeros inteiros. Estes nmeros correspondem aos valores de cada caracter dentro do cdigo ASCII.

3.1.4 Constantes strings Uma constante string consiste de um conjunto de caracteres do cdigo ASCII padro ou estendido, colocados entre aspas duplas. Exemplo: UAU! Matemtica APRENDENDO A PROGRAMAR EM C++ Na linguagem, C++ uma string um vetor de caracteres terminado com um caracter nulo. O caracter nulo um caracter com valor inteiro igual a zero (cdigo ASCII igual a 0). O terminador nulo tambm pode ser escrito usando a conveno de barra invertida do C como sendo '\0'.

char nome_da_string[tamanho];
Como precisamos reservar uma posio para o terminador, sempre iremos declarar o tamanho necessrio mais um. Vamos supor que declaremos uma varivel de nome palavra de 11 posies(char palavra[11]; ) e armazenemos a palavra PROGRAMAS nela.

bom ressaltar que a linguagem C++ no inicializa as variveis e toda clula no usada tm valor indeterminado. No se esquea de inicializar as variveis de seus programas, pois coisas incrveis podem acontecer! As strings so consideradas vetores de caracteres( matriz linha). Como na Matemtica, para se acessar um determinado caracter de uma string, basta "indexarmos".

Professora ANITA LOPES


str[1] = 'o' str[2] = 'a' No exemplo acima, percebemos que o primeiro caracter se encontra na posio 0( em algumas linguagens, seria a posio 1). Desta forma, se indexarmos com 1, na verdade estaremos nos referindo ao segundo caracter da string; se indexarmos com 2, na verdade estaremos nos referindo ao terceiro caracter da string e assim sucessivamente. 3.1.5 Constantes Simblicas A Matemtica define pi como tendo o valor 3.14159265. Muitas vezes precisaremos definir algumas constantes em nossos programas. 3.1.5.1 Constantes definidas pelo programador O programador pode definir constantes simblicas em qualquer programa. Sintaxe:

#define <nome> < valor >


Onde #define uma diretiva de compilao que diz ao compilador para trocar as ocorrncias do texto nome por valor. Observe que no h ; no final da instruo pois trata-se de um comando para o compilador e no para o processador. A instruo #define deve ser escrita antes da instruo de declarao da rotina principal. O uso da diretiva #define no se restringe apenas para declarar constante(#define pi 3.14159265 ) mas tambm podemos us-la para definir macro instrues(#define conv(x) (x*pi/180) ou #define quadrado(x) (x*x) ).

3.2 Variveis A varivel um lugar(endereo) na memria principal que armazena um dado e tem um nome associado para facilitar a programao . Em C++, as variveis podem ser declaradas no inicio do programa, mas poderemos tambm declarar dentro de algumas estruturas, diferentemente de outras linguagens. Estas variveis podem ser de vrios tipos: int (inteiro), float (real de simples preciso) , char (caracter nico), double (real de dupla preciso). A classe String ser vista em outro momento.

Professora ANITA LOPES

Tipo char int float double

Tamanho 1 byte 4 bytes 4 bytes 8 bytes

Intervalo -128 a 127 -2147483648 a 2147483647 3.4e-38 a 3.4e38 1.7e-308 a 1.7e308

Uso nmero muito pequeno e caracter ASCII contador, controle de lao real (preciso de 6dgitos) cientfico (preciso de 10 dgitos)

Quando se define um tipo de varivel, informamos ao computador quanto de memria ser necessria para armazenar este dado e que tipos de operaes podero ser realizadas com este dado. Para se declarar uma varivel, usamos a seguinte sintaxe: < tipo> nome_da_varivel ; O nome de uma varivel deve obedecer algumas regras: 1. O primeiro caracter pode ser uma letra ( maiscula ou minscula) ou o caracter sublinha. Aconselha-se a no usar o caracter sublinha no inicio para no confundir com algumas funes. 2. Os demais caracteres, letras algarismos ou o caracter sublinha. Exemplos: int a; float peso; char sexo; int idade1, idade2;

3.2.1 Palavras reservadas Existem certos nomes que no podero ser usados como identificadores. So chamadas as palavras reservadas e so de uso restrito da linguagem C++. 3.2.2 Tipos modificados Alm dos tipos de dados mencionados, existem os modificadores: long, short, signed e unsigned. Tipicamente o modificador long aumenta o nmero de bytes usados para o registro do nmero. O modificador unsigned, usado somente em inteiros, permite que um bit usado para guardar o sinal do nmero seja usado para guardar o valor do nmero. Tipo Tamanho (bytes) Intervalo unsigned char 1 0 a 255 unsigned int 2 0 a 65 535 unsigned long int 4 0 a 4 294 967 295 long int (int) 4 -2 147 483 648 a 2 147 483 647 short int 2 -32768 a 32767 long double 10 3.4e-4932 a 1.1e4932 Observao: Alguns outros tipos so possveis em ISO C90
8

Professora ANITA LOPES


3.2.3 Converso de tipo (Casting) Algumas vezes queremos, momentaneamente, modificar o tipo de dado representado por uma varivel, isto , queremos que o dado seja apresentado em um tipo diferente do qual a varivel foi inicialmente declarada. Por exemplo: ao fazermos uma diviso entre dois inteiros, a linguagem C++ trunca a parte fracionria e podemos desejar que isto no acontea. Este procedimento chamado de converso de tipo ou casting . Sintaxe: (tipo) varivel onde tipo o nome do tipo ao qual queremos converter o dado armazenado em varivel. Exemplo:
#include <iostream> using namespace std; int main() { cout << "\nNumero 7 DIVIDIDO por 3" ; cout << "\n\nsem conversao: "<<7/3<<"\tcom conversao: " << (float)7/3<<"\n\n"; system("pause");

3.2.4 Varivel ponteiro Ns j sabemos que uma varivel um endereo na MP que armazena um dado. bom deixar claro que no um nico endereo, pois, dependendo do tipo, poderemos estar alocando 1, 2, 4, 8 ou mais posies para cada varivel como vimos na ltima tabela. Uma varivel ponteiro armazena o endereo de outra varivel. Mais adiante estudaremos este tipo de varivel uma vez que se no trabalharmos bem com este tipo de varivel, no conseguiremos programar bem na linguagem C++.

4. Atribuio
Consiste em atribuir um valor a uma varivel. Em C++, o comando de atribuio tem a seguinte sintaxe: < nome_da_varivel > = <contedo> ;

Professora ANITA LOPES


Exemplos: a = 12 ;

peso = 65.2; sexo ='f'; idade1 = 21; idade2 = 34; Observao 1: Em C++, possvel declarar e inicializar uma varivel: int a = 12; Observao 2: Em C++, possvel inicializar vrias variveis: x =t =s = 0; Na atribuio mltipla as operaes ocorrem da direita para a esquerda, isto , inicialmente o valor 0 atribudo a s, depois o valor de s atribudo a t e, por ltimo, o valor de t atribudo a x. 4.1 Atribuio mltipla. A linguagem C++ permite que se atribua um valor a muitas variveis. em uma nica instruo. Sintaxe: var_1 = [var_2 = ... ] valor; Exemplo: a = b = 0;

5. Entrada de dados
scanf 5.1 cin cin>>nomedavarivel; cin>>nomedavarivel1>> nomedavarivel2; O objeto cin permite que o usurio digite dados atravs do dispositivo padro de entrada: teclado. O operador >> chamado de extrao.
#include <iostream> using namespace std; int main() { int idade; float altura; cout<<"\nDigite idade: " ; cin>>idade; cout<<"\nDigite altura: " ; cin>>altura; cout<<"\n\n\nIdade: "<<idade; cout<<"\nAltura: "<<altura<<endl; system("pause");

10

Professora ANITA LOPES

#include <iostream> using namespace std; int main() { char sexo; char nome[30]; cout<<"\nDigite nome: " ; cin>>nome; cout<<"\nDigite sexo(m/f): " ; cin>>sexo; system("pause"); system("cls"); cout<<"\nNome; "<<nome; cout<<"\nSexo; "<<sexo<<endl;; system("pause"); }

O objeto cin quando l um vetor de char(string) termina a leitura no primeiro espao, deixando RENATO no buffer. Quando um outro cin para ler o sexo executado, o teclado no liberado e a letra R apanhada e armazenada na varivel sexo. Por estas razes, precisamos conhecer outros mtodos. 5.2 cin.getline Este mtodo permite a leitura de um vetor de char inclusive com espaos e no deixando nada no buffer. Sintaxe: cin.getline( <nome do vetor de caracteres>, <tamanho> );
#include <iostream> using namespace std; int main() { char sexo; char nome[30]; cout<<"\nDigite nome: " ; cin.getline(nome,30); cout<<"\nDigite sexo(m/f): " ; cin>>sexo; cout<<"\n\n\nNome: "<<nome; cout<<"\nSexo: "<<sexo<<endl;; system("pause"); }

11

Professora ANITA LOPES

5.3 cin.get Este mtodo permite a leitura de um char. Sintaxes: cin.get(<nome da varivel char); cin.get(); A primeira sintaxe serve para ler uma varivel do tipo char, mas deixa enter no buffer enquqnto que o objeto cin sempre libera o teclado para o usurio digitar.
#include <iostream> using namespace std; int main() { char sexo1,sexo2; cout<<"\nDigite sexo(m/f) " ; cin.get(sexo1); cout<<"\nDigite sexo(m/f): " ; cin.get(sexo2); cout<<"\n\n\nSexo: "<<sexo1; cout<<"\nSexo: "<<sexo2<<endl;; system("pause"); #include <iostream> using namespace std; int main() { char sexo1,sexo2; cout<<"\nDigite sexo(m/f) " ; cin>>sexo1; cout<<"\nDigite sexo(m/f): " ; cin>>sexo2; cout<<"\n\n\nSexo: "<<sexo1; cout<<"\nSexo: "<<sexo2<<endl;; system("pause"); 12

Professora ANITA LOPES


} }

No se surpreenda se econtrar alguns bugs quando usar cin, cin.get() ou cin.getline() em alguns compiladores.

No gosta de usar system(pause); ? Veja o exemplo abaixo:


#include <iostream> using namespace std; int main() { char sexo1,sexo2; cout<<"\nDigite sexo(m/f) " ; cin>>sexo1; cout<<"\nDigite sexo(m/f): " ; cin>>sexo2; cout<<"\n\n\nSexo: "<<sexo1; cout<<"\nSexo: "<<sexo2<<endl;; cin.get();cin.get(); // o primeiro limpa o buffer e o segundo aguarda o pressionamento de uma tecla }

6. Operadores Aritmticos
Existem cinco operadores aritmticos em C++. Cada operador aritmtico est relacionado a uma operao aritmtica elementar: adio, subtrao, multiplicao e diviso. Existe ainda um operador (%) chamado operador de mdulo cujo significado o resto da diviso inteira. Operador + * Operao adio subtrao multiplicao
13

Professora ANITA LOPES


/ % Sintaxe: operando1 operador operando2 onde operador um dos smbolos mostrados acima e operando uma constante ou um identificador de varivel. Exemplos: 12 + 5 -> 17 12 * 5 -> 60 12 / 5 -> 2 quando se divide dois inteiros, o resultado um inteiro 12 % 5 -> 2 resto da diviso inteira Observao: Se voc precisar dividir dois nmeros inteiros e quiser a resposta em real, existe duas sadas: 1- Coloque um ponto em um dos operandos caso, pelo menos um, seja uma constante: 12 / 5. . 2- Caso os dois operandos sejam variveis, faa: (float) a/b . No existe em C++, como existe em outras linguagens, um operador especfico para a operao de potenciao (ab). Existe, porm, uma funo de biblioteca (pow(...,...)) que realiza esta operao, ou voc poder criar quando aprender a usar as funes log e exp.. 6.1 Hierarquia das operaes Operadores () nome() ++ -- ! */% +< > <= >= == != && || ?: = += -= *= /= %= Prioridade interno externo ED ED ED ED ED ED ED ED ED ED Categoria parnteses funo incremental, lgico aritmtico aritmtico relacional relacional lgico lgico condicional atribuio diviso mdulo (resto da diviso inteira)

14

Professora ANITA LOPES

6.2

Operadores de Atribuio Aritmtica

Muitas vezes queremos alterar o valor de uma varivel realizando alguma operao aritmtica com ela. A linguagem C++ apresenta instrues otimizadas com o uso de operadores ditos operadores de atribuio aritmtica. Os smbolos usado so (+=, -=, *=, /= , %=). Sintaxes:

var += exp; var = var + exp; var -= exp; var = var - exp; var *= exp; var = var * exp; var /= exp; var = var / exp; var %= exp; var = var % exp; onde var o identificador da varivel e exp uma expresso vlida. Estas instrues
so equivalentes as seguintes:

15

Professora ANITA LOPES


Exemplos: Atribuio Aritmtica cont += 1; j -= i ; num *= 1 + k; divide /= 5; resto %= 2;

Instruo Equivalente cont = cont + 1; j=ji; num = num * (1 + k); divide = divide / 5; resto = resto % 2;

O operador de atribuio aritmtica tem precedncia menor que os outros operadores at aqui discutidos. 6.3 Operadores Incrementais

Em programao existem instrues muito comuns chamadas de incremento e decremento. Uma instruo de incremento adiciona uma unidade ao contedo de uma varivel. Uma instruo de decremento subtrai uma unidade do contedo de uma varivel. Existem, em C++, operadores especficos para realizar as operaes de incremento (++) e decremento (--). Eles so genericamente chamados de operadores incrementais. Sintaxe: Instruo Equivalente ++ var; var = var + 1; var ++ ; var = var + 1; -- var ; var = var 1; var -- ; var = var 1; onde var o nome da varivel da qual se quer incrementar ou decrementar um unidade. Observe que existe duas sintaxes possveis para os operadores: pode-se colocar o operador como prefixo ou como sufixo. Nos dois casos o valor da varivel ser incrementado (ou decrementado) de uma unidade. Porm se o operador for colocado como prefixo, o valor da varivel ser incrementado (ou decrementado) antes que a varivel seja usada em alguma outra operao. Caso o operador seja colocado como sufixo, o valor da varivel ser incrementado (ou decrementado) depois que a varivel for usada em alguma outra operao.
#include <iostream> using namespace std; int main() { int n,n1,n2,pre,suf; cout<<"\nnumero:"; cin>>n; n1=n; //para nao perder o valor de n n2=n; //para nao perder o valor de n pre=++n1; cout<<"\n\nprefixo= "<<pre<<"\t n= "<<n1<<endl; suf=n2++; cout<<"\n\nsufixo= "<<suf<<"\t n= "<<n2<<endl; cin.get();cin.get();

}
16

Professora ANITA LOPES

6.4

Operadores Relacionais e Lgicos

As expresses lgicas usadas nas estruturas de teste so formadas pelos operadores relacionais e lgicos. 6.4.1 Operadores relacionais Operadores relacionais verificam a relao de magnitude e valores. So seis os operadores relacionais em C: Operador > < >= <= == != Sintaxe: Significado maior que menor que maior ou igual a menor ou igual a igual a diferente de igualdade entre dois

expresso_1 operador expresso_2


onde expresso_1 e expresso_2 so duas expresses numricas quaisquer, e operador um dos operadores relacionais. Ao contrrio de outras linguagens, em C++ no existem tipos lgicos, portanto o resultado de uma expresso lgica um valor numrico: uma expresso avaliada verdadeira recebe o valor 1, uma expresso lgica avaliada falsa recebe o valor 0. Os operadores relacionais de igualdade (== e !=) tem precedncia menor que os de magnitude (>, <, >= e <=). Estes, por sua vez, tem precedncia menor que os operadores aritmticos.

17

Professora ANITA LOPES


6.4.2 Operadores lgicos So trs os operadores lgicos de C: &&, || e !. Estes operadores tm os mesmos significados dos operadores lgicos Booleanos AND, OR e NOT. Sintaxes:

expr_1 && expr_2 expr_1 || expr_2 !expr


onde expr_1 , expr_2 e expr so expresses quaisquer. Observe que os operadores lgicos atuam sobre expresses de quaisquer valores. Para estes operadores todo valor numrico diferente de 0 considerado 1. Operador conjuno disjuno negao Matemtica e ^ ou v no | C && || !

TABELA VERDADE DO OPERADOR && Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candidato for negativa, dever falar 0, caso contrrio, falar 1. Suponha tambm que s ser chamado para entrevista o candidato que dominar as duas linguagens. Voc conhece C++? Voc conhece PASCAL? SADA 0 0 0 0 1 0 1 0 0 1 1 1 Neste exemplo, somente o quarto candidato seria chamado para a entrevista, pois o operador && (e), s considera a expresso como verdadeira se todas as expresses testadas forem verdadeiras. TABELA VERDADE DO OPERADOR || Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candidato for negativa, dever falar 0, caso contrrio, falar 1. Suponha tambm que ser chamado para entrevista o candidato que dominar pelo menos uma linguagem.

18

Professora ANITA LOPES


Voc conhece C++? 0 0 1 1 Voc conhece JAVA? 0 1 0 1 SADA 0 1 1 1

Neste exemplo, somente o primeiro candidato no seria chamado para a entrevista , pois o operador || (ou), considera a expresso como verdadeira se, pelo menos uma expresso testada for verdadeira. Observao:O Operador && tem precedncia sobre o operador ||. Estes dois tm precedncia menor que os operadores relacionais. TABELA VERDADE DO OPERADOR ! Suponha uma pergunta feita a duas pessoas. Se a resposta do candidato for negativa, dever falar 0, caso contrrio, falar 1. Voc No conhece C++? SADA 1 0 0 1 Observao: O operador ! tem a mesma precedncia que os operadores incrementais.

7. Estruturas de seleo - if / switch


Nossos programas at agora seguiram um mesmo padro: entrava-se com dados, estes eram processados e alguma informao era mostrada na tela. Agindo desta forma, o computador mais parecia uma mquina de calcular. O aprendizado de novos conceitos como a da estrutura de seleo nos dar uma viso maior da complexidade de tarefas que ele poder executar. 7.1 Estrutura de deciso - if...else

A estrutura if...else uma estrutura de controle do C++ muito fcil de ser usada Aps o teste, o fluxo poder seguir dois caminhos, isto , se o teste resultar em uma verdade, ser executado o comando ou bloco de comandos que se encontra aps o fecha parnteses do teste, caso contrrio, se existir, ser executado o comando ou bloco de comandos que se encontra aps o comando else.

19

Professora ANITA LOPES


7.1.1 Estrutura de deciso com um bloco Sintaxe: if(condio) { }

bloco

onde: condio uma expresso lgica ou relacional. bloco um conjunto de instrues, separadas por ponto-e-vrgula. { e } s sero obrigatrias se tiver mais de uma ao para ser executada. Se a condio for verdadeira, o bloco executado. Caso contrrio, o bloco no executado.

7.1.2 Estrutura de deciso com dois blocos Sintaxe: if(condio) { } else { }

bloco

bloco

onde: condio uma expresso lgica ou relacional. bloco 1 e bloco 2 so conjuntos de instrues. Se a condio for verdadeira o bloco 1 executado. Caso contrrio, o bloco 2 executado. 7.1.3 Deciso de mltiplos blocos (if...else if...) Muitas vezes, nossos programas podero envolver vrias condies excludentes. Programas que envolvem faixas salariais ou faixas de idades so exemplos clssicos do uso da instruo if ... else if ... . Sintaxe: Deciso de mltiplos blocos:

20

Professora ANITA LOPES

if(condio 1) { } ... else if(condio N) { } else { }

bloco 1

bloco N

bloco P

onde:condio 1, condio 2, ... so expresses lgicas ou relacionais. bloco 1 , bloco 2,... so conjuntos de instrues. Se a condio 1 for verdadeira o bloco 1 executado. Caso contrario, as condies sero avaliadas, sucessivamente at que seja verdadeira ou chegue ao ltimo else, onde o bloco P seria executado. Observe que apenas um dos blocos executado.

7.2

Estrutura switch...case

A estrutura switch...case, tambm conhecida como alternativa de mltiplas escolhas, uma estrutura que simplifica nossos programas no uso de deciso de mltiplos blocos quando a expresso de controle( a condio) envolver tipos int ou char(de um caracter que tambm considerada inteira). O resultado desta expresso comparado ao valor de cada um dos rtulos, e os comandos so executadas a partir desde rtulo. Sintaxe: switch(expresso) { case rtulo_1:

bloco n break;

... case rtulo_n:

bloco1; break; case rtulo_2: bloco2 break;

21

Professora ANITA LOPES


<default: bloco d> } onde: expresso uma expresso inteira ou char de um caracter. rtulo_1,rtulo_2,...rtulo_n e rtulo_d so constantes inteiras ou char de um caracter. bloco 1, bloco 2, ..., bloco n e bloco d so conjuntos de instrues. Execuo: A expresso avaliada e o fluxo desviado para o conjunto cujo rtulo igual ao resultado da expresso. O bloco abaixo do rtulo executado. Se o valor da expresso no for igual a nenhum rtulo, o bloco do defualt executado. Voc no obrigado a colocar o rtulo do default e por esta razo ele se encontra entre os sinais de menor e maior. Por que usar break? Normalmente, em outras linguagens de programao, aps a avaliao da expresso e a execuo do bloco correspondente, o fluxo do programa passa para a pro'xima instruo, ignorando todos os outros rtulos. Na linguagem C++ isto no acontece e poder trazer srias conseqncias em seus programas. O uso do break forar a sada do comando switch e a execuo do prximo comando. Existir alguma situao que no ser necessrio usar break? Sim. Lembre-se do exerccio dos trinios.

8. Estruturas de repetio
Trs so as estruturas de repetio disponveis na linguagem C++: for, while e do ... while. Em todas as estruturas estar presente pelo menos uma expresso para controlar a repetio. 8.1 Estrutura de repetio: for A estrutura do for a mais simples estrutura de repetio e usada para repetir um ou vrios comandos tantas vezes quanto desejarmos. a estrutura mais indicada quando o nmero de repeties for conhecido embora, as outras duas estruturas tambm possam ser usadas. O controle do nmero de repeties, na maioria das vezes, feito por uma varivel chamada de varivel contadora. A estrutura do for na linguagem C++ um pouco diferente das demais linguagens, pois a condio pode no se prender somente a uma varivel contadora.

22

Professora ANITA LOPES


Sintaxes: for (inicializao;condio;incremento) declarao; for (inicializao ;condio ;incremento) { bloco de comandos } onde: inicializao uma expresso de inicializao da varivel contadora e s executada uma vez.. condio uma expresso lgica de controle de repetio. incremento uma expresso de incremento da varivel contadora. bloco de comandos um conjunto de instrues a ser executado. 8.2 Estrutura de repetio: while A estrutura while uma estrutura "poderosa" da programao. Muitos programadores fazem uso somente desta estrutura. Ela testa primeiro a condio e poder nem executar o bloco caso a condio seja falsa. Logo, a estrutura do while repete enquanto a condio for verdadeira. importante que a varivel presente na condio tenha seu valor alterado dentro da repetio, pois, caso contrrio, entrar em loop. Normalmente, todos os autores mostram simplesmente a sintaxe da estrutura, mas esquecem de informar como na prtica ela dever ser escrita. Abaixo, apresentarei a sintaxe geral e a sintaxe usada na prtica:

Sintaxe while(condio) { }

Sintaxe na prtica atribuio ou leitura da varivel presente na condio while(condio) { atribuio ou leitura da varivel presente na condio

bloco de comandos

bloco de comandos

onde: condio uma expresso lgica ou numrica. bloco de comandos um conjunto de instrues.

23

Professora ANITA LOPES


8.3 Estrutura de repetio: do...while

Esta estrutura parecida com while. Sua diferena que o bloco executado pelo menos uma vez, pois testa ao final. Esta estrutura repete enquanto a condio for verdadeira. Sintaxe: do {

} while(condio);

bloco de comandos

onde: condio uma expresso lgica ou numrica. bloco de comandos um conjunto de instrues.

8.4 Comandos associados As estruturas de repetio podem, mas no devem, sofrer desvios e interrupes em sua seqncia normal. 8.4.1 break Assim como o foi usado para interromper o comando switch, poder ser usado com qualquer um dos trs comandos de repetio.

9 Estruturas
As estruturas em C++ podem ser homogneas e heterogneas. Inicialmente, vamos abordar as homogneas, pois so mais familiares uma vez que conhecemos seu conceito da matemtica quando estudamos matrizes. 9.1 Estruturas homogneas Em C++, o uso de matrizes de fundamental importncia e existe uma relacionamento estreito entre matrizes e ponteiros que estudaremos mais adiante. A grande novidade que estudaremos ser o uso de matrizes com estruturas heterogneas. As matrizes so tabelas na MP e podem ter uma ou mais dimenso. Quando tem somente uma dimenso, tambm chamamos de vetor.

24

Professora ANITA LOPES


Na linguagem C++, como j vimos, uma varivel char ,que precisa armazenar mais de um caracter, faz uso de matriz, pois podemos acessar cada um de seus caracteres em separado, usando o nome da varivel e sua posio entre colchetes. Por que ser que na linguagem C++ a posio do primeiro caracter 0 ? O endereo guardado o do primeiro caracter que chamamos de base, logo qualquer outro caracter ser acessado pelo endereo base mais sua posio. Se o endereo o da primeira posio, somente o 0 poderia ser acrescido para permanecer na mesma posio.

Se declararmos pal com tamanho 5, lembre-se de que s podemos usar 4 posies, pois uma reservada para o finalizador \0 que indica o fim do vetor. bom voc j ir se acostumando com este conceito de apontamento, pois para se programar bem em C, precisaremos dominar o conceito de ponteiros. 9.1.1 Declarando uma matriz: tipo nome do conjunto [ ... ] [ ...] ... ; Exemplos: /* declara uma matriz unidimensional de 5 elementos inteiros */ int num[ 5 ]; /* declara uma matriz bidimensional com 100 linhas e 4 colunas do tipo float */ float notas [ 100 ][ 4 ]; /* declara uma matriz bidimensional com 100 linhas e 30 colunas do tipo char */ char nomes [ 100 ][ 30 ]; Toda matriz para guardar nomes, na linguagem C++, bidimensional, pois o primeiro ndice indica a quantidade de nomes e o segundo o nmero de caracteres 1 que sero armazenados em cada nome. 9.1.2 Armazenamento O armazenamento na matriz poder ser feito atravs de um comando de leitura ou de atribuio.

25

Professora ANITA LOPES


9.1.2.1 Leitura /*um dimensao */ ... for(a=0;a<tamanho;a++) { cout<<"\n: "<<a+1; cin>>nomeVetor[a]; } ... /*duas dimensoes */ ... for(L=0;L<tamanhoLinha;L++) for(c=0;c<tamanhoColuna;c++) { cout<<\nNumero da linha <<L+1<< coluna "<<c+1<<: ; cin>>nomeMatriz[L][c]; } ...

9.1.2.2 Atribuio Podemos tambm inicializar as matrizes atravs de atribuies: Exemplos: int vet[4]={6,7,8,9}; float nota[3]={8.5,6.2,9.8}; char nome[12]="Joo Renato"; char nomes[4][30]={"JOO", "MARIA", "PEDRO","FILIPE"}; int mat[][3]={1,2,3,4,5,6,7,8,9}; /* na declarao/atribuio acima, assumido 3 como nmero de linhas */ #include <iostream> using namespace std; int main() {int L,c; int ias_meses[][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30, 31,30,31,31,30,31,30,31}; cout<<"\n\nPara anos nao bissextos, primeira linha e para bissextos, segunda linha\n\n"; for(L=0;L<2;L++) { for(c=0;c<12;c++) cout<<dias_meses[L][c]<<" "; cout<<"\n\n"; } system("pause"); }

26

Professora ANITA LOPES

9.1.3 Sada /*um dimensao MATRIZ COLUNA*/ /*um dimensao MATRIZ LINHA*/ ... ... system(cls); system(cls); cout<<\nTitulo\n; cout<<\nTitulo\n; for(a=0;a<tamanho;a++) for(a=0;a<tamanho;a++) cout<<"\n: "<<nomeVetor; cout<<nomeVetor <<"\t"; ... ... /*duas dimensoes TODOS OS ELEMENTOS*/ ... system(cls); cout<<\nTitulo\n; for(L=0;L<tamanhoLinha;L++) { for(c=0;c<tamanhoColuna;c++) cout<<nomeMatriz[L][c]<<"\t"; cout<<\n; } ... /*duas dimensoes ALGUNS ELEMENTOS*/ Condio ... system(cls); (L==c) cout<<\nTitulo\n; s diagonal Principal for(L=0;L<tamanhoLinha;L++) { for(c=0;c<tamanhoColuna;c++) (L!=c) if( condio ) todos menos a diagonal cout<<nomeMatriz[L][c]<<"\t"; Principal else cout<<"\t"; (L<c) elementos acima da cout<<\n; diagonal principal } ... (L>c) elementos abaixo da diagonal principal

27

Professora ANITA LOPES


9.1.4 Matrizes somaLinha e somaColuna

9.1.4.1 Matriz somaLinha uma matriz unidimensional(vetor ou matriz coluna) que ter tantas linhas quantas forem as linhas da matriz original e cada elemento ser a soma de todos os elementos da linha correspondente na matriz original. Em outras palavras, cada elemento soma de todos os elementos das colunas de uma linha. 9.1.4.1.1 Inicializando a matriz somaLinha Como uma matriz de acumuladores precisa ser inicializada. for(L=0; L<tamanhoLinha; L++) somaLinha[L]=0; 9.1.4.1.2 Gerando a matriz somaLinha for(L=0;L< tamanhoLinha;L++) for(C=0;C< tamanhoColuna;C++) somaLinha[L]+=mat[L][C]; 9.1.4.1.3 Imprimindo a matriz somaLinha sozinha for(L=0;L< tamanhoLinha;L++) cout<<somaLinha[L]<<\n; cout<<endl; 9.1.4.1.4 Imprimindo a matriz somaLinha com a matriz original system("cls"); cout<<"\nMatriz Original com matriz SomaLinha\n\n"; for(L=0;L< tamanhoLinha;L++) { for(C=0;C< tamanhoColuna;C++) cout<<matOriginal[L][c]<<"\t"; cout<<somaLinha[x]<<"\n"; }
28

Professora ANITA LOPES


9.1.4.2 Matriz somaColuna uma matriz unidimensional(vetor ou matriz linha) que ter tantas colunas quantas forem as colunas da matriz original e cada elemento ser a soma de todos os elementos da coluna correspondente na matriz original. Em outras palavras, cada elemento a soma de todos os elementos das linhas de uma coluna. 9.1.4.2.1 Inicializando a matriz somaColuna Como uma matriz de acumuladores precisa ser inicializada. for(c=0; c<tamanhoColuna; c++) somaLinha[c]=0; 9.1.4.2.2 Gerando a matriz somaColuna for(L=0;L< tamanhoLinha;L++) for(c=0;c< tamanhoColuna;c++) somaColuna[c]+=mat[L][c]; 9.1.4.2.3 Imprimindo a matriz somaColuna sozinha for(c=0;L< tamanhoColuna;c++) cout<<somaColuna[c]<<\t; cout<<endl; 9.1.4.2.4 Imprimindo a matriz somaColuna com a matriz original system("cls"); cout<<"\nMatriz Original com matriz SomaColuna\n\n"; for(L=0;L< tamanhoLinha;L++) { for(c=0;c< tamanhoColuna;c++) cout<<matOriginal[L][c]<<"\t"; cout<<"\n"; } for(c=0;c< tamanhoColuna;c++) cout<<somaColuna[c]<<"\t"; cout<<"\n";

29

Professora ANITA LOPES


9.1.3 Operaes Em relao s matrizes numricas, podemos realizar todas as operaes que j conhecemos com matrizes: produto escalar, soma, subtrao, multiplicao por escalar, multiplicao de matrizes, clculo do determinante, etc. 10 Funes 10.1 Conceito Funo um trecho de programa com atribuies especficas, simplificando o entendimento do programa, proporcionando ao programa menores chances de erro e de complexidade. A linguagem C++ formada de vrias funes.

10.2 Vantagens As funes atravs da passagem de parmetros e atravs do seu nome permitem que sejam retornados valores rotina chamadora e desta forma, esses valores podero ser impressos, atribudos a uma varivel ou podem servir em operaes aritmticas entre outras. Os principais objetivos de uma funo so: Dividir e estruturar um algoritmo em partes logicamente coerentes; Facilidade em testar os trechos em separados; O programador poder criar sua prpria biblioteca de funes, tornando sua programao mais eficiente uma vez que poder fazer uso de funes por ele escritas em vrios outros programas com a vantagem de j terem sido testadas; Maior aumentar a legibilidade de um programa; Evitar que uma certa seqncia de comandos necessria em vrios locais de um programa tenha que ser escrita repetidamente nestes locais, diminuindo tambm, o cdigo fonte, ; Tudo isto justifica o uso de funes em nossos programas

10.3. Funes Pr-definidas O conjunto de funes pr-definidas muito extenso e aqui vamos estudar algumas funes das bibliotecas: cmath, cstring. Quando estudamos uma funo, temos vrios parmetros a observar. Veja, por exemplo a seguinte funo pr-definida da biblioteca cmath:
30

Professora ANITA LOPES


double sqrt(double x) Este o prottipo da funo, isto , informaes sobre o tipo de retorno da funo e tipos dos parmetros. Esta funo retorna um valor double, seu nome sqrt e o tipo da varivel que recebe o valor passado double. Quando voc criar suas funes, elas precisaro ter uma declarao semelhante a esta. As funes podero ser localizadas antes da funo principal(main) ou depois. Se uma funo for declarada antes, o prottipo da funo no precisar ser declarado na funo main, mas se declarada depois, o prottipo precisar ser declarado na funo main. Declarao de uma funo: tipo int, float, char, void Exemplos: int quadrado(int l) char maiuscula(char n[] )

identificador Nome da funo

(lista de parmetros) ( tipo1 nome1, tipo2 nome2 )

10.3.1 Funes Numricas Biblioteca: cmath


#include <iostream> #include <cmath> #define PI 3.14159265 using namespace std; int main() { float f; cout<<"\nFUNCOES NUMERICAS\n"; cout<<"\nDigite numero real: "; cin>>f; cout<<"\nNumero: "<<f; cout<<"\nABSOLUTO: "<<fabs(f); cout<<"\nCEIL: "<<ceil(f); cout<<"\nFLOOR: "<<floor(f); cout<<"\nTRUNC: "<<trunc(f); cout<<"\nROUND: "<<lround(f); cout<<"\nFMOD: "<<fmod(f,3); cout<<"\nSQRT: "<<sqrt(f+0.5); cout<<"\nSeno de 30: "<<sin(30*PI/180); cout<<"\nCo-seno de 30: "<<cos(30*PI/180); cout<<"\nTangente de 30: "<<tan(30*PI/180); cout<<"\nPotencia de 2 elevado a 3: "<<pow(2.0,3); cout<<"\nLogaritmo de 8 na base neperiana: "<<log(8.0); cout<<"\nLogaritmo de 8 na base 10: "<<log10(8.0); cout<<"\nLogaritmo 8 na base 2: "<<log(8.0)/log(2.0); cout<<"\nRaiz cubica de 8: "<< pow(8,1.0/3); cout<<"\n\n"; system("pause");

}
31

Professora ANITA LOPES

10.3.2 Funes Strings Biblioteca: cstring, cctype


#include <iostream> #include <cstring> #include <cctype> using namespace std; int main() {char c,s1[40],s2[30]; cout<<"\nBIBLIOTECA cctype\n"; cout<<"\nLetra: "; cin>>c;cin.get(); c=toupper(c); cout<<"Convertida para maiuscula: "<<c; c=tolower(c); cout<<"\nConvertida para minuscula: "<<c; cout<<"\n\nBIBLIOTECA cstring\n"; cout<<"\nDigite palavra: "; cin.getline(s1,30); strcat(s1,"FIM"); cout<<"\nConcatenacao com FIM: "<<s1; cout<<"\nDigite palavra: "; cin.getline(s2,30); strcpy(s1,s2); cout<<"\nApos copia de toda palavra2: "<<s1; cout<<"\nTamanho de s2: "<<strlen(s2); cout<<"\n\nComparando strings\n"; cout<<"Digite PAZ: "; cin.getline(s1,30); cout<<"Digite PAZ: "; cin.getline(s2,30); if(strcmp(s1,s2)==0) cout<<"\nIGUAIS"; else cout<<"\nDiferentes"; cout<<"\nDigite PAZ: "; cin.getline(s1,30); cout<<"Digite AMOR: "; cin.getline(s2,30); 32

Professora ANITA LOPES


if(strcmp(s1,s2)!=0) cout<<"\nDIFERENTES"; else cout<<"\nIguais"; cout<<"\n";system("pause");

10.4. Diretiva #define Define um identificador e um contedo que ir ser substitudo toda vez que o identificador aparecer em um programa. Esta diretiva pode ser associada a uma string ou a uma macro semelhante a uma funo. Se o tamanho da macro for pequena, substitui com vantagens o uso de funes. Exemplo 1: #include <iostream> #define quadrado(x) ((x)*(x)) #define pi (3.14159265) #define NP (2.71828182846) #define conv(x) ((x)*(pi)/(180)) ... Exemplo 2: #include <iostream> #define AREA(b,h) (b*h)
33

Professora ANITA LOPES


Exemplo 3: #include <iostream> #define HIPO(c1,c2) (sqrt(c1*c1+c2*c2)) 10.5 Chamada da funo Quando uma funo chamada, o fluxo de controle desviado para a funo, no momento em que ela ativada no algoritmo principal. Ao terminar a execuo dos comandos da funo, o fluxo de controle retorna ao ponto que foi ativada.

main() {... ...

funcao1( ...) { ... retorna(...); }

< chamada da funo 1 > ... ... }

34

Professora ANITA LOPES


Bibliografia: 1. LOPES, Anita, GARCIA, Guto. Introudo Programao- 500 Algoritmos. 6 ed.Rio de Janeiro: Campus, 2002. 2. LOPO,Erik de Castro, JONES Bradlely, AIKTEN Peter. C for Linux Programming .SAMS 3. EVARISTO, Jayme. Aprendendo a Programar em C. Rio de Janeiro: Book Express, 2001. 4. Kernighan, Brian W. Ritchie, Dennis M. C- A linguagem de Programao padro ANSI . Rio de Janeiro , Campus , 2002 5. MIZRAHI, V.V. Treinamento dem liguagem C Curso completo.Mdulos 1 e 2. So Paulo: Mc Graw Hill, 1990 6. MRALES,Celso R. Estruturas de daos e Algoritmos. So Paulo: Berkley,2001. 7. SCHILDT, Herbert. C completo e total. Makron Book 8. UFMG. Apostila de C. 9. UNIVERSIDADE DE CAXIAS DO SUL. Apostila de C. 10. PROF. SILVIO Anotaes. ni.faj.br/nourau/document/get.php/2934/aula8.pdf

35

Professora ANITA LOPES Anexo I


VARIVEL CARACTER COMPARAO / ATRIBUIO e CONCATENAO Quando se compara duas variveis caracter, estamos comparando, na verdade, caracter a caracter baseado no valor do cdigo ASCII de cada caracter. Desta forma, no difcil entender o uso do sinal de > , < ou de = . Usar o sinal de > significa perguntar se a varivel caracter vem depois na ordem alfabtica (< vem antes) , uma vez que o cdigo ASCII est em ordem alfabtica, isto , a letra A tem um cdigo menor do que a letra B e assim, sucessivamente. ALGUMAS QUESTES 1) COMPARAO Algumas linguagens permitem que se monte uma expresso relacional com os nomes das variveis: se (NOME1 > NOME2) ento ... outras linguagens no permitem e oferecem funes que viabilizam esta operao: if (strcmp( NOME1, NOME2) = 0) ( nomes iguais) ... if (strcmp ( NOME1, NOME2) > 0) ( primeiro vem depois) ... if (strcmp ( NOME1, NOME2) < 0) ( primeiro vem antes) ... 2) ATRIBUIO Algumas linguagens permitem que se atribua uma varivel caracter outra varivel caracter: AUX = NOME1; outras linguagens no permitem e oferecem funes que viabilizam esta operao: strcpy(AUX, NOME1); 3) CONCATENAO Algumas linguagens tm o operador + ( coloca o contedo de uma aps o da outra): NOME1 = NOME1 + NOME2;
36

Professora ANITA LOPES


outras linguagens operao: no permitem e oferecem funes que viabilizam esta

strcat(NOME1, NOME2);

FUNO Conta caracter uma funo retorna a quantidade de caracteres de uma string(vetor de char, veja mais adiante). Varivel nome A N I T A L O P E S Total de caracteres: 11 tam= strlen(nome); /*biblioteca string.h */

FUNO MAIUSCULA uma funo que converte uma letra minscula em maiscula. Todos os caracteres cujos cdigos esto compreendidos entre 97 - 122, sero subtrados de 32 e se tornaro cdigos compreendidos entre 65 - 90, cdigos das letras maisculas no cdigo ASCII. Seu argumento no pode ser uma parte de uma cadeia, logo, sub no pode ser usada como argumento desta funo.

nome[posicao] = toupper(nome[posicao]); Exemplo do trecho que converte todo o contedo de uma varivel caracter para letras maisculas, sem considerar letras acentuadas:
Linguagem C

for( x= 0; x< strlen(nome);x++) nome[x]=toupper(nome[x]);

VARIVEL CARACTER - UMA NOVA VISO A varivel simples caracter armazenada na memria como se fosse um vetor conforme esquema abaixo:
37

Professora ANITA LOPES

Linguagem C varivel caracter

\0 ........

byte byte byte byte byte byte byte byte byte byte 0 1 2 3 4 5 6 7 8 9 O byte 0 usado para o primeiro caracter e o vetor finalizado com \0

Concluso: Analisando sobre este prisma, podemos dizer que a varivel simples caracter um conjunto de n variveis caracter de um nico caracter e todas com o mesmo nome. A representao de cada caracter da varivel se far da seguinte maneira:

nome da varivel [ posicao ]

38

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