Program a Cao

Embed Size (px)

Citation preview

  • 5/16/2018 Program a Cao

    1/61

    Departamento de Informatica - UFES Apostila de Programacao

    CAPITULO IINTRODU~AOObjetivos

    Familiarizar 0 aluno com as nocoes de algoritmo e de refinamentos sucessivos atraves deexemplos nac-cornputacionais:

    Introduzir a nocao de programa e linguagem de programacao; Ressaltar as vantagens de representacao em C; Identificar as componentes principais de urn programa em C, baseando-se em urn exemplo nao

    computacional.1.1 - 0 que e urnAlgoritmo

    Os computadores vern sendo cada vez mais utilizados nas mais diversas areas, des de a medicinaate a engenharia, des de a administracao de empresas ate 0 controle de maquinas industriais, desde aedicao de textos pessoais ate a producao de efeitos especiais em filmes.Em todas as situacoes, 0 computador age como uma maquina capaz de coletar, manipular edevolver dados em grande quanti dade e alta e alta velocidade. Estas atividades sao executadas por umagama de circuitos e componentes eletr6nicos (Hardware).

    Ao longo das iiltimas decadas, estes componentes tern se tornado cada vez mais eficientes ebaratos, devido aos avances tecnol6gicos.

    "Embora os computadores modernos sejam capazes de executar operacoes diffceis e complexas,eles sao maquinas d6ceis e de uma inteligencia restrita. Eles devem ser ensinados exatamente 0 quefazer, e as instrucoes devem ser feitas em uma linguagem simples, precis a e limitada que eles possamcompreender. Estas instrucoes sao mais conhecidas como software" (Darmell,1988).

    Uma das etapas fundamentais no desenvolvimento do software e a Construcao de Algoritmo.Algoritmo e uma sequencia de operacdes que devem ser executadas em uma ordem definidae nao-ambfgua, com 0proposlto de solucionar urn determinado problema.Esta definicao pode caracterizar tanto urn receita de bolo com 0 conjunto de instrucoes para

    montagem de urn autom6vel. No nosso caso, serviria para definir 0 conjunto de atividades que 0computador deve desempenhar para solucionar urn problema.o algoritmo e geralmente representado atraves de modelos de facil compreensao pelos humanos,mas incompreensfveis para 0 computador. Para que 0 computador possa executar urn algoritmo, enecessario que este algoritmo seja traduzido para uma linguagem que seja entendida pelo computador-a linguagem de programacao. Ao traduzir-se urn algoritmo para uma linguagem deprogramacao obtem-se urn Programa.

    Este curso tern por objetivo desenvolver a capacidade de construir algoritmos de uma formaorganizada (estruturada) na linguagem de programacao C.1.2 - Exemplo de Algoritmo

    Boa parte das atividades do dia-a-dia pode ser descrita atraves de algoritmos. Por exemplo, 0 atode trocar urn pneu furado em urn carro consiste em:

    Pegar as ferramentas no porta-malas; Retirar 0 estepe; Instalar 0macaco; Levantar 0 carro parcialmente; Afrouxar os parafusos do pneu furado;

    - 1-

  • 5/16/2018 Program a Cao

    2/61

    Departamento de Informatica - UFES Apostila de Programacao

    Retirar 0 pneu furado; Instalar 0novo pneu; Abaixar 0 carro Apertar bern as porcas; Guardar 0 pneu furado e as ferramentas;

    A sequencia descrita acima pode ser completada com varias observacoes. Por exemplo:o que fazer se 0macaco nao estiver no porta-malas?- 0 que fazer se 0 estepe tambem estiver vazio?- Deve-se sempre puxar 0 freio de mao antes de executar estas operacoes,Por outro lado, algumas a90es devem ser levadas a cabo ap6s executar a troca do pneu. Porexemplo:

    - Limpar as maos;- Consertar 0 pneu furado;Se 0 responsavel pela construcao do algoritmo tiver que se preocupar com todas as possibilidadesdo ambiente de execucao do mesmo, e alem disso, com todas as necessidades de tratamento p6s-execucao , nenhum algoritmo sera completo. Sempre alguma condicao podera ser esquecida.Assim, antes de se construir urn algoritmo, deve-se especificar as condicoes de inicio (dados deentrada) e as de termino (dados de safda). No caso acima, teremos:

    Condh;io de entrada: urn carro com todos os equipamentos de seguranca emcondicoes, parado e freado, com urn pneu furado.Condh;io de saida: urn carro parado, freado, com todos os equipamentos deseguranca em condicoes, exceto pelo pneu estepe vazio, com todos os pneus OK.Alem disso, alguem pode argumentar que as acoes nao estao suficientemente detalhadas para

    compreensao, Para uma pessoa acostumada a trocar pneus furados as explicacoes sao suficientes,mas sera que urn selvagem do deserto Kalahari, que nuca viu urn carro antes, sabera utilizarcorretamente urn macaco para eleva-lo?Assim, a funcao "levantar 0 carro" seria melhor descrita como:Empunhe 0 cabo da manivela do macaco; comece a girar a manivela no sentidohordrio, mantendo este movimento ate que 0pneu do carro esteja suspenso a pelomenos 10 em do chao; solte a manivela.Boa parte dos problemas tratados no computados e resolvida por sequencia de instrucoes(algoritmos) compostas por urn agrupamento de atividades por si s6 complexas. Da mesma formaque foi necessario detalhar 0 uso do macaco para 0 selvagem, tambem estas atividades complexasdevem ser detalhadas ate a urn nfvel em que 0 computador seja capaz de reconhece-las e executa-

    las.Devido a velocidade com que 0 computador processa cada uma destas instrucoes simplificadas,nao M problema em descrever e tratar uma atividade complexa atraves de milhares de outrasatividades basicas,Para os seres humanos, contudo, e diffcil memorizar e detalhar milhares de instrucoes,associando-as a atividade original. Para facilitar esta tarefa, utilizam-se duas ferramentas:Tecnica de Refinamentos Sucessivos;

    - Representacao de Algoritmos.

    - 2-

  • 5/16/2018 Program a Cao

    3/61

    Departamento de Informatica - UFES Apostila de Programacao

    1.3 - A Tecnica de Refinamentos Sucessivoso computador s6 e capaz de entender instrucoes muito simplificadas, escolhidas dentro de urnconjunto bastante restrito. A transformacao de atividades complexas, bern mais que a troca de urn pneufurado, sequencia de instrucoes computacionais pode ser uma atividade tediosa e frustrante, na medidaem que quase sempre se esquece algum detalhe.Os seres humanos tern capacidade limitada de armazenar informacoes em mem6ria. Estasinformacoes tanto podem ser os processos necessaries ao cumprimento de alguma atividade como asferramentas necessarias para a execucao dos processos individualmente. Vma boa polftica e entao,dividir atividades complexas em processamentos-componentes menores, especificando apenas aentrada e a safda de cada urn dos processamentos-componentes. Ap6s individualizados osprocessamentos-componentes e suas entradas/safdas, pode-se preocupar com as ferramentas necessariaspara sua execucao.Entrando, mesmo estes processos menores podem ser ainda tao complexos que exijam novasdivisoes. Repete-se, entao, a divisao, desta vez no interior dos processamentos-componentes, gerandonovos processamentos mais simplificados.Esta atividade e feita pela construtor do algoritmo (VOCE!) ate que os processamentos-componentes se tomem sequencias de instrucoes aceitaveis pelo computador.Esta tecnica e conhecida como dividir-para-conquistar, ou tambem Tecnlca de RefinamentosSucessivos.Vejamos graficamente 0 que ocorre no algoritmo que descreve atividades matinais de uma pessoa:

    =>AIgoritmos "Manha de Segunda-Feira" Levantar da cama; Cuidar da higiene pessoal; Tomar cafe; Recolher material necessario; Sair de casa.

    Processamento-Componente "Levantar de Cama"Abrir os olhos;Se espreguicar;Ficar de pe,

    Processamento-componente "Tomar Cafe"Sentar a mesa;Por cafe na xfcara;Por margarina no pao;Comer 0 pao e tomar 0 cafe;Comer uma fruta.

    Processamento-componente "Comer 0pao e tomar 0 cafe"Apanhe 0 pao com margarina e a xfcara com cafe;Enquanto 0 pao com margarina e 0 cafe nao acabarem, coma mais urn pedaco de pao ebeba mais urn pouco de cafe da xfcara.

    - 3 -

  • 5/16/2018 Program a Cao

    4/61

    Departamento de Informatica - UFES Apostila de Programacao

    Processamento-componente "Coma uma fruta"Se houver algum tipo de fruta disponfvel na mesa, escolha urn tipo;Pegue uma fruta do tipo escolhido;Coma a fruta.

    Exercicios1) Termine 0 detalhamento de todos os procedimentos necessaries a sua "Manha de Segunda-Feira".Depois compare com pelo menos dois de seus colegas.2) Use a tecnica de refinamentos sucessivos para detalhar as seguintes atividades:

    Limpeza de urn automovel;Montagem de uma barraca de camping;Preparacao de urn bolo de aniversario,

    1.4 - Representacao de Algor itrnosDevido a pequena capacidade de memorizacao humana, os procedimentos-componentes devem serarmazenados em algum lugar, para permitir 0 acesso rapido eo facil entendimento. Para isto, podemser utilizadas desde folhas de papel ate 0 auxilio de computadores.Qualquer que seja 0 tipo de armazenamento, estes procedimentos/algoritmos devem ser descritos poralgum modelo. Nos exemplos anteriores utilizamo-nos da propria lfngua portuguesa, que e urn modelode representacao com que estamos acostumados a trabalhar.A lingua portuguesa traz, contudo, uma serie de inconvenientes:Certas palavras tern dupla interpretacao;

    - Exigem-se regras de concordancia bastante definidas;- A pontuacao pode alterar completamente 0 significado de uma frase.Alem disso, a lfngua falada costuma apresentar construcoes complexas, bastantes distintas dasimplicidade das linguagens entendidas pelos computadores.Os modelos de representacao de algoritmos devem ser mais restritos, diminuindo a liberdade deexpressao do "construtor de algoritmos", mas com isso eliminando os problemas de interpretacao,concordancia e pontuacao, Estes modelos devem ainda utilizar-se da apresentacao grafica para tomaros algoritmos mais faceis de serem compreendidos.A linguagem de programacao C proporciona estas caracterfsticas para a representacao de algoritmos.

    1.5 - P artes de urn P rograrna ern CUrn exemplo bastante conhecido de representacao de programas e 0 de receitas culinarias, Estas tern aseguinte estrutura:- Nome da receita;- Ingredientes: descreve todo 0material necessario durante p preparo da receita;- Modo de preparar: descreve como agrupar e tratar os ingredientes.Alem disso, toda receita vern com muitos comentdrios relativos a detalhes que poderiam passardespercebidos e estragar 0 resultado final. Os comentarios servem para chamar a atencao do cozinheiroe explicar melhor 0 porque de cada passo.

    - 4-

  • 5/16/2018 Program a Cao

    5/61

    Departamento de Informatica - UFES Apostila de Programacao

    Da mesma forma urn born programa tera 4 partes:1. Cabecalho: com 0 nome do programa;2. Dicionario de Dados: definindo os dados de entrada, de safda e outros que sejam necessaries aolongo do processamento do programa;3. Corpo: definindo 0 tratamento dado aos dados no programa;4. Comentarios: esclarecendo aspectos pouco claros do programa em suas diversas partes(Cabecalho, Dicionario de Dados e Corpo).Alem disso, a forma como as linhas do programa estao dispostas fisicamente, identacao, deve ser feitade maneira a tomar a listagem do programa 0 mais clara quanta possfvel, permitindo assim uma boalegibilidade do programa.Para que urn programa apresente uma boa estetica deve-se seguir regras basicas, como:Coloque cada comando em uma linha separada;Insira uma linha em branco antes de cada se9ao do programa e sempre que apropriado emuma sequencia de comandos para destacar blocos de comandos;Mantenha-se fiel a identacao dos comandos de modo a enfatizar a relacao entre palavrasreservadas e comandos que compreendem estruturas de controle, secccs de programas, etc.

    - 5 -

  • 5/16/2018 Program a Cao

    6/61

    Departamento de Informatica - UFES Apostila de Programacao

    CAPiTULO IIA SOLUC;AO DE UM PROBLEMA ATRA VES DO COMPUTADOR1.1 - 0 que e urn AlgoritrnoQuando se deseja resolver urn problema com auxflio do computados, e necessario a execucao de umaserie de etapas, elaboradas e executadas passo a passo na forma de algoritmos.o algoritmo e descrito em portugues, 0 que permite ao programados pensar no problema a serresolvido, e nao na maquina ou linguagem de programacao que serao usadas. Esta preocupacao ficapara uma etapa posterior.1.2 - A Programacao EstruturadaA programacao estruturada consiste em uma metodologia de projeto de programa com objetivo dereduzir a complexidade dos grandes sistemas de software. Assim essa metodologia se propoe a:

    Facilitar a escrita dos programas;Facilitar a leitura e compreensao de programas;Permitir a verificacao a priori dos programas;Facilitar a manutencao e verificacao dos programas.A ideia basica da programacao estruturada e reduzir a complexidade do sistema, em tre nfveis:

    PRIMEIRO NfvELDesenvolvimento do programa em diferentes fases pro refinamentos sucessivos (top-down). Istoe, 0 problema inicial e subdividido em subproblemas menores, etc. A cada divisao sao levados emconta mais detalhes sobre a especificacao do problema, sendo que os meios disponfveis para a solucao(maquina e linguagem de programacao) sao deixados para as tiltimas fases.Em cada etapa da decomposicao, e preciso garantir que:As solucoes dos subprogramas permitam obter a solucao total;

    - A sequencia de acoes componentes faca sentido;- A decomposicao selecionada se aproxime cada vez mais daquilo que e representavel peloscomandos da linguagem na qual 0programa sera escrito.o processo inverso, quando em primeiro lugar e levado em conta a linguagem de programacao (oumesmo 0 computador que sera adotado) e denominado de desenvolvimento bottom-up.Na pratica, os dois tipos de desenvolvimento (top-down e bottom-up) nao sao independentes e nemexiste urn compromisso formal do programador em usar urn ou outro. Tudo depende dos recursosdisponfveis, do ambiente em questao e ate da formacao do programados.

    SEGUNDO NfvELModularizacao de grandes programas, isto e, divisao do programa em pequenas etapas, que saom6dulos ou subprogramas, que nada mais sao que urn conjunto de comandos agrupados com afinalidade de executar uma determinada funcao. A primeira etapa, por onde comeca a execucao dotrabalho, recebe 0 nome "Programa Principal", e as outras sao os sub-programas propriamente ditos,executados sempre que ocorre uma chamada dos mesmos. Para que os sub-programas possam serchamados, e1esdevem receber urn nome, e a unidade que deseja chama-Io 0 faz atraves de seu nome.Urn sub-programa por sua vez, pode chamar outro sub-programa e assim por diante.A modularizacao possui varias vantagens, como por exemplo:- Permite a divisao de tarefas em equipes, onde cada m6dula pode ser elaborado por urnprograma diferente;

    - 6 -

  • 5/16/2018 Program a Cao

    7/61

    Departamento de Informatica - UFES Apostila de Programacao

    - Facilita 0 teste, pois cada modula pode ser testado individualmente e depois incorporado aoconjunto;- Permite 0 uso do mesmo modula van as vezes.

    TERCEIRO NfvELElaboracao do programa usando dentro de cada modulo urn numero limitado de "estruturas basicas defluxo de controle", isto e , instrucoes.Os modules sao construfdos por programas. No programa, cada urn de seus passos pertence a uma dastres estruturas basicas:Operacao elementar;Operacao de controle (Estrutura) especificando uma selecao entre sequencias de passos;Operacao de controle (Estrutura) especificando a repeticao de uma sequencia de passos.

    DOCUMENTAC;Ao:Os programas devem ser lidos e entendidos por quem os confeccionou e por outras em toda a sua vidaiitil, uma vez que podem necessitar correcao, manutencao e modificacao. Para que isto ocorra, e1esprecisam ser muito bern documentados.Urn programa bern documentado possui as seguintes caracterfsticas:- E convenientemente identado de modo a mostrar sua estrutura logica. Os comandos devemser alinhados de acordo com 0 nfvel a que pertencem, ou seja, a estrutura na qual eles estaocontidos deve estar destacada;- Possui comentarios que auxiliam a sua compreensao por outras pessoas nao responsaveispor sua elaboracao;- Contem uma declaracao de variaveis em urn dicionario de dados. 0 dicionario de dadosespecifica formalmente 0 conteudo de cada dado utilizado no corpo do programa e indica os valoresque cada urn deles pode assumir.

    - 7 -

  • 5/16/2018 Program a Cao

    8/61

    Departamento de Informatica - UFES Apostila de Programacao

    CAPITULO IIICONSTRUC;AO DE PROGRAMAS EM C

    Objetivos Apresentar os tipos basicos de dados INT, FLOAT, CHAR; Apresentar a forma de definicao das variaveis e constantes de urn programa em C; Apresentar os comandos elementares de construcao de programas em C, exemplificando seuuso; Apresentar uma forma organizada de construcao de programas;

    1 11 .1 - IntroducaoNos capftulos anteriores mostraram-se diversos algoritmos, com suas operacoes mais simples sendoexecutadas por seres humanos (algoritmo "Troca de Pneu"). Tambem se discutiram as vantagens eobjetivos das Tecnicas de Programacao Estruturada (Refinamentos Sucessivos, Modularizacao,Documentacao, etc).Nesse capitulo serao descritas as operacoes basicas que 0 computador pode executar. Estas operacoesserao utilizadas para construir algoritmos progressivamente mais complexos.Urn fator a observar e que os computadores reais, na verdade, executam urn conjunto ainda maisreduzido de operacoes, chamadas operacoes de maquina, e que definem a Linguagem de Mdquina.As operacoes descritas aqui referem-se ao que se convenciona chamar de Linguagens de AltoNfvel. Estas sao mais proximas de linguagem humana. Para traduzir urn programa escrito emlinguagem de alto nfvel para linguagem de maquina utilizam-se outros programas denominados decompiladores.Uma vez construfdo urn algoritmo, 0 mesmo pode ser traduzido para uma linguagem de programacaode alto nfvel (PACAL, COBOL, FORTRAN, C, MODULA, etc). Este ultimo programa e entaotraduzido pelo compilados para linguagem de maquina, que pode ser executada pelo computador.

    - 8 -

  • 5/16/2018 Program a Cao

    9/61

    Departamento de Informatica - UFES Apostila de Programacao

    IDENTIFICA

  • 5/16/2018 Program a Cao

    10/61

    Departamento de Informatica - UFES Apostila de Programacao

    Constantes sao valores que parecem em meio ao programa e que nao tern seu valor alterado durante aexecucao do mesmo. Urn exemplo tfpico e 0 do mimero 1t (PI).Variaveis sao elementos (posicao de memoria da maquina) que recebem 0 valor de uma variavel ou deuma expressao, podendo este valor ser alterado durante a execucao do programa. Uma variavel podeser imaginada como uma posicao da maquina, identificada pelo "nome da variavel",Exemplo:Soma = 0; significa que uma posicao de memoria da maquina, identificada pelo nome Soma, recebeo valor O .111.3.1- Tipo Basicos de DadosNo C, sao adotados quatro tipos basicos de dados, isto e , sao quatro os tipos primitivos de dados quepodem ser usados. Esses tipos podem criar outros tipos chamados de ''tipos construidos", que seraovistos posteriormente.

    1. TIPO INTEIRO (int)Designa urn intervalo (dependente do compilador e da maquina) dos mimeros inteiros (negativo,positivo ou nulo). Possui como operacoes associadas: Soma: + Multiplicacao: * Subtracao;- Divisao inteira: /2. TIPO PONTO FLUTUANTE (float)Designa urn intervalo dos mimeros racionais (a precisao e 0 intervalo sao dependentes da maquina e docompilador). Possui como operacoes associadas: Soma: + Multiplicacao: * Subtra9ao:- Divisao: /3. TIPO CARACTER (char)Designa qualquer caracter (letras, mimeros e caracteres especiais como *, &, $, etc). Existem operacoesespeciais associadas a manipulacao de caracteres, mas nao serao abordadas neste momento.4. TIPO BOOLEANO (int)Na linguagem C, 0 tipo !NT e usado tambem como expressao booleana. Para isso, 0 zero e interpretadocomo falso e os outros mimeros como verdadeiro.

    111.4- Definh;iio das Varlaveis de um ProgramaQuando se escreve urn programa, e necessario definir 0 tipo de todas as variaveis que serao usadas.Essa definicao de tipo e feita atraves de uma "Declaracao de Variaveis", onde sao especificados osvalores que podem ser atribufdos a cada uma das variaveis (se valores inteiros, reais, etc). Em C,quando urn computador esta executando urn programa e encontra uma variavel qualquer, se esta naotiver tido 0 seu nome e tipo dec1arado anteriormente, sera emitida uma mensagem de erro, abortando aexecucao, Assim, toda variavel deve ser dec1arada antes de ser utilizada.A declaracao de variaveis e constantes segue a seguinte estrutura:#define -cidentificador -cidentificador;

    - 10-

  • 5/16/2018 Program a Cao

    11/61

    Departamento de Informatica - UFES Apostila de Programacao

    Exemplo:#define pi 3, 1415926#define NotaMaxima 10int soma, contl , cont2, matriculaAluno;float mediaAluno, notaProval, notaProva2;

    EXERCicIOAssinale os identificadores validos:( )Valor( )Salmo-Liquido( )SalarioLiquidoOX2( )NotaAluno( )3X3()AH!!Oxy( )X234111.5 - Operaedes ElementaresAs operacoes elementares sao os comandos de atribuicoes, calculos de expressoes, e operacoes deentrada e safda. Essas operacoes sao chamadas de elementares por na alterarem 0 fluxo normal daexecucao do programa, ou seja, ap6s a execucao de uma operacao elementar, a pr6xima instrucao a serexecutada e a seguinte do programa.Toda instrucao possui uma parte sintatica (diz respeito a forma como a instrucao e escrita) e uma partesemantica (diz respeito ao que a instrucao faz).111.5.1 - Comando de Atribuic;aoo comando de atribuicao e a maneira de se especificar que a uma determinada variavel sera atribufdo(fomecido) urn certo valor. Este comando. Em C, e indicado pelo sfmbolo de atribuicao "=".Forma geral do comando de atribuicao:

    = ;o tipo dos dados a esquerda e a direita do comando de atribuicao deve ser compatfvel, A iinica excecaoocorre para casos em que urn valor inteiro e atribufdo a uma variavel do tipo real.111.5.2 - Calculo de ExpressaoAs variaveis e constantes podem ser combinadas com os operadores associados a cada tipo de dados,gerando expressoes, E 0 valor calculado das expressoes que e atribufdo a variavel ao lado esquerdo docomando de atribuicao,111.5.3 - Expressao AritmeticaA expressao aritmetica e aquela cujos operadores e/ou variaveis de tipo numerico.A notacao e a mesma das operacoes matematicas, com as seguintes excecoes:

    - Nao e permitido omitir 0 operador de multiplicacao:A *C e diferente de AC

    - 11 -

  • 5/16/2018 Program a Cao

    12/61

    Departamento de Informatica - UFES Apostila de Programacao

    Nas operacoes aritmeticas, as operacoes guardam sempre uma relacao de prioridade, quee :

    Prioridade Operacao1 Multiplicacao, divisao2 Adicao , subt racao

    Para se obter uma sequencia de calculos diferente, varies nfveis de parenteses podem ser usados paraquebrar as prioridades definidas. Nao e permitido 0 usa de colchetes e chaves, uma vez que estessfrnbolos serao utilizados com outras finalidades.

    Funcoes Pre-deflnldasAlem das operacoes basicas citadas podem-se usar nas expressoes aritmeticas algumas funcoes bastantecomuns na matematica, definidos dentro da lingua gem.

    Nome da funcao Tipo do Argumento Tipo de Retornoabs int intabs float floatsin intlfloat floatcos intlfloat floatatan intlfloat floatlog intlfloat floatexp intlfloat floatsqrt intlfloat floatfloor float intceil float intExemplos:

    ABS eo valor absoluto (modulo) de urn mimero. Exemplos:abs(-4) = 4- SQRT e raiz quadrada. Exemplos:sqrt(4) = 2- FLOOR e 0maior inteiro nao maior que 0mimero de entrada. Exemplo:floor(10.9) = 10- CEIL e 0menor mimero nao menor que 0mimero de entrada. Exemplo:ceil(9.9) = 10- SIN, COS e ATAN sao as funcoes trigonometricas seno, coseno e arco-tangente

    respecti vamente.Os fingulos sao sempre dados em radianos.- LOG e EXP sao 0 logaritmo neperiano e exponencial respectivamente.

    - 12-

  • 5/16/2018 Program a Cao

    13/61

    Departamento de Informatica - UFES Apostila de Programacao

    ExercicioCalcule 0 valor das seguintes expressoes aritmeticas, considerando os seguintes valores:A = lOB = 3 X = 2.5 Y = 1.2a)Xl2b)cei1(X-Y)c)EXP(Y*(B+2)-6)d)floor(2.9+cei1(0.3+ Y)*2+A)111.5.2.2 - Expressiio RelacionalTrabalha com operadores relacionais e e formada por tres partes: uma expressao (da esquerda), urnoperador relacional e outra expressao (da direita). Note-se que uma variavel ou con stante isolada podeser entendida como uma expressao,Sao exemplos de operadores relacionais:

    < menor que; maior que;>= maior ou igual a;!= diferente de.

    As expressoes relacionais tern como resultados finais valores do tipo inteiro (0 para falso e 1 paraverdadeiro ).As variaveis do tipo CHAR tambem podem ser comparadas entre si, obedecendo a ordenacao dopadrao ASCII.111.5.2.3 - Expressiio LogicaE comum nos programas surgirem situacoes em que a execucao de uma a'tao, ou sequencia desubacoes, esta sujeita a uma certa condicao, Esta e representada no texto do programa por meio de umaexpressao logica.Denomina-se de Expressao L6gica a expressao cujos operadores sao 16gicos e cujos operandos saoexpressoes relacionais e/ou variaveis do tipo inteiro.Os operadores logicos sao:&& (AND) II (OR) !(NOT)Os resultados obtidos das expressoes logicas tambem sao valores do tipo inteiro (0 para falso e 1 paraverdadeiro ).Exemplos:Se P e Q sao operandos inteiras entao:

    P Q P&&Q PIIQ !P !(P &&Q)1 1 1 1 0 01 0 0 1 0 10 1 0 1 1 10 0 0 0 1 1

    ExerciciosDadas as variaveis e seus valores:

    A = 10 B = 3Ll = 1 X=3.5L2=0 Y=0.3

    - 13-

  • 5/16/2018 Program a Cao

    14/61

    Departamento de Informatica - UFES Apostila de Programacao

    Calcule 0 valor das seguintes expressoes:a)(A < B)b)(X < A)c)X +A) < (B * Y d)X Y e)Ll && L2f)LIIi L2g)(Ll && (X < Yh)! L2) II(! (X < (Y + 2

    Prioridade de Calculo das ExpressoesCaso se elimine os parametres das expressoes dos exercfcios anteriores, podem-se criar diividas sobreque operacoes serao executadas primeiro. A tabelo a seguir apresenta a ordem de priori dade de calculode expressoes.Priori dade Operador1 !2 *,1, %, &&3 +, -, II4 ==, !=, 111.5.3- Operaeoes de Entrada de Dadoso computador armazena os val ores das variaveis (e 0 propno programa!) em sua memona. 0computador alcanca estes valores do ambiente extemo atraves de operacoes de entrada de dados. Aoperacao de entrada de dados transfere urn ou mais dados do ambiente extemo (tec1ado, disquete) parauma ou mais variaveis na mem6ria, funcionando como urn comando de atribuicoes. Os dados lidosdevem ser do mesmo tipo das variaveis especificadas no comando de leitura. A forma geral dedescricao desta operacao e:

    scanf("

  • 5/16/2018 Program a Cao

    15/61

    Departamento de Informatica - UFES Apostila de Programacao

    Exemplo:Tome 0 seguinte trecho de urn programa em escrito em C.scanf("%d %d %d", &X, &Y, &Z);scanf("%d", &W);Simulacao da execucao:TELA "MEMORIA"

    X=?,Y=?,Z=?,W=?102030 X= 10, Y=20,Z=30, W=?40 X= 10, Y=20,Z=30, W=40111.5.4 - Operaeoes de Saida de DadosQuando 0 computador termina de processar as informacoes e obtem os valores finais (por exemplo, 0salario lfquido), os valores sao automaticamente armazenados em posicoes de memoria (valores devariaveis), Entretanto, 0 usuario nao tern acesso a estes valores.Para permitir 0 acesso do usuario aos resultados, 0 programados deve ordenar sua apresentacao, Estapode ser em vfdeo ou em impressoras.A operacao de safda de dados transfere para 0 mundo exterior urn ou mais valores ou variaveisdesejadas. Apresenta a seguinte forma geral:printf(vcformato I ... ", var1, var2, ..., yarN);A tabela a seguir nos mostra alguns dos possfveis formatos a serem usados:Codigo Formato%c caracter%d Inteiros decimais com sinal%i Inteiros decimais com sinal%e Notacao cientffica (e mimisculo)%E Notacao cientffica (E maiiiscula)%f Ponto flutuante decimal%g Usa %e ou %f, 0 que for mais curto%G Usa %G ou %F, 0 que for mais curto%0 Octal sem sinal%s String de caracteres%u Inteiros decimais sem sinal%x Hexadecimal sem sinal (letras mimisculas)%X Hexadecimal se sinal (letras maiiisculas)%p Apresenta urn ponteiro%n o argumento associado e urn ponteiro para inteirono qual 0 mimero de caracteres escritos ate esseponto e colocado%% Escreve 0 sfmbolo %

    Exemplo:Tome 0 seguinte trecho do programa:printf("Entre com dois numeros inteiros: ");

    - 15 -

  • 5/16/2018 Program a Cao

    16/61

    Departamento de Informatica - UFES Apostila de Programacao

    scanf("%d %d", &numl, &num2);printf("%d ", numl);printf("%d\n", num2); //0 '\n' faz com que ele pule para a proxima linhaprintf("Soma: %d", numl +num2);printf("\n") ;printf("Fim Programa");Simulacao da execucao:TELAEntre com dois mimeros inteiros: 12l2Soma: 3

    Fim Programa

    1 11 .6 - U rn P rirn eir o P ro gra rn aUrn aluno do curso de Construcao de Programas deseja calcular a sua media final, conhecidas as suastres notas parciais. Escreva urn programa computacional que executa esta operacao.OBS.: As notas parciais podem ser fracionarias; a media final e a media aritmetica das tres notasparciais.

    maintj]float notal, nota2, nota3, media_final;scanf("%f %f %f', &notal, &nota2, &nota3);media_final = (notal + nota2 + nota3) / 3; //aqui e feito 0 calculo da mediaprintf("A Media Final eh: %d", media_final);

    }Esse exemplo ja permite identificar as partes de urn programa. Sao elas: cabecalho, dicionario dedados, corpo e comentarios,111.6.1 - D iciom irio de D adosNo dicionario de dados se definem todas as variaveis e constantes utilizadas no programa. Tambem osnomes das variaveis devem ser auto-explicativos. No caso de nao ficar explicito a funcao da variavelcom 0 nome, deve-se utilizar comentarios explicativos.A forma de declaracao de dados ja foi definida anteriormente.111.6.2 - C orpo

    - 16-

  • 5/16/2018 Program a Cao

    17/61

    Departamento de Informatica - UFES Apostila de Programacao

    E onde se descrevem as operacoes que se devem efetuar sobre os dados (entradas, atribuicoes, calculode expressoes e safdas) de forma a obter informacoes desejadas. No caso de algum trecho do programanao ter uma leitura imediata e facil, mesmo por quem nao 0 construiu, tambem dev-se utilizarcomentarios explicativos.111.6.3 - CorpoOs comentarios sao a ultima parte do programa, mas nao a menos importante. Como se explicou, oscomentarios se localizam em todas as partes do programa (cabecalho, dicionario de dados e corpo). Suafun9ao e explicar a funcao de cada operacao cuja utilidade nao esteja clara a uma leitura imediata.Tambem 0 programa como urn todo merece urn conjunto de comentarios que descrevem sua utilidade,o que se faz com urn grupo de comentarios associados ao cabecalho do programa.E qualquer parte do programa, pode se identificar os comentarios por estarem escritos entre 1* e *1 ou afrente de II.Aquelas funcionam como delimitadores dos comentarios.Em exemplos pequenos como 0 acima, a utilizacao de nomes mnemonicos nas variaveis e suficientepara garantir a legibilidade do programa. Em programas maiores, contudo, isto pode nao ocorrer: nestecaso a utilizacao de comentarios e essencial.o criterio para 0 uso ou nao de comentarios e subjetivo, mas pode ser bern traduzido pelo seguintequestionamento: 'Sera que um programador media, ndo tao capaz e inteligente quanta eu mesmo, seracapaz de ler e entender cada linha de c6digo escrito com a sma facilidade? Sera que eu serei capaz deentender a funrao de cada varidvel e cada linha de c6digo daqui a um ano, as 21:00 horas de umasexta-feira de carnaval, quando este programa der um defeito e eu for 0 responsdvel pela suacorreciio? 'Muitos programadores acostumados a restricoes de linguagens antigas tern 0 mau costuma de definirnomes de variaveis muito pequenos e pouco explicativos (uma ou duas letras), tambem so incluemcomentarios quando sao diretamente obrigados pela sua chefia,e isto apos a escrita do seu programa,quando ja esqueceram boa parte das funcoes do programa e suas variaveis,A experiencia demonstra que 0 tempo gasto em escrever nomes maiores e mais explicativos e bernmenor que aquele gasto tentando lembrar a funcflo e 0 tipo de uma variavel de nome XY2 na milesimaprimeira linha de codigo, ou procurando a definicao desta variavel na folha de mimero 257 em urnbloco de listagem com 500 paginas.Na mesma linha de raciocfnio, os comentarios podem e devem ser definidos durante a construcao doprograma. Ao utilizar as tecnicas de programacao estruturada, 0 programador tera todos os comentariosapropriados a cada parte do programa antes de iniciar seu detalhamento final.

    Comentarlos no cabecalhoUrn grupo de comentarios sao aqueles relativos ao conjunto do programa. Antes de algumasinformacoes sobre 0 autor e a data de construcao do programa, existem 5 comentarios fundamentais emqualquer programa:

    Funcao: deve-se descrever 0 objetivo do programa com urn texto conciso;Entradas: descrevem-se todos os dados cuja leitura e necessaria durante a execucao doprograma;Safdas: descrevem-se todas as safdas de resultados obtidos ao longo do programa;Condicao de parada: muitas vezes os programas executam tarefas repetitivas. A nao serque haja uma condicao de arada estipulada, 0 programa continuaria indefinidamente. Estacondicao deve ser explicitada nos comentarios do cabecalho;

    - 17 -

  • 5/16/2018 Program a Cao

    18/61

    Departamento de Informatica - UFES Apostila de Programacao

    Restricoes: alguns programas exigem que os dados estejam dispostos de uma formaparticular ou com alguma caracterfstica em particular. Este e 0 caso de dados cuja entradadeve ser orden ada por alguma chave ou dados que nao podem ter valor nulo. Caso hajauma ocorrencia deste tipo em programa, esta restricao deve ser inclufda nos comentariosdo cabecalho.

    Exemplos:3)Escreva urn programa que calcule a renda lfquida de uma pessoa, conhecidas a renda bruta, 0percentual de impostos e a parcela a deduzir de uma determinada pessoa ffsica. Imprima 0 resultadojunto com 0mimero de CPF que tambem sao dados de entrada.maintj]

    /*Autor: Pedro IIData: 13 de maio de 1888Funcao: calcular a renda liquida de urn contribuinte.Entrada: numero do CPF, renda bruta, percentual de impostos e parcela a deduzir.Safda: numero do CPF e receita liquida.*/

    float rendaLiquida, rendaBruta, parcelaDeducao, impostoFinal, percentuallmposto;intnumCPF;scanf("%d %f %f %f', &numCPF, &percentualImposto, &parcelaDeducao);impostoFianl = rendaBruta * (percentualImposto / 100) - parcelaDeducao;receitaLiquida = receitaBruta - impostoFinal;printf("%d %f', numCPF, receitaLiquida);

    }111.7- Comandos Estruturados111.7.1- Seqtlencia de ComandosUma sequencia finita de comandos onde cada instrucao e executada uma vez, urn ap6s 0 outro semdesvio. A sequencia e delimitada por '{' e '}', com cada comando separado por ';'.

    {-ccomando l;-ccomandoz;

    -ccomando'N;}Urn programa e urn exemplo de uma sequencia de comandos.

    - 18-

  • 5/16/2018 Program a Cao

    19/61

    Departamento de Informatica - UFES Apostila de Programacao

    111.7.2 - Estrutura de Sele-;aoQuando uma a9ao ou conjunto de acoes dentro do programa depender de uma teste, que decide pela suaexecucao ou nao, deve-se utilizar 0 comando (estrutura) de selecao.Comando if I elseSua forma geral e:if (expressiio)Comandolelse Comando2o comandol s6 sera executado se a expressiio for verdadeira. Caso contrario sera executado 0comando2.Jamais ambas expressoes de comandos serao executadas, e tambem nunca teremos nenhuma expressaosem ser executada.Exemplo:Calcular a media final de urn aluno do curso de programacao a partir de suas tres notas parciais. Casosua nota final seja inferior (superior) a 6.0, imprima uma aviso de que 0 aluno foi reprovado(aprovado).Algoritmo em portugues:

    Leitura das notasCalculo das mediasSe media inferior a 6.0: aluno reprovadoSenao: aluno aprovado

    Algoritmo traduzido para C.mainrj]

    int matricula;float nl, n2, n3, mediaFinal;printf("Entre com as notas parciais: ");scanf("%d %f %f %f', &matricula, &nl, &n2, &n3);mediaFinal = (nl + n2 + n3) / 3.0;if(mediaFinal < 6.0){printf("O aluno %d foi reprovado.");}else{ printf("O aluno %d foi aprovado.");}

    - 19-

  • 5/16/2018 Program a Cao

    20/61

    Departamento de Informatica - UFES Apostila de Programacao

    }Observe que os delimitadores '{' e '}' foram omitidos nas clausulas if I else, isto porque sempre queuma sequencia for composta por apenas urn comando os delimitadores sao opcionais, porem e sempreborn coloca-los, 0 ';' nunca e colocado antes da clausula else, visto que 0 ';' representa 0 fim docomando if e 0 else nada mais e que a continuacao do comando if I else.A clausula else e opcional, podendo a estrutura reduzir-se a:if (expressiio)ComandoNeste caso, se a condicao for falsa 0 comando seguinte ao comando if sera executado.Exemplo:Ler dois mimeros e ordena-los.mainij]

    int numl, num2, aux;printf("Entre com os mimeros: ");scanf("%d %d", &numl, &num2);printf("Valores desordenados: %d %d.\n", numl, num2);if(numl > num2){

    aux = numl;numl =num2;num2 = aux;}printf("Valores ordenados: %d %d.\n", numl, num2);

    }o programa I e dois mimeros e faz a troca, ordenando-os, caso numl seja maior que num2. Casocontrario a troca nao e executada e 0 comando seguinte ao if e executado.OBS.: Para que uma variavel participe de uma operacao de comparacao e necessario que inicialmente aela seja atribufdo algum valor, atraves de leitura ou atribuicao.Programa MaiorDeTres:mainu]1* Funcao: le tres mimeros e identificar 0maior.Entrada: tres numeros inteiros.Saida: 0maior dos tres numeros inteiros. *1int nl, n2, n3;

    - 20-

  • 5/16/2018 Program a Cao

    21/61

    Departamento de Informatica - UFES Apostila de Programacao

    printf("Entre com os tres numeros: ");scanf("%d %d %d", &nl, &n2, &n3);ifnl > n2) && (nl > n3{printf("Omaior eh: %d.", &nl);}ifn2 > nl) && (n2 > n3{printf("Omaior eh: %d.", &n2);}ifn3 > nl) && (n3 > n2{

    printf("Omaior eh: %d.", &n3);}}Note que este programa embora funcione nao e eficiente, pois caso 0mimero nl seja maior mais doisteste sao feitos desnecessariamente.Urn a segunda versao mais eficiente utilizando comandos de selecao aninhados e dada no seguninteexemplo:mainij]

    /* Funcao: Ie tres mimeros e identificar 0maior.Entrada: tres numeros inteiros.Saida: 0maior dos tres numeros inteiros. */int nl, n2, n3;printf("Entre com os tres numeros: ");scanf("%d %d %d", &nl, &n2, &n3);if (nl > n2){

    if (nl > n3){printf("O maior eh: %d.", nl);}else { printf("O maior eh: %d.", n3);}}

    else{ if (n2 > n3) {printf("O maior eh: %d.", n2);}- 2 1 -

  • 5/16/2018 Program a Cao

    22/61

    Departamento de Informatica - UFES Apostila de Programacao

    else { printf("O maior eh: %d.", n3);}}

    }Comando SwitchSua forma geral e :switch iexpressiio) {case valor1: comando 1case valor2: comando2

    case valorN: comandoNdefault : comando}o comando switch permite que seja realizada uma entre as n sequencias de operacoes, dependendo dovalor do seletor.o valor do seletor e 0 comparado com cada valor de sequencia de valores. Se algum dos valorescomparados for igual ao valor do seletor a sequencia de operacoes a ele relacionada sera executada.o caso intitulado default e executado se nenhum outro for satisfeito. 0 default e opcional.Exemplo:Ler uma vogal e exibir a vogal subsequente, Considere letras maiiisculas.maintj] /* Funcao: ler uma vogal e exibir a vogal subsequenteEntrada: uma vogalSaida: uma vogal subsequente */

    char cor;printf("Entre com uma vogal maiuscula: ");scanf("%c", &cor);switch (cor) {case 'A': cor = 'E';case 'E': cor = 'I';case 'I': cor = '0';case '0': cor = 'U';case 'U': cor = 'A';}printf("Vogal subsequente: %c", cor);

    - 22-

  • 5/16/2018 Program a Cao

    23/61

    Departamento de Informatica - UFES Apostila de Programacao

    }Exemplo:Ler mes e ana e exibir 0mimero de dias do mes / ano digitado.mainu]

    int dia, mes, ano;printf("Entre com 0mes: ");scanf("%d", &mes);scanf("%d", &ano);switch (mes) {case 1: case 3: case 5: case 7: case 8: case 10: case 12: dia = 31;case 4: case 6: case 9: case 11: dia = 30;case 2: {

    if (ano % 4 == O ){dia = 29;}else { dia = 28;}

    }}printf("O mes %d do ana %d possui %d dias.", mes, ano, dia);

    }111.7.3 - Estrutura de RepetleiloQuando urn conjunto de a'toes e executado repetidas vezes, tem-se uma "repeticao",A estrutura de repeticao, assim como a estrutura de selecao, envolve sempre a avaliacao de umacondicao, Existem tres tipos basicos de repeticao em C: "while", "do-while" e "for".C om ando w hileSua forma geral e:while(expressao)comandoA estrutura while e usada para repetir "n" vezes uma ou mais instrucoes, tendo como vantagem 0 fatode nao ser necessario conhecer 0 valor de "n" (mimero de repeticoes),Antes da sequencia ser executada, a condicao e avaliada. Se na primeira avaliacao a condicao for falsaa sequencia de operacoes nao e executada uma iinica vez. Caso a condicao seja verdadeira a sequenciade operacoes e executada repetidamente ate que a condicao se tome falsa.

    - 23-

  • 5/16/2018 Program a Cao

    24/61

    Departamento de Informatica - UFES Apostila de Programacao

    Logo, em algum momento esta condicao deve ser modificada dentro do laco while, caso contrario asequencia sera executada indefinidamente provo cando urn loop no programa.Exemplo:Dado urn mimero extemo, imprimir a tabuada desse mimero, de zero a nove:mainu]

    int numero, multiplicador, produto;scanf("%d", &numero);multiplicador = 0;while (multiplicador

  • 5/16/2018 Program a Cao

    25/61

    Departamento de Informatica - UFES Apostila de Programacao

    scanf("%d %d %d", &num1, &num2, &num3);printf("%d %d %d ", num1, num2, num3);n=O;do { num = num1 + num2 + num3;printf("%d ", num);num1 =num2;num2= num3;num3 =num;

    n = n+ 1;} while (n < 20);}2)maintj]

    char resp;do { printf("deseja continuar? - SIN \n");

    resp = getchart);} while (tresp != OS') II(resp != 'N'));}Neste exemplo novos caracteres sao lidos ate que seja tec1ado 'S' ou 'N'.Comando foro comando for e uti! quando se deseja realizar uma sequencia de operacoes urn mimero fixo econhecido de vezes.Apresenta-se da seguinte forma:

    for ( cin ic ia li zacao ; -ccond icao;

  • 5/16/2018 Program a Cao

    26/61

    Departamento de Informatica - UFES Apostila de Programacao

    Ocorrem 10 repeticoes. No primeiro for a variavel de controle recebe inicialmente 0 valor 1 e eincrementada automaticamente de 1 a cada repeticao ate que 0 primeiro valor acima de 10 seja obtido.Isto ocorre porque antes da sequencia ser executada, 0 valor da -cinicializacaco e atribufdo a variavel decontrole e a cada iteracao seu valor e comparado na -ccondicao, a sequencia de comando seraexecutada se a variavel de controle satisfizer a -ccondicao. No segundo for a variavel e decrementadade 1.A variavel de controle deve ser do tipo enumeravel e deve ser dec1arada no dicionario de dados.Exemplos:1)Ler 3 notas e imprimir a media.#define numN otas 3mainij]

    int i;float nota, soma, media;soma = 0;for (i = 0; i < numNotas; i++){

    printf("Entre com a nota: ");scanf("%f', &nota);soma = soma + nota;

    }media = soma / numNotas;printf("A media eh: %f', media);

    }2)Ler n notas e imprimir a mediamainfj]

    int n, i;float nota, soma;soma = 0;printf("Entre com 0 numero de notas: ");scanf("%d", &n);for (i = 0; i < n; i++){

    - 26-

  • 5/16/2018 Program a Cao

    27/61

    Departamento de Informatica - UFES Apostila de Programacao

    printf("Entre com a nota: ");scanf("%d", &nota);soma = soma + nota;}

    if (n > O){printf("A media eh : %f', soma In);}}11 1.8 - U rn A lg oritrn o p ara a constru~aode Prograrna sOs estudos da psicologia sobre a memoria humana apontam que uma pessoa com capacidade dememorizacao mediana consegue definir, de forma imediata, cerca de 8 "fatos" ao mesmo tempo, isto e,apena 8 "fatos" ou "valores" podem ser recordados imediatamente se a pessoa for questionada sobree1es.Para poder recordar mais fatos simultaneamente, existem dois caminhos: 1) a pessoa deve "decorar" osvalores, de forma a "acessa-los" de forma automatica; 2) deve ser dado urn tempo para que a pessoaconsiga "lembra" 0 valor solicitado.Na construcao de programas, mesmo para a resolucao de programas simples como os estudantes aqui,a quantidade de "fatos" a se recordar ultrapassa facilmente estes limites. AMm disso, geralmente nao sedispoe de tempo para se decorar cada uma das entradas e I ou safdas do problema, suas variaveis, aestrutura do algoritmo (uso de repeticces e selecoes), etc.Urn dos objetivos das tecnicas de programacao estruturada e permitir a pessoas normais 0desenvolvimento de programas (e, por conseguinte, de algoritmos) com boa produtividade. Como ja foiapontado anteriormente, duas ferramentas sao fundamentais para este processo: as tecnicas derefinamentos sucessivos e de representacao de algoritmos.Ao se desenvolver pequenos algoritmos, estas ferramentas podem ser dispensadas, porque a memoria ecapaz de tratar todos os elementos (variaveis e estruturas de selecao e repeticao, por exemplo)programador sente dificuldades em trabalhar nesta maneira pouco metodica, A seguir, apresenta-seuma estrategia ara auxiliar 0 desenvolvimento de programas;Metodo lo gia p ar a 0Desenvo lv irnen to de Prograrna sl jl.er especificacao do problema ate 0 final, de forma a compreender de que se trata 0 assunto;2)Ler novamente, tomando 0 cuidado de fazer e ressaltar os pontos fundamentais (entrada, safda,restricoes e condicoes de parada);3)Montar 0 cabecalho do programa, inclusive (e principalmente!) os comentarios pertinentes: funcao,entrada, safda, restricoes e condicoes de parada.4)Escrever em portugues, da forma que deseja, a sequencia de acoes necessarias a obtencao dosresultados desejados. Importante: evite, neste momento, a utilizacao de nomes de variaveis, Utilize atecnica de refinamentos sucessivos para transformar procedimentos complexos em outros mais simples,ate obter urn texto baseado apenas em acoes simples, estruturas de selecao e repeticao. Ao fim dessepasso, devera ser possfvel visualizar as estruturas de repeticao e selecao necessarias ao algoritmo final.5)Monte 0 dicionario de dados d programa, baseando-se no seguinte roteiro:5.1)defina as constantes existentes no problema (ex: mimero de elementos de urn conjunto,valores maximos ou mfnimos de algum dado, etc.);

    - 27-

  • 5/16/2018 Program a Cao

    28/61

    Departamento de Informatica - UFES Apostila de Programacao

    5.2)defina as variaveis necessarias para receber os valores de entrada (uma variavel para cadadado de entrada). Estas entradas ja estao disponfveis nos comentarios do cabecalho;5.3)defina as variaveis de safda necessarias para escrever os resultados desejados. Novamente,os comentarios do cabecalho servirao de base para este passo;5.4)defina as variaveis necessarias ao calculo (0 algoritmo em portugues pode ser uti! para estatarefa). Por exemplo: para calcular a media de urn conjunto de valores, necessita-se do valor acumuladodestes valores e do mimero de elementos do conjunto;5.5)defina as variaveis necessarias ao controle de fluxo de processamento do programa (0algoritmo em portugues vai ajudar). Por exemplo: se 0 programa deve parar ao processar 0 centesimoelemento de entrada, entao sera necessaria uma variavel para controle do mimero de elementosprocessados (urn contador). As variaveis de controle estao sempre associadas as condicoes testadas nasestruturas de selecao e repeticao do problema, portanto, utilize 0 algoritmo em portugues para auxiliartambem este passo.6)Comece a traduzir 0 algoritmo em portugues escrito em 4 partes para 0 C, utilizando as constantes evariaveis descritas no dicionario de dados montado no passo 5.7)Verifique se todas as variaveis foram devidamente inicializadas (veja observacoes abaixo). Caso naotenham sido, identifique 0momenta ideal de sua inicializacao e inc1ua-a no algoritmo escrito no passo6.8)Verifique a correcao do programa atraves de urn ou mais testes de mesa (''teste chines").OBSERV A~OES: RESISTA a tentacao de saltar as fases desta metodologia. Criando 0 habito de utiliza-la, vocepodera identificar adaptacoes que se ajustem melhor a sua forma de trabalho, mas, ACREDITE, todosos passos descritos acima sao necessaries para a construcao de urn programa. 0 cabecalho do programa, inc1uindo seus comentarios (funcao, entrada, safda, parada erestricao) deve ser escrito antes do dicionario de dados e corpo do programa. NAo OS IMAGINECOMO ACESSORIOS OU PERDA DE TEMPO. ELES TE AJUDARAO NO RESTANTE DE SEUTRABALHO!! ! Os programas basicos descritos neste capitulo enos capftulos subsequentes vao auxilia-lo adefinir a estrutura do problema. Estude-os com atencao: Sempre que identificar uma estrutura de repeticao, havera uma ou mais variaveis associadas asua condicao de parada. Verifique, entao, que: a)estas variaveis tenham recebido urn valor inicial antesdo inicio da repeticao: b)em algum ponto da repeticao 0 valor de pelo menos uma destas variaveis eatualizado de maneira a tomar falsa a condicao de continuidade da repeticao, Utilize nomes de variaveis que descrevam a sua funcao; nunca use a mesma variavel paraexecutar duas funcoes diferentes.

    111.9 - Programas ExemplosA)Calcular as rafzes de uma equacao do segundo grau, lidos os valores dos coeficientes A, Be C:Algoritmo:Leitura de valoresCalculo de deltaSe delta e maior ou igual a zero: Calcular as rafzes reaisSenao: Nao ha rafzes reais

    - 28-

  • 5/16/2018 Program a Cao

    29/61

    Departamento de Informatica - UFES Apostila de Programacao

    Calcular as rafzes reais:Se delta e igual a zero: calcular raiz iinica.Se nao: calcular rafzes distintasmainu] I*Funcao: Calcular as rafzes reais de uma equacao de segundo grau.Entrada: os coeficientes A, B e C

    Safda: as raizes reais da equa~ao*1float A, B, C, delta, raizDelta, raiz l, raiz2;Scanf("%f %f %f', &A, &B, &C);Ilcalcular deltadelta = B * B - 4 * A * C;if (delta >= O){if (delta = = O){

    raiz l = (-I) * B I (2 * A);printf("As duas raizes sao iguais a: %f.", raiz l);}else{ raizDelta = sqrt(delta);raiz l = ((-I) * B + raizDelta) I (2 * A);raiz2 = ((-I) * B - raizDelta) I (2 * A);printf("As duas raizes sao: %f e %f', raiz l , raiz2);}}else { printf("Nao existem raizes reais desta esquacao !");}

    }B)Imprimir a primeira, segunda e terceira potencias dos mimeros pares entre 2 e 50, inclusive:maintj]

    int numero, potencial, potencia2, potencia3;numero = 2;while (numero

  • 5/16/2018 Program a Cao

    30/61

    Departamento de Informatica - UFES Apostila de Programacao

    printf("%d %d %d", potencial, potencia2, pontecia3);numero = numero + 2;}

    }C)Imprimir da primeira a vigesima potencia dos mimeros inteiros pares entre 2 e 50, inclusive:maintj]

    int numero, potencia, i;numero = 2;while (numero

  • 5/16/2018 Program a Cao

    31/61

    Departamento de Informatica - UFES Apostila de Programacao

    contaTermos = contaTermos + 1;} while(contaTermos != 50);}E)Calcular 0 Maximo divisor comum entre dois mimeros:o MDC de dois mimeros pode ser obtido escolhendo 0 maior deles e subtraindo-lhe 0 valor do menos.Esta operacao e repetida ate que os dois sejam iguais, cujo valor sera 0 MDC dos mimeros iniciais:33 15 45 1818 15 27 1803 15 09 1803 12 09 0903 09 MDC = 0903 0603 03MDC=03mainu]

    int numero1, numeraZ, auxiliar1, auxiliar2;scanf("%d %d", &numerol, &numer02);auxiliarl = numero 1;auxiliar2 = numeroz;while (auxiliar1 != auxiliar2){if (auxiliarl > auxiliar2){auxiliarl = auxiliarl - auxiliar2;}

    else { auxiliar2 = auxiliar2 - auxiliar 1;}}}F)Calculo do maior mimero dentre N lidos.Dado urn mimero N do meio extemo, representando a quantidade de mimero a serem lidos, 0 maiordesses mimeros e encontrado atraves do seguinte programa:mainu] /*Restricao: 0 numero N nao pode ser negativo ou zeroParada: apos a leitura do N-esimo numero*/

    int n, i;

    - 31 -

  • 5/16/2018 Program a Cao

    32/61

    Departamento de Informatica - UFES Apostila de Programacao

    float numero, maior;printf("Entre com 0 numero de termos a serem lidos: ");scanf("%d", &n);printf("Entre com 0primeiro numero: ");scanf("%f', &numero);maior = numero;for(i=2; i-c=n; i++){printf("Entre com proximo numero: ");scanf("%f', &numero);

    if(numero > maior){maior = numero;}

    }printf("Maior = %f', maior);

    }G)Calculo do maior mimero positivo sem saber quantos sao previamente.Dada uma quanti dade indefinida de valores positivos a serem lidos, 0 programa a seguir determina qualeo maior deles.#define delimitador -1maintj] /*Restricao: os mimeros devem ser inteiros positivosParada: ao ser lido 0 valor -1*/

    int numero, maior;printf("Entre com 0primeiro numero: \n");printf("Digite -1 para encerrar a entrada de dados\n");scanf("%d", &numero);maior = numero;while (numero != delimitador){if (numero >maior){maior = numero;}printf("Entre com 0 proximo numero: \n");printf("Digite -1 para encerrar a entrada de dados.\n");

    - 32-

  • 5/16/2018 Program a Cao

    33/61

    Departamento de Informatica - UFES Apostila de Programacao

    scanf("%d", &numero);}if (maior l=delimitadorj]printf("Q maior numero eh: %d", maior);}else { printf("Nao foi lido nenhum numero positivo");}

    }

    Lista de exerciciosl)Construa urn programa que apresente os 100 primeiros mimeros Impares.2)Construa urn programa que calcule e apresente todos os divisores de urn mimero lido.3)Construa urn programa que apresente os 200 primeiros mimeros primos.4)Construa urn programa que apresente os 100 primeiros mimeros de uma Progressao Geometrica,sendo lidos 0 primeiro termo e a razao.5)Fazer urn programa que calcule e escreva uma tabela de graus centigrados em funcao de grausfarenheit que variam de 50 a 150 de 1 em 1.6)Um comerciante deseja fazer 0 levantamento do lucro das mercadorias que ele comercializa. Paraisto, ele reuniu as seguintes informacoes: mimero de mercadorias, preco de compra e preco de venda.Fazer urn programa que:

    Determine e escreva quantas mercadorias proporcionam:lucro < 10%10% < lucro < 20%lucro > 20% Determine e escreva 0 valor total de compra e de venda de todas as mercadorias, assimcomo 0 lucro total.

    7)Suponha que a populacao de urn pais A seja de 9.000 habitantes com uma taxa anual de crescimentode 3% e que a populacao de urn pais B seja, aproximadamente, de 20.000 de habitantes com uma taxaanual de crescimento de 1,5%, fazer urn programa que calcule e escreva mimero de anos necessariespara que a populacao de pais A ultrapasse ou se iguale a populacao do pais B, mantidas estas taxas decrescimento.8)Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou nao de urn novoproduto lancado no mercado. Para isso, obteve, para cada pessoa entrevistada, informacoes a respeitodo sexo do entrevistado e sua resposta (S = Sim ou N = Nao), Sabe-se que foram entrevistados 2000pessoa, fazer urn programa que calcule e escreva:

    - 33-

  • 5/16/2018 Program a Cao

    34/61

    Departamento de Informatica - UFES Apostila de Programacao

    0mimero de pessoas que responderam sim 0mimero de pessoas que responderam nao A porcentagem de pessoas do sexo ferninino que responderam sim A porcentagem de pessoas do sexo masculino que responderam nao

    9)0 sistema de avaliacao de uma deterrninada disciplina obedece aos seguintes criterios: Durante 0 semestre sao dadas tres notas. A nota final e obtida pela media aritmetica das notas dadas. E considerado aprovado 0 aluno que obtiver nota final superior ou igual a 60 e que tivercomparecido a urn minimo de 40 aulas.Fazer urn programa que: Leia urn conjunto de dados contendo 0 mimero de matrfcula, as tres notas e frequencia(rnimero de aulas frequentadas) de 100 alunos Calcula:a) a nota final de cada alunob) a maior e a menor nota da turmac) a nota media da turmad) 0 total de alunos reprovadose) a porcentagem de alunos reprovados por frequencia insuficiente Escreva:a) para cada aluno, 0 mimero de matrfcula, a frequencia, a nota final e 0 c6digo (A =aprovado e R = reprovado).b) 0 que foi calculado de (a) a (e).

    10)Escreva urn programa que encontre 0 maior e 0 segundo maior mimero de uma serie de mimeroslidos do tec1ado.11)Fa9a urn programa para ler uma sequencia de mimeros inteiros positivos (urn por vez), e verificar seeles sao pares ou frnpares.12)Dada a serie de Fibonacci

    S = 2 3 5 8 13 21 3455 .....Escreva urn programa que gere essa serie ate 0 n-esimo termo (n sera lido).Dica: leia os dois primeiros termos, esta serie e tal que cada mimero a partir do terceiro e a soma dos dois anteriores.

    13)Escreva urn programa para ler 50 dados do tipo base e altura, que contem as medidas de diferentesretangulos, Imprirnir 0perfrnetro e a area de cada retangulo,14)Escreva urn programa para calcular 0 calor de 1t usando a f6rmula:

    1t = -V Irefazer essa parada!!!!!!

    - 34-

  • 5/16/2018 Program a Cao

    35/61

    Departamento de Informatica - UFES Apostila de Programacao

    Escreva urn programa para ler uma sequencia de 30 c6digos de vendedores de uma firma comercial,juntamente com os respectivos totais de vendas dimas e verificar quantos deles estao na faixacompreendida entre R$ 500,00 e R$ 1500,00. Imprimir uma lista listagem contendo todo os c6digosdos vendedores situados no intervalo especificado, e a quantidade de vendedores neste intervalo.16)Leia uma lista de dados contendo 0 mimero da conta e 0 saldo medic dos correntistas de umacademeta de poupanca, Imprimir uma listagem contendo 0 total de:a)c1ientes bons: 500,00 1000,00b)c1ientes razoaveis: SALDO MEDIO < 500,00c)c1ientes prioritarios: SALDO MEDIO > 1000,00Imprima tambem a lista dos c1ientes prioritarios, 0 flag de safda para 0 comando de repeticao serareferente ao SALDO MEDIO, saira quando este for igual a zero.17)Um service de correspondencia sentimental deseja obter informacoes sobre seus c1ientes. Cadacliente fomeceu as seguintes informacoes:MATRICULA, SEXO ('M' ou 'F'), IDADE, ALTURA (em m), PESO (em Kg), COR DOS OLHOS(I-azul, 2-castanhos, 3-outros), COR DOS CABELOS (I-castanhos, 2-loiros, 3-outros).Escrever urn programa que leia estes dados e imprima as matrfculas de:a) todos os homens loiros de olhos azuis e altura maior que 1.75 m, pesando entre 75 Kg e 95Kg.b) Todas as mulheres de olhos castanhos, altura entre 1.65 me 1.75 m, pesando menos de 60Kg.Utilizar urn flag para indicar 0 final da entrada de dados.18)Escreva urn programa para ler uma sequencia de dados contendo a matrfcula e a altura dosfuncionarios de uma empresa. Obter uma listagem para 0 Departamento de Educacao Ffsica eDesportos contendo a matrfcula e a medida de todos funcionarios altos (acima de 1.80 m). Imprimir aaltura media dos funcionarios e 0 total de:

    Funcionario baixos (altura inferior a 1.65 m); Funcionarios de altura mediana (1.65 m

  • 5/16/2018 Program a Cao

    36/61

    Departamento de Informatica - UFES Apostila de Programacao

    s = (2)Al/50 + (2)A2/49+ (2)A3/48+ ...+ (2)A50/1Acertar essa parada!!!!!!22)Fa9a urn programa que calcule a seguinte soma:Escrever a soma! !!!23)Faca urn programa que calcule a seguinte soma:Escrever a soma! !!!24)Construa urn programa que:

    Leia diversos pares de mimeros naturais positivos; Para cada ar de valores, calcule 0 valor do quociente e do resto da divisao inteira denum_l por num_2; (num_l > num_2) Apresentar 0 resultado para cada par de valores.

    25)Escreva urn programa que leia 0 mimero de inscricoes e a altura de mocas para urn concurso debeleza. Calcule e escreva as duas maiores alturas e quantas mocas as possuem.26)Um banco deseja saber as seguintes informacoes:a)o c1iente corn maior volume de depositos ern cada agencia;b)a agencia corn maior saldo (deposito-saldo) ern cada regiao;c)a agencia que possui 0 c1iente corn maior saldo no banco.Fazer urn programa que determine essas informacoes para 0 banco, tendo como dado de entrada aregiao, agencia, conta, movimento (deposito) e valor.

    - 36-

  • 5/16/2018 Program a Cao

    37/61

    Departamento de Informatica - UFES Apostila de Programacao

    - 37-

  • 5/16/2018 Program a Cao

    38/61

    Departamento de Informatica - UFES Apostila de Programacao

    CAPITULO IVMODULARIZA~AOObjetivos Definir 0 que e modularizacao e quais as suas vantagens; Apresentar a estrutura de urn subprograma; Apresentar 0metodo de modularizacao atraves de funcao e procedimentos, enfatizandoo conceito de passagem de parametres: Apresentar exemplos de modularizacao; Definir estrategias que contribuam para assegurar a qualidade da modularizacao.

    IV.l - A Necessidade de Modularlzacao na ProgramacaoEstudos da psicologia mostram que 0 ser humano normal e capaz de resolver problemas que envolvam7 mais ou menos 2 variaveis simultaneamente. Urn problema e complexo se envolve mais do que 9 ou10 variaveis, Como, entao, podemos resolver problemas deste tipo?A solucao que encontramos para solucionar estes problemas e dividir em problema complexo em variessubproblemas elementares, onde nao estejamos sujeitos a essa limitacao humana. Esta estrategia sesolucao de problemas e comumente conhecida com 0 a tecnica de Dividir para Conquistar, a qual e 0fundamento basico para a Modularizacao.Neste sentido, a modularizacao de programas consiste da divisao do programa em m6dulos ousubprogramas, que nada mais sao que urn conjunto de comandos agrupados com a finalidade deexecutar rna determinada funcao,Alem disso, a modularizacao e uma tecnica de programacao que permite a aplicacao direta dosrefinamentos sucessivos, isto e , possibilita que haja urn mapeamento entre os diversos nfveis dealgoritmos criados quando utilizamos refinamentos e 0 pr6prio ato de programar.Urn outro problema que nos defrontamos quando estamos programando e a repeticao de c6digo. Voceja deve ter notado que certos trechos dos seus programas se repetem em varies momentos, tal qualforam escritos num primeiro instante ou de uma maneira muito aproximada. Esta repeticao de c6digo,alem de ser algo desagradavel para 0 programador, toma 0 programa redundante e dificulta, em ultimainstancia, a sua legibilidade.A modularizacao e uma solucao para este problema pois urn m6dulo pode ser ativado em pontosdiferentes de urn mesmo programa.Para falarmos urn pouco mais sobre as vantagens da modularizacao necessitamos definir algunsconceitos sobre qualidade de programas. Urn programa e de boa qualidade quando apresenta asseguintes caracterfsticas:

    Confiabilidade: 0programa esta correto e e confiavel, Legibilidade: 0 programa e facil de ser lido e entendido por urn programador de nfvelmedic. Manutenibilidade: 0 programa e facil de ser modificado. Quando 0 usuario requeremodificacoes no programa, fruto de novas necessidades, a atualizacao do programa de sernatural. Flexibilidade: 0programa e facil de ser reutilizado; nao possui muitas restricoes,Neste contexto, podemos criar agora uma serie de vantagens da modularizacao: Facilita 0 projeto de sistemas - incentiva a tecnica de refinamentos sucessivos. Minimiza a manutencao de programas - modificacoes no programa precisam serrealizadas apenas no m6dulo correspondente, sem ter de alterar 0 resto do programa.

    - 38-

  • 5/16/2018 Program a Cao

    39/61

    Departamento de Informatica - UFES Apostila de Programacao

    Melhora a legibilidade dos programas - nao ha necessidade de se entrar em detalhes deprogramacao para se entender 0 que 0 programa faz. Viabiliza a validacao - testes e correcoes de cada segmento podem ser realizados emseparado, so reunindo os modules quando todos estiverem devidamente validados. Permitir a divisao de tarefas em uma equipe - cada modulo pode ser realizado por urnprogramador diferente. Facilita a reutilizacao de codigo:Em trechos onde ocorre repeticao de codigo no programa.Em trechos onde ocorre repeticao parcial de codigo, onde so sao modificados osargumentos utilizados. Estimula 0 encapsulamento de informacoes: 0 programador que usara 0 modulo soprecisa saber 0 que 0modulo faz e nao como faz.

    IV.2 - Modulariza-;iio em CAgora que ja estamos familiarizados com 0 conceito de modularizacao e conhecemos as suasvantagens, podemos nos ater a tecnica de modularizacao que e implementada em C.A ferramenta disponfvel em C para modularizacao sao as funcoes.Funcoes sao segmentos de programa que executam uma determinada tarefa. Alguns exemplos defuncoes ja usadas aqui sao: printf, scanf e sqrt.As funcoes escritas pelo programados, e que sao usadas para fazer a modularizacao, sao denominadasfuncoes de usuario ou rotina de usuario,IV.2.1 - A Estrutura das Funcoes de UsuarioA estrutura de uma funcao de usuario e muito parecida com a estrutura dos programas queapresentamos ate agora. Uma funcao de usuario constitui-se de urn nome pelo qual faremos referencia aela, de uma lista de argumentos passados a ela, e de urn bloco de instrucoes que definem 0 que serafeito por essa funcao.Nas funcoes podemos dec1arar variaveis, denominadas locais, que tern vida e escopo somente durante aexecucao da funcao, Estas variaveis so podem ser usadas na funcao onde foram dec1aradas.Urn exemplo de funcao e dado a seguir:float media2 (float a, float b){float media;

    media = (a + b) / 2.0;return(media);

    }Nesse exemplo 0 nome da funcao e media2 e ela recebe dois argumentos do tipo float. A media dessesvalores recebidos e calculada e retornada para 0 programa que fez a chamada a funcao. Esse valor deretorno e do tipo float, conforme e indicado antes do nome da funcao,Depois de definida a funcao, podemos chama-la dentro de urn programa. Urn exemplo de chamada dafuncao media2 e dado abaixo:

    mainO {

    - 39-

  • 5/16/2018 Program a Cao

    40/61

    Departamento de Informatica - UFES Apostila de Programacao

    float numl, num2, media;printf("Digite dois numeros:\n");scanf("%f %f', &numl, &num2);media = media2(numl, num2); //aqui e feita a chamada da funcaoprintf("A media dos mimeros fornecidos eh: %f', media);

    }IV.2.2 - Definh;ao de Fun-;aoA sintaxe de definicao de uma funcao e a seguinte:

    tipo_de_retorno nome(tipol argl, tip02 arg2, .... , t ipoN argN) {-ccomandos>

    }A primeira linha e dita declaracao da funcao, nela encontramos 0 tipo que a funcao retorna, 0 nomedela e a lista de argumentos. Ap6s a declaracao, encontramos a lista de comandos entre as chaves.o tipo de retorno serve para especificar qual 0 tipo de dados retornado pela funcao, podendo ser do tipoint, float, etc. Nos casos em que a funcao nao retorna nenhum tipo, devemos defini-Ia como void, ouseja, sem retorno.A lista de argumentos serve para dizer quais sao os valores recebidos pela funcao e seus respectivostipos.IV.2.3 - Onde colocar as Fun-;oesAs funcoes podem ser dec1aradas no mesmo arquivo da main ou num outro arquivo separado.IV.2.3.1 - Funcdes no mesmo arquivoQuando uma funcao e dec1arada no mesmo arquivo existe a possibilidade dela ser dec1arada antes oudepois da main.IV.2.3.1.1 - Fun-;oes no mesmo arquivo e antes da mainQuando as funcoes sao dec1aradas antes da main nao e necessario adicionar nenhuma outra instrucao, Asintaxe fica assim:

    tipo nome_funcao(lista_de_argumentos) {comandos //defini~ao da funcao}

    void maintj]

    - 40-

  • 5/16/2018 Program a Cao

    41/61

    Departamento de Informatica - UFES Apostila de Programacao

    variavel = nome_funcao(lista_de_argumentos); IIchamada da funcao

    }IV.2.3.1.2 - Funeaes no mesmo arquivo e depois da mainQuando a funcao e definida depois da main e necessario incluir urn prototipo da funcao chamada. Urnprototipo constitui-se do tipo de retorno da funcilo, do nome da fun~ao e quantidade de argumentosjunto com seus tipo. A sintaxe dessa declaracao e a seguinte:

    tipo nome_funcao(lista_de_argumentos);void mainfj]

    variavel = nome_funcao(lista_de_argumentos); IIchamada da funcao

    }tipo nome_funcao(lista_de_argumentos) {comandos //defini~ao da funcao}

    IV.2.3.2 - Funcdes em arquivo separadoNesse caso e necessario incluir 0 arquivo onde se encontra a funcao ao arquivo onde ela esta sendousada. Essa inclusao e feita atraves do comando #include que diz para 0 compilador na hora dacompilacao que ele precisa fazer alguma(s) inclusaots),Supondo que a funcao esteja no arquivo funcoes.h, a sintaxe ficaria assim:#include "funcoes.h"maint)]

    variavel = nome_funcao(lista_de_argumentos);

    }IV.2.4 - Hierarquia das fun,_;oes

    - 41 -

  • 5/16/2018 Program a Cao

    42/61

    Departamento de Informatica - UFES Apostila de Programacao

    Quando uma funcao chama a outra, dizemos que a funcao que chama tern uma hierarquia superior a dafuncao chamada.As funcoes com hierarquia inferior devem ser dec1aradas antes das funcoes com hierarquia superior.Isso deve ser feito para que ao se fazer a chamada de uma funcao, ela ja seja conhecida.IV.2.S - RecursaoFuncao recursiva e uma funcao que faz chamada a si mesma.E importante ressaltar que a cada nova chamada da funcao recursiva urn novo conjunto de variaveis ecriado.Exemplo: urn born exemplo do uso de funcao recursiva e 0 calculo do fatorial de urn numero.int fatorial (int numero){

    if (numero < O){return 0;}

    if (numero = = O){return 1;}return (numero * (fatorial (numero-Ijj);}

    o primeiro "if' avalia se 0mimero de entrada e menor que zero, caso seja a funcao retorna zero poisnao existe fatorial de mimero negativo. Ja quando 0mimero e igual a zero, 0 segundo "if' faz com quea funcao retorne urn pois 0 fatorial de zero e urn. Para os mimeros maiores que zero, a funcao retoma amultiplicacao do mimero pelo fatorial do seu antecessor. Repare que para esse ultimo caso, a recursaoira terminar quando 0 antecessor do mimero for zero pois a chamada de "fatorial(O)" nao chamara outravez a funcao fatorial conforme visto anteriormente.

    - 42-

  • 5/16/2018 Program a Cao

    43/61

    Departamento de Informatica - UFES Apostila de Programacao

    CAPITVLOVESTRVTVRAS

    Objetivos Apresentar 0 que e uma estrutura e para que ela serve Mostrar a declaracao de uma estrutura e como acessar seus elementos Mostrar a relacao entre estruturas e funcoes

    V.I - 0 que e uma estruturaUma estrutura e uma colecao de variaveis, que podem ou nao ser de tipos diferentes, colocadas sob urniinico nome para manipula-las. As estruturas ajudam na organizacao do c6digo e facilitam a vida doprogramador pois juntam variaveis relacionadas e permitem que elas sejam tratadas como uma unidademaior.Urn born exemplo do uso de estruturas eo armazenamento de datas. Uma data e caracterizada por urndia, urn mes e urn ano. Caso 0 programador nao pudesse utilizar uma estrutura, ele teria que declaratres variaveis separadamente e trabalhar com elas em paralelo. Isso poderia gerar alguma confusao e,em alguns casos, perda de algumas informacoes, Mas isso pode ser evitado quando 0 programador criauma estrutura de nome data, por exemplo, e dentro dela declara tres variaveis: dia, mes e ano. Comisso, ele passaria a trabalhar com uma variavel do tipo data que por sua vez possuiria as tres variaveis jacitadas anteriormente.V.2 - Deelaracao de uma estruturaA sintaxe de declaracao de uma estrutura e a seguinte:struct nome_da_estrutura {

    declaracaodas, variaveis};

    o nome da estrutura deve ser algo que lebre 0 que ela representa para que outros programadorespossam entender 0 seu significado. No exemplo anterior, urn born nome para a estrutura seria "data" eela ficaria assim:struct data {int dia;int mes;int ano;};

    Para usarmos essa estrutura durante 0 programa precisamos declarar uma variavel de seu tipo. Feitoisso, poderemos manipula-la conforme veremos na pr6xima sessao. A declaracao de uma variavel dotipo de uma estrutura e feita assim:struct nome_da_estrutura nome_da_ variavel;No exemplo a seguir veremos a declaracao de uma variavel do tipo estrutura data:mairuj]

    - 43-

  • 5/16/2018 Program a Cao

    44/61

    Departamento de Informatica - UFES Apostila de Programacao

    struct data aniversario;

    }V.3 - Manlpulacao dos elementos da estruturaA manipulacao dos elementos de uma estrutura e muito simples. Os elementos da estrutura podem sermodificados durante a declaracao da variavel, Como ilustracao disso, tomemos 0 exemplo 0 seguinteexemplo:struct ponto {int x;int y;

    };mainO {

    struct ponto maxPt = { 500, 1000 }; Ilaqui a variavel maxPt e declarada e asIisuas variaveis internas da estrutura passam aIlvaler: x = 500 e y = 1000}

    Dutra forma de modificar os elementos da estrutura e mostrada no proximo exemplo.Exemplo: tomemos a estrutura data declarada anteriormente.maim)!

    struct data nascimento;printf("\nDigite 0 dia do seu nascimento: ");scanf ("%d", &nascimento.dia); Ilobserve que "nascimento.dia" indica que voce estaIlarmazenando 0 dado de entrada na variavel "dia" que estaIidentro da variavel aniversario, que por sua vez e do tipoII struct data.printf("\nDigite 0mes do seu nascimento: ");scanf ("%d", &nascimento.mes);printf("\nDigite 0 ano do seu nascimento: ");scanf ("%d", &nascimento.ano);printf("\nVoce nasceu no dia %d do mes %d do ano %d\n", nascimento.dia, nascimento.mes,nascimento.ano );

    }V.4 - 0 comando typedef

    - 44-

  • 5/16/2018 Program a Cao

    45/61

    Departamento de Informatica - UFES Apostila de Programacao

    Esse comando e bastante iitil para atribuirmos novos nomes a tipos de dados. Ele permite, por exemplo,que voce atribua ao tipo "int" 0 nome "tipoDeEntrada" para designar que 0 tipo de entrada de umadeterminada funcao sera 0 "int".A sintaxe desse comando e muito simples e pode ser vista a seguir:typedef tipo novo_nome;

    No exemplo citado acima, a renomeacao do tipo "int' ficaria assim:typedef int tipoDeEntrada;Assim, quando fizermos as declaracoesint entrada;e tipoDeEntrada entrada;estamos dec1arando a mesma coisa.Esse comando nos permite tambem renomear estruturas criadas por nos, para que a declaracao de umavariavel do tipo dessa estrutura seja menos trabalhosa.Tomando como exemplo a estrutura dec1arada anteriormente para representar urn ponto, poderfamosusar 0 typedef do seguinte modo:typedef struct ponto {int x;int y;} ponto;Dessa forma uma variavel que antes era dec1ara fazendostruct ponto centro;pode ser dec1arada usando

    ponto centro;Outra forma de se usar 0 typedef com estruturas e fazer:typedef struct ponto ponto;struct ponto {int x;int y;

    };A declaracao de uma variavel ficaria do mesmo jeito do caso anterior.v.s - Estruturas e Fum;oesAs estruturas sao muito iiteis quando estamos trabalhando com funcoes pois elas podem agrupar dadosque serao passados como parametro para as funcoes e permitem que uma funcao retome mais de urnvalor.V.S.I - Estruturas como parametresA passagem de estrutura como parametro para funcao e muito utilizada pois permite que os dados comcaracterfsticas comuns cheguem agrupados e tambem por diminuir 0mimero de parametres da funcflofacilitando 0 seu entendimento.A declaracao de uma funcao que recebe uma estrutura como parametro e feita da mesma forma que ade uma funcao que recebe apenas tipos basicos de dados como parametro,

    - 45 -

  • 5/16/2018 Program a Cao

    46/61

    Departamento de Informatica - UFES Apostila de Programacao

    A seguir mostraremos urn exemplo de uma funcao que recebe uma variavel do tipo ponto dec1aradoanteriormente e retorna 0 quadrante ao qual ele pertence .int qualQuadrante (ponto p){1*A funcao retorna 0 quando p for parte do limite de quadrantes, 1 quando p pertencer ao

    1 quandrate, 2 quando pertencer ao 2 quadrante, 3 se pertencer ao 3 quadrante e 4caso seja do 4 quadrante. *1if (p.x = = 0 II p.y = = O){return 0;}if (p.x > O ){if(p.y> O ){return 1;

    }else { return 4;}}

    else { if(p.y> O ){return 2;}else { return 3;}

    }}

    V.S.2 _ Estruturas como tipo de retornoEstruturas sao usadas com frequencia quando queremos que uma funcao retorne mais do que valor.Nesse caso precisamos dec1arar que 0 tipo de retorno da funcao e uma determinada estrutura.Tome como exemplo uma funcao que recebe tres mimeros inteiros distintos e retorna 0 maior e 0menor deles.Para esse exemplo usaremos uma nova estrutura:typedef struct maiorEmenor {int maior;int menor;}mEm;

    Agora vejamos como fica 0prototipo dessa funcao:mEm maior_menor (int , int , int );ou struct maiorEmenor maior_menor(int , int , int );Agora podemos definir a funcao, ela fica assim:

    - 46-

  • 5/16/2018 Program a Cao

    47/61

    Departamento de Informatica - UFES Apostila de Programacao

    mEm maior_menor (int a, int b, int c){mEms;if (a>b){if (a>c){if (c>b){s.maior = a;s.menor = b;}else {

    s.maior = a;s.menor = c;}}else { s.maior = c;s.menor = b;}}

    else { if (a-ccj]if (cc-b)]s.maior = c;s.menor = a;}

    else { s.maior = b;s.menor = a;}}else { s.maior =b;s.menor = c;}}

    return s;}V.6 - Tipos Abstratos de DadosTipos abstratos de dados sao tipos de dados criados pelo programador de acordo com as suasnecessidades para resolver urn determinado problema. A definicao de urn tipo abstrato de dados econstitufda de:

    Definir os elementos basicos Implementar construtores para gerar novos elementos a partir dos elementos basicos Implementar operacoes sobre esses elementos

    - 47-

  • 5/16/2018 Program a Cao

    48/61

    Departamento de Informatica - UFES Apostila de Programacao

    Podemos definir urn tipo abstrato de dados para representar os pontos do plano XY. Para is so considerea estrutura denominada ponto.

    typedef ponto {int x;int y;

    } ponto;Agora j a sabemos como sao os elementos basicos desse tipo. 0 proximo passo e implementar umafun~ao que opere elementos desse tipo. Urn exemplo de uma operacao entre elementos desse tipo e 0calculo da distancia entre dois pontos.

    float distanciaPontos (ponto a, ponto b) {float distancia, deltaX, delta Y;deltaX = a.x - b.x;deltaY = a.y - b.y;distancia = sqrt( deltaX*deltaX+delta Y*delta Y);return distancia;}

    Podemos ainda verificar se urn dado ponto representa a origem ou nao e tambem calcular seu simetricoem relacao a origem.

    int origem(ponto p) {if (p.x && p.y){

    return 0;}else {

    return 1;}}ponto simetrico (ponto p) {

    p.x = -p.x;p.y = -p.y;return p;}

    Por ultimo vamos fazer 0 calculo do deslocamento de urn ponto.

    - 48-

  • 5/16/2018 Program a Cao

    49/61

    Departamento de Informatica - UFES Apostila de Programacao

    ponto desloca (p on to p, int deslocam ento) {p.x = p.x + deslocamento;p.y = p.y + deslocamento;r eturn p ;

    }

    - 49-

  • 5/16/2018 Program a Cao

    50/61

    Departamento de Informatica - UFES Apostila de Programacao

    CAPITULO VIVETORES

    Objetivos Introduzir a estrutura de dados vetor, explicar seu conceito e mostrar sua utilidade; Apresentar as operacoes basicas sobre vetores.

    VI.I _ Conceito de vetores e sua utili dadeUrn vetor e uma estrutura de dados composta homogenea, isto e, ela possui, em geral, mais de urnelemento (por isso, composta) sendo que estes elementos sao sempre se urn mesmo tipo (por isso,homogenea), Tal qual na matematica, os vetores possuem uma dimensao (que corresponde ao mimerode elementos do vetor) e seus elementos sao acessados atraves de indices. A figura abaixo representaurn vetor com sete elementos inteiros.

    Indice: 0 1 2 3 4 5 6I 9 5 15 6 3 2 12Mas, voce ja deve estar questionando, para que servem os vetores?Nem sempre os tipos basicos de dados (int, float, char) sao suficientes para exprimir estruturas dedados em algoritmos. Considere 0 problema em que urn professor de uma turma de 50 alunos desejasaber quais desses sao bons alunos (tiverem nota acima da media da turma). Com os instrumentos quedispomos ate agora necessitarfamos ler as notas dos 50 por duas vezes: uma para calcular a media eoutra para verificar quais alunos tiveram notas superior a media. Esta dupla leitura nao e muitoconveniente, concorda?! A solucao para este problema se da atraves da utilizacao de vetores.A utilizacao de urn vetor se faz necessaria sempre que for preciso armazenar uma quanti dade finita dedados de urn tipo em comum, para posterior processamento.VI.2 _ Deelaracao de VetorUrn vetor e definido da seguinte maneira:tipo_componentes nome_vetor[ tamanho ];tipo_componentes indica de que tipo sao os elementos do vetor, 0 tamanho indica quantos elementos 0vetor podera armazenar. 0vetor apresentado na sessao anterior possui a seguinte definicao:int vetor_inteiros[7];o mimero de componentes de urn vetor e fixo e determinado na sua declaracao.o tamanho de urn vetor e determinado em sua declaracao, antes da execucao do programa (tamanhoffsico), isto significa que 0 tamanho de urn vetor nao podera ser lido ou alterado durante a execucao doprograma. Verifica-se entao que para armazenar dados em vetores e necessario conhecerantecipadamente a quantidade maxima de elementos a serem processados. Quando este mimero nao forconhecido, deve-se maximizar 0 tamanho do vetor baseado em criterios intuitivos (born senso )relacionado ao problema em questao.

    - 50-

  • 5/16/2018 Program a Cao

    51/61

    Departamento de Informatica - UFES Apostila de Programacao

    Por exemplo, para calcular quais as notas dos alunos de uma turma sao maiores que a media, seriapreciso ter-se uma ideia de quantos alunos no maximo uma turma poderia possuir.VI.3 _ Acesso aos elementos do vetorOs elementos do vetor sao acessados atraves da citacao do nome da variavel (que indica qual vetorestamos acessando) e de urn Indice (que determina qual elemento queremos acessar). Este Indice naopode ser urn valor maior que 0 tamanho do vetor menos urn nem tampouco urn valor menor que zero.A sintaxe de acesso a urn vetor e dada por:nome_ vetor[fndice]Exemplo:vetor[3] = 987;vetorjindice+I] = vetor[3*2];VI.4 _ Operacdes basicas sobre vetoresEm C nao existem operacoes pre-definidas para a manipulacao de vetores como urn todo. Por exemplo,nao e permitido ler 0 conteudo de urn vetor inteiro com 0 comando scanf. As operacoes so podem serfeitas para cada elemento do vetor.Portanto, as operacoes basicas de vetor devem ser simuladas atraves de subprogramas. A seguir seraoapresentadas uma serie de operacoes basicas para vetores.Como sabemos, no parametro associado por valor e uma copia do argumento e a duplicacao deestruturas do tipo vetor pode ocasionar problemas de memoria e ineficiencia do programa. A maneirade resolver estes dois problemas e forcar a passagem do vetor por referencia, porem conceitualmente 0uso desse artiffcio e incorreto, devendo ser implementado somente apes ter sido testado e nuncadesacompanhado de urn comentario.Voce vera nos procedimentos apresentados a seguir que urn vetor apesar de nao ser modificado no seuinterior ( e urn argumento de entrada) este e passado por referencia, como por exemplo 0 procedimentopara escrita de urn vetor.Daqui em diante usaremos uma estrutura de dados que contenha 0 vetor e 0mimero de elementos dessevetor. Essa estrutura e da seguinte forma:typedef vetor {tipo_elemento vetor[TAMANHO];int numero_elementos;} vetor;Onde TAMANHO indica 0 tamanho do vetor.VI.4.1- Leitura e EscritaUrn exemplo de uma funcao que faz a leitura dos elementos de urn vetor de inteiros.void leitura_ vetor (vetor vet) {

    int i;for (i = 0; i < vet.numero_elementos; i++){

    - 51 -

  • 5/16/2018 Program a Cao

    52/61

    Departamento de Informatica - UFES Apostila de Programacao

    scanf("%d", &vet.vetor[i]);}}Agora mostraremos uma funcao que imprime os elementos de urn vetor de inteiros.void imprime_ vetor (vetor vet){

    int i;for (i = 0; i < vet.numero_elementos; i++){printf("%d ",. vet.vetor[i]);}}VI.4.2 _ Adi~ao de dois Vetores Numericosvoid soma_vetor (vetor vetl , vetor vet2, vetor vet_soma){

    int i;if(vet1.numero_elementos !=vet2.numero_elementos){printf("\n Vetores com numero de elementos diferente.\n");return;}vet_soma = vet1.numero_elementos;for (i = 0; i < vet1.numero_elementos; i++){vet_soma[i] = vet1.vetor[i] + vet2.vetor[i];}}

    VI.4.3 _ Produto Escalar de dois Vetores Numericosint produto_escalar (vetor vetl, vetor vet2){int prod_escal, i;if(vet1.numero_elementos !=vet2.numero_elementos){

    printf("\n Vetores com numero de elementos diferente.\n");return;}for (i = 0; i < vet1.numero_elementos; i++){prod_escal = prod_escal + vet1.vetor[i] * vet2.vetor[i];}return prod_escal;

    }

    - 52-

  • 5/16/2018 Program a Cao

    53/61

    Departamento de Informatica - UFES Apostila de Programacao

    VI.4.4 - Pesquisa Seqiiencialint pesquisa binaria (vetor vet, int elemento ){I*Funcao: percorre sequencialmente 0 vetor, procurando por urn elemento. Esta funcao retorna 0 valor-1 caso 0 elemento nao seja encontrado. Caso contrario, retorna 0 Indice da posicao do vetor onde 0elemento foi encontrado. *1int i, encontrou, pesq_seq;encontrou = 0;pesq_seq = -1;for (i = 0; i < vet.numero_elementos && !encontrou; i++){if (vet.vetor[i] = = elemento){

    pesq_seq = i;encontrou = 1;}}

    return pesq_seq;}VI.4.S - Pesquisa Blnariaint pesquisa binaria (vetor vet, int elemento){I*Funcao: Percorrer 0 vetor ordenado (ordenado crescente), particionando-o ao meio e procurandodeterminado elemento. Esta funcao retorna 0 valor -1 caso 0 elemento nao seja encontrado. Casocontrario, retorna 0 Indice do vetor onde 0 elemento foi encontrado. * 1

    int inicio, tim, meio;inicio = 0;tim = vet.numero_elementos _ 1;while (inicio vet.vetor[meio]){inicio = meio + 1;

    }else { return meio; lIencontrou!! !}}}

    - 53-

  • 5/16/2018 Program a Cao

    54/61

    Departamento de Informatica - UFES Apostila de Programacao

    return -1;}VI.4.6 - Insercao em Posi~aoPre-determlnada do Vetorvoid insere (vetor vet, int elemento, int posicao){I*Funcao: inserir urn novo elemento numa posicao pre-estabelecida. * 1

    int i;if ((posicao < 0) II(posicao > vet.numero_elementos-l){printf("\nEntrada de Dados Incorreta\n");}else { for (i = numero_elementos _ 2; i > posicao _ 1; i--){

    vet.vetor[i + 1] = vet.vetor[i];}vet.vetor[posicao] = elemento;}}VI.4.7 - Exclusao de Elementos de Vetorvoid excluir (vetor vet, int elemento){I*Funcao: Percorrer 0 vetor sequencialmente procurando 0 elemento. Caso encontre-o retira-lo. Casocontrario, manter 0 vetor inalterado. * 1

    int i, posicao, encontrou;encontrou = 0;posicao = 0;while ((posicao < vet.numero_elementos) && (!encontrou){if (vet.vetor[posicao] == elemento){encontrou = 1;

    for (i = posicao; i < vet.numero_elementos _ 1; i++ ){vet.vetor[i] = vet.vetor[i + 1];}}

    posicao += 1;}}VI.4.S - Ordenaeao pelo Metodo do Menorvoid ordenacao_menor (vetor vet){

    - 54-

  • 5/16/2018 Program a Cao

    55/61

    Departamento de Informatica - UFES Apostila de Programacao

    int posicao, i, indice_menor, menor;for (posicao = 0; posicao < vet.numero_elementos _ 1; posicao++){menor = vet.vetor[posicao];for (i = posicao + I; i < tamanho; i++){if (vet.vetor[i] < menor){menor = vet.vetor[i];indice_menor = i;

    }}vet.vetor[indice_menor] = vet.vetor[posicao];vet.vetor[posicao] = menor;}

    }VI.4.9 - Ordenaeao pelo Metodo da Bolhavoid ordenacao_bolha (vetor vet) {

    int a, b, t;for (a = 1; a < vet.numero_elementos; a++){for (b = vet.numero_elementos _ 1;b >= a; --b){

    if (vet.vetor[b - 1] > vet.vetor[b]){t = vet.vetor[b _ 1];vet.vetor[b _ 1] = vet.vetor[b];vet.vetor[b] = t;

    }}}}VI.S - Exemplo de programa que utiliza vetoresA)Este programa I e dois vetores de mesma dimensao, calcula a sua soma e seu produto escalar,apresenta em seguida os resultados.#define tamanho 100typedef vetor {int vetor[tamanho];int numero_elementos;} vetor;

    void leitura_vetor_inteiros (vetor vet) {

    - 55 -

  • 5/16/2018 Program a Cao

    56/61

    Departamento de Informatica - UFES

    int i;for (i = 0; i < vet.numero_elementos; i++){scanf ("%d", vet.vetor[i]);}

    }

    void escrita_vetor_inteiros (vetor vet){int i;printf("\n") ;for (i = 0; i < vet.numero_elementos; i++){printf("%d ", vet.vetor[i]);}printf("\n") ;

    }

    void soma_vetores_inteiros (vetor vetl , vetor vet2, vetor vetor_soma){int i;if(vet1.numero_elementos !=vet2.numero_elementos){printf("\n Vetores com tamanhos diferentes \n");return;}for (i = 0; i < vet1.numero_elementos; i++){

    vetor_soma.vetor[i] = vet1.vetor[i] + vet2.vetor[i];}}

    int produto_escalar (vetor vetl , vetor vet2){int i, prod_esc;prod_esc = 0;

    - 56-

    Apostila de Programacao

  • 5/16/2018 Program a Cao

    57/61

    Departamento de Informatica - UFES Apostila de Programacao

    if(vet1.numero_elementos !=vet2.numero_elementosHprintf("\n Vetores com tamanh