You are on page 1of 42

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 02 03 04 05 08 11 12 13 14 15 16 21 30

Referncias Bibliogrficas

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 6

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; 9

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 10

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

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 11

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.

Operadores

12

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 && || ! Operadores Lgicos Bit a Bit 13 Ao AND OR NOT 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)

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.

O comando Include e as Bibliotecas


14

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>

Biblioteca <Math.h>
15

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,7182818284590452354 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.

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 16

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;} else if (condio 2) {declarao 2} else if (condio 3) {declarao 3} 17

... 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.

Exemplos de Aplicao 1) Dados dois nmeros reais quaisquer, desenvolva um programa que diga se eles so iguais ou diferentes. Soluo: 18

#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; cout<<"digite o numero"<<endl; cin>>n; if (n%2==0) { if (n==0) 19

{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.

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 20

f (x)

x +5 se - x3 +8 se

4 x <5 x 5

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

f (x)

2x se x +10 se - x 5 se

x7 5 x < 7 x <-5

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:

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. 21

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.

Exemplos de Aplicao 1) Elabore um programa que calcule o fatorial de um nmero dado. Soluo: #include<iostream.h> 22

#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(); }

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. 23

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. 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, ... 24

#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. Soluo: #include <iostream.h> #include<conio.h> main() 25

{ 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. 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, ... 26

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.

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.

27

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; case 2: c=a-b; cout <<a<<" - "<<b<<" = "<<c<<endl; break; case 3: 28

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; a=1; break; default: cout <<"Opo invalida"<<endl; a=1; 29

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

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. 30

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.

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. 31

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: 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();} No cdigo acima criamos um vetor de tamanho 5 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.

Exerccios Propostos
32

1) Elabore um algoritmo para ler uma sequncia de 20 valores inteiros positivos e armazen-los em um vetor VET. Imprimir o vetor. 2) Dado um vetor, comparar todos os seus elementos um a um e ordena-los em ordem crescente e decrescente. 3) 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 4) 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. 5) 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.

6)
A(N)

Construa um contador N que varie de 1 a 10 e construa um vetor A(N)=N2. Imprima N e

7) 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. 8) 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 9) 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 33

menor nota. Imprima uma lista com o nome dos alunos e a nota na ordem decrescente de notas juntamente com seus respectivos nomes. 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

Exerccios Propostos
35

1) 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. 2) 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. 3) 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

4) 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. Exemplo: A matriz

8 0 7 4 5 6 3 10 2 um quadrado mgico. Dada uma matriz quadrada Ann , verificar se A um quadrado mgico. 5) 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 2 1 1 2 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1

no de permutao. 36

6) 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. 7) 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. 8) 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 6. Construir um vetor com os elementos primos da matriz B 7. Sair do programa 9) 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. 37 0 2 3 0 5 6 0 0 0 0 0 0

Exemplo: 4 5 2 7 1 2 1 1 2 1 3 2 3 40 8 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

Sub-rotina
1) 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. 2) 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. 3) 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 rea() que retorne a rea do crculo. 4) 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. 5) 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).

Exerccios de reviso
38

1) Construa um algoritmo para entrar com um nmero de 1 a 10 e imprimi-lo o nmero de vezes correspondente ao seu valor., 2) 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. 3) 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. 4) 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. 5) 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. 6) Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para N valores igualmente espaados entre Xinicial at Xfinal. 7) 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. 8) Faa um algoritmo para uma sub-rotina que receba trs nmeros quaisquer e retorne o maior deles. 9) 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 vlida (valor negativo ou maior que 10) i. ii. iii. iv. v. vi. Quantidade de notas da seqncia; Mdia aritmtica de todas as notas da seqncia; Maior nota da seqncia; Menor nota da seqncia; Percentual de notas maiores ou iguais a 5; 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 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. 39

13) 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 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

14) Dados trs nmeros naturais, em qualquer seqncia, verificar se eles formam os lados de um tringulo retngulo. 15) Construa um algoritmo que receba um nmero N inteiro e calcule o fatorial de (2N-1). 16) 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. 17) 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. 18) 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. 19) 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. 20) 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. 21) 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 22) 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.

40

23) 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 24) 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 25) 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. 26)

41

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

42

You might also like