Você está na página 1de 129

PROF. ANGELINA V.S.

MELAR
ANGELINAMELARE@GMAIL.COM

Linguagem
00110000

2011 FATEC ITU


Prof Angelina V.S.Melar 1

SUMRIO
Lgica de Programao ................................................................................................................... 7 Algoritmo ........................................................................................................................................ 8 Estruturas dos Algoritmos: Linear / Seletiva/ Repetio ............................................................. 10 Mtodo para a construo de Algoritmo ....................................................................................... 10 Etapas de Desenvolvimento .......................................................................................................... 12 Tipos de Algoritmos ...................................................................................................................... 14 1. Tipos de Algoritmos ........................................................................................................... 14 Pseudocdigo ................................................................................................................................ 15 Fluxograma.................................................................................................................................... 16 Diagrama de Chapin ...................................................................................................................... 18 Paradigmas de Programao forma de programar ...................................................................... 19 1. Programao No Estruturada: ........................................................................................... 19 2. Programao Estruturada (Procedural): ............................................................................. 19 3. Programao Orientada a Objetos ...................................................................................... 20 Modularidade ................................................................................................................................ 20 4. Estratgia de Decomposio ou Dividir para Conquistar ............................................... 20 5. Mdulos .............................................................................................................................. 21 Linguagem C ................................................................................................................................. 23 Processo de Compilao e Ciclo de Vida do Programa ................................................................ 24 6. Linguagem C Compiladora ou Interpretadora? ............................................................. 24 7. Ciclo de Vida do Programa ................................................................................................ 24 Ambiente de Desenvolvimento DEV-C++ ................................................................................... 26 1. Ambiente integrado ............................................................................................................ 26 2. Configurando o ambiente e o editor ................................................................................... 26 3. Configuraes para o Windows Vista/7 ............................................................................. 27 4. Digitao do programa ....................................................................................................... 27 5. Gravao do programa ....................................................................................................... 27 6. Compilao e execuo do programa ................................................................................. 27 7. Criando um cdigo fonte padro ........................................................................................ 28 Estrutura do Programa na Linguagem C ....................................................................................... 29 1. Estrutura bsica .................................................................................................................. 29 2. Diretivas ............................................................................................................................. 29 3. Arquivos de Cabealho (header) ........................................................................................ 30 4. Biblioteca ........................................................................................................................... 31 5. Bloco de instrues e Funo MAIN() ............................................................................... 31 6. Projeto ................................................................................................................................ 31 7. Regras de Digitao e Dicas da Estrutura em C ................................................................. 31 8. Comentrios ....................................................................................................................... 32 Variveis........................................................................................................................................ 33 1. O que so variveis? ........................................................................................................... 33 2. Mas em que parte da memria vo os dados? .................................................................... 33 Identificadores ........................................................................................................................... 33 3. Declarao de varivel ....................................................................................................... 34 Constantes ..................................................................................................................................... 35 Tipos de dados ............................................................................................................................... 36 Prof Angelina V.S.Melar 2

1. Numrico ............................................................................................................................ 36 2. Literal/ Cadeia de Caracteres.............................................................................................. 36 3. Lgicas ............................................................................................................................... 37 4. Caracter .............................................................................................................................. 37 5. Espao Alocado de Memria ............................................................................................. 37 6. Modificadores de Tipos ...................................................................................................... 38 Dica: Pode-se definir valores em outras bases (diferente da decimal): ..................................... 38 7. Tabela ASCII (American Standard Code for Information Interchange) ............................ 39 8. Cdigo de Barra Invertida .................................................................................................. 40 Operadores Aritmticos................................................................................................................. 42 1. Operadores Aritmticos ...................................................................................................... 42 Os operadores aritmticos so os operadores usados nas operaes bsicas da matemtica. Esses operadores so usados para representar as expresses matemticas, os resultados so valores numricos. ..................................................................................................................... 42 Eles so: +, -, *, /. ...................................................................................................................... 42 Ainda existem o mod e o div, que representam o resto da diviso e o quociente da diviso na respectiva ordem. Esses operadores somente podem ser usados para nmeros inteiros. .......... 42 Operadores Aritmticos da Linguagem C ................................................................................. 43 2. Operadores de Incremento e Decremento .......................................................................... 43 3. Operadores Aritmticos de Atribuio ou C Reduzido ...................................................... 43 4. Converso de Tipo ............................................................................................................. 43 Prioridade dos Operadores Aritmticos ........................................................................................ 44 Funes Matemticas e Operadores Bit a Bit................................................................................ 47 1. Funes Matemticas ......................................................................................................... 47 2. Operadores de deslocamento de bits .................................................................................. 47 1. Funo Rand() e SRand() ................................................................................................... 48 Estrutura de Controle Linear/ Sequencial...................................................................................... 49 Funes de Entrada e Sada Formatada ......................................................................................... 50 1. Funo de Sada - printf() ................................................................................................... 50 2. Funo de Entrada scanf() ............................................................................................... 51 1. Funo de Entrada de caracter getch() e getchar() ........................................................... 52 Exemplos ....................................................................................................................................... 52 Exerccios Resolvidos e Propostos ................................................................................................ 55 Operador Relacional e Lgico ....................................................................................................... 56 1. Operadores Relacionais ...................................................................................................... 56 2. Operadores Lgicos ............................................................................................................ 56 3. Tabela Verdade: o conjunto das possibilidades combinatrias dos operadores lgicos. 57 4. Prioridade dos Operadores ................................................................................................. 57 Estrutura de Deciso /Condicional/ Seleo ................................................................................. 58 Exerccio Resolvido ...................................................................................................................... 59 Tipos de Estruturas de Deciso ..................................................................................................... 60 1. Estrutura de Deciso Simples ............................................................................................. 60 2. Estrutura de Deciso Composta: ........................................................................................ 61 3. Estrutura de Deciso Encadeada: ....................................................................................... 62 Intervalos ....................................................................................................................................... 63 Operador Ternrio ......................................................................................................................... 64 Seleo Mltipla ............................................................................................................................ 65 Exerccios Resolvidos ................................................................................................................... 67 Prof Angelina V.S.Melar 3

Variveis de Bloco ........................................................................................................................ 68 Estrutura de Repetio................................................................................................................... 69 Estrutura de Repetio Condicional (Enquanto..Faa / Faa..Enquanto / Repita..at) ................ 70 1. Repetio com Pr-condio- Enquanto..faa .................................................................... 70 2. Repetio com Ps-condio - Faa..Enquanto ................................................................. 71 3. Repetio com Ps-condio - Repita..at ......................................................................... 71 4. Comandos Break, Continue funo Exit() ........................................................................ 72 5. Enquanto Verdadeiro .......................................................................................................... 73 Repetio Pr-Definida Para ...................................................................................................... 75 6. Estrutura em C .................................................................................................................... 76 Variveis Contadoras e Acumuladoras ......................................................................................... 78 SubAlgoritmos/ Modularizao .................................................................................................... 79 1. Sub-Rotinas (Mdulos) ...................................................................................................... 79 2. Declarao da Funo......................................................................................................... 79 3. A funo principal - main() ................................................................................................ 80 4. Comando Return ................................................................................................................ 81 5. Tipo Void ........................................................................................................................... 81 6. Prottipos de Funes ........................................................................................................ 82 7. Chamada (ativao) da Funo ......................................................................................... 82 8. Exemplo Completo de Funo ........................................................................................... 83 9. Classes de Armazenamento de Variveis ........................................................................... 83 Funo com Passagem de Parmetro por Valor ............................................................................ 85 Funes Recursivas ....................................................................................................................... 89 Vetores .......................................................................................................................................... 91 1. Conceito ............................................................................................................................. 91 2. Exemplos: ........................................................................................................................... 91 3. Declarao: ......................................................................................................................... 91 4. Acessando os elementos ..................................................................................................... 92 5. Armazenando os elementos ................................................................................................ 92 6. Endereo do vetor ou matriz unidimensional ..................................................................... 92 7. Exerccios Resolvidos: ....................................................................................................... 93 Vetor String (Cadeias de Caracteres) ............................................................................................ 94 Matriz ............................................................................................................................................ 98 1. Matriz Bidimensional ......................................................................................................... 98 2. Declarao: ......................................................................................................................... 98 3. Armazenando os elementos ................................................................................................ 98 4. Armazenamento feito via teclado ....................................................................................... 99 5. Mostrando os elementos ..................................................................................................... 99 Ponteiros ...................................................................................................................................... 100 1. Variveis ponteiros ........................................................................................................... 100 2. Trabalhando com Matriz atravs de Ponteiros ................................................................. 103 Funes com Passagem de Parmetros por Referncia ............................................................... 105 3. Passagem de Matriz por Referncia ................................................................................. 106 Estruturas ..................................................................................................................................... 108 Unio e Enumerao ................................................................................................................... 116 1. Unio union ................................................................................................................... 116 2. Tipo enumerao .............................................................................................................. 117 Arquivos ...................................................................................................................................... 118 Prof Angelina V.S.Melar 4

3. Abertura do arquivo.......................................................................................................... 118 4. Fechamento do arquivo .................................................................................................... 119 5. Leitura .............................................................................................................................. 119 6. Gravao ........................................................................................................................... 120 Posicionamento e Pesquisa em arquivo binrio ...................................................................... 125 7. Verificando o final do arquivo binrio ............................................................................. 125 8. Para apagar um arquivo .................................................................................................... 125 Conceitos Bsicos ....................................................................................................................... 126 Nvel de Programao das Linguagens ....................................................................................... 128 Bibliografia Consultada e Referenciada ...................................................................................... 129

Prof Angelina V.S.Melar 5

PRIMEIRA PARTE ALGORITMOS

Prof Angelina V.S.Melar 6

Lgica de Programao
A lgica usada na programao a mesma lgica usada diariamente pelas pessoas. a lgica uma das caractersticas que diferencia um ser humano de outro, capaz de torn-lo mais coerente e racional nas suas aes e com bom senso para tomar as decises. Mas como essa lgica? De onde ela vem? A palavra lgica vem do grego logos, que significa expresso, pensamento, conceito, discurso, razo. Uma das definies de lgica encontrada no dicionrio Aurlio a coerncia do raciocnio de idias. O estudo da lgica comeou na Grcia antiga com o filsofo Aristteles, que definiu lgica como sendo a cincia da demonstrao. Segundo Aristteles, a lgica estuda a razo como instrumento da cincia ou meio de adquirir a verdade. Como o objetivo da razo o raciocnio, a lgica est ligada ao raciocnio, uma operao discursiva do pensamento que consiste em encadear logicamente juzos e dele tirar uma concluso. O escritor Othon Manoel Garcia define lgica como a cincia das leis ideais do pensamento, a arte que nos faz proceder, com ordem, facilmente e sem erro, no ato prprio da razo. O que ter lgica? Ter lgica estar em uma determinada situao e saber a melhor maneira de proceder. conseguir visualizar todas as possibilidades existentes daquele momento e decidir pela mais adequada. Quanto mais a pessoa tenta raciocinar corretamente ela estar procurando ter lgica. Forbellone, destaca a lgica usada no dia-a-dia, pois quando pensamos, falamos, agimos estamos criando uma ordem no pensamento e nas aes, isto utilizar lgica. Mas e a Lgica de Programao? Segundo Forbellone, a aplicao das leis do pensamento e de processos simbolizados de maneira formal nos computadores, onde so empregadas tcnicas para a produo de solues logicamente vlidas e que resolvem problemas que sero programados. Para isso sero desenvolvidos os Algoritmos. O que um bom programa/sistema? O importante na programao desenvolver programas que atendam as necessidades do usurio, com funcionalidade, rapidez, desempenho e confiabilidade. Um bom programa no depende exclusivamente da linguagem de programao. O que eu devo fazer agora????? Segundo Forbellone, ...fundamental formao do profissional de programao esto a desenvolver a lgica e a construo de algoritmos... preciso ter Lgica de Programao: Ter lgica raciocinar coerentemente, avaliar as aes tomadas, organizar o pensamento, visualizar todas as possibilidades, atualizar as informaes e traar um objetivo Mas como passar a nossa lgica para o computador? Uma das ferramentas para isso o Algoritmo. Prof Angelina V.S.Melar 7

Algoritmo
O objetivo de todo o estudo da Lgica de Programao a construo de Algoritmos coerentes e vlidos. O algoritmo um processo onde voc organiza e coloca passo a passo suas idias para atingir um objetivo pr-definido. Tambm pode-se definir como uma sequncia de passos. Esse processo feito numa linguagem fcil, em seqncias ordenadas e encadeadas, de forma que as pessoas possam us-la sem problemas. O algoritmo uma das primeiras e melhores formas usadas para se conseguir resolver problemas no computador ou mesmo na sua vida cotidiana. Quando voc precisar solucionar um problema a primeira coisa que dever fazer fazer uma anlise do mesmo, coletar os dados e estruturar as operaes que devem ser realizadas. Pense na sua vida real, num problema comum a todos. Vamos imaginar que voc ir organizar uma festa. Quais so os procedimentos a serem tomados? Para fazer um algoritmo desse problema preciso antes coletar as idias: - voc precisa convidar os amigos; - arrumar um som e msicas; - comprar salgados e bebidas; - procurar o local da festa; Depois organiz-las de acordo com suas prioridades. preciso saber qual o primeiro passo a se tomar para depois ver o momento de executar o segundo, no esquecendo que o primeiro deve j estar pronto. como fazer um pudim gostoso de forma rpida. Como voc faria? Voc colocaria a forma no forno aceso antes de fazer a massa? Como voc usaria seu raciocnio lgico nesse procedimento? por isso que devemos aprender a ter um raciocnio lgico. Ser atravs dele que voc conseguir ser um bom programador. Quando comearmos a desenvolver algoritmos estaremos desenvolvendo nosso raciocnio lgico, pois comearemos a prestar mais ateno aos detalhes. Observaremos que cada situao, por mais simples que seja pode-se tornar complicada. Mas como assim? Vocs devem estar pensando. Estado inicial aes empregadas de forma clara e precisa
Perodo de tempo finito

Estado final Objetivo Atingido

Algoritmo

Prof Angelina V.S.Melar 8

Pensem neste problema: Como voc faria para comer uma banana? Podemos fazer um Algoritmo que usa o portugus coloquial para resolver isso: 1 Voc ter que saber onde est a banana 2 Pegar a banana 3 Descascar a banana 4 Por fim, comer a banana. Parece ser simples resolver esse problema, onde citamos quatro etapas ordenados de procedimentos. Mas ser que voc pensou em tudo? Ser que a sua lgica est bem desenvolvida? Se voc acha que sim, errou. Voc ainda precisar desenvolver muito o seu raciocnio lgico. Mas por qu? Voc deve estar fazendo est pergunta. Eu respondo na criao de um novo algoritmo: Voc ter que saber onde est a banana Pegar a banana Descascar a banana Verificar se a banana no est estragada por dentro Se estiver estragada o Voc dever jog-la Seno, se estiver inteira boa o Voc dever comer a banana. Nesse caso a sua lgica est mais elaborada, verificando uma situao que pode ocorrer. Mas ainda no est totalmente completa. Pois, voc no acha que a pessoa na hora de pegar a banana j deveria ver o estado da banana por fora? Se ela estiver preta ou amassada, ento a pessoa j deveria t-la jogado fora e pegado outra, de forma que todo o processo seria repetido novamente. Veja no algoritmo abaixo: 1 Voc ter que saber onde est a banana 2 Pegar a banana 3 Verificar o estado da banana por fora 4 Se a banana estiver preta ou amassada - dever ser jogada fora - e pegar outra banana - verificar o estado da banana - se a banana estiver preta, amassada ..... 5 Se a banana estiver com aparncia bonita por fora dever ser descascada 6 Verificar se a banana no est estragada por dentro 7 Se estiver estragada voc dever - jog-la - pegar outra banana - verificar o estado da banana por fora - se a banana estiver preta, amassada - dever ser jogada fora - pegar outra banana - verificar o estado da banana - se a banana estiver preta, amassada ..... Prof Angelina V.S.Melar 9

Estruturas dos Algoritmos: Linear / Seletiva/ Repetio


Perceba que ao fazer o primeiro algoritmo se pensava numa sequncia de aes (passos) de forma linear, ou seja, uma ao sendo executada aps a outra. Mas, muitas vezes isso no pode ser realizado, pois, surgem verificaes, testes que precisam ser feitos e de acordo com o resultado deste que sero definidas as aes que sero executadas. O primeiro algoritmo - pegar a banana e com-la. O segundo faz uma verificao, um teste quanto ao estado da banana. So duas estruturas de algoritmos diferentes: uma linear e outra de seleo. o Sequncia define o fluxo de execuo do algoritmo

o Sequncia Linear ou Estrutura Sequencial: onde um conjunto de aes so executadas uma aps a outra, passo a passo, num fluxo contnuo do comeo ao fim. A execuo comea de cima para baixo, da esquerda para a direita o Estrutura Condicional ou Estrutura de Seleo ou Estrutura de Deciso: a ordem de execuo e as aes dependem do valor resultante de uma verificao. Nem sempre se quer que todas as aes sejam executadas, de forma que se pode fazer uma seleo e desvio delas de acordo com um teste condicional. o Estrutura de Repetio: algumas aes podem ser repetidas, executadas vrias vezes. Nessa estrutura a sequncia de execuo depender de uma condio, onde dependendo do resultado dela, ser mudada ou no a sequncia de execuo.

Mtodo para a construo de Algoritmo


Leia e releia atentamente todo o enunciado do problema, procurando identificar e entender todos os detalhes. No passe para a outra fase se tiver dvidas no enunciado. preciso ter convico no entendimento do que foi lido. Muitas vezes o enunciado grande, complexo, cheio de valores e informaes, mas depois de lido e avaliado percebe-se que sua soluo simples e que muitas informaes contidas so desnecessrias. Faa uma anlise de tudo, procurando definir explicitamente o que est contido no enunciado, destacando os pontos mais importantes. Elimine os detalhes suprfluos. Identifique as informaes necessrias para a soluo do problema: as entradas. Veja se essas informaes j esto contidas no enunciado ou precisaro ser recebidas. Para isso importante ler at o final o enunciado, sem tomar decises precipitadas. Selecione as informaes e fique apenas com as mais importantes, as que sero necessrias e usadas nas Prof Angelina V.S.Melar 10

operaes. Lembre-se que quando voc precisar de uma informao e ela no estiver no enunciado, isso significa que ela uma entrada. Verifique as regras que esto explicitas e implcitas: o processamento As sadas podem ser consultas ou operaes de transformao dos dados de entradas em sadas. Defina as informaes que devem ser mostradas no final, ou seja, as respostas do problema. Desenvolva o algoritmo. Verifique se o algoritmo feito est atingindo o seu objetivo: teste Para isso faa alguns testes com dados fictcios e verifique se o algoritmo est mostrando corretamente a soluo do problema. Se o resultado no for satisfatrio, leia novamente o enunciado, revise o algoritmo e efetue novos testes, at conseguir o resultado desejado. ABSTRAO Existe dentro da resoluo de problemas o termo Abstrao. Ao desenvolver um algoritmo voc est preocupado em desenvolver e representar o raciocnio lgico de programao, mas sem se ater a detalhes computacionais, que sero depois pensados e acrescidos na codificao. Ento ao abstrair, se deixa de lado as informaes suprfluas, se atem ao que importante para chegar a resoluo do problema. A abstrao tem como objetivo tirar informaes suprfluas e introduzir uma notao concisa. Para esse objetivo ser alcanado devem-se identificar os objetos e os aspectos importantes, dar-lhes nomes e definir operaes que possam ser aplicadas aos objetos, permitindo assim realizar uma consistncia em relao as regras do problema.

Prof Angelina V.S.Melar 11

Etapas de Desenvolvimento
No Processamento de Dados se recebem os dados, se realizam as operaes sobre esses dados e no final so geradas as respostas ou resultados como sada. Entrada Processamento Sada

Entrada: A entrada o processo onde voc avalia o enunciado do problema e verifica quais dados esto presentes no enunciado e quais no esto, mas que so essenciais para a soluo do problema. Quando faltar algum dado voc ter que receb-lo de alguma maneira. Sem as entradas no h como resolver um problema. O nmero de entradas muito variado e depende do objetivo do programa. A entrada pode ser recebida por vrios dispositivos de entradas. Pode ser lida de um arquivo ou de qualquer outro perifrico de entrada, como teclado ou scanner. Ento, a entrada pode ser direta, atravs do usurio (receber o salrio) ou indireta, atravs da mquina (pegar a data do sistema). Cuidado: no so entradas os dados que podem ser gerados atravs de um clculo ou de outras entradas. Processamento: um processo que pega os dados de entrada e efetua uma operao (que pode ou no ser matemtica), ou uma atribui. Nessa etapa tambm podem ser feitas comparaes e consultas, gerando dessa forma o resultado e a soluo do problema. Sada: a parte mais fcil e mais importante de todo o processo, onde devem ser exibidos os resultados de todo o processamento. A sada pode ser feita por qualquer dispositivo de sada, desde o monitor at a caixa de som. Vamos mostrar as etapas de desenvolvimento com um exemplo muito simples e fcil de resolver. Depois aumentaremos o grau de complexidade, mostrando sempre as alteraes. 1 Exemplo: O Analista de Sistemas Joaquim pediu para o programador Jlio fazer um programa que efetue a multiplicao de dois nmeros. 1 necessrio ler atentamente todo o exerccio. 2 Retire o que suprfluo, fique apenas com os dados necessrios. 3 Defina as trs etapas principais de seu algoritmo: Entrada: Quais os dados de entrada necessrios? Lendo o enunciado verificamos que para fazer o clculo necessrio ter dois nmeros, s que estes no foram especificados e no sabemos quais so, por isso devemos receb-los. Outro detalhe importante ignorar/desprezar a histria colocada no enunciado, como os nomes e funes dos personagens. Processamento: Qual clculo deve ser feito com os dados de entrada? Lendo o enunciado vemos que a operao a ser feita com os dados de entrada a multiplicao. Prof Angelina V.S.Melar 12

Sada: O que dever ser mostrado? Qual o objetivo do enunciado? O objetivo do enunciado calcular e mostrar o resultado da multiplicao de dois nmeros. Tendo as idias s montar o algoritmo: 1 Saber o valor do primeiro nmero 2 Saber o valor do segundo nmero 3 Fazer a multiplicao dos dois nmeros Nmero 1 x Nmero 2 = ??? 4 Mostrar o resultado da multiplicao 2 exemplo: Juracema foi a livraria e comprou dois livros iguais de programao. Quanto ela pagar? Entrada: Quais so os dados de entrada necessrios? Saber o preo do livro Processamento: Qual clculo deve ser feito com os dados de entrada? Multiplicar o preo pela quantidade comprada, no caso 2. Veja que nessa situao a quantidade j foi informada (2 livros), por isso, j a temos e no devemos solicit-la como entrada. Sada: O que dever ser mostrado? Qual o objetivo do enunciado? Descobrir o valor que Juracema ter que pagar no caixa. Algoritmo: 1 Receber o valor do livro 2 Multiplicar o valor do livro por dois (2). 3 Mostrar o resultado do clculo da multiplicao

Prof Angelina V.S.Melar 13

Tipos de Algoritmos
Os algoritmos podem ser escritos de diferentes maneiras, dependendo da sua aplicao. Nesta apostila desenvolveremos os algoritmos de forma estruturada e padronizada (pseudocdigo), possibilitando com isso um melhor entendimento dos processos. 1. Tipos de Algoritmos Os tipos de algoritmos mais conhecidos so: Descrio Narrativa Fluxograma Pseudocdigo Diagrama de Chapin Todos esses tipos de algoritmos consistem em analisar o enunciado do problema e descrever os passos necessrios para a resoluo do problema. O que os diferencia a forma de descrever e simbolizar esses passos. At o momento todos os algoritmos feitos foram atravs da Descrio Narrativa. Descrio Narrativa ou Linguagem Natural: A Descrio Narrativa consiste em analisar o enunciado e escrever os passos utilizando uma linguagem natural, usada diariamente pelas pessoas. Vantagem: no necessrio aprender nenhum conceito novo, pois a lngua natural (portugus) j conhecida. Desvantagem: a ambigidade da linguagem coloquial, o uso de adjetivos ou a falta de clareza quanto as frmulas matemticas. A lngua natural abre espao para vrias interpretaes (dependendo da pessoa que o ler), o que posteriormente dificultar a transcrio desse algoritmo para programa.

