You are on page 1of 51

UNIVERSIDADE ESTADUAL PAULISTA JLIO DE MESQUITA FILHO FACULDADE DE ENGENHARIA DE ILHA SOLTEIRA

Departamento de Matemtica

Introduo Cincia da Computao Curso de C++ Bsico

Discente: Leonardo Ito Perillo Curso: Engenharia Eltrica Orientador: Prof. Dr. Anirio Salles Filho

Ilha Solteira, 30 de Julho de 2010.

Sumrio
Uma Breve Histria do C++ Introduo Lgica de Programao Compiladores Tipos de Variveis Alguns Comandos Bsicos Comentrios no Programa Operadores Constante e Variveis O comando Include e as Bibliotecas Biblioteca <Math.h> Controle de Fluxo de Execuo Deciso Controle de Fluxo de Execuo Repetio Arrays Unidimensionais Vetores Arrays Bidimensionais e Multidimensionais Funes Escopo de variveis Exerccios de Reviso Referncias Bibliogrficas 02 03 04 05 08 11 12 13 14 15 16 21 30 35 41 42 43 50

Uma breve histria do C++


O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs, durante a dcada de 1980 com o objectivo implementar uma verso distribuda do ncleoUnix. Como o Unix era escrito em C, dever-se-ia manter a compatibilidade, ainda que adicionando novos recursos. Alguns dos desafios incluam simular a infraestrutura da comunicao entre processos num sistema distribudo ou de memria compartilhada e escrever drivers para tal sistema. Stroustrup percebeu que a linguagem Simula possua caractersticas bastante teis para o desenvolvimento de software, mas que era muito lenta para uso prtico. Por outro lado, a linguagem BCPL era rpida, mas possua demasiado baixo nvel, dificultando sua utilizao no desenvolvimento de aplicaes. A partir de sua experincia de doutorado, comeou a acrescentar elementos do Simula no C. O C foi escolhido como base de desenvolvimento da nova linguagem pois possua uma proposta de uso genrico, era rpido e tambm portvel para diversas plataformas. Algumas outras linguagens que tambm serviram de inspirao para o cientista da computao foram ALGOL 68, Ada, CLU e ML. Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++. Antes implementada usando um pr-processador, a linguagem passou a exigir um compilador prprio, escrito pelo prprio Stroustrup. Novas caractersticas foram adicionadas, como funes virtuais, sobrecarga de operadores e funes, melhorias na verificao de tipo de dado e estilo de comentrio de cdigo de uma linha (//). Em 1985 foi lanada a primeira edio do livro The C++ Programming Language, contendo referncias para a utilizao da linguagem, j que ainda no era uma norma oficial. A primeira verso comercial foi lanada em outubro do mesmo ano. Em 1989 a segunda verso foi lanada, contendo novas caractersticas como herana mltipla, classes abstratas, mtodos estticos, mtodos constantes e membros protegidos, incrementando o suporte a orientao a objeto. Assim como a linguagem, sua biblioteca padro tambm sofreu melhorias ao longo do tempo. Sua primeira adio foi a biblioteca de E/S, e posteriormente a Standard Template Library (STL); ambas tornaram-se algumas das principais funcionalidades que distanciaram a linguagem em relao a C. Criada primordialmente na HP por Alexander Stepanov no incio da dcada de 1990 para explorar os potenciais da programao genrica, a STL foi apresentada a um comit unificado ANSI e ISO em 1993 convite de Andrew Koenig. Aps uma proposta formal na reunio do ano seguinte, a biblioteca recebe o aval do comit. Pode-se dizer que C++ foi a nica linguagem entre tantas outras que obteve sucesso como uma sucessora linguagem C, inclusive servindo de inspirao para outras linguagens como Java, a IDL de CORBA e C#.

Introduo Lgica de Programao


A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para o desenvolvimento.Ento o que lgica? Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo. Seqncia Lgica: Estes pensamentos podem ser descritos como uma seqncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa. Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um problema. Instrues: Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a informao que indica a um computador uma ao elementar a executar.Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem seqencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc... evidente que essas instrues tem que ser executadas em uma ordem adequada no se pode descascar as batatas depois de frit-las. Dessa maneira, uma instruo tomada em separado no tem muito sentido para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.

Compiladores
Um compilador um programa de sistema que traduz um programa descrito em uma linguagem de alto nvel para um programa equivalente em cdigo de mquina para um processador. Em geral, um compilador no produz diretamente o cdigo de mquina, mas sim um programa em linguagem simblica (assembly) semanticamente equivalente ao programa em linguagem de alto nvel. O programa em linguagem simblica ento traduzido para o programa em linguagem de mquina atravs de montadores. Para desempenhar suas tarefas, um compilador deve executar dois tipos de atividade. A primeira atividade a anlise do cdigo fonte, onde a estrutura e significado do programa de alto nvel so reconhecidos. A segunda atividade a sntese do programa equivalente em linguagem simblica. Embora conceitualmente seja possvel executar toda a anlise e apenas ento iniciar a sntese, em geral estas duas atividades ocorrem praticamente em paralelo. Para apresentar um exemplo das atividades que um compilador deve desempenhar, considere o seguinte trecho de um programa em C: main() { int a, b, valor; a=10; b=20; Valor = a*(b+20); cout<<valor<<endl; getch(); } Para o compilador, este segmento nada mais do que uma seqncia de caracteres em um arquivo texto. O primeiro passo da anlise reconhecer que agrupamentos de caracteres tm significado para o programa, por exemplo, saber que int uma palavra-chave da linguagem e que a e b sero elementos individuais neste programa. Posteriormente, o compilador deve reconhecer que a seqncia int a ,corresponde a uma declarao de uma varivel inteira cujo identificador recebeu o nome a. As regras de formao de elementos e frases vlidas de uma linguagem so expressas na gramtica da linguagem. O processo de reconhecer os comandos de uma gramtica conhecido como reconhecimento de sentenas.

Tipos de Variveis
Quando definimos uma varivel em C++, precisamos informar ao compilador o tipo da varivel: um nmero inteiro, um nmero de ponto flutuante, um caractere, e assim por diante. Essa informao diz ao compilador quanto espao deve ser reservado na memria para a varivel, e o tipo de valor que ser armazenado nela. As variveis mais utilizadas, em um curso de C++ bsico so: Int O tipo de dado int (inteiro) serve para armazenar valores numricos inteiros. Existem vrios tipos de inteiros, cada um de um tamanho diferente (dependendo do sistema operacional e/ou arquitetura do processador): int, pode possuir 16 bits, 32 bits ou 64 bits short int, deve possuir tamanho de no mnimo 16 bits e no pode ser maior que int. long int, deve possuir tamanho mnimo de 32 bits. long long int, deve possuir tamanho mnimo de 64 bits. Exemplo de aplicao: #include <iostream.h> #include <conio.h> main() { int idade; cout<<Digite a sua idade<<endl; cin>>idade; cout<<Sua idade daqui 10 anos ser<<idade +10<<endl; return 0 getch(); } Note em nosso exemplo, que a idade da pessoa, obrigatoriamente deve ser um nmero inteiro, por isso a escolha da varivel int. Float O tipo de dado float serve para armazenar nmeros de ponto flutuante, ou seja, com casas decimais (Reais).Exemplo de aplicao: #include <iostream.h> #include <conio.h> main() { int a,b; float d; a=5; b=3; d=a/b; cout<<d<<endl; return 0; getch()} No nosso simples exemplo, ter como sada o nmero 1,66667 5

Double O tipo de dado double serve para armazenar nmeros de ponto flutuante de dupla preciso, normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade. Exemplo de aplicao: #include <iostream.h> #include <conio.h> main() {double a; a=5/3; cout<<a<<endl; return 0; getch() } J utilizando a varivel double, teremos um nmero mais significativo de sada, no caso, 1,6666 O Double utilizado quando necessitamos de uma aproximao maior e mais exata do resultado O Double consome incrveis 8 bytes de memria para o seu armazenamento. Esse consumo explicado pela alta preciso de seu nmero (cerca de 14 dgitos aps a vrgula)

Char O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que o programa reserva um espao de 8 bits na memria RAM ou em registradores do processador para armazenar um valor (char de tamanho maior que 8 bits permitido pela linguagem, mas os casos so raros. Exemplo de aplicao: #include <iostream.h> #include <conio.h> main() {char nome[8]; cout<<"Digite seu nome: "; cin>>nome; cout<<"Seu nome e: "<< nome<<endl; return 0; getch(); } No nosso exemplo, pode-se guardar uma string com at 20 caracteres de comprimento, caso exceda o nmero mximo de caracteres, ocasionar erro no compilador. Caso fosse declarado apenas char nome, a varivel nome armazenaria apenas uma letra, por exemplo, se o usurio digitasse um nome com 7 letras, a varivel apenas armazenaria a primeira letra digitada.

Struct Em C podem ser usadas estruturas (chamados de registros em outras linguagens de programao). As estruturas so grupos de variveis organizadas arbitrariamente pelo programador. Exemplo de aplicao: #include <stdio.h> #include <conio.h> struct pessoa; { unsigned short int idade; char nome[51]; /* vetor de 51 chars para o nome */ unsigned long int rg; }; /* estrutura declarada */ int main(void) { struct pessoa exemplo = {16, "Fulano", 123456789}; /* declarao de uma varivel tipo struct pessoa */ printf("Idade: %hu\n", exemplo.idade); printf("Nome: %s\n", exemplo.nome); printf("RG: %lu\n", exemplo.rg); return 0; getch(); }

Esta estrutura composta por 3 elementos de tipos diferentes. Depois de ser declarada uma varivel do tipo struct x, onde x o nome da estrutura, para se acessar os diversos elementos deve-se fazer x.elemento.

Alguns Comandos Bsicos


Em C++, a separao entre instrues especificada com um ponto-e-vrgula (no final de cada instruo). A diviso do cdigo em linhas diferentes serve somente para torn-lo mais legvel e esquemtico para seres humanos. #include <iostream.h> Comandos que comeam com um sinal de numerao (#) so diretivas do prprocessador. Elas no so linhas de cdigo executveis, mas indicaes para o compilador. Nesse caso, o comando #include <iostream.h> diz ao pr-processador do compilador para incluir o arquivo de cabealho padro iostream. Esse arquivo especfico inclui as declaraes da biblioteca bsica de entrada-sada do C++, e est sendo usado porque suas funcionalidades sero usadas mais tarde nesse programa. #include <conio.h> Esta biblioteca tem a finalidade de receber dados do teclado,ou outros dispositivos de entrada, alm de tambm exibir dados na sada padro. Quando utilizamos a biblioteca #include<conio.h>, temos a possibilidade de executar as funes getch() para ler as entradas do teclado e kbhit() para testar se h buffers de teclado a serem lidos. muito til, e eu diria at indispensvel o uso desta biblioteca para a programao. main() Essa linha corresponde ao incio da declarao da funo main. A funo main o ponto pelo qual todos os programas em C++ iniciam a execuo. No faz diferena se estiver no incio, no fim, ou no meio do cdigo seu contedo sempre o primeiro a ser executado quando um programa inicia. Alm disso, pelo mesmo motivo, obrigatrio que todos os programas em C++ tenham uma funo main. Depois de main h um par de parnteses () porque uma funo. Em C++ todas as funes so seguidas por um par de parnteses () que, opcionalmente, podem incluir argumento dentro deles. O contedo da funo main segue imediatamente aps sua declarao formal e coberto entre chaves ({}), como em nosso exemplo. cout << Exemplo<<endl; Essa instruo faz a coisa mais importante nesse programa. cout o dispositivo de sada padro no C++ (geralmente o monitor), e a frase completa insere uma seqncia de caracteres no dispositivo de sada.O cout declarado no arquivo de cabealho <iostream.h>, ento pra que seja possvel utiliza-lo, esse arquivo precisa ser incluso. Note que a frase termina com um caractere ponto-e-vrgula (Esse caractere significa o fim da instruo e precisa ser includo aps toda instruo em qualquer programa em C++ )Um dos erros mais comuns dos programadores de C++ devido ao fato de esquecerem de incluir um ponto-e-vrgula; no final de cada instruo.

cin>>varivel; O trabalho com a entrada padro no C++ feito aplicando-se o operador sobrecarregado de extrao (>>) no comando cin. Isso precisa ser seguido pela varivel que ir guardar o dado que ser lido Declarando a varivel como desejada, ento espera por uma entrada do cin (teclado) para que possa guard-la em um espao reservado da memria ROM. O comando cin s pode processar a entrada do teclado depois que a tecla ENTER for pressionada. Sendo assim, mesmo que voc pea um nico caractere, o cin no ir processar a entrada at que o usurio pressione ENTER depois que o caractere tenha sido digitado. Voc precisa sempre considerar o tipo da varivel que voc est usando para guardar o valor extrado pelo cin. Se voc pedir um inteiro, voc receber um inteiro, se voc pedir um caractere, voc receber um caractere, e se voc pedir uma string de caracteres, voc receber uma string de caracteres. return; A instruo return faz com que a funo main() termine e retorne o cdigo que segue a instruo, nesse caso o 0. Essa a maneira mais comum de terminar um programa que no encontrou nenhum erro durante sua execuo. Como voc ver em exemplos seguintes, todos os programas em C++ terminam com um comando parecido com esse.

Exemplo de aplicao: Desenvolva um algoritmo que receba a massa e o volume de uma amostra qualquer e calcule sua densidade. Soluo: #include<iostream.h> #include<conio.h> float massa, vol, den; main{ cout<< Digite a massa do material<<endl; cin>>massa; cout<< Digite a massa do material<<endl; cin>>vol; den = massa/vol; // Aqui ser calculado o valor da densidade cout<< A densidade do material sera <<den<<endl; return 0; getch();} Observe que as estruturas utilizadas para a resoluo desse programa j foram explicadas e detalhadas.

Observao importante: Sendo assim, voc deve ter notado que nem todas as linhas desse programa realizaram uma ao. Havia linhas contendo apenas comentrios (aquelas iniciadas por //), linhas com instrues para o pr-processador do compilador (aquelas iniciadas por #), tambm haviam linhas que iniciavam a declarao de uma funo (nesse caso, a funo main) e, finalmente linhas com instrues (como a chamada cout <<), todas essas ltimas foram includas dentro do bloco delimitado pelas chaves ({}) da funo main O programa foi estruturado em linhas diferentes para que seja mais fcil l-lo, mas isso no obrigatrio. Por exemplo, ao invs de: #include <iostream.h> #include <conio.h> int main () { cout << " Exemplo "<<endl; return 0; getch();} Poderamos ter escrito: int main () { cout << " Exemplo"; return 0; } em apenas uma linha e isso teria exatamente o mesmo significado. Porm, as estruturas #include <iostream.h> e #include <conio.h> devem ser inseridas em linhas diferentes, pois o compilador no consegue diferencia-las quando essas esto inseridas na mesma linha.

Exerccios Propostos
1) Clculo da mdia de quatro nmeros inteiros dados. 2) Clculo do quadrado de um nmero dado. 3) Clculo da funo f(x,y) = 2x+3y , com x e y sendo nmeros reais dados. 4) Um bloco de concreto cai do topo de um prdio cuja altura X metros acima do solo. Determinar o tempo de queda at o solo e a sua velocidade linear no instante em que atinge o solo. Despreze a resistncia do ar e considere g=10 m/s2. ( S=So+Vot+at2/2 V=Vo+at). 5) Determine a mdia final de um aluno, dados as notas das provas (P1, P2) e dos trabalhos (T1, T2) obedecendo ao seguinte critrio: Mdia = 0.2*(0,4*T1+0,6*T2)+0,4*(0,4*P1+0,6*P2) 6) Um veterinrio realizou uma compra para abastecer sua clnica. Os itens comprados e os respectivos valores das unidades so: X coleiras (XR), Y casinhas de cachorro (YR), M camas para gatos (MR), 26/3 de sacos de rao (S), V vacinas contra raiva (VR). Determine o custo total da compra. 7) Dado um nmero inteiro A de quatro dgitos, obtenha dois outros nmeros B e C sendo B formado pelos dois primeiros dgitos de A e C pelos dois ltimos dgitos. Ex: A= 3421 B=34 e C=23 8) Dado um nmero inteiro A de trs dgitos obtenha a soma destes dgitos Ex: A=872 soma=17 10

