Apostila C++ Básico

download Apostila C++ Básico

of 42

Transcript of Apostila C++ Básico

  • Departamento de Matemtica

    Introduo Cincia da ComputaoCurso de C++ Bsico

    Discente: Leonardo Ito PerilloCurso: Engenharia Eltrica

    Orientador: Prof. Dr. Anirio Salles Filho

    Ilha Solteira, 30 de Julho de 2010.

    UNIVERSIDADE ESTADUAL PAULISTAJLIO DE MESQUITA FILHO

    FACULDADE DE ENGENHARIADE ILHA SOLTEIRA

  • SumrioUma Breve Histria do C++ 02Introduo Lgica de Programao 03Compiladores 04Tipos de Variveis 05Alguns Comandos Bsicos 08Comentrios no Programa 11Operadores 12Constante e Variveis 13O comando Include e as Bibliotecas 14Biblioteca 15Controle de Fluxo de Execuo - Deciso 16Controle de Fluxo de Execuo - Repetio 21Arrays Unidimensionais Vetores 30

    Referncias Bibliogrficas

    2

  • Uma breve histria do C++

    O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs, durante a dcada de1980 com o objectivo implementar uma verso distribuda do ncleoUnix. Como o Unix era escritoem C, dever-se-ia manter a compatibilidade, ainda que adicionando novos recursos. Alguns dosdesafios incluam simular a infraestrutura da comunicao entre processos num sistema distribudo oude memria compartilhada e escrever drivers para tal sistema. Stroustrup percebeu que alinguagem Simula possua caractersticas bastante teis para o desenvolvimento de software, mas queera muito lenta para uso prtico. Por outro lado, a linguagem BCPL era rpida, mas possuademasiado baixo nvel, dificultando sua utilizao no desenvolvimento de aplicaes. A partir de suaexperincia de doutorado, comeou a acrescentar elementos do Simula no C.

    O C foi escolhido como base de desenvolvimento da nova linguagem pois possua uma propostade uso genrico, era rpido e tambm portvel para diversas plataformas. Algumas outras linguagensque tambm serviram de inspirao para o cientista da computao foram ALGOL68, Ada, CLU e ML.

    Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++. Antesimplementada usando um pr-processador, a linguagem passou a exigir um compilador prprio, escritopelo prprio Stroustrup. Novas caractersticas foram adicionadas, como funes virtuais, sobrecargade operadores e funes, melhorias na verificao de tipo de dado e estilo de comentrio de cdigo deuma 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. Aprimeira verso comercial foi lanada em outubro do mesmo ano. Em 1989 a segunda verso foilanada, 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 aC. Criada primordialmente na HP por Alexander Stepanov no incio da dcada de 1990 para exploraros potenciais da programao genrica, a STL foi apresentada a um comitunificado ANSI e ISO em 1993 convite de Andrew Koenig. Aps uma proposta formal na reunio doano seguinte, a biblioteca recebe o aval do comit.

    Pode-se dizer que C++ foi a nica linguagem entre tantas outras que obteve sucesso como umasucessora linguagem C, inclusive servindo de inspirao para outras linguagens como Java,a IDL de CORBA e C#.

    3

  • Introduo Lgica de Programao

    A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimentode 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 serseguidas 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 definidaspara a realizao ou emprego de algo.

    Em informtica, porm, instruo a informao que indica a um computador uma aoelementar a executar.Convm ressaltar que uma ordem isolada no permite realizar o processocompleto, 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 umasrie 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 podedescascar as batatas depois de frit-las.

    Dessa maneira, uma instruo tomada em separado no tem muito sentido para obtermos oresultado, 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.

    4

  • CompiladoresUm 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, umcompilador no produz diretamente o cdigo de mquina, mas sim um programa em linguagemsimblica (assembly) semanticamente equivalente ao programa em linguagem de alto nvel. Oprograma em linguagem simblica ento traduzido para o programa em linguagem de mquinaatravs de montadores. Para desempenhar suas tarefas, um compilador deve executar dois tipos de atividade. Aprimeira atividade a anlise do cdigo fonte, onde a estrutura e significado do programa de alto nvelso 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 oseguinte trecho de um programa em C:

    main(){ int a, b, valor;a=10; b=20;Valor = a*(b+20);cout

  • Tipos de Variveis

    Quando definimos uma varivel em C++, precisamos informar ao compilador o tipo davarivel: um nmero inteiro, um nmero de ponto flutuante, um caractere, e assim por diante. Essainformao diz ao compilador quanto espao deve ser reservado na memria para a varivel, e o tipo devalor que ser armazenado nela.

    As variveis mais utilizadas, em um curso de C++ bsico so:

    IntO 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/ouarquitetura do processador):int, pode possuir 16 bits, 32 bits ou 64 bitsshort 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 #include main(){int idade;cout

  • DoubleO 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 #include main(){double a;a=5/3;cout

  • StructEm 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 #include 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 umavarivel do tipo struct x, onde x o nome da estrutura, para se acessar os diversos elementos deve-sefazer x.elemento.

    Alguns Comandos Bsicos

    8

  • Em C++, a separao entre instrues especificada com um ponto-e-vrgula (no final de cadainstruo). A diviso do cdigo em linhas diferentes serve somente para torn-lo mais legvel eesquemtico para seres humanos.

    #include

    Comandos que comeam com um sinal de numerao (#) so diretivas do pr-processador. Elas no so linhas de cdigo executveis, mas indicaes para o compilador.Nesse caso, o comando #include diz ao pr-processador do compilador paraincluir o arquivo de cabealho padro iostream. Esse arquivo especfico inclui as declaraes dabiblioteca bsica de entrada-sada do C++, e est sendo usado porque suas funcionalidadessero usadas mais tarde nesse programa.

    #include

    Esta biblioteca tem a finalidade de receber dados do teclado,ou outros dispositivos deentrada, alm de tambm exibir dados na sada padro. Quando utilizamos a biblioteca#include, temos a possibilidade de executar as funes getch() para ler as entradasdo teclado e kbhit() para testar se h buffers de teclado a serem lidos. muito til, e eu diriaat indispensvel o uso desta biblioteca para a programao.

    main()

    Essa linha corresponde ao incio da declarao da funo main. A funo main oponto pelo qual todos os programas em C++ iniciam a execuo. No faz diferena se estiver noincio, no fim, ou no meio do cdigo seu contedo sempre o primeiro a ser executadoquando um programa inicia. Alm disso, pelo mesmo motivo, obrigatrio que todos osprogramas em C++ tenham uma funo main. Depois de main h um par de parnteses () porque uma funo. Em C++ todas asfunes so seguidas por um par de parnteses () que, opcionalmente, podem incluir argumentodentro deles. O contedo da funo main segue imediatamente aps sua declarao formal e coberto entre chaves ({}), como em nosso exemplo.

    cout

  • O trabalho com a entrada padro no C++ feito aplicando-se o operador sobrecarregadode extrao (>>) no comando cin. Isso precisa ser seguido pela varivel que ir guardar o dadoque ser lido

    Declarando a varivel como desejada, ento espera por uma entrada do cin (teclado) paraque 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 forpressionada. Sendo assim, mesmo que voc pea um nico caractere, o cin no ir processar aentrada 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 ovalor extrado pelo cin. Se voc pedir um inteiro, voc receber um inteiro, se voc pedir umcaractere, voc receber um caractere, e se voc pedir uma string de caracteres, voc receberuma string de caracteres.

    return;

    A instruo return faz com que a funo main() termine e retorne o cdigo que segue ainstruo, nesse caso o 0. Essa a maneira mais comum de terminar um programa que noencontrou nenhum erro durante sua execuo. Como voc ver em exemplos seguintes, todos osprogramas 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 calculesua densidade.

    Soluo:

    #include#includefloat massa, vol, den;main{cout

  • pr-processador do compilador (aquelas iniciadas por #), tambm haviam linhas que iniciavam adeclarao de uma funo (nesse caso, a funo main) e, finalmente linhas com instrues (como achamada cout
  • 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 (//) achadoat o final daquela mesma linha. O segundo deles, o comentrio de bloco, descarta tudo entre oscaracteres /* e a prxima apario dos caracteres */, com a possibilidade de incluir diversas linhas. Ns iremos adicionar comentrios ao nosso segundo programa:

    /* programa paraanalisar o valor de entrada*/

    #include #include main ()int valor;{ cout >valor;if (valor >=100){cout

  • necessrio para programar, ter conhecimento de constantes e operadores, e seu respectivosignificado, praticamente todos os programas fazem uso deles. So indispensveis para a criao deprogramas de forma rpida e mais eficiente.

    Constantes de Barra Invertida

    Cdigo Significado\b Retrocesso (backspace)\f Alimentao de Formulrio (form feed)\t Tabulao Horizontal (tab)\n Nova Linha\ Aspas\ Apostrofo\0 Nulo\\ Barra Invertida\a Sinal Sonoro (Beep)\N Constante Octal (N o valor da constante)

    \xN Constante Hexadecimal (N o valor da constante)

    Operadores Aritmticos

    Operador Ao+ Soma- Subtrao ou troca de sinal* Multiplicao/ Diviso

    % Resto da diviso inteira++ Incremento-- Decremento

    Operadores Relacionais

    Operador Ao> Maior que

    >= Maior que ou igual a< Menor que

  • Operador Ao& AND Lgico| OR Lgico^ XOR (OR exclusivo)~ NOT

    >> Shift Rigth

  • 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 afuno j est pronta dentro da biblioteca, basta importar tal biblioteca e utilizar a funo quequeremos.

    Por exemplo, se quisssemos mostrar uma mensagem na tela, voc no tem que produzir umafuno inteira ou criar um comando novo, basta importar a biblioteca , que possui afinalidade de I/O (entrada e sada) de dandos. Quando o programa for compilado, o compilador irbuscar 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 necessriospara ser criado o arquivo executvel.

    O pr-processamento indicado pelo caractere sharp (#) no inicio da linha e deve ser usado naimportao de bibliotecas ao programa que ser desenvolvido. A importao de uma biblioteca dadapelo comando #include (incluir) seguido da biblioteca entre os sinais de menor ().

    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 using namespace std;

    As bibliotecas de C so diferentes das bibliotecas de C++. Apesar de muitos compiladores deC++ suportarem as bibliotecas de C, nenhum compilador exclusivamente de C suporta bibliotecas deC++.

    Algumas bibliotecas do C++

    Biblioteca

    15

  • Existem vrios processos em um algoritmo que podemos simplesmente determinar comooperaes matemticas ou clculos sendo executados pelo nosso programa.

    Levando para a questo realmente matemtica, em C++ existe uma biblioteca prpria paraclculos matemticos um pouco mais complexos, a biblioteca ao qual nos referimos a

    Com a biblioteca podemos encontrar facilmente funes para calcular potncias, razquadrada, funes trigonomtricas para clculos que envolvem seno, co-seno e tangente, alm deconstantes para nmeros irracionais como, por exemplo, PI () e 2.

    Simbologia O que Valor da constante no C++e Nmero de Euler 2,7182818284590452354

    log2 e Logaritmo de e na base 2 1,4426950408889634074log10 e Logaritmo de e na base 10 0,43429448190325182765Ln2 (x) Logaritmo neperiano binrio 0,69314718055994530942

    Ln10 (x) Logaritmo neperiano ou natural 2,30258509299404568402 Pi 3,14159265358979323846/2 Meio Pi 1,57079632679489661923/4 Quarto de Pi 0,785398163397448309622 Raiz quadrada de 2 1,41421356237309504880 Raiz quadrada de meio 0,70710678118654752440

    Como podemos ver, todas as constantes so valores do tipo double. E isso se reflete nasfunes.

    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, oprimeiro 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 araiz.

    Controle de Fluxo de Execuo DecisoOs 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, porconsequncia, decidem como o programa deve se comportar em determinadas situaes. Examinemosos mtodos bsicos e analisemos de forma simples as estruturas de deciso, para entender como issopoder 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 tornadiferente 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 caminhosdiferentes de acordo com decises que o prprio programa toma. Para isso, precisamos de umaestrutura seletiva da qual o nico valor possvel o bit 1 ou 0, resumindo: retornar o valorVERDADEIRO ou FALSO.

    Em C / C++, como em muitas linguagens de programao, quem faz isso o if, ou seja, se fortal 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 2condies 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#includemain(){float a;cout

  • #include#includemain(){float a,b;cout
  • {cout
  • f (x) x +5 se 4 x
  • 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 deincremento ou decremento. Ou seja, o for precisa de trs condies. Vale salientar que essas condiesso 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 informaao programa a base e o expoente. O programa deve fazer o nmero de interaes iguais o nmero x doexpoente. Considerando o nmero do expoente natural, positivo e maior que zero, temos o seguinteprograma:

    #include#includemain(){int x,y;cout

  • #includemain(){int n;cout
  • Traduzindo para a lngua portuguesa, While significa enquanto, ou seja, enquanto a condiofor 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 primeirotermo 3 e a razo 5. Parar o processamento quando for impresso um termo maior que 100.

    #include#includemain(){int a=3;cout

  • #include#includemain(){int n=5;int r=5;while (n
  • {int k,n;cout
  • 5) Elabore um algoritmo que imprima os termos da serie abaixo. Parar o processamento quandofor 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. Odinheiro 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 algoritmopara ler esses nmeros e imprimir:a) todos os valores cuja parte decimal for maior a 0,8b) 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 equal 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 dosvalores absolutos destes nmeros. Fornecer a opo de repetir a leitura do nmero com (0) parasim 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 primoF- Determinar o quadrado do valor absoluto de um nmeroG- Determinar se um nmero perfeitoH - 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 primeirosdgitos, 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 leituradeve ser repetida at que seja digitado um nmero correto. Como critrio de parada utilize umaentrada nula.

    12) Faa um algoritmo que leia dois nmeros k e n e imprima os nmeros k, k+1, ... ,n ,at que kseja maior que n.

    Switch / Case

    Uma outra forma de estrutura seletiva o switch. Dentro dos switch h o case (que significacaso). 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 fazeruma comparao. Isso limita o case a apenas valores definidos.

    Segunda diferena: O switch executa seu bloco em cascata. Ou seja, se a varivel indicar parao primeiro case e dentro do switch tiver 5 cases, o switch executar todos os outros 4 cases a no serque 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 seravaliado pelo case. Ento, abre-se o bloco de dados. Dentro do bloco de dados colocamos o comandocase e logo aps um valor terminando a linha com dois pontos (:). Preste ateno no tipo de v arivelque 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 #include main (){int a, b, c, operacao;cout a;cout b;cout

  • c=a*b;cout
  • break;}}getch();}

    Como podemos ver, h dois casos: S para reiniciar ou N para sair. Se por acaso algum digitaralgo diferente disso, executa-se o default, que informa que a opo escolhida invalida e repete apergunta se o usurio deseja sair do programa, at que seja digitada uma opo valida (S ou N). Comoa linguagem C/C++ case sensitive (diferencia maisculas de minsculas) usamos uma funo paradeixar a letra maiscula (toupper da biblioteca ctype). Agora, no importa o que o usurio digitar, poiso 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. Seele 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 - Incluso2 - Excluso3 - Alterao4 - Consulta5 - RelatrioOutros - Opo Invlida

    3) Implemente a calculadora maluca, utilizando uma instruo switch-case para determinar aoperao 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 umcdigo de aumento, segundo a tabela:

    Cdigo Aumento (%)A 10B 25C 30D 50E 60

    Arrays Unidimensionais Vetores

    Vetores, tambm chamados arrays (ingls), so uma maneira de armazenar vrios dados nummesmo 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 vetorpara guardar todos os 20 nmeros de uma vez.

    Declaramos vetores de maneira muito semelhante declarao de variveis normais. A nicadiferena 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 fordeclarado.

    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 nmerosinteiros.Agora, para acessarmos um local especfico dessa memria devemos indicar entre colchetes aposio desejada no vetor que chamamos de index.

    O importante mesmo saber que no importa o tamanho do vetor, o index (nmero que indica aposio) sempre comea em 0. Portanto, um vetor de tamanho 20 vai da posio 0 a 19, um vetor detamanho 180 vai da posio 0 a 179, um vetor de tamanho 4 vai da posio 0 a 3. , portanto, se onmero 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. Usandoo exemplo: vetor de tamanho 4, posio mxima 3 (pois 4-1=3). Ento, se atribuirmos um valor aposio 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 quefoi digitado e na ordem crescente.Soluo:

    #include#includemain(){int vet[10],aux ,i, k; for (i=0;i

  • 1) Elabore um algoritmo para ler uma sequncia de 20 valores inteiros positivos e armazen-losem um vetor VET. Imprimir o vetor.

    2) Dado um vetor, comparar todos os seus elementos um a um e ordena-los em ordem crescente edecrescente.

    3) Elabore um algoritmo para ler um vetor VET de 20 valores inteiros positivos e gerar dois outrosvetores VP e VI onde: VP conter apenas os valores pares de VET, e VI conter apenas osvalores mpares. Imprimir VET, VP e VI

    4) Elabore um algoritmo para armazenar em um vetor KV todos os valores inteiros positivosdesde 1 at 50. Transportar todos os elementos primos do vetor KV para um vetor PV. Imprimiros dois vetores.

    5) Elabore um algoritmo para ler um vetor V de 20 valores inteiros positivos, calcular e imprimir ofatorial de todos os elementos pares do vetor, e calcular e imprimir a potncia de 5 de todos osvalores mpares do vetor.

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

    7) Apresente um algoritmo que receba uma seqncia de 9 valores, atribua-os a um vetor eimprima-os na seqncia contrria da que foi recebida.

    8) Construa um programa que leia um Nmero (N) de nomes de pessoas e suas respectivas idadese guarde esses dados em dois vetores distintos. Imprima o nome e a idade de cada pessoa namesma linha. Em seguida escolha um nmero (ndice do vetor) e imprima o nome e a idade dapessoa 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. Seexistirem, escrever as posies em que esto armazenados.

    11) Elabore e implemente um algoritmo que faa um cadastro de materiais de construo. Os itensdevem ser lidos e armazenados. Para cada item deve ser associado o nome do produto, umcdigo e a quantidade existente em estoque. Depois escolha um cdigo e imprima o nome doitem 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. Aprova 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 seunmero 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 alunosque 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 notasjuntamente com seus respectivos nomes.

    14) A FEIS deseja saber se existem alunos cursando, simultaneamente, as disciplinas ICC e clculonumrico. Existem disponveis na unidade de entrada os nmeros de matrcula de ICC (mximo60 alunos) e Clculo Numrico (mximo 80). Cada conjunto dos nmeros de matrcula dosalunos de uma disciplina tem a matrcula fictcia 9999 no final. Formular um algoritmo queimprima o nmero de matrcula dos alunos que esto cursando estas disciplinassimultaneamente. Obs: O exerccio trata da ocorrncia de um elemento em um conjunto emoutro conjunto.

    15) Implemente um programa que l 10 inteiros do teclado ou para quando dois inteirosconsecutivos sejam digitados. Aps a leitura o programa dever imprimir o maior, o menor, amdia 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 20nmero aleatrios, no seriados.Elabore um programa que solucione esse problema, e imprimaa seqncia digitada pelo usurio, a seqncia dos nmeros primos em ordem crescente e aseqncia dos nmeros no utilizados (no primos).

    18) Faa um programa que utilize uma estrutura de repetio para ler 50 nmeros armazenando-osem um vetor e calcule e exiba a mdia aritmtica deles. Em seguida o programa deve apresentartodos 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-overticalmente, trocando os elementos entre si, dois a dois, ou seja, os de ndices par com os dendice mpar.

    20) Construa um programa que gere um vetor VI, que receba um nmero par de elementos emultiplique 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 delesocorre 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 Propostos35

  • 1) Dada uma matriz M(5,5), transportar para um vetor D apenas os elementos da diagonal damatriz 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 umamatriz M por linha, tal que: Os elementos do vetor V1 devem formar as linhas mpares damatriz e elementos do vetor V2 devem formar as linhas pares da matriz. Imprimir os vetores e amatriz gerada.

    3) Fazer um algoritmo que, dado n, imprime as n primeiras linhas do tringulo de Pascal.

    11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1.

    .

    4) Dizemos que uma matriz quadrada inteira um quadrado mgico se a soma dos elementos decada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonaisprincipal e secundria so todas iguais.

    Exemplo: A matriz

    2103654708

    um quadrado mgico. Dada uma matriz quadrada nnA , verificar se A um quadrado mgico.

    5) Dizemos que uma matriz inteira nnA uma matriz de permutao se em cada linha e em cadacoluna houver 1n elementos nulos e um nico elemento igual a 1.

    Exemplo: A matriz abaixo de permutao:

    1000000101000010

    Observe que

    100021012

    no de permutao.

    36

    M(I,J) = 1 SE I=J

    M(I,J) = 1 SE J=1

    M(I,J) = M(I-1,J-1) + M(I-1,J)

  • 6) Dada uma matriz nnA , imprimir o nmero de linhas e o nmero de colunas nulas da matriz. Exemplo: 4=m e 4=n

    0000000065043201

    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 asoma entre elas. Ex: Considere matrizes A3x3 e B3x3 . Para realizar soma e subtrao dematrizes elas devem ter mesma dimenso.

    8) Faa um algoritmo em forma de menu que, dadas duas matrizes A e B, oferea as seguintesopes:1. Soma A+B2. Transpostas de A e B3. 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 A6. Construir um vetor com os elementos primos da matriz B7. 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+j10) 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 primeiralinha 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 seguintesopes:

    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 iguaisC Verificar quantos elementos nulos tem a matriz AD Verificar quantos elementos pares tem a matriz BE - Sair do programa

    12) Dada uma tabela de 4 x 5 elementos, calcular a soma de cada linha e a soma de todos oselementos.

    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 seusrespectivos custos e lucros, calcule o custo e o lucro em cada um dos meses e o custo e lucroanuais.

    14) Os elementos aij de uma matriz inteira Anxn representam os custos de transporte da cidade i paraa cidade j. Dados n itinerrios, cada um com k cidades, calcular o custo total para cadaitinerrio.

    37

  • Exemplo:

    52178312401253214

    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-rotina1) 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 sub-rotina 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 duasvariveis do tipo Tponto, passe esses dois pontos para uma sub-rotina Distancia() que retornea distncia entre estes pontos.

    3) Faa um algoritmo que receba os dados de um crculo, atribua os dados lidos a uma variveldo 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 auma varivel do tipo Tponto e outra do tipo Tcirculo, respectivamente, passe essas variveis auma 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 umaluno e retorna ao programa principal, se o aluno foi ou no aprovado (aprovado quando notafor superior ou igual a 5,0).

    Exerccios de reviso38

  • 1) Construa um algoritmo para entrar com um nmero de 1 a 10 e imprimi-lo o nmero de vezescorrespondente ao seu valor.,

    2) Desenvolva um algoritmo que calcule as razes de uma equao do segundo grau. Utilize omtodo 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 planoP(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 umaviagem utilizando-se um automvel que faz 12 km/L. Para realizar esse clculo, o usuriodever fornecer o tempo gasto da viagem e a velocidade mdia durante a mesma.O algoritmodever 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 realqualquer, calcule o valor da F(x) = -x3 +8, para o parmetro recebido, e retorne o valorcalculado.

    6) Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para N valores igualmenteespaados entre Xinicial at Xfinal.

    7) Dado a funo F(x) da questo 5, faa um algoritmo que calcule F(x) para valores entre Xinicial eXfinal. ,com intervalo definido pelo usurio.

    8) Faa um algoritmo para uma sub-rotina que receba trs nmeros quaisquer e retorne o maiordeles.

    9) Desenvolva um algoritmo que receba uma quantidade indefinida de notas e apresente asinformaes a seguir no final da seqncia de notas. O algoritmo dever encerrar a seqncia deleitura quanto identificar que valor recebido no uma nota vlida (valor negativo ou maior que10)

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

    11) Escreva um algoritmo, utilizando sub-rotina, que retorne funo principal, o volume de umcilindro, dado o raio e altura do mesmo.

    12) Escreva um algoritmo que leia dois nmeros reais e um caractere, que represente a operao aser realizada (+, -, * e /). O algoritmo deve apresentar o resultado final da operao, ouuma mensagem de erro para o caso da diviso de um nmero por zero, ou uma mensagem deerro 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 ), emquilogramas, pela estatura ( E ) ao quadrado, em metros quadrados. Apresente um algoritmoque 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 ClassificaoAt 14,5 Desnutrio

    Acima de 14,5 at 20 Abaixo do pesoAcima de 20 at 25 Peso NormalAcima de 25 at 30 SobrepesoAcima de 30 at 40 Obeso

    Acima de 40 Obeso Mrbido

    14) Dados trs nmeros naturais, em qualquer seqncia, verificar se eles formam os lados de umtringulo 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 umelemento 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 modoque: 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 razesdos elementos de A; quarta coluna de B: elementos so o fatorial dos elementos de A. ImprimaA e B.

    19) Faa um programa que leia duas matrizes e realize a soma entre elas, passando primeira mente aum 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 eimprima-os na seqncia contrria da que foi recebida.

    21) Considere algoritmo em forma de programa que l uma seqncia de nmeros inteirospositivos, 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 lidosc) um vetor R que armazena a raiz quadrada dos elementos lidosd) 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) denomes 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 termov[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 emostre 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. Leiaum nmero. Mostre, agora, quais so os elementos da matriz que so mltiplos deste nmerolido.

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

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