Fluxograma: O Fluxograma consiste em analisar o enunciado e escrever os passos utilizando smbolos grficos predefinidos. Vantagem: o entendimento de elementos grficos mais fcil que o entendimento de textos. Desvantagem: necessrio aprender a simbologia grfica do fluxograma e as correes so mais trabalhosas por se tratar de representao grfica.

Pseudocdigo (portugus estruturado - portugol - pseudolinguagem): O Pseudocdigo consiste em analisar o enunciado e escrever os passos por meio de regras pr-definidas. As regras usadas neste material so estruturadas de acordo com a programao na linguagem C. Vantagem: a passagem do algoritmo para qualquer linguagem de programao quase imediata, bastando conhecer as palavras reservadas da linguagem de programao que ser utilizada. Ser como uma traduo, j que ser criada a estrutura do algoritmo baseada na linguagem. Desvantagem: necessrio aprender as regras do pseudocdigo.

Prof Angelina V.S.Melar 14

Pseudocdigo
Como j foi mencionada acima a passagem do pseudocdigo para uma linguagem de programao mais rpida e a probabilidade de erros menor. Regras de criao do Pseudocdigo 1. Todos os programas tm um comeo, um meio e um fim. Dessa forma, deve ser indicado o incio e o fim, internamente as aes que sero executadas. 2. Deve ser usado o recurso de endentao, que deslocamento horizontal, transmitindo o sentido de hierarquia de execuo. 3. Deve ser feito uso de termos nicos que definem uma ao, como: escreva, leia, se..ento. 4. Deve ser feito uso do conceito de variveis, assim como sua declarao. Exemplo de Problema: Receba um nmero real e verifique se este positivo, negativo ou nulo Descrio Narrativa 1 Receber um nmero 2 Se o nmero for maior que zero, ento, mostre uma mensagem alertando que o nmero positivo. 3 Se o nmero for menor ou igual 0 ento, deve aparecer uma mensagem avisando que o nmero negativo ou nulo. Pseudocdigo Incio real num; escreva (Digite um nmero); leia (num); se (num > 0) ento escreva (Nmero positivo); seno escreva (Nmero negativo ou nulo); Fim Qual das formas anteriores voc escolheria para construir um algoritmo? Qual desses exemplos mostra de forma mais clara as aes?

Prof Angelina V.S.Melar 15

Fluxograma
O fluxograma um tipo de Algoritmo que representa graficamente (figuras geomtricas) os passos necessrios para a resoluo do problema. Para cada passo efetuado, seja o de entrada, o de processamento, o de sada ou condio tem-se um smbolo de representao. Algumas empresas adotam smbolos padronizados no fluxograma. Com a representao por smbolos grficos fica mais rpida a visualizao da lgica empregada para resolver o problema.
Smbolo Nome Terminal Processamento Conexo Direo do Fluxo Deciso Processamento Prdefinido Teclado de Linha Entrada/Sada Documento ou Relatrio Exibio Conector de Pgina Subrotina Finalidade Indica o incio, continuidade ou fim Indica operao, clculo ou atribuio Utilizado para ligar pontos do fluxograma Utilizado para indicar a seqncia da execuo, conecta os smbolos Indica a tomada de uma deciso ou comparao. Podendo provocar desvios na seqncia lgica de execuo Utilizado nas estruturas de repetio Indica a entrada de dados por via teclado Pode ser usado tanto para entrada quanto para a sada de informaes Indica operao de sada via impressora Indica as sadas de informaes por dispositivos visuais Usado para indicar a sequncia em outra folha/pgina Especfica a chamada de uma subrotina

Prof Angelina V.S.Melar 16

O fluxograma para ser feito com xito, mostrando claramente os processos, deve seguir algumas regras: _ ser bem confeccionado; _ ser legvel; _ ter smbolos bem dimensionados e alinhados; _ ter setas que indiquem a direo do fluxo das informaes; _ a direo dos lados para as condies devem ser fixos; _ o fluxo deve comear de cima para baixo e da esquerda para a direita; _ no pode haver encontro das linhas de indicao do fluxo. _ as informaes escritas dentro dos smbolos devem ser claras, resumidas e bem entendidas.
Estrutura a ser usada

Veja os smbolos a serem usados e uma explicao mais detalhada de suas finalidades.
TERMINAL: A principal representao desse smbolo indicar o incio e o fim de uma srie de procedimentos. Quando usarmos este smbolo devemos identificar sua funo escrevendo dentro dele as palavras INCIO, FIM. DIREO DE FLUXO: Essas setas indicam a direo do prximo passo a ser executado, que pode estar a direita, a esquerda, em baixo ou em cima. Ele conecta os smbolos e o fluxo de execuo, ou seja a sequncia da ao a ser executada.

Existem vrios smbolos que representam a entrada de dados, mas como a maioria dos programas a serem feitos tero os dados digitados via teclado usaremos o smbolo do trapzio.
TECLADO DE LINHA:

Receber SALARIO

PROCESSAMENTO: O smbolo do retngulo deve ser usado toda vez que existir

qualquer tipo de processamento; seja um clculo, uma atribuio de valores as variveis, ou mesmo alterao de qualquer dado.
B=6 C=A+B
SENHA = MARTH

EXIBIO: O smbolo de Exibio um smbolo grfico que representada sada,e serve para mostrar uma mensagem, um resultado.

Prof Angelina V.S.Melar 17

CONEXO: Algumas vezes o espao reservado para fazer o fluxograma pequeno e temos que dividi-lo em partes, usando o smbolo grfico do conector.

INCIO

A=3

B=6

C=A+B

FIM

Diagrama de Chapin
O Diagrama de Chapin utiliza poucos smbolos e no precisa de nenhum conhecimento especfico. A desvantagem de uso ocorre quando precisa de muito espao na horizontal e fica mais difcil a compreenso. Veja os exemplos abaixo: a) Incio Escreva Mensagem Fim b) Incio Escreva Digite seu nome Leia NOME pelo teclado Escreva Bom Dia + NOME Fim c) Incio Leia A e B no teclado A maior que B? Sim Escreva A maior que B Fim No Escreva B maior que A

Prof Angelina V.S.Melar 18

Paradigmas de Programao forma de programar


As Linguagens de Programao adotam um estilo (padro) de desenvolvimento. Esse estilo que possui caractersticas comuns identificam a linguagem, podendo ser: programao no estruturada, programao estruturada, programao orientada objetos/eventos, programao lgica. De acordo com o Paradigma de Programao ser desenvolvida a Lgica de Programao.
1. Programao No Estruturada:

Nessa programao a sequncia de aes que sero executadas so seqenciais, obedecendo uma numerao de linhas. O nico modo de fazer desvios usando o V Para (codificando GOTO). Essa linguagem no possui estruturas de controle de repetio como Faa..Enquanto (while) e no permite a estratgia de modularizao. Exemplo de linguagem no estruturada: Assembly e Basic
Algoritmo No Estruturado: 1. V para DESVIO2 2. DESVIO1. 3. Se precisar comprar ento 4. V para DESVIO3 5. V para DESVIO5 6. DESVIO3. 7. Procure a chave do carro 8. Se achou ento 9. V para DESVIO 2 10. V para DESVIO 4 11. DESVIO2.

2. Programao Estruturada (Procedural): Em 1965 Edward Dijkstra apresentou um artigo que sugere a programao estruturada e a eliminao de comandos de desvio. Esse paradigma foi desenvolvido por Bohm e Jacopine em 1966, onde eles demonstraram que a lgica pode ser expressa atravs de algumas estruturas bsicas. Possuem as estruturas: linear (seqencial), deciso (condio ou escolha), de iterao (repetio ou lao) Em 1967, Floyd sugeriu o uso de comentrios intercalados. Em 1970, Nicklaus Wirth sugeriu o processo de decomposio (refinamento sucessivo das etapas). A linguagem estruturada foi desenvolvida em grande parte pela m legibilidade causada pelas instrues de controle de algumas linguagens no estruturadas. Na programao no estruturada se usava muito a instruo de desvio GOTO para criar estruturas de laos (iteraes). Segundo Rinaldi, o que caracteriza a programao estruturada a possibilidade de diviso de tarefas em rotinas ou blocos independentes entre si. A primeira regra para fazer um programa a decomposio lgica do problema em partes independentes. o Exemplo: Prof Angelina V.S.Melar 19

Rotina: Calculo do desconto de IR Bloco de verificao da faixa das alquotas


Nesse paradigma o programa tem uma seqncia de instrues executadas linearmente e seus dados tratados de forma independente das funes, diferente da Programao Orientada a Objetos. Na programao estruturada permitido incluir sentenas em qualquer parte da linha. A linguagem C no totalmente estruturada em blocos, porque no permite criar uma funo dentro da outra. 3. Programao Orientada a Objetos Nessa programao existe a definio de classes, encapsulamento, herana, que est relacionada com a reutilizao e padronizao de cdigo. A orientao a objetos vem propiciar o aumento de produtividade, diminuio do custo de desenvolvimento e manuteno (manuteno evolutiva e no corretiva). As classes so criadas para representar (categorizar) um conjunto de entidades (objetos) que possuem as mesmas caractersticas e comportamento (ou mesmo similares) dentro de um contexto. Quando voc for escolher uma linguagem de programao, considere tambm a: FORMA DE EXECUAO (Compilador ou Interpretador) e o NVEL DE PROGRAMAO (baixo, alto)

Modularidade
4. Estratgia de Decomposio ou Dividir para Conquistar A decomposio uma estratgia de resoluo de problemas. A idia dividir o problema em problemas menores (subproblemas), at que cada parte (subdiviso) seja pequena o bastante para que a soluo seja facilmente encontrada. Segundo Villas, o termo Dividir para Conquistar veio da guerra, onde mais fcil vencer grupos isolados de inimigos do que todos os inimigos juntos. A decomposio de um problema reduz a complexidade do mesmo, pois a complexidade tambm dividida. O foco da ateno fica isolado, de forma que se concentra em um problema por vez. Quando se tem todos de uma vez, o desenvolvimento da lgica se dispersa e no se chega a nenhum resultado. A soluo mais rpida, j que a complexidade menor que ao original. Como exemplo, podemos destacar o exemplo Folha de Pagamento de uma empresa. Supondo que o objetivo principal gerar o demonstrativo de um funcionrio. Inicialmente parece ser bem complexo, mas se voc analisar com calma tem como dividir esse problema, em problemas menores, como o de calculo de descontos e clculos de benefcios.

Esse processo deve ser feito da seguinte maneira: 1. Divida o problema em suas partes principais no caso da folha, descontos, benefcios seria um subproblema. 2. Analise a diviso e veja a coerncia da diviso
Prof Angelina V.S.Melar 20

3. Se uma diviso ainda estiver complexa, decomponha novamente. os descontos podem ser divididos por especialidade 4. Reavalie tudo novamente. Essa decomposio continua tambm conhecida como refinamento sucessivo. Porque parte de um problema complexo e abrangente que sucessivamente dividido em problemas mais simples e especficos. A tcnica de Refinamento Sucessivo tambm pode se chamar Top-down (de cima para baixo), uma vez que parte de um problema mais abrangente (abstrato) at atingir um nvel mais detalhado e especfico. Normalmente essa tcnica a mais fcil de compreender. Automvel inteiro peas separadas parafusos Existe a tcnica Bottom-up (de baixo para cima), que o inverso dessa. Essa parte dos conceitos mais detalhados e especficos e vai agrupando em nveis mais abrangentes (abstratos), at atingir o nvel desejado. Potenciao multiplicar somar o Segundo Rinaldo, a modulao uma tcnica de resoluo de problemas, onde se divide o problema maior (principal) em problemas menores. A soluo do problema maior ocorre em decorrncia da soluo dos menores.
5. Mdulos Cada subproblema um mdulo ou podemos dizer que um subalgoritmo ou subproblema que realiza tarefas especficas. Em termos funcionais, existem dois tipos de mdulos:
1. Procedimento: um mdulo que executa uma tarefa especfica, que pode ou no gerar

vrias sadas usando as variveis globais ou locais. Ele no retorna valores para o mdulo que o chamou.
2. Funo: um modulo que ir gerar uma nica sada e que ser devolvida para a funo principal ou mdulo que o chamou.

Resumo das vantagens:

Subdiviso dos algoritmos complexos: facilita o entendimento; Estruturao de algoritmos: facilita deteco de erros e a documentao do sistema Modularizao de sistemas: facilita a manuteno e reutilizao do algoritmo

Prof Angelina V.S.Melar 21

SEGUNDA PARTE LINGUAGEM C

Prof Angelina V.S.Melar 22

Linguagem C
A linguagem C foi desenvolvida por programadores para programadores. Ela se popularizou rapidamente devido a sua velocidade, segurana e eficincia. Com ela possvel desenvolver desde um simples programa (uma calculadora) at um sistema operacional.
Origens da linguagem C A linguagem C foi criada por Dennis Ritchie em 1972. Sua origem foi atravs da linguagem BCPL, desenvolvida por Martin Richards, que influenciou Ken Thompson a criar o B, que levou a linguagem C. Com a popularizao dos microcomputadores houve um aumento no desenvolvimento de implementaes em C, criando discrepncias entre elas. Para resolver essa situao, o rgo americano de padronizao (American National Standards Institute), em 1983, criou C padro ANSI, estabelecendo uma definio padronizada da linguagem C. A maioria dos compiladores so compatveis com esse padro. A linguagem C++ foi construda sobre os fundamentos da linguagem C e d suporte para a Programao Orientada a Objetos. Existem vrios ambientes de desenvolvimento para a linguagem C, como: DEV-C++, Visual C++, Turbo C, CodeBlocks. O ambiente a ser usado o Dev-C++, cujo compilador a implementao Mingw do GCC (Gnu C Compiler). Resumo histrico 1966 BCPL (Martin Richards) 1970 - B (Ken Thompson) 1972 C (Dennis Ritchie) 1978 Livro The C Programming Language (Brian Kernigham e Dennis Ritchie) 1983 - C padro ANSI - rgo americano de padronizao (American National Standards Institute) O padro ANSI definiu o contedo da biblioteca padro C, palavras reservadas, estrutura da linguagem (prottipo da funo). 1985 - C++ ( o C projetado para suportar Programao Orientada a Objetos). Caractersticas e Vantagens: Facilidade para aprendizagem de outras linguagens de programao, inclusive as orientadas a objetos Constitudo por funes Linguagem de programao estruturada Ferramenta poderosa de desenvolvimento (pode desenvolver um editor de texto, um aplicativo comercial, um programa para microcontrolador) Portabilidade- em relao a mudana do cdigo para plataforma Windows ou Linux Linguagem compiladora

Prof Angelina V.S.Melar 23

Processo de Compilao e Ciclo de Vida do Programa


6. Linguagem C Compiladora ou Interpretadora?

Uma linguagem de programao pode ser compiladora ou interpretadora. O que as distingue a forma com que elas executam o programa. O interpretador l o cdigo fonte linha a linha, executando-as em seguida. J o compilador, l o cdigo fonte inteiro e se este no tiver erros de sintaxe, ser convertido em um cdigo de mquina, fazendo com que o processador consiga entend-lo e execut-lo. Se forem feitas alteraes no programa, este ter que ser compilado novamente, gerando um novo cdigo de mquina. Um computador s pode executar programas em linguagem de mquina. Cada programa executvel uma seqncia de instrues que o processador interpreta e executa as operaes correspondentes. O cdigo fonte a traduo dos comandos do pseudocdigo para as respectivas instrues da linguagem de programao (por exemplo, linguagem C). Essas instrues depois so traduzidas para a linguagem da mquina (que a linguagem interna que o computador entende). O arquivo objeto somente gerado quando o arquivo fonte no possui erro de sintaxe.
7. Ciclo de Vida do Programa Criao do programa Para se fazer um programa deve-se escrever uma sequncia correta de instrues que devero se executados pelo computador. Para se chegar nessa sequncia deve-se desenvolver o Algoritmo. Essa lgica deve ser desenvolvida numa linguagem natural, parecida com a do ser humano, que pode ser a Descrio Narrativa e o Pseudocdigo. Depois de solucionado o problema e escrito o algoritmo em pseudocdigo, este deve ser passado para uma linguagem de programao, ou seja, codificado. Na nossa disciplina ser usada a linguagem de programao C. O programa codificado e digitado se chama Arquivo Fonte. Este deve ser salvo com a extenso .C. Se no for digitada a extenso, ser assumir a extenso .cpp que padro do ambiente de desenvolvimento (cpp significa c plus plus ou c++). Para executar esse programa necessrio compil-lo e link-lo. Na compilao as instrues (linhas) so verificadas e interpretadas pela mquina (CPU), se no houver erros de sintaxe, ser gerado o arquivo executvel (extenso .exe). O linkeditor (linker) une os cdigos dos arquivos de bibliotecas usados pela linguagem C com os arquivos fontes criados pelo programador. Para ver o programa funcionando basta digitar seu nome ou dar um duplo clique no cone do programa, de acordo com o ambiente que voc estiver (texto ou grfico). Os erros de lgica s podem ser detectados pelo programador depois de gerado o arquivo executvel.

Prof Angelina V.S.Melar 24

Resumo das etapas da criao de um programa 1. Necessidade de um programa 2. Enunciado do problema 3. Descrio das idias numa linguagem natural Descrio Narrativa Algoritmo 4. Criao da sequncia correta de instrues Pseudocdigo - de acordo com o mtodo da linguagem a ser usada (estruturada) 5. Codificao para uma linguagem de programao Linguagem C 6. Processo de compilao Verificao dos erros de sintaxe, gerao do arquivo objeto, unio com as bibliotecas 7. Criao do arquivo executvel

O ciclo de criao de um programa em C pode ser analisado abaixo, na seqncia de figuras abaixo.
arquivo fonte arquivo objeto arquivo fonte ... arquivo objeto arquivo biblioteca

Linkedio

arquivo executvel

Prof Angelina V.S.Melar 25

Ambiente de Desenvolvimento DEV-C++


1. Ambiente integrado O DEV-C++ um ambiente integrado de desenvolvimento para a linguagem de programao C e C++, que inclui um local para digitao do programa (editor de texto), um compilador (gcc - Gnu C Compiler), um linkeeditor e janela de visualizao do executvel. Nesse ambiente possvel desenvolver aplicaes console (Console Application), cuja interface texto ou aplicaes grficas (GUI Application) que usam janelas e elementos visuais como interface. Pode-se digitar o programa em outro editor de texto, como o Bloco de Notas, o Word, devendo ter o cuidado de salv-lo como um arquivo texto, sem qualquer tipo de formatao. O DEV-C++ pode ser adquirido gratuitamente pelo site http://www.bloodshed.net/devcpp.html. A verso mencionada nesta apostila a verso 4.9.8.0, em portugus.

2. Configurando o ambiente e o editor As configuraes padres do compilador, do ambiente e do editor de texto podem ser alteradas atravs do menu Ferramentas. Se o seu ambiente est em ingls mude-o para portugus atravs do menu Tools (ferramentas) opo Environment Options (Opes do Ambiente) guia Interface escolha o portugus. Procure personalizar o seu ambiente de trabalho, criando atalhos e facilidades no processo de digitao. Por exemplo: Menu Ferramentas Opes do Editor Ative a opo Destacar as chaves e os parnteses. Na guia Display ative a opo Nmeros das linhas. No menu Exibir desabilite a exibio do Navegador de classes/projetos clicando apenas uma vez nessa opo.

Prof Angelina V.S.Melar 26

3. Configuraes para o Windows Vista/7 Para que o Dev funcione corretamente no Windows Vista, algumas configuraes devem ser feitas: No menu Ferramentas escolha a opo Opces do Compilador na guia Diretrios, em Binrios deve ser adicionado o caminho C:\DevCpp\libexec\gcc\mingw32\3.2 (se no houver). Na guia Programas deve ser colocado C:\Dev-Cpp\bin\ em cada linha. Por exemplo, a primeira linha fica assim: C:\Dev-Cpp\bin\gcc.exe 4. Digitao do programa Para a digitao do programa no DEVC++ necessrio seguir os seguintes passos: 1. No menu escolha a opo Arquivo (File); 2. Escolha a opo Novo e depois Arquivo Fonte ou se preferir a tecla de atalho <CTRL> e <N> simultaneamente; 3. Aparecer uma nova janela, com o ttulo: (*) Sem Ttulo 1, onde deve ser feita a digitao do programa fonte. 4. Dependendo da verso, ou mesmo da configurao pr-definida no editor, aparece um programa inicial. Pode-se apag-lo ou deix-lo, aproveitando as linhas de cdigo j digitadas. 5. Gravao do programa Aps a digitao do programa, ele dever ser salvo antes de ser executado, de acordo com as etapas abaixo: 1. No menu Arquivo escolha a opo Salvar ou use a tecla de atalho <CTRL> e <S> simultaneamente. 2. Escolha o diretrio de trabalho, digite o nome do arquivo fonte e pressione o boto Salvar. Observe que a extenso padro do DEV-C++ o .cpp. Ao salvar o arquivo fonte, cuidado para no salva-lo com nome invlido (com espao entre as palavras, iniciado com nmero.

Toda vez que voc pressionar o F9 para compilar e executar o Dev estar salvando automaticamente seu programa.
6. Compilao e execuo do programa Existem diversas maneiras de ver se o programa est sem erros e funcionando, entre elas: 1. Escolhendo a opo Executar (Execute) do menu e dentro dela a opo Compilar e Executar (Compile and Run); ou 2. Pressionando a tecla de funo <F9> ou na barra de ferramentas a opo Compilar e Executar. Se voc quiser apenas verificar se existem erros no programa, poder inicialmente compil-lo (atravs do menu Executar, opo Compilar) e futuramente execut-lo (atravs do menu Executar, opo Executar).

Prof Angelina V.S.Melar 27

7. Criando um cdigo fonte padro

Uma boa forma de configurar o editor criar um modelo inicial de programa fonte, ou seja, toda vez que for iniciado um novo arquivo ir aparecer o modelo que voc definiu. As linhas de comandos e bibliotecas mais comuns ficam digitadas neste modelo. Para criar o modelo de cdigo padro escolha a opo Ferramentas, depois Opes do Editor e a guia Cdigo. Na parte inferior clique no Cdigo Fonte Padro e digite seu cdigo fonte.
Os caracteres especiais acentos, cedilha nesse ambiente console so convertidos.

Prof Angelina V.S.Melar 28

Estrutura do Programa na Linguagem C


Um programa codificado na linguagem C tem uma sintaxe e estrutura um pouco diferente de um programa escrito em outra linguagem, como Pascal. Em C, se trabalha com vrias funes e bibliotecas. Um programa precisa ter necessariamente uma funo principal (main), que tem as instrues e funes iniciais do programa. Veja o exemplo abaixo:

1. Estrutura bsica Um programa feito na linguagem C constitudo basicamente de: Documentao do programa: comentrios que o programador considera importante, como objetivo do programa. Cabealho: Diretivas de pr-processamento, onde sero definidas as constantes e includos os arquivos de cabealho. Declarao e inicializao de variveis globais. Blocos de instrues: um bloco principal (funo main) e outros blocos de rotinas (outras funes chamadas a partir da main()). 2. Diretivas As diretivas do pr-processador iniciam com o smbolo # e cada diretiva deve ser escrita em linha distinta. As diretivas instruem o compilador a execuo de uma ao dentro do cdigofonte do programa em C. As diretivas do padro C ANSI a serem usadas so: #include, #define. O pr-processador do C um programa que examina o arquivo fonte e executa as devidas modificaes com base nas diretivas. Como por exemplo, ao encontrar a diretiva #include ele faz um desvio, localiza a funo na biblioteca e adiciona seu cdigo ao cdigo do arquivo fonte.

Prof Angelina V.S.Melar 29

#include Essa diretiva quando lida faz a incluso de um arquivo de cabealho ao arquivo-fonte. Exemplo: #include <stdio.h> arquivo de cabealho: stdio.h

STD standard padro I input O output Funes padres de entrada e sada Funes associadas: scanf(), printf()

#define Essa diretiva define um identificador (constante simblica) e uma string que o substituir toda vez que for encontrado no cdigo-fonte. Estrutura: #define identificador string

Exemplo:

#define EXIBA printf #define TEXTO \nProgramao de Computadores na Fatec main() { EXIBA(TEXTO); }

Ao ser executada a diretiva #define, o compilador associa a palavra EXIBA a palavra printf e toda vez que aparecer a palavra EXIBA ele a substituda por printf e a palavra TEXTO ser substituda por \nProgramao de Computadores.

3. Arquivos de Cabealho (header) Cada funo definida na biblioteca C tem seu respectivo arquivo de cabealho (como citado acima), ou seja, se voc utilizar uma funo de entrada -scanf()- ter que incluir seu respectivo arquivo de cabealho (stdio.h) no incio do programa. Esse arquivo possui a definio de tipo e o prottipo da funo. Os arquivos com a extenso .h, so chamados de arquivos de cabealho, ou header files. Arquivo de cabealho stdio.h conio.h/conio.c math.h stdlib.h time.h string.h Finalidade

Suporta entrada e sada com arquivos Suporta E/S pelo console Possui diversas funes matemticas Declaraes miscelneas Funes de horrio do sistema Funes de string

Dica: O arquivo de cabealho feito pelo programador colocados entre . Exemplo: #include funccondicao.h Prof Angelina V.S.Melar 30

4. Biblioteca Uma biblioteca uma coleo de funes. Um arquivo de biblioteca armazena o nome de cada funo, mais as informaes necessrias para o processo de linkagem. Quando o programa se referencia a uma funo, o linkeditor procura a funo na biblioteca (que possuem vrias) e adiciona a parte do seu cdigo ao programa. As funes padres existentes na biblioteca do compilador C foram definidas pela ANSI. Algumas empresas criaram funes novas e acrescentaram ao compilador, como por exemplo, a Borland, acrescentou ao Turbo C a biblioteca CONIO (Console Input/Output). 5. Bloco de instrues e Funo MAIN() Todos os programas na linguagem C comeam executando o contedo descrito na funo principal (main) e finalizam com o trmino dessa funo. Essa funo determina a execuo e ordem de execuo das demais funes que existirem. As funes possuem um conjunto de instrues (bloco de comandos) com uma tarefa especfica, como por exemplo, uma funo para calcular um desconto ou logaritmo de um nmero. O contedo de uma funo delimitado por chaves { }- incio e fim. O cdigo que estiver dentro das chaves ser executado seqencialmente quando a funo for chamada. 6. Projeto Pode ser criado um projeto em C, onde podem existir vrios programas (arquivos fontes), mas um nico arquivo executvel gerado pelo compilador. Nos projetos sempre haver um arquivo com a funo principal (main()) que indicar o incio do projeto.
Espaos

7. Regras de Digitao e Dicas da Estrutura em C em branco so desconsiderados D preferncia para um cdigo limpo, fcil de entender, com alinhamento e endentao. Como no exemplo que segue: Com espaos Sem espaos (correto e incompreensvel) (correto e compreensvel) #include <stdio.h> #include <stdio.h> main() { .} main() { . }

diferenciao de letras maisculas e minsculas (case sensitive) A linguagem C case sensitive, ou seja, diferencia letra maiscula da minscula. Exemplo: NOME diferente de Nome que diferente de nome. As palavras-chaves de C so minsculas. (else palavra-chave, mas ELSE ou Else no so). Os parnteses aps o nome de uma funo, como a funo main() obrigatrio. As chaves { } servem para delimitar um bloco de instrues. As variveis devem ser declaradas no incio.

Prof Angelina V.S.Melar 31

No

C para indicar o final de uma instruo deve ser usado o ;(ponto-e-vrgula). Se for necessrio podem ser digitadas vrias instrues numa mesma linha. Como por exemplo: printf Exemplo da Estrutura ; printf de um Programa em C;

Cuidado com as palavras reservadas, exemplo: include, printf, main. Na linguagem C tem 32 palavras, sendo que 27 criadas pelo Dennis Ritchie e 5 do padro ANSI. 8. Comentrios Para facilitar a compreenso coloque comentrios ao decorrer do cdigo. Esses comentrios podem ser feitos de duas maneiras: usando duas barras para comentrios de uma nica linha barra asterisco para comentrios de mais de uma linha.

Exemplos: a) Comentrio de uma linha #include <stdio.h> //Essa linha inclui a biblioteca que tem funes de entrada e sada O comentrio tambm pode ser iniciado no comeo da linha soma = n1 / n2; //o operador de diviso a barra
b) Comentrio com vrias linhas /* Autor: Julia Melar Data: 15/07/2007 Sistema: Cadastro de Fornecedores */