Comentrios no Programa
Comentrios so pedaos de cdigo-fonte descartados do cdigo pelo compilador. Eles no fazem nada. O objetivo deles somente permitir que o programador insira notas ou descries dentro do cdigo-fonte. O C++ suporta duas maneiras para inserir comentrios: // comentrio de linha /* comentrio de bloco */ O primeiro deles, o comentrio de linha, descarta tudo desde onde o par de barras (//) achado at o final daquela mesma linha. O segundo deles, o comentrio de bloco, descarta tudo entre os caracteres /* e a prxima apario dos caracteres */, com a possibilidade de incluir diversas linhas. Ns iremos adicionar comentrios ao nosso segundo programa: /* programa para analisar o valor de entrada */ #include <iostream.h> #include <conio.h> main () int valor; { cout << "Digite o valor desejado"; //associar valor cin>>valor; if (valor >=100) { cout<<seu valor e considerado alto<<endl; } else { cout<<seu valor e considerado baixo<<endl;} return 0; getch(); } Note que //associar valor e /* programa para analisar o valor de entrada*/ so os comentrios inseridos pelo programador para melhor compreenso de seu programa. Alm disso, outros programadores podem compreender o programa mais facilmente, alm de poder encontrar, caso exista, possveis erros com mais exatido.

11

Operadores
necessrio para programar, ter conhecimento de constantes e operadores, e seu respectivo significado, praticamente todos os programas fazem uso deles. So indispensveis para a criao de programas de forma rpida e mais eficiente. Constantes de Barra Invertida Cdigo \b \f \t \n \ \ \0 \\ \a \N \xN Operadores Aritmticos Operador + * / % ++ -Operadores Relacionais Operador > >= < <= == != Operadores lgicos Operador && || ! Ao AND OR NOT 12 Ao Maior que Maior que ou igual a Menor que Menor que ou igual a Igual a Diferente de Ao Soma Subtrao ou troca de sinal Multiplicao Diviso Resto da diviso inteira Incremento Decremento Significado Retrocesso (backspace) Alimentao de Formulrio (form feed) Tabulao Horizontal (tab) Nova Linha Aspas Apostrofo Nulo Barra Invertida Sinal Sonoro (Beep) Constante Octal (N o valor da constante) Constante Hexadecimal (N o valor da constante)

Operadores Lgicos Bit a Bit Operador & | ^ ~ >> << Ao AND Lgico OR Lgico XOR (OR exclusivo) NOT Shift Rigth Shift Left

Constantes e Variveis
Restries para a atribuies de variveis As constantes so valores que sero mantidos fixos pelo compilador O nome das variveis deve comear com uma letra ou um sublinhado _. Os demais caracteres podem ser letras, nmeros ou sublinhado. O nome da varivel no pode ser igual a uma palavra reservada e aos nomes das funes. Tamanho mximo para o nome de uma varivel 32 caracteres. Classificao de Constantes e Variveis

Locais Podem ser usadas apenas na funo onde foi declarada, sendo inutilizveis para as demais funes. Globais Podem ser usadas em qualquer lugar do programa

Modificador const A linguagem C++ introduz um novo modificador chamado const, que tem comportamento variado dependendo do local onde est sendo declarado. Sua funo, basicamente, estabelecer um vnculo entre declarao e obrigatoriedade da coerncia no uso do smbolo declarado. A princpio, quando declaramos uma constante com este modificador fazemos com que seja obrigatrio o uso do smbolo de forma que o mesmo no possa ter seu valor alterado. Assim, se fizermos:

const int x = 4;

O inteiro x no poder deixar de ter valor igual a 4. Qualquer tentativa de modificar o valor da constante ao longo do programa ser reportada como erro pelo compilador. 13

O comando Include e as Bibliotecas


Como podemos ver, a linguagem C++ tem a capacidade de importar bibliotecas. A importncia da biblioteca em C imensa, pois ela nos poupa de muita programao. Uma vez que a funo j est pronta dentro da biblioteca, basta importar tal biblioteca e utilizar a funo que queremos. Por exemplo, se quisssemos mostrar uma mensagem na tela, voc no tem que produzir uma funo inteira ou criar um comando novo, basta importar a biblioteca <iostream.h>, que possui a finalidade de I/O (entrada e sada) de dandos. Quando o programa for compilado, o compilador ir buscar nas bibliotecas exigidas pelo usurio tais funes para saber como utiliz-las no programa. O papel do pr-processamento indicar, antes mesmo de compilar, os parmetros necessrios para ser criado o arquivo executvel. O pr-processamento indicado pelo caractere sharp (#) no inicio da linha e deve ser usado na importao de bibliotecas ao programa que ser desenvolvido. A importao de uma biblioteca dada pelo comando #include (incluir) seguido da biblioteca entre os sinais de menor (<) e maior (>). O .h a extenso do arquivo da biblioteca que vem da palavra inglesa HEADER (cabealho). Aps importarmos uma biblioteca por linha, no final dessa lista devemos demonstrar que tipo de funes usaremos. Na grande maioria dos casos usaremos as funes padres de cada bibloteca. Podemos fazer isso facilmente digitando a palavra reservada USING* indicando o espao de nome (namespace) standard (std) , que quer dizer padro em ingls. Como exemplo, importaremos uma biblioteca padro de entrada e sada de C++. #include<iostream.h> using namespace std; As bibliotecas de C so diferentes das bibliotecas de C++. Apesar de muitos compiladores de C++ suportarem as bibliotecas de C, nenhum compilador exclusivamente de C suporta bibliotecas de C++. Algumas bibliotecas do C++ <algorithm> <fstream> <functional> <iostream> <locale> <map> <set> <sstream> <string> <vector>

14

Biblioteca <Math.h>
Existem vrios processos em um algoritmo que podemos simplesmente determinar como operaes matemticas ou clculos sendo executados pelo nosso programa. Levando para a questo realmente matemtica, em C++ existe uma biblioteca prpria para clculos matemticos um pouco mais complexos, a biblioteca ao qual nos referimos a <math.h> Com a biblioteca <math.h> podemos encontrar facilmente funes para calcular potncias, raz quadrada, funes trigonomtricas para clculos que envolvem seno, co-seno e tangente, alm de constantes para nmeros irracionais como, por exemplo, PI () e 2. Simbologia e log2 e log10 e Ln2 (x) Ln10 (x) /2 /4 2 O que Nmero de Euler Logaritmo de e na base 2 Logaritmo de e na base 10 Logaritmo neperiano binrio Logaritmo neperiano ou natural Pi Meio Pi Quarto de Pi Raiz quadrada de 2 Raiz quadrada de meio
Valor da constante no C++

2,7172818284590452354 1,4426950408889634074 0,43429448190325182765 0,69314718055994530942 2,30258509299404568402 3,14159265358979323846 1,57079632679489661923 0,78539816339744830962 1,41421356237309504880 0,70710678118654752440

Como podemos ver, todas as constantes so valores do tipo double. E isso se reflete nas funes. Trigonomtricas sin (): Retorna o valor do seno. Recebe como argumento o valor dos graus em double. cos (): Retorna o valor do co-seno. Recebe como argumento o valor dos graus em double. tan (): Retorna o valor da tangente. Recebe como argumento o valor dos graus em double. Logartmicas log (): Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double. log10 (): Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double. Potncias pow (): Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double, o primeiro a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operao 210, faramos pow (2, 10). sqrt (): Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele deve extrair a raiz.

15

Controle de Fluxo de Execuo Deciso


Os mtodos de tomada de deciso no C++, esto presentes para as tarefas mais corriqueiras que o programa deve executar. Alm desta forma de controle de decises, C++ prov certas funcionalidades relacionadas a objetos que modificam a forma como o cdigo estruturado e, por consequncia, decidem como o programa deve se comportar em determinadas situaes. Examinemos os mtodos bsicos e analisemos de forma simples as estruturas de deciso, para entender como isso poder nos ajudar a tornar o cdigo mais bem construdo. Estrutura IF/ELSE Uma ao muito importante que o processador de qualquer computador executa, e que o torna diferente de qualquer outra mquina, a tomada de deciso definindo o que verdadeiro e o que falso. Se quisermos fazer um bom programa, esse programa deve ser capaz de definir caminhos diferentes de acordo com decises que o prprio programa toma. Para isso, precisamos de uma estrutura seletiva da qual o nico valor possvel o bit 1 ou 0, resumindo: retornar o valor VERDADEIRO ou FALSO. Em C / C++, como em muitas linguagens de programao, quem faz isso o if, ou seja, se for tal coisa, faa isso! Simples desse jeito. O ELSE o que chamamos de caso contrrio, ou seja, se for falso execute o que est no ELSE. Exemplificando: Se (IF) for tal coisa, faa isso! Caso contrrio (ELSE), faa aquilo, com essa idia, selecionaremos apenas uma ao ou um nico conjunto de aes, no podendo realizar 2 condies diferentes.

1 condio: if (condio) {declarao} 2 condies: if (condio) {declarao 1;} else {declarao 2;} 3 condies: if (condio 1) {declarao1;} else if (condio 2) {declarao 2} else {declarao 3;} N condies: if (condio 1) {declarao1;} 16

else if (condio 2) {declarao 2} else if (condio 3) {declarao 3} ... else if (condio (N-1)) {declarao (N-1)} else {declarao N;} possvel observar que podemos criar um programa com quantas condies queremos, restringindo a cada condio, uma ao ou um conjunto de aes. Um dos erros mais comuns criar condies redundantes, como mostra o seguinte exemplo: Elabore um programa que diga qual ao, ou aes foram escolhidas: a) Ao 1: caso o nmero seja maior ou igual a 2. b) Ao 2: caso o nmero seja maior que 1. c) Ao 3: caso no seja satisfeita nenhuma condio. #include<iostream.h> #include<conio.h> main() { float a; cout<<"digite o numero"<<endl; cin>>a; if (a>=2) {cout<<"Ao 1 escolhida"<<endl;} else if (a>1) {cout<<" Ao 2 escolhida"<<endl;} else {cout<<" Ao 3 escolhida"<<endl;} getch(); }

Observe que o erro encontra-se no uso do else if, com ele, exclumos possibilidades possveis de respostas. Por exemplo, se digitarmos o nmero 3 no programa acima, o compilador nos dar como sada apenas a primeira condio ("Ao 1 escolhida), onde na verdade temos duas respostas, pois satisfaz a ao 1 e 2 simultaneamente. Se substituirmos o if no lugar do else if, o compilador nos dar as 2 respostas possveis ("Ao 1 escolhida e "Ao 2 escolhida), com isso, corrigiramos o problema da redundncia do nosso exemplo. Com o uso apenas do if e do else possvel o compilador executar vrias condies que ocorram simultaneamente.

17

Exemplos de Aplicao 1) Dados dois nmeros reais quaisquer, desenvolva um programa que diga se eles so iguais ou diferentes. Soluo: #include<iostream.h> #include<conio.h> main() { float a,b; cout<<"digite o primeiro numero"<<endl; cin>>a; cout<<"digite o segundo numero"<<endl; cin>>b; if (b==a) {cout<<"Os nmeros digitados sao iguais"<<endl;} else {cout<<"Os nmeros digitados sao diferentes"<<endl;} getch(); } 2) Dado um nmero qualquer, determinar se este neutro, positivo ou negativo. Soluo: #include<iostream.h> #include<conio.h> main() { float a; cout<<"digite o numero"<<endl; cin>>a; if (a==0) {cout<<"O nmero digitado e nulo"<<endl;} else if (a>0) {cout<<"O nmero digitado e positivo"<<endl;} else {cout<<"O nmero digitado e negativo"<<endl;} getch(); } 3) Elabore um programa que identifique se um nmero inteiro digitado par, impar ou nulo Soluo: #include<iostream.h> #include<conio.h> #include <math.h> main() {int n; 18

cout<<"digite o numero"<<endl; cin>>n; if (n%2==0) { if (n==0) {cout<<" nulo "<<endl;} else {cout<<" par "<<endl;} } else {cout<<"impar"<<endl;} getch();} Observao: Note atentamente a hierarquia das estruturas do terceiro exemplo. 4) Dado um nmero real qualquer, calcule sua raiz quadrada. Soluo: #include<iostream.h> #include<conio.h> #include<math.h> main() {float n,a; cout<<"digite um numero"<<endl; cin>>n; a= pow (n,0.5); cout<<A raiz de <<n<< <<a<<endl; getch(); } Observe que o comando pow serve para realizar operaes com exponenciais. No nosso caso: a = pow(n,0.5), estamos atribuindo varivel a, a seguinte expresso exponencial n elevado a 0.5. De forma genrica, no comando pow (A,B), teremos a funo exponencial, onde A a base e B o expoente.

Exerccios Propostos
1) Dados trs valores distintos, coloc-los em ordem decrescente. 2) Fazer um algoritmo para resolver o seguinte problema: calcular a soma dos dgitos de um nmero inteiro de quatro dgitos.Caso o nmero de entrada no possuir 4 dgitos, reportar erro ao usurio. 3) Dados os coeficientes de uma equao do segundo grau, verificar se a mesma possui razes reais, (iguais ou diferentes). Escreva os valores das razes. Se as razes no forem reais emitir uma mensagem informando o fato. 4) O nmero 3025 tem a seguinte caracterstica: 30+25=55 => 55*55=3025. Fazer um algoritmo que l um nmero inteiro de quatro algarismos e testa se ele tem ou no a caracterstica do 3025. 19

5) Dados trs valores distintos, coloc-los em ordem crescente, decrescente e calcular o valor mdio dos mesmos. 6) Dada a funo f (x) a seguir, faa um programa que calcule f (x) para qualquer valor de x: x2 2 se x <-4 x +5 se 4 x <5 x 5 - x3 +8 se

f (x)

7) Dados trs valores, X,Y e Z verificar se eles podem ser os comprimentos dos lados de um tringulo e, se forem, verificar se um tringulo eqiltero (3 lados iguais), isscele (2 lados iguais) ou escaleno (3 lados diferentes). Se ele no formarem um tringulo, escrever uma mensagem. Condio de existncia: Se X<Y+Z e Y<X+Z e Z<X+Y 8) Fazer um algoritmo usando menu, que leia um nmero N real e fornea as seguintes opes: 1) Clculo da raiz de N ( o usurio deve digitar tambm o ndice da raiz) 2) Clculo da potncia N por p ( o usurio deve digitar p (o ndice da potncia)) 3) Converter o nmero real para nmero inteiro 4) Calcular o resto da diviso de N por p ( o usurio deve digitar p ) 5) Sair do programa 9) Dado um nmero, verifique se ele par ou mpar. Se for par, calcule a sua raiz quadrada, se for impar calcule o seu quadrado. 10) Considere o problema de avaliao: dados uma nota feita a seguinte avaliao, elabore um programa que informe ao usurio a situao do aluno em relao nota: Nota invlida para 10 < nota < 0 Aprovado para 5 nota 10 Exame para 3 nota <5 Reprovado para 0 nota <3 11) Dados dois nmeros reais distintos, calcular se eles so iguais em mdulo. 12) Apresente um programa que solicite ao usurio o valor se x, calcule f(x) e mostre o resultado, sendo 2x se x7 x +10 se 5 x < 7 - x 5 se x <-5

f (x)

13) Dado o salrio inicial de cada cargo, faa um programa que ajusta os salrios de funcionrios de uma empresa. Se o funcionrio for tcnico (opo 1), o reajuste de 50%; se for gerente (opo 2), o reajuste de 30% se for outro funcionrio (opo 3) de 10%.
14) Faa um programa que, dado x, determine o valor de y = f (x) + g(x) , sendo:

20

Controle de Fluxo de Execuo Repetio


As estruturas de repeties so muito importantes para a soluo de problemas na programao, pois muitas vezes o mesmo procedimentos tm que ser executados mais de uma vez, ou um nmero de vezes varivel. Em C/C++, basicamente existem trs tipos de estrutura de repetio: for, while e do while.

Estrutura FOR Para o for, como qualquer iterao (repetio), precisa de uma varivel para controlar os loops (voltas). No for, essa varivel dever ser iniciada, indicando pelo seu critrio de execuo, e forma de incremento ou decremento. Ou seja, o for precisa de trs condies. Vale salientar que essas condies so separadas por ponto-e-vrgula. O comando deve ser inserido no compilador da seguinte forma: for (comando; condio; comando) {declarao;} Um dos exemplos mais utilizados o clculo da potncia de um nmero onde o usurio informa ao programa a base e o expoente. O programa deve fazer o nmero de interaes iguais o nmero x do expoente. Considerando o nmero do expoente natural, positivo e maior que zero, temos o seguinte programa: #include<iostream.h> #include<conio.h> main() {int x,y; cout<<"Digite a base"<<endl; cin>>y; cout<<"Digite o expoente"<<endl; cin>>x; int r=1; for (int i=0; i<x; i++ ) {r=r*y;} cout<<"O resultado ser "<< r <<endl; getch();} Observe que em for (int i=0; i<x; i++ ), temos as trs condies dentro do parnteses. int i=0 i<x i++ Critrio de incio e declarao da varivel usada. Critrio de parada para a varivel i. ++ mostra o incremento da varivel i, ou seja, aumentar de 1 em 1.