Prof Angelina V.S.Melar 32

Variveis
Os dados armazenados no computador podem ser apresentados de duas formas diferentes: como constantes ou variveis.
1. O que so variveis? Os dados fornecidos pelos dispositivos de entrada ou aqueles dados processados so armazenados numa rea da memria do computador chamada de varivel. A varivel uma posio reservada da memria que usada para armazenar um valor (tipo de dado) temporariamente. Esse valor pode ser alterado a qualquer momento durante a execuo do programa. Essas variveis so utilizadas como reas de trabalho, ou seja, como uma lousa, onde podemos escrever, modificar e apagar quantas vezes for necessrio. Cuidado: cada varivel armazena um nico contedo por vez, quando for inserido um novo valor, o anterior apagado. Memria Variveis

2. Mas em que parte da memria vo os dados? Cada dado ser armazenado em uma posio diferente da memria, essa posio um endereo fsico da memria RAM. Todos esses endeeos precisam ser identificadas, ou seja, ter um nome de referncia para cada alocao feita na memria. O nome (identificador) da varivel torna-se o seu endereo. Imaginem como voc encontraria uma pessoa sem ter seu endereo ou telefone? Imagine ter que ser saber endereos fsicos: 10CF, 2A00? Identificadores Os identificadores so os nomes dados para as variveis, constantes e funes. A melhor forma de nomear verificar qual ser seu contedo e definir o nome de acordo com ele. Por exemplo, se for definir uma varivel para armazenar o resultado da soma identifique como soma. Imagine as variveis como gavetas etiquetadas, cada uma com um nome, voc somente deve colocar contedos (objetos) nas gavetas de acordo com a identificao e tipo definido para ela. Em C existem algumas regras para a formao dos identificadores: _ o primeira caracter tem que ser obrigatoriamente uma letra ou um sublinhado; _ o nome pode ser formado por nmeros, s que estes no podem ser colocados na primeira posio. _ no pode ter caracteres especiais ou espao, com exceo do caracter _ (underline); _ as letras maisculas e minsculas so tratadas diferentemente (case sensitive). _ no pode ser igual a uma palavra reservada da linguagem. _ no pode ter acento e cedilha () __ somente os 31 caracteres so vlidos Prof Angelina V.S.Melar 33

3. Declarao de varivel

A declarao de variveis obrigatria em quase todas as linguagens de programao, onde nela feita a definio do nome/local de armazenamento (ligada ao endereo fsico) e quanto de espao ser reservado para o contedo a ser armazenado (tipo de dado). A declarao da varivel deve ser feita obrigatoriamente antes da sua utilizao, podendo ser declaradas em lugares diferentes: dentro da funo (varivel local), fora da funo (varivel global), ou dentro de um bloco de instrues.
No se esquea que ao definir o tipo de varivel est se determinado a quantidade de espao (bytes) que ser alocado na memria e o intervalo de valores que ela poder armazenar. Observao:

No pseudocdigo o smbolo significa atribuio. Na linguagem C ela representada com o smbolo =.

Exemplos de Declarao de Varivel: tipo_de_varivel nome_varivel, nome_varivel; Pseudocdigo C Dicas em C real salario; float salario; inteiro num_filho; int num_filho; caracter sexo; char sexo; real porc_aum 5.5; float porc_aum =5.5; Pode ser atribudo um contedo a varivel quando ela for declarada. inteiro qtd_pao, qtd_leite; int qtd_pao, qtd_leite; Podem ser declaradas diversas variveis do mesmo tipo ao mesmo tempo.

Prof Angelina V.S.Melar 34

Constantes
Constantes so dados com valores fixos que no podem ser alterados durante a execuo do programa. Dentro de um programa podem existir vrias constantes, como por exemplo, o ano atual, o valor de PI. As constantes podem ser definidas sem identificador, sendo inseridas diretamente. como na expresso matemtica: VARIVEL CONSTANTE
X +Y+3

O X e o Y seriam as variveis do programa, pois so as incgnitas e contm um valor sujeito a alterao, j o nmero 3 uma constante, o seu valor j conhecido e no poder ser alterado. Em todas as execues ele sempre ser 3. Exemplos: A) Data_atual = 1990 Valor_aumento = 1000 Porc_desconto = 0.10 PI = 3.141592

B) #include <stdio.h> #include <stdlib.h> const int ANO_ATUAL = 1990; main() { // ANO_ATUAL = 300; //no permite mudana de valor printf("%i", ANO_ATUAL); _sleep(2000); }

Prof Angelina V.S.Melar 35

Tipos de dados
Quando colocamos o termo tipos de dados bsicos nos referimos aos tipos primitivos da linguagem. Cada linguagem tem seus tipos primitivos e a partir deles podem criar novos. Lembre-se que o computador processa dados. Pense que quando se agrega valor a um dado tem-se uma informao. Exemplo: 22 de maro dado, no informa nada, mas se colocarmos o Dia da gua, que ocorre no dia 22 de maro, ele tem outro valor, traz uma informao muito importante, de conscientizao e valorizao do meio de sobrevivncia da espcie humana. Quando voc define o tipo de varivel o computador reserva (aloca) um espao (quantidade de bytes) de acordo com o esse tipo. Mesmo que o valor recebido e armazenado seja menor que o espao reservado o computador ainda conserva o mesmo tamanho pr-definido, havendo um desperdcio de memria. Defina de forma correta o tipo de dado, para que no ocorra falta de memria durante a execuo do programa ou lentido de processamento. Na linguagem C os tipos primitivos so: caracter (char), inteiro (int), real (float e double) e sem valor (void). possvel em C manusear dados numricos nas bases binria, octal, decimal e hexadecimal.

1. Numrico O tipo numrico armazena apenas valores numricos, que podem ser: inteiros ou reais. Numrico Inteiro - int Contm nmeros que no possuem a parte decimal, podendo ser positivos, negativos ou nulos. A representao desse tipo no pseudocdigo ser int, abreviao de inteiro. Na linguagem C int, abreviao de integer. Pseudocdigo Codificao em C int num= -4; int num1 = 6000, num2; Numrico Real- real So os nmeros positivos, negativos ou nulos que possuem a parte fracionria (parte decimal). O separador decimal o ponto e no a vrgula (padro americano). O tipo real pode ser representado pelo real simples ou duplo, a diferena est na preciso e no nmero de casas decimais. O real simples identificado como float na linguagem C e tem at 6 dgitos de casas decimais. Se for necessria uma preciso dupla necessrio usar o tipo double, que suporta at 11 digitos. No pseudocdigo ser definido apenas como real. Pseudocdigo Codificao em C real salario= 350.50; float n1=20.0, n2 = -15.50; float n1=0.0, n2, soma; 2. Literal/ Cadeia de Caracteres Na linguagem C no existe o tipo literal, tambm conhecido como alfanumrico, string, que aceita armazenar vrios caracteres. Quando houver necessidade do armazenamento de um nome dever ser feito uso de uma matriz de caracteres. Prof Angelina V.S.Melar 36

3. Lgicas As variveis definidas como lgicas (booleanas) podem guardar apenas um dos dois estados: Verdadeiro ou Falso, sempre armazenando apenas um dgito. Na linguagem C no existe um tipo especfico para a representao de valores lgicos. O dgito 0 representa o valor lgico falso e 1 representa o valor lgico verdade (todo valor diferente de 1 falso) . Pseudocdigo lgico estado_lampada; Codificao em C while (1) //loop infinito 4. Caracter O tipo char usado para armazenar um caracter da tabela ASCII, que possui letras (a..z, A..Z), nmeros (0..9) e caracteres especiais (, ^, &, =, #, :). Na maioria dos ambientes no pode ser usado para clculo, mesmo tendo armazenado um nmero. Quando for um nico caracter colocamos seu contedo obrigatoriamente entre apostrofe(). Quando for uma cadeia de caracteres, colocamos entre aspas ().

Pseudocdigo caracter sexo; caracter opo = a;

Codificao em C char sexo = f; char flag = !;

Exemplo de programa: main() { char a='1', b=1; printf("%c - %c", a, b); _sleep(2000); } Perceba que a varivel a armazena o smbolo 1 e a varivel b armazena o primeiro smbolo da tabela ASCII que a carinha. printf("\n%c - %c - %i - %i\n", a, b, a,b); //Resultado:1 carinha 49 1 1 //caracter 1 e o primeiro smbolo na ASCIII - o smbolo 1 a carinha //o smbolo 1 na ASCII tem seu decimal o 49 //o 1 inteiro o 1 na exibio definida como inteiro
5. Espao Alocado de Memria No se esquea que cada byte ocupa 8 bits (de 0 a 7). Cada bit possui dois estados ( 0 ou 1 )- base 2. Ento, um byte possui 28 = 256 combinaes possveis. Ento o tipo caracter que ocupa 1 byte pode armazenar 256 combinaes diferentes de bits.Se a cada 8 bits pode-se ter a representao de um nmero inteiro, ento, o char pode armazenar valores de 0 a 255. Nmero Decimal 49 Caracter 1 (ASCII) Bit 7 6 5 4 3 2 1 0 Base Decimal 128 64 32 16 8 4 2 1 Estado - valor 0 0 1 1 0 0 0 1 Prof Angelina V.S.Melar 37

Um tipo que armazena 2 bytes pode ter 28 x 28 combinaes diferentes de bits, que equivale a 65538. O que armazena 4 bytes pode ter 28 x 28 x 28 x 28 combinaes diferentes, que equivale a 2.147.483.647 (+- 2 bilhes de combinaes).
Tipo de Varivel char int float double void Qtd de bytes 1 4 4 8 0 Qtd de bits 8 32 32 64 0 Exemplo de valores f 1 14 -23 15.655 10.0 -14.7688665

6. Modificadores de Tipos Os modificadores de tipos so usados para modificar o tipo primitivo, fazendo com que ele aceite outra faixa de valores, aceitando nmeros negativos e positivos. O tipo signed faz com que o tipo represente os nmeros positivos e negativos. O unsigned somente aceita os nmeros positivos. A representao de nmeros negativos feita tomando o bit MSB (Most Significant Bit), onde msb=1 o sinal negativo e msb=0 o sinal positivo. Como utilizado bit para representao de sinal os valores a serem representado so metade da faixa padro. Por exemplo, o tipo char que vai de 0 a 255 do tipo signed (s positivos), para aceitar tipos negativos tem que ser unsigned e seus valores vo de -128..0..+127. O padro C padro ANSI define que os tipos so signed e no compilador CCS, MikroC o padro unsigned. O tipo short (reduz) e long (amplia) so usados para aumentar ou diminuir a faixa de valores dos tipos bases.

a)

Exemplo: unsigned char n1= 255; char n2= 255; //padro signed printf("Unsigned %i - signed %i", n1, n2); Resultado: 255 e -1

Dica: Pode-se definir valores em outras bases (diferente da decimal): int hex = 0x80 128 em decimal int oct = 012 10 em decimal Valor = 50 Decimal Valor = 050 Octal Valor = 0x50 Hexadecimal Valor = 0b01010000 Binrio

Prof Angelina V.S.Melar 38

7. Tabela ASCII (American Standard Code for Information Interchange) Cada combinao de byte pode representar internamente um smbolo (letra, dgito numrico ou caracter especial). Veja no final dessa apostila a explicao detalhada da ASCII. FATEC F A T E C 70 65 84 69 67 01000100 01000001 01010010 01000101 01000011

Exemplo de Cdigo que mostra a ASCII Estendida Unicode Latim I Suplementar (8 bits) main() { int tab; printf("Caracter Decimal Hexadecimal\n"); for(tab=0;tab<=255;tab++) printf("\t%c - %i - %x ", tab, tab, tab); }

Prof Angelina V.S.Melar 39

8. Cdigo de Barra Invertida Algumas combinaes e representaes da tabela ASCII no podem ser exibidos na tela, pois tem uma funo especial- funo de controle. Por exemplo, o retorno de carro (return ou enter) cujo cdigo decimal o valor 13. Para inserir esses cdigos deve-se usar a barra invertida juntamente com o cdigo desejado.
Cdigo \a \b \n \r \t \b \ \\ \ \v Cdigos de Controle Formato soa um sinal sonoro- alarme o cursor retrocede uma coluna o cursor avana para uma nova linha o cursor retrocede para a primeira coluna da linha o cursor avana para prxima marca de tabulao retrocede - backspace exibe uma aspas duplas exibe a barra invertida exibe a aspas simples faz a tabulao vertical

Sufixos usados: long int L, unsigned int U, float F, long double- L


Exemplos de Cdigos: #include <stdio.h> #include <stdlib.h> #include <conio.c> main() { char ch; ch = getch(); if (ch == 13) printf ("Enter %c", ch); if (ch == 27) printf ("ESC %c", ch); if (ch == 9) printf ("TAB %c", ch); if (ch == 8) printf ("Backspace %c", ch); if (ch == 127) printf ("Del %c", ch);_sleep(2000); }

main() { char ch1= '\a', ch2='\t'; printf("%s", "Alo\n"); printf("%cVeja que esta na proxima linha %c", ch2,ch1);_sleep(2000); } /* Exibe o alfabeto em minsculo, usando um contador definido como char.*/ main() { char ch; for (ch='a'; ch <='z'; ch++) printf("\t%c", ch);_sleep(2000); }
Prof Angelina V.S.Melar 40

Exerccios de Variveis

1) Defina quais so as variveis e constantes das expresses abaixo: a) 15 + 14 * y + 3 _____________________________________________________________ b) x + 5 + x + x _______________________________________________________________


2) Quais identificadores das variveis esto corretos? Explique. a) 5teste b) n_rg c) c.p.f d) valor-sal e) cod1 f) cidade/uf g) $salario 3) Identifique o tipo ideal para as variveis abaixo. A letra F identifica como nmero real, o I como numrico inteiro, o C como caracter e o E quando estiver incorreta a alternativa. a) -8 ( ) g) -600 ( ) b) 0 ( ) h) 500.33 ( ) c) X ( ) i) 789003983 ( ) d) ( ) j) 300.00 ( ) e) .V. ( ) k) -92.34 ( ) f) 9 ( ) l) 945 ( ) h) _ir i) n sapato j) num2cod2 k) nome l) x m) my

4) Identifique as variveis nomeando-as e definindo o tipo de dado ideal para armazenamento. Informao Estado civil Nmero que cala Peso Altura Valor da conta de luz Salrio Valor pago pela refeio Nome da Varivel ________________ _________________ _________________ _________________ _________________ _________________ _________________ Tipo de Varivel _________________ _________________ _________________ _________________ _________________ _________________ _________________

Prof Angelina V.S.Melar 41

Operadores Aritmticos
1. Operadores Aritmticos

Os operadores aritmticos so os operadores usados nas operaes bsicas da matemtica. Esses operadores so usados para representar as expresses matemticas, os resultados so valores numricos. Eles so: +, -, *, /. Ainda existem o mod e o div, que representam o resto da diviso e o quociente da diviso na respectiva ordem. Esses operadores somente podem ser usados para nmeros inteiros.
Exponenciao: usada para elevar um nmero a outro. O operador pode ser o sinal circunflexo (^) ou dois asteriscos (**) ou uma funo (pow ou exp), dependendo da linguagem de programao. Na linguagem escrita quando elevamos um nmero a outro, como o exemplo 2. Desta forma entendemos que o nmero 2 a base e o 3 o expoente. No computador a representao diferente. No lugar de colocarmos o 3 em cima , o colocamos do lado, e no meio o smbolo, que representa o operador de potenciao, ficando da seguinte forma: 3 ** 2 ou 3 ^ 2. A exponenciao tem maior prioridade que os demais operadores. Exemplo: 2 ^ 3 ou 2 ** 3 O resultado dessa operao 8, ou seja, o 2 igual a 8. No C pow(2,3), e em Pascal exp(2 * ln(3)). Mod e Div Em muitas linguagens de programao existem o operador div e mod, que tem a funo de trabalhar com nmeros inteiros. Esses operadores tm a mesma prioridade e devem ser efetuados antes da adio ou subtrao. Quando estivermos fazendo clculos de diviso com nmeros inteiros (10, 4500, -900, 15) podemos utilizar o operador DIV. O resultado da expresso onde foi usado o DIV sempre um nmero inteiro, o quociente. 5 DIV 2 = 2 5 MOD 2 = 1 Obs: Na linguagem C usado o operador % para representar o MOD.

5
Resto da Diviso

2 2
Parte Inteira da Diviso (Quociente)

1
22 DIV 5 = 4 22 MOD 5 = 2 70 MOD 10 = 0 2 DIV 2 = 1 -400 DIV 4 = 100

Exemplos: ou em C 22 % 5 = 2

Prof Angelina V.S.Melar 42

Operadores Aritmticos da Linguagem C Os operadores aritmticos da linguagem C so: ++, --,*, /, %, +, -. Esses operadores j esto na ordem de precedncia de execuo. O ponto (.) representa o separador decimal e a vrgula (,) o separador de milhar. Os operadores com a mesma precedncia so executados da esquerda para a direita. Operador Operao Exemplo + Adio 1+1 =2 **Cuidado, ao ser usado o operador de diviso a um tipo Subtrao 11 =0 inteiro, ser retornado um valor * Multiplicao 2 * 2 = 4 inteiro. Por exemplo, 5/2 ser / Diviso 2/2 =1 igual a 2. % Mdulo 2%2=0 -Decremento --x x=x-1 **Sempre ser retornado um valor ++ Incremento ++x x = x + 1 real quando houver pelo menos um nmero real envolvido. 2. Operadores de Incremento e Decremento Esses operadores podem ser usados como prefixo ou sufixo, como, ++n1 ou n1++. Quando o operador precede a varivel ((++n1), ele executa a operao (incremento ou decremento) antes de usar o contedo da varivel. Se o operador estiver depois da varivel (n1++), o computador primeiro usa o valor armazenado na varivel para depois executar a operao. Exemplos: a) n1 = 10 n2 = ++ n1 resultado n2 = 11 b) n1 = 10 n2 = n1++ resultado n2 = 10 somente a prxima vez o x vale 11 3. Operadores Aritmticos de Atribuio ou C Reduzido Na linguagem C pode ser feito usado de um operador aritmtico com o comando de atribuio, dessa forma simplificando a programao. Exemplo: num = num + 2 pode ser escrito da seguinte maneira: num+=2; num2 = num1 = 10 o valor 10 atribudo a num1 e, em seguida o valor de num1 atribudo da num2 (da direita para a esquerda).

No exemplo acima o operador += acrescenta 2 ao valor da varivel num e o armazena a varivel num. Esse forma de calculo pode ser usada para qualquer operador aritmtico, como: num-=2 ou num = num 2; num*=2 ou num = num * 2; num/=2 ou num = num / 2; num%=2 ou num = num % 2;
4. Converso de Tipo A linguagem C oferece o recuso de converso automtica de valores. A converso pode ser feita usando o operador cast (operador de molde de tipo). Esse operador colocado entre parnteses antes do valor a ser convertido. Exemplo: a) float x = 5; o valor de x convertido para 5.0; Prof Angelina V.S.Melar 43

b) 5 / 2.0 o valor de 5 convertido para 5.0, porque o segundo operando 2.0. O resultado da expresso 2.5 c) int a, b; a = (int) 3.5; -- atribudo o valor 3 para a varivel a b = (int) 3.5 % 2; -- convertido o valor 3.5 para 3 para depois fazer a operao mdulo, que s pode ser feita com valores do tipo inteiro.

Prioridade dos Operadores Aritmticos


A precedncia (maior prioridade) de operadores segue a ordem: *, /, %, +, -. Os operadores com a mesma precedncia so executados da esquerda para a direita.
Operador ^ ou ** * / div mod + Finalidade Exponenciao Multiplicao Diviso Diviso inteira Resto da diviso Adio Subtrao Prioridade 1 2 2 3 3 4 4 Linguagem C Funo pow(b, e) * / % + -