Isso far com que ocorra de 0 a (x-1) iteraes, que dar um total de x iteraes.

21

Exemplos de Aplicao 1) Elabore um programa que calcule o fatorial de um nmero dado. Soluo: #include<iostream.h> #include<conio.h> main() {int n; cout<<"digite o numero"<<endl; cin>>n; int fat=1; for (int i=1;i<=n;i++) {fat=fat*i; } cout<<fat<<endl; getch(); } 2) Um nmero dito perfeito quando a soma de seus divisores (exceto ele mesmo), ele prprio. Exemplo 28, divisores = 14+7+4+2+1 =28. Elabore um programa que diga se o nmero digitado perfeito ou no. Soluo: #include<iostream.h> #include<conio.h> #include<math.h> main() { int n; int cont=0; cout<<"Digite um nmero para descobrir se este perfeito"<<endl; cin>>n; for (int i=1;i<n;i++) { if (n%i ==0) { cont=cont+i;} } if (cont==n) {cout<<"perfeito"<<endl;} else {cout<<"nao perfeito"<<endl;} getch(); }

22

Estrutura WHILE Uma outra forma de iterao (repetio) em C/C++ o WHILE. O while executa uma comparao com a varivel. Se a comparao for verdadeira, ele executa o bloco de instrues, quantas vezes for necessrio, at a comparao se tornar falsa. Traduzindo para a lngua portuguesa, While significa enquanto, ou seja, enquanto a condio for verdadeira, execute sua respectiva ao. A estrutura do while parecida com a do if, no aspecto de possuir apenas uma condio: while (condio) {declarao;}

Exemplos de Aplicao 1) Elabore um programa que imprima os termos de uma progresso aritmtica cujo primeiro termo 3 e a razo 5. Parar o processamento quando for impresso um termo maior que 100. #include<iostream.h> #include<conio.h> main() {int a=3; cout<<a<<endl; while (a<100) {a=a+5; cout<<a<<endl;} getch();} 2) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando for impresso um termo negativo. 15, 30, 60, 12, 24, 48, 9, 18, 36, 6, 12, 24, ... #include<iostream.h> #include<conio.h> main() {int n=15; int cont=0; while (n>=0) {cout<<n<<endl; n=n*2; cont=cont+1; if (cont==2) {cont=0; n=(n/4)-3;} cout<<n<<endl;} getch();} Um dos erros mais freqentes, realizado por programadores desatentos, o loop-infinito, que caracterizado por ocorrer infinitas iteraes na estrutura. 23

Exemplo de loop-infinito Elabore um algoritmo que imprima os termos da serie abaixo, parando o processamento quando for impresso um termo maior que 80. 5, 10, 6, 11, 7, 12, 8, 13, ... #include<iostream.h> #include<conio.h> main() {int n=5; int r=5; while (n<=80) {cout<<n<<endl; n=n-r; if (r==5) {r=-4;} else {r=5;} } cout<<n<<endl; getch();} Observe que o erro consiste na expresso n=n-r que deveria ser: n=n+r. Na expresso n=n-r o valor de n ir diminuir com o passar das interaes, e sempre satisfar a condio de ser menor ou igual a 80, fazendo que continue com as iteraes de modo infinito. O compilador possivelmente acarretar um erro quando ocorrer o loop-infinito. DO/WHILE A estrutura de repetio DO/WHILE parte do princpio de que deve-se fazer algo primeiro e s depois comparar uma varivel para saber se o loop ser executado mais uma vez. A estrutura do/while parecida com a do while, no aspecto de possuir apenas uma condio, e ambas so estruturas de repetio, porm o do/while, diferentemente do while, informa a condio ao compilador apensa no final da estrutura. do {declarao;} while (condio); Partindo do ponto de vista que o usurio ir digitar o valor da varivel durante o bloco do do e s depois ser comparada no WHILE no final do bloco, isso pode ajudar muitas vezes em que necessrio executar um loop, nem que seja uma vez. Exemplo de Aplicao: 1) Faa um programa que analise se k maior que n, se isso for verdadeiro, e imprima todos os valores de k a n, se k for igual a n calcule o fatorial de k, e caso k for menor que n, apenas informe ao usurio. 24

Soluo: #include <iostream.h> #include<conio.h> main() { int k,n; cout<<"Digite o valor de k"<<endl; cin>>k; cout<<"Digite o valor de n"<<endl; cin>>n; cout<<" "<<endl; if (n==k) {int fat=1; for (int i=1;i<=k;i++) {fat=fat*i;} cout<<"O fatorial de "<<k<<" e "<<fat;} else if (k>n) {do {cout<<n<<endl; n=n+1;} while (k>=n);} else {cout<<"O valor de k e menor que n"<<endl;} getch();} return 0;

Exerccios Propostos
1) Elabore um algoritmo que imprime ao usurio os termos de uma PG, de razo 2, onde o termo inicial 4,5 2) Elabore um algoritmo que imprima os termos da srie abaixo. Parar o processamento quando for impresso um termo maior que 100. 1, 2, 1 ,4 ,1 ,6, 1, 8, 1, 10 ... 3) Desenvolva um programa que diz se um nmero primo ou no 4) Elabore um algoritmo que imprima os termos da srie de FIBONACCI. Parar o processamento quando for impresso um termo maior que 800. 0, 1, 1 ,2 ,3 ,5, 8, 13, 21 ... 5) Elabore um algoritmo que imprima os termos da srie abaixo. Parar o processamento quando for impresso um termo maior que 100. 4, 8, 11, 13, 14, 18, 21, 23, 24, 28... 6) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando for impresso um termo maior que 500. 25

1, 2, 3, 4, 8, 9, 10, 11, 22, 23, 24, 25, 50, 51, 52, 53, ... 7) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando for impresso um termo maior que 70. 2, 6, 9, 11, 12, 11, 15, 18, 20, 21, 20, 24, 27, ... 5) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quando for impresso um termo maior que 40. 10, 8, 6, 4, 8, 12, 16, 14, 12, 10, 14,18, 22, ... 6) Uma quantia de R$ 500.000,00 foi depositada em um banco que paga 13% de juros ao ms. O dinheiro fica no banco durante 20 anos. Elabore um algoritmo que imprima o montante: a) a cada 3 meses, para os 3 primeiros anos; b) a cada 2 anos, para os 4 anos seguintes; c) a cada 3 meses, para os 6 ultimos anos; 7) Considere uma quantidade desconhecida de nmeros reais, positivos. Elabore um algoritmo para ler esses nmeros e imprimir: a) todos os valores cuja parte decimal for maior a 0,8 b) a quantidade de valores cuja parte decimal for menor ou igual a 0,5 8) Fazer um algoritmo que, dada uma seqncia de N nmeros reais, determine qual o maior e qual o menor nmero da seqncia e determine a posio que eles ocupam na seqncia. 9) Faa um algoritmo que leia uma seqncia de nmeros quaisquer e calcula os quadrados dos valores absolutos destes nmeros. Fornecer a opo de repetir a leitura do nmero com (0) para sim e (1) para no.Utilizar teste inicial com entrada forada. 10) Fazer um algoritmo em forma de Menu que fornea as seguintes opes para o usurio: A - Clculo da raiz do um nmero (mtodo de aproximaes sucessivas de Newton) B - Clculo do fatorial de um nmero (utilizando agora a estrutura determinstica) C- Determinar se um nmero primo F- Determinar o quadrado do valor absoluto de um nmero G- Determinar se um nmero perfeito H - Sair do algoritmo O algoritmo deve ler o nmero de forma conveniente para cada operao. 11) Dado um nmero inteiro de quatro algarismos imprimir o nmero formado pelos 2 primeiros dgitos, o nmero formado pelos 2 ltimos dgitos e a soma desses dois ltimos. Por exemplo, se for dado 5283 devero ser impressos 52, 83 e o resultado da soma: 52+83. Aps a leitura, deve-se verificar se o nmero realmente formado por quatro algarismos. Se no for, a leitura deve ser repetida at que seja digitado um nmero correto. Como critrio de parada utilize uma entrada nula. 12) Faa um algoritmo que leia dois nmeros k e n e imprima os nmeros k, k+1, ... ,n ,at que k seja maior que n, caso isso no seja possvel, reportar erro ao usurio.

26

Switch / Case Uma outra forma de estrutura seletiva o switch. Dentro dos switch h o case (que significa caso). Ou seja, quase que um if com vrias possibilidades, mas com algumas diferenas importantes. Primeira diferena: Os cases no aceitam operadores lgicos. Portanto, no possvel fazer uma comparao. Isso limita o case a apenas valores definidos. Segunda diferena: O switch executa seu bloco em cascata. Ou seja, se a varivel indicar para o primeiro case e dentro do switch tiver 5 cases, o switch executar todos os outros 4 cases a no ser que utilizemos o comando para sair do switch. (Nos referimos ao BREAK). Agora, que conhecemos diferenas importantes, vamos ver como proceder com o switch / case. Primeiro o comando switch e entre parnteses a varivel na qual est guardado o valor que ser avaliado pelo case. Ento, abre-se o bloco de dados. Dentro do bloco de dados colocamos o comando case e logo aps um valor terminando a linha com dois pontos (:). Preste ateno no tipo de v arivel que ser colocado, pois h diferenas entre um dado e outro. Por exemplo: 1 no a mesma coisa que '1' e 'a' no a mesma coisa que 'A'. Ento, estruturado os comando que sero executados pelo case. Estruturalmente, seria isso: switch (varivel) {case valor1: Dados a serem executados; break; case valor2: Dados a serem executados; break;} Exemplo de Aplicao: 1) Elabore uma simples calculadora que realize as operaes de adio, subtrao, multiplicao e diviso, utilizando a estrutura switch/case. Soluo: #include <iostream.h> #include <conio.h> main () {int a, b, c, operacao; cout <<"Digite o 1o valor: "; cin >> a; cout <<"Digite o 2o valor: "; cin >> b; cout <<"Que operacao deseja realizar?"<<endl; cout<<"1.Adicao\t 2.Subtracao\t 3.Multiplicacao\t 4.Divisao \n\n=>"; cin >> operacao; switch (operacao) {case 1: c=a+b; cout <<a<<" + "<<b<<" = "<<c<<endl; break; 27

case 2: c=a-b; cout <<a<<" - "<<b<<" = "<<c<<endl; break; case 3: c=a*b; cout <<a<<" * "<<b<<" = "<<c<<endl; break; case 4: c=a/b; cout <<a<<" / "<<b<<" = "<<c<<endl; break;} getch(); return 0;} Perceba que no final de cada case h um break. Porque se no houvesse, o switch continuaria executando at o final. Por exemplo, no exerccio anterior, havia 4 casos (case), e escolhemos a operao 2, caso no houvesse o break, o programa executaria os casos seguintes, no nosso caso, a operao 3 e 4 Default Default, do ingls padro, o case que ativado caso no tenha achado nenhum case definido. Ou seja, o que aconteceria em ltimo caso. Vamos imaginar o seguinte cenrio: Seu programa pede para que o usurio digite apenas duas opes (S ou N) para reiniciar o programa. Mas, propositalmente ou por engano, o usurio digita uma opo totalmente diferente. E agora? O que seu programa deve fazer? aqui que o default entra. Geralmente o default quando previsto um erro, uma entrada de dado incorreta ou no de acordo com o contexto. O default tem seu papel parecido com o else, da estrutura if/else, caso nenhuma condio for feita, far os comandos definidos no default. #include <iostream.h> #include <conio.h> #include <cstdlib> main() {char opcao; int a=1; while (a==1) {cout <<"Deseja reiniciar o programa? [S/N]\n"; cin >> opcao; opcao=toupper(opcao); // deixar a letra maiscula switch (opcao) {case 'S': //Entre aspas simples porque um caracter cout<< "o programa ser finalizado"<<endl; a=0; break; case 'N': //Entre aspas simples porque um caracter cout<< "o programa continuar em execuo"<<endl; 28

a=1; break; default: cout <<"Opo invalida"<<endl; a=1; break;}} getch();} Como podemos ver, h dois casos: S para reiniciar ou N para sair. Se por acaso algum digitar algo diferente disso, executa-se o default, que informa que a opo escolhida invalida e repete a pergunta se o usurio deseja sair do programa, at que seja digitada uma opo valida (S ou N). Como a linguagem C/C++ case sensitive (diferencia maisculas de minsculas) usamos uma funo para deixar a letra maiscula (toupper da biblioteca ctype). Agora, no importa o que o usurio digitar, pois o programa est preparado para reagir qualquer entrada de dado.

Exerccios Propostos
1) Elabore um programa que receba do usurio um nmero entre 1 e 12, inclusive 1 e 12. Se ele digitou o nmero 1 , mostre "O ms atual Janeiro". Se ele digitou o nmero 2, mostre "O ms atual Fevereiro" . 2) Pea um nmero e informe de acordo com as condies : 1 - Incluso 2 - Excluso 3 - Alterao 4 - Consulta 5 - Relatrio Outros - Opo Invlida 3) Implemente a calculadora maluca, utilizando uma instruo switch-case para determinar a operao que deve ser executada, conforme o usurio escolheu no menu de opes: Considere que o usurio entre com valores estritamente positivos. Opo 1: Subtrai o fatorial do primeiro pelo segundo ao quadrado. Opo 2: Calcula a soma do cubo do primeiro com a metade do segundo. Opo 3: Calcula a soma da raiz quadrada dos nmeros digitados. Opo 4: Soma da diviso do primeiro pelo segundo com o segundo. 4) Criar um programa que receba por janela JoptionPane o valor de um produto e um cdigo de aumento, segundo a tabela: Cdigo A B C D E Aumento (%) 10 25 30 50 60

29

Arrays Unidimensionais Vetores


Vetores, tambm chamados arrays (ingls), so uma maneira de armazenar vrios dados num mesmo nome de varivel atravs do uso de ndices numricos. Por exemplo, se tivemos que criar 20 variveis do mesmo tipo que querem dizer a mesma coisa, ns no criaramos -> int x1, x2, x3, x4, x5, ... ao invs disso, criaramos apenas uma varivel de vetor para guardar todos os 20 nmeros de uma vez. Declaramos vetores de maneira muito semelhante declarao de variveis normais. A nica diferena que depois do nome da varivel deve ser informada a quantidade de elementos do vetor. Para declarar um vetor qualquer, com cinco elementos inteiros, escrevemos: Primeiro, o tipo de dado: int, float, double, ... Segundo, o nome da varivel: usando as mesmas convenes de uma varivel comum. (array, vetor, vet, ...) E por fim, o tamanho necessrio do vetor escrito entre colchetes: [5], [10], [3]... Ento, definimos a declarao de um vetor da seguinte maneira, por exemplo: int vet [4]; Note que a quantidade de elementos de um vetor no pode ser alterada depois que o vetor for declarado. Todo vetor um espao linear na memria dividido de acordo com o tamanho que declaramos. Portanto, se declaramos int vet [4], na memria representado da seguinte forma:

Criamos ento uma nica varivel com 4 espaos nos quais podem ser guardados nmeros inteiros.Agora, para acessarmos um local especfico dessa memria devemos indicar entre colchetes a posio desejada no vetor que chamamos de index. O importante mesmo saber que no importa o tamanho do vetor, o index (nmero que indica a posio) sempre comea em 0. Portanto, um vetor de tamanho 20 vai da posio 0 a 19, um vetor de tamanho 180 vai da posio 0 a 179, um vetor de tamanho 4 vai da posio 0 a 3. , portanto, se o nmero de elementos N, o ndice ou posio do ltimo elemento ser N 1.

Agora, se quisermos atribuir os valores 540 na posio 1 e 8456 na posio 3 faramos: vet [1]=540; vet [3]=8456.

30

No podemos nunca nos esquecer que o limite do vetor sempre seu tamanho menos 1. Usando o exemplo: vetor de tamanho 4, posio mxima 3 (pois 4-1=3). Ento, se atribuirmos um valor a posio 4 ocorrer um erro. Resumidamente, jamais poderamos fazer vet [4]=200.

Erro freqente: Analise a seguinte situao: int vet[4]; vet[0] = 3; int x = vet[2]; int y = vet[7]; // ERRO! Observe que o programador atribuiu varivel y, o valor do vetor numa posio inexistente, ocasionando assim um grande erro, pois o compilador atribuir um valor desconhecido a varivel. Exemplo de Aplicao: 1) Elabore um algoritmo que receba 10 valores distintos, e imprima eles na seqncia que foi digitado e na ordem crescente. Soluo: #include<iostream.h> #include<conio.h> main() {int vet[10],aux ,i, k; for (i=0;i<10;i++) {cout<<"Digite o termo "<<i+1<<endl; cin>>vet[i];} for (i=0;i<10;i++) {cout<<vet[i]<<" ";} cout<<" "<<endl; for (i=0;i<9;i++) {for (k=i;k<10;k++) {if(vet[i]>vet[k]) {aux=vet[i]; vet[i]=vet[k]; vet[k]=aux;}}} cout<<"Ordem crescente"<<endl; for (i=0;i<10;i++) {cout<<vet[i]<<" ";} getch(); return 0;}

31

No cdigo acima criamos um vetor de tamanho 10 e usamos uma iterao (repetio / loop) para preencher todos os espaos do vetor e ento outra iterao para mostrar todos os valores guardados. Para mudarmos as posies do vetor usamos uma varivel chamada i. 2) Elabore um algoritmo que receba 10 valores distintos, e imprima eles na seqncia contrria na qual foi digitada. Soluo: #include<iostream.h> #include<conio.h> main() {int vet[10],aux ,i, k; for (i=0;i<10;i++) {cout<<"Digite o termo "<<i+1<<endl; cin>>vet[i];} for (i=0;i<10;i++) {cout<<vet[i]<<" ";} cout<<" "<<endl; cout<<"Ordem inversa"<<endl; for (i=0;i<10;i++) {cout<<vet[9-i]<<" ";} getch(); return 0;} Observe que a ordem do vetor no foi alterado, apenas mudamos a forma de impresso. 3) Elabore um algoritmo que receba 5 valores distintos, transporte para um vetor VP, apenas os elementos primos. Soluo: #include<iostream.h> #include<conio.h> #include<math.h> main() {int vet[5],vp[5],i,a; int k=0; for (i=0;i<5;i++) {cout<<"Digite o termo "<<i+1<<endl; cin>>vet[i];} for (i=0;i<5;i++) {if (vet[i]%2 ==0) {vp[k]=vet[i]; k=k+1;}} cout<<"VP = "; for (i=0;i<k;i++) {cout<<vp[i]<<" ";} getch(); return 0;}

32

Exerccios Propostos
01) Elabore um algoritmo para ler uma sequncia de 20 valores inteiros positivos e armazen-los em um vetor VET. Imprimir o vetor. 02) Dado um vetor, comparar todos os seus elementos um a um e ordena-los em ordem crescente e decrescente. 03) Elabore um algoritmo para ler um vetor VET de 20 valores inteiros positivos e gerar dois outros vetores VP e VI onde: VP conter apenas os valores pares de VET, e VI conter apenas os valores mpares. Imprimir VET, VP e VI 04) Elabore um algoritmo para armazenar em um vetor KV todos os valores inteiros positivos desde 1 at 50. Transportar todos os elementos primos do vetor KV para um vetor PV. Imprimir os dois vetores. 05) Elabore um algoritmo para ler um vetor V de 20 valores inteiros positivos, calcular e imprimir o fatorial de todos os elementos pares do vetor, e calcular e imprimir a potncia de 5 de todos os valores mpares do vetor. 06) Construa um contador N que varie de 1 a 10 e construa um vetor A(N)=N2. Imprima N e A(N) 07) Apresente um algoritmo que receba uma seqncia de 9 valores, atribua-os a um vetor e imprima-os na seqncia contrria da que foi recebida. 08) Construa um programa que leia um Nmero (N) de nomes de pessoas e suas respectivas idades e guarde esses dados em dois vetores distintos. Imprima o nome e a idade de cada pessoa na mesma linha. Em seguida escolha um nmero (ndice do vetor) e imprima o nome e a idade da pessoa correspondente a este nmero 09) Faa um algoritmo que leia dois vetores de mesma dimenso e realize a soma entre eles. Ex: vetor1=( 2, 4, 10, 11, 8, 6) , vetor2 = ( 4, 3, 1, 2, 0, 1) , vetor resultante = (6, 7,11, 13, 8, 7) 10) Ler uma varivel de 15 elementos numricos e verificar se existem elementos iguais a 25. Se existirem, escrever as posies em que esto armazenados. 11) Elabore e implemente um algoritmo que faa um cadastro de materiais de construo. Os itens devem ser lidos e armazenados. Para cada item deve ser associado o nome do produto, um cdigo e a quantidade existente em estoque. Depois escolha um cdigo e imprima o nome do item e da quantidade existente correspondente a este cdigo. 12) Deseja-se publicar o nmero de acertos de cada aluno em uma prova em forma de testes. A prova consta de 5 questes, cada uma com cinco alternativas identificadas por A, B,C, D e E. Para isso so dados: o carto gabarito, o carto respostas para cada aluno, contendo o seu nmero e as respostas. Faa um algoritmo que resolva o problema e imprima os resultados. 13) Faa um algoritmo que calcula a mdia das notas de 10 alunos e determine o nmero de alunos que tiveram nota superior a mdia calculada; o aluno que teve a maior nota e o aluno que teve a menor nota. Imprima uma lista com o nome dos alunos e a nota na ordem decrescente de notas juntamente com seus respectivos nomes. 33

14) A FEIS deseja saber se existem alunos cursando, simultaneamente, as disciplinas ICC e clculo numrico. Existem disponveis na unidade de entrada os nmeros de matrcula de ICC (mximo 60 alunos) e Clculo Numrico (mximo 80). Cada conjunto dos nmeros de matrcula dos alunos de uma disciplina tem a matrcula fictcia 9999 no final. Formular um algoritmo que imprima o nmero de matrcula dos alunos que esto cursando estas disciplinas simultaneamente. Obs: O exerccio trata da ocorrncia de um elemento em um conjunto em outro conjunto. 15) Implemente um programa que l 10 inteiros do teclado ou para quando dois inteiros consecutivos sejam digitados. Aps a leitura o programa dever imprimir o maior, o menor, a mdia e a soma dos nmeros digitados. 16) Tentando descobrir se um dado era viciado, um dono de cassino honesto o lanou n vezes. Dados os n resultados dos lanamentos, determinar o nmero de ocorrncias em cada face. 17) Um usurio deseja obter todos os nmeros primos, em ordem crescente, de uma srie de 20 nmero aleatrios, no seriados.Elabore um programa que solucione esse problema, e imprima a seqncia digitada pelo usurio, a seqncia dos nmeros primos em ordem crescente e a seqncia dos nmeros no utilizados (no primos). 18) Faa um programa que utilize uma estrutura de repetio para ler 50 nmeros armazenando-os em um vetor e calcule e exiba a mdia aritmtica deles. Em seguida o programa deve apresentar todos os valores armazenados no vetor que sejam menores que a mdia. 19) Desenvolva um programa que leia um vetor unidimensional de 10 nmeros inteiro e exiba-o verticalmente, trocando os elementos entre si, dois a dois, ou seja, os de ndices par com os de ndice mpar. 20) Construa um programa que gere um vetor VI, que receba um nmero par de elementos e multiplique os mesmos devolvendo o array resultante. Por exemplo, o array de entrada com os valores {1, 23, 10, 5, 7, 11} resulta no array de sada {23, 50, 77}. 21) Dados dois vetores x e y, ambos com n elementos, determinar ambos, so exatamente iguais. 22) Dada uma seqncia de n termos que contenha os nmeros reais (0.0, 1.5, -1.7, 2.3 e 3.0) determinar os nmeros que compem a seqncia e o nmero de vezes que cada um deles ocorre na mesma. Exemplo: n = 8 Seqncia: [-1.7, 3.0, 0.0, 1.5, 0.0, -1.7, 2.3, -1.7] Sada: -1.7 ocorre 3 vezes 3.0 ocorre 1 vez 0.0 ocorre 2 vezes 1.5 ocorre 1 vez 2.3 ocorre 1 vez

34

Arrays Bidimensionais e Multidimensionais


Alm das matrizes simples de uma nica dimenso (vetores) , C++ permite a criao de matrizes de mltiplas dimenses. As matrizes bidimensionais so sem dvida as mais utilizadas e as mais teis, pois se comportam como tabelas com linhas e colunas. Ao declarar uma matriz multidimensional, adicionamos um conjunto de colchetes para cada dimenso extra. Entre os colchetes de cada dimenso, colocamos o nmero de elementos que aquela dimenso ter (ou uma varivel que represente o nmero de elementos). Assim: int tabela [10] [5]; //matriz bidimensional int horas [12] [30] [24]; //matriz de trs dimenses int minutos [12] [30] [24] [60]; //matriz de quatro dimenses E assim por diante... Normalmente trabalhamos no mximo com matrizes bidimensionais, mas podem surgir ocasies onde matrizes de mais de duas dimenses sejam necessrias. Matrizes multidimensionais funcionam como matrizes dentro de matrizes. Por exemplo, uma matriz bidimensional pode ser vista como uma matriz de uma dimenso cujos elementos so outra matrizes. Exemplo de Aplicao: 1) Elabore um programa que receba uma matriz 4x4 e informe ao usurio os elementos da diagonal secundria , depois ordene os mesmo de modo decrescente. Soluo: #include<iostream.h> #include<conio.h> main() {int vet [4][4],vet2[4],i,j,aux; int k=0; for (i=0;i<4;i++) {for (j=0;j<4;j++) {cout<<"Digite o elemento de linha "<<i+1<<" e coluna "<<j+1<<endl; cin>>vet [i][j];}} for (i=0;i<4;i++) {vet2[k]=vet[i][3-i]; k=k+1;} cout<<"Matriz:"<<endl; for (i=0;i<4;i++) {for (j=0;j<4;j++) {cout<<vet [i][j]<<" ";} cout<<" "<<endl;} cout<<"Diagonal secundaria"<<endl; for (k=0;k<4;k++) {cout<<vet2[k]<<" ";} cout<<" "<<endl; for (i=0;i<3;i++) {for (j=i;j<4;j++) {if (vet2[i]<vet2[j]) {aux=vet2[i]; 35

vet2[i]=vet2[j]; vet2[j]=aux;}}} cout<<"Diagonal secundaria ordenada de modo decrescente"<<endl; for (k=0;k<4;k++) {cout<<vet2[k]<<" ";} cout<<endl; getch(); return 0;} Observe que a matriz foi construda a partir das linhas (i), e para selecionar a diagonal secundaria para trabalharmos apenas com ela na ordenao da mesma, transportamos para um outro vetor (vet2) todos seus elementos. 2) Elabore um programa que leia uma matriz de ordem 4X5 e apresente ao usurio a matriz transposta. Soluo: #include<iostream.h> #include<conio.h> main() {int vet [5][5],i,j,aux, k=0; for (i=0;i<4;i++) {for (j=0;j<5;j++) {cout<<"Digite o elemento de linha "<<i+1<<" e coluna "<<j+1<<endl; cin>>vet[i][j];}} cout<<"Matriz:"<<endl; for (i=0;i<4;i++) {for (j=0;j<5;j++) {cout<<vet[i][j]<<" ";} cout<<" "<<endl;} cout<<"Matriz Transposta:"<<endl; for (j=0;j<5;j++) {for (i=0;i<4;i++) {cout<<vet[i][j]<<" ";} cout<<" "<<endl;} getch(); return 0;} 3) Elabore um programa que leia uma matriz inteira qualquer de ordem 3X3. Em seguida, o usurio escolhe um nmero qualquer e o programa lhe informa quantos elementos maiores ou iguais a esse nmero escolhido existe. Soluo:

36

#include<iostream.h> #include<conio.h> main() {int vet [3][3],i,j,n, cont=0; int k=0; for (i=0;i<3;i++) {for (j=0;j<3;j++) {cout<<"Digite o elemento de linha "<<i+1<<" e coluna "<<j+1<<endl; cin>>vet[i][j];}} cout<<"Matriz Lida:"<<endl; for (i=0;i<3;i++) {for (j=0;j<3;j++) {cout<<vet[i][j]<<" ";} cout<<" "<<endl;} cout<<"Entre com um valor para comparacao = "; cin>>n; for (i=0;i<3;i++) {for (j=0;j<3;j++) {if(vet[i][j]>=n) {cont=cont+1;}}} cout<<" "<<endl; cout<<"O numero de elementos maiores que "<<n<<" = "<<cont<<endl; getch(); return 0;} Matrizes multidimensionais A linguagem C++ permite tambm utilizar matriz de trs ou mais dimenses, porm no freqentemente usada, pois requer uma quantidade grande de memria e os acessos aos seus elementos so mais lentos. Por esses motivos este tipo de matrizes no sero abordados com detalhes. Declarao de matrizes multidimensionais: Tipo nome [tamanho1][tamanho2][tamanho3]....[tamanho n]. O exemplo abaixo mostra a declarao de uma matriz tridimensional. Preste ateno na presena das chaves e das vrgulas separando cada elemento diferente: int tritabela [2] [2] [2] = { {{ 9, 8}, {7,6}} , {{5, 4},{3, 2}} }; Cada elemento de uma matriz multidimensional pode ser acessado individualmente, indicando a posio exata do valor dentro da matriz. Como vimos anteriormente no caso das matrizes simples, a utilizao dos laos condicionais facilita o acesso aos vrios elementos de uma matriz. No caso das matrizes multidimensionais, utilizamos laos aninhados para acessar cada dimenso de uma vez.

37

Exemplo de Aplicao: 1) Elabore um programa que declara a matriz tridimensional que vimos anteriormente e utiliza uma sucesso de loops para exibir a matriz na tela. Soluo: #include <iostream> #include <conio.h> main() {int tritabela [2] [2] [2] = {{{ 9, 8}, {7,6}},{{5, 4},{3,2}}}; for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {for (int k = 0; k < 2; k++) {cout << tritabela[i][j][k]<<" ";} cout<< <<endl;} cout<< <<endl;} getch(); return 0;} Como a matriz possui 3 dimenses, foi necessrio utilizar trs estruturas for para conseguir realizar sua impresso corretamente. Se tivesse 4 dimenses, usaramos 4 estruturas for, e assim por diante.

Exerccios Propostos
01) Dada uma matriz M(5,5), transportar para um vetor D apenas os elementos da diagonal da matriz M, e para o vetor S os elementos da diagonal secundria. Imprimir a matriz e os vetores. 02) Elabore um algoritmo que leia dois vetores inteiros V1 e V2, de 8 elementos cada. Gerar uma matriz M por linha, tal que: Os elementos do vetor V1 devem formar as linhas mpares da matriz e elementos do vetor V2 devem formar as linhas pares da matriz. Imprimir os vetores e a matriz gerada. 03) Fazer um algoritmo que, dado n, imprime as n primeiras linhas do tringulo de Pascal. 1 1 1 1 1 1 . . M(I,J) = 1 SE I=J 1 3 6 10 1 4 10 M(I,J) = 1 SE J=1 1 5 1 M(I,J) = M(I-1,J-1) + M(I-1,J)

1 2 3 4 5

04) Dizemos que uma matriz quadrada inteira um quadrado mgico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundria so todas iguais. 38

Exemplo: A matriz um quadrado mgico.

8 0 7 4 5 6 3 10 2 Dada uma matriz quadrada Ann , verificar se A um quadrado mgico. 05) Dizemos que uma matriz inteira Ann uma matriz de permutao se em cada linha e em cada coluna houver n 1 elementos nulos e um nico elemento igual a 1. Exemplo: A matriz abaixo de permutao:

0 0 1 0
Observe que

1 0 0 0 1 0 0 0 0 0 0 1

2 1 0 1 2 0 0 0 1 no de permutao. 06) Dada uma matriz Ann , imprimir o nmero de linhas e o nmero de colunas nulas da matriz. Exemplo: m = 4 e n = 4 1 4 0 0 tem 2 linhas nulas e 1 coluna nula. 07) Faa um algoritmo na forma de fluxograma e de programa que leia duas matrizes e realize a soma entre elas. Ex: Considere matrizes A3x3 e B3x3 . Para realizar soma e subtrao de matrizes elas devem ter mesma dimenso. 08) Faa um algoritmo em forma de menu que, dadas duas matrizes A e B, oferea as seguintes opes: 1. Soma A+B 2. Transpostas de A e B 3. Produto elemento a elemento entre A e B (Ai,j)*B(i,j) 4. Produto matricial entre A e B (A*B) 5. Construir um vetor com os elementos pares e outro com os elementos impares da matriz A
39

0 0 0 0

2 5 0 0

3 6 0 0

6. Construir um vetor com os elementos primos da matriz B 7. Sair do programa 09) Construa uma matriz ALxC, onde os elementos A(i,j), i=1....L, j=1,....C, dado por A(i,j)=i+j 10) Crie um programa que leia uma matriz A. A partir de A crie uma matriz B idntica. Em seguida faa com que os elementos da primeira linha de B sejam o dobro dos elementos da primeira linha de A e os elementos da diagonal principal de B sejam todos nulos. Imprima A e B. 11) Faa um algoritmo em forma de menu que, dadas duas matrizes A e B, oferea as seguintes opes: A - Verificar se as matrizes A e B so simtricas A(i,j)=B(j,i) B Verificar se os elementos das diagonais das duas matrizes so iguais C Verificar quantos elementos nulos tem a matriz A D Verificar quantos elementos pares tem a matriz B E - Sair do programa 12) Dada uma tabela de 4 x 5 elementos, calcular a soma de cada linha e a soma de todos os elementos.
13) Uma certa fbrica produziu dois tipos de motores M1 e M2 nos meses de janeiro,..., dezembro.

Fazer um algoritmo na forma que, a partir da produo mensal dos motores M1 e M2 e seus respectivos custos e lucros, calcule o custo e o lucro em cada um dos meses e o custo e lucro anuais. 14) Os elementos aij de uma matriz inteira Anxn representam os custos de transporte da cidade i para a cidade j. Dados n itinerrios, cada um com k cidades, calcular o custo total para cada itinerrio. Exemplo: 4 5 2 7 1 2 3 2 1 40 1 3 8 1 2 5

O custo do itinerrio 1 4 2 4 4 3 2 1 : a14 + a42 + a24 + a44 + a43 + a32 + a21 = 3 + 1 + 40 + 5 + 2 + 1 + 5 = 57 15) Faa um procedimento que receba uma matriz A(5,5), por parmetro, e realize as seguintes trocas, na seguinte ordem: a) a linha 2 com a linha 5; b) a coluna 4 com a coluna 1; c) a diagonal principal com a secundria; d) a linha 5 com a coluna 5; 16) Faa um programa que receba, por parmetro, uma matriz A(4,4) e retorne o menor valor dos elementos acima da diagonal secundria.

40

Funes
Usando funes podemos estruturar nossos programas de uma maneira mais modular, usando todo o potencial que a programao estruturada do C++ pode nos oferecer. Uma funo um bloco de instrues que executado quando chamada de algum outro ponto do programa. Seu formato o seguinte: tipo nome ( argumento1, argumento2, ...) {contedo} No qual: tipo o tipo de dados que a funo retorna. nome o nome pelo qual ser possvel chamar a funo. argumentos (podem ser especificados quantos voc quiser). Cada argumento consiste em um tipo de dados seguido pelo seu identificador, como na declarao de uma varivel (por exemplo, int x) e que funciona dentro da funo como qualquer outra varivel. Eles permitem a passagem de parmetros para a funo quando chamada. Os parmetros diferentes so separados por vrgulas. contedo o corpo da funo. Pode ser uma nica instruo ou um bloco de instrues. No ltimo caso, precisa ser delimitado por chaves {}. Exemplo de funo: #include <iostream.h> #include <conio.h> int addition (int a, int b) {int r; r=a+b; return (r);} int main () {int z; z = addition (5,3); cout << "O resultado e " << z<endl; getch(); return 0;} Podemos ver como a funo main comea declarando a varivel z do tipo int. Logo depois disso, vemos uma chamada para a funo addition. Se prestarmos ateno, veremos a semelhana entre a estrutura da chamada da funo com a prpria declarao da funo nas linhas de cdigo acima:

41

Os parmetros tm uma correspondncia clara. Dentro da funo main chamamos a addition passando dois valores: 5 e 3 que correspondem aos parmetros int a e int b, declarados para a funo addition. No momento que a funo chamada em main, o controle passado para a funo addition. O valor de ambos os parmetros passados na chamada (5 e 3) so copiados nas variveis locais int a e int b dentro da funo. A funo addition declara uma nova varivel (int r;), e atravs da expresso r =a+b, atribuindo o resultado da expresso r. Devido ao fato dos parmetros passados para a e b serem 5 e 3 respectivamente, o resultado 8. A seguinte linha de cdigo: return (r); finaliza a funo addition, e devolve o controle para a funo main, continuando o programa do mesmo ponto que foi interrompido pela chamada a addition. Alm disso, return foi chamado com o contedo da varivel r (return (r);), que naquele momento era 8, ento esse foi o valor retornado pela funo.

O valor retornado por uma funo o valor dado para a funo quando avaliada. Sendo assim, z ir guardar o valor retornado por addition (5, 3), que 8. Para explicar isso de outra maneira, voc pode imaginar que a chamada para a funo (addition (5,3)) substituda literalmente pelo valor que retorna (8).

Escopo de variveis
Voc precisa considerar que o escopo de variveis declaradas dentro de uma funo ou qualquer outro bloco de instrues somente da prpria funo ou do prprio bloco de instrues e no podem ser usadas fora deles. Por exemplo, no exemplo anterior teria sido impossvel usar as variveis a, b ou r diretamente na funo main, main pois eram variveis locais da funo addition. addition E tambm teria sido impossvel usar a varivel z diretamente dentro da funo addition, addition pois era uma varivel local da funo main. main #include<iostream.h> #include<conio.h> char aCharacter; char nome [20]; int i; main() {float a,r; cout<<Digite um nmero<<endl; cin>>a; ... } Note que aCharacter e nome [20] so variveis globais e a e r so variveis locais 42

Sendo assim, o escopo de variveis locais limitado ao mesmo nvel de alinhamento no qual elas so declaradas. Mesmo assim podemos declarar variveis globais que so visveis em qualquer parte do cdigo, dentro ou fora de qualquer funo. Para declarar variveis globais, voc precisa faz-lo fora de qualquer funo ou bloco de instrues, ou seja, diretamente no corpo do programa. Exemplo de Aplicao: 1) Elabore um programa que calcule o dobro de um nmero inteiro informado pelo usurio na funo main(), o clculo deve ser realizador pela funo dobra(int x) e deve retornar o valor calculado e ser impresso na funo main(). Soluo: #include <iostream.h> #include <conio.h> int dobra(int x); int vi,resultado; int main() {cout<<"Digite um numero"<<endl; cin>>vi; resultado = dobra(vi); cout<<resultado<<endl; cin>>vi; getch();} int dobra(int x) {x=x*2; return x;} Observe que o exerccio, foi resolvido da forma como o anunciado pede, exigindo que o usurio informe o nmero na funo principal main(), e posteriormente, chama a funo dobra(int x) para dobrar o valor do nmero informado, e s depois de calculado, utilizamos com o comando: return x, enviando o valor encontrado para a funo main(). 2) Elabore um programa que calcule o fatorial de um nmero inteiro informado pelo usurio na funo main(), o clculo deve ser realizador pela funo fat(int x) e deve retornar o valor calculado e ser impresso na funo main(). Caso o nmero informado pelo usurio seja negativo, repetir o programa at que seja informado um nmero maior ou igual a zero. Soluo: #include <iostream.h> #include <conio.h> int fat(int x); int i,y,fatorial,resultado; int main() {int cont=1; while (cont==1) {cout<<"Digite um numero"<<endl; cin>>y; if (y<0) {cont=1;} 43

else {cont=0;} } resultado = fat(y); cout<<resultado<<endl; getch();} int fat(int x) {fatorial=1; for(i=1;i<=x;i++) {fatorial=fatorial*i;} return fatorial;} 3) Elabore um programa que identifique e informe ao usurio se o nmero par ou impar. A identificao e a impresso deve ser realizada na funo func(), j a funo main() tem apenas a funo de receber o nmero informado pelo usurio e transport-lo outra funo. Soluo: #include <iostream.h> #include <conio.h> char func (int x); int y; char n[10]; int main() {int cont=1; while (cont==1) {cout<<"Digite um numero"<<endl; cin>>y; if (y<0) {cont=1;} else {cont=0;}} fat(y); getch();} char func (int x) {if (x%2==0) {strcpy (n,"Par");} else {strcpy (n,"Impar");} cout<<O numero digitado <<n<<endl; } Observe que resolvemos o exerccio proposto da forma como o anunciado pede. Note que utilizamos o comando strcpy(x,Palavra), esse comando nos permite a atribuir os caracteres Palavra varivel x, como no caso descrito. Para realizar esse programa, devemos atribuir varivel x em sua declarao o nmero limite de caracteres que ela utilizar, exemplo x[10].

44

Exerccios Propostos
01) Faa um algoritmo que receba a massa e o volume de uma amostra qualquer, atribua os dados lidos a uma estrutura de dados Tamostra, passe essa estrutura como parmetro para uma subrotina chamada densidade() que calcule e retorne a densidade da amostra. 02) Faa um algoritmo que receba dois pontos cartesianos quaisquer, atribua os dados lidos a duas variveis do tipo Tponto, passe esses dois pontos para uma sub-rotina distancia() que retorne a distncia entre estes pontos. 03) Faa um algoritmo que receba os dados de um crculo, atribua os dados lidos a uma varivel do tipo Tcirculo, passe essa varivel a uma sub-rotina area() que retorne a rea do crculo. 04) Faa um algoritmo que receba os dados de um ponto e um crculo, atribua os dados lidos a uma varivel do tipo Tponto e outra do tipo Tcirculo, respectivamente, passe essas variveis a uma sub-rotina contido() que retorne verdadeiro se o ponto estiver contido no crculo. 05) Elabore um algoritmo que utilizando sub-rotina, calcula a mdia aritmtica de 3 provas de um aluno e retorna ao programa principal, se o aluno foi ou no aprovado (aprovado quando nota for superior ou igual a 5,0). 06) Faa uma funo que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias. Desconsidere a existncia de anos bissextos. 07) Faa uma funo que recebe por parmetro o tempo de durao de uma fbrica expressa em segundos e retorna tambm por parmetro esse tempo em horas, minutos e segundos. 08) Faa um procedimento que recebe por parmetro os valores necessrios para o clculo da frmula de baskara e retorna, tambm por parmetro, as suas razes, caso seja possvel calcular. 09) Faa uma funo que recebe por parmetro um valor inteiro e positivo e retorna o valor lgico Verdadeiro caso o valor seja primo e Falso em caso contrrio. 10) Faa uma funo que recebe por parmetro o raio de uma esfera e calcula o seu volume (v = 4/3..R3). 11) Faa uma funo que recebe um valor inteiro e verifica se o valor par ou mpar. A funo deve retornar um valor lgico. 12) Faa uma funo que leia um nmero no determinado de valores positivos e retorna a mdia aritmtica dos mesmos. 13) Faa uma funo que receba um valor inteiro e positivo e calcula o seu fatorial. 14) Faa um procedimento que l 10 valores inteiros e retorna o maior e o menor deles. 15) Faa uma funo que recebe, por parmetro, um valor inteiro e positivo e retorna o nmero de divisores desse valor.

45

Exerccios de Reviso
01) Construa um algoritmo para entrar com um nmero de 1 a 10 e imprimi-lo o nmero de vezes correspondente ao seu valor. 02) Desenvolva um algoritmo que calcule as razes de uma equao do segundo grau. Utilize o mtodo de Baskara, fornecendo ao algoritmo os coeficientes A,B e C. 03) Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer no plano P(x1,y1) e Q(x2,y2), calcule a distancia entre eles. 04) Construa um algoritmo que calcule a quantidade de litros do combustvel gastos em uma viagem utilizando-se um automvel que faz 12 km/L. Para realizar esse clculo, o usurio dever fornecer o tempo gasto da viagem e a velocidade mdia durante a mesma.O algoritmo dever apresentar como resultado os valores da velocidade mdia, tempo gasto na viagem, distncia percorrida e a quantidade de litros utilizada na viagem. 05) Especifique um algoritmo para uma sub-rotina que receba como parmetro um valor real qualquer, calcule o valor da F(x) = -x3 +8, para o parmetro recebido, e retorne o valor calculado. 06) Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para N valores igualmente espaados entre Xinicial at Xfinal. 07) Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para valores entre Xinicial e Xfinal. ,com intervalo definido pelo usurio. 08) Faa um algoritmo para uma sub-rotina que receba trs nmeros quaisquer e retorne o maior deles. 09) Desenvolva um algoritmo que receba uma quantidade indefinida de notas e apresente as informaes a seguir no final da seqncia de notas. O algoritmo dever encerrar a seqncia de leitura quanto identificar que valor recebido no uma nota invlida (valor negativo ou maior que 10) i. Quantidade de notas da seqncia; ii. Mdia aritmtica de todas as notas da seqncia; iii. Maior nota da seqncia; iv. Menor nota da seqncia; v. Percentual de notas maiores ou iguais a 5; vi. Percentual de notas inferiores a 5; 10) Refaa o algoritmo anterior para uma quantidade definida de notas, previamente informada pelo usurio. 11) Escreva um algoritmo, utilizando sub-rotina, que retorne funo principal, o volume de um cilindro, dado o raio e altura do mesmo. 12) Escreva um algoritmo que leia dois nmeros reais e um caractere, que represente a operao a ser realizada (+, -, * e /). O algoritmo deve apresentar o resultado final da operao, ou 46

uma mensagem de erro para o caso da diviso de um nmero por zero, ou uma mensagem de erro caso no seja escolhida uma das quatro operaes aritmticas bsicas. 13) Escrever um algoritmo que l um conjunto no determinado de valores, um de cada vez, e escreve uma tabela com cabealho, que deve ser repetido a cada 20 linhas. A tabela conter o valor lido, seu quadrado, seu cubo e sua raiz quadrada. 14) Escrever um algoritmo que l um nmero no determinado de valores para m, todos inteiros e positivos, um de cada vez. Se m for par, verificar quantos divisores possui e escrever esta informao. Se m for mpar e menor do que 10 calcular e escrever o fatorial de m. Se m for mpar e maior ou igual a 10 calcular e escrever a soma dos inteiros de 1 at m. 15) Faa um algoritmo que leia uma quantidade no determinada de nmeros positivos. Calcule a quantidade de nmeros pares e mpares, a mdia de valores pares e a mdia geral dos nmeros lidos. O nmero que encerrar a leitura ser zero. 16) Faa um algoritmo que leia vrios nmeros inteiros e positivos e calcule a somatria dos nmeros pares. O fim da leitura ser indicado pelo nmero 0. 17) Escrever um algoritmo que leia um nmero N que indica quantos valores devem ser lidos a seguir. Para cada nmero lido, mostre uma tabela contendo o valor lido e a metade deste valor. 18) Crie um programa que leia um nmero entre 2 e 20 e gere uma tela com a seguinte configurao: Exemplo: Digite um nmero: 4 Sada do programa: 1 12 123 1234 123 12 1 19) Elabore um programa que dada a idade de um nadador classifica-o em uma das seguintes categorias: infantil A = 5 - 7 anos infantil B = 8-10 anos juvenil A = 11-13 anos juvenil B = 14-17 anos adultos = maiores de 18 anos 20) Dados trs nmeros naturais, em qualquer seqncia, verificar se eles formam os lados de um tringulo retngulo. 21) Construa um algoritmo que receba um nmero N inteiro e calcule o fatorial de (2N-1). 22) Considerando o ndice de massa corporal humana (IMC) dado pela razo do peso ( P ), em quilogramas, pela estatura ( E ) ao quadrado, em metros quadrados. Apresente um algoritmo

47

que solicite ao usurio os dados necessrios, e com no mximo 5 estruturas de condio, apresente ao usurio sua classificao, de acordo com a tabela a seguir: IMC At 14,5 Acima de 14,5 at 20 Acima de 20 at 25 Acima de 25 at 30 Acima de 30 at 40 Acima de 40 Classificao Desnutrio Abaixo do peso Peso Normal Sobrepeso Obeso Obeso Mrbido

23) Crie um programa que exiba um menu na tela e que permita ao usurio a escolha de uma opo. Imprima uma mensagem dizendo qual foi a opo selecionada. Exemplo de Menu: 1 - Gravar 2 - Carregar 3 - Apagar 4 - Inserir 5 - Fim 24) Construa um algoritmo para uma sub-rotina que receba como parmetro a posio de um elemento da seqncia de Fibonacci e retorne o elemento da seqncia correspondente posio. 25) Faa um algoritmo para uma sub-rotina que receba um nmero N inteiro, calcule e retorne N! , se N for 0, enviar ao usurio uma mensagem que pela definio, o fatorial de 0 vale 1. 26) Faa um algoritmo que leia uma matriz A(4x4). A partir de A obtenha uma matriz B de modo que: primeira coluna de B: elementos so o seno dos elementos de A; segunda coluna de B: elementos so os co-senos dos elementos de A; terceira coluna de B: elementos so as razes dos elementos de A; quarta coluna de B: elementos so o fatorial dos elementos de A. Imprima A e B. 27) Faa um programa que leia duas matrizes e realize a soma entre elas, passando primeira mente a um teste se suas dimenses so compatveis para realizar tal operao. 28) Apresente um algoritmo que receba uma seqncia de 9 valores, atribua-os a um vetor e imprima-os na seqncia contrria da que foi recebida. 29) Considere algoritmo em forma de programa que l uma seqncia de nmeros inteiros positivos, de no mximo 100 elementos. O algoritmo constri e imprime quatro vetores: a) um vetor V constitudo dos elementos lidos. b) um vetor Q que armazena o quadrado dos elementos lidos c) um vetor R que armazena a raiz quadrada dos elementos lidos d) um vetor D que armazena o resto da diviso dos elementos lidos por 2 30) Faa um pseudocdigo, um fluxograma e um programa Fortran que leia um Nmero (N) de nomes de pessoas e suas respectivas idades e guarde esses dados em dois vetores distintos. Imprima o nome e a idade de cada pessoa na mesma linha. Em seguida escolha um nmero (ndice do vetor) e imprima o nome e a idade da pessoa correspondente a este nmero. 48

31) Dado um vetor V de n elementos, com n>10 e n impar, imprimir o vetor comeando do termo v[0] at o Vmdio. Exemplo: Caso V tenha 13 elementos, devemos imprimir os termos de 0 a 7 32) Desenvolva um programa que leia uma matriz de 4x4 de elementos inteiros. Depois percorra e mostre em forma de matriz. Depois percorra e some o elementos da diagonal principal 33) Desenvolva um programa que leia (preencha) uma matriz 5X6. Mostre todos os elementos. Leia um nmero. Mostre, agora, quais so os elementos da matriz que so mltiplos deste nmero lido. 34) Faa um algoritmo que receba, uma matriz A(4,5)e retorne o menor valor dos elementos abaixo da diagonal secundria. 35) Faa um algoritmo que receba uma matriz B(5,5) de reais e retorna a soma dos elementos das linhas pares de B 36) Faa uma funo que recebe uma matriz A(4,4) e retorna a soma dos elementos da linha 4 e da coluna 3. 37) Faa uma funo que recebe uma matriz A(5,5) e retorna a soma dos seus elementos, exceto seu elemento central A(3,3). 38) Faa um programa que receba, por parmetro, uma matriz A(3,3) e retorna, tambm por parmetro, um vetor com a soma de cada uma das linhas de A . 39) Faa um programa que receba uma matriz A(4,4) e multiplica cada linha pelo elemento da diagonal principal daquela linha. O procedimento deve retornar a matriz alterada. 40) Na teoria dos sistemas, define-se como elemento minimax de uma matriz o menor elemento de uma linha onde se encontra o maior elemento da matriz. Faa uma funo que recebe, por parmetro, uma matriz A(3,3) e retorna o seu elemento minimax, juntamente com a sua posio. 41) Faa um programa que receba um vetor A (15) de inteiros e retorna esse mesmo vetor compactado, ou seja, sem os seus valores nulos (zero) e negativos. 42) Escreva uma funo que recebe, por parmetro, dois valores X e Z e calcula e retorna Xz . (sem utilizar funes ou operadores de potncia prontos) 43) Faa um procedimento que recebe, por parmetro, um valor N e calcula e escreve a tabuada de 1 at N. Mostre a tabuada na forma: 1xN=N 2 x N = 2N ... N x N = N2

49

Referncias Bibliogrficas
http://www.gsmfans.com.br/index.php?topic=67407.0 http://pt.wikipedia.org/wiki/C%2B%2B Lista de exerccio Prof. Alexandre Ribeiro FEIS Lista de exerccio Prof. Anirio Salles Filho FEIS Lista de exerccio Profa. Erica Regina Marani Daruichi Machado FEIS Apostila: Introduo Cincia da Computao e Teoria e Desenvolvimento de Algoritmos, Profa. Erica M. Daruichi Machado FEIS Curso Bsico de Lgica de Programao, Unicamp - Centro de Computao DSC, Autor: Paulo Srgio de Moraes http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html http://www.linhadecodigo.com.br/Artigo.aspx?id=1114 http://www.vivaolinux.com.br/artigo/Substituindo-a-biblioteca-conio.h-no-Linux-usando-ncursescurses.h/ http://allanlima.wordpress.com/ http://pt.wikipedia.org/wiki/C_(linguagem_de_programao) http://www.apostilando.com/download.php?cod=3149&categoria=C%20e%20C++ http://pt.wikibooks.org/wiki/Programar_em_C%2B%2B http://www.tiexpert.net/programacao http://pt.wikibooks.org/wiki/Programar_em_C/Vetores http://pt.wikipedia.org/wiki/C%2B%2B TORRES, Jair Gustavo M. Curso de Linguagem C Ilha Solteira: Faculdade de Engenharia de Ilha Solteira FEIS UNESP Departamento de Engenharia Eltrica, 2006. PRATA, Stephen C++ Primer Plus, 4 edio Nova York: Sams Publishing. 2001. STROUSTRUP , Bjarne - The C++ Programming Language, 3 edio New Jersey: Addison Wesley. 1997. LIPPMAN, Stanley B.; LAJOIE, Jose Lajoie; MOO, Barbara E. C++ Primer, 4 edio New Jersey: Addison-Wesley. 2005.

50

You might also like