Exemplos de Prioridades: 1) 3 + 4 = 7 A operao da adio pode ser efetuada em primeiro lugar quando no existir nenhuma outra operao com maior prioridade. 2) 9 - 4 * 2 = O operador de maior prioridade nesta expresso a multiplicao, devendo ser realizada em primeiro lugar. 4*2=8 Depois, substitumos a expresso calculada (4 * 2) pelo seu resultado ( 8 ) e efetuamos a segunda operao, que a subtrao. 9 - 4*2 9-8=1 O resultado 1 Percebam que no foi realizada a operao pela ordem que foi escrita, mas sim pela ordem de prioridades, como na matemtica convencional. Se no fosse aplicada a prioridade dos operadores o resultado da expresso seria 10, um valor diferente de 1, o correto. 94*2= 5 * 2 = 10 3) 4 * 3 - 4 / 2 ** 2 = Deve ser realizada em primeiro lugar a operao que tem o operador de maior prioridade, ou seja, a potenciao 2 ** 2. 4 Prof Angelina V.S.Melar 44

Depois, substitumos a expresso de potenciao (2 ** 2) pelo seu resultado (4). 4 * 3 - 4/ 2* 2 4 * 3 - 4/ 4 Agora os operadores de maior prioridade so a multiplicao e a diviso. Esses dois operadores tm valor de prioridade igual, ento tanto faz a ordem de execuo. 4*3 12 Ento, substituindo a operao pelo resultado, temos: 4 * 3 - 4 / 2 ** 2 4*3-4/ 4 12 - 4 / 4 Restaram duas operaes a serem feitas: a subtrao e a diviso. Como a diviso tem maior prioridade a efetuaremos primeiro. 4/4 1 4 * 3 - 4 / 2 ** 2 4*3-4/ 4 12 - 4 / 4 12 - 1 = 11 O resultado da expresso foi 11. Vamos supor que voc no se lembra das prioridades dos operadores e faa pela ordem escrita. Ser que o resultado ser o mesmo? Veja a seguir a execuo da mesma expresso. 4 * 3 - 4 / 2 ** 2 = 12 - 2 ** 2 = 12 - 4 8 O resultado no o mesmo que na resoluo anterior.
4) 5 * 2 ^ (4 - 2) = Neste exerccio temos uma expresso dentro de parnteses. O operador que est dentro do parntese deve ser sempre efetuado em primeiro lugar. ( 4 - 2) 2 Vamos substituir o resultado da expresso dentro de parnteses na expresso geral. 5 * 2 ^ (4 - 2) 5*2^ 2 Agora, como no temos mais nenhum parnteses, efetuaremos o clculo da expresso que tem o operador com maior prioridade. 2^2 4 Substituindo o resultado da potenciao: 5 * 2 ^ (4 - 2) 5*2^ 2 5* 4 20 O resultado 20. Se o clculo fosse feito sem priorizar o parntese o resultado da expresso seria 100. Prof Angelina V.S.Melar 45

Exerccios de Expresses Aritmticas e Prioridades de Operadores

1. 3 + 4 * 4 + 8 / 2 = 2. (3 + 4 ) * 4 + (8 / 2) = 3. 64 / 8 - 3 = 4. 4 ^ 3 + 2 * 3 = 5. 81 / 3 ^ 2 = 6. 2 ^ (2 * 1 + 2) / 2 = 7. 4 * 2 ** (4 / 2) = 8. 66 DIV 4 * 2 + 2= 9. 15 MOD 3 * 1 = 10. 27 MOD (3 ** 2) = 11. 17 MOD 2 + 7 DIV 3 = 12. 21 * 16 /4 = 13. 70 DIV 7 = 14. (21 / 2) / 2 * 3 = 15. [12 - (4 * 2) ] + 2 =

Prof Angelina V.S.Melar 46

Funes Matemticas e Operadores Bit a Bit


1. Funes Matemticas Existem vrias funes matemticas j programadas que esto na biblioteca Math.h, como funes para calculo da exponenciao, raiz quadrada, logaritmo. Os valores do ngulo so em radianos. Funo Explicao Exemplo Exibio Abs(-200) 200 Abs() Retorna o valor absoluto Calcula exponenciao (potncia) pow(3,2) 9 pow() 0.8939 Sin() Calculo o seno do ngulo sin(90) Calculo o cosseno do ngulo cos(90) -0.448 Cos() -1.9952 Tan() Calculo tangente do ngulo tan(90) sqrt(25) 5 Sqrt() Calcula a raiz quadrada 4.6051 Log() Calculo o logaritmo natural log(100) log10(100) 2 Calculo o logaritmo decimal Log10() 2. Operadores de deslocamento de bits Podem ser feitas operaes lgicas bit a bit com variveis, para isso deve-se usar o operador de acordo com a operao desejada. Os operadores << e >> manipulam os bits do tipo int e char, sejam esquerda ou direita. Operador & | ^ ~ >> << Ao Conjuno e -and Disjuno ou - or Ou exclusivo - xor Negao - not Deslocamento direita Deslocamento direita

Exemplo: bit = 00000011 bit << 2 00001100 bit = 01100000 bit >> 2 00011000

Exemplo:

a)

int v1=100, v2; v2= v1 & 15;

100 decimal = 0 1 1 0 0 1 0 0 & 15 decimal 00001111 ____________ 00000100

4 decimal

O estado zero do bit far com que o bit resultante seja 0

Prof Angelina V.S.Melar 47

1. Funo Rand() e SRand() A funo rand() usada para gerar nmeros aleatrios. Os nmeros gerados aleatoriamente vo de 0 a 32767. main() { int num; num = rand(); printf("%i", num); _sleep(2000); } Para haver a delimitao dos nmeros gerados.
rand()%10 + 1; // ajustado para gerar nmeros entre 1 e 10 (soma 1 pois comea no 0)

main() { int num; num = rand()%10+1; printf("%i", num); _sleep(2000); } A funo srand() permite a gerao de nmeros diferentes a cada nova execuo. srand((unsigned int)time((time_t *)NULL)); #include <stdio.h> #include <stdlib.h> #include <time.h> main() { srand((unsigned int)time((time_t *)NULL)); int num; num = rand()%10+1; printf("%i", num); _sleep(2000); } //srand(time(NULL));

Prof Angelina V.S.Melar 48

Estrutura de Controle Linear/ Sequencial


Nesta estrutura a execuo das instrues linear, seqenciais, ou seja, onde uma ao deve ser executada aps a outra. No existe desvio na execuo. O conjunto de passos executado num fluxo contnuo do comeo ao fim. A execuo comea de cima para baixo, da esquerda para a direita Nessa estrutura temos as entradas, os processamentos e as sadas.
Entrada: a leitura de dados feita atravs de dispositivos de entrada (teclado, mouse, arquivo, entre outros). Essa leitura feita e depois o dado transportado para a memria principal (RAM). A entrada no pseudocdigo denominada como leia. O dispositivo de entrada a ser utilizado o teclado. Pseudocdigo: inteiro num; leia (num) ; Ser reservado na memria RAM um endereo para num. Depois ser feita a leitura do teclado e armazenado o valor na varivel num. Processamento: o processamento pode ser realizado atravs de uma atribuio, ou uma expresso matemtica, que resultar num valor. O processamento pode ser realizado com as entradas. O resultado gerado tambm poder ser armazenado na memria. A atribuio no pseudocdigo representada pela seta ( )e o operador em C para atribuio o igual ( = ). Pseudocdigo: num 4; Varivel num recebe o valor 4 ou atribudo 4 a varivel num Codificao em C num = 4; Sada: pode ser a exibio de uma mensagem, ou a recuperao de um contedo que est na memria e ser transmitido para um dispositivo de sada (monitor, impressora, caixa de som, entre outros). A sada no pseudocdigo denominada como escreva ou exiba. O dispositivo de sada a ser utilizado o monitor. Pseudocdigo: Escreva (Informe um nmero); Escreva (Salrio calculado , sal); Bloco de instrues/comandos Um bloco de comandos ou instrues determina o conjunto de aes a serem executadas. Ele serve para definir os limites de existncia de uma varivel, ou seja, o escopo de uma varivel. Podemos ter diversas variveis declaradas no decorrer do algoritmo/programa, podendo ter duas com o mesmo nome, mas valores diferentes, dependendo do bloco em que foram declaradas. As aes dentro do bloco so separadas pelo ponto e vrgula ( ; ). Servindo para organizar e determinar a execuo ou encerramento de uma ao.

Prof Angelina V.S.Melar 49

Funes de Entrada e Sada Formatada


1. Funo de Sada - printf() A funo printf() realiza a sada de dados em vrios formatos, de acordo com a configurao feita pelo programador. O prottipo da funo est no arquivo de cabealho STDIO.H. Com essa funo possvel exibir mensagens, resultados de clculos, endereos de memria. O prottipo do printf() : printf(string_de_controle, lista_de_argumentos); Na string de controle definido tudo que ser exibido na tela: cadeia de caracteres, o formato das variveis (usando-se o comando de formato - %) e os caracteres de controle (usando o smbolo \). Na lista de argumentos definem os formatos que sero exibidos os valores. Comandos de Formato mais usados Cdigo Formato um nico caracter %c %d inteiros decimais com sinal %i inteiros decimais com sinal %f ponto flutuante decimal double %lf %s string cadeia de caracteres hexadecimal sem sinal %x %u inteiro decimal sem sinal ponteiro %p octal %o %e float exponencial ponto flutuante curto %g %% % possvel especificar o tamanho dos campos que sero exibidos. Como nos exemplos abaixo: %4d _ _ 3 3 %7.2f _ _ _ 5.3 0

7 possveis no total, sendo fixadas 2 para o nmero de casas decimais


Comando printf("%8i", 10); Exibio ( 10) Explicao As posies definidas a mais so preenchidas com espao em branco e o valor alinhado direita do campo. Se o tamanho do campo for precedido por um - (menos), ento, o valor ser alinhado esquerda do campo. Se o tamanho do campo for precedido com o 0 (zero), ento as posies excedentes 50

printf("%-8i", 10);

(10

printf("%08i", 10);

(0000010)

Prof Angelina V.S.Melar

printf(%.1f,1910.10)

1910.1

so preenchidas com zeros. Deve ser colocada a quantidade de casas decimais a serem exibidas junto com o comando de formato, como no exemplo %.1f

printf(O resultado da soma :); soma =4.51; printf(O resultado : %6.2f, soma); printf (Mostra o smbolo %% %%") printf ("Um tipo caractere %c e um tipo inteiro %i",A',20) printf ("%s uma string","Este") printf ("%s%d%%","Juros de ",10)

O resultado da soma O resultado da soma 4.51 %% Um tipo caractere A e um tipo inteiro 20 Este um exemplo string Juros de 10%

2. Funo de Entrada scanf() A funo scanf() usada para fazer entrada de dados. Essa funo captura o valor digitado no teclado e armazen-o em uma varivel. Os valores capturados so convertidos para o formato interno apropriado. O prottipo dessa funo est no arquivo de cabealho STDIO.H.

Sua estrutura e: scanf(string_de_controle, &lista_de_argumentos); Primeiro se define o tipo de varivel a ser recebido Deve ser colocado o operador & (endereo de memria) antes de cada uma das variveis da lista de argumentos (exceto para strings). Deve ser colocado o mesmo nmero de argumentos e de string de controle. Num tipo string, o espao em branco finaliza a entrada. Podem ser recebidos vrios valores ao mesmo tempo, usando como separador de entrada um espao em branco ou o caracter dois pontos ( : ). Os especificadores %d, %f, %e pulam automaticamente os brancos que precedem os valores numricos.
Comandos de Formato mais usados Cdigo Formato %c caracter %d , %i inteiros decimais com sinal %f , %e, %g ponto flutuante decimal %s string de caracteres Exemplo:

float nota1, nota2; scanf(%f, &nota1); scanf(%f, &nota2); scanf(%f%f , &nota1, &nota2); int hora, minuto; scanf(%i:%i, &hora,&minuto);

ou

Prof Angelina V.S.Melar 51

1. Funo de Entrada de caracter getch() e getchar() As funes getch() e getchar() esto na biblioteca conio.c. Elas so usadas para a entrada de um caracter. A diferena entre elas que a getchar() espera aps o caracter digitado a tecla enter e o getch() no.

#include <stdio.h> #include <stdlib.h> #include <conio.c> main() { char caracter; caracter=getch(); printf ("Voce pressionou a tecla %c que equivale ao numero %i Asc",caracter, caracter ); _sleep(2000); }

Exemplos
Exemplo 1 Faa um programa que receba dois nmeros inteiros e efetue as operaes: adio, subtrao, multiplicao, diviso, resto da diviso e exponenciao. Pseudocdigo Incio inteiro n1, n2, soma, subtr, mult, divisao, expo, resto; escreva (Informe primeiro nmero); leia (n1); escreva (Informe segundo nmero); leia (n2); soma n1+ n2; subtr n1 - n2; mult n1 * n2; divisao n1 / n2; resto n1 mod n2; expo = (n1, n2); escreva (Soma:, soma); escreva (Subtracao:, subtr); escreva (Multiplicacao:, mult); escreva (Divisao:, divisao); escreva (Resto da diviso:, resto); escreva (Exponenciao:, expo); Fim Codificao em C #include <stdio.h> #include <stdlib.h> #define escreva printf

main() { int n1, n2, soma, subtr, mult, divisao, expon, resto; escreva ("Informe 2 numeros"); scanf("%i%i", &n1, &n2); soma= n1+ n2; subtr= n1 - n2; mult= n1 * n2; divisao= n1 / n2; resto= n1 % n2; escreva ("Soma: %i - Subtracao: %i \n", soma, subtr); escreva ("Multiplicacao: %i \n", mult); escreva ("Divisao: %i Resto da diviso: %i\n", diviso, resto); _sleep(8000); }

Prof Angelina V.S.Melar 52

Exemplo 2 1) Calcular a idade atual e daqui a 30 anos de uma pessoa.


INCIO

Descrio Narrativa: ANO_NASC Receber o ano de nascimento Receber o ano atual Receber Subtrair o ano atual do ano de nascimento para saber a idade ANO_ATUAL Somar o valor da idade com 30 para saber quantos anos ter daqui 30 anos Mostrar idade atual IDADE = ANO_ATUAL - ANO_NASC Mostrar idade daqui a 30 anos. Pseudocdigo Inicio inteiro ano_nasc, ano_atual, idade, idade30; Escreva (Digite o ano atual); Leia (ano_nasc); Escreva (Digite o ano de nascimento); Leia (ano_atual); Idade ano_atual ano_nasc; Idade30 idade +30; Escreva (A sua idade , idade); Escreva (Daqui a 30 anos voc ter:,Idade30); Fim
Linguagem C #include <stdio.h> #include <stdlib.h> main() { int ano_nasc, ano_atual, idade, idade30; printf(\nDigite o ano atual); scanf(%i,&ano_nasc); printf(\nDigite o ano de nascimento); scanf(%i,&ano_atual); idade = ano_atual ano_nasc; idade30= idade +30; printf(A sua idade %i, idade); printf(Daqui a 30 anos voc ter: %i,idade30); } Linguagem Pascal Program idade; Var ano_nasc, ano_atual, idade, idade30: integer; begin write(Digite o ano atual); readln(ano_nasc); write(Digite o ano de nascimento); readln(ano_atual); idade := ano_atual ano_nasc; idade30 := idade +30; writeln(A sua idade , idade); writeln(Daqui a 30 anos voc ter:, idade30); end

Receber

IDADE30 = IDADE + 30

Mostrar IDADE

Mostrar IDADE30

FIM

Prof Angelina V.S.Melar 53

Teste de Mesa

MEMRIA VALORES SIMULADOS


ANO_NASC ANO_ATUAL

1980
IDADE

1998
IDADE30

1980 1998

18

48

ENTRADA

SADA

PROCESSAMENTOS
IDADE = ANO_ATUAL - ANO_NASC IDADE = 1998 1980 IDADE = 18 IDADE30 = IDADE + 30 IDADE30 = 18 + 30 IDADE30 = 48

18 48

Prof Angelina V.S.Melar 54

Exerccios Resolvidos e Propostos


01) Uma loja de telefone celular paga aos seus vendedores um salrio fixo mais uma comisso de R$ 50,00 por cada aparelho vendido. Faa o pseudocdigo e fluxograma que receba o nome do vendedor, o nmero de aparelhos vendidos e calcule o salrio total do vendedor. Entrada: nome do vendedor nmero de aparelhos vendidos valor do salrio fixo (mesmo no sendo pedido no enunciado, o valor do salrio fixo deve ser recebido para o clculo do salrio total) Processamento: calcular o valor da comisso _ quantidade de aparelhos vendidos * 50 calcular o salrio total _ o valor da comisso + o valor do salrio fixo Sada: mostrar o salrio total do vendedor Pseudocdigo INCIO caracter nome; inteiro quant; real sal_bruto, comis, sal_total; escreva (Nome do Funcionrio:); leia nome; escreva (Quantos aparelhos foram vendidos); leia quant; escreva (Qual o valor do salrio fixo); leia sal_bruto; comis quant * 50; sal_total sal_bruto + comis; escreva (O salrio final :, sal_total); FIM Fluxograma:
INCIO

Receber NOME_VEND

Receber QUANT

Receber SAL_BRUTO

COMIS = QUANT * 50

SAL_TOTAL = SAL_BRUTO + COMIS Mostrar


SAL_TOTAL

FIM

Prof Angelina V.S.Melar 55

Operador Relacional e Lgico


1. Operadores Relacionais Os operadores relacionais so utilizados em expresses de lgicas, para comparao e testes condicionais de valores de constantes ou contedo de variveis. Eles podem ser usados numa expresso que tambm tenha operadores aritmticos. Esses operadores relacionais geram um resultado lgico (Verdadeiro ou Falso) quando aplicados nas expresses. Operador (pseudocdigo) Significado C Igual == = Maior > > Menor < < Menor ou igual <= <= Maior ou igual >= >= Diferente de != <> A precedncia de execuo : <. <=, >, >=, !=, == Expresso em pseudocdigo 3=5 15 > 5 5+ 6 = 11 7 < 4-5 s = n Expresso em C 3==5 15 > 5 5 + 6 = = 11 7 < 4-5 s = = n Resultado 0 - Falso 1- Verdadeiro 1- Verdadeiro 0 - Falso 0 - Falso

Na linguagem C no existe o tipo lgico (booleano) com os valores true e false (verdadeiro ou falso). Ao verificar uma expresso, o compilador compara e retorna o valor zero ou um. O valor zero representa o falso e, qualquer valor diferente de zero, no caso o valor um, representa o verdadeiro. 2. Operadores Lgicos As expresses lgicas so aquelas que operam com valores lgicos e resultam tambm num valor lgico. Elas podem ser utilizadas em testes de variveis, tomada de deciso e expresses matemticas. A funo do operador lgico NO pode modificar valores e expresses, pois ele serve para negar a expresso. Operador NO E OU Operao Negao Conjuno Disjuno Prioridade 1 2 3 C ! && ||

Prof Angelina V.S.Melar 56

3. Tabela Verdade: o conjunto das possibilidades combinatrias dos operadores lgicos. E OU NO VeV=V V ou V = V No F = V VeF=F V ou F = V No V =F FeV=F F ou V = V FeF=F F ou F = F
Exemplos: Pseudocdigo No ( Idade = 5 ) num1 5 num2 6 num1 > 7 E num2 > 5 C ! ( Idade = = 5 ) num1 = 5; num2 = 6; num1> num2>5 7 Explicao Nessa expresso temos o resultado Falso, pois o operador lgico NO negou a expresso contida dentro do parnteses. O resultado dessa expresso Falso, pois o operador E exige que as duas condies sejam verdadeiras para o resultado ser Verdadeiro. Veja && que a primeira condio est indicando que o Nmero1 maior que 7, mas isso no verdadeiro, pois o valor do Nmero1 5, e 5 menor que 7. A segunda condio verdadeira, pois 6 maior que 5. O resultado dessa expresso Verdadeiro, pois o operador OU indica que apenas uma das condies precisa ser verdadeira para o resultado ser Verdadeiro. Observem a diferena do operador OU com o operador anterior E.

num1 5 num2 6 num1> 7 OU num2> 5

num1 = 5; num2 = 6; num1>7 || num2>5

4. Prioridade dos Operadores A prioridade de execuo pode ser diferente em algumas linguagens de programao Prioridade Operador 1 Parnteses 2 Aritmticos 3 Relacionais 4 Lgicos
Exerccio: Descubra se as expresses abaixo so falsas ou verdadeiras: a) 5 + 6 = 10 b) 5 mod 2 = 2 c) 15 <> 5 + 5 d) 33 > 3 OU carol = carolina e) 16 > 5 * 2 f) 20 < 2 g) 56 > 45 + 4 h) feijo = feijoada i) 56 < = 4 j) 70 > = 3 ** 2 k) 5 >= 5 E 4 = 5 l) 12 + 1 = 13 OU 4 + 2 = 7 m) 18 > 7 E 19 < 7 n) 90 = 3 OU 80 > 5

Prof Angelina V.S.Melar 57

Estrutura de Deciso /Condicional/ Seleo


Todas as complexidades de um problema no podem ser passadas no computador baseadas apenas numa estrutura linear, pois esta estrutura no prev a possibilidade de desvios de instrues. Para o desenvolvimento de programas mais completos estudaremos a partir de agora uma nova estrutura, a de deciso. As condies, ou verificaes e testes esto presentes em quase todos os programas, devido grande flexibilidade e poder de ao que tais estruturas proporcionam. As decises so representadas pelas expresses relacionais/lgicas e Algoritmos (Descrio Narrativa) Estrutura Linear INCIO Pegar o doce Tirar da embalagem Comer o doce FIM essas podem ter dois resultados, a do Verdadeiro ou a do Falso. Conforme o resultado um dos caminhos deve ser executado, sendo obrigatrio existir o do verdadeiro, mas no o do falso. Na verdade a deciso uma condio ou expresso lgica que testada e verificada, podendo ser verdadeira ou falsa. Se depois de avaliada a condio e o resultado for verdadeiro, ento, os passos a serem executados so diferentes daquele em que se o resultado fosse falso. Existem diversas estruturas condicionais: simples, composta encadeada, mltipla escolha.

Estrutura Condicional INCIO Pegar o doce Tirar da embalagem SE o doce estiver estragado ento Jogar fora o doce SENO Comer o doce FIM
INCIO

INCIO

PEGAR O DOCE

PEGAR O DOCE

TIRAR DA EMBALAGEM

TIRAR DA EMBALAGEM

COMER O DOCE

F
FIM COMER O DOCE

EST ESTRAGADO?

V
JOGAR FORA O DOCE

FIM

Prof Angelina V.S.Melar 58

No exemplo acima podemos ver facilmente a importncia da estrutura de deciso. Na primeira estrutura, a linear, existe apenas trs procedimentos e no h verificao das informaes. Na segunda estrutura foi possvel fazer a verificao de possveis falhas na seqncia de processos, onde, foi constatada a falta do procedimento que verificasse se o doce estava ou no estragado.

Exerccio Resolvido
Elabore um programa que receba dois nmeros e no final mostre o maior nmero digitado. Entrada: Receber dois nmeros Processamento: Verificar qual o maior nmero digitado Linguagem C Sada: #include <stdio.h> Mostrar o nmero maior #include <stdlib.h> main() Pseudocdigo { Inicio float num1, num2; Real num1, num2; printf(\nDigite o primeiro nmero); Escreva (Digite o primeiro nmero); scanf(%f,&num1); Leia num1; printf(\nDigite o segundo nmero); Escreva (Digite o segundo nmero); scanf(%f,&num2); Leia num2; if (num1 > num2) SE (num1 > num2) ento printf(O maior nmero %f, num1); Escreva (O maior nmero : , num1); else Seno printf(O maior nmero %f, num2); Escreva (O maior nmero : , num2); } Fim Teste de Mesa
VALORES SIMULADOS MEMRIA
NUM1
PROCESSAMENTO

NUM2

100 5

100

SADA ENTRADA

100

Prof Angelina V.S.Melar 59

Tipos de Estruturas de Deciso


1. Estrutura de Deciso Simples A instruo somente ser executada se a condio testada for Verdadeira. Quando for mais de uma instruo a ser executada deve ser delimitado o bloco de instrues, com seu incio e fim. SE (condio) ENTO instruo; SE (condio) ENTO Incio instruo 1; instruo 2; instruo n; Fim

if (condio) instruo;

if (condio) { instruo 1; instruo n; }

Exemplo: a) if (n1 > n2) printf (O primeiro nmero maior que o segundo);

b) if (n1> n2) { printf(O primeiro nmero maior que o segundo); printf(Informe outro valor); scanf(%i, &n3); }

Prof Angelina V.S.Melar 60

2. Estrutura de Deciso Composta: A condio ser testada e de acordo com o seu resultado (verdadeiro ou falso) ser executado um caminho (instruo) diferente. Essa estrutura usada quando as duas possibilidades dependem de uma mesma condio. Onde uma contradiz a outra.
SE (condio) ENTO instruo; SENO instruo; SE (condio) ENTO Incio instruo 1; instruo n; Fim SENO Incio Instruo 1; Instruo n; Fim

if (condio) instruo; else instruo;

if (condio) { instruo 1; instruo n; } else { Instruo 1; Instruo n; }

Exemplo: a) if (n1 > n2) printf (O primeiro nmero maior que o segundo); else if (n1 == n2) printf (Os dois nmero so iguais); else printf (O segundo nmero maior que o primeiro);

Prof Angelina V.S.Melar 61

3. Estrutura de Deciso Encadeada:

Essa estrutura usada quando existem vrias verificaes a serem feitas e uma pode depender da outra. Pode ser executada uma condio simples ou composta dentro de outra condio. Pode existir a Estrutura de Deciso Heterognea, quando no existe um padro lgico no encadeamento. Exemplo: se..seno...se...se...seno. Quando existe um padro lgico das estruturas de deciso chamada Estrutura de Deciso Homognea. Exemplo: se..seno..se..seno..se..seno.
SE (condio) ENTO Incio instruo; SE (condio) ENTO instruo; Fim SENO Incio Instruo 1; Instruo n; Fim

if (condio) instruo; else if (condio) { instruo 1; instruo n; } else if (condio) instruo;


Exemplo: If (n1 > n2) printf(O primeiro nmero maior que o segundo);

else if (n2 == 0) { printf (O segundo nmero no pode ser zero); printf(Informe outro nmero); scanf(%i, &n2); } else if (n1 == n2) { printf (Os dois nmero so iguais); printf(Informe outro nmero); scanf(%i, &n3); }
Prof Angelina V.S.Melar 62

Intervalos
Dentro da estrutura de deciso existe a definio de intervalos. Estes intervalos definem as faixas que esto enquadrados os valores. Elas podem ser definidas de diferentes formas, como nos exemplos abaixo:
Exemplo 1: Receba uma idade qualquer e mostre uma mensagem de acordo com ela. Se a idade for igual ou menos de 5 anos a criana deve ser INCIO vacinada. Pseudocdigo Inicio Inteiro idade; Escreva (Digite sua idade); Leia (idade); SE (idade <= 5) ento Escreva (Deve ser vacinada); Fim
Nesse programa apenas as pessoas que tiverem idade menor ou igual a 5 anos devem ser vacinadas. Ficando excludas as com idade superior a 5 anos. Esse um exemplo de intervalo que contm todos os valores menores ou iguais a 5.
Receber IDADE

IDADE <= 5

Mostrar Deve ser vacinada

FIM

...

Exemplo 2: Receba a idade de uma pessoa e mostre uma mensagem de acordo com ela. As pessoas que tem mais de 11 anos e menos de 18 so consideradas adolescentes. Pseudocdigo

Inicio Inteiro idade; Escreva (Digite sua idade); Leia idade; SE (idade >= 11) ento SE (idade <= 18) ento Escreva (Adolescente); Fim

No exemplo anterior todos os valores menores que 5 seriam vlidos. J nesse exemplo, somente os nmeros que vo de 11 a 18 so vlidos. Nessa expresso pode ser usado o operador lgico E.

SE idade >= 11 E idade <= 18 ento

Prof Angelina V.S.Melar 63

Exemplo 3: Receba a idade de uma pessoa e mostre uma mensagem de acordo com ela. As pessoas que tiverem menos de 18 anos e mais de 85 no esto aptas a dirigir e devem ser alertadas com uma mensagem. Pseudocdigo Inicio Inteiro idade; Escreva (Digite sua idade); Leia idade; SE (idade < 18) ento Escreva (No pode dirigir); SE (idade > 85) ento Escreva (No pode dirigir); Fim

As faixas acima mostram claramente que h dois tipos de intervalo diferentes: um intervalo com valores menores de 18 e outro intervalo com valores superiores a 85. Sendo excludos todos os valores internos da faixa. Este tipo de intervalo pode ser definido com o operador lgico OU.
SE idade < 18 OU idade > 85 ento

Operador Ternrio
Em C existe o operador ? (operador condicional) que facilita a verificao de sentenas simples (nicas). Estrutura: condio ? expresso1 : expresso2; A condio avaliada; Se ela for verdadeira o resultado a execuo da expresso1; Se a condio for falsa o resultado a execuo da expresso2.
1) /* O reajuste ser de acordo com o salrio. 2) /*Mostra o quadrado de um nmero Se este for maior que 2000 o reajuste ser de diferente de zero. Se o nmero digitado for 10%, seno, de 30% */ zero aparece a mensagem Erro */

#define escreva printf main() { int sal = 1000; float reajuste; sal>2000 ? reajuste = 0.10 : reajuste = 0.30; escreva ("reajuste : %g\n", reajuste); _sleep(2000); }

#define escreva printf main() { int x; escreva("Entre com o valor de x"); scanf("%i", &x); x!= 0 ? printf("\n Quadrado de x = %i", (x*x)) : printf("\nErro"); _sleep(2000); }

Prof Angelina V.S.Melar 64

Seleo Mltipla
As linguagens de programao possuem um comando exclusivo para seleo mltipla (verifique...caso). Nessa estrutura o computador far um teste sucessivo, verificando o valor da expresso numa lista seqencial de constantes, ao encontr-lo ele executar o bloco de comandos que esto associados constante. Dependendo da linguagem que for utilizada essa estrutura pode ser exclusiva, ou seja, quando for executado um caso, os demais sero excludos. Na linguagem C se faz a excluso pelo comando break e somente pode ser usada essa estrutura para verificaes de valores de uma varivel do tipo inteiro ou caracter, no existe teste de intervalos, ou mesmo vrias verificaes ao mesmo tempo.
Pseudocdigo: verifique <varivel> incio caso <valor> : <instrues> ; pare; caso <valor> : <instrues >; pare; .... caso no seja nenhuma das opes anteriores: < instrues>; pare; fim do verifique

** tem linguagens que permite o teste de intervalo de valores como: caso valor 1..valor n: case valor1, valor 3, valor 7:
Codificao em C: switch (varivel) { case <valor>: instrues; break; case <valor>: instrues; break; ... default: instrues; }

O comando default executado se nenhum valor for encontrado nos case anteriores, ou seja, nas comparaes ele no encontrar um valor verdadeiro. O uso do default opcional. O comando break serve como um desvio de execuo. Ao ser executado dentro do switch ele finaliza a seqncia de instrues do case e sai do switch. Se no for usado o break o computador continuar dentro do switch executando as instrues dos outros case.

Prof Angelina V.S.Melar 65

Exemplos: a) #include <stdio.h> #include <conio.c> main() { int num; printf("Informe um valor inteiro"); scanf("%i", &num); switch(num) { case 1:case 2:printf("Valor baixo"); break; case 5:case 8:printf("Valor alto"); break; default: printf("Valor Invalido\n"); break; } getch(); } b)

case / : if( n2 = = 0 ) printf(No existe diviso por zero); else r= n1 / n2; break;

Curiosidade:

Pode existir case sem instruo associada. Caso isso ocorra o computador executar as instrues do prximo case.

Prof Angelina V.S.Melar 66

Exerccios Resolvidos
01) Faa um programa que classifique as mquinas conforme a produo de cabo para telefones. Veja a tabela abaixo: Produo Classificao maior ou igual a 60.000 Boa menor que 60.000 e maior que 40.000 Regular menor ou igual a 40.000 Ruim
Pseudocdigo Incio Real quantpro; Leia quantpro; SE (quantpro >= 60000) ento Escreva (Produo Boa); SENO SE (quantpro > 40000) ento Escreva (Produo Regular); SENO Escreva (Produo Ruim); Fim Linguagem C #include <stdio.h> #include <stdlib.h> main() { float quantpro; printf(\nDigite a quantidade produzida); scanf(%f,&quantpro); if (quantpro >= 60000) printf (Produo Boa); else if (quantpro > 40000) printf(Produo Regular); else printf(Produo Ruim); }

02) Receba um nmero inteiro e classifique-o como negativo, positivo ou nulo. Essa classificao dever ser exibida por uma mensagem. main() { int numero; scanf(%i, &numero); if (numero = = 0) printf(Nmero Nulo); else if (numero > 0) printf (Nmero Positivo); else printf(Nmero Negativo); } Ou... main() { int numero; scanf(%i, &numero); if (numero = = 0) printf(Nmero Nulo); if (numero > 0) printf (Nmero Positivo); if (numero < 0) printf(Nmero Negativo); }

Prof Angelina V.S.Melar 67

Variveis de Bloco
Os blocos de instrues que so delimitados pelas {}, podem ser descritos dentro de uma estrutura condicional, de repetio, entre outras. Dentro desse bloco podemos definir variveis locais a eles, de forma que essas so variveis locais ao bloco, ou seja, definidas e acessadas somente no bloco. Podemos ter vrias variveis com o mesmo nome no mesmo cdigo fonte, sendo todas variveis distintas, de acordo com a sua declarao. /* Exemplo do uso de variveis de bloco e a exibio do endereo da memria*/ #include <stdio.h> #include <stdlib.h> main() { int cont=0; printf("\nValor do contador %i", cont); printf("\nEndereco de cont %i\n", &cont); if (cont == 0) { int cont = 5; printf("\n\tValor do contador do bloco %i", cont); printf("\n\tEndereco de cont do bloco %i\n", &cont); } printf("\nValor do contador fora do bloco %i", cont); printf("\nEndereco de cont fora do bloco %i", &cont); getch(); }

Prof Angelina V.S.Melar 68

Estrutura de Repetio
Lao (Loop) Toda vez que voc ler ou ouvir a palavra loop saiba que ela significa retornar, igual o loop de uma montanha russa, onde voc gira, e gira e repete essa volta vrias vezes. Ento, loop na programao significa repetio, iterao, volta a executar um procedimento j executado.

Pode ser feita a repetio de apenas uma instruo ou de um conjunto de instrues, podendo ser ou no definida a quantidade de vezes que ir repetir. Tome cuidado na hora da definio dos processos a serem repetidos. Se voc quiser que a tela seja limpa toda vez que for exibida uma mensagem; ento a instruo para limpar a tela deve estar dentro do corpo do loop, seno, a tela ser limpa apenas uma vez. A estrutura que aprenderemos a partir de agora usada para tornar automtica a repetio de um programa inteiro ou apenas uma parte dele. Com a repetio automtica os programas tornam-se mais rpidos e geis, no existindo linhas de comandos idnticas repetidas.

A estrutura de repetio pode ser pr-definida com contador ou condicional

Quando for repetido um trecho do programa e j se souber a quantidade de vezes que ele ser executado, ento, voc usar a estrutura de repetio pr-definida com contador. Um exemplo onde podemos usar esta estrutura num programa que faz a exibio do nmero 1 at 300. Mas, quando no conhecido de antemo o nmero de vezes a ser repetido um conjunto de instrues, ento voc usar a estrutura com condio. Essa estrutura consiste em executar as instrues enquanto uma condio pr-definida for verdadeira.
Smbolo de repetio no fluxograma Esse smbolo usado para representar estruturas de repetio, sejam elas pr-definidas ou no.

Prof Angelina V.S.Melar 69

Estrutura de Repetio Condicional (Enquanto..Faa / Faa..Enquanto / Repita..at)


Essa estrutura de repetio usada quando a quantidade de vezes um determinado trecho do programa desconhecida. O que determina o trmino o resultado da verificao de uma condio. Existe a repetio pr-condio, com teste no incio, e a ps-condio, com teste no final.
1. Repetio com Pr-condio- Enquanto..faa Neste tipo de estrutura de repetio, o bloco de instrues ser repetido enquanto a condio testada no lao for verdadeira. Quando ela se tornar falsa pra a repetio e o fluxo de execuo passa para a prxima linha depois do lao. O teste da condio feito no incio antes de comear o bloco de instrues que sero repetidos. Cuidado ao usar o Enquanto: Se na primeira vez a condio testada j for falsa, ento, no ocorrer nenhuma vez a execuo das instrues dentro do lao. Para que isso no ocorra necessrio fazer a validao da condio, ou seja, torn-la verdadeira antes de testar. Enquanto .. Faa
da o alida V cond io

Condio N=3

ENQUANTO N < =20 INSTRUES

Receber N

Incio ... Instruo; validao da condio; ENQUANTO (condio) FAA Instruo; Fim
Obs:Estrutura que repete apenas uma instruo

INSTRUES Incio ... Instruo; validao da condio; ENQUANTO (condio) FAA Incio Instruo; Instruo; Fim Fim

Obs: Sero repetidas vrias instrues, por isso h a necessidade de haver um delimitador (inicio/fim) do bloco de repetio.

Estrutura em C while (condio) instruo;

while (condio) { Instruo1; Instruo2; ... Instruo n; } 70

Prof Angelina V.S.Melar

2. Repetio com Ps-condio - Faa..Enquanto Na linguagem C existe o teste da condio no final do bloco de repetio:

Faa .. Enquanto
Nesta estrutura a execuo das instrues ocorrer pelo menos uma vez, pois a condio que determina o fim da repetio est no final do bloco de instrues. De forma, que no preciso validar a condio no incio. Enquanto a condio testada for verdadeira ser feita a execuo das instrues repetidamente.

Incio ... Instruo; Faa Incio Instruo1; Instruo2; ... Instruo n; Fim ENQUANTO (condio); Fim
3. Repetio com Ps-condio - Repita..at Na linguagem Pascal existe o tipo de repetio Repeat..until, que no pseudocdigo representamos pelo repita..at. Essa estrutura tambm faz a verificao da condio no final do bloco de instrues, como a estrutura do Faa..enquanto. A diferena que no repita..at, a repetio feito at a condio testada se torne verdadeira, ou seja, enquanto for falsa a condio continua repetindo a execuo.

Incio Instruo; Repita Instruo1; Instruo2; ... Instruo n; at (condio); Fim

Prof Angelina V.S.Melar 71

PENSE: Imagine a situao: Voc tem que desenvolver o mdulo de Saque para um Banco. Como voc faria? permite o saque quantas vezes quiserem e depois deduz do saldo Ou... primeiro faria o programa verificar o saldo para depois permitir o saque.

Exemplos de Pseudocdigo a) num 1; enquanto (num >0) faa incio ... fim faa incio .... fim enquanto (num >0); b) resp s; enquanto (resp = s) faa

c)

a)

num = 1; while (num >0) { .... }

b)

Exemplos em C resp = s; while (resp = s) { ... }

c) do { . .... }while(num >0);

4. Comandos Break, Continue funo Exit() Esses comandos so usados para se fazer um desvio na execuo. O break e o continue so usados dentro de laos (for, while). Break: pode ser usado para terminar um case(switch) ou para forar o trmino de um lao. Depois de encerrado o lao ele retorna para o comando seguinte fora do lao. Continue: ele encerra apenas a iterao atual do lao- no executa as instrues aps ele voltando ao incio da repetio. Exit(): finaliza a aplicao, podendo retornar um valor, qualquer valor diferente de 0 significa deu algum tipo de erro.

Prof Angelina V.S.Melar 72

5. Enquanto Verdadeiro O valor 1 significa verdadeiro, de forma que voc pode colocar uma condio sem definio da expresso lgica.

Exemplo 1: para criar um loop infinito: while (1) { printf("Programao de um loop "); } Exemplo 2: para criar um loop com a condio de trmino definida dentro do estrutura de repetio: #include <stdio.h> #include <stdlib.h> int main() { int num;
while (1) { scanf("%d", &num); if (num ==0) exit(0); }

_sleep(7000); }

Dica: O exit(0) ir finalizar o programa direto. Se for usado o break no lugar do exit(0) ele ir finalizar a repetio e ir continuar o programa executando o _sleep(7000), e as demais instrues que houverem aps a estrutura de repetio.

Prof Angelina V.S.Melar 73

Faa um programa que receba as notas e faltas de 2 alunos. Faa a consistncia da nota, alertando quando for digitada uma nota invlida (menor que 0 ou maior que 10).

#include <stdio.h> #include <stdlib.h> main() { float cont=1, nota=0, falta; while (cont <= 2) { printf("\nDigite a nota do aluno:"); scanf("%f", &nota); if ((nota < 0) || (nota > 10)) { printf("\nA nota digitada deve estar entre 0 e 10"); continue; } printf("\nDigite a frequencia do aluno:"); scanf("%f", &falta); cont++; } system("pause"); }

Prof Angelina V.S.Melar 74

Repetio Pr-Definida Para


Essa estrutura de repetio usada quando conhecida a quantidade de vezes em que uma determinada parte do programa ser repetida. Essa parte pode ser formada por uma ou vrias instrues. C
CONDIO

PARA <varivel_controlevalor inicial> AT <valor_final> INC <incremento> FAA Instruo; PARA varivel_controle DE valor inicial AT valor_final PASSO valor_incremento FAA Instruo;

Varivel de controle ou Varivel Contadora atravs dessa varivel que se Valor inicial controla a repetio. Essa varivel pode ser iniciada tanto com valores negativos Varivel de repetio Valor final como positivos, dependendo da forma Valor de Incremento que feita a contagem e controle da varivel: regressiva ou progressiva. REPITA N = 1, 20, 1 Na linguagem C podem existir diversas variveis de controle. Valor inicial: O valor inicial INSTRUES indica qual o primeiro valor a ser armazenado dentro da varivel de controle. PRXIMO N Valor final: atravs desse valor que determinado o fim a repetio. Na linguagem C o que existe no lugar do valor final uma condio. Enquanto essa condio for verdadeira continua a INSTRUES repetio, quando ela se torna falsa o lao finalizado. Incremento ou decremento: O incremento ou decremento um valor ou uma frmula que muda o valor da varivel de controle, de maneira que essa varivel saia do valor inicial e atinja o valor final, e dessa maneira torne falsa a condio testada.

Prof Angelina V.S.Melar 75

6. Estrutura em C for (varivel de controle = valor inicial; condio que define o fim do lao; valor do incremento ou decremento) instruo; ou, for (varivel de controle = valor inicial; condio que define o fim do lao; valor do incremento ou decremento) { Instruo 1; Instruo 2 ; ... Instruo n; } Exemplos:

a) for (cont =1; cont <=10; cont ++) printf(Ordem crescente: %i, cont); b) for (cont =10; cont >=1; cont --) { printf(Ordem decrescente: %i , cont); _sleep(500); system(cls); }
Dicas: O break encerra o lao a qualquer momento. O continue faz com que o lao seja finalizado sem executar as instrues abaixo e volte ao incio, fazendo um novo ciclo. O uso de mais de uma varivel dentro do for deve ser feito com o uso da vrgula (,). for (n1=1, n2=1; n1+n2 < 10; n1++, n2++) No obrigatria a definio dos trs parmetros, podendo ser feito um lao infinito. for ( ; ; ) printf(Oi!); O lao for pode ser usado para criar um atraso de tempo. Para isso ele no deve possuir nenhuma instruo associada a ele. for (atraso =0 ; atraso < 100; atraso++);

Prof Angelina V.S.Melar 76

Cuidado: Se a condio a ser testada j inicia sendo falsa, as instrues dentro do lao nunca sero executadas. int cont = 100; for (; cont <1 ; cont++) Cadastre o nmero de identificao das 200 peas.

Incio int numiden, cont; PARA contl AT 200 INC contcont +1 FAA Incio Escreva (Nmero de identificao do funcionrio:); Leia (numiden); Fim Fim
Linguagem C Condio de trmino da repetio: #include <stdio.h> Repete at que o valor de cont fique maior que 200 #include <stdlib.h> Ou main() Enquanto o valor de cont for menor ou igual a 200 repete { int numiden, cont; for (cont=1;cont <=200;cont++) { printf (Nmero de identificao do funcionrio); scanf (%i, &numiden); system(pause); } } Explicao: 1. No exemplo acima inicialmente feita a atribuio do valor 1 a varivel de controle com o valor. 2. Em seguida feita a verificao da condio que determina o fim da repetio, se ela for Verdadeira inicia a execuo do cdigo que est no bloco. Se for falsa j finaliza (mesmo se nunca executou o cdigo dentro do bloco de comandos). 3. Executa o bloco de instrues, que contm a entrada do nmero de identificao. No final da execuo do bloco automaticamente adicionado ao contedo da varivel de controle o valor 1 (anteriormente valia 1, mais 1 de agora, a varivel passa a ter o valor 2). 4. Depois verificado o valor da varivel com o valor final pr-definido (200), como no passo 2. Repetindo todo o processo vrias vezes. At que ... 5. o valor da varivel de controle atinja o valor maior que o definido no intervalo (201). Quando isso ocorrer a repetio pra e ser iniciada uma nova seqncia de comandos definidos fora da repetio, aps o bloco de comandos.

Prof Angelina V.S.Melar 77

Variveis Contadoras e Acumuladoras


Variveis Contadoras: o nome dado a uma varivel numrica que tem a funo de "contar" valores, ocorrncias, ou mesmo, um determinado fenmeno. Esse recurso de programao usado em programas de cadastro, pesquisa, controles. Atravs dessas variveis possvel contar o nmero de pessoas cadastradas, o nmero de peas com defeito. Cuidados: Variveis Acumuladoras: Para cada situao deve-se usar uma regra, um procedimento. Quando se faz a contagem de algum dado usa-se a varivel contadora, incrementando o seu contedo com o valor 1. Mas, se houver a necessidade de acumular o valor de uma varivel, ento, usa-se a varivel acumuladora, onde elas so incrementadas no pelo valor 1, mas sim pelo valor de outra varivel. Cuidados:

todas as variveis contadoras devem ser zeradas no incio; o contedo da varivel contadora deve ser incrementado com o valor de uma constante (normalmente o valor 1); para a varivel contadora ser incrementada vrias vezes ela deve ser colocada dentro de um lao.

todas as variveis acumuladoras devem ser zeradas no incio do processo; o contedo de uma varivel acumuladora deve ser incrementado com o valor de outra varivel; para a varivel acumuladora ser incrementada vrias vezes ela deve ser colocada dentro de um lao.

Exemplo: ContPessoas ContPessoas + 1;

Exemplo: Somanota Somanota + Nota;

Varivel Contadora = Varivel contadora + cont++;

Varivel Acumuladora = Varivel acumuladora + valor de outra varivel Soma += nota;

Prof Angelina V.S.Melar 78

SubAlgoritmos/ Modularizao
1. Sub-Rotinas (Mdulos) As sub-rotinas, tambm chamadas de mdulos ou subprogramas, so trechos de instrues que realizam tarefas especficas e que podem ser realizadas diversas vezes durante a execuo do programa. Ao ser decomposto um programa em subprogramas ou sub-rotinas este tem sua complexidade tambm dividida. Desta forma possvel focalizar a ateno em um problema de cada vez, fazer os programas ficarem mais organizados e menores. A linguagem C possibilita o uso de sub-rotinas por meio das funes. Na linguagem C existe a funo principal main(), que sempre a primeira rotina executada, e a partir desta as outras rotinas so executas. A linguagem C formada por funes, como printf(), scanf(), system(), que so includas atravs da diretiva #include (j explicada anteriormente). 2. Declarao da Funo tipo_de_retorno nome_da_funo (tipo_de_parmetro nome_do_parmetro, ....) { declarao das variveis locais; corpo da funo; retorno; }

O tipo_retorno especifica o tipo de valor (int, float) que a funo retornar atravs do return. Os tipos podem ser inteiros (int), reais (float), char (caracter) ou mesmo void (no retorna nada). Se no especificado o tipo o compilador assume um retorno inteiro. O nome_da_funo o identificador da funo. Atravs dele possvel saber o que a funo executar, por exemplo, se a funo for criada para fazer uma adio ela pode ser chamada de soma(). O compilador procura pelo nome da funo para fazer o desvio de execuo. A lista de parmetros separada por vrgula. O tipo_de_parmetro e o seu nome so respectivamente o tipo e o nome da varivel que sero passados para a funo. Uma funo pode no ter parmetros. Esses parmetros estabelecem a comunicao bidirecional entre o subalgoritmo e o algoritmo que o chamou. O corpo da funo contm todas as instrues que devero ser executadas pela funo. Ele deve estar entre chaves { }. A chaves de abertura { marca o incio da funo e a chaves fechada } marca o final da funo.
As variveis locais so variveis declaradas dentro (internamente) da funo onde sero usadas e somente so conhecidas (visveis e acessveis) pela funo que as criou. Exemplo: float media_notas (float nota1, float nota2) { float media; media = (nota1+nota2)/2; return media; } Prof Angelina V.S.Melar 79

3. A funo principal - main() Por padro a funo main() deve ser do tipo inteiro, ou seja seu retorno um valor inteiro. Esse valor pode ser usado pelo sistema operacional para verificar se a execuo do programa foi bem sucedida. Quando o valor retornado zero 0 significa que a execuo foi bem sucedida, caso contrrio ocorreu algum erro. int main() { return 0; } A funo principal pode receber vrios valores (argumentos) quando executada, que depois podem ser processadas. Veja a explicao no exemplo a seguir: Na linha de comando sero passados o nome do programa e 2 nmeros inteiros, como: ANGELINA 8 27 O programa ANGELINA iniciar executando a funo main() que estar recebendo 3 argumentos, o nome do programa, o nmero 8 e o nmero 27. Para que ele possa receber esses valores foi definido da seguinte maneira:

Contm o total de argumentos passados (lembre do c como contador)

um ponteiro de uma matriz de caracteres. Cada elemento est direcionado para um argumento

int main (int argc, char * argv[]) No caso acima o argc teria o valor 3 e o argv a matriz formada por ANGELINA, 8 e 27.
Exemplo 1 : int main(int argc, char *argv[]) { printf("Total de argumentos passados %i", argc); printf("Nome do programa %s", argv[0]); _sleep(3000); return 0; } Exemplo 2: int main(int argc, char *argv[]) { int i=0; printf("Total de argumentos passados %i", argc); while (i< argc) { printf("\n%d - string informadas %s", argc, argv[i]); i++; } _sleep(3000); return 0; } Prof Angelina V.S.Melar 80

Exemplo 3: int main(int argc, char *argv[]) { int i=0; if (atoi(argv[1]) > 0) printf("\nNumero positivo"); _sleep(3000); return 0; } 4. Comando Return Tem duas formas de uso: ele provoca uma sada imediata das funo que o contm, retornando a funo anterior. retornar um valor para outra funo 5. Tipo Void Todas as funes que no devolvem valores devem ser declaradas como tipo void. Quando uma funo no tem parmetros, deve ser colocado o void entre parnteses. Quando no existe um retorno o tipo de funo void. As funes podem ser usadas como rotinas de entrada, rotinas de criao de ela ou rotinas de exibio de dados. Muitas rotinas so especficas e independem dos valores de variveis de outras rotinas, por isso o uso do tipo void na especificao das funes.
Exemplo: void entrada(void); main() { entrada(); .... system(pause); }

O void no parmetro opcional. O void na definio do tipo de funo obrigatrio

void entrada(void) { system(cls); printf(\n\n\n); printf(<1> - Adio \n); printf(<2> - Subtrao \n); printf(<3> - Multiplicao \n); printf(<4> - Diviso \n); printf(<5> - Sair \n); }

Prof Angelina V.S.Melar 81

6. Prottipos de Funes O prottipo da funo foi acrescido com o padro C ANSI. O prottipo da funo deve ser usado quando a funo for definida aps a funo principal main(). Ele um cabealho que indica ao compilador a existncia de uma funo dentro do programa, podendo estar no meio ou no final. Definio do Prottipo tipo_de_retorno nome_da_funo (tipo_de_parmetro nome_do_parmetro, ....) float media_notas (float nota1, float nota2);

main() { }
** Se a funo for descrita no incio do programa, antes da funo principal main(), no precisa ser feito o seu prottipo. 7. Chamada (ativao) da Funo A chamada de funo existe quando h uma referncia de uma funo dentro do programa. Durante o acionamento da funo, o fluxo de execuo desviado para ele, e logo aps sua concluso, o fluxo de execuo retorna a linha de origem (a que o desviou). Na linha de chamada da funo pode haver o envio ou no de argumentos para outra funo. Esses argumentos so valores de variveis, que podem ser usadas na outra funo. No so definidos os tipos de dados dos argumentos, pois os mesmos so definidos no incio da funo. Exemplo:

float media_notas (float nota1, float nota2); main() n1 e n2 { nota1 e nota2 float n1,n2,media; media= media_notas (n1, n2); } float media_notas (float nota1, float nota2) { ....}

so argumentos (enviam) so parmetros (recebem)

Os argumentos enviados para a funo devem ser compatveis com os parmetros, ou seja, se foram enviadas duas variveis (argumentos) exemplo nota1 e nota2 devem ser definidos na funo a ser executada duas variveis (parmetros) para estar recebendo os contedos das variveis. Os tipos de variveis devem ser iguais, ou seja, se os dados enviados so inteiros, ento a variveis definidas para receb-los tambm devem ser inteiros.

Prof Angelina V.S.Melar 82

8. Exemplo Completo de Funo


#include <stdio.h> #include <stdlib.h> float media_notas (float nota1, float nota2); main( ) { float n1, n2, media; printf("\n Este programa calcula a mdia de duas notas"); printf("\n\n Primeiro nota"); scanf("%f", &n1); printf("\n\n Segunda nota"); scanf("%f", &n2); media= media_notas (n1, n2); printf("\n\n A mdia das notas %.2f \n", media); system("pause"); } float media_notas (float nota1, float nota2) { float media; media = (nota1+nota2)/2; return media; } //prottipo da funo // incio da funo principal // definio das variveis locais

// chamada da funo media_notas() // fim da funo principal // declarao da funo media_notas // definio das variveis locais //retorna o resultado da mdia para a funo principal // fim da funo media_notas()

** A funo media_notas() do tipo float porque o retorno dela ser uma varivel do tipo float (media). ** Os parmetros (nota1 e nota2) so do tipo float porque seus respectivos argumentos (n1,n2) so do tipo float.

9. Classes de Armazenamento de Variveis Variveis Globais: So variveis definidas fora de qualquer funo especfica, no incio do programa, antes da funo principal. Elas podero ser manipuladas por qualquer funo e parte do programa e seus endereos e alocaes de memria permanecem at o final do programa- ou seja ficam ocupando espao. Essas variveis so definidas como extern. Elas so inicializadas com zero, caso o programador no as inicialize.

Variveis Locais: So variveis declaradas dentro de uma funo especfica e so visveis apenas na funo em que foram criadas. Funes distintas podem ter variveis locais com o mesmo nome. Quando a funo iniciada as variveis locais so criadas e quando essas funes so finalizadas as variveis locais so destrudas e liberados os endereos de memria. Essas variveis so automticas definidas e so definidas como auto. Elas no so inicializadas com zero. Ento, a varivel local ser visvel apenas na funo que a cria e a varivel global ser visvel por todas as funes existentes no programa. Isso pode ser alterado se voc definir a varivel como esttica.

Prof Angelina V.S.Melar 83

Variveis Estticas: essas variveis so visveis e definidas internamente dentro de uma funo (localmente), mas no perde seu valor depois de finalizada a funo. /* Exemplo do uso de variveis estticas*/ #include <stdio.h> #include <stdlib.h> void contador (); main() { contador(); contador(); contador(); _sleep(2000); }

void contador () { static int cont=0; printf("\nValor do contador %i", cont++); }


*** Perceba que a inicializao somente ocorre a primeira vez que a funo executada. Tambm existe a static definida fora da funo que pode ser usada em qualquer parte do cdigofonte atual, mas no pode ser usada por outros arquivos fontes. Isso quando for usada uma estrutura de projetos.

Register: as variveis definidas como register so armazenadas num registrador do processador e no na memria RAM. Dessa maneira aumentada a velocidade de processamento, j que no precisa do acesso a memria. Essas variveis devem ser int ou char.

Prof Angelina V.S.Melar 84

Funo com Passagem de Parmetro por Valor


Quando uma funo chamada, os parmetros dessa funo copiam os valores dos argumentos que so passados pela funo que a chama. Essa passagem de parmetro denominada Passagem de Parmetros por Valor. Isto ocorre porque so passados para a funo apenas os valores dos parmetros e no os prprios parmetros. Os valores dos argumentos no so alterados fora da funo que os criou. No exemplo abaixo vemos que o valor mostrado da varivel num a primeira vez (na funo main()) diferente do valor mostrado na funo quadrado(), pois, so duas variveis diferentes. O valor da varivel num alterado na funo quadrado(), mas permanece inalterada na funo main().
Exemplo: Programa que calcula o quadrado de um nmero qualquer, usando funo.
#include <stdio.h> #include <stdlib.h> float quadrado (float num); //prottipo da funo quadrado()

main() { float num, qd; //declarao das variveis locais printf ("Entre com um numero: "); scanf ("%f",&num); printf ("Na funo MAIN a varivel num vale %.2f \n", num); qd= quadrado(num); //chama a funo quadrado() e envia o argumento num printf ("O quadrado do %.2f = %.2f\n",num, qd); system(pause); } float quadrado(float num) //declarao da funo quadrado() e do { parmetro num num = num*num; printf ("Na funo QUADRADO a varivel num vale %.2f \n", num); return num; //retorna a funo que a chamou retornando um valor (num) que ser } atribudo a varivel qd. ** A funo quadrado() do tipo float porque o retorno dela ser uma varivel do tipo float (num). ** O parmetro (num) do tipo float porque o argumento (num) do tipo float.

Prof Angelina V.S.Melar 85

Exerccios Resolvidos 1) Faa uma funo que calcule a soma de dois nmeros recebidos na funo principal. #include <stdio.h> #include <stdlib.h> float soma (float a, float b); // prottipo da funo soma main( ) // incio da funo principal { float n1, n2, total; // definio das variveis locais printf("\n Este programa calcula a soma de dois nmeros"); printf("\n\n Digite o valor do primeiro nmero"); scanf("%f", &n1); printf("\n\n Digite o valor do segundo nmero"); scanf("%f", &n2); total=soma(n1, n2); // chamada da funo soma() printf("\n\n A soma de %.2f com %.2f %.2f \n", n1, n2,total); system("pause"); } // fim da funo principal float soma (float a, float b) { float res; res= a+b; return(res); } ] 2) Elabore um programa que tenha as seguintes funes: _ na funo principal deve ser recebidas pedidas duas notas e feitas s chamadas de funes. _ uma funo que receba a nota do aluno e faa a consistncia; _ uma funo que calcule a mdia; _ uma funo que exiba o resultado, se o aluno est aprovado, reprovado ou em exame. #include <stdio.h> #include <stdlib.h> float ler_nota(void); /* prottipos das funes*/ float calcula_media(float p1, float p2); void exibe_resultado(float med); void pausa(void); main() { float n1, n2, med; printf("Primeira prova: "); n1=ler_nota(); printf("Segunda prova : "); n2=ler_nota(); med=calcula_media(n1, n2); exibe_resultado(med); pausa(); } // definio da funo soma // definio das variveis locais // retorna o resultado da soma dos nmeros enviados // fim da funo soma()

Prof Angelina V.S.Melar 86

float ler_nota(void) { float n; do { scanf("%f", &n); if (n<0.0 || n>10.0) printf("Nmero Invlido! Redigite..:"); }while (n<0.0 || n>10.0); return(n); } float calcula_media(float p1, float p2) { float res; res = (p1 + p2) / 2; /* Calcula a mdia*/ return(res); } void exibe_resultado(float med) { printf("Media %.1f: ", med); if (med < 3.0) printf("Aluno reprovado\n"); else if (med >= 3.0 && med < 7.0) printf("Aluno em exame\n"); else if(med >= 7.0) printf("Aluno aprovado\n"); } void pausa(void) { system(pause); system(cls); } 3) Exemplo completo de validao de dados, sem usar a funo atoi() ou atof(). int caractermaiusculo(char ch) { return (ch >= 'A' && ch <= 'Z'); } int caracterminusculo(char ch) { return (ch >= 'a' && ch <= 'z'); } int digitonumerico(char ch) { return (ch >= '0' && ch <= '9'); }

Prof Angelina V.S.Melar 87

int main(void) { char c; while(1) { c=getch( ); putchar(c); if (digitonumerico(c) == 1) puts("Valor Numerico\n"); else if (caractermaiusculo(c) == 1) puts("Caracter Maiusculo\n"); else if (caracterminusculo(c) == 1) puts("Caracter Minusculo\n"); else puts("Caracter especial\n"); } system("pause"); return 0; }

Prof Angelina V.S.Melar 88

Funes Recursivas
Essas funes tm esse nome por poderem chamar a si mesmas de forma direta ou indireta. Por exemplo, para calcular o fatorial de um nmero pode ser feita uma funo e ela precisar chamar a si mesma (forma direta). Quando uma funo chama outra e depois essa outra chama a que a chamou definida como funo recursiva indireta. As variveis locais de chamadas recursivas so independentes entre si, como se tivessem chamando funes diferentes. Exemplo: Calculo do fatorial de um nmero qualquer. /* N! = N * (N-1)! 4! = 4 * 3* 2 * 1 4! = 4 * 3! 3! = 3 * 2! 2! = 2*1 ! 1!= 1 Se N! for 0 o resultado 1 Seno, N * (N-1) */ #include <stdio.h> #include <stdlib.h> main() { int num, r_fatorial; printf("Informe valor: "); scanf("%i", &num); r_fatorial = 1; if (num == 0) r_fatorial = 1; else { do { r_fatorial *= num; num--; }while (num !=0); } printf("O fatorial desse numero e %i", r_fatorial); _sleep(2000); } Usando funo recursiva direta #include <stdio.h> #include <stdlib.h> int f_fatorial(int num); main() { int num; printf("Informe valor"); scanf("%i", &num);

Prof Angelina V.S.Melar 89

printf("O fatorial desse numero %i", f_fatorial(num)); _sleep(3000); } int f_fatorial(int num) { if (num == 0) return 1; else return num*f_fatorial(num-1); } As variveis locais de chamadas recursivas so independentes entre si, como se tivessem chamando funes diferentes. Simulao da execuo: Fatorial do nmero 2 A)- envia o argumento 2 - na funo testa o valor - tem o return 2 * f_fatorial(2-1) *** no retorna, pois primeiro tem um funo a ser executada. B) -envia o argumento 1 (do calculo anterior 2-1) - na funo testa o valor - tem o return 1 * f_fatorial(1-1) *** no retorna, pois primeiro tem um funo a ser executada. C) - envia o argumento 0 (do calculo anterior 1-1) - na funo testa o valor - veja que agora tem o return 1 -- esse retorna o valor 1 passo B - tem o return 1 * 1 --esse tambm retorna o valor calculado 1 ao passo A, que calcula return 2 * 1 e retorna o valor 2 a funo principal e exibe o resultado.

Prof Angelina V.S.Melar 90

Vetores
1. Conceito

Os vetores so matrizes unidirecionais homogneas e podem ser chamadas de: arranjos unidimensionais, variveis indexadas, variveis compostas homogneas unidimensionais ou arrays. O vetor um mecanismo de estruturao de dados usado para representar variveis do mesmo tipo de dado, que so referenciados pelo mesmo nome e cada elemento atravs de sua posio dentro dela. Consiste em locaes contguas de memria. O endereo mais baixo corresponde ao primeiro elemento e o mais alto ao ltimo. Os vetores so variveis indexadas por apenas um ndice (uma dimenso, unidimensional). O elemento do vetor acessado por meio de um ndice. O ndice 0 contm o primeiro elemento armazenado. Uma string (cadeia de caracteres) um vetor de caracteres.

2. Exemplos: float media[10]; 0 2.5 1 4.5 2 6.5 3 3.5 // vetor com 10 elementos do tipo real 4 10 5 8 6 7 7 5.5 8 6 9 8.5

char nome[4]; A N A int notas[4]; 6 3 10

// vetor com 4 elementos do tipo caracter (string)

\0
//vetor com 4 elementos do tipo inteiro

3. Declarao: A declarao de um vetor pode ser feita da seguinte maneira: tipo_da_varivel nome_da_varivel [tamanho]; Onde: tipo_da_varivel o tipo base do vetor (int, float, char, etc), ou seja, qual tipo de contedo ser armazenado na varivel; tamanho_da_varivel a quantidade de elementos que o vetor armazenar. Exemplo: float medias[45];

- A linguagem C reservar 180 bytes (45 x 4), ou seja, so 45 variveis do tipo float, onde cada float ocupa 4 bytes. Estes bytes so reservados de maneira contgua.

Prof Angelina V.S.Melar 91

4. Acessando os elementos Cada elemento do vetor um elemento individual, ou seja, seu contedo no est vinculado com os outros. Para acess-lo eu preciso de uma referncia a mais do que somente seu nome, preciso saber onde se localiza o elemento dentro do vetor. Para isso acessamos os elementos do vetor, individualmente, atravs de um ndice. Na linguagem C os ndices iniciam no 0 e finalizam valendo o tamanho do vetor -1, devendo ser colocados entre colchetes. Exemplo: float media[10]; A primeira mdia ser armazenada na posio 0 do vetor e a ltima ser na posio 9; 0 1 2 3 4 5 6 7 8 9 2.5 4.5 6.5 3.5 10 8 7 5.5 6 8.5

media[0] media[9] media[2]

acessa o primeiro elemento do vetor; acessa o ltimo elemento do vetor; acessa o terceiro elemento do vetor;

5. Armazenando os elementos Para ser feito o armazenamento no vetor necessrio de definir seu nome e em qual posio dever ser armazenada (qual ndice). O armazenamento pode ser feito separadamente ou em conjunto, de uma vez s. Veja os exemplos abaixo: media[0] = 2.5; float media[10]= {2.5,4.5,6.5,3.5,10,8,7,5.5,6,8.5}; float media[]= {2.5,4.5,6.5,3.5,10,8,7,5.5,6,8.5}; media[1] = 4.5; ** Cuidado: No se esquea que o ndice sempre inicia no 0. Ao declarar um vetor voc coloca o tamanho total. 6. Endereo do vetor ou matriz unidimensional Quando se refere ao endereo do vetor, pense que o primeiro elemento d incio ao vetor, ou seja, media equivale ao endereo inicial do vetor (media[0] igual a media). Por isso quando for feita a entrada de uma string no se pode colocar o &. Exemplos a) Recebendo elementos de um vetor do tipo inteiro digitados via teclado for ( i=0; i<100; i++ ) { printf(Digite %i elemento do vetor, i++); scanf( %i, &vet[i] ); } b) Mostrando os elementos de um vetor na tela: for ( i=0; i<100; i++ ) printf( %i, vet[i] ); Prof Angelina V.S.Melar 92

c) Inicializando um vetor com zeros for ( i=0; i<100; i++ ) valores[i] = 0; 7. Exerccios Resolvidos: 1) Crie um vetor com 10 elementos do tipo inteiro e depois armazene automaticamente os valores de 0 a 9. main() { int x[10]; //definio do vetor int i; //definio da varivel para controlar o ndice for (i = 0; i < 10; i ++) //definio do lao para gerar o vetor x [i] = i; //atribuio do valor da varivel i ao vetor x system(pause); } 2) Crie um vetor com 10 elementos do tipo inteiro e depois armazene automaticamente os resultados da tabuada do nmero 2. main() { int r[10]; int t; for(t=0;t<10;t++) { r[t]=t*2; printf("%i\n",r[t]); } system("pause"); } 3) O professor de Programao de Computadores precisa de um programa que calcule a mdia geral da sala, verificando dessa forma o desempenho dos alunos. O programa deve receber e armazenar as notas dos 35 alunos e calcular a mdia geral da sala. main() { int notas[35],i,soma =0; for(i=0;i<5;i++) { printf("Digite a nota do aluno %d: ",i); scanf("%f",&notas[i]); soma=soma+notas[i]; } printf("Media das notas: %f.",soma/5); system("pause"); }

Prof Angelina V.S.Melar 93

Vetor String (Cadeias de Caracteres)


Na linguagem C no existe o tipo de dado string, dessa forma necessrio criar um vetor de caracteres para armazenar uma cadeia de caracteres (string). Ao usar esse tipo de vetor deve-se tomar cuidado para o fato de que as strings tm o seu ltimo elemento como caracter null (\0). Para declarar a string, devemos declarar sempre um elemento a mais para o terminador. Cada caracter um elemento independente e pode ser acessado de um ndice. Existem bibliotecas e funes especiais para o tratamento e manipulao de strings. O cabealho padro string.h.
Exemplos de declarao e atribuio: a) char nome[7]; b) char nome[] = {b,i,a,n,c,a}; d) char mensagem[10] = Exemplo; Armazenamento e entrada de strings Funo scanf() A funo scanf(%s, &nome) recebe apenas o primeiro nome. Quando o usurio pressionar o espao ele finaliza essa string, ignorando o sobrenome. Ento a funo scanf() usada para receber uma palavra, apenas uma string. Funo gets() A funo gets() usada para receber uma sria de strings, que podem ser separadas, digitadas, com ou sem espao. Exemplo: gets(nome); Cuidado: no coloque o ndice do vetor, pois, a funo se encarrega de separar cada caracter na sua respectiva posio dentro do vetor ou matriz. Exemplo: Faa um programa que receba um texto e depois mostre quantas vogais foram digitadas. main() { char texto[10]; int vogais=0,t; printf ("Digite um texto\n"); gets(texto);

for (t=0;t<10;t++) // ou for (t=0; texto[i] != '\0';t++) { if (texto[t] == 'a' || texto[t] == 'e' || texto[t] == 'i' || texto[t] == 'o' || texto[t] == 'u') vogais++; } printf ("Total de vogais: %i\n", vogais); system ("pause"); }
Prof Angelina V.S.Melar 94

Funo strlen() Retorna o tamanho da string #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char nome[40]; printf(Digite seu nome: ); gets(nome); printf(O tamanho do nome : %i\n, strlen(str)); } Funo strcat() Unio de variveis string main() { char nome[40], sobrenome[15]; int i; printf ("\nEntre com um nome: "); scanf ("%s", nome); printf ("\nEntre com um sobrenome: "); scanf ("%s", sobrenome); strcat(nome, " "); strcat(nome, sobrenome); printf ("\nO seu nome %s \n", nome); } Funes: atoi(), atof() Essas funes fazem a converso de uma string em um valor numrico. A atoi() converte a string para um valor inteiro. A atof() converte para um nmero ponto flutuante. Cuidado com o valor informado se for usado o atoi ele somente aceita o valor inteiro e ignora a parte decimal. Exemplo: 287.455 somente aceita o 287 Uma string invlida retorna na converso o valor zero.

Dica: Quando voc quiser que no trave o programa na entrada de dados, de forma que o usurio informe uma letra no lugar de entrar com o nmero, use uma dessas funes. int main() { char num1[3], num2[3]; int inum1; float fnum2; printf("\nInforme o valor"); gets(num1); printf("\nInforme o valor"); gets(num2); inum1= atoi(num1); fnum2= atof(num2); printf("\nOs numeros validos informados sao %i e %.2f",inum1, fnum2); _sleep(3000); }

Prof Angelina V.S.Melar 95

Funo strcmp() usada para comparar strings. Ela recebe e compara duas strings. Essa funo retorna 0 se as duas forem iguais, seno, se a primeira string for maior que a segunda retorna um valor positivo, seno, retorna um valor negativo. main() { char senha1[10], senha2[10]; printf("\nCadastro de senha\n"); printf("Informe sua senha:"); gets(senha1); printf("Redigite sua senha: "); gets(senha2); if ( strcmp(senha1,senha2) == 0 ) printf ("\nSenha vlida"); else if ( strcmp(senha1,senha2) >0 ) printf ("\nA primeira senha e maior"); if ( strcmp(senha1,senha2) < 0 ) printf ("\nA primeira senha e menor"); getch(); }

Ou int i=0, i =0; char nomes[20]; gets(nome_pes); while(i<20 || !achou) //poderia ser ! (achou == 0) { if (!strcmp(nomes[i], valor) { achou = 1; break; } else i++; }
Funo puts() usada para mostrar uma nica string por vez, mas com a vantagem de pular a linha automaticamente. main() { char senha1[10]= "Fatec", senha2[10]= "Fatec Itu"; puts("Senhas cadastradas\n"); puts(senha1); //aparece Fatec puts(senha2); //aparece Fatec Itu puts(&senha1[4]); //aparece c itu a partir do ndice 4. } Funo strstr() procura uma string dentro de outra string Exemplo: if (strstr(string_lida, string_pesq) != NULL) break; Prof Angelina V.S.Melar 96

Funo strchr() procura um caracter dentro de uma string Exemplo com as duas funes de pesquisa: int main() { char nome[20]="Ana carolina";

if (strstr(nome, "Ana")) printf("O nome possui o Ana"); else printf("O nome no possui o Ana"); if (strchr(nome, 'a')) printf("O nome possui o caracter a"); else printf("O nome no possui o caracter a"); getchar(); return 0; }
Funo fgets() A funo fgets() efetua a leitura de dados do tipo string fornecidos via teclado delimitando seu tamanho. Ela aceita caracteres em branco no meio do string, colocando o caractere de controle \0 apenas quando for pressionada a tecla <Enter>. Para utilizar esta funo, preciso informar trs parmetros, sendo o nome da matrizstring, o seu tamanho e o nome do buffer em uso: fgets(VARIAVEL, TAMANHO, stdin);

puts("Informe seu nome ........: "); fgets(NOME, 20, stdin);

Prof Angelina V.S.Melar 97

Matriz
Segundo Giovanni e Bonjorno: Matriz o conjunto ordenado dos nmeros que formam uma tabela, onde cada nmero um elemento. Matriz transposta: quando temos uma matriz de origem m x n e a transposta n x m 1. Matriz Bidimensional A linguagem C permite que seja declarada uma matriz bidimensional (varivel composta homognea bidirecional) ou mesmo multidimensional. Na matriz bidimensional o primeiro ndice indica a linha e o segundo a coluna. Os ndices iniciam no zero(0). Para calcular o espao de memria necessrio para armazenar a matriz necessrio fazer o seguinte calculo: int pontos_jogos [2] [4];

qtd de linhas * qtd de colunas * qtd do tipo (inteiro) tamanho = 2 * 4 * 2 tamanho = 16 Lembre-se que internamente essa matriz tem seus valores armazenados linearmente, de forma continua na memria, cada elemente armazenado em um endereo, cujo prximo elemento est no endereo seguinte da memria.
2. Declarao: A declarao de uma matriz bidimensional pode ser feita da seguinte maneira: tipo nome [dimenso1] [dimenso2]; ou tipo nome [linha] [coluna]; Exemplos: 1) char tabela[5][5];

2) int pontos_jogos [2] [4]; 0 0 1 pontos_jogos [0,1] 1 2 3 pontos_jogos [1,3]

3. Armazenando os elementos A inicializao e armazenamento de uma matriz pode ser individual ou coletivo. Como nos exemplos abaixo:

pontos_jogos [0] [1] = 5; pontos_jogos [1] [3] = 60 int i[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int quadrados[5][2] = {1, 1, 2, 4, 3, 9, 4, 16, 5, 25}; float nota[2][3] = {{9, 8, 7} , {6.5, 4, 2}};

Prof Angelina V.S.Melar 98

4. Armazenamento feito via teclado A leitura e armazenamento dos elementos de uma matriz via teclado deve ser usando uma estrutura de repetio (lao). O for o mais usado. Supondo que a matriz foi declarada como: int mat [2] [3]; O lao da linha (1 dimenso) inicia no 0 e finaliza no 1 e o lao da coluna (2 dimenso) inicia no 0 e finaliza no 2.

for (l=0; l<2; l++) { for (c=0; c<3; c++) scanf (%i, &mat[ l ] [c ]); }
5. Mostrando os elementos Para mostrar os valores armazenados dentro de uma matriz tambm usada a estrutura do for. Para exibir a matriz mat declarada acima.

for (l=0; l<2; l++) { for (c=0; c<3; c++) printf (%i, mat [ l ] [c ] ); }

Prof Angelina V.S.Melar 99

Ponteiros
1. Variveis ponteiros Uma varivel ponteiro um tipo especial de varivel, que tem como contedo um endereo de memria de outra varivel, esse endereo em hexadecimal. O tipo dessa varivel ponteiro deve ser o mesmo tipo da varivel para a qual est apontando, por exemplo se ela estiver apontando para um endereo de uma varivel cujo contedo float ento ela (a varivel ponteiro) deve ser definida como float. Para trabalhar com ponteiros usado os operadores unrios & e * antes da varivel. O formato de exibio usado na funo printf() pode ser %p, %x, u %X, a diferena apenas quanto ao formato de exibio. Definio e declarao do ponteiro Define o tipo da varivel e do ponteiro dessa varivel

int *p, v; O que define que a varivel um ponteiro o * antes do nome. O * tambm poderia estar junto com o tipo: int* p.
Atribuio do endereo ou direcionado o ponteiro O endereo de memria da varivel v armazenado no ponteiro p

p = &v; int main() { int *p, v; v= 8; p= &v; printf("\nO endereco de v e %p", &v); printf("\nO conteudo do p e %p", p); printf("\nO endereco do p e %p", &p); getchar(); }

Prof Angelina V.S.Melar 100

Cuidado com o uso do operador *. O * pode ser usado tanto para declarar o ponteiro quanto para indicar o contedo da varivel para qual ele est apontando. main() Cuidado: voc tem que atribuir { um endereo para o ponteiro int *p, v; v= 8; p= &v; printf("\nO endereco de v e %p", &v); printf("\nO conteudo do p e %p", p); // o endereo memria de v printf("\nO endereco do p e %p", &p); printf("\nO valor de v %d", v); printf("\nO valor de v mostrado atraves do ponteiro p %d", *p); } Podemos usar mais ponteiros para direcionar para o mesmo local da memria. main() { int *p, *p2, v; v= 8; p= &v; p2= p; //no usa o & para pegar o endereo do outro ponteiro printf("\nO endereco de v e %p", &v); printf("\nO conteudo do p e %p", p); printf("\nO endereco do p e %p", &p); printf("\nO valor de v %d", v); printf("\nO valor de v mostrado atraves do ponteiro p %d", *p); printf("\nO valor de v mostrado atraves do ponteiro p2 %d", *p2); } Aritmtica de ponteiros Pode ser feito uso das operaes de adio e subtrao com os ponteiros. Mas cuidado para no pegar o contedo da varivel para o qual ele est apontando e sim seu endereo. Se acrescentarmos no programa anterior o cdigo abaixo: int t; t= sizeof(t); //ver o tamanho do tipo int e quantos bytes vai avanar p++; printf("\nO contedo de p e %p", p); printf("\nO contedo apontado pelo ponteiro p %d", *p);

Est sendo feito uma adio no ponteiro p++, de forma que ele ir avanar 4 bytes na memria, pois, a cada incremento ele acrescentar ao seu endereo a quantidade de bytes de seu tipo. De forma que quiser retroceder e voltar a apontar para v, basta fazer uma subtrao com o ponteiro. p--;

Prof Angelina V.S.Melar 101

Vendo o contedo da varivel atravs de seu ponteiro de forma indireta main() { double *p, v; v= 8; p= &v; printf("\nO contedo de p e %p", p); //endereo de v printf("\nO contedo apontado pelo ponteiro p %f", *p); p--; printf("\nO contedo de p e %p", p); printf("\nO contedo apontado pelo ponteiro p %f", *p); }

Perceba que o tipo Double oculpa 8 bytes, quando subramos o ponteiro ele voltou 8 bytes. main() { int *p, v; v= 8; p= &v; printf("\nP %d e V %d", *p, v); v+= 10; //somando 10 ao valor de v printf("\nP %d e V %d", *p, v); *p= *p+1;//somando 1 ao valor de v atravs do ponteiro printf("\nP %d e V %d", *p, v); (*p)++; //somando 1 ao valor de v atravs do ponteiro --use () printf("\nP %d e V %d", *p, v); *p++; //erradoooo - voc acrescentou 1 ao valor do ponteiro printf("\nP %d e V %d", *p, v); }

Prof Angelina V.S.Melar 102

Cuidado para no errar *p++; //errado - voc acrescentou 1 ao valor do ponteiro printf("\nP %d e V %d", *p, v); *p--; //errado - voc subtraiu 1 ao valor do ponteiro printf("\nP %d e V %d", *p, v); 2. Trabalhando com Matriz atravs de Ponteiros muito usado em matriz, a passagem do endereo dessa matriz para outra funo, atravs de ponteiros. Para isso voc deve direcionar o ponteiro para o primeiro elemento da matriz. Isso pode ser feito de duas maneiras: int main() { int mat[4]={10,20,30,40}, *pm; pm = mat; //direciona para o ndice 0 printf("\n1o elemento: %d", *pm); //ou pm = &mat[0]; //tem que colocar o & para informar o ndice 0 printf("\n1o elemento: %d", *pm); printf("\n1o elemento: %d", mat[0]); }

Veja o programa abaixo: int mat[4]={10,20,30,40}, *pm; pm = mat; printf("\n1o elemento: %d", *pm); //ou pm = &mat[0]; //tem que colocar o & para informar a posio 0 printf("\n1o elemento pelo pm %d e pelo mat[0]", *pm, mat[0]); pm= &mat[1]; //apontando para o 2 elemento printf("\n2o elemento pelo pm %d", *pm); pm++; //somando 4 bytes ao endereo do ponteiro e indo para o 3 elemento printf("\n3o elemento pelo pm %d", *pm); *pm = *pm *2; //multiplicando por 2 o contedo do 3 elemento printf("\n3o elemento pelo pm %d", *pm); *(pm++); //apontando para o prximo endereo printf("\n4o elemento pelo pm %d", *pm);

Prof Angelina V.S.Melar 103

Voc pode fazer o calculo diretamente na exibio int mat[3] = {10, 20, 30}, *pmat; pmat = mat; printf("mat[0] = %d \n", *(pmat)); printf("mat[1] = %d \n", *(++pmat)); printf("mat[2] = %d \n", *(++pmat)); printf("mat[0] = %d \n", *(pmat-=2)); getchar(); Recebendo valores de uma matriz atravs de seu ponteiro #define E 3 main() { int mat[3], *pmat, i; pmat = mat; printf("Informe os valores da unidimensional\n"); for (i=0; i<E; i++) { printf("\n%d valor", i+1); scanf("%d", pmat); pmat++; }

for (i=0; i<E; i++) { pmat--; printf("\n%d", *pmat); } getchar(); }


1. Trabalhando com ponteiro e string main() { char *pnome, nome[20]; int compr=0; printf("Digite um nome: "); gets(nome); pnome = nome; while (*pnome != '\0' ) { printf("%c- %p\n", *pnome, pnome); compr++; pnome++; } printf("\nQuant caracteres %i\n", compr); system("pause"); } Prof Angelina V.S.Melar 104

Funes com Passagem de Parmetros por Referncia


A diferente da Passagem de Parmetros por Referncia em relao a Passagem de Parmetro por Valor que nesse tipo de passagem no se passa para a funo os valores das variveis, mas sim suas referncias (seus endereos de memria). Usando a passagem por referncia fica mais simples a mudana dos valores das variveis, que deve ter seu valor usado e alterado independente da funo. Para que isso ocorra deve-se declara as variveis como ponteiros. Os ponteiros so a referncia para poder alterar o valor da varivel fora da funo. No se esquea quando usar a funo deve colocar um &(endereo) na frente das variveis que estiverem sendo passadas para a funo. No programa abaixo o que passado para a funo quadrado o endereo das variveis num1 e num2. Estes endereos so copiados nos ponteiros pa e pb. Atravs do operador * acessando o contedo apontado pelos ponteiros e modificando-o. Os valores armazenados em num1 e num2 so modificados. void quadrado(int *pnum1,int *pnum2); main() { int num1,num2; printf("\nDigite o primeiro nmero"); scanf("%d",&num1); printf("\nDigite o segundo nmero"); scanf("%d",&num2); printf("\n\nAntes da chamada da funo Quadrado - os nmeros so %i %i\n",num1,num2); quadrado(&num1,&num2); printf("\n\Depois da chamada da funo Quadrado - os nmeros so %i %i\n",num1,num2); system("pause"); } void quadrado(int *pnum1,int *pnum2) { *pnum1=*pnum1 * *pnum1; *pnum2=*pnum2 + 5; }

Prof Angelina V.S.Melar 105

3. Passagem de Matriz por Referncia Na passagem da matriz, voc ir enviar o endereo do elemento 0. Quando for definido o ponteiro para receber o endereo de uma matriz unidimensional, voc no precisa colocar a dimenso (quantidade de elementos) que essa matriz ter, porque na linguagem C ele apenas precisa saber o tipo dessa matriz. Voc que far o controle dos elementos. Quando a matriz for bidimensional obrigatrio informar a quantidade de elementos da segunda dimenso. O operador * no precisa ser colocado, pois quando se passa um matriz unidimensional ou bidimensional sempre ser por referncia.

void recebe(int pmat[], int t); /////////void recebe(int *pmat[], int t); int main() { int mat[3], i ; recebe(mat, 3); for (i=0; i<3; i++) printf("\n%d", mat[i]); _sleep(20000); } void recebe(int pmat[], int t) { int i; for (i=0; i<t; i++) { scanf("%d", pmat); pmat++; } }
Na matriz bidimensional veja a definio da segunda dimenso

void calculamedia(float notas[][3]) { int i; for (i=0; i<3; i++) { notas[i][2]= (notas[i][0]+ notas[i][1])/2.0; } }

Prof Angelina V.S.Melar 106

int main() { float notas[3][3]; int l, c, i; for (l=0; l<3; l++) { printf("\n\nAluno %d\n", l+1); for (c=0; c<2;c++) { printf("%d Nota", c+1); scanf("%f", &notas[l][c]); } } calculamedia(notas); printf("\nMedias dos alunos"); for (i=0; i<3; i++) { printf("\n%d aluno teve %.2f", i+1, notas[i][2]);; } _sleep(20000); }

Prof Angelina V.S.Melar 107

Estruturas
ESTRUTURAS (Struct) VARIVEIS COMPOSTAS HETEROGNEAS Muitas vezes precisamos manipular dados compostos, mas que identificam uma nica representao. Para isso necessrio ter um mecanismo de agrupamento, estruturando os dados em um nico contexto, como por exemplo um ponto representado tanto pela coordenada x quanto pelas coordenada y, elas so dependentes (no devem ser tratadas de forma isolada). Assim como um data, que formada tanto pelo dia, quanto pelo ms e pelo ano.

A sintaxe da deinio de uma estrutura : struct nome_da_estrutura { Componentes/membros dessa estrutura; tipo nome_da_varivel; }; Estruturas permitem definir estruturas complexas de dados, com campos de tipos diferentes. Por meio da palavra-chave struct e type def definimos um novo tipo de dado. Definir um tipo de dado significa informar ao compilador o seu nome, o seu tamanho em bytes e o formato em que ele deve ser armazenado e recuperado na memria. Aps ter sido definido, o novo tipo existe e pode ser utilizado para criar variveis de modo similar a qualquer tipo simples. struct Dados_Pessoais { char nome[81]; int idade; float peso; } P1; foi feita a declarao da varivel P1 que do tipo Dados_Pessoais no final da definio da estrutura, mas, essa declarao poderia ser feito de outra forma, como abaixo: /* Declarao de variveis do tipo struct Dados_Pessoais*/ struct Dados_Pessoais P2, P3;
Definindo um novo tipo de dado com o typedef typedef struct Dados_Pessoais { char Nome [ 81]; int Idade; float Peso; } Pessoa;

/* A declarao das variveis do tipo Dados_Pessoais/ Pessoa Cliente, Funcionario;

Prof Angelina V.S.Melar 108

Uma vez criada a varivel composta heterognea, denominada estrutura, seus membros podem ser acessados por meio do operador de acesso ponto (.). Esse conecta o nome da varivel estrutura a um dos seus membros. estrutura membro gets(Pessoa.Nome); Pessoa.Idade = 41; Pessoa.Peso = 75.6;
Outro exemplo direto de denominao de um tipo de dado: int main() { typedef float R; //o nome R um mneumnico do tipo float R n1; scanf("%f", &n1); printf("Numero digitado %g", n1); } Resumindo struct ponto { float x; float y; }; typedef struct ponto P;

typedef struct ponto { float x; float y; } P; ou struct ponto P;

scanf (%f%f, &p.x, &p.y); printf(As coordenadas so %.2f - %.2f, p.x, p.y)
Exemplos de uso: 2. Recebendo dados main() { struct dados_pessoais { char nome[81]; int idade; float peso; }; struct dados_pessoais aluno;

printf("\nNome do aluno:"); gets(aluno.nome); printf("\nIdade:"); scanf("%i", &aluno.idade); printf("\nPeso:"); scanf("%f", &aluno.peso); printf("%i %s %.2f \n", aluno.idade, aluno.nome, aluno.peso); }

Prof Angelina V.S.Melar 109

3. Recebe e mostra uma estrutura de horas main() { struct evento { int h, m; float s; }; struct evento ev; printf("Entre com a hora de um evento(hh:mm:sec): "); scanf("%i:%i:%f", &ev.h, &ev.m, &ev.s); printf("A hora fornecida foi: %d:%d:%.2f\n", ev.h, ev.m, ev.s); } 4. Igualando estruturas main() { struct data { int dia; char mes[10]; int ano; }; data natal = { 25, "Dezembro", 1994}; data aniversario = { 30, "Julho", 1998}; printf("%i %s %i \n", aniversario.dia, aniversario.mes, aniversario.ano);

aniversario = natal; printf("%i %s %i \n", natal.dia, natal.mes, natal.ano); printf("%i %s %i \n", aniversario.dia, aniversario.mes, aniversario.ano); }
5. Recebendo e verificando dados #include <stdio.h> #include <stdlib.h> int main() { struct dados_pessoais { char nome[81]; int idade; float peso; };

typedef struct dados_pessoais Aluno; //define o novo tipo Aluno Aluno A; //define a varivel A que do tipo Aluno printf("\nNome do aluno:"); gets(A.nome); Prof Angelina V.S.Melar
110

printf("\nIdade:"); scanf("%i", &A.idade); printf("\nPeso:"); scanf("%f", &A.peso); printf("%i %s %.2f \n", A.idade, A.nome, A.peso); if (A.peso >30) printf("Precisa comer mais\n\n"); system("pause");return 0; }
Ou typedef struct dados_pessoais{ char nome[81]; int idade; float peso; }Aluno; //define o tipo Aluno

Aluno A; //define a varivel a que do tipo Aluno


6. Usando uma matriz do tipo estrutura struct dados_pessoais { char nome[81]; int idade; float peso; } aluno[3];

int main() { int i; for (i=0;i<3;i++) { printf("\nCadastro n: %i\n", i+1); fflush(stdin); printf("\nNome do aluno:"); gets(aluno[i].nome); printf("\nIdade:"); scanf("%i", &aluno[i].idade); printf("\nPeso:"); scanf("%f", &aluno[i].peso); printf("%i %s %.2f \n", aluno[i].idade, aluno[i].nome, aluno[i].peso); } system("pause"); return 0; } Ou main() { int i; struct dados_pessoais { char nome[81]; int idade;
Prof Angelina V.S.Melar 111

float peso; };
struct dados_pessoais aluno, *paluno;

paluno = &aluno; for (i=0;i<3;i++) { printf("\nCadastro n: %i\n", i+1); fflush(stdin); printf("\nNome do aluno:"); gets(paluno->nome); printf("\nIdade:"); scanf("%i", paluno->idade); printf("\nPeso:"); scanf("%f", paluno->peso); printf("%i %s %.2f \n", *paluno->idade, *paluno->nome, *paluno->peso); } system("pause"); } Usando uma estrutura dentro da outra estrutura typedef data { int dia; int mes; int ano; }; struct dados_pessoais { char nome[81]; int idade; float peso; data data_niver ; } aluno[3]; main() { int i; for (i=0;i<3;i++) { printf("\nCadastro n: %i\n", i+1); fflush(stdin); printf("\nNome do aluno:"); gets(aluno[i].nome); printf("\nIdade:"); scanf("%i", &aluno[i].idade); printf("\nPeso:"); scanf("%f", &aluno[i].peso); printf("\nData de Aniversario:"); scanf("%i-%i%i", &aluno[i].data_niver); printf("%i %s %.2f \n", aluno[i].idade, aluno[i].nome, aluno[i].peso); } Prof Angelina V.S.Melar
112

7. Usando estrutura e funo void exibedesenho(struct desenho xtrapezio);

struct desenho { int basemenor; int basemaior; int altura; float area; }; main() { struct desenho trapezio; trapezio.basemenor =2; trapezio.basemaior= 7; trapezio.altura = 5; trapezio.area= (trapezio.basemenor + trapezio.basemaior) * trapezio.altura/2; exibedesenho(trapezio); } void exibedesenho(struct desenho trapezio) { printf("Base menor: %i \n \r", trapezio.basemenor); printf("Base maior: %i \n \r", trapezio.basemaior); printf("Altura : %i \n \r", trapezio.altura); printf("Area do Trapezio: %.f \n \r", trapezio.area); }
8. Fazendo a referncia de estrutura em uma funo void calculadesenho(struct desenho *ptrapezio); struct desenho { int basemenor; int basemaior; int altura; float area; };

main() { struct desenho trapezio; calculadesenho(&trapezio); printf("Base menor: %i \n \r", trapezio.basemenor); printf("Base maior: %i \n \r", trapezio.basemaior); printf("Altura : %i \n \r", trapezio.altura); printf("Area do Trapezio: %.f \n \r", trapezio.area); system("pause"); }
Prof Angelina V.S.Melar 113

void calculadesenho(struct desenho *ptrapezio) { (*ptrapezio).basemenor =2; (*ptrapezio).basemaior= 7; (*ptrapezio).altura = 5; (*ptrapezio).area= ((*ptrapezio).basemenor + (*ptrapezio).basemaior) * (*ptrapezio).altura/2; }
ou void calculadesenho(struct desenho *ptrapezio) { ptrapezio->basemenor =2; ptrapezio->basemaior= 7; ptrapezio->altura = 5; ptrapezio->area= (ptrapezio->basemenor + ptrapezio->basemaior) * ptrapezio->altura/2; } 9. Fazendo a referncia de estrutura em uma funo void exibe(struct ponto *pponto); struct ponto { float x; float y; };

main() { struct ponto vponto; printf("\nDigite as coordenadas dos pontos x e y: "); scanf("%f %f", &vponto.x, &vponto.y); exibe(&vponto); vponto.x= 5.7; printf("\nOs pontos digitados foram %.2f e %.2f \n", vponto.x, vponto.y); system("pause"); } void exibe(struct ponto *pponto) { printf("\nOs pontos digitados foram %.2f e %.2f \n", pponto->x, pponto->y); }
Ou void exibe(struct ponto cponto); struct ponto { float x; float y; }; Prof Angelina V.S.Melar 114

main() { struct ponto vponto; printf("\nDigite as coordenadas dos pontos x e y: "); scanf("%f %f", &vponto.x, &vponto.y); exibe(vponto); printf("\nOs pontos digitados foram %.2f e %.2f \n", vponto.x, vponto.y); } void exibe(struct ponto cponto) { printf("\nOs pontos digitados foram %.2f e %.2f \n", cponto.x, cponto.y); cponto.x= 5.7; }
10. Fazendo Alocao Dinmica de Memria float media(int n, float *v); main() { int i, n; float *v, med; printf("Quantos elementos serao armazenados: "); scanf("%i", &n); v= (float *) malloc(n * sizeof(float)); //aloca 4*n bytes de memria em tempo de execuo if (v==NULL) { printf ("Memoria Insuficiente"); system("pause"); return 1; }

for (i=0; i<n; i++) { printf(" %i - ", i+1); scanf("%f", &v[i]); } med= media(n,v); printf("Media %.2f \n\n", med); free(v); //libera a memria } main() { float media(int n, float *v) int i, n; float *nota = NULL; { printf(Entre com tamanho n: ); scanf(%d,&n); int i; nota=(float *)malloc(n*sizeof(float)); float s=0; for (i=0; i < n; i++) for (i=0; i<n;i++) { s+= v[i]; printf( Entre a nota %i:, i+1); scanf(%f, nota+i); return s/n; } } for (i=0; i < n; i++) printf(\n %.2f \n, *(nota+i)); free(nota); }

Prof Angelina V.S.Melar 115

Unio e Enumerao
1. Unio union

O tipo unio usado para compartilhar um mesmo endereo de memria para vrias variveis, que podem ser de tipos diferentes. void main() { union variavel { float valor_hora; float valor_mensal; }; union variavel var; var.valor_hora = 5.5; printf("\nValor da Hora %.2f", var.valor_hora); var.valor_mensal = 346.5; printf("\nValor Mensal%f", var.valor_mensal); printf("Valor da Hora %.2f", var.valor_hora); //permanece o ltimo valor atribudo ao endereo de memria, que o valor 346.5 (mensal) getchar(); } Cuidado: Somente uma varivel pode ser usada por vez, se for usado um outro membro da unio o anterior se perde (sobrescreve). #include <stdio.h> #include <stdlib.h> void main() { union variavel { int valor_hora; float valor_mensal; } var; printf("\nInforme o valor da hora"); scanf("%i", &var.valor_hora); printf("\nValor da Hora informado: %i", var.valor_hora); var.valor_mensal = 346.5; printf("\nValor Mensal pre-definido: %f", var.valor_mensal); printf("\nUltimo valor armazenado %g", var.valor_hora); //permanece o ltimo valor atribudo ao endereo de memria, que o valor 346.5 (mensal) }

Prof Angelina V.S.Melar 116

2. Tipo enumerao

uma forma de definir inicialmente os valores, ou seja, pr-definidos. enum Mes { Jan = 1, Fev, Mar, Abr, Mai,Jun, Jul, Ago, Set, Out,Nov, Dez}; Se no for definido um valor inial da sequncia definida, ele sempre inicia a partir do zero.
enum meses {Jan = 1, Fev, Mar,Abr, Mai, Jun, Jul, Ago, Set, Out,Nov, Dez}; main() { int dia; meses mes; mes = Set; //ou mes = meses(9); if (mes == Jan || mes == Mar || mes == Mai || mes == Jul || mes == Ago || mes == Out || mes == Dez) dia = 31; else if (mes == Fev) dia = 28; else dia = 30; printf(Numero dias: %d \n,dia); }

Prof Angelina V.S.Melar 117

Arquivos
A manipulao de um arquivo feita atravs da associao de uma varivel ponteiro (FILE) a um arquivo fsico (Stream), esse arquivo pode ser um arquivo texto (uma planilha do excel, um documento do Word) ou um arquivo binrio (um arquivo do sistema, um arquivo de dados). O contedo do arquivo depende da forma de criao do mesmo, pondendo ser criado e armazenado: Modo binrio, com uma sequncia de bytes gravados, desconhecidos numa leitura pelo usurio. Modo texto, com uma sequncia de caracteres da tabela ASCII, compreensvel numa leitura pelo usurio. Os arquivos gravados em modo binrio tem um tamanho menor, j que esto convertidos em bytes, enquanto que se for gravado em modo texto, cada caracter ter que ser convertido para binrio. A pesquisa de dados em um arquivo binrio mais rpida e fcil. Dessa forma, usamos arquivo binrios para armazenar uma grande quantidade de dados, como vrios cadastros (registros) e que no sejam compreensveis por questo de segurana, e o modo texto para gravar arquivos que podem ser compreensveis pelo usurio e abertos por qualquer editor.
3. Abertura do arquivo Para abrir ou mesmo criar um arquivo usada a funo fopen(). Para fazer uso dessa funo necessrio antes criar um varivel ponteiro (FILE) que direcionar para um endereo de memria do arquivo. FILE *parq; A funo fopen recebe dois argumentos string: a localizao (diretrio) junto com o nome do arquivo, e o modo de abertura do arquivo. A localizao padro o local onde est o arquivo executvel. fopen (nome, modo) parq = fopen(nome_arq, modo );

r w a rt rb - + wt wb at

Existe vrios modo com o quais o arquivo pode ser aberto ou criado. Abre arquivo j existente para leitura Abre para leitura e gravao. Caso o arquivo j exista ele sobrescreve os dados, destruindo os dados armazenados anteriormente, seno, existir ele cria um novo arquivo. Abre para leitura e gravao, mas, antes de tudo se posiciona no final dele. Se o arquivo j existir o abre e depois comea a gravar, acrescentando os dados no final. Se o arquivo no existir ele cria um novo arquivo para gravao. Abre o arquivo texto para leitura. Esse arquivo j deve existir Abre o arquivo binrio para leitura. Esse arquivo j deve existir Abre e grava no arquivo (a opo r+ abre o arquivo, e faz gravao no incio do arquivodiferente do modo append (a)) Cria um novo arquivo texto e o abre para leitura e gravao. Cria um novo arquivo binrio e o abre para leitura e gravao. Se o arquivo no existir, ele ser criado. Se j existir, o contedo anterior ser destrudo. Abre um arquivo texto j existente e adiciona as informaes no final do arquivo (se o arquivo no existir, ele criado).
118

Prof Angelina V.S.Melar

rt ab

Abre um arquivo texto j existente para leitura Abre o arquivo binrio para leitura e gravao (usa os mesmos conceitos anteriores

parq = fopen(var_nome, const_modo ); OU parq = fopen( C:\\LOCAL\\ARQUIVO.TXT, w); A funo fopen() retorna um endereo de memria do arquivo quando esta for executada com sucesso, ou um valor NULL quando der erro (erro de abertura ou criao do arquivo). Com esse retorno possvel fazer verificaes e exibio de mensagem de alerta para o usurio. if (parq == NULL) { printf(Erro de abertura do arquivo); exit(1); }
4. Fechamento do arquivo Para fechar o arquivo usada a funo fclose(). Essa funo atualiza o arquivo com as informaes que esto no buffer (memria) e depois libera a memria. Resumindo efetiva a gravao, fecha o arquivo e libera a memria. fclose(parq); 5. Leitura muito importante definir a forma de leitura e gravao de um arquivo, pois, se for necessrio fazer uma consulta de todos os dados armazenados deve-se iniciar a leitura desde o incio do arquivo (percorrendo todo o arquivo at o final). Leitura de um arquivo binrio A leitura de um arquivo binrio sempre feita de um registro por vez, o computador far a leiutura por intervalos de bytes, onde cada registro tem um tamanho fixo. Essa leitura feita a partir de seu posicionamento no arquivo, por isso importante saber como ser feita a abertura do arquivo (posicionamento no incio ou no final do arquivo). parq = fopen( C:\\LOCAL\\ARQUIVO.TXT, rb);

fread(o endereo onde ser armazenado o contedo lido, tamanho em bytes a ser avanado o cursor, o nmero de registros que vai ler por vez, o ponteiro que indica o nome do arquivo que tem o contedo lido o nome da estrutura (registro) que nome do ponteiro armazenar o contedo lido qtd de registros do arquivo que est qtd de bytes lidos lidos (sempre 1) sendo lido (tamanho da estrutura)
fread(&devedores, sizeof(devedores), 1, parq);

Resumindo: feita a leitura de uma quantidade sequencial de bytes do arquivo fsico e depois guardado na memria atravs de um tipo estrutura. Aps a leitura de um registro o ponteiro fica posicionado no prximo registro do arquivo, podendo ser feita ou no sua leitura. Prof Angelina V.S.Melar 119

Leitura de um arquivo texto Funo fgets() l uma string de caracteres de um arquivo aberto. fgets (varivel que recebe a entrada, nmero de caracteres lidos, ponteirodearquivo); fgets(CAD.nome, 20, parq); //faz a leitura da string e a carrega no ponteiro Cuidado: O tamanho sempre considerando o valor inicial no zero. Se o tamanho total 20, ento se coloca 19, sempre total - 1. Obs: O posicionamento fica no fim da linha atual no arquivo se o caracter de mudana de linha ocorrer antes de serem lidos todos os caracteres. Toda vez que executa o fgets() atualizada a posio de leitura corrente do arquivo aberto. Retornando NULL quando no h mais dados para serem lidos.

Tambm existe as funes: fscanf(), fgetc() para leitura de um arquivo texto. Abaixo esto alguns trechos de cdigo com essas funes: FILE *parq char nome[35]; parq = fopen("dados.txt", rt); fscanf (parq,"Nome: %s",nome); puts(Nome gravado); printf(%s, nome); fclose(fp);
6. Gravao Gravao em modo binrio A gravao no modo binrio realizada atravs da funo fwrite(). Para usar essa funo necessrio passar alguns argumentos, como descrito abaixo: parq = fopen( C:\\LOCAL\\ARQUIVO.TXT, ab);

fwrite (o endereo onde est o contedo a ser gravado, tamanho em bytes a ser gravado, o nmero de elementos que vai gravar(nmero de registros que sero gravados) o ponteiro que indica o endereo para onde vai copiar- nome do arquivo fsico) nome da estrutura (registro) que contm os dados qtd de bytes a serem gravados
fwrite(&devedores, sizeof(devedores),

qtd de registros a serem gravados


1,

ponteiro que direciona para o arquivo a ser gravado


parq);

Cuidado: Se a estrutura foi definida para armazenar um nico registro no se coloca o &.

Prof Angelina V.S.Melar 120

Resumindo: O fwrite pega o contedo que est posicionado na memria, em um registro, e o grava em um arquivo que est direcionado atravs do ponteiro. Exemplos em modo binrio: 1. Gravao dos dados em modo binrio struct entrada { char nome[40]; float valor; } devedores[4];

main() { int i; FILE *fp; for (i=0; i<4; i++) { fflush(stdin); printf("Digite o nome: "); gets(devedores[i].nome); printf("Valor da Divida: R$"); scanf("%f", &devedores[i].valor); } fp = fopen("devedores.txt","w"); //Etapa de abertura e gravao do arquivo if (fp == NULL) { printf(Erro de abertura do arquivo); exit(1); } fwrite(&devedores, sizeof(devedores), 1, fp); //se for um nico devedor no se deve colocar o &devedores fclose(fp); _sleep(3000); }
2. Leitura dos dados em modo binrio struct entrada { char nome[40]; float valor; } devedores[4];

main() { int i; FILE *fp; printf("Segunga etapa Exibicao dos devedores "); fp = fopen("devedores.txt","r"); fread(&devedores, sizeof(devedores),1,fp); Prof Angelina V.S.Melar
121

for (i=0; i<4; i++) { printf("\n%s - R$ %.2f",devedores[i].nome,devedores[i].valor); } fclose(fp); }


3. Exemplos diversos f= 3.1415; fwrite (&f, sizeof(f), 1, fp)

float m[10][2]; fwrite (m, sizeof(m), 1, fp)


Gravao em modo Texto Funo fprintf(): Essa funo grava dados em um arquivo aberto. O retorno da funo o total de bytes gravados.

fprintf ( ponteiro do arquivo a ser gravado, formato de gravao, valores a serem gravados) fprintf (parq,"<tr> <td>%d x %d = %d </td></tr>", num, tabuada, resultado); fprintf(parq, Cadastro de Alunos); fprintf(parq, %s, nome);
Exemplo de criao e gravao de arquivo texto int main() { FILE *arquivo; int t,c=0,r ; printf ("Digite qual a tabuada...:"); scanf ("%d",&t); arquivo = fopen("tabuada.xls","w"); printf (arquivo,"<table>"); do { r=c*t; fprintf (arquivo,"<tr><td>%d x %d = %d</td></tr>",c,t,r); c++; } while (c<=10);

fprintf (arquivo,"</table>"); fclose(arquivo); printf ("Arquivo gravado com sucesso"); _sleep(4000); }

Prof Angelina V.S.Melar 122

Exemplo de criao, leitura e gravao de um arquivo no modo texto


#include <stdio.h> #include <stdlib.h> int main() { typedef struct //definindo uma estrutura de dados-- conhecida como registro { char nome [20]; char senha [6]; } registro; registro CAD; FILE * parq; //definio do ponteiro de arquivo char opcao, existe; char nome_arquivo [15]; while(1) { system("cls"); printf("\nC- Cadastro"); printf("\nL- Consulta"); opcao = getch(); switch(opcao) { case 'c': case 'C': printf ("\nInforme o nome do arquivo a ser criado: "); gets (nome_arquivo); parq = fopen (nome_arquivo, "wt"); //abertura/criao do arquivo while (1) { printf ("Nome:"); gets (CAD.nome); if (!strcmp(CAD.nome,"")) { puts("No foi informado nome. Finalizando o cadastro!"); system("pause"); break; } else { printf ("Senha de acesso: "); gets (CAD.senha); fprintf (parq, "%s", CAD.nome); fprintf (parq, "%s\n", CAD.senha); //gravao dos dados } } fclose (parq); //fechando o arquivo break; case 'l': case 'L': printf ("\nInforme o nome do arquivo a ser aberto e consultado: "); do { Prof Angelina V.S.Melar 123

gets (nome_arquivo); if (! strcmp(nome_arquivo,"")) { puts("No foi informado um nome correto de arquivo. Finalizando!"); exit(0); } existe = access(nome_arquivo,4); if (existe) printf("%s no existe \n",nome_arquivo); } while (existe); parq = fopen (nome_arquivo,"rt"); //abrindo o arquivo no modo leitura while (!(feof (parq))) //enquanto no for final de arquivo continua lendo { fgets(CAD.nome, 20, parq); //faz a leitura da string e a carrega no ponteiro fgets(CAD.senha, 6, parq); printf ("%s%s", CAD.nome, CAD.senha); } fclose (parq); system("pause"); break; default: printf("\nOpcao invalida\n"); exit(0); } system("pause"); } }

Prof Angelina V.S.Melar 124

Posicionamento e Pesquisa em arquivo binrio

Para ser feita a leitura e a gravao de um arquivo necessrio saber a posio ideal para que esse processo seja realizado. Existe a funo fseek() que define um ponto especfico de posicionamento no arquivo:
fseek( ponteiro do arquivo, quantos bytes ir avanar, qual a relao de avano) Voc tem que definir atravs do segundo argumento a quantidade certa de bytes para atingir a posio desejada (registro). O terceiro argumento define a posio que se deve estar para depois avanar. Eles podem ser: SEEK_CUR avano a partir a posio corrente (atual) SEEK_SET avano a partir do incio do arquivo SEEK_END avano iniciando do final do arquivo fseek( parq, 3*sizeof(devedores), SEEK_SET);

Primeiro se posiciona para depois fazer a leitura do registro. No exemplo acima, est se posicionando 4 registro. fread(&devedores, sizeof(devedores), 1, fp); possvel posicionar no final do arquivo para fazer uma gravao com o fseek: fseek(pdevedores, 0, SEEK_END); A funo rewind() posiciona no incio do arquivo. Rewind(pdevedores);
7. Verificando o final do arquivo binrio usada a funo feof() para verificar se est ou no no final do arquivo. Esse funo tem um valor de retorno, podendo ser 0 se ainda no est no final do arquivo, ou outro valor (no caso consideramos 1) para indicar o posicionamento no final do arquivo. while ( !(feof (parq))) ou while (feof (parq) == 0) Usamos essa funo dentro de estruturas de repetio, no exemplo acima feita a leitura enquanto no for final de arquivo. 8. Para apagar um arquivo Para apagar um arquivo fsico usada a funo remove(nomedoarquivo). Esse comando s pode ser executado se o arquivo estiver fechado. remove(devedores.bin);

Prof Angelina V.S.Melar 125

Conceitos Bsicos
BIT Cada letra do alfabeto, nmero ou smbolo pode ser representado no computador por um

conjunto de sinais eltricos, chamados de Bits. Toda instruo e controle que deve ser executada pelo computador transmitido atravs desses Bits. O termo BIT, vem de Binary Digit, cuja traduo Digito Binrio, usado para representar a passagem ou no da corrente eltrica no computador (ou campo magntico: positivo ou negativo), tendo apenas dois estados. A passagem da corrente ou impulso eltrico pode ser desginado pelo digito 1 e a no passagem da corrente eltrica pelo digito 0. O BIT a menor unidade de medida de dados que o computador tem.Como um nico BIT no consegue representar todas as letras, digitos binrios e smbolos so feitos os agrupamentos de Bits. O conjunto de 8 Bits forma um agrupamento denominado Byte. As informaes em formato binrio so representadas(codificadas) de acordo com algumas tabelas. Existe representao de cdigo de 4 bits (BCD, Gray), cdigo 5 bits (BAUDOT- servios de telex), cdigo de 7 btis (ASCII) e 8 bits (EBCDIC). O nmero de bits utilizado no cdigo determina o nmero mximo de caracteres possveis a serem representados. Exemplo 7 bits = 27 = 128 combinaes. Algumas tabelas foram criadas pelos fabricantes de computadores. Exemplo: ASCII e EBCDIC

ASCII

A Tabela ou Cdigo ASCII (American Standard Code for Information Interchange Cdigo Padro Americano para o Intercmbio de Informao), criada (1963) e atualizada (1968) na dcada de 60, para representar os caracteres (letra, digito ou caracter especial), essa tabela baseada na combinao 7 bits e para representao o ingls. Com essas combinaes possvel fazer 128 representaes vlidas. Existe 1 bit de paridade para verificao de erros. Quando se pressiona a tecla F (01000100), os circuitos do teclado geram um sinal de 8 voltagens diferentes correspondentes ao seu cdigo de 8 bits, feita a verificao da sua representao ASCII e depois produzido o eco na tela do caracter F. Nessa tabela tem: 128 representaes, cujo valor decimal vai de 0 a 127. o 33 representaes no so imprimveis, pois so caracteres de controle, como as representaes: 13 do ENTER, 27 do ESC, 9 do TAB, 127 do DEL. 93 so representaes dos caracteres imprimveis (do cdigo 33 ao 126), como o alfabeto em maisculas e em minsculas, os nmeros de 0 a 9.
Mudanas na tabela de cdigo ASCII ASCII Estendido Prof Angelina V.S.Melar 126

A ASCII inicialmente no atendia a representao do texto em portugus, no considerava o , , , , . Com o tempo, a tabela ASCII foi expandida at o nmero 255, considerando a combinao do 8 bits, essa tabela foi denominada ASCII Estendida. Mas ainda assim, ela no permite representar ao mesmo tempo os grafemas do sistema latino e de outros como o grego, hebraico. Em funo disso, foram criadas vrias tabelas ASCII, cada uma adaptada a uma ortografia especfica.
EBCDIC O cdigo EBCDIC (Extended Binary Coded Decimal Interchange Code- Cdigo BCD Ampliado para Intercmbio) foi criado pela IBM e utiliza 8 bit para fazer uma representao, existindo a possibilidade de fazer 256 combinaes diferentes. Unicode Existe o padro Unicode (www.unicode.org) que se prope a desenvolver um sistema abrangente e padronizado de representao de escrita em computadores. A tabela Unicode abrange os mais variados sistemas de escrita (latino, chins, etc), alm de considerar smbolos matemticos, musicais, de moeda, etc. Ela subdividida em blocos, como: Unicode Latim Bsico, Unicode Latim I Suplementar, Unicode Latim Estendido A, Unicode Latim Estendido B, Unicode Extenses IPA, Unicode Letras modificadoras de espaamento, Unicode Sinais diacrticos combinados A Unicode Latim Bsico equivale exatamente tabela ASCII de 7 bits. A Unicode Latim I Suplementar equivale a ASCII estendida, de 8 bits. Os blocos Extenses IPA, Letras Modificadoras de Espaamento e Sinais Diacrticos combinados so de especial interesse dos lingistas porque trazem a simbologia do Alfabeto Fontico Internacional. Unidade de Medida Ns temos na nossa vida diria as unidades de medidas metro, litro, hertz e no computador os bits. Como a contagem de medida do computador binria (base 2- 2 estados 0 e 1) e o nosso sistema mtrico de medida decimal tem-se: 210 1.024bytes KB Kilo K(mil) 20 2 1.048.576 bytes MB Mega M(milho) 230 1.073.741.824 bytes GB Giga G(bilho)

Hz (hertz)- 1 Hertz equivale a uma oscilao de sinal corrente- em 1 segundo. Ento GHz equivale a mudana do estado 0 e 1- mais de 1 bilho de vezes por segundo (pulsos). Convencionou a usar o digito 1 ( corrente eltrica alta) para a representar a voltagem de 1,2V e o digito 0 para a corrente eltrica baixa, de 0,2V.

Prof Angelina V.S.Melar 127

Nvel de Programao das Linguagens


Os programas podem ser escritos em diferentes linguagens, as quais o computador consegue interpretar as instrues e execut-las. Essas linguagens possuem conjuntos de regras (sintaxe) e comandos. Os cdigos dos programas so um conjunto de instrues que sinalizam CPU para realizar operaes de conexo de circuito.
Linguagem de Mquina: So instrues escritas em formato binrio, descrevendo exatamente quais circuitos ligar ou desligar. uma linguagem mais complexa de aprender, porm, a CPU somente executa essa linguagem, somente pode ser instruda por ela. Todas as outras linguagens devem ser traduzidas para essa, para poderem ser executadas. Isso feito atravs do uso de um compilador ou interpretador. Exemplo de cdigo: 00010101 Linguagem de Baixo Nvel: Assembly uma linguagem que associa mnemnicos-cdigos s instrues de linguagem de mquina. Nela foi possvel simbolizar os endereos de memria, dando um nome para uma rea da memria. Exemplo de cdigo: A significa adicionar Linguagem de Alto Nvel: uma linguagem que utiliza comandos na forma de palavras (o idioma empregado o ingls). Um nico comando pode executar vrias instrues em linguagem de mquina. A linguagem C e C++ so consideradas por alguns escritores de Nvel Mdio, pois ele tem recursos de baixo nvel, como acesso direto a endereos de memria, manipulao do hardware, mas tambm tem uma linguagem com uma sintaxe mais parecida com a do ser humano. Exemplo de cdigo: printf(Professora Angelina\n);

Alguns enquadram as linguagens dentro das geraes. Nessas geraes existe a diferenciao do uso ou no, de caractersticas como: banco de dados, interface grfica, linguagem mais natural (inteligncia artificial). Exemplos de linguagens de alto nvel: Pascal, Delphi, Visual C#, Cobol.

Prof Angelina V.S.Melar 128

Bibliografia Consultada e Referenciada


ASCENCIO, Ana F. G. e CAMPOS, Edilene A. V. Fundamentos da Programao de Computadores. Ed. Pearson, 2002 CELES, Waldemar; CERQUEIRA, Renato e RANGEL, Jos L. Introduo a Estrutura de Dados. Ed. Campus, 2004 FORBELLONE, A. L. V.; et.al. Lgica de Programao - A Construo de Algoritmos e Estruturas de Dados. 2 ed. Makron Books. 2000. PEREIRA, Fabio. PIC Programao em C, So Paulo, 7ed. rica, 2007 SCHILDT, Herbert. C Completo e Total. 3 ed. Ed. Makron Books. 1996. SENAI-SP. MDI. Tecnologia de Elaborao de Material Didtico Impresso. So Paulo, 1996 VILLAS, Marcos Vianna e VILLASBOAS, Luiz Felipe P. Programao: conceitos, tcnicas e linguagens. Rio de Janeiro, Ed. Campus, 1988
RINALDI, ROBERTO. Turbo Pascal 7.0 Comandos e Funes. Ed. rica, So Paulo, 1993 CARIB, Roberto e CARIB Carlos. Introduo Computao. Ed. FTD, 1996 SP

STAIR, Ralph M. Princpios de Sistemas de Informao. Ed. LTC, 2ed, 1996. RJ

Prof Angelina V.S.Melar 129

Você também pode gostar