Você está na página 1de 114

UNIVERSIDADE DO ESTADO DE SANTA CATARINA DEPARTAMENTO DE CINCIA DA COMPUTAO CURSO DE TECNOLOGIA EM SISTEMAS DE INFORMAO

INTRODUO A CINCIA DA COMPUTAO

PREFCIO

Bem-vindo disciplina de Introduo Cincia da Computao do curso de Tecnologia em Sistemas de Informao da UDESC. Neste novo mundo, para muitos que aqui ingressaram, eis que aqui est uma das disciplinas mais complexas da primeira fase, principalmente por se tratar de algo fora do convencional, lecionado em salas de aula normais. Esta diferena d-se justamente por se tratar da disciplina-base do curso, pois aqui que vocs aprendero a programar, ou seja, todo o contedo adquirido nesta disciplina os acompanhar para o resto de suas vidas, caso vocs permaneam na rea de programao. Um auxlio, tanto para ns professores, que podemos dinamizar as aulas e cumprir o contedo dentro do prazo estipulado com uma maior gama de exemplos e aulas prticas, como para vocs alunos, que tem em mos um resumo do contedo, com exemplos e vrios exerccios para serem feitos. Exerccios estes que so a chave para o sucesso do acadmico no curso, pois so mais de 130 exerccios de lgica, alm dos exerccios avaliativos e exerccios extras que no se encontram neste material que so aplicados durante o semestre. Mas mesmo com a apostila e fazendo todos os exerccios, o acadmico somente ter o seu diferencial caso ele pesquise na rede, em livros, em apostilas e faa algo mais, no somente o que lhe foi pedido, o que lhe foi mandado, pois assim ele ser apenas mais um dentre vrios acadmicos que se formam a cada semestre. Enfim, o sucesso depende de cada um, de seu esforo e sua vontade, no somente aqui na universidade, mas em todas as reas da vida.

So Bento do Sul, SC.

SUMRIO

PREFCIO ......................................................................................................................................................... 2 UNIDADE 1 - INICIAO AOS COMPUTADORES ..................................................................................... 6 1.1 - HISTRICO DA COMPUTAO ....................................................................................................... 6 1.1.1 - Fatos e Personagens Histricos ....................................................................................................... 6 1.1.2 - Evoluo da Eletrnica.................................................................................................................... 7 1.1.3 - Geraes de Computadores ............................................................................................................. 8 1.2 - APRESENTAO DE UM MODELO DE COMPUTADOR .............................................................. 9 1.2.1 - Introduo ....................................................................................................................................... 9 1.2.2 - Definio e Origem do termo Informtica....................................................................................... 9 1.2.3 - Elementos e Conceitos Fundamentais ............................................................................................. 9 1.2.4 - Hardware ....................................................................................................................................... 10 1.2.5 - Software ........................................................................................................................................ 10 1.3 - UNIDADES BSICAS DO COMPUTADOR DIGITAL ................................................................... 11 1.4 - UNIDADE CENTRAL DE PROCESSAMENTO ............................................................................... 11 1.4.1 - Unidade de Controle (UC) ............................................................................................................ 12 1.4.2 - Unidade Lgico-Aritmtica (ULA) ............................................................................................... 12 1.5 - MEMRIA PRIMRIA E SECUNDRIA ........................................................................................ 12 1.5.1 - Memria Primria (ou Principal) .................................................................................................. 12 1.5.2 - Memria Secundria (ou Auxiliar) ................................................................................................ 13 1.6 - PERIFRICOS OU MEIOS DE ENTRADA E SADA ...................................................................... 13 1.6.1 - Dispositivos de Entrada ................................................................................................................. 14 1.6.2 - Dispositivos de Sada .................................................................................................................... 14 1.7 - NOES DE SISTEMA OPERACIONAL......................................................................................... 14 1.8 - NOES BSICAS DE REDE LOCAL ............................................................................................ 15 UNIDADE 2 - INTRODUO PROGRAMAO .................................................................................... 17 2.1 - CONCEITO DE ALGORITMO .......................................................................................................... 17 2.2 - APRESENTAO DE UMA LINGUAGEM HIPOTTICA............................................................. 17 2.2.1 - Descrio Narrativa ....................................................................................................................... 17 2.2.2 - Fluxograma Convencional............................................................................................................. 18 2.2.3 - Pseudocdigo ................................................................................................................................ 20 2.3 - SOLUO DE PROBLEMAS ATRAVS DO COMPUTADOR HIPOTTICO ............................. 21 2.4 - ERROS ................................................................................................................................................. 21 UNIDADE 3 - FERRAMENTAS DE PROGRAMAO............................................................................... 24 3.1 - EDITOR ............................................................................................................................................... 24 3.2 - INTERPRETADOR ............................................................................................................................. 24 3.3 - COMPILADOR ................................................................................................................................... 24 3.4 - LINK EDIO .................................................................................................................................... 25 3.5 - DEPURADOR DE PROGRAMA ........................................................................................................ 25 3.6 - AMBIENTE INTEGRADO ................................................................................................................. 26 3.7 - BIBLIOTECAS .................................................................................................................................... 26 UNIDADE 4 - INTRODUO LINGUAGEM DE PROGRAMAO ..................................................... 28 4.1 - TIPOS DE DADOS PRIMITIVOS ...................................................................................................... 28 4.1.1 - Dados Numricos Inteiros ............................................................................................................. 28 4.1.2 - Dados Numricos Reais ................................................................................................................ 28 4.1.3 - Dados Literais ............................................................................................................................... 29 4.1.5 - Conceito e Utilidade de Variveis ................................................................................................. 30 4.1.6 - Definio de Variveis em Algoritmos ......................................................................................... 31 4.1.7 - Expresses ..................................................................................................................................... 33 4.2 - OPERADORES ARITMTICOS ........................................................................................................ 33 4.2.1 - OPERADORES ARITMTICOS ................................................................................................. 34 4.3 - OPERADORES LGICOS.................................................................................................................. 35 4.4 - OPERADORES RELACIONAIS ........................................................................................................ 35
3

UNIDADE 5 - ESTRUTURAS DE CONTROLE............................................................................................ 39 5.1 - ESTRUTURAS SEQNCIAIS ......................................................................................................... 39 5.1.1 - Instrues Primitivas ..................................................................................................................... 40 5.1.2 - Instruo Primitiva de Atribuio ................................................................................................. 40 5.1.3 - Instruo Primitiva de Sada de Dados .......................................................................................... 42 5.1.4 - Instruo Primitiva de Entrada de Dados ...................................................................................... 43 5.2 - ESTRUTURAS DE SELEO ........................................................................................................... 46 5.2.1 Estruturas de Deciso do Tipo Se .................................................................................................... 47 5.2.2 - Estruturas de Deciso do Tipo Escolha ......................................................................................... 49 5.3 - ESTRUTURAS DE REPETIO ....................................................................................................... 51 5.3.1 ESTRUTURA PARA ...................................................................................................................... 51 5.3.1 ESTRUTURA ENQUANTO .......................................................................................................... 52 5.3.3 ESTRUTURA FAA-ENQUANTO ............................................................................................... 53 5.3.4 Exerccios ........................................................................................................................................ 55 UNIDADE 6 VARIVEIS INDEXADAS.................................................................................................... 60 6.1 - Introduo ............................................................................................................................................ 60 6.2 - Operaes Bsicas com Variveis Indexadas ....................................................................................... 60 6.2.1 - Atribuio ...................................................................................................................................... 61 6.2.2 - Leitura ........................................................................................................................................... 61 6.2.3 - Escrita............................................................................................................................................ 62 6.3 - Matrizes Unidimensionais (Vetores) .................................................................................................... 63 6.3.1 Mtodos de Pesquisa Seqencial .................................................................................................. 66 6.3.2 Mtodo de Pesquisa Binria ......................................................................................................... 67 6.3.3 Mtodo da Bolha de Classificao ............................................................................................... 68 6.3.4 Exerccios ........................................................................................................................................ 70 6.4 Matrizes Multidimesionais (Matrizes) ................................................................................................. 74 6.4.1 - Introduo ..................................................................................................................................... 74 6.4.2 - Declarando a Matriz ...................................................................................................................... 74 6.4.3 - Inserindo valores em uma matriz................................................................................................... 75 6.4.4 - Clculo do Tamanho ..................................................................................................................... 76 6.4.4 - Exerccios ...................................................................................................................................... 77 UNIDADE 7 STRINGS E CARACTERES .................................................................................................. 80 7.1 Definio ................................................................................................................................................ 80 7.1.1 Observaes Importantes ................................................................................................................. 80 7.2 Funes para Manipulao de Strings .................................................................................................... 80 7.2.1 Get String (gets) .............................................................................................................................. 81 7.2.2 String Copy (strcpy) ........................................................................................................................ 81 7.2.3 String Concatenate (strcat) .............................................................................................................. 82 7.2.4 String Length (strlen) ....................................................................................................................... 82 7.2.5 String Compare (strcmp) ................................................................................................................. 83 7.3 Funes para Manipulao de Caracteres ............................................................................................... 84 7.3.1 Funo tolower ................................................................................................................................ 85 7.3.2 Funo toupper ................................................................................................................................ 85 7.3.3 Outras Funes ................................................................................................................................ 85 7.4 Limpeza do Buffer do Teclado ............................................................................................................... 85 UNIDADE 8 - FUNES ............................................................................................................................... 88 8.1 - Introduo ............................................................................................................................................ 88 8.2 - Funcionamento ..................................................................................................................................... 88 8.2.1 Porque usar funes? ....................................................................................................................... 88 8.2.2 Erros Comuns de Programao ....................................................................................................... 90 8.2.3 Exerccios: ....................................................................................................................................... 90 8.3 DEFINIO DE FUNES ................................................................................................................. 92 8.3.1 CHAMANDO FUNES............................................................................................................... 92 8.3.2 REGRAS DE ESCOPO ................................................................................................................... 92 8.3.3 CLASSES DE ARMAZENAMENTO ............................................................................................ 92
4

8.5 RECURSIVIDADE ............................................................................................................................ 96 8.6 Exerccios ............................................................................................................................................... 97 UNIDADE 9 O PR-PROCESSADOR ........................................................................................................ 99 9.1 Definio ................................................................................................................................................ 99 9.2.2 Diretiva #define ............................................................................................................................. 100 ANEXO I Operadores ............................................................................................................................. 103 ANEXO II Expresses............................................................................................................................. 104 Expresses que podem ser abreviadas .................................................................................................... 104 Modeladores ........................................................................................................................................... 104 ANEXO III As Instrues Break e Continue ........................................................................................... 106 A Instruo Break ................................................................................................................................... 106 A instruo Continue .............................................................................................................................. 106 ANEXO IV TABELA ASCII .................................................................................................................. 108 ANEXO V Tipos de Dados e Valores Mximos Permitidos ................................................................... 114

UNIDADE 1 - INICIAO AOS COMPUTADORES

1.1 - HISTRICO DA COMPUTAO


A Informtica uma cincia que passou a ser tratada como tal h poucos anos, sendo que a ela est associada uma srie de fatos e descobertas anteriores, que serviram para que atualmente seja uma das cincias qual o homem est dedicando maior ateno e atribuindo cada vez mais importncia.

1.1.1 - Fatos e Personagens Histricos


J h muito tempo o homem vem tentando livrar-se dos trabalhos manuais e repetitivos, entre os quais esto as operaes de clculo e a redao de relatrios. O baco mais antigo data aproximadamente do ano 3500 a.C., no vale entre Tigre e o Eufrates. Por volta do ano 2600 a.C. apareceu o baco chins, que evoluiu rapidamente. O baco constituiu o primeiro dispositivo manual de clculo, sendo que sua principal funo era representar nmeros no sistema decimal e realizar operaes com eles. No final do sculo XVI, o matemtico escocs John Napier (l550-1617), inventor dos logaritmos naturais, idealizou um dispositivo baseado em bastes que continham nmeros capaz de multiplicar e dividir de forma automtica. Tambm idealizou um calculador com cartes que permitia efetuar multiplicaes e que recebeu o nome de Estruturas de Napier. Poucos anos depois, em 1642, o matemtico e filsofo francs Blaise Pascal (l623-1662) inventou a primeira mquina automtica de calcular, constituda de rodas dentadas, baseada no funcionamento do baco. Essa mquina realizava operaes de soma e subtrao mostrando o resultado numa srie de janelinhas. Num primeiro momento foi chamada Pascalina, recebendo mais tarde o nome de Mquina Aritmtica de Pascal. Em 1650, Patridge, com base nas experincias de Napier, inventou a rgua de clculo, pequena rgua deslizante sobre uma base fixa em que havia diversas escalas para a realizao de determinadas operaes. Esse dispositivo de clculo foi muito utilizado at os anos setenta, quando foi substitudo pelas calculadoras eletrnicas.

Poucos anos depois, 1672, o matemtico alemo Gottfried Wilhelm von Leibnitz (l646-1716) aprimorou a mquina de Pascal, obtendo a calculadora universal, que somava, subtraa, multiplicava, dividia e extraa a raiz quadrada.

J no sculo XIX, em, 1801, Joseph Marie Jackuard (l752 - 1834) construiu um tear automtico com entrada de dados atravs de cartes perfurados para controlar a confeco dos tecidos e seus desenhos. Podemos consider-lo a primeira mquina mecnica programada. No ano de 1822, Charles Babbage (l792-1871), matemtico ingls e professor da Universidade de Cambridge, projetou a sua Mquina de Diferenas, um dispositivo mecnico baseado em rodas dentadas, para a avaliao de funes e obteno de tabelas. Devido s deficincias tecnolgicas da poca, essa mquina no chegou a ser fabricada. Em 1833, Babbage projetou a sua Mquina Analtica ou Diferencial, semelhante ao computador atual, pois dispunha de programa, memria, unidade de controle e perifricos de entrada e sada. A idia da sua construo surgiu da necessidade de se realizar automaticamente tabelas de logaritmos e funes trigonomtricas. Essa mquina - pelos mesmos motivos da sua antecessora, a Mquina de Diferenas - no chegou a ser construda. Devido a esse projeto, Babbage considerado o Pai da informtica. Em 1854, George Boole, matemtico ingls, desenvolveu a teoria da lgebra de Boole, que permitiu a seus sucessores a representao de circuitos de comutao e o desenvolvimento da chamada Teoria dos Circuitos Lgicos. Em 1937, Howard H. Aiken, da Universidade de Harvard, desenvolve a idia de Babbage junto com cientistas do seu departamento e engenheiros da IBM. Como resultado desse desenvolvimento, construram o primeiro computador eletromecnico baseado em rels e engrenagens, denominado Calculadora Automtica de Seqncia Controlada (Automatic Sequence Controlled Calculator - ASCC), que recebeu o nome de MARK-I. O MARK-1 acabou de ser construdo em 1944 e possua unidades de entrada, memria principal e unidade aritmtica de controle e de sada. Utilizava como entrada cartes e fitas perfuradas, tinha 17 metros de comprimento por 2 metros de altura, pesava cerca de 70 toneladas, era constitudo de 700.000 peas mveis e sua fiao alcanava os 800.000 metros. Somava dois nmeros em menos de um segundo e os multiplicava em seis segundos. Em 1940, John W. Mauchly e J. Presper Eckert Jr., junto com cientistas da Universidade da Pensylvania, construram na Escola Moore de Engenharia Eltrica, o primeiro computador eletrnico, denominado ENIAC (Electronic Numerical Integrator and Calculator), que entrou em funcionamento em 1945. Foi um projeto do Exrcito dos Estados Unidos para o clculo da trajetria de projteis atravs de tabelas. Em 1951, Mauchly constri o primeiro computador da srie a ser posto venda, o UNIVAC-I (Computador Automtico Universal), que utilizava fitas magnticas. Em 1952, so construdos os computares MANIAC-I, MANIAC-II e o UNIVAC-H (este ltimo com memria de ncleos de ferrite) e com eles acaba a pr-histria da Informtica.

1.1.2 - Evoluo da Eletrnica


Desde o surgimento do UNIVAC-I, em 1951, como primeiro computador comercial, at hoje, quando existe uma infinidade de modelos cada vez mais potentes, baratos e pequenos, quase todas as transformaes foram impulsionadas por descobertas ou avanos no campo da eletrnica. Esses avanos podem ser resumidos em: Em 1904, o ingls Fleming inventou a vlvula a vcuo, que foi utilizada como elemento de controle e para integrar dispositivos biestveis. Nos anos cinqenta, com a descoberta dos semicondutores, surgiu o diodo e o transistor, permitindo a reduo do tamanho dos circuitos e aumentando a confiabilidade dos equipamentos.

Anos depois, comeou a miniaturizao com a construo dos circuitos integrados que consistiam em tratamentos fsico-qumicos sobre uma pelcula de silcio, permitindo configurar diferentes circuitos de portas lgicas. Com esse elemento teve incio a cincia do projeto lgico de circuitos com baixa escala de integrao ou SSI (Short Scale Integration) que permitia introduzir em cada circuito em mdia de 10 portas lgicas. Surgiu a integrao em escala mdia ou MSI (Medium Scale Integration) na qual passaram a integrar-se numa nica pastilha de circuito integrado entre 100 e 1.000 portas lgicas. Anos mais tarde, conseguiu-se introduzir num mesmo circuito entre 1.000 e 10.000 portas, com o que se passou integrao em grande escala ou LSI (Long Scale Integration). Quando foram ultrapassadas as 10.000 portas por circuito, passou-se altssima escala de integrao ou VLSI (Very Long Scale Integration). Em 1971 apareceu o microprocessador, com o que se conseguiu implementar toda a CPU de um computador num nico elemento integrado.

1.1.3 - Geraes de Computadores


Os saltos tecnolgicos ocorridos implicaram numa classificao dos computadores em geraes: 1a. Gerao (l940-1952). constituda por todos os computadores construdos base de vlvulas a vcuo e cuja aplicao fundamental se deu nos campos cientfico e militar. Utilizavam como linguagem de programao a linguagem de mquina e como nica memria para armazenar informao os cartes perfurados e as linhas de retardo de mercrio. 2a. Gerao (l952-1964). A substituio da vlvula pelo transistor deu incio chamada segunda gerao de computadores. As mquinas ganharam mais potncia e contabilidade, com reduo de tamanho e consumo. Comearam a ser utilizadas linguagens de programao mais evoludas, como as linguagens de montagem (assembly) e algumas das chamadas de alto nvel (COBOL, ALGOL e FORTRAN). Alm disso, a fita magntica e os tambores magnticos comearam a ser utilizados como memria. 3a. Gerao (l964-1971). Nesta gerao o elemento mais significativo o circuito integrado surgido em 1964 e que consiste no encapsulamento de uma grande quantidade de componentes discretos (resistncias, condensadores, diodos e transistores), instalando-se um ou vrios circuitos numa pastilha de silicone ou plstico. A miniaturizao se estende a todos os circuitos do computador, aparecendo os minicomputadores. Foram utilizadas temologias SSI e MSI. A par disso o software evoluiu consideravelmente, com um grande desenvolvimento dos sistemas operacionais, nos quais se incluiu a multiprogramao, o tempo real e o modo interativo. Passaram a se utilizar as memrias de semicondutores e os discos magnticos. 4a. Gerao (l971-1981). Em 1971 aparece o microprocessador, que consiste na incluso de toda a CPU de um computador num nico circuito integrado. A tecnologia utilizada a LSI que permitiu a fabricao de microcomputadores e computadores pessoais, bem como computadores compactos. o incio da utilizao do disquete (floppy disk) como unidade de armazenamento. Surgiu uma grande quantidade de linguagens de programao de todos os tipos e as redes de transmisso de dados para a interligao de computadores (Telemtica/Informtica). 5a. Gerao (l98l-?). Em 1981 os principais pases produtores de novas tecnologias anunciaram uma nova gerao cujas principais caractersticas residem na utilizao de: Componentes com altssima escala de integrao (tecnologia VLSI). Inteligncia artificial.
8

Linguagem natural. Altssima velocidade de processamento. Etc.

1.2 - APRESENTAO DE UM MODELO DE COMPUTADOR


1.2.1 - Introduo
A informtica a tcnica propulsora do processo de transformao tecnolgica e cultural que hoje muda, e continuar mudando a realidade subjetiva e social, mas ela apenas a parte imersa do ceberg. Isso se deve ao fato de que, enquanto o uso de palavras como software, hardware, CPU, microprocessador, CD-ROM apresentado como meta a ser alcanada na corrida "alfabetizao", as caractersticas e os efeitos da introduo das novas tecnologias parecem estar cada vez mais reservados ao conhecimento de poucos. O processo em questo requer uma viso global, unitria, uma observao que, ao contrrio do que vem ocorrendo, seja fruto de diversas abordagens disciplinares e cientficas.

1.2.2 - Definio e Origem do termo Informtica


Ao longo da histria o homem tem precisado constantemente tratar e transmitir informao, por isso nunca parou de criar mquinas e mtodos para process-la. Com esta finalidade, surge a informtica como uma cincia encarregada do estudo e desenvolvimento dessas mquinas e mtodos. A informtica nasceu da idia de auxiliar o homem nos trabalhos rotineiros e repetitivos, em geral de clculo e gerenciamento. O termo Informtica foi criado na Frana em 1962, e provm da contrao das palavras: Information automatique (Informao automtica). Uma das definies mais comumente aceitas:

Informtica a cincia que estuda o tratamento automtico e racional da informao.

Entre as principais funes da informtica destacam-se: desenvolvimento de novas mquinas; desenvolvimento de novos mtodos de trabalho; construo de aplicaes automticas; melhoria de mtodos e aplicaes existentes.

1.2.3 - Elementos e Conceitos Fundamentais


Do ponto de vista informtico, o elemento fsico utilizado para o tratamento de dados e a obteno de informao o computador.
9

O computador uma mquina composta de elementos fsicos do tipo eletrnico, capaz de realizar uma grande variedade de trabalhos com alta velocidade e preciso, desde que receba as instrues adequadas. Ao conjunto de ordens dadas a um computador para a realizao de um determinado processo d-se o nome de programa. Ao conjunto de um ou vrios programas que realizam determinado trabalho completo d-se o nome de aplicao informtica. A informao o elemento a ser tratado e definida como tudo aquilo que permite adquirir qualquer tipo de conhecimento e portanto, existir informao sempre que se der a conhecer algo que at ento se desconhecia.

1.2.4 - Hardware
O hardware representa a parte fsica de um sistema informtico, ou seja, todos os elementos que o compem.

Tudo que voc ver e tocar no computador hardware, ou seja, teclado, monitor, impressora, etc.

O esquema bsico do hardware o seguinte:

Memria Auxiliar
CPU

Processador Unidade de Entrada Unidade de Controle + Unidade Lgico-Aritmtica Unidade de Sada

Memria Central

1.2.5 - Software
Para que um computador funcione necessrio de programas. Estes programas so chamados de softwares. Software o conjunto de instrues, organizadas em um ou mais arquivos, que manda o computador executar tarefas que solucionam determinados problemas. Os softwares so compostos de elementos lgicos que direcionam a ao do hardware. Os softwares so classificados em: bsico, aplicativos, linguagens e utilitrios.

10

Software bsico (sistema): so programas que administram, operam e mantm o funcionamento do computador, ao mesmo tempo em que nos auxiliam a us-lo. Dentre os softwares bsicos destaca-se o sistema operacional, cujo conjunto de programas tem a finalidade de tornar o computador operacional, isto , so os programas que gerenciam os recursos da mquina e executam tarefas definidas, tais como: gravar dados, apagar, etc..., servindo de ligao entre o computador e o usurio, criando ambiente necessrio dentro do qual os softwares e aplicativos so executados. Exemplo: DOS, Windows 95, OS/2, Unix, etc. Software de aplicao: qualquer programa que nos possibilite tirar proveito do computador, como o Word um processador de textos, planilhas eletrnicas, editores grficos, gerenciadores de banco de dados, jogos, etc. Utilitrios: so programas que tem a finalidade de dar apoio a operao do computador. Executa rotinas para tarefas realizadas freqentemente como: compactao/descompactao de arquivos, deteco e eliminao de vrus, entre outros. Linguagens de programao: as linguagens surgiram da necessidade de comunicao entre o homem e o computador. a forma que possibilita o homem a desenvolver aplicaes, por exemplo: folha de pagamento, sistema contbil, sistemas acadmicos, etc. As linguagens so os meios de implementao desses programas. Exemplo: Pascal, C++, Cobol, Visual Basic, etc.

1.3 - UNIDADES BSICAS DO COMPUTADOR DIGITAL


Conforme visto na unidade 1.2.4, os componentes bsicos de um computador so: Unidade Central de Processamento (CPU): o elemento principal do computador e sua funo consiste em coordenar, controlar ou realizar todas as operaes do sistema. Unidades de Entrada e Sada: tambm chamadas de perifricos, so responsveis pela entrada ou sada de informaes no computador. Memria: so os dispositivos capazes de armazenar informaes. Veremos detalhadamente cada componente na seqncia.

1.4 - UNIDADE CENTRAL DE PROCESSAMENTO


A unidade central de processamento (CPU) o verdadeiro crebro do computador sendo que sua tarefa consiste em coordenar e controlar ou realizar das as operaes do sistema. A CPU compe-se de elementos cuja natureza exclusivamente eletrnica (circuitos).

A CPU o crebro do computador e nesta unidade que ocorrem as decises, clculos, etc.

Suas partes principais so as seguintes: O Processador: Que por sua vez composto de: Unidade de controle (UC). Unidade Lgica e Aritmtica (ULA).

11

A Memria Principal: A unidade central de processamento tambm incorpora um certo nmero de registros rpidos (pequenas unidades de memria) de finalidade especial, que so utilizados internamente.

1.4.1 - Unidade de Controle (UC)


A unidade de controle (UC) o centro nervoso de computador, controla o fluxo de dados entre as unidades da CPU, buscando uma a uma as instrues e os dados armazenados na memria principal e distribuindo para os mdulos responsveis pela sua execuo, verificando, por exemplo, se sero enviados para a unidade de entrada/ sada ou para unidade lgico-aritmtica.

1.4.2 - Unidade Lgico-Aritmtica (ULA)


Esta unidade encarrega-se da realizao das operaes elementares de tipo aritmtico (geralmente somas ou subtraes) e de tipo lgico (geralmente comparaes).

1.5 - MEMRIA PRIMRIA E SECUNDRIA


O termo memria se aplica a todo dispositivo capaz de armazenar informaes.

1.5.1 - Memria Primria (ou Principal)


a parte da unidade central de processamento de um computador onde esto armazenadas as instrues e os dados necessrios para que um determinado processo possa ser realizado. A memria principal constituda por um grande nmero de clulas ou posies de memria numeradas de forma consecutiva, capazes de reter a informao necessria enquanto o computador estiver ligado. Classificam-se em dois tipos: Memria RAM Memria ROM (Read Only Memory) 1.5.1.1 - Memria RAM (Random Access Memory) Esta memria retm os dados e programas que esto sendo executados, tornando o tempo de leitura e gravao extremamente rpidos. Este tipo de memria denominado voltil, pois seu contedo perdido ao se desligar o micro ou at mesmo devido a uma queda sbita de energia. 1.5.1.2 - Memria ROM (Read Only Memory) a memria de leitura, pois as informaes so gravadas no momento da fabricao e no mais sero alteradas. Contm basicamente informaes necessrias para o funcionamento do computador, como rotinas que verificam se os meios fsicos esto aptos para o funcionamento.

12

1.5.2 - Memria Secundria (ou Auxiliar)


As memrias auxiliares so usadas em computao para definir qualquer dispositivo utilizado como meio para guardar informaes que no podem ser perdidas, mesmo quando o computador desligado por qualquer motivo. Este tipo de memria conhecido ainda como memria de massa ou externa. O tempo de leitura e gravao so mais lentos que o da memria principal, tendo em vista que a principal est relacionada diretamente com a CPU, enquanto que a auxiliar encontra-se fora da CPU, e necessita de um meio externo, acionador de leitura e gravao, para o armazenamento das informaes desejadas. Exemplo de memrias auxiliares: Fita magntica Disco magntico - Rgidos (winchester) ou Flexvel (disquete) Carto Perfurado CD-ROM Discos Magnticos So elementos fsicos compostos por uma base de plstico ou metal recoberta por uma fina camada de material magntico (normalmente xido de ferro) onde se registra a informao em pontos magnetizveis.

Os discos magnticos so reutilizveis, uma vez que a informao pode ser apagada ou gravada quantas vezes for necessrio.

Os discos magnticos so circulares, divididos em trilhas e setores. Divide-se em: Discos Flexveis (ou Disquetes): Possuem um orifcio central que serve para encaix-lo em um mecanismo de rotao e um pequeno orifcio de controle que serve de ndice para referenciar o comeo da trilha. Possuem trs tamanhos e so medidos em polegadas, de acordo com seu tamanho: 8, 5 e 3 . As operaes de leitura e gravao feito por meio de um acionador de discos flexveis chamado driver.Dentre as vantagens podemos citar: Portabilidade que nos permite utilizar a mesma massa de dados em vrios computadores; O custo dos discos flexveis relativamente baixo. Discos Rgidos (ou Winchester): Estes discos so acoplados no interior do computador. Tem como principais vantagens: a grande capacidade de armazenamento; maior velocidade de acesso se comparados com os discos flexveis.

1.6 - PERIFRICOS OU MEIOS DE ENTRADA E SADA


Em informtica, dispositivos de entrada e sada todo dispositivo que permite a comunicao do computador com o mundo exterior. Existem vrios tipos de entrada e sada como: mouse, impressoras, teclados, scanner, etc. A transferncia de dados, realizada nessa comunicao, pode ser efetuada atravs de blocos de informao ou palavra a palavra. A transferncia realizada atravs dos controladores dos dispositivos sob superviso da CPU.

Os perifricos so utilizados para introduzir ou extrair informaes no computador.


13

Podemos distinguir trs categorias de perifricos: Dispositivos de Entrada Dispositivos de Sada Dispositivos de Entrada/Sada

1.6.1 - Dispositivos de Entrada


So os utilizados para introduzir no computador a informao que vai ser objeto de tratamento. Exemplos: teclado, mouse, scanner, mesa digitalizadora, canetas ticas, leitora de cdigo de barras, telas de superfcie sensveis ao toque, etc.

1.6.2 - Dispositivos de Sada


Os dispositivos de sada convertem as informaes internamente armazenados no computador e os transforma em informaes teis ao mundo exterior. Exemplos: Impressora, vdeo, plotter, etc. Vdeo Este perifrico tipicamente de sada de informao. Embora a primeira vista nos confunda o fato de ao digitarmos termos a impresso de que estamos introduzindo os dados a partir da tela. O menor ponto que se pode obter em um dado vdeo chamado de pixel (picture element) e depende da qualidade do monitor e da placa de vdeo que o controla. Com isso podemos ter um monitor de baixa, mdia ou alta resoluo. Observao: A linguagem C trabalha com o vdeo atravs de 80 colunas por 25 linhas. Impressora Obviamente, a utilidade deste perifrico est na produo de informao escrita; portanto, podemos afirmar que ela uma unidade unicamente de sada. Podem ser dividas em impressoras de impacto (matricial) e de no impacto( jato de tinta, lazer, etc.).

1.7 - NOES DE SISTEMA OPERACIONAL


Um computador recm sado da linha de montagem, sem software residente, no pode fazer absolutamente nada. No aceita caracteres digitados via teclado e nem os exibe na tela. No pode sequer carregar ou muito menos executar um programa. Diante da mquina "crua", mesmo programadores experientes encontraro dificuldades para fazerem alguma coisa, enquanto os usurios sem formao tcnica perdem-se completamente. Uma vez que o hardware puro apresenta-se como a menos cooperativa das interfaces, as pessoas raramente comunicam-se com ele. Usurios e programadores lidam com o hardware por intermdio de um programa do sistema chamado Sistema Operacional.

O sistema operacional serve como interface entre o software aplicativo e o hardware.

14

A mais evidente funo do sistema operacional servir como interface com o hardware. Isso, porm, no tudo que ele faz. Os recursos bsicos do computador consistem no hardware, software e os dados. Todos esses recursos so gerenciados pelos sistemas operacionais modernos, especialmente na mquina de grande porte.

Software

Sistema Operacional

Dados

Hardware

Figura: Em muitos computadores, o sistema operacional um gerenciador de recursos, alocando o hardware, o software e os dados. O sistema operacional a interface bsica entre o usurio e o computador. Por isto, a medida que a utilizao de um computador exige uma maior complexidade, torna-se mais importante um certo conhecimento mnimo do sistema operacional.

1.8 - NOES BSICAS DE REDE LOCAL


Uma rede local distinguida de outras redes pela rea que ela serve, a velocidade com que as informaes so transmitidas, a facilidade com que novos equipamentos so adicionados e a simplicidade do meio de transmisso bsico.

Rede Local uma interligao de vrios equipamentos que compartilham recursos entre s.

Geralmente uma rede local serve uma rea geograficamente limitada, isto , um ambiente de trabalho, em edifcio, um campus universitrio, uma fbrica, etc. As distncias podem variar de metros at alguns poucos quilmetros. A velocidade de transmisso da ordem de milhes de bits (binary digit) por segundo, em contrastes com a rede de longa distncia que transportam dados a uma velocidade que varia de centenas de bits por segundo a milhares de bits por segundo. A maioria dos produtos existentes na rea utiliza uma forma simples de interligao fsica entre os equipamentos e talvez esta seja uma das caractersticas mais atrativas das redes locais, uma vez que o sonho

15

de todo gerente de rede ter a facilidade de conectar novos equipamentos sem ter que ligar novos cabos e sem ter que implementar novos protocolos e procedimentos. Estas caractersticas, no entanto, no so suficientes para garantir o sucesso de uma rede local. Para o usurio final, muito importante ter um mecanismo de transmisso de informao eficiente sem que haja a necessidade de conhecer os detalhes tcnicos para efetuar a ligao com a rede. Uma rede local pode ser descrita atravs das seguintes caractersticas: estar completamente contida dentro de uma rea geogrfica limitada; equipamentos so interconectados de forma independentes; proporciona alto grau de interconexo entre os equipamentos da rede; usada para transmisso de informao geralmente na forma digital; a interface com a rede feita atravs de equipamentos e meios de transmisso relativamente baratos; possvel a comunicao entre dois equipamentos quaisquer da rede. Uma das aplicaes bsicas de rede local o compartilhamento de recursos, isto , o compartilhamento de um perifrico mais caro, tal como disco ou impressora entre diversos micros. EXERCCIOS 1. 2. 3. 4. 5. 6. 7. 8. 9. Faa uma sntese atravs de uma tabela da evoluo do computador. Repita e exerccio anterior para representar as geraes dos computadores. Conceitue informtica e relacione algumas atividades de sua vida em que ela faz parte. Conceitue computador, programa, aplicao informtica e informao. Conceitue hardware e elabore seu esquema bsico. Conceitue software e relacione suas aplicaes. Relacione as unidades bsicas de um computador. Conceitue CPU e suas subdivises (UC e ULA). Conceitue memria, memria principal e memria secundria.

10. Sobre memria secundria os discos magnticos so, hoje em dia, os mais utilizados. Defina discos magnticos e as vantagens de cada um. 11. O que so perifricos? Exemplifique. 12. Conceitue sistema operacional e faa um esquema sobre o mesmo. 13. Conceitue rede local e a vantagem de utilizao da mesma.

16

UNIDADE 2 - INTRODUO PROGRAMAO

2.1 - CONCEITO DE ALGORITMO


A automao o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por mquinas, sejam estas dispositivos mecnicos, eletrnicos (como os computadores) ou de natureza mista. Para que a automao de uma tarefa seja bem sucedida necessrio que a mquina que passar a realiz-la seja capaz de desempenhar cada uma das etapas constituintes do processo a ser automatizado com eficincia, de modo a garantir a repetibilidade do mesmo. Assim, necessrio que seja especificado com clareza e exatido o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem como a seqncia em que estas fases devem ser realizadas.

especificao da seqncia ordenada de passos que deve ser seguida para a realizao de uma tarefa, garantindo a sua repetibilidade, d-se o nome de algoritmo.

Ao contrrio do que se pode pensar, o conceito de algoritmo no foi criado para satisfazer s necessidades da computao. Pelo contrrio, a programao de computadores apenas um dos campos de aplicao dos algoritmos. Na verdade, h inmeros casos que podem exemplificar o uso (involuntrio ou no) de algoritmos para a padronizao do exerccio de tarefas rotineiras. Para que um computador possa desempenhar uma tarefa necessrio que esta seja detalhada passo a passo, numa forma compreensvel pela mquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais que um algoritmo escrito numa forma compreensvel pelo computador.

2.2 - APRESENTAO DE UMA LINGUAGEM HIPOTTICA


Existem diversas formas de representao de algoritmos, mas no h um consenso com relao melhor delas. Algumas formas de representao de algoritmos tratam os problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma linguagem de programao especfica. Por outro lado, existem formas de representao de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idia principal, o algoritmo, dificultando seu entendimento. Dentre as formas de representao de algoritmos mais conhecidas sobressaltam: Descrio Narrativa; Fluxograma Convencional; Pseudocdigo, tambm conhecido como Linguagem Estruturada ou Portugol.

2.2.1 - Descrio Narrativa

17

Nesta forma de representao os algoritmos so expressos diretamente em linguagem natural. exemplo, tm-se os algoritmos seguintes:

Como

Receita de bolo: Misture os ingredientes Unte a forma com manteiga Despeje a mistura na forma Se houver coco ralado ento despeje sobre a mistura Leve a forma ao forno Enquanto no corar deixe a forma no forno Retire do forno Deixe esfriar

Troca de um pneu furado: Afrouxar ligeiramente as porcas Suspender o carro Retirar as porcas e o pneu Colocar o pneu reserva Apertar as porcas Abaixar o carro Dar o aperto final nas porcas

Clculo da mdia de um aluno: Obter as notas da primeira e da segunda provas Calcular a mdia aritmtica entre as duas Se a mdia for maior que 7, o aluno foi aprovado, seno ele foi reprovado

Esta representao pouco usada na prtica porque o uso da linguagem natural muitas vezes d oportunidade a ms interpretaes, ambigidades e imprecises. Por exemplo, a instruo "afrouxar ligeiramente as porcas" no algoritmo da troca de pneus est sujeita a interpretaes diferentes por pessoas distintas. Uma instruo mais precisa seria: 'afrouxar a porca, girando-a de 30o no sentido anti-horrio.

2.2.2 - Fluxograma Convencional


uma representao grfica de algoritmos onde formas geomtricas diferentes implicam aes (instrues, comandos) distintos. Tal propriedade facilita o entendimento das idias contidas nos algoritmos e justifica sua popularidade. Esta forma aproximadamente intermediria descrio narrativa e ao pseudocdigo (subitem seguinte), pois mais precisa que a primeira e, no entanto, no se preocupa com detalhes de implementao do programa, como o tipo das variveis usadas (veremos adiante).

18

H vrios padres que definem as formas geomtricas das figuras que devem ser usadas para representar cada um dos diversos tipos de instrues; contudo, nenhum deles se sobressai com relao aos demais no que diz respeito aceitao por parte dos usurios. Uma notao simplificada de fluxogramas a seguinte:

= Incio e final do fluxograma

= Operao de entrada de dados

= Operao de sada de dados

= Operao de atribuio e chamada ou retomo de subalgoritmo

= deciso

De modo geral, um fluxograma se resume a um nico smbolo inicial, por onde a execuo do algoritmo comea, e um ou mais smbolos finais, que so pontos onde a execuo do algoritmo se encerra. Partindo do smbolo inicial, h sempre um nico caminho orientado a ser seguido, representando a existncia de uma nica seqncia de execuo das instrues. Isto pode ser melhor visualizado pelo fato de que, apesar de vrios caminhos poderem convergir para uma mesma figura do diagrama, h sempre um nico caminho saindo desta. Excees a esta regra so os smbolos finais, dos quais no h nenhum fluxo saindo, e os smbolos de deciso, de onde pode haver mais de um caminho de sada (usualmente dois caminhos), representando uma bifurcao no fluxo.

A figura abaixo mostra a representao do algoritmo de clculo da mdia de um aluno sob a forma de um fluxograma.

19

INCIO

N1, N2

Mdia <= (N1 + N2) / 2

Mdia > 7

.V.

"Aprovado"

.F.

"Reprovado"

FIM

2.2.3 - Pseudocdigo
Esta forma de representao de algoritmos rica em detalhes, como a definio dos tipos das variveis usadas no algoritmo e, por assemelhar-se bastante forma em que os programas so escritos, encontra muita aceitao. Na verdade, esta representao suficientemente geral para permitir que a traduo de um algoritmo nela representado para uma linguagem de programao especfica seja praticamente direta. A forma geral da representao de um algoritmo na forma de pseudocdigo a seguinte: Bibliotecas <declarao_de_variveis> //Variveis globais <subalgoritmos> Nome-do-algoritmo() Incio <declarao_de_variveis> //Variveis Locais <corpo_do_algoritmo> Fim. onde: Bibliotecas so funes escritas pelos fabricantes do compilador e j esto pr-compiladas.

20

<Nome_do_algoritmo> um nome simblico dado ao algoritmo com a finalidade de distingui-lo dos demais. <declarao-de-variveis> consiste em uma poro opcional onde so declaradas as variveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos com variveis locais. <subalgoritmos> consiste de uma poro opcional do pseudocdigo onde so definidos os subalgoritmos (veremos adiante). Incio e Fim so respectivamente as palavras que delimitam o incio e o trmino do conjunto de instrues do corpo do algoritmo.

2.3 - SOLUO DE PROBLEMAS ATRAVS DO COMPUTADOR HIPOTTICO


Como exemplo, abaixo temos a representao do algoritmo do clculo da mdia de um aluno, na forma de um pseudocdigo. As expresses, operadores e instrues, bem como a forma correta de coloc-las (sintaxe), sero vistas na unidade 4. Mdia () Incio Real Nl, N2, Mdia; Leia (%R, &N1); Leia (%R, &N2); Mdia (N1 + N2) / 2; Se (Mdia > 7) Ento Escreva ("Aprovado"); Seno Escreva ("Reprovado"); Fim

2.4 - ERROS
Quando se fala em erro em um algoritmo ou programa porque as instrues no esto numa seqncia correta ou ainda, por tratar de informaes que no existam ou que existam mas no so do tipo correto. Os erros so ocorrncias comuns que voc dever permanentemente estar preocupado, no s pela sua ocorrncia mas, tambm, pela resoluo da mesma. Os tipos de erros mais comuns que ocorrem num programa so, geralmente, erros de sintaxe e erros de lgica. Analisaremos esses tipos atravs do exemplo anterior. Mdia() Real Nl, N2, Mdia; Mdia (N1 + N2) / 2; Leia (%R, &N1); Leia (%R, n2); Se (Mdia < 7) Ento Escreva ("Aprovado"); Seno Escreva ("Reprovado"); Fim Perceba que algumas instrues foram alteradas para simular erros, vamos relacion-los: As linhas 3, 4 e 5 esto invertidas no se pode calcular a mdia sem antes saber quais so as notas.
21

Na linha 4 o primeiro argumento a string de controle de formato , indicando que o dado deve ser um Real, deve se encontrar entre aspas duplas. Na linha 5 temos uma instruo onde o programa pede informaes que sero armazenadas em variveis. Perceba que a varivel n2 no existe. Este tipo de erro bastante comum. O correto seria N2, pois a linguagem C dita como case sensitive, ou seja, ela diferencia maisculas e minsculas. Alm disto o segundo argumento de Leia comea com um e-comercial (&, ampersand, em ingls) chamado em C de operador de endereo. Na linha 6, onde acontece uma comparao lgica, o programa escrever aprovado se a mdia for menor que 7. Na realidade a instruo dever ser mdia > 7, ou seja, se a expresso for verdadeira ento o programa escrever aprovado, caso contrrio (se a mdia for <= 7 ento o programa escrever reprovado. EXERCCIOS: 1. 2. 3. 4. O que algoritmo? Qual a diferena entre algoritmo e programa? Quais so as formas de representao de algoritmos? Descreva-as. Elabore um algoritmo na forma narrativa para descrever os processos desde quando voc acorda at o momento de ir trabalhar ou estudar. Elabore um algoritmo (em todas as representaes) para somar dois nmeros. Descreva o significado de Erros em um programa ou algoritmo. Exemplifique a ocorrncia de um erro do algoritmo anterior. Uma pessoa precisa trocar o pneu furado de um carro. Quais as aes necessrias para realizar essa tarefa e em qual seqncia? Qual a seqncia para se obter a resposta da operao matemtica 5 multiplicado por 6 mais 2, dividido por 3 em uma calculadora simples? Qual a seqncia de aes para se abrir uma porta?

5. 6.

7.

8.

9.

10. Complete os termos faltantes da seqncia: 1, 1, 2, 3, 5, 8, 13, ......, ......, ...... 11. Criar um algoritmo para colocar um carro em movimento. 12. Imagine que uma pessoa decida ir de txi a uma reunio de negcios. Monte um algoritmo com a seqncia de aes para que ela chegue ao prdio onde vai ocorrer a reunio. a) Entrar no prdio da reunio. b) Sair do txi. c) Acenar para que o txi pare. d) Perguntar o preo da corrida. e) Informar o destino ao motorista f) Esperar o txi. g) Pagar a corrida. h) Entrar no txi 13. Monte um algoritmo com a seqncia de aes para fazer uma vitamina com um mamo, uma banana, uma ma, um pouco de leite e acar.

22

14. Monte um algoritmo com as aes para encontrar o nome de Joo Ferreira Neto em uma lista telefnica. 15. Monte um algoritmo com as aes para retirar U$ 100,00 de um caixa automtico de banco. 16. Monte um algoritmo com as aes para fazer uma macarronada com molho de tomate (em lata).

23

UNIDADE 3 - FERRAMENTAS DE PROGRAMAO

3.1 - EDITOR
Um programa de computador nada mais do que um grupo de comandos logicamente dispostos para executarem um determinada tarefa. Esses comandos so gravados em um arquivo-texto que processado ao comando do usurio e passa ento a executar cada um dos comandos que l esto gravados.

3.2 - INTERPRETADOR
O interpretador considerado um tradutor que gera cdigo-objeto. A partir de um programa-fonte, escrito em linguagem de alto nvel, o interpretador, no momento da execuo do programa, traduz cada instruo e a executa em seguida. A maior desvantagem da utilizao de interpretadores o tempo gasto na traduo das instrues de um programa toda vez que este for executado, j que no existe a gerao de um cdigo executvel. A vantagem permitir a implementao de tipos de dados dinmicos, ou seja, que podem mudar de tipo durante a execuo do programa, aumentando, assim, sua flexibilidade. Algumas linguagens tipicamente interpretadas so o Basic, dbase e APL.

3.3 - COMPILADOR
O compilador o utilitrio responsvel por gerar, a partir de um programa escrito em uma linguagem de alto nvel, um programa em linguagem de mquina no executvel (mdulo-objeto).

Linguagem de Alto Nvel

Compilador

Mdulo-objeto

As linguagens de alto nvel, corno Pascal, Fortran, Cobol, no tm nenhuma relao direta com a mquina, ficando essa preocupao exclusivamente com o compilador. Os programadores de alto nvel tm, apenas, que se preocupar com o desenvolvimento de suas aplicaes, no tendo que se envolver com detalhes sobre a arquitetura do processador. Assim, os programas-fonte podem ser transportados entre computadores de diversos fabricantes, desde que existam regras de definio para a linguagem. Isso permite o desenvolvimento de aplicaes independentes do equipamento.

O compilador converte um programa escrito em linguagem de alto nvel para um programa escrito em linguagem objeto (mdulo objeto).

24

Um compilador um utilitrio que opera de modo integrado aos componentes do sistema de programao disponveis, sob a superviso do sistema operacional. Podemos visualizar, ento, o compilador como uma interface entre o sistema operacional e o usurio, de maneira que possvel acessar diversos servios do sistema sem a necessidade da utilizao de linguagem de controle ou de outros utilitrios.

3.4 - LINK EDIO


O linker (ligador), tambm chamado de linkage editor (editor de ligao), o utilitrio responsvel por gerar, a partir de um ou mais mdulos-objeto, um nico programa executvel (Figura). Suas funes bsicas so resolver todas as referncias simblicas existentes entre os mdulos e reservar memria para a execuo do programa.

Mdulo-objeto

Mdulo-objeto

Linker

Programa Executvel

Mdulo-objeto

Para resolver todas as referncias a smbolos, o linker tambm pode pesquisar em bibliotecas do sistema ou do prprio usurio. Bibliotecas so arquivos que contm diversos mdulos-objeto e/ou definies de smbolos. Outra funo importante do linker determinar uma regio de memria na qual o programa ser carregado para ser executado. Esta operao denominada relocao. Em sistemas operacionais antigos, a relocao era realizada somente uma vez, na etapa de linkedio. Todos os endereos simblicos do programa so traduzidos para endereos fsicos (binding), e o programa executvel gerado, podendo ser carregado a partir de uma posio prefixada na memria (cdigo absoluto). Nesse tipo de relocao, o programa poder ser carregado, apenas, a partir de uma nica posio na memria.

3.5 - DEPURADOR DE PROGRAMA


O desenvolvimento de programas est sujeito a erros de lgica, independente de metodologias utilizadas pelo programador. A depurao um dos estgios desse desenvolvimento, e a utilizao de ferramentas adequadas essencial para acelerar o processo de correo dos programas. O depurador (debugger) o utilitrio que permite ao usurio controlar toda a execuo de um programa a fim de detectar erros na sua estrutura. Este utilitrio oferece ao usurio recursos como: acompanhar a execuo de um programa instruo por instruo; possibilitar a alterao e visualizao do contedo de variveis;

25

implementar pontos de parada dentro do programa (breakpoint), de forma que, durante a execuo, o programa pare nesses pontos; especificar que, toda vez que o contedo de uma varivel for modificado, o programa envie uma mensagem (watchpoint).

3.6 - AMBIENTE INTEGRADO


Um computador, visto, somente, como um gabinete composto de circuitos eletrnicos, cabos e fontes de alimentao (hardware), no tem nenhuma utilidade. atravs de programas (software) que o computador consegue armazenar dados em discos, imprimir relatrios, gerar grficos, realizar clculos entre outras funes. O hardware o responsvel pela execuo das instrues de um programa, com a finalidade de se realizar alguma tarefa. Uma operao efetuada pelo software pode ser implementada em hardware, enquanto uma instruo executada pelo hardware pode ser simulada via software. Tanto o hardware quanto o software so logicamente equivalentes, se interagindo de uma forma nica para o usurio. O surgimento do sistema operacional, tornou a interao entre o usurio e computador mais simples, confivel e eficiente. A partir desse acontecimento, no existia mais necessidade de o programador se envolver com a complexidade do hardware para poder trabalhar; ou seja, a parte fsica do computador tornou-se transparente para o usurio. atravs do sistema operacional que futuros programadores (como voc) perceber a aplicao da integridade do sistema computacional. Voc poder desenvolver um programa e interpret-lo ou ainda, dependendo da linguagem, poder compilar, linkar e executar o programa.

3.7 - BIBLIOTECAS
Durante o desenvolvimento de programas, suas verses codificadas podem ser mantidas numa biblioteca de declaraes-fonte. O ponto principal compreender como as coisas acontecem. Tendo-se o conhecimento dos conceitos subjacentes, relativamente fcil entender como criar ou obter acesso s bibliotecas em quase todos os sistemas.

Bibliotecas so um conjunto de sub-rotinas (programas ou funes) que podem ser utilizados em qualquer programa.

O uso de bibliotecas dependem da linguagem. O FORTRAN, por exemplo, suporta algumas sub-rotinas cientficas. O programador que quiser usar uma dessas sub-rotinas cientficas deve especificar com clareza ao linkage editor onde a biblioteca de sub-rotinas pode ser encontrada. EXERCCIOS: 1. 2. 3. 4. Para que serve um editor? O que , e como funciona um interpretador? O que , e como funciona um compilador? O que um linker e quais suas funes?

26

5. 6.

O que um depurador de programas e quais so seus recursos ? O que so bibliotecas e qual a sua principal vantagem?

27

UNIDADE 4 - INTRODUO LINGUAGEM DE PROGRAMAO

4.1 - TIPOS DE DADOS PRIMITIVOS


Todo o trabalho realizado por um computador baseado na manipulao das informaes contidas em sua memria. Grosso modo, estas informaes podero ser classificadas em dois tipos: As instrues, que comandam o funcionamento da mquina e determinam a maneira como devem ser tratados os dados. As instrues so especficas para cada modelo de computador, pois so funo do tipo particular de processador utilizado em sua implementao. Os dados propriamente ditos, que correspondem poro das informaes a serem processadas pelo computador.

O objetivo deste captulo justamente o de classificar os dados de acordo com o tipo de informao contida neles. A classificao apresentada no se aplica a nenhuma linguagem de programao especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria das linguagens. Tornando ao aspecto computacional, os dados numricos representveis num computador so divididos em apenas duas classes: os inteiros e os reais.

4.1.1 - Dados Numricos Inteiros


Os nmeros inteiros so aqueles que no possuem componentes decimais ou fracionrios, podendo ser positivos ou negativos. Como exemplo de nmeros inteiros temos: 24 - nmero inteiro positivo 0 - nmero inteiro -12- nmero inteiro negativo

4.1.2 - Dados Numricos Reais


Os dados de tipo real so aqueles que podem possuir componentes decimais ou fracionrios, e podem tambm ser positivos ou negativos. Exemplos de dados do tipo real: 24.01 144. -l3.3 0.0 0. - nmero real positivo com duas casas decimais - nmero real positivo com zero casas decimais - nmero real negativo com uma casa decimal - nmero real com uma casa decimal - nmero real com zero casas decimais

Observe que h uma diferena entre '0', que um dado do tipo inteiro, e '0.' (ou '0.0') que um dado do tipo real. Portanto, a simples existncia do ponto decimal serve para diferenciar um dado numrico do tipo inteiro de um do tipo real.
28

4.1.3 - Dados Literais


O tipo de dados literal constitudo por uma seqncia de caracteres contendo letras, dgitos e/ou smbolos especiais. Este tipo de dados tambm muitas vezes chamado de alfanumrico, cadeia (ou cordo) de caracteres, ou ainda, do ingls, STRING. Usualmente, os dados literais so representados nos algoritmos pela coleo de caracteres, delimitada em seu incio e trmino com o caractere aspas (). Diz-se que o dado do tipo literal possui um comprimento dado pelo nmero de caracteres nele contido. Exemplos de dados do tipo literal: QUAL ? quaL ?!$ AbCdefGHi l-2+3= 0 -literal de comprimento 6 -literal de comprimento l -literal de comprimento 8 -literal de comprimento 9 -literal de comprimento 6 -literal de comprimento l

Note que, por exemplo, 1.2 representa um dado do tipo literal de comprimento 3, diferindo de 1.2 que um dado do tipo real. 4.1.4 - Dados Lgicos Na linguagem C no existem dados lgicos, pois nesta linguagem, qualquer valor diferente de 0 considerado verdadeiro. Portanto, este tpico consta apenas a carter de informao, pois os dados que aqui se encontram (neste tpico) , baseiam-se na linguagem Pascal. A existncia deste tipo de dado , de certo modo, um reflexo da maneira como os computadores funcionam. Muitas vezes, estes tipos de dados so chamados de booleanos, devido significativa contribuio de BOOLE rea da lgica matemtica. O tipo de dados lgico usado para representar dois nicos valores lgicos possveis: verdadeiro e falso. comum encontrar-se em outras referncias outros tipos de pares de valores lgicos como sim/no, 1/0, true/false. Nos algoritmos apresentados neste texto os valores lgicos sero delimitados pelo caractere ponto(.). Exemplo: .V. - valor lgico verdadeiro .F. - valor lgico falso

29

Exerccio Proposto

1.

Classifique os dados especificados abaixo de acordo com seu tipo, assinalando com I os dados do tipo inteiro, com R os reais, com L os literais, com B os lgicos (booleanos), e com N aqueles para os quais no possvel definir a priori um tipo de dado. ( ( ( ( ( ( ( ( )0 )1 ) 0.0 ) 0. ) -1 ) -32 ) +36 ) +32. ( ( ( ( ( ( ( ( ) -0.0001 ) +0.05 ) +3257 ) a ) +3257 ) +3257. ) -0.0 ) .F. ( ( ( ( ( ( ( ( ) -0.0 ) .V. ) V ) abc )F ) 22 ) V ) .F.

2.

Identifique de que tipo so as constantes a seguir: a) 435867 b) RODOLFO c) 8725 d) 0.213 e) .F. f) .V. g) Limo h) 23/12/03 i) 0.5 j) 304958 k) 123456 Indique o(s) tipo(s) de constante(s) que pode(m) ser utilizado(s) para representar: a) o nome de um pas; b) o Registro Geral (RG) de identificao de uma pessoa; c) o CNPJ de uma empresa; d) se uma pessoa ou no maior de idade (tem mais de 18 anos); e) a idade de uma pessoa; f) o endereo de uma pessoa.

3.

4.1.5 - Conceito e Utilidade de Variveis


Os diversos tipos de dados so armazenadas nas memrias dos computadores. Para acessar individualmente cada uma destas informaes, em princpio, seria necessrio saber o tipo de dado desta informao e a posio inicial deste conjunto de bytes na memria. Percebe-se que esta sistemtica de acesso a informaes na memria bastante ilegvel e difcil de se trabalhar. Para contornar esta situao criou-se o conceito de varivel, que uma entidade destinada a guardar uma informao. Basicamente, uma varivel possui trs atributos: um nome, um tipo de dado associado mesma e a informao por ela guardada. Toda varivel possui um nome que tem a funo de diferenci-la das demais. programao estabelece suas prprias regras de formao de nomes de variveis. Cada linguagem de

30

Adotaremos neste texto as seguintes regras: - um nome de varivel deve necessariamente comear com uma letra; - um nome de varivel no deve conter nenhum smbolo especial, exceto o underline(_). Exemplos: SALRIO 1ANO ANO1 A CASA SAL/HORA SAL_HORA _DESCONTO -correto -errado (no comeou com uma letra) -correto -errado (contm o caractere branco) -errado (contm o caractere /) -correto -errado (no comeou com uma letra)

Obviamente interessante adotar nomes de variveis relacionados s funes que sero exercidas pelas mesmas dentro de um programa. Exemplificando, para guardar o salrio de um funcionrio de uma empresa num programa de processamento de, folha de pagamento, seria interessante utilizar uma varivel chamada SALARIO. Outro atributo caracterstico de uma varivel o tipo de dado que ela pode armazenar. Este atributo define a natureza das informaes contidas na varivel. Por ltimo, h o atributo informao, que nada mais do que a informao til contida na varivel. Uma vez definidos, os atributos nome e tipo de dado de uma varivel no podem ser alterados e assim permanecem durante toda a sua existncia, desde que o programa que a utiliza no seja modificado. Por outro lado, o atributo informao est constantemente sujeito a mudanas, de acordo com o fluxo de execuo do programa. Por exemplo, se definirmos que uma determinada varivel chamada SALRIO e destinada a guardar nmeros reais, possvel que seu contedo seja, num dado instante, igual a 1.500,00 e posteriormente modificado para 3.152,19, de acordo com o programa executado. Em resumo, o conceito de varivel foi criado para facilitar a vida dos programadores, permitindo acessar informaes na memria dos computadores por meio de um nome, em vez do endereo de uma clula de memria.

4.1.6 - Definio de Variveis em Algoritmos


Todas as variveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessrio para permitir que o compilador reserve um espao na memria para as mesmas. Algumas linguagens de programao (como CLIPPER e FORTRAN) dispensam esta definio, uma vez que o espao na memria reservado medida que novas variveis so encontradas no decorrer do programa. Nos algoritmos apresentados neste texto ser adotada a seguinte conveno: todas as variveis utilizadas em algoritmos sero definidas no inicio do mesmo, por meio de um comando de uma das formas seguintes: <tipo_da_varivel> <nome_de_varivel>

numa mesma linha podero ser definidas uma ou mais variveis do mesmo tipo; Para tal, deve-se separar os nomes das mesmas por vrgulas; variveis de tipos diferentes devem ser declaradas em linhas diferentes; somente os 31 primeiros caracteres do nome da varivel so reconhecidos.
31

A forma de utilizao deste comando ficar mais clara quando da utilizao da representao de algoritmos em linguagem estruturada (pseudocdigo). Esta conveno vlida para a representao de algoritmos na forma de pseudocdigo. Em termos de fluxograma, no usual adotar-se qualquer forma de definio de variveis. Exemplo de definio de variveis: Literal Inteiro Real NOME[10]; IDADE; SALRIO, DESCONTO;

No exemplo acima foram declaradas quatro variveis: - a varivel NOME, capaz de armazenar dados literais de comprimento 10 (dez caracteres); - a varivel IDADE, capaz de armazenar um nmero inteiro; - as variveis SALARIO e DESCONTO, capazes de armazenar um nmero real; Exerccios Propostos 1. Na lista seguinte, assinale com V os nomes de variveis vlidos e com I os invlidos. ( ( ( ( ( ( 2. ) abc ) 123a )_ ) Al23 ) al23 ) AB CDE ( ( ( ( ( ( ) 3abc ) a?B ) Aa ) _1 ) _al23 ) etc... ( ( ( ( ( ( )a ) acdl )1 ) AOl23 ) b3l2 ) guarda-chuva

Declare as variveis para o algoritmo de cadastramento de alunos, cujos dados so: nome, sexo, endereo, cidade, estado, CEP, telefone, data de nascimento, RG, nome do pai, nome da me e grau de escolaridade. Utilize pseudocdigo para representar as declaraes. Verifique se os identificadores a seguir so vlidos. Se no forem, explique por qu. a. NOME-DO-ALUNO b. $ c. DINHEIRO d. DATA/DE/NASCIMENTO e. NOME2 f. 2APESSOA g. MAIOR_DE_IDADE? h. NOME_DA_PESSOA i. END j. %JUROS k. M239083 Declare as variveis para os algoritmos dos cadastros a seguir. a. Passagens areas b. Fitas de vdeo de uma locadora c. Livros de uma biblioteca d. Carros de uma concessionria e. CDs de uma coleo de msica f. Disciplinas de uma escola g. Clientes de uma loja h. Roupas de uma loja
32

3.

4.

4.1.7 - Expresses
O conceito de expresso em termos computacionais est intimamente ligado ao conceito de expresso (ou frmula) matemtica, onde um conjunto de variveis e constantes numricas relacionam-se por meio de operadores aritmticos compondo urna frmula que, uma vez avaliada, resulta num valor.
H

Figura: Tringulo de base (B) e altura (H). Por exemplo, a frmula de clculo da rea do tringulo da Figura dada por: REA = 0.5 x B x H Esta frmula utiliza trs variveis: B e H, que contm as dimenses do tringulo, e REA, onde guardado o valor calculado (resultado da avaliao da expresso). H, tambm, uma constante (0.5) e o operador de multiplicao (x), que aparece duas vezes na expresso. O conceito de expresso aplicado computao assume uma conotao mais ampla: uma expresso uma combinao de variveis, constantes e operadores, e que, uma vez avaliada, resulta num valor. Expresso uma combinao de variveis, constantes e operadores.

4.2 - OPERADORES ARITMTICOS


Operadores so elementos funcionais que atuam sobre operandos e produzem um determinado resultado. Por exemplo, a expresso 3 + 2 relaciona dois operandos (os nmeros 3 e 2) por meio do operador (+) que representa a operao de adio. De acordo com o nmero de operandos sobre os quais os operadores atuam, os ltimos podem ser classificados em: Binrios, quando atuam sobre dois operandos. Ex.: os operadores das operaes aritmticas bsicas (soma, subtrao, multiplicao e diviso); Unrios, quando atuam sobre um nico operando. Ex.: o sinal de na frente de um nmero, cuja funo inverter seu sinal.

Outra classificao dos operadores feita considerando-se o tipo de dado de seus operandos e do valor resultante de sua avaliao. Segundo esta classificao, os operadores dividem-se em aritmticos, lgicos e relacionais. Esta diviso est diretamente relacionada com o tipo de expresso onde aparecem os operadores. Um caso especial o dos operadores relacionais, que permitem comparar pares de operandos de tipos de dados iguais, resultando sempre num valor lgico. Mais adiante sero apresentados formalmente os operadores dos diversos tipos acima relacionados.
33

4.2.1 - OPERADORES ARITMTICOS


Os operadores aritmticos relacionados s operaes aritmticas bsicas esto resumidos na Tabela abaixo.

Operador + * / + -

Tipo Binrio Binrio Binrio Binrio Unrio Unrio

Operao Adio Subtrao Multiplicao Diviso Manut de sinal Inverso de sinal

Prioridade 3 3 2 2 1 1

A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expresso. Este assunto ser tratado com maior profundidade numa seo posterior. O caractere (*) adotado na maioria das linguagens de programao para representar a operao de multiplicao, ao invs do caractere (x), devido possibilidade da ocorrncia do mesmo no nome de variveis. Pela mesma razo, o smbolo (**) adotado para representar a operao de exponenciao. Algumas linguagens de programao adotam o smbolo (^) (circunflexo) para esta finalidade, mas isto pouco freqente. As variveis usadas em expresses aritmticas podem somente ser do tipo inteiro ou real. Se ao menos uma das variveis da expresso aritmtica for do tipo real, ento o valor resultante da avaliao da expresso necessariamente do tipo real. Nos exemplos seguintes, assumiremos que: - A, B e C so variveis do tipo inteiro; - X, Y e Z so variveis do tipo real. Exemplos: 1) A+B*C 2) A+B+Y 3) A/B 4) X/Y - expresso de resultado inteiro - expresso de resultado real - expresso de resultado inteiro - expresso de resultado real

O leitor deve estranhar o fato de no terceiro exemplo ser apresentada uma expresso onde se dividem dois nmeros inteiros e se obtm como resultado um valor inteiro. Obviamente, o resultado da diviso entre dois nmeros inteiros no necessariamente inteiro. Na verdade, a operao representada no terceiro item a diviso inteira, onde o resto da diviso desprezado.

34

4.3 - OPERADORES LGICOS


Expresses lgicas so aquelas que utilizam operadores lgicos e consequentemente resulta em um valor lgico (.V. ou .F.). Os operadores lgicos e suas relaes de precedncia so mostrados na Tabela abaixo.

Operador .OU. .E. .NO.

Tipo Binrio Binrio Unrio

Operao Disjuno Conjuno Negao

Prioridade 3 2 1

Para exemplificar o uso de operadores lgicos, a Tabela abaixo apresenta duas variveis lgicas A e B. Uma vez que cada varivel lgica possui somente dois valores possveis, ento h exatamente quatro combinaes para estes valores, razo pela qual a tabela tem quatro linhas. As diversas colunas contm os resultados das operaes lgicas sobre as combinaes possveis dos valores das variveis A e B.

A .V. .V. .F. .F.

B .V. .F. .V. .F.

A .ou. B .V. .V. .V. .F.

A .e. B .V. .F. .F. .F.

4.4 - OPERADORES RELACIONAIS


Estes operadores so somente usados quando se deseja efetuar comparaes. Comparaes s podem ser feitas entre objetos de mesma natureza, isto , variveis do mesmo tipo de dado. O resultado de uma comparao sempre um valor lgico. O uso de operadores relacionais possibilita o aparecimento em expresses lgicas de variveis de outros tipos de dados que no o lgico. Abaixo mostrada uma tabela contendo os operadores relacionais.

Operador == !=

Comparao igual diferente

35

< <= > >= !

menor menor ou igual maior maior ou igual No

Exemplo: sejam A e B variveis lgicas, X e Y variveis reais, e R, S e T variveis literais, com os respectivos valores: A=.V., B =.F., X = 2.5, Y = 5.0, R = JOS, S = JOO e T =JOOZINHO A tabela seguinte contm algumas expresses lgicas contendo estas variveis: Expresso A. OU. B A .E. B .NO. A X=Y X = (Y/2) R=S S=T R!=S R>S S>T ((A.OU.B).OU.(X>Y).OU.(S>T)) Resultado .V. .F. .F. .F. .V. .F. .F. .V. .F. .F. .V.

Algumas Normas para utilizao de operadores nas expresses Expresses que apresentam apenas um nico operador podem ser avaliadas diretamente. No entanto, medida que as mesmas vo-se tornando mais complexas com o aparecimento de mais de um operando numa mesma expresso, necessria a avaliao da mesma passo a passo, tomando um operador por vez. A seqncia destes passos definida de acordo com o formato geral da expresso, considerando-se a prioridade (precedncia) de avaliao de seus operadores e a existncia ou no de parnteses na mesma. As seguintes regras so essenciais para a correta avaliao de expresses: 1. Deve-se observar a prioridade dos operadores, conforme mostrado nas Tabelas: operadores de menor prioridade devem ser avaliados primeiro. Se houver empate com relao precedncia, ento a avaliao se faz considerando-se a expresso da esquerda para a direita. Os parnteses usados em expresses tm o poder de roubar a prioridade dos demais operadores, forando a avaliao da subexpresso em seu interior. Entre os quatro grupos de operadores existentes, a saber, aritmtico, lgico, literal e relacional, h uma certa prioridade de avaliao: os aritmticos e literais devem ser avaliados primeiro; a seguir, so avaliadas as subexpresses com operadores relacionais e, por ltimo, os operadores lgicos so avaliados.

2. 3.

36

Expresses Literais Expresses literais so aquelas cujo resultado da avaliao um valor literal. Este tipo de expresso bem menos freqente que os anteriores. Os tipos de operadores existentes variam de uma linguagem de programao para outra, no havendo uma padronizao. Para que o assunto no passe em branco, considere-se como exemplo a operao de concatenao de strings: toma-se duas strings e acrescenta-se (concatena-se) a segunda delas ao final da primeira. Em algumas linguagens esta operao representada Pelo smbolo (operador) (+). Por exemplo, a concatenao das strings REFRIGERA e DOR representada por REFRIGERA + DOR e o resultado de sua avaliao REFRIGERADOR. Exemplos: suponha que X, Y e Z so variveis reais, e A e B variveis lgicas, com os respectivos valores: X = 2.0, Y = 3.0, Z = 0.5, A = .V. e B = .F. Considere as seguintes expresses e indique o resultado de suas avaliaes: 1) X * Y - Z 2) X * (Y - Z) 3) X + Y * Z 4) X + (Y * Z) 5) (X + Y) * Z 6) B .E. A .OU. X != Y/2 7) B .E. (A .OU. X != Y/2) Exerccios Propostos 1. Dada a declarao de variveis Inteiro Real Literal A, B, C; X, Y, Z; NOME[20], RUA[20]; = = = = = = =

Classifique as expresses seguintes de acordo com o tipo de dado do resultado de sua avaliao, em I (inteiro), R (real), L (literal) ou N (quando no for possvel defini-lo): ( ( ( ( ( )A + B + C )A + B + Z )NOME + RUA )X + Y / Z )A + Z / A ( ( ( ( ( )A > B )A > Y )X + Z / A )A + X / Z )A + B / C

2. Sendo: A = B = C = .V. e D = .F. a) (A E B) b) (A E B) OU (C) c) (A E B) E B d) (A E B) E (B OU C) e) (A E B) E (B OU D) f) (A E B) E ((A OU B) E (D OU A) E (D E A)) 3. O mesmo que o n 2 sendo, A = B = .F. a) b) c) e C = D = .V. d)

e)

f)

37

4.

O mesmo que o n 2 sendo, A = D = .F. a) b) c)

B = C = .V. d)

e)

f)

5.

Sendo A = B = C = .V. e D = .F. a) !(A E B) b) (A E B) OU (!C) c) !(A OU D) E (B) d) (A OU B) E (!D) e) (A OU B) E (!(B E D)) f) ((A E B) E C) E (!(A OU B) E (!D OU A) E (D E !A)) O mesmo que o n 5 sendo, A = B = .F. a) b) c) O mesmo que o n 5 sendo, A = D = .F. a) b) c) Sendo A = 20, B = 30, C = .V. e D = .F. a) (A = = B) OU (C E D) b) (A = = B) E (C E D) c) (!(A = = B)) OU (C E D) d) (!(A = = B)) OU (!C E D) e) (A > =B) f) (A = = B) g) (A < B) h) (A < = B) E (C E D) i) (A ! = B) e C = D = .V. d) C = B = .V. d)

6.

e)

f)

7.

e)

f)

8.

38

UNIDADE 5 - ESTRUTURAS DE CONTROLE

5.1 - ESTRUTURAS SEQNCIAIS


As estruturas seqncias so todas as instrues de um algoritmo ou programa para realizar determinadas tarefa. Na realidade, uma estrutura seqencial um conjunto de instrues ordenadas logicamente. Na estrutura seqencial os comandos de um algoritmo so executados numa seqncia pr-estabelecida. Cada comando executado somente aps o trmino do comando anterior. Em termos de fluxogramas, a estrutura seqencial caracterizada por um nico fluxo de execuo (um nico caminho orientado) no diagrama. Em pseudocdigos, a estrutura seqencial caracteriza-se por um conjunto de comandos dispostos ordenadamente. Como exemplos de aplicao desta estrutura de controle tem-se os algoritmos do captulo anterior, onde no h estruturas de deciso ou de repetio.

Uma estrutura seqencial aquela em que os comandos vo sendo executados numa seqncia prestabelecida, um aps o outro.

A Figura abaixo exemplifica um trecho seqencial de um algoritmo.

<Comando 1>
(a)

<Comando 2>

<Comando 3>

( b ) <Comando 1>; <Comando 2>; <Comando 3>; Figura: Trecho seqencial de um algoritmo: ( a ) fluxograma; ( b ) pseudoc6digo.

Para aprimorar nossos conhecimentos afim de montarmos algoritmos estruturados logicamente, aprofundaremos nos conceitos de instrues primitivas e suas derivadas, ou seja, sabermos o que significa e como se faz cada instruo. Tais conceitos sero de fundamental importncia para elaborao de nossos futuros programas.
39

5.1.1 - Instrues Primitivas


Como o prprio nome diz, ou instrues primitivas so os comandos bsicos que efetuam tarefas essenciais para a operao dos computadores, como entrada e sada de dados (comunicao com o usurio e com os dispositivos perifricos), e movimentao dos mesmos na memria. Estes tipos de instruo esto presentes na absoluta maioria das linguagens de programao. De fato, um programa que no utiliza nenhuma instruo primitiva - como as que sero definidas neste captulo - incapaz de se comunicar com o mundo exterior e, portanto, no tem utilidade alguma. Antes de passar descrio das instrues primitivas, necessria a definio de alguns termos que sero utilizados mais frente. Alm dos dispositivos de entrada e de sada (visto no captulo 1) temos ainda: sintaxe a forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor de programas. A violao das regras sintticas considerada um erro sujeito pena do noreconhecimento do comando por parte do tradutor; semntica o significado, ou seja, o conjunto de aes que sero exercidas pelo computador durante a execuo do referido comando.

Daqui em diante, todos os comandos novos sero apresentados por meio de sua sintaxe e sua semntica, isto , a forma como devem ser escritos e a(s) ao(es) que executam.

5.1.2 - Instruo Primitiva de Atribuio


A instruo primitiva de atribuio, ou simplesmente atribuio, a principal maneira de se armazenar uma informao numa varivel.

Sua sintaxe :

<nome_de_varivel>

<expresso>

No fluxograma, os comandos de atribuio so representados como na Figura.

< Varivel >

< Expresso >

O modo de funcionamento (semntica) de uma atribuio consiste : 1. 2. na avaliao da expresso, e no armazenamento do valor resultante na posio de memria correspondente varivel que aparece esquerda do comando.

40

A expresso presente no comando de atribuio pode ser de qualquer tipo de varivel. Uma implicao bastante sria, para qual a ateno deve ser dirigida, a necessidade da compatibilidade entre o tipo de dado resultante da avaliao da expresso e o tipo de dado da varivel, no sentido em que esta deve ser capaz de armazenar o resultado da expresso. Mais explicitamente, se uma expresso resulta num valor lgico, ento a varivel deve ser tambm do tipo lgico. O mesmo acontece no caso de dados literais e reais. Uma exceo o caso em que a varivel do tipo real e a expresso resulta num valor inteiro. Nesta situao, o resultado (dado do tipo inteiro) convertido para o tipo real e posteriormente armazenado na varivel. A Figura abaixo mostra um exemplo de algoritmo onde algumas atribuies so feitas: os valores 5.0 e 10 so atribudos s variveis PREO_UNIT e QUANT, respectivamente; posteriormente, o resultado do produto entre as duas anteriores armazenado em PREO_TOT.
Incio

Preo_Unit

5.0

Quant

10

Preo_Tot Preo_Unit * Quant

Fim

(a) (b) EXEMPLO1() { Real Inteiro PREO_UNIT, PREO_TOT; QUANT;

PREO_UNIT 5.0; QUANT 10; PREO_TOT PREO-UNIT * QUANT; } Figura : Exemplo de aplicao de comandos de atribuio: (a) fluxograma; (b) pseudocdigo.

41

5.1.3 - Instruo Primitiva de Sada de Dados


O algoritmo da Figura no prtico, pois, apesar do computador ter calculado um determinado valor ou armazenado o mesmo na varivel PREO_TOT, este valor ficou retido na memria do computador e no foi mostrado ao usurio, o maior interessado no mesmo.

As instrues primitivas de sada de dados so o meio pelo qual informaes contidas na memria dos computadores so colocadas nos dispositivos de sada, para que o usurio possa apreci-las.

H duas sintaxes possveis para esta instruo: Escreva (%<tipo_varivel>, <varivel>); ou Escreva (%<tipo_varivel_1> %<tipo_varivel_2>, <varivel_1>, <varivel_2>); estar na ordem em que aparecerem no comando de sada. ou Escreva (<literal>);

as variveis precisam

Repare que a representao no fluxograma dispensa o uso da palavra reservada Escreva, uma vez que a mesma j est embutida na forma geomtrica da figura. A semntica da instruo primitiva de sada de dados muito simples: os argumentos do comando so enviados para o dispositivo de sada. No caso de uma lista de variveis, o contedo de cada uma delas pesquisado na posio de memria correspondente varivel e depois enviado para o dispositivo de sada. No caso de argumentos do tipo string, estes so enviados diretamente ao referido dispositivo. H, ainda, a possibilidade de se misturar nomes de variveis com literais na lista de um mesmo comando. O efeito obtido bastante til e interessante: a lista lida da esquerda para a direita e cada elemento da mesma tratado separadamente; se um nome de varivel for encontrado, ento a informao da mesma pega da memria e colocada no dispositivo de sada; no caso de um literal, o mesmo escrito diretamente no dispositivo de sada.
Incio

Preo_Unit, Quant

Preo_Tot Preo_Unit * Quant

Preo_Tot

Fim

(a)

42

(b) EXEMPLO2() { Real PREO_UNIT, PREO_TOT; Inteiro QUANT; Leia (%R, &PREO_UNIT); Leia (%I, &QUANT); PREO_TOT PREO-UNIT * QUANT; Escreva (O preo total %.2R, PREO_TOT); }

Figura : Exemplo de aplicao de comandos de entrada, atribuio e sada de dados: (a) fluxograma; (b) pseudocdigo. 5.1.3.1 Constantes de Barra Invertida O C utiliza, para facilitar a tarefa de programar, vrios cdigos chamados cdigos de barra invertida. Estes so caracteres que podem ser usados como qualquer outro. A lista completa dos cdigos de barra invertida dada a seguir. Cdigo \b \f \n \r \t \ \ \0 \\ \v \a \N \xN Significado Retrocesso (back) Alimentao de formulrio (form feed) Nova linha (new line) Retorno de carro (carriage return) Tabulao horizontal (tab) Aspas Apstrofo Nulo (0 em decimal) Barra Invertida Tabulao Vertical Sinal sonoro (beep) Constante octal (N o valor da constante) Constante hexadecimal (N o valor da constante)

5.1.4 - Instruo Primitiva de Entrada de Dados


O algoritmo da figura acima ainda carece de uma melhoria essencial. Toda vez que ele executado, o mesmo valor calculado, j que os valores das variveis PREO_UNIT e QUANT permanecem inalterados. Seria interessante que estes valores pudessem ser fornecidos ao computador pelo usurio do programa toda vez que o programa fosse executado, para que o usurio tivesse um maior controle sobre o valor calculado. A instruo primitiva de entrada de dados foi criada para suprir esta necessidade.

Sua sintaxe :

Leia (%<tipo_variavel>, &<varivel>);

A funo Leia recebe a entrada do dispositivo padro, que normalmente o teclado. Esta funo tem dois argumentos:
43

O primeiro argumento, a string de controle de formato, indica o tipo de dado que deve ser fornecido pelo usurio. Nesse contexto, o % considerado por Leia (e por Escreva) um caractere de escape (como o \) e a combinao %<tipo_varivel> uma seqncia de escape. O segundo argumento de Leia comea com um e-comercial (&, ampersand, em ingls) chamado em C de operador de endereo seguido do nome da varivel. O e-comercial, quando combinado com o nome da varivel, diz ao Leia o local na memria onde a varivel est armazenada. O computador ento armazena o valor informado pelo usurio naquele local.

Da mesma forma que Escreva, daqui em diante Leia ser tratada como uma palavra-reservada e no mais poder ser usada como nome de varivel em algoritmos. A figura anterior mostra como uma instruo de entrada de dados representada em fluxogramas. Esta representao dispensa o uso da palavra-reservada Leia, pelo fato da mesma j estar de certo modo embutida na forma geomtrica da figura. A semntica da instruo de entrada (ou leitura) de dados , de certa forma, inversa da instruo de escrita: os dados so fornecidos ao computador por meio de um dispositivo de entrada e armazenados nas posies de memria das variveis cujos nomes aparecem na lista_de_variveis.

Obs.: Perceba que aps os comandos tem-se um ; (ponto e vrgula) significando o fim do comando. Desta forma, pode-se escrever mais de um comando na mesma linha. Ex.: printf(Entre com o valor: ); scanf(X); Exerccio Resolvido 1. Escreva um algoritmo (fluxograma e pseudocdigo) para calcular a mdia entre dois nmeros quaisquer. Soluo:A idia principal do algoritmo est centrada na expresso matemtica utilizada no clculo da mdia (M) entre dois nmeros, N1 e N2, dada por: M = (N1 + N2) / 2 Para que o valor de M possa ser calculado pelo algoritmo, necessrio que os valores de N1 e N2 tenham sido fornecidos ao mesmo com antecedncia. Portanto, a primeira etapa do algoritmo consiste da obteno (leitura) dos valores de N1 e N2 e armazenamento dos mesmos em posies distintas de memria (variveis). Na seqncia, o valor da mdia deve ser calculado por meio de uma expresso apropriada e atribudo a uma terceira varivel (M). Por fim, deve-se relatar ao usurio o valor calculado por meio de uma instruo primitiva de sada de dados. O fluxograma do algoritmo descrito mostrado a seguir. Note que ele est enriquecido com instrues para informar sua finalidade, os dados que devem ser fornecidos ao usurio e o significado do valor calculado. A transformao do fluxograma em pseudocdigo exige a disponibilidade de algumas informaes adicionais concernentes ao tipo das variveis utilizadas. Como o algoritmo opera apenas com dados numricos, certamente as variveis utilizadas sero do tipo inteiro ou real. Como se deseja calcular a mdia entre dois nmeros quaisquer, ento as variveis N1 e N2 devem ser capazes de armazenar nmeros com ou sem parte fracionria e, portanto, necessrio que estas sejam do tipo real. Como o valor mdio entre dois nmeros reais um nmero que pode ou no ter parte fracionria, ento a varivel M tambm deve ser do tipo real.

44

Incio

"Algoritmo para calcular a mdia entre dois nmeros"

"Digite o primeiro nmero"

N1

"Digite o segundo nmero"

N2

(N1+N2)/2

"O valor da mdia :", M

Fim

De posse dessa informao, pode-se escrever o pseudocdigo do algoritmo em questo, a partir de seu fluxograma.

45

Media() { Real N1, N2, M; Escreva (Algoritmo para calcular a mdia entre dois nmeros); Escreva (Digite o primeiro nmero: ); Leia (%R, &N1); Escreva (Digite o segundo nmero: ); Leia (%R, &N2); M (N1 + N2) / 2; Escreva (O valor da mdia : %R, M); }

Exerccios Propostos Escreva um algoritmo para calcular o valor de y como funo de x, segundo a funo y(x) = 3x + 2, num domnio real. 2. Escreva um algoritmo para calcular o consumo mdio de um automvel (medido em Km/l), dado que so conhecidos a distncia total percorrida e o volume de combustvel consumido para percorr-la (medido em litros). 3. Para as instrues propostas a seguir, expresse um algoritmo que pode ser usado em sua soluo na forma de um fluxograma e pseudocdigo. Ao final da execuo do trecho abaixo, quais os valores de A, B e C? A A B C C A 1; B B+1; B-1; A+3; B-3; C+1; 2; C 1; 1.

A=_______ 4.

B=________

C=_________

O que ser mostrado no vdeo durante a execuo deste trecho de programa? x 1; z 2; a x + z; b x - z; escreva(Valor de A: %R, a); escreva(Valor de A-1: %R, a-1);

5.2 - ESTRUTURAS DE SELEO


Neste tipo de estrutura o fluxo de instrues a ser seguido escolhido em funo do resultado da avaliao de uma ou mais condies.

Uma condio uma expresso lgica.

A classificao das estruturas de deciso feita de acordo com o nmero de condies que devem ser testadas para que se decida qual o caminho a ser seguido. Segundo esta classificao, tm-se dois tipos de estruturas de deciso:
46

5.2.1 Estruturas de Deciso do Tipo Se


Nesta estrutura uma nica condio (expresso lgica) avaliada. Se o resultado desta avaliao for verdadeiro (.V.), ento um determinado conjunto de instrues (comando composto) executado. Caso contrrio, ou seja, quando o resultado da avaliao for falso (.F.), um comando diferente executado. Em termos de fluxogramas, uma construo do tipo Se pode ser encarada como uma bifurcao onde h dois caminhos que podem ser seguidos (Figura abaixo). A execuo do algoritmo prosseguir necessariamente por um deles. Esta escolha feita em funo do resultado da expresso: um dos caminhos rotulado com (.V.) e ser seguido quando a condio for verdadeira; o outro rotulado com (.F.) e ser seguido quando a condio for falsa. A sintaxe da estrutura de deciso do tipo SE : Se (<condio>) { <Comando_composto_l>; } Seno { <Comando_composto_ 2>; }

(a)

Um comando composto um conjunto de zero ou mais comandos (ou instrues) simples, como atribuies e instrues primitivas de entrada ou sada de dados, ou alguma das construes que ainda sero apresentadas neste captulo.

.V.

<Condio>

.F.

<Comando composto 1>

<Comando composto 2>

(b) Figura: Sintaxe da estrutura de deciso Se-Ento-Seno-Fim_se: A semntica desta construo a seguinte: a condio avaliada. Se o resultado for verdadeiro, ento o comando_composto_l executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps o Fim_se. Nos casos em que a condio
47

avaliada como falsa, o comando_composto_2 executado e, ao trmino do mesmo, o fluxo de execuo prossegue pela primeira instruo seguinte ao Fim_se. H casos particulares e muito comuns desta construo, onde o comando composto 2 um conjunto vazio de instrues. Neste caso, a poro relativa ao Seno pode ser omitida, resumindo a sintaxe da construo forma mostrada na Figura seguinte. Se (<condio>) { <Comando_composto_l>; }

.V.

<Condio>

.F. <Comando composto 1>

Figura: Sintaxe da estrutura de deciso Se-Ento-Fim_se A semntica desta construo a seguinte: no caso da condio ser verdadeira, o comando_composto_l executado e, aps seu trmino, o fluxo de execuo prossegue pela prxima instruo aps o Fim_se. Quando a condio falsa, o fluxo de execuo prossegue normalmente pela primeira instruo aps o Fim_se. A Figura seguinte exemplifica o uso da construo Se-Ento-Seno-Fim_se num algoritmo para determinar se uma pessoa maior ou menor de idade. Exemplo() { Inteiro IDADE; Leia (%I,&IDADE); Se (IDADE >= 18) Escreva ("Maior de idade"); Seno Escreva ("Menor de idade"); }

48

Incio

Idade

.V.

Idade>=18

.F.

"Maior de idade"

"Menor de idade"

Fim
Figura: Exemplo de aplicao da estrutura de deciso Se-Ento-Seno-Fim_se. Estruturas Se/Seno aninhadas verificam vrios casos inserindo umas estruturas Se/Seno em outras. Por exemplo, a instruo em pseudocdigo a seguir imprimir A para graus de exame maiores ou iguais a 90, B para graus maiores que ou iguais a 80, C para graus maiores que ou iguais a 70, D para graus maiores que ou iguais a 60 e F para todos os outros graus. Se (grau >= 90) Escreva (A); Seno Se (grau >= 80) Escreva (B); Seno Se (grau >= 70) Escreva (C); Seno Se (grau >= 60) Escreva (D); Seno Escreva (F); Observao: A estrutura se seleo Se deve conter apenas uma instruo em seu corpo. Para incluir vrias instrues no corpo de um Se, coloque o conjunto de instrues entre chaves ( { e } ). Um conjunto de instrues dentro de um par de chaves chamado uma instruo composta.

5.2.2 - Estruturas de Deciso do Tipo Escolha

49

Este tipo de estrutura uma generalizao da estrutura Se, onde somente uma condio era avaliada e dois caminhos podiam ser seguidos. Na estrutura de deciso do tipo Escolha pode haver uma ou mais condies a serem testadas e um comando composto diferente associado a cada uma destas.

As estruturas de deciso permitem escolher qual o caminho a ser seguido num algoritmo em funo de uma ou mais condies.

A sintaxe da construo de Escolha mostrada na Figura a seguir:

<Condio 1> .F. <Condio 2>

.V.

<Comando Composto 1>

.V.

<Comando Composto 2>

.F.

<Condio N> .F. <Comando Composto S>

.V.

<Comando Composto N>

Escolha (<varivel>) { Caso <Valor_1> : <Comando_composto_1>; Pare; Caso <Valor_2> : <Comando_composto_2>; Pare; ..... Caso <Valor_N > : <Comando_composto_N>; Pare; Seno <Comando_composto_S>; } Figura: Sintaxe usada para a condio Escolha. Seu funcionamento o seguinte: ao entrar-se numa construo do tipo Escolha, a Condio_l testada: se for verdadeira, o comando_composto_l executado e, aps seu trmino, o fluxo de execuo prossegue pela primeira instruo aps o final da construo (Fim escolha); se a condio_l for falsa, a condio_2 testada: se esta for verdadeira, o comando_composto_2 executado e, ao seu trmino, a execuo prossegue normalmente pela instruo seguinte ao Fim_escolha ( } ). O mesmo raciocnio estendido a todas as
50

condies da construo. No caso em que todas as condies so avaliadas como falsas, o comando_composto_S (correspondente ao Seno da construo) executado. Um exemplo de aplicao desta construo mostrado a seguir, baseado num algoritmo que verifica se o usurio digitou o nmero 0, 1, 2 ou outro valor. Exemplo() { Inteiro NMERO; Leia (%I,&NMERO); Escolha (NMERO) { Caso 0 : Escreva (Opo escolhida 0); Pare; Caso 1 : Escreva (Opo escolhida 1); Pare; Caso 2 : Escreva (Opo escolhida 2); Pare; Seno Escreva (Opo invlida); } } Um caso particular desta construo aquele em que o comando_composto_S no contm nenhuma instruo. Isto ocorre nas situaes em que no se deseja efetuar nenhuma ao quando todas as condies testadas so falsas. Assim, pode-se dispensar o uso do Seno na construo, corno acontece tambm na construo Se.

5.3 - ESTRUTURAS DE REPETIO


Uma estrutura de repetio permite ao programador especificar que uma ao deve ser repetida enquanto uma determinada condio for verdadeira. Para Enquanto Faa-Enquanto Sabemos o nmero de repeties No sabemos o nmero exato de repeties (FLAG) Quando no sabemos o nmero de repeties (FLAG). Vamos executar o conjunto de instrues dentro da estrutura pelo menos uma vez.

5.3.1 ESTRUTURA PARA


A estrutura de repetio Para manipula automaticamente todos os detalhes da repetio controlada por contador. Sintaxe: Para(<inicializao>;<condio>;<incremento>) { Instruo_1; Instruo_N; } No exemplo de pseudocdigo a seguir, trata-se de um programa para escrever os nmeros de 1 a 10.

51

Exemplo() { Inteiro contador; Para(contador = 1; contador <= 10; contador contador+1) { Escreva(%d, contador); } } O programa funcionada da seguinte maneira. Quando a estrutura Para comea a ser executada, a varivel de controle contador inicializada com o valor 1. A seguir, a seguir a condio de continuio do lao contador <= 10 examinada. Como o valor inicial de contador 1, a condio satisfeita, portanto a instruo Escreva imprime o valor de contador, ou seja, 1. A varivel de controle contador ento incrementada pela expresso contador contador + 1 e o lao comea novamente com seu teste de continuao. Como a varivel de controle agora 2, o valor final no excedido, e o programa realiza a instruo Escreva mais uma vez. O processo continua at que a varivel de controle contador seja incrementada at o seu valor final de 11 isso faz com que o teste de continuao do lao no seja verdadeiro e a repetio termine. O programa continua com a primeira instruo depois da estrutura Para.

5.3.1 ESTRUTURA ENQUANTO


uma estrutura de repetio semelhante ao Para-Faa. A diferena bsica se refere a quando a repetio ir parar. Na estrutura Para-Faa, sabemos a princpio, quando vamos terminar a estrutura de repetio, ou seja, o nmero de repeties conhecido. O valor dado no problema ou lido no teclado antes do incio da repetio. Na estrutura de repetio podemos ter dois casos: a) Laos contados (onde o nmero de repeties conhecido) b) Laos condicionais (onde o nmero de repeties no conhecido a priori) Diferenas bsicas: - A varivel de controle iniciada antes do Enquanto; - A varivel de controle incrementada dentro do Enquanto; Sintaxe: Enquanto (<condio>) { <Comando_Composto>; : : } Exemplo: PARA Leia (%I,&N); Para (i = 0; i<N; i i + 1) { Leia (%I,&Valor); Soma Soma + Valor; } ENQUANTO Leia (%I,&N); i 1; Enquanto (i <= N) { Leia (%I,&Valor); Soma Soma + Valor; i i + 1; }

Onde <Comando_Composto> um comando vazio, um comando simples ou um bloco de comandos. A condio pode ser qualquer expresso, e verdadeiro qualquer valor no-zero.
52

O lao se repete quando a condio for verdadeira. Quando a condio for falsa, o controle do programa passa para a linha aps o Fim_Enquanto ( } ). Como os laos Para, os laos Enquanto verificam a condio de teste no incio do lao, o que significa que o cdigo do lao pode no ser executado. Isso elimina a necessidade de se efetuar um teste condicional antes do lao. Cuidados: - Como os valores em ponto flutuante (Reais) podem ser valores aproximados, controlar a contagem de laos com variveis de ponto flutuante pode resultar em valores impreciso de contadores e exames incorretos da condio de terminao. - Uma vez dentro do corpo do lao, a execuo somente abandonar o mesmo quando a condio for falsa. O usurio deste tipo de construo deve estar atento necessidade de que em algum momento a condio dever ser avaliada como falsa. Caso contrrio, o programa permanecer indefinidamente no interior do lao, o que conhecido como lao ou looping infinito.

5.3.3 ESTRUTURA FAA-ENQUANTO


Ao contrrio dos laos Para e Enquanto-, que testam a condio do lao no comeo, o lao Faa-enquanto verifica a condio ao final do lao. Isso significa que um lao Faa-Enquanto sempre ser executado ao menos uma vez. A forma geral do lao Faa-Enquanto : Faa { <Comando_Composto>; } Enquanto (<condio>); Observao: importante observar que ao final do comando Faa-Enquanto, necessria a utilizao do ponto-e-vrgula para o seu trmino. O lao Faa-Enquanto repete at que a condio se torne falsa. O seguinte lao Faa-Enquanto ler nmeros do teclado at que encontre um nmero maior que zero e menor ou igual a 100. Faa { Leia (%I,&num); Enquanto ((num < 0) .OU. (num > 100)); Talvez o uso mais comum do lao Faa-Enquanto seja em uma rotina de seleo por menu. Quando o usurio entra com uma resposta vlida, ela retornada como o valor da funo. Respostas invlidas provocam uma repetio do lao. Exemplo: Fazer um algoritmo para ler dois valores e executar uma das seguintes operaes matemticas, de acordo coma escolha do usurio: 1. Soma, 2. Subtrao, 3. Multiplicao, 4. Diviso. Mltipla_Escolha() { Real A, B, X; Inteiro Op; Escreva (Entre com o valor de A: ); Leia(%R,&A); Escreva (Entre com o valor de B: ); Leia(%R,&B);

53

Faa Escreva (1. X = A + B); Escreva (2. X = A - B); Escreva (3. X = A * B); Escreva (4. X = A / B); Escreva (Opo (1 4): ); Leia(%I,&Op); Enquanto ((Op < 1) .OU. (Op > 4)) Se (Op = 1) { X = A + B; Escreva (X = %I, A + B); } Seno Se (Op = 2) { X = A - B; Escreva (X = %I, A - B); } Seno Se (Op = 3) { X = A * B; Escreva (X = %I, A * B); } Seno { X = A / B; Escreva (X = %I, A / B); } } } }

Exemplo de fluxograma de modo que seja possvel o clculo do salrio reajustado de um nmero indeterminado de funcionrios segundo tal critrio de reajuste. Na soluo importante notar que: a primeira ao tomada pelo algoritmo a leitura do valor do salrio do primeiro funcionrio, que ocorre antes mesmo de se entrar no lao principal do algoritmo. Dessa forma evita-se que o algoritmo entre no corpo do lao condicional se o primeiro valor de SALRIO j for menor ou igual a zero; a condio utilizada no teste da condio de continuidade do lao SALRIO 0.0, de modo que, quando um valor menor ou igual a zero for especificado para SALARIO, a condio ser avaliada como .F. e o lao ser abandonado; corpo do lao consiste no clculo do salrio reajustado propriamente dito, da escrita do valor calculado e da leitura do valor do salrio do prximo funcionrio, com base no qual o lao atuar na prxima iterao. na estrutura Se, se no utilizasse o Seno sal_reaj salario, e se a condio do Se fosse falsa, seria mostrado o salrio reajustado do funcionrio anterior.

54

Incio

"Algoritmo para clculo de reajuste"

"Salrio = "

Salrio

Salario>0.0

.F.

Fim

.V. Salrio Salrio < 5000 .F. "Salrio = " Sal_reaj Salrio "Salrio Reaj. =", Sal_reaj .V. Sal_reaj 1.3 * Salrio

5.3.4 Exerccios
1. Diga se cada uma das afirmaes seguintes verdadeira ou falsa. Se for falsa, explique por qu. a) Quando a funo Escreva chamada, ela sempre comea a imprimir no incio de uma nova linha. b) Os comentrios fazem com que o computador imprima na tela o texto situado entre /* e */ quando o programa executado. c) A seqncia de escape \n, quando usada em uma string de controle de formato de Escreva, faz com que o cursor se posicione no incio da prxima linha na tela. d) Todas as variveis devem ser declaradas antes de serem usadas. e) Todas as variveis devem receber a atribuio de um tipo ao serem declaradas.

55

f)

O C considera idnticas as variveis numero e NuMeRo.

g) As declaraes podem aparecer em qualquer lugar do corpo de uma funo. h) Todos os argumentos aps a string de controle de formato em uma funo Escreva devem ser precedidos por um e-comercial (&). i) j) 2. O operador resto (%) s pode ser usado com operadores inteiros. Os operadores aritmticos *, /, % e - possuem o mesmo nvel de procedncia.

Escreva uma nica instruo ou linha em C que realize cada um dos pedidos seguintes: a) Imprima a mensagem Entre com dois nmeros.

b) Atribua o produto das variveis b e c varivel a. c) Informe que o programa realiza um exemplo de clculo de folha de pagamento (use um texto que ajude a documentar o programa).

d) Fornea ao programa trs valores inteiros digitados no teclado e coloque esses valores nas variveis inteiras a, b e c. 3. Elabore um programa em que o usurio digita um caracter. Se esse caracter for * deve surgir uma mensagem Voc digitou o caracter *, caso contrrio surgir uma outra Digitou o caracter <caracter que o usurio digitou>. Elabore um programa em que o usurio digita um caracter. Se esse caracter for N ou n deve surgir a mensagem Escolheu a opo NO, caso contrrio surgir uma outra Escolheu outra opo. Elabore um programa que informe se um nmero inserido pelo usurio par ou mpar. Elabore um programa que ordene por ordem crescente dois nmeros inseridos pelo usurio (diferentes). Elabore um programa que ordene por ordem decrescente trs nmeros inseridos pelo usurio (diferentes). Elabore um programa que pea ao usurio para fornecer dois nmeros inteiros, obtenha-os do usurio e imprima o maior deles seguido das palavras maior. Se os nmeros forem iguais, imprima a mensagem Estes nmeros ao iguais. Elabore um programa que receba trs nmeros inteiros diferentes digitados no teclado e imprima a soma, a mdia, o produto, o menor e o maior desses nmeros.

4.

5. 6. 7. 8.

9.

10. Escreva um programa que leia cinco nmeros inteiros e ento determine e imprima o maior e o menor inteiro do grupo. 11. Escreva um programa que leia dois inteiros e ento determine e imprima se o primeiro mltiplo do segundo. 12. Escreva um algoritmo para determinar se um nmero maior, menor ou igual a 0 (zero) utilizando a estrutura de seleo IF. 13. Faa um algoritmo que leia o nome do aluno e suas duas notas. A partir das informaes lidas: - calcule e mostre a mdia do aluno;

56

- verifique qual ser o conceito atribudo ao aluno: - se a mdia for menor que 5: E - se a mdia for maior ou igual que 5 e menor que 6: D - se a mdia for maior ou igual que 6 e menor que 7: C - se a mdia for maior ou igual que 7 e menor que 9: B - se a mdia for maior ou igual que 9 e menor ou igual a 10: A Faa um algoritmo usando a estrutura Escolha e outro usando Se. 14. Faa a questo anterior para n alunos. Considere que o algoritmo repita at que o nome do aluno seja igual a FIM. 15. Faa um algoritmo para gerar os 10 primeiros termos da seqncia de Fibonacci: Obs. A partir do 3o termo soma-se os dois anteriores. 1, l, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 16. Escreva um algoritmo para calcular o reajuste salarial de uma empresa que possui 100 funcionrios, de acordo com os seguintes critrios: - os funcionrios com salrio inferior a 10.000,00 devem ter um reajuste de 55%; - os funcionrios com salrio entre 10.000,00 (inclusive) e 25.000,00 (exclusive) devem ter um reajuste de 30%; e - os funcionrios com salrio superior a 25.000,00 devem ter um reajuste de 20%. 17. Faa um algoritmo para gerar os nmeros pares entre 20 e 50. Faa outro algoritmo utilizando a estrutura Para. 18. Uma empresa com 30 funcionrios decide presentear seus funcionrios com um bnus de Natal, cujo valor definido do seguinte modo: - os funcionrios do sexo masculino com tempo de casa superior a 15 anos tero direito a um bnus de 20% de seu salrio; - as funcionrias com tempo de casa superior a 10 anos tero direito a um bnus de 25% de seu salrio; e - os demais funcionrios tero direito a um bnus de 5.000,00. Elabore um algoritmo para calcular o valor do bnus concedido a cada funcionrio e o impacto de tal atitude no oramento da empresa (ou seja, o montante total dos bnus concedidos). 19. Faa um programa que leia 10 nmeros e obtenha: - a soma dos nmeros; - a mdia dos nmeros; - o maior nmero; e - o menor nmero. 20. Faa um algoritmo que solicite 2 nmeros e uma operao matemtica elementar. 21. Fazer um algoritmo onde dados 30 nmeros, imprima a mdia destes nmeros. Verifique se todos so positivos. 22. Fazer um algoritmo onde Dada a idade, dizer se adulto, jovem ou velho. 23. Fazer um algoritmo para identificar o maior nmero dentre 3 nmeros informados pelo usurio. 24. Faa um algoritmo onde, dados 2 nmeros, apresente-os ordenados. 25. Calcular a idade mdia de uma turma de alunos onde no conhecido a priori o nmero de alunos. Neste exemplo utilizaremos FLAG que indicar o trmino do nmero de alunos. Assumiremos que esta FLAG um nmero negativo.
57

26. Fazer um algoritmo para determinar o nmero de pessoas do sexo feminino de uma turma de alunos, onde para sexo=1 Feminino e sexo=2 masculino. A FLAG de finalizao 1. Imprima ao final o nmero de pessoas do sexo feminino. 27. Leia um nmero indeterminado de linhas contendo cada uma a idade de um indivduo. A ltima linha, que no entrar nos clculos, contm o valor da idade igual a zero. Calcule e escreva a idade mdia deste grupo de indivduos. 28. Supondo que a populao de um pas A seja da ordem de 90.000.000 de habitantes com uma taxa anual de crescimento de 3% e que a populao de um pas B seja, aproximadamente, de 200.000.000 de habitantes com uma taxa anual de crescimento de 1.5%, fazer um programa que calcule e escreva o nmero de anos necessrios para que a populao do pas A ultrapasse ou se iguale populao do pas B, mantidas essas taxas de crescimento. 29. Tem-se um conjunto de dados contendo a altura e o sexo (masculino=1, feminino=2) de N pessoas. Fazer um programa que calcule e escreva: - a maior e a menor altura do grupo; - a mdia de altura das mulheres; - o nmero de homens; - % de mulheres. Adotar como FLAG altura < 0. 30. Uma pesquisa sobre algumas caractersticas fsicas da populao de uma determinada regio coletou os seguintes dados, referentes a cada habitante, para serem analisados: - sexo (masculino, feminino); - cor dos olhos (azuis, verdes, castanhos); - cor dos cabelos (louros, castanhos, pretos); - idade em anos. Para cada habitante, foi perfurado um carto com esses dados, e o ltimo carto, que no corresponde a ningum, conter o valor da idade igual a 1. Fazer um programa que determine e escreva: - a maior idade dos habitantes; - porcentagem de indivduos do sexo feminino cuja idade est entre 18 e 35 anos, inclusive, e que tenham olhos verdes e cabelos louros. 31. Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Pra isto, mandou digitar uma linha para cada mercadoria com o nome, preo de compra e preo de venda das mesmas. Fazer um programa que: Determine e escreva quantas mercadorias proporcionam: Lucro < 10% 10% Lucro 20% Lucro > 20% Determine e escreva o valor total de compra e de venda de todas as mercadorias assim como o lucro total. Observao: Adotar um flag adequado. 32. A UDESC deseja fazer um levantamento a respeito de seu concurso vestibular. Para cada curso, fornecido o seguinte conjunto de valores: - cdigo do curso; - nmero de vagas; - nmero de candidatos do sexo masculino; - nmero de candidatos do sexo feminino. O ltimo conjunto, para indicar fim de dados, contm o cdigo do curso igual a zero. Fazer um programa que:
58

calcule e escreva, para cada curso, o nmero de candidatos por vaga e a porcentagem de candidatos do sexo feminino (escreva tambm o cdigo correspondente do curso); determine o maior nmero de candidatos por vagas e escreva esse nmero juntamente com o cdigo do curso correspondente (supor que no haja empate); calcule e escreva o total de candidatos.

33. Escreva um programa que leia uma string, conte quantos caracteres desta string so iguais a a e substitua os que forem iguais a por b. O programa deve imprimir o nmero de caracteres modificados e a string modificada. 34. Faa um programa que inverta uma string: leia a string com gets e armazene-a invertida numa outra string. Use a estrutura Para-Faa para percorrer a string at o seu final.

59

UNIDADE 6 VARIVEIS INDEXADAS

6.1 - Introduo
Existem diversas situaes na rea de processamento de dados que existe a necessidade de se armazenar um grande conjunto de dados na memria RAM do computador. Muitas dessas situaes os dados esto relacionados. Por Exemplo: 1. 2. Ler todos os nomes dos alunos da turma de ICC e ordena-los alfabeticamente. Ler todas as notas dos alunos desta turma e classifica-los imprimindo os que tiveram mdia acima de sete. 3. Etc. Nestes casos invivel utilizarmos uma varivel para cada aluno ou nota, sendo assim, as linguagens de programao incluem um mecanismo chamado varivel indexada que permite realizar este armazenamento com uma nica varivel. O termo indexada provm da maneira como esta individualizao feita: por meio de ndices. Variveis indexadas so denominadas matrizes que se dividem em duas partes: Matrizes Unidimensionais : tambm chamadas vetores (um nico ndice usado); Matrizes Multidimensionais : duas ou mais dimenses (possui dois ou mais ndices).

6.2 - Operaes Bsicas com Variveis Indexadas


Do mesmo modo que acontece com variveis simples, tambm possvel operar com variveis indexadas. Contudo, no possvel operar diretamente com o conjunto completo, mas com cada um de seus componentes isoladamente. O acesso individual a cada componente de um conjunto realizado pela especificao de sua posio no mesmo por meio de um ou mais ndices (no caso de uma matriz). Portanto, no possvel operar diretamente sobre conjuntos como um todo, mas apenas sobre seus componentes, um por vez. Por exemplo, para somar dois vetores necessrio somar cada um de seus componentes dois a dois. Da mesma forma, as operaes de atribuio, leitura e escrita de conjuntos devem ser feitas elemento a elemento.

60

6.2.1 - Atribuio
No caso de variveis indexadas, alm do nome da varivel deve-se necessariamente fornecer tambm o(s) ndice(s) da componente do conjunto onde ser armazenado o resultado da avaliao da expresso. Naturalmente, tambm possvel usar conjuntos no meio de expresses, como se faz com variveis simples, desde que seja especificado o elemento do conjunto que servir como operando. Exemplos: NUMEROS[2] SALARIOS[3] NOMES[10] MATRIZ[5][8] 10; 100.00; JOO; - 3.6;

6.2.2 - Leitura
A leitura de um conjunto feita passo a passo, um componente por vez, usando a mesma sintaxe da instruo primitiva de entrada de dados (Leia nome_varivel). Mais uma vez, alm do nome do conjunto, deve ser explicitada a posio do componente lido. Exemplo: Exemplo_622() { Inteiro Numeros[10], i; Para (i 0; i < 10; i i + 1) { Escreva(%I - Nmero: , i+1); Leia (%I,&Numeros[ i ]); } } Uma observao importante a ser feita o uso da construo Para-Faa a fim de efetuar a operao de leitura dez vezes, em cada uma delas lendo um determinado componente do vetor. De fato, o uso desta construo muito comum quando se opera com conjuntos, devido necessidade de se realizar uma mesma operao com os diversos componentes dos mesmos. Na verdade, so raras as situaes em que se deseja operar isoladamente com um nico componente do conjunto.

61

6.2.3 - Escrita
A escrita de um conjunto obedece mesma sintaxe da instruo primitiva de sada de dados (<Escreva nome_varivel>). Mais uma vez, convm lembrar que, alm do nome do conjunto, deve-se tambm especificar por meio de seu(s) ndice(s) qual(is) o(s) componente(s) do vetor a ser(em) escrito(s). Exemplo 01: Exemplo_623() { Inteiro Numeros[10], i; Para (i 0; i < 10; i i + 1) { Escreva(%I - Nmero: , i+1); Leia (%I,&Numeros[ i ]); Escreva (%I,Numeros[ i ]); } } Exemplo 02: Exemplo_624() { Real Numeros[10], Soma; Inteiro i; Para (i 0; i < 10; i i + 1) { Escreva(%I - Nmero: , i+1); Leia (%I,&Numeros[ i ]); Soma Soma + Nmeros[i]; } Escreva (Soma = %R, Soma); }

62

6.3 - Matrizes Unidimensionais (Vetores)


Como outras variveis, as matrizes devem ser explicitamente declaradas para que o compilador possa alocar espao para elas na memria. A quantidade de armazenamento necessrio para guardar uma matriz est diretamente relacionada com seu tamanho e tipo. Para uma matriz unidimensional, o tamanho total em bytes calculado por: total em bytes = sizeof(tipo) * tamanho da matriz

Matrizes unidimensionais so, essencialmente, listas de informaes do mesmo tipo, que so armazenadas em posies contguas da memria em uma ordem de ndice.

Obs.: Um detalhe importantssimo da linguagem C no tratamento destas variveis que o ndice de acesso a um dos valores de uma varivel com N elementos vai de 0 (zero) at (N 1), diferente da maioria das outras linguagens que vo de 1 a N. Em funo deste range de variao muito comum as linhas de programa com Para_Faa com ndices que variam de 0, enquanto for menor que o tamanho N. Exemplo 01: Ler trs nmeros inteiros, achar a mdia e imprimir os nmeros maiores que a mdia. Soluo Tradicional: Algoritmo <Programa_Imprime> Incio Inteiro A1, A2, A3; Real Media; Ler A1; Ler A2; Ler A3; Media (A1 + A2 + A3) / 3; Se (A1 > Media) ento Escreva A1; Fim_Se Se (A2 > Media) ento Escreva A2; Fim_Se Se (A3 > Media) ento Escreva A3; Fim_Se Fim Modelo de Memria A1 5 A2 7 A3 8 Media 6.6

Obs.: Imagine o mesmo exerccio para 100 valores.


63

Exemplo 02: Algoritmo <Programa_10> Incio Real X1, X2, X3, ..., X10, Media; Ler X1; Ler X2; Ler X3; : : Ler X10; Media (X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10) / 10; Escreve Media; Escreve X1; Escreve X2; : : Escreve X10; Fim O uso de variveis indexadas nos d a possibilidade de combinar o nome de uma varivel com um ndice numrico. O nome da varivel associado com o valor numrico est relacionado a uma posio de memria.

Exemplo: Varivel Real Aux[10] significa que na memria foi reservado 10 posies e se pode ler e atribuir 10 valores a esta varivel que so diferenciados por seus ndices. 1a Entrada de Dados Aux[0] = 1; Aux[1] = 5; Aux[2] = 3; : : Aux[9] = 45; 2a Entrada de Dados (Mudana de Valores) Aux[0] = 15; Aux[1] = 25; Aux[9] = 2;

Modelo de Memria ndice Contedo 1a 2a 0 1 15 1 5 25 2 3 3 3 ? ? ... ? ? 9 45 2

64

Um vetor definido da seguinte forma: <tipo varivel> <nome_varivel>[N de itens]; Exemplos: Inteiro X[5]; Real R[3];

Modelo de Memria X[0] ? X[1] ? X[2] ? X[3] ? X[4] ? R[0] ? R[1] ? R[2] ?

Vantagens:

- Com nica definio de varivel pode-se armazenar vrios valores na memria do computador; - O acesso pode ser feito diretamente ou atravs de um ndice; - Facilidade de adicionar grandes quantidades de valores na memria; - Simplificao do cdigo para leitura e escrita de valores.

Exemplos: R[0] = 5; R[2] = 9; Ou Para (i 0; i < 5; i i + 1) Faa X[ i ] 10; Fim_Para // Ao final todos os elementos de X[0 5] esto com valores 10. Modelo de Memria X[0] 10 X[1] 10 X[2] 10 X[3] 10 X[4] 10 R[0] 5 R[1] ? R[2] 9

Para (i 0; i < 3; i i + 1) Faa Ler R[ i ]; Fim Para Modelo de Memria ao final do Para-Faa R[0] 5 R[1] 7 R[2] 8 i + 1) Faa

Para (i 0; i < 3; i Escreva R[ i ]; Fim Para

65

Aplicando estes Conceitos ao Exerccio Anterior Exemplo 01

Algoritmo <Imprime_vetor> Inicio Inteiro A[100], i; Real Media, Soma; Soma 0; Para (i 0; i < 100; i i + 1) Faa Ler A[ i ]; Soma Soma + A[ i ]; Fim_Para; Media Soma / 100; Para (i 0; i 100; i i + 1) Faa Se (A[ i ] > Media) ento Escreva A[ i ]; Fim_se Fim_Para Fim

6.3.1 Mtodos de Pesquisa Seqencial


A pesquisa seqencial ou linear o mtodo mais objetivo para se encontrar um elemento particular num conjunto (em geral, um vetor) no classificado, isto , cujos elementos no esto ordenados segundo algum critrio. Esta tcnica envolve a simples verificao de cada componente do conjunto seqencialmente (uma aps a outra) at que o elemento desejado seja encontrado (neste caso diz-se que a pesquisa foi bemsucedida) ou que todos os elementos do conjunto (vetor) tenham sido verificados sem que o elemento procurado tenha sido encontrado (pesquisa malsucedida).

Exemplo: Ler um nome e verificar se o mesmo se encontra num vetor de 100 nomes utilizando a pesquisa seqencial.

Algoritmo <Pesq_Seq> Inicio Literal Valor[30], Nomes [100][30]; Inteiro i, Achou; Para (i 0; i < 100; i i + 1) faa Escreva (Nome: ); Leia Nomes[ i ]; Fim_Para

66

Escreva(Nome a ser pesquisado: ); Leia Valor; i 0; Achou 0; Enquanto (i < 100 .E. !Achou) faa Se (Nomes[ i ] = Valor) ento Achou 1; Seno i i + 1; Fim_Se Fim_Enquanto Se (Achou) ento Escreva (O nome %L foi encontrado, Valor); Seno Escreva(O nome %L no foi encontrado, Valor); Fim_se Fim

6.3.2 Mtodo de Pesquisa Binria


Quando os elementos de um vetor esto previamente classificados segundo algum critrio, ento pesquisas muito mais eficientes podem ser conduzidas. Entre elas destaca-se o mtodo de pesquisa binria. Seu funcionamento o seguinte: inicialmente o vetor classificado (por exemplo, em ordem crescente). O elemento que divide o vetor ao meio (ao menos aproximadamente) com relao ao seu nmero de componentes localizado e comparado com o valor procurado. Se ele for igual ao valor procurado a pesquisa dita bem-sucedida e interrompida. No caso dele ser maior que o valor procurado, repete-se o processo na primeira metade do vetor. No caso do elemento central do vetor ser menor que o valor procurado, repete-se o processo na segunda metade do vetor. Este procedimento continuado at que o elemento desejado seja localizado (pesquisa bem-sucedida), ou ento, at que no reste mais um trecho do vetor a ser pesquisado (pesquisa malsucedida).

Exemplo: Algoritmo<Pesq_Bin> Incio Literal Valor[30], Nomes[100][30]; Inteiro Meio, Alto, Baixo, Achou; Para (i 0; i < 100; i i + 1) faa Escreva (Nome: ); Leia Nomes[ i ]; Fim_Para Escreva(Nome a ser pesquisado: ); Leia Valor; Achou 0; Baixo 0; Alto 99;

67

Enquanto (Baixo <= Alto .E. !Achou) Faa Meio (Baixo + Alto) / 2; Se (Valor < Nomes[Meio]) ento Alto Meio 1; Seno Se (Valor > Nomes[Meio]) ento Baixo Meio + 1; Seno Achou 1; Fim_Se Fim_se Fim_Enquanto Se (Achou) ento Escreva (O nome %L foi encontrado, Valor); Seno Escreva(O nome %L no foi encontrado, Valor); Fim_se Fim

O mtodo de pesquisa binria tem a desvantagem de exigir que o vetor seja previamente ordenado para seu correto funcionamento, o que no acontece no caso da pesquisa seqencial. Por outro lado, o mtodo da pesquisa binria em mdia mais rpido que o mtodo de pesquisa seqencial.

6.3.3 Mtodo da Bolha de Classificao


Este mtodo no o mais eficiente, mas um dos mais populares devido sua simplicidade. A filosofia bsica deste mtodo consiste em varrer o vetor, comparando os elementos vizinhos entre si. Caso estejam fora de ordem, os mesmos trocam de posio entre si. Procede-se assim at o final do vetor. Na primeira varredura verifica-se que o ltimo elemento do vetor j est no seu devido lugar (no caso de ordenao crescente, ele o maior de todos). A segunda varredura anloga primeira e vai at o penltimo elemento. Este processo repetido at que seja feito um nmero de varreduras igual ao nmero de elementos a serem ordenados menos um. Ao final do processo o vetor est classificado segundo o critrio escolhido.

68

Exemplo: Classificao de um vetor de dez elementos reais em ordem crescente. Algoritmo<Bolha> Incio Real Numeros[10], aux; Inteiro i, j; Para (i 0; i < 10; i i + 1) faa Escreva (Nmero: ); Leia Numeros[ i ]; Fim_Para j 9; Enquanto (j > 0) faa Para (i 0; i < j; i i + 1) faa Se (Numeros[ i ] > Numeros[i + 1]) ento Aux Numeros[ i ]; Numeros[ i ] Numeros [i + 1]; Numeros[i + 1] Aux; Fim_se Fim_Para j j 1; Fim_Enquanto Escreva (Vetor Ordenado: ); Para (i 0; i < 10; i i + 1) faa Escreva (%R, Numeros[ i ]); Fim_Para Fim

69

6.3.4 Exerccios
6.3.4.1 Faa um algoritmo para ler, somar e imprimir 10 valores (utilizar 3 estruturas Para). 6.3.4.2 Escreva um novo algoritmo usando no mximo duas estruturas Para-Faa. 6.3.4.3 Faa um algoritmo para ler n valores. Aps todos os elementos lidos calcular a soma, a mdia e ao final imprimir os valores, ou seja, quando o usurio entrar com o valor 0 (zero = Flag). 6.3.4.4 Dado um vetor com 10 elementos (lidos do teclado), verifique se o valor 25 pertence a este conjunto de dados. Se pertencer imprima a posio do vetor em que est armazenada. 6.3.4.5 Dado o vetor inteiro [100]: a) preenche-lo com valor -1; b) preenche-lo com o valor 2, 4, 6, 8, ..., 200; c) preenche-lo com o valor 1, 2, 3, 5, 8, 13, ... 6.3.4.6 Ler o nome e idade de 25 alunos. Calcular a mdia e imprimir o nome e idade dos alunos com idade inferior a mdia. 6.3.4.7 Faa um algoritmo para ler um conjunto de dados inteiros at que seja encontrado um valor negativo ou igual a zero. Aps a insero de todos os valores, calcule a soma e a mdia dos valores lidos (exceto o ltimo) e ao final imprima todos os valores. 6.3.4.8 Dados os vetores abaixo: A=
0 1 2 3 4 5 6 7

8
0

7
1

6
2

5
3

4
4

3
5

2
6

1
7

B=

Fazer um algoritmo para somar os dois vetores e armazenar o resultado em um vetor C. 6.3.4.9 Elabore um algoritmo que leia N nmeros reais (N < = 1000) e imprima-os em ordem inversa. 6.3.4.10 A UDESC SBS promoveu um vestibular onde se inscreveram 1.000 alunos. Para cada aluno dado o cdigo e suas respostas (10). Tambm fornecido um gabarito com as respostas corretas (10 questes A, B, C, D). Faa um programa para ler o gabarito, o nome e as respostas de cada candidato a partir do gabarito, calcule a nota de cada um e armazene este valor. Imprima ao final os cdigos aprovados com mdia superior a 5.0. 6.3.4.11 Ler 30 nmeros inteiros e armazena-los em um vetor. Conte o nmero de valores que so iguais a trs e imprima a posio do vetor em que esto armazenados. 6.3.4.12 Ler para um conjunto de alunos o nome, cdigo, nota e freqncia. a) Imprima um relatrio com os alunos aprovados com nota maior ou igual a sete; b) Imprima um relatrio com os alunos reprovados por falta (freqncia menor que 75%); c) Imprima um relatrio dos alunos reprovados por nota. Estas opes de relatrio devem ser atravs de um menu de opes. 6.3.4.13 Ler duas variveis unidimensionais A e B, contando, cada uma, 25 elementos inteiros. Intercale os elementos destes dois conjuntos formando uma nova varivel de 50 elementos.
70

A=

...

24

100
0

200
1

500
2

300
3

250
4

15
5

...
...

351
24

B=

1
0

2
1

3
2

4
3

5
4

6
...

...
49

8
49

C=

100

200

500

...

351

6.3.4.14 Dado um vetor com 20 posies com valores inteiros lidos do teclado, verificar se o ltimo valor armazenado (Vetor[19]) est repetido entre as posies 0 ... 18 do mesmo vetor. Se estiver, quantas vezes? 6.3.4.15 Ler o nome e o salrio de n funcionrios e armazena-los em vetores. Ao final da leitura, imprimir o nome e o salrio de todos os funcionrios. 6.3.4.16 Idntico ao anterior, sendo que foi concedido um aumento de 30% para todos os funcionrios. 6.3.4.17 Faa um algoritmo para ler o nmero de matrculas e a idade de 10 alunos. Calcule e imprima a mdia e a soma de idades. Ao final, imprima o nmero de matrcula e a idade de cada aluno. 6.3.4.18 Faa um algoritmo para ler as fichas de um conjunto de N funcionrios. O valor N digitado pelo operador do programa. As fichas contm os seguintes dados: - Nome; - Idade; - Salrio. Calcular um novo salrio para os funcionrios com salrio inferior a R$ 500,00 com um aumento de 20%. Ao final imprima o nome, idade, e salrio de todos os funcionrios. 6.3.4.19 Faa um algoritmo para ler o nmero de matrcula e a idade de N alunos. Calcule e imprima a mdia e a soma das idades. Tambm imprima o nmero de matrcula do aluno que possuir maior idade, bem como sua idade. Ao final, imprima o nmero de matrculas e a idade de todos os alunos. Relatrios: 1 Nome dos alunos por ordem crescente de idade; 2 Por ordem crescente de idade. 6.3.4.20 Faa um algoritmo para ler N valores (onde N lido do teclado) para cada conjunto de dados lido o nmero do empregado, o salrio, a idade e o sexo (0 para feminino e 1 para masculino). Calcule ao final da leitura dos dados: - A soma dos salrios; - Aumento de 10% para todos. Imprima: - A soma dos salrios; - A mdia dos salrios; - O nmero, novo salrio, idade e o sexo para cada funcionrio; - O maior e o menor salrio com o nmero do funcionrio que o recebe. 6.3.4.21 Um professor tem uma turma de 20 alunos e deseja calcular e imprimir a nota de cada aluno seguido da mdia da turma. Aluno 1 = 10 Mdia da Turma = 10.0 Aluno 2 = 5 Mdia da Turma = 7.5 Faa um algoritmo para o problema acima, usando as estruturas Enquanto-Faa e Para-Faa. 6.3.4.22 Faa um algoritmo para calcular o nmero de alunos que tiraram nota acima da mdia da turma. As notas sero fornecidas via teclado e a turma tem 10 alunos.
71

6.3.4.23 Fazer um algoritmo para calcular o nmero de alunos que tiraram nota acima da nota mdia da turma. Imprimir o nmero de matrcula e anota destes alunos. As notas e os nmeros so fornecidos via teclado e a turma tem 40 alunos. 6.3.4.24 Um conjunto de dados com os dias do ano e a temperatura mdia do dia fornecida. Elabore um algoritmo que calcule e escreva: - A menor temperatura ocorrida no ano; - A maior temperatura ocorrida no ano; - A temperatura mdia anual; - O nmero de dias em que a temperatura foi inferior mdia anual, tambm imprima o dia (1 ... 365) e a mdia de temperatura do dia. 6.3.4.25 Desenvolver um programa para ler do teclado um conjunto de fichas de funcionrios de uma empresa chamada Casa Velha. Cada ficha tem as informaes de idade, salrio e nome. A flag para trmino das fichas o salrio = 0. Ao final da leitura das fichas, o programa deve apresentar um menu de relatrios com os seguintes itens: 1 Imprimir o nome de todos os funcionrios; 2 Imprimir o nome e o salrio de todos os funcionrios; 3 Imprimir o nome, o salrio e o novo salrio considerado um aumento de 30% para todos; 4 Imprimir o nome e o salrio das pessoas que possuem o maior e o menor salrio; 5 Imprimir o nome da pessoa mais jovem e a posio que ela ocupa no vetor; 6 Fim. Obs.: o programa deve continuar a apresentar o menu na tela aps cada relatrio, sendo que o programa deve finalizar somente aps se teclar a opo 6. 6.3.4.26 Faa um algoritmo para ler a idade de 6 alunos de uma estrutura e imprimir as idades em ordem crescente. 6.3.4.27 Escrever um algoritmo para ler uma varivel unidimensional A de 25 elementos e inverter estes elementos armazenando-a num vetor B. A=
0 1 2 3 4 ... 23 24

10
0

20
1

30
...

40
20

50
21

...
22

80
23

90
24

B=

90

80

...

50

40

30

20

10

6.3.4.28 Ler 50 valores inteiros, multiplicar todos os valores por uma constante lida do teclado. Imprimir a posio de todos os valores que so iguais a 20 e os que tem valor negativo. 6.3.4.29 Ler um conjunto de valores inteiros de 10 posies e armazenar em um vetor. Ordena-los em forma crescente. 6.3.4.30 Idem ao anterior mas em ordem decrescente. 6.3.4.31 Escrever um algoritmo que faa reserva de passagens areas de uma companhia. Alm da leitura do nmero dos vos e da quantidade de lugares disponveis, ler vrios pedidos de reserva, constitudos do nmero da carteira de identidade do cliente e do nmero do vo desejado. Para cada cliente, verificar se h disponibilidade no vo desejado. Em caso afirmativo, imprimir o nmero da identidade do cliente e o nmero do vo, atualizando o nmero de lugares disponveis. Caso contrrio, avisar ao cliente da inexistncia de lugares. Indicando o fim dos pedidos de reserva, existe um passageiro cujo nmero da carteira de identidade 99999. Considerar fixo e igual a 37 o nmero de vos da companhia.

72

6.3.4.32 So lidos dois vetores: O 1 com a descrio das mercadorias e o 2 com a quantidade de mercadorias existentes. A seguir, so lidos os pedidos dos clientes que contm o cdigo do cliente, o nome do produto e a quantidade de produtos. O nmero de mercadorias disponveis igual a 100. O cdigo do cliente que finaliza os produtos igual a 0. Fazer um algoritmo para: - Ser lido e listado o estoque inicial; - Seja verificado, para cada pedido, se ele pode ser integralmente atendido; Em caso negativo, seja impresso o cdigo do cliente e a mensagem: No temos a mercadoria em estoque suficiente; - Seja atualizado o estoque aps cada pedido; - Seja listado o estoque final. 6.3.4.33 Faa um algoritmo para ler 50 valores inteiros. Faa um menu de opes e execute o programa de acordo com a opo escolhida. 1 Soma e impresso de todos os valores; 2 Produto de todos os valores; 3 Impresso dos valores ordenados por ordem decrescente; 4 Fim. Obs.: O menu deve ser apresentado at que seja digitado como opo de escolha o valor 4 (Fim). 6.3.4.34 Construir um algoritmo que, dado um vetor A de 20 elementos, calcule: S = (A0 A19)2 + (A1 A18)2 + ... + (A9 A10)2 6.3.4.35 A UDESC SBS deseja saber se existem alunos cursando, simultaneamente, as disciplinas de ICC e CDI. Existem disponveis, na unidade de entrada, os nmeros de matrcula dos alunos de ICC (no mximo 100 alunos) e de CDI (no mximo 140 alunos). Cada conjunto dos nmeros de matrcula dos alunos de uma disciplina tem a matrcula fictcia 999999 no final. Formular um algoritmo que imprima o nmero de matrcula dos alunos que esto cursando estas disciplinas simultaneamente. Trata-se, ento, de verificao da ocorrncia de um elemento de um conjunto em outro conjunto. Assim, aps a leitura dos dados, estaro montadas as seguintes variveis compostas unidimensionais ICC e CDI, contendo, respectivamente, os nmeros de matrcula dos alunos que esto cursando estas duas disciplinas. 6.3.4.36 Fazer um algoritmo para corrigir provas de mltipla escolha. Cada prova tem 10 questes e cada questo vale 1 ponto. O primeiro conjunto de dados a ser lido ser o gabarito para a correo da prova. Os outros dados sero, os nmeros dos alunos e suas respectivas respostas, e o ltimo nmero, do aluno fictcio, ser 9999. O algoritmo dever calcular e imprimir: a) para cada aluno, o seu nmero e a sua nota; b) a porcentagem de aprovao, sabendo-se que anota mnima de aprovao 7; c) a nota que teve maior freqncia absoluta, ou seja, a nota que apareceu maior nmero de vezes (supondo a inexistncia de empates).

73

6.4 Matrizes Multidimesionais (Matrizes)

6.4.1 - Introduo
O recurso de se colocarem vrias constantes em uma s varivel no exclusivo do vetor; a matriz uma varivel que tambm apresenta essa caracterstica. A forma mais simples de matriz multidimensional a matriz bidimensional uma matriz de matrizes unidimensionais.

Matriz A Colunas
0 1 2 3 4

Linhas

A Tem dimenso 5 x 5

6.4.2 - Declarando a Matriz


Como acontece com outras variveis, quando uma matriz declarada, o computador reserva uma parte da memria para ela. No caso da matriz, essa parte dividida em determinada quantidade de colunas e linhas (indicada na declarao) e identificada por um par de nmeros (um referente linha e outro coluna).

Uma matriz s pode armazenar constantes de um nico tipo. conveniente prestar bastante ateno declarao, pois muitas linguagens de computador usam vrgulas para separar as dimenses da matriz; C, em contraste, coloca cada dimenso no seu prprio conjunto de colchetes. Definio: <tipo varivel> <nome_varivel> <[Dim 1][Dim 2]>; onde Dim1 e Dim 2 so as dimenses da matriz (linha x coluna). Exemplo: Inteiro A[5][5]; //uma matriz inteira com 5 linhas e 5 colunas.

Matrizes bidimensionais so armazenadas em uma matriz linha-coluna, onde o primeiro ndice indica a linha, e o segundo, a coluna.
74

Isso significa que o ndice mais a direita varia mais rapidamente do que o mais esquerda quando acessamos os elementos da matriz na ordem em que eles esto realmente armazenados na memria.

6.4.3 - Inserindo valores em uma matriz


No caso de variveis indexadas, alm do nome da varivel deve-se necessariamente fornecer tambm o(s) ndice(s) do componente do conjunto onde ser armazenado o resultado da avaliao da expresso. Naturalmente, tambm possvel usar conjuntos no meio de expresses, como se faz com variveis simples, desde que seja especificado o elemento do conjunto que servir como operando. Exemplo (especificando o elemento do conjunto): A[0][0] A[0][1] A[0][4] A[1][0] A[3][4] 5; 6; 10; 10; 20;
Colunas
0 1 2 3 4 0 1 2 3 4

5 10

10 Linhas 20

Exemplo (inserindo constantes - zerando uma matriz): Algoritmo<Zera_Matriz> Inicio Inteiro A[5][5], i, j; Para (i 0; i < 5; i i + 1) faa Para (j 0; j < 5; j j + 1) faa A[i][j] 0; Fim_Para Fim_Para Fim num [t] [i]
0 0 1 2 3 4 1 2 3 4

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

Exemplo (inserindo constantes): Algoritmo<um_a_doze> Inicio Inteiro num[3][4], t, i; Para (t 0; t < 3; t t + 1) faa Para (i 0; i < 4; i i + 1) faa num[t][i] (t * 4) + i + 1; Fim_Para Fim_Para //agora escreva-os... Para (t 0; t < 3; t t + 1) faa Para (i 0; i < 4; i i + 1) faa Escreva (%I, num[t][i]); Fim_Para Escreva(\n); //troca de linha Fim_Para Fim

0 1 2

0 1 5 9

1 2 6 10

2 3 7 11

3 4 8 12

Exemplo (Lendo e escrevendo os valores lidos de uma matriz 4 x 4):


75

Algoritmo<leitura_e_escrita> Inicio Inteiro mat[4][4], i, j; Para (i 0; i < 4; i i + 1) faa Para (j 0; j < 4; j j + 1) faa Leia mat[i][j]; //Leia (%I, mat[i][j]); Fim_Para Fim_Para //agora escreva-os... Para (i 0; i < 4; i i + 1) faa Para (j 0; j < 4; j j + 1) faa Escreva (%I, num[i][j]); Fim_Para Escreva(\n); //troca de linha Fim_Para Fim

6.4.4 - Clculo do Tamanho


No caso de uma matriz bidimensional, a seguinte frmula fornece o nmero de bytes de memria necessrios para armazena-la: Bytes = tamanho do 1 ndice * tamanho do 2 ndice * sizeof(tipo base) Portanto, assumindo inteiros de dois bytes, uma matriz de inteiros com dimenses 10 x 5 teria 10 * 5 * 2, ou 100 bytes alocados. No exemplo para preencher uma matriz com 12 constantes em ordem crescente, por se tratar de uma matriz 3 x 4, ento o espao alocado em memria : 3 * 4 * 2 = 24 bytes.

76

6.4.4 - Exerccios
OBS.: Em todas as questes onde constar um nmero mximo a ser inserido, indica que esta varivel DEVE ser validada. Ex.: M < = 50 - onde no pode ser inserido um valor maior que 50.

6.4.4.1 - Seja a seguinte varivel composta bidimensional A:


0 1 2 3 4

175 9.8 40 402 21


0

225 100 301 4211 3


1

10 363 30.2 7213 2


2

9000 432 6381 992 1


3

3.7 156 1 442 9000


4

4.75 18 0 7321 2000


5

a) Quantos elementos fazem parte do conjunto? b) Qual o contedo do elemento identificado por A[4][5]? c) Qual o contedo de X aps a execuo do comando X = A[3][2] + A[4][1]? d) O que aconteceria caso fosse referenciado o elemento A[5][2] no algoritmo? e) Somar os elementos da quarta coluna (A[0][3] + A[1][3] + A[2][3] + A[3][3] + A[4][3]) - mediante algoritmo; f) Somar os elementos da terceira linha (A[2][0] + A[2][1] + A[2][2] + A[2][3] + A[2][4] + A[2][5]) mediante algoritmo; 6.4.4.2 - Dada a varivel bidimensional B de 100 linhas por 200 colunas, escrever o trecho de programa que calcula o somatrio dos elementos da 40 coluna. 6.4.4.3 - Com a mesma varivel composta do exerccio anterior, escrever o trecho de programa que calcula o somatrio dos elementos da 30 linha. 6.4.4.4 - Faa o programa para preencher os elementos de uma matriz (5 x 3) com o valor 6. Imprimir a matriz. 6.4.4.5 - Faa um programa para ler uma matriz (3 x 4) e multiplique os elementos pares por 3 (trs) e os elementos mpares por 2 (dois). Imprimir a matriz resultado. 6.4.4.6 - Faa o programa para preencher os elementos de uma matriz quadrada (6 x 6) com o valor 0 quando o valor da linha igual ao valor da coluna, e com 1 para os demais elementos. Imprimir a matriz. 6.4.4.7 - Faa um programa para ler uma matriz de dimenses (M x N) e copiar os elementos para uma outra matriz trocando a seqncia de leitura na Segunda Matriz. Exemplo: A 4 6 2 6 3 8 1 7 B 7 1 8 3 6 2 6 4

6.4.4.8 - Fazer um programa para ler as variveis compostas A e B e fazer a soma dos elementos gerando a varivel composta C; portanto, nada mais do que a soma de matrizes o conjunto C = A + B; 6.4.4.9 - Fazer um programa que:

77

a)

b)

Leia as duas variveis compostas bidimensionais de dimenso M x N (M < 20, N < = 30). O valor de M e N esto perfurados no primeiro carto. Os cartes seguintes contm as linhas de cada uma das variveis. Calcule e imprima a soma dessas variveis.

6.4.4.10 - Fazer um programa que: Leia uma matriz A, de dimenso M x N (M < = 20, N < = 50). Os valores de M e N esto a) perfurados no primeiro carto. Os cartes seguintes contm cada um dos elementos de uma linha da matriz; b) Determine a matriz transposta de A; c) Imprima a matriz A e a sua transposta. A 9 32 16 11 34 17 Transposta de A 9 16 34 32 11 17

6.4.4.11 - Fazer um programa que: Leia uma matriz inteira A de M x N, onde os elementos de cada linha esto perfurados em um a) carto (M < = 20, N < = 10); b) Imprima a matriz lida; c) Calcule e imprima uma matriz modificada B (M x N + 1), sendo que os elementos da (N + 1)sima coluna so formados com o produto dos elementos da mesma linha. Exemplo: A 2 4 3 5 B 2 4 3 5 6 20

6.4.4.12 - Uma biblioteca possui oito departamentos. Cada departamento contm 40 estantes capazes de conter cada uma, 150 livros. Supondo que o livro padro tenha 200 pginas de 35 linhas por 60 colunas de caracteres, declarar uma varivel composta capaz de conter todos os caracteres presentes nos livros da biblioteca. 6.4.4.13 - Um grupo de pessoas respondeu a um questionrio composto de 10 perguntas. Cada pergunta contm cinco opes ou respostas possveis, codificadas de 1 a 5. Cada pergunta respondida com a escolha de apenas uma opo dentre as cinco possveis. As respostas de cada pessoa foram perfuradas em cartes, cada carto contendo o nome da pessoa e as 10 respostas dadas. O ltimo carto, utilizado como flag, contm o nome da pessoa igual a VAZIO. Fazer um programa para ler e imprimir os dados lidos e calcular e imprimir o nmero de pessoas que responderam a cada uma das cinco opes de cada pergunta. 6.4.4.14 - Fazer um programa que leia e imprima uma varivel composta bidimensional cujo contedo a populao dos 10 (dez) municpios mais populosos de cada um dos 25 estados brasileiros. 0 0 ... 24 1 ... 9 Populao [i][j] Populao do j-simo municpio do i-simo estado

Determinar e imprimir o nmero do municpio mais populoso e o nmero do estado a que pertence. Considerando que a primeira coluna contm sempre a populao da capital do estado, calcular a mdia da populao das capitais dos 25 estados. 6.4.4.15 - Fazer um programa que: a) Leia uma matriz quadrada real A, de dimenso M x M (M < = 20). O valor de M est perfurado no primeiro carto. Os cartes seguintes contm cada um, os elementos de uma linha da matriz;

78

b) c)

Verifique se a matriz simtrica, ou seja, se A[i][j] = A[j][i] para i, j < = M; Imprima a palavra SIMTRICA, se a matriz A for de simetria, e NO SIMTRICA, caso contrrio.

6.4.4.16 - A varivel composta X, de N linhas por 4 colunas, contm informao sobre alunos da universidade. Os elementos da primeira, segunda, terceira e quarta colunas so respectivamente, o nmero de matrcula, sexo (0 ou 1), nmero do curso e a mdia geral do curso. Fazer um programa que: a) Leia o nmero N de alunos (N < = 2000); b) Leia as informaes sobre os alunos; c) Determine e imprima o nmero da matrcula do aluno de sexo 1, curso 153 que obteve a melhor mdia. Supor a inexistncia de empate. 6.4.4.17 - Fazer um programa que efetue um produto matricial. Seja (M x N) e B (N x M) as matrizes fatores, sendo M < = 40 e N < = 70. Devero ser impressas as matrizes A, B e a matriz produto obtida. 6.4.4.18 - A tabela dada, a seguir, contm vrios itens que estocados em vrios armazns de uma companhia. fornecido, tambm, o custo de cada um dos produtos armazenados.
Produto 1 (unid.) Armazm 1 Armazm 2 Armazm 3 Custo (R$) Produto 2 (unid.) Produto 3 (unid.)

1200 1400 2000 260

3700 4210 2240 420

3737 4224 2444 330

Fazer um programa que: a) Leia o estoque inicial; b) Determine e imprima quantos itens esto armazenados em cada armazns; c) Qual o armazm que possui a maior quantidade de produto 2 armazenado. d) O custo total de cada produto em cada armazm; estoque em cada armazm; cada produto em todos os armazns. 6.4.4.19 - Ler uma matriz e imprimir os elementos da diagonal principal. 6.4.4.20 - Leia uma matriz M x N (M < = 10 e N < = 20), e em seguida ordene-a em ordem crescente. Ao final, imprima esta matriz, ordenada. 6.4.4.21 - Ler uma matriz e somar o valor de uma constante, lida do teclado, matriz triangular superior. Imprimir a matriz resultante. 6.4.4.22 - Calcular o produto de uma matriz A x B. Obs.: Verifique as dimenses. 6.4.4.23 - Ler uma matriz A[10][10], somar os elementos de cada uma das linhas e armazenar em um vetor V[10]. Imprimir a matriz A, o vetor V e a soma dos elementos do vetor. Obs.: Realizar toda a impresso ao final. 6.4.4.24 - Ler uma matriz A e calcular a soma dos elementos da diagonal principal. 6.4.4.25 - Fazer um programa que: a) Leia duas matrizes quadradas A e B com M < = 10; b) Apresente um menu ao usurio que possibilite a escolhas das seguintes opes: soma (em uma matriz C), multiplicao (em uma matriz C) e ordenao (da matriz A); c) Realize a opo desejada pelo usurio e imprima.

79

UNIDADE 7 STRINGS E CARACTERES

7.1 Definio
Os caracteres so peas fundamentais dos programas-fonte. Cada programa composto de uma seqncia de caracteres que ao serem agrupados de uma forma significativa so interpretados pelo computador como uma srie de instrues usadas para realizar uma tarefa. Um programa pode conter constantes de caracteres. Uma constante de caractere um valor inteiro representado como um caractere entre aspas simples. O valor da constante de caracteres o valor inteiro do caractere no conjunto de caracteres do equipamento. Por exemplo, z representa o valor inteiro do z, e \n representa o valor inteiro de uma nova linha. Uma string uma srie de caracteres tratada como uma unidade simples. Uma string pode incluir letras, dgitos e vrios caracteres especiais como +, -, *, /, $ e outros. Ou seja, strings so vetores de caracteres. Devemos apenas ficar atentos para o fato de que as strings tm o seu ltimo elemento como um '\0' (nulo). A declarao geral para uma string : char nome_da_string [tamanho];

7.1.1 Observaes Importantes


Ao declarar um vetor de caracteres para conter uma string, o vetor deve ser suficientemente grande para armazenar a string e seu caractere NULL de terminao. Devemos lembrar que o tamanho da string deve incluir o '\0' final. Por essa razo necessrio declarar matrizes de caracteres como sendo um caractere mais longo que a maior string que elas devem guardar. Uma string pode ser atribuda a um vetor de caracteres usando scanf. Porm, a funo scanf() ler os caracteres at que um espao ou um indicador de nova linha ou de fim de linha seja encontrado. Para realizar a leitura de strings que envolvem sentenas (frases) utilizamos o comando gets() explicado logo a seguir.

7.2 Funes para Manipulao de Strings


As funes apresentadas nestas sees esto no arquivo cabealho string.h (exceto funo gets). A biblioteca padro do C possui diversas funes que manipulam strings. Estas funes so teis pois no se pode, por exemplo, igualar duas strings: string1=string2; /* NAO faca isto */

Logo, as strings devem ser igualadas elemento a elemento. Quando vamos fazer programas que tratam de string muitas vezes podemos fazer bom proveito do fato de que uma string termina com '\0' (isto , o nmero inteiro 0). Veja, por exemplo, o programa abaixo que serve para igualar duas strings (isto , copia os caracteres de uma string para o vetor da outra): #include <stdio.h> void main () { int cont; char str1[100],str2[100]; .... /* Aqui o programa le str1 que sera copiada para str2 */
80

.... }

Para (cont=0; str1[cont]; cont++) str2[cont]=str1[cont]; str2[cont]='\0'; /* Aqui o programa continua */

A condio no loop Para acima baseada no fato de que a string que est sendo copiada termina em '\0'. Quando o elemento encontrado em str1[count] o '\0', o valor retornado para o teste condicional falso (nulo). Desta forma a expresso que vinha sendo verdadeira (no zero) continuamente, torna-se falsa.

7.2.1 Get String (gets)


A funo gets() l os caracteres do dispositivo padro de entrada (teclado) para o seu argumento um vetor do tipo char at que um caractere de nova linha ou o indicador de fim de arquivo seja encontrado. Um caractere NULL (\0) ser adicionado ao vetor quando a leitura terminar. Sua forma geral : gets (nome_da_string); O programa abaixo demonstra o funcionamento da funo gets(): #include <stdio.h> void main () { char string[100]; printf ("Digite o seu nome: "); gets (string); printf ("\n\n Ola %s",string); } Como o primeiro argumento da funo printf() uma string tambm vlido fazer: printf (string); /* isto simplesmente imprimir a string. */

7.2.2 String Copy (strcpy)


Sua forma geral : strcpy (string_destino,string_origem); A funo strcpy() copia a string-origem para a string-destino. A string-destino deve ser grande o suficiente para armazenar a string origem e seu caractere NULL de terminao que tambm copiado. Exemplo: #include <stdio.h> #include <string.h> void main () { char str1[100],str2[100],str3[100]; printf ("Entre com uma string: "); gets (str1);
81

strcpy (str2,str1); /* Copia str1 em str2 */ strcpy (str3,"Voce digitou a string "); /* Copia "Voce digitou a string" em str3 */ printf ("\n\n%s%s",str3,str2); }

7.2.3 String Concatenate (strcat)


A funo strcat() tem a seguinte forma geral: strcat (string_destino,string_origem); Ela anexa seu segundo argumento uma string ao seu primeiro argumento um vetor de caracteres contendo uma string. O primeiro caractere do Segundo argumento substitui o NULL (\0) que termina a string no primeiro argumento. O programador deve se assegurar de que o vetor usado para armazenar a primeira string, a segunda string e o caractere NULL de terminao (copiado da segunda string). A string de origem permanecer inalterada e ser anexada ao fim da string de destino. Exemplo: #include <stdio.h> #include <string.h> void main () { char str1[100],str2[100]; printf ("Entre com uma string: "); gets (str1); strcpy (str2,"Voce digitou a string "); strcat (str2,str1); /* str2 armazenara' Voce digitou a string + o conteudo de str1 */ printf ("\n\n%s",str2); }

7.2.4 String Length (strlen)


Sua forma geral : strlen (string); A funo strlen() retorna o comprimento da string fornecida. O terminador nulo no contado. Isto quer dizer que, de fato, o comprimento do vetor da string deve ser um a mais que o inteiro retornado por strlen(). Um exemplo do seu uso: #include <stdio.h> #include <string.h> void main () { int size; char str[100]; printf ("Entre com uma string: "); gets (str); size=strlen (str);
82

printf ("\n\nA string que voce digitou tem tamanho %d",size); }

7.2.5 String Compare (strcmp)


Sua forma geral : strcmp (string1,string2); A funo strcmp() compara a primeira string com a segunda, caractere por caractere. A funo retorna 0 (zero) se as strings forem iguais, um valor negativo se a primeira string for menor do que a segunda e um valor positivo se a primeira string for maior do que a segunda. Observao: Lembre-se de que strcmp() retorna falso se as strings so iguais. Assegure-se de usar o operador ! para reverter a condio (Exemplo 02), se voc estiver testando igualdade. Exemplo 01: #include <stdio.h> #include <string.h> void main () { char str1[100],str2[100]; printf ("Entre com uma string: "); gets (str1); printf ("\n\nEntre com outra string: "); gets (str2); if (strcmp(str1,str2)) printf ("\n\nAs duas strings so diferentes."); else printf ("\n\nAs duas strings so iguais."); } Exemplo 02: #include<stdio.h> #include<conio.h> void main() { char s1[80], s2[80]; gets(s1); gets(s2); printf(Comprimentos: %d %d\n, strlen(s1), strlen(s2)); if(!strcmp(s1,s2)) printf(As strings so iguais); strcat(s1, s2); printf(%s\n, s1); strcpy(s1, Isso um teste.\n printf(s1); }

7.2.6 String Lower (strlwr)


Prottipo: char strlwr(char *str);
83

A sua forma geral : strlwr(string); A funo strlwr() converte a string apontada por str em letras minsculas. Ela retorna str.

7.2.7 String Upper (strupr)


Prottipo: char *strupr(char *str); A sua forma geral : strupr(string); A funo strupr() converte a string apontada por str em letras maisculas. Ela retorna str.

7.2.8 String Reverse (strrev)


Prottipo: char *strrev(char *str); A sua forma geral : strrev(string); A funo strrev() inverte todos os caracteres, exceto o terminador nulo, na string apontada por str. Ela retorna str.

7.2.9 String Set (strset)


Prottipo: char *strset(char *str, int ch); A sua forma geral : strset(string, caracter); A funo strset() configura todos os caracteres na string apontada por str para o valor de ch. Ela retorna str.

7.3 Funes para Manipulao de Caracteres


A biblioteca de manipulao de caracteres ctype.h inclui vrias funes que realizam testes teis e manipulaes de dados de caracteres. Cada funo recebe UM caractere representado como um int ou EOF como argumento.

84

7.3.1 Funo tolower


A funo tolower converte uma letra maiscula em uma letra minscula e retorna a letra minscula. Se o argumento no for uma letra maiscula, tolower retorna o argumento inalterado.

7.3.2 Funo toupper


A funo toupper converte uma letra minscula em uma letra maiscula e retorna a letra maiscula. Se o argumento no for uma letra minscula, toupper retorna o argumento inalterado.

7.3.3 Outras Funes


isdigit(int c) isalpha(int c) isalnum(int c) isxdigit(int c) islower(int c) isupper(int c) isspace(int c) Retorna um valor verdadeiro se c for um dgito e 0 (falso) em caso contrrio Retorna um valor verdadeiro se c for uma letra e 0 em caso contrrio Retorna um valor verdadeiro se c for um dgito ou uma letra e 0 em caso contrrio Retorna um valor verdadeiro se c for um caractere de dgito hexadecimal e 0 em caso contrrio Retorna um valor verdadeiro se c for uma letra minscula e 0 em caso contrrio Retorna um valor verdadeiro se c for uma letra maiscula e 0 em caso contrrio Retorna um valor verdadeiro se c for um caractere de espao em branco nova linha (\n), espao ( ), avano de folha (\f), carriage return (\r), tabulao horizontal (\r) ou tabulao vertical (\v) e 0 em caso contrrio Retorna um valor verdadeiro se c for um caractere de controle e 0 em caso contrrio Retorna um valor verdadeiro se c for um caractere imprimvel diferente de um espao, um dgito ou uma letra e 0 em caso contrrio Retorna um valor verdadeiro se c for um caractere imprimvel incluindo espao ( ) e 0 em caso contrrio Retorna um valor verdadeiro se c for um caractere imprimvel diferente de espao ( ) e 0 em caso contrrio

iscntrl(int c) ispunct(int c) isprint(int c) isgraph(int c)

7.4 Limpeza do Buffer do Teclado


O teclado de um computador funciona da seguinte forma: conforme as teclas so pressionadas, os cdigos das mesmas so armazenados, de forma seqencial, no buffer do teclado que possui capacidade para armazenamento de 16 teclas; sempre que possvel, a CPU do computador retira do buffer a tecla que est armazenada a mais tempo; no caso da CPU estar ocupada com outras tarefas, e no caso de serem digitas mais teclas do que a capacidade do buffer, um sinal sonoro enviado informando que o buffer est cheio (16 teclas armazenadas). Mediante o seguinte programa: include <stdio.h> void main(){ int numero; char palavra[9]; int i=-1;

85

printf("\nEntre com uma palavra(maximo 8 caracteres) <ENTER>: "); do{ i++, palavra[i]=getchar(); }while ((palavra[i] != 10)&&(i<7)); palavra[i+1] = '\0'; printf("\nA palavra digitada foi %s",palavra); printf("\nEntre com um numero <ENTER>: "); scanf("%d",&numero); printf("\nO numero digitado foi %d",numero); } Caso haja a insero de uma palavra com mais de 8 caracteres, que o tamanho mximo de palavra, o texto digitado a mais ficar guardado no buffer do teclado e conseqentemente ser utilizado para atribuir um valor a numero no comando scanf() logo em seguida, gerando um erro. Para que este erro no ocorra, necessria a utilizao do comando fflush(stdin) para que seja feita esta limpeza. Com o trmino normal do programa ou quando os buffers esto cheios, os mesmos so automaticamente esvaziados, porm, no programa anterior, precisamos realizar esta operao antes do comando de leitura de numero. Ento inserimos a linha fflush(stdin); antes da linha de leitura. Explanao do comando: Inicialmente necessrio entender o conceito de Streams: O sistema de arquivos de C projetado para trabalhar com uma ampla variedade de dispositivos, incluindo terminais, acionadores de disco e acionadores de fita. Embora cada um dos dispositivos seja muito diferente, o sistema de arquivo com buffer transforma-os em um dispositivo lgico chamado de stream. Todas as streams comportam-se de forma semelhante. Pelo fato de as streams serem amplamente independentes do dispositivo, a mesma funo pode escrever em um arquivo em disco ou em algum outro dispositivo, como o console. As Streams Padro Sempre que um programa em C comea a execuo, trs streams so abertas automaticamente. Elas so a entrada padro (stdin), a sada padro (stdout) e a sada padro de erro (stderr). Normalmente, essas streams referem-se ao console, mas podem ser redirecionadas pelo sistema operacional para algum outro dispositivo em ambientes que suportam redirecionamentos de E/S. Em geral, stdin utilizada para ler do console e stdout e stderr , para escrever no console. Tenha em mente que stdin, stdout e stderr no so variveis no sentido normal e no podem receber nenhum valor. Alm disso, da mesma maneira que so criados automaticamente no incio do seu programa, os ponteiros so fechados automaticamente no final; voc no deve tentar fecha-los. O comando fflush Biblioteca: stdio.h Tipo: int flush(FILE *stream); Se stream aponta para um arquivo de entrada, o contedo do buffer de entrada esvaziado. Caso a stream seja associada a um arquivo aberto para escrita, uma chamada a fflush() escreve fisicamente no arquivo o contedo do buffer de sada. Nos dois casos o arquivo continua aberto. Exemplo Corrigido: include <stdio.h> void main(){

86

int numero; char palavra[9]; int i=-1; printf("\nEntre com uma palavra(maximo 8 caracteres) <ENTER>: "); do{ i++, palavra[i]=getchar(); }while ((palavra[i] != 10)&&(i<7)); palavra[i+1] = '\0'; fflush(stdin); printf("\nA palavra digitada foi %s",palavra); printf("\nEntre com um numero <ENTER>: "); scanf("%d",&numero); printf("\nO numero digitado foi %d",numero); }

87

UNIDADE 8 - FUNES

8.1 - Introduo
A maioria dos programas de computador que resolvem problemas do mundo real muito maior do que os algoritmos que vimos at agora. A experincia tem mostrado que a melhor maneira de desenvolver e manter um programa grande constru-lo a partir de pequenas partes ou mdulos, sendo cada uma delas mas fcil de manipular do que o programa original. Os mdulos em C so chamados funes. Geralmente, os programas em C so escritos combinando novas funes que o programador escreve com funes prontas disponveis na biblioteca padro do C (C standard library).

8.2 - Funcionamento
O programador pode escrever funes para definir tarefas especficas e que podem ser utilizadas em muitos locais dos programas. Algumas vezes elas so chamadas funes definidas pelo programador. As instrues reais que definem a funo so escritas apenas uma vez e so escondidas das outras funes. As funes so ativadas (chamadas ou invocadas) por uma chamada de funo. A chamada de funo especifica o nome da funo e fornece informaes (como argumentos) de que a referida funo necessita para realizar a tarefa designada.

FUNES Conjunto de comandos agrupados em um bloco que recebe um nome e atravs deste pode ser ativado.

Melhor maneira de desenvolver e manter um programa grande constru-lo a partir de pequenas partes ou mdulos. Os mdulos em C so chamados de funes. As funes permitem ao programador modularizar um programa. Todas as variveis declaradas em definies de funes so variveis locais. Varivel local: Uma varivel local tem validade apenas dentro do bloco onde declarada, isto significa que podem ser apenas acessadas e modificadas dentro de um bloco. O espao de memria alocado para esta varivel criado quando a execuo do bloco iniciada e destrudo quando encerrado, assim variveis de mesmo nome mas declaradas em blocos distintos, so para todos os efeitos, variveis distintas. Variveis Globais: dita global, se for declarada fora do bloco de uma funo. Uma varivel global tem validade no escopo (por escopo de uma varivel entende-se o bloco de cdigo onde esta varivel vlida) de todas as funes, isto , pode ser acessada e modificada por qualquer funo. O espao de memria alocado para esta varivel criado no momento de sua declarao e destrudo apenas quando o programa encerrado.

8.2.1 Porque usar funes?


Para permitir o reaproveitamento de cdigo j construdo (por voc ou por outros programadores); Para evitar que um trecho de cdigo que seja repetido vrias vezes dentro de um mesmo programa; Para permitir a alterao de um trecho de cdigo de uma forma mais rpida. Com o uso de uma funo preciso alterar apenas dentro da funo que se deseja;

88

Para que os blocos do programa no fiquem grandes demais e, por conseqncia, mais difceis de entender; Para facilitar a leitura do programa-fonte. Para separar o programa em partes(blocos) que possam ser logicamente compreendidos de forma isolada.

Exemplo: Achar o maior entre dois valores reais digitados pelo usurio: Corpo da funo antes do programa principal (SEM PROTOTIPAO) #include <conio.h> #include <stdio.h> float max(float a, float b){ if(a > b){ return(a); }else{ return(b); } }

// funcao max()

void main(){ // programa principal float num1,num2,m; clrscr(); puts("*** Valor maximo de dois reais ***"); puts("Digite dois numeros:"); scanf("%f %f",&num1,&num2); m = max(num1,num2); // chamada da funcao printf("O maior valor e': %f",m); getch(); } Corpo da funo depois do programa principal (COM PROTOTIPAO) #include <conio.h> #include <stdio.h> void main(){ // programa principal float max(float,float); // prototipo da funcao max() float num1, num2; clrscr(); puts("*** Valor maximo de dois reais ***"); puts("Digite dois numeros"); scanf("%f %f",&num1,&num2); printf("O maior valor e': %f",max(num1,num2)); // chamada a funcao getch(); } float max(float a, float b){ // funcao max() if(a > b){ return(a); }else{ return(b); } }

89

8.2.2 Erros Comuns de Programao


Omitir o tipo-do-valor-de-retorno em uma definio de funo causa um erro de sintaxe se o prottipo da funo especificar um tipo de retorno diferente de int. Esquecer de retornar um valor de uma funo que deve fazer isso pode levar a erros inesperados. O padro ANSI estabelece que o resultado dessa omisso no definido. Retornar um valor de uma funo cujo tipo de retorno foi declarado void causa um erro de sintaxe. Declarar parmetros da funo do mesmo tipo como float x, y em vez de float x, float y. A declarao de parmetros float x, y tornaria na realidade y um parmetros do tipo int porque int o default. Colocar um ponto-e-vrgula aps o parntese direito ao encerrar a lista de parmetros de uma definio de funo um erro de sintaxe. Esquecer o ponto-e-vrgula no final de um prottipo de funo causa um erro de sintaxe. Definir um parmetro de funo novamente como varivel local dentro da funo um erro de sintaxe. Definir uma funo dentro de outra funo um erro de sintaxe.

8.2.3 Funes Matemticas


Para evitar reinventar a roda, aconselha-se que o acadmico tenha um bom conhecimento das principais funes da ferramenta/linguagem utilizada. O padro ANSI/ISO C/C++ define 22 funes matemticas que se dividem nas seguintes categorias: Funes trigonomtricas Funes hiperblicas Funes exponenciais e logartmicas Diversas Todas as funes matemticas requerem que o cabealho <math.h> seja includo em qualquer programa que as utiliza. Alm de declarar as funes matemticas, esse cabealho define trs macros (ser visto o conceito de macro no captulo 9) chamadas EDOM, ERANGE e HUGE_VAL. As funes da biblioteca matemtica permitem ao programador realizar determinados clculos matemticos comuns. Funes Matemticas definidas pelo padro ANSI/ISO C/C++ double acos(double arg) double frexp(double num, int *exp) double asin(double arg) double ldexp(double num, int exp) double atan(double arg) double log(double num) double atan2(double y, double x) double log10(double num) double ceil(double num) double modf(double num, double *i) double cos(double arg) double pow(double base, double exp) double cosh(double arg) double sin(double arg) double exp(double arg) double sinh(double arg) double fabs(double num) double sqrt(double num) double floor(double num) double tan(double arg) double fmod(double x, double y) double tanh(double arg)

8.2.3 Exerccios:
1. Escreva uma algoritmo utilizando funoque retorne o menor nmero entre trs nmeros de ponto flutuante.

90

2.

Escreva um programa que determine e imprima todos os nmeros perfeitos entre 1 e 10.000, mediante utilizao de funo. Imprima os fatores de cada nmero encontrado para confirmar que ele realmente perfeito.

Sugesto: Escreva uma funo perfeito que determine se o parmetro numero um nmero perfeito.

3.

Mostre o valor de x aps a execuo de cada uma das seguintes instrues: a) x = fabs(7.5) b) x = floor(7.5) c) x = fabs(0.0) d) x = ceil(0.0) e) x = fabs(-6.4) f) x = ceil(-6.4) g) x = ceil(-fabs(-8+floor(-5.5))) Escreva um programa que leia vrios nmeros e use a instruo a seguir para arredondar cada um desses nmeros para o inteiro mais prximo. Para cada nmero processado, imprima o nmero original e o nmero arredondado. y = floor (x + .5);

4.

Sugesto: Os computadores esto desempenhando um papel cada vez maior em educao. Escreva um programa que ajudar os alunos da escola do primeiro grau a aprender a multiplicar. Use rand para produzir dois inteiros positivos de um dgito. O programa deve ento imprimir uma pergunta do tipo Quanto 6 vezes 7?. O aluno deve digitar a resposta. Seu programa deve imprimir Muito Bem! e fazer outra pergunta de multiplicao. Se a resposta estiver errada, o programa deve imprimir No. Tente novamente, por favor. e ento deixar que o aluno fique tentando acertar a mesma pergunta repetidamente at por fim conseguir. Modifique o programa anterior de forma que sejam impressos vrios comentrios para cada resposta correta e incorreta, como se segue: - Comentrios para uma resposta correta: - Muito Bem! - Excelente! - Bom Trabalho! - Certo. Continue assim! Comentrios para uma resposta incorreta - No. Tente novamente, por favor. - Errado. Tente mais uma vez. - No desista! - No. Continue tentando.

Modifique o programa anterior para que ele calcule a porcentagem de resposta corretas.

91

8.3 DEFINIO DE FUNES


Se a funo no retorna nenhum valor para o programa que a chamou devemos definir o retorno como void, ou seja, um retorno ausente. Se nenhum tipo de retorno for especificado o compilador entender que o retorno ser tipo int. Em C existe apenas UM valor de retorno para funes, ou seja, no se pode retornar dois ou mais valores. Porm, isto no uma limitao sria, pois o uso de ponteiros contorna o problema. O comando return() tem duas finalidades: - Determina o fim lgico da rotina, e - Valor de retorno da funo.

8.3.1 CHAMANDO FUNES


Por Valor: feita uma cpia dos argumentos e a mesma passada para a funo chamada. As modificaes na cpia no afetam o valor original de uma varivel na funo que realizou a chamada. Deve ser usada sempre que a funo chamada no precisa modificar o valor da varivel original da funo chamadora. Por Referncia: A funo chamadora permite realmente que a funo chamada modifique o valor original da varivel. S deve ser usada com funes confiveis que precisem modificar a varivel original.

8.3.2 REGRAS DE ESCOPO


Um escopo de um identificador a parte do programa na qual ele pode ser referenciado. Por exemplo, quando declaramos uma varivel local em um bloco, podem ser feitas referncias a ela apenas naquele bloco ou em blocos ali aninhados. Os quatro escopos de um identificador so escopo de: funo, arquivo, bloco e prottipo de funo. - Funo: Os rtulos so os nicos identificadores com este escopo, pois eles podem ser usados em qualquer lugar de uma funo na qual aparecem, mas no pode ser feita qualquer referncia a eles fora do corpo da funo. - Arquivo: Para identificadores declarados fora de qualquer funo. Tal identificador conhecido por todas as funes, desde o local onde declarado at o final do arquivo. Ex.: Variveis globais, definies de funes e prottipos de funes colocados fora de uma funo. - Bloco: Para identificadores declarados dentro de um bloco. As variveis locais declaradas no incio de uma funo possuem este escopo, assim como os parmetros, que so considerados variveis locais por ela. - Prottipo de funo: Os nicos identificadores so os utilizados na lista de parmetros de um prottipo de funo.

8.3.3 CLASSES DE ARMAZENAMENTO


Uma classe de armazenamento de um identificador ajuda a determinar seu tempo de armazenamento, escopo e linkage. - Tempo de Armazenamento: perodo durante o qual aquele identificador permanece na memria. - Escopo: Onde se pode fazer referncia quele identificador dentro do programa. - Linkage: Determina para um programa com vrios arquivos-fonte, se um identificador conhecido apenas no arquivo-fonte atual ou em qualquer arquivo-fonte com as declaraes adequadas.

92

As quatro classes de armazenamento dos identificadores podem ser divididas em dois tempos de armazenamento: Tempo de Armazenamento Automtico e Tempo de Armazenamento Esttico. - Tempo de Armazenamento Automtico: So criadas quando o bloco no qual so declaradas acionado. Elas existem enquanto o bloco estiver ativo e so destrudas quando o bloco deixado para trs. Palavras-chave: auto e register. - Auto: As variveis locais possuem tempo de armazenamento automtico por default, portanto a palavra-chave auto raramente usada. - Register: Pode ser colocado antes de uma declarao de varivel automtica para indicar ao compilador que a varivel seja conservada em um dos registradores de hardware de alta velocidade do computador. Freqentemente usado com contadores ou para clculo de totais. - Tempo de Armazenamento Esttico: Existem desde o instante em que o programa comeou a ser executado. Entretanto, muito embora as variveis e os nomes das funes existam quando o programa comea a ser executado, isso no significa que esses identificadores podem ser usados em todo o programa. Palavras-chave: extern e static. - Extern: Variveis globais e nomes das funes so pertencentes desta classe por default. - Static: As variveis locais declaradas com static so conhecidas apenas na funo na qual so definidas, mas, diferentemente das variveis automticas, as variveis locais static conservam seus valores quando a funo encerrada. Na prxima vez em que a funo for chamada, a varivel local static conservar o valor que tinha quando a funo foi executada pela ltima vez.

8.3.4 PASSANDO MATRIZES PARA FUNES


A passagem de matrizes, como argumentos, para funes, uma exceo conveno de passagem de parmetros com chamada por valor. Quando uma matriz usada como argumento para uma funo, apenas o endereo da matriz passado, no uma cpia da matriz inteira. Na verdade, passado o endereo do primeiro elemento da matriz. Por ser passado o endereo inicial da matriz, a funo chamada sabe precisamente onde a matriz est armazenada, portanto, quando a funo chamada modifica os elementos da matriz em seu corpo de funo, os elementos reais esto sendo modificados em suas posies originais. 8.3.4.1 Passando Matrizes Unidimensionais para Funes Na passagem de vetores para funes: Nome_da_funo (Nome_do_vetor); Onde, Nome_da_funo o nome da funo que se est chamando; e Nome_do_vetor o nome da matriz unidimensional que queremos passar. APENAS o nome do vetor, SEM ndices. Na declarao de funes que recebem vetores: Tipo_funo Nome_funo (Tipo_vetor Nome_vetor[]); Onde, Tipo_funo o tipo de retorno da funo; Nome_funo o nome da funo; Tipo_vetor o tipo de elementos do vetor; e

93

Nome_vetor[ ] o nome do vetor. Declara-se um NDICE VAZIO para indicar que estamos recebendo um vetor. Ateno: Ao contrrio de variveis comuns, o contedo de um vetor PODE SER MODIFICADO pela funo chamada, como visto anteriormente. Isto ocorre porque a passagem de matrizes para funes feita de modo especial dito passagem por referncia ou endereo.

8.3.4.2 Passando Matrizes Multidimensionais para Funes


Na passagem de matrizes para funes: Semelhante a passagem de vetores: chama-se a funo passando o nome da matriz, SEM NDICES. Nome_da_funo (Nome_da_matriz); Onde, Nome_da_funo o nome da funo que se est chamando; e Nome_da_matriz o nome da matriz multidimensional que queremos passar. APENAS o nome do vetor, SEM ndices. Na declarao de funes que recebem matrizes: Tipo_funo Nome_funo (Tipo_matriz Nome_matriz[tam_1][tam_2]...[tam_n]); Onde, Tipo_funo o tipo de retorno da funo; Nome_funo o nome da funo; Tipo_matriz o tipo de elementos da matriz; e Nome_matriz[ ] o nome da matriz. preciso declarar os ndices contendo os tamanhos de cada dimenso da matriz. Exemplo: O programa abaixo demonstra a diferena entre passagem de parmetros por valor e por referncia mediante a utilizao de matrizes. #include<stdio.h> #include<conio.h> #define N 5 void imprime_vetor(int []); //prototipao das funes, pelo fato delas estarem localizadas abaixo do main. void modifica_vetor(int []); void modifica_elemento(int);

void main() { int a[N] = {0, 1, 2, 3, 4}; //inicializao do vetor printf("\nVetor Original: \n\n"); imprime_vetor(a); //chama a funo para a impresso do vetor, passando ele como argumento

94

modifica_vetor(a); //chama a funo para modificar os elementos do vetor printf("\nValores modificados do vetor: \n\n"); imprime_vetor(a); //imprime os elementos agora modificados printf("\n\nO valor de a[3] %d\n", a[3]); modifica_elemento(a[3]); // modifica um elemento isolado do vetor, porm este passado por valor printf("\n\nO valor de a[3] %d\n", a[3]); /*imprime o elemento no modificado, pois foi feita uma passagem por valor, que faz uma cpia deste valor e atribu a varivel e que tida como local na funo modifica_elemento*/ } void imprime_vetor(int b[]) //recebe um vetor inteiro b { for(int i=0; i<N; i++) printf("%3d ", b[i]); //imprime cada elemento isolado printf("\n"); } void modifica_vetor(int b[]) //recebe um vetor inteiro b { for(int i=0; i<N; i++) b[i] *= 2; //modifica cada elemento multiplicando ele mesmo por 2 } void modifica_elemento(int e) //recebe uma cpia do elemento passado como argumento para a funo. { printf("\n\nValor em Modifica_Elemento %d", e*=2); //tenta modificar o elemento }

8.4 A instruo return


A instruo return tem duas utilizaes importantes. Primeiro, provoca uma sada imediata da funo. Isto , faz com que a execuo do programa retorne para o cdigo de chamada. Segundo, pode ser utilizada para retornar um valor.

8.4.1 Retornando de uma funo


Uma funo termina a execuo e retorna para o chamador de uma de duas maneiras. A primeira quando a ltima instruo na funo executou e, conceitualmente, a chave de trmino ( } ) da funo encontrada. Por exemplo, essa funo aceita um endereo para uma string como um parmetro e exibe a string de trs para frente: void inverte(char texto[]) { for(int i = strlen(texto)-1; i >= 0; i--) printf(%c, texto[i]); } Uma vez que a string foi exibida, no h nada para inverte() fazer, ento ela retorna para o lugar de onde foi chamada. Realmente, no muitas funes utilizam esse mtodo padro de terminar sua execuo. A maioria das funes conta com a instruo return para interromper a execuo porque um valor deve ser retornado ou fazer o cdigo de uma funo mais simples e mais eficiente.

95

8.4.2 Retornando valores


Todas as funes, exceto aquelas do tipo void, retornam um valor. Esse valor especificado pela instruo return. Em C++, uma funo no-void deve utilizar uma instruo return que retorna um valor. Contanto que uma funo no seja declarada como void, voc pode utiliza-la como um operando em uma expresso. Porm, como uma regra geral, uma chamada de funo no pode estar no lado esquerdo de uma atribuio. Uma instruo como troca(x, y) = 100/ /*instruo incorreta */ est errada. O compilador ir sinaliza-la como um erro e no compilar um programa que a contiver. Se uma funo for declarada como void, no pode ser utilizada em qualquer expresso. Quando vocs escreve programas, suas funes sero de trs tipos. O primeiro tipo simplesmente computacional. Essas funes so especificamente projetadas para realizar operaes em seus argumentos e retornar um valor com base nessa operao. Uma funo computacional uma funo pura. Os exemplos so as funes de biblioteca padro sqrt() e sin(), que calculam a raiz quadrada e o seno de seus argumentos. O segundo tipo de funo manipula as informaes e retorna um valor que simplesmente indica o sucesso ou falha dessa manipulao. Um exemplo a funo de biblioteca fwrite(), que grava as informaes em um arquivo de disco. Se a operao de gravao for bem-sucedida, fwrite() retorna o nmero de itens gravados com sucesso. Se um erro ocorrer, fwrite() retornar um nmero que no igual ao nmero de itens que foi solicitado para gravar. O ltimo tipo de funo no tem nenhum valor explcito de retorno. Em essncia, a funo estritamente procedural e no produz nenhum valor. Um exemplo srand(), que inicializa a funo aleatria de gerador de nmero rand(). s vezes, as funes que realmente no produzem um resultado interessante freqentemente retornam algo de qualquer jeito..

8.4.3 O que main() retorna?


A funo main() retorna um inteiro para o processo de chamada, que geralmente o sistema operacional. Retornar um valor de main() equivalente a chamar exit() com o mesmo valor. Um valor de retorno de 0 indica que o programa terminou normalmente. Todos os outros valores indicam que algum erro ocorreu com a sada do programa.

8.5 RECURSIVIDADE
Definio Recurso o processo pelo qual uma funo chama a si mesma repetidamente um nmero finito de vezes. Funo Recursiva uma funo que chama a si mesma, ou diretamente ou indiretamente por meio de outra funo. Caractersticas Os mtodos recursivos para soluo de problemas possuem vrios elementos em comum. Uma funo recursiva chamada para resolver o problema. Na realidade, a funo s sabe resolver o(s) caso(s) mais simples, ou o(s) chamado(s) caso(s) bsico(s). Se a funo for chamada em um problema mais complexo, ela divide o problema em duas partes tericas: - um aparte que a funo sabe resolver; - e outra que ela no sabe. Funcionamento
96

Para tornar vivel a recurso, a segunda parte deve ser parecida com o problema original, mas ser uma verso um pouco mais simples ou menor do que ele. Por esse novo problema ser parecido com o problema original, a funo chama (lana) uma cpia de si mesma para lidar com o problema menor. A etapa de recurso executada enquanto a chamada original para a funo ainda no tiver sido concluda. Ela pode levar a outras chamadas recursivas, medida que a funo continuar a dividir cada problema em duas partes conceituais. Desvantagens A maioria das funes recursivas no minimiza significativamente o tamanho do cdigo nem melhora a utilizao da memria. Alm disso, as verses recursivas da maioria das rotinas podem ser executadas um pouco mais lentamente que suas equivalentes iterativas devido s repetidas chamadas funo (seqncia de overhead). Isso pode custar caro tanto em tempo de processador como em espao de memria. Vantagens A principal vantagem das funes recursivas que voc pode usa-las para criar verses mais claras e simples de vrios algoritmos. Observaes Aos escrever funes recursivas, voc deve ter um comando if em algum lugar para forar a funo a retornar sem que a chamada recursiva seja executada. Se voc no o fizer, a funo nunca retornar quando chamada. Recurso x Iterao RECURSO ITERAO Usa estrutura de seleo Usa estrutura de repetio Obtm repetio por intermdio de chamadas Usa explicitamente uma estrutura de repetio repetidas de funes Termina quando um caso bsico reconhecido Termina quando uma condio de continuao do loop se torna falsa Permanece produzindo verses mais simples do Permanece modificando um contador at que ele problema original at chegar no caso bsico assuma um valor que faa a condio de continuao do loop se tornar falsa Ocorre um loop infinito se a etapa de recurso no Ocorre um loop infinito se o teste de continuao do reduzir gradualmente o problema de forma que ele loop nunca se tornar falso convirja para o caso bsico

8.6 Exerccios
1 Crie um funo float round(float r) que faa o arredondamento de nmeros reais: Por exemplo: 5 = round(5.4), 7 = round(6.5). 2 Crie uma funo int sim_nao(void) que espera o usurio pressionar as teclas [s] ou [n] retornando 1 ou 0 respectivamente. Se o usurio pressionar qualquer outra tecla um som (de advertncia) de 50 Hz por 250 ms emitido.

97

3. Faa uma funo que determine se trs nmeros a, b, c formam um tringulo ou no. A funo deve ter a seguinte declarao int tringulo(float a, float b, float c) onde o valor de retorno tem o seguinte significado: 0: no forma tringulo, 1: tringulo qualquer, 2: tringulo issceles, 3: tringulo equiltero. 4. Faa uma funo que determine se um determinado numero primo ou no. A funo deve ter a seguinte declarao int primo(int N) onde N o valor a ser testado. A funo deve retornar 1 se N primo e 0 caso contrrio. 5. Transforme o programa do fibonacci em uma funo int fib(int n) que retorna o nsimo numero de Fibonacci. 6. O maior divisor comum dos inteiros positivos a e b, que abreviamos como mdc(a, b), o maior nmero m tal que m divisor tanto de a quanto de b. Por exemplo: 4 = mdc(20,16), 7 = mdc(21,7). O valor de m pode ser calculado com o seguinte algoritmo recursivo, de Euclides: se a > b ento mdc(a, b) igual a b se resto(a, b) 0 mdc(b, resto(a, b)) caso contrrio. Faa uma funo recursiva para o clculo do mximo divisor comum de dois nmeros. 7. Caso j no tenha feito assim, transforme a funo iterativa do exerccio 5 em uma funo recursiva.

98

UNIDADE 9 O PR-PROCESSADOR

Neste tpico sero apresentadas as explanaes de apenas algumas diretivas, por serem muito utilizadas no decorrer do semestre e por estarem presentes no escopo da disciplina de ICC.

9.1 Definio
Voc pode incluir diversas instrues do compilador no cdigo-fonte de um programa em C. Elas so chamadas de diretivas do pr-processador e, embora no seja realmente parte da linguagem de programao C, expandem o escopo do ambiente de programao em C. O pr-processamento ocorre antes de um programa ser compilado, ou seja, isto quer dizer que as diretivas de compilao so comandos que no so compilados. Portanto, o pr-processador modifica o programa fonte, entregando para o compilador um programa modificado. Algumas aes possveis so: incluso de outros arquivos no arquivo que est sendo compilado, definio de constantes simblicas e macros, compilao condicional do cdigo do programa e execuo condicional das diretivas do pr-processador. Todas as diretivas do pr-processador comeam com #, e somente os caracteres de espao em branco podem aparecer antes de uma diretiva de pr-processador em uma linha. Alm disso, cada diretiva do pr-processador deve estar na sua prpria linha.

No h ponto-e-vrgula aps a diretiva de compilao. Esta uma caracterstica importante de todas as diretivas de compilao e no somente da diretiva #include.

9.2 Diretivas
Como definido pelo padro C ANSI, o pr-processador de C contm as seguintes diretivas: #if #ifdef #ifndef #else #elif #endif #include #define #undef #line #error #pragma

9.2.1 Diretiva #include


Faz com que seja includa uma cpia de um arquivo especificado no lugar da diretiva. As duas formas diretiva #include so: #include <nome_do_arquivo> #include nome_do_arquivo A diferena entre essas formas o local no qual o pr-processador procura pelo arquivo a ser includo. Se o nome do arquivo est envolvido por chaves angulares (sinais de maior e menor), o arquivo ser procurada de forma definida pelo criador do compilador. Freqentemente, isso significa procurar em algum diretrio especialmente criado para arquivos de incluso. Se o nome do arquivo est entre aspas, o arquivo procurado de uma maneira definida pela implementao. Para muitas implementaes, isso significa uma busca no diretrio de trabalho atual. Se o arquivo no for encontrado, a busca ser repetida como se o nome do arquivo estivesse envolvido por chaves angulares.

99

A maioria dos programadores tipicamente usa chaves angulares para incluir os arquivos de cabealho padro. O uso de aspas reservado geralmente para a incluso de arquivos do projeto. No entanto, no existe nenhuma regra que exija este uso.

9.2.2 Diretiva #define


A diretiva #define cria constantes simblicas constantes representadas por smbolos e macros operaes definidas como smbolos. Ou seja, ela define um identificador e uma string que o substituir toda vez que for encontrado no arquivo fonte. O padro C ANSI refere-se ao identificador como um nome de macro e ao processo de substituio como substituio de macro. A sua forma geral : #define nome_macro string Quando essa linha aparece em um arquivo, todas as ocorrncias subseqentes de nome_macro sero substitudas automaticamente por string antes de o programa ser compialdo. Por exemplo, #define PI 3.14159 substitui todas as ocorrncias subseqentes da constante simblica PI pela constante numrica 3.14159. As constantes simblicas permitem que o programador crie um nome para a constante e use o nome ao longo de todo o programa. Se a constante precisar ser modificada no programa, ela p ser modificada dentro da diretiva #define e quando o programa voltar a ser compilado, todas as ocorrncias da constante no programa sero modificadas automaticamente. Observao: Tudo direita do nome da constante simblica substitui a constante simblica. Por exemplo, #define PI = 3.14159 faz com que o pr-processador substitua todas as ocorrncias de PI por = 3.14159. Isso a causa de muitos erros lgicos e de sintaxe sutis. Redefinir a constante simblica com um novo valor tambm configura um erro. Uma vez com que um nome de macro tenha sido definido, ele pode ser usado como parte da definio de outros nomes de macro. Por exemplo, este cdigo define os valores UM, DOIS e TRS: #define #define #define UM DOIS TRES 1 UM+UM UM+DOIS

Substituio de macro simplesmente a transposio de sua string associada. Portanto, se voc quisesse definir uma mensagem de erro padro, poderia escrever algo como isto: #define MSG_E erro padro na entrada\n printf(MSG_E); O compilador substituir a string erro padro na entrada\n quando o identificador MSG_E for encontrado. Para o compilador, o comando com o printf() aparecer, na realidade, como printf(erro padro na entrada\n); Nenhuma substituio de texto ocorre se o identificador est dentro de uma string entre aspas. Por exemplo,

100

#define XYZ isso um teste printf(XYZ); no escreve isso um teste, mas XYZ. Se a string for maior que uma linha, voc pode continu-la na prxima colocando uma barra invertida no final da linha, como mostrado aqui: #define STRING_LONGA isso uma string muito longa\ que usada como um exemplo Os programadores C geralmente usam letras maisculas para identificadores definidos. Essa conveno ajuda qualquer um que esteja lendo o programa a saber de relance que uma substituio de macro ir ocorrer. Alm disso, melhor colocar todos os #defines no incio do arquivo ou em um arquivo de cabealho separado em lugar de espalha-los pelo programa. Substituio de macro usada mais freqentemente para definir nomes para nmero mgicos que aparecem em um programa. Por exemplo, voc pode ter um programa que defina uma matriz e tenha diversas rotinas que acessam essa matriz. Em lugar de fixar o tamanho da matriz com uma constante, voc poderia definir um tamanho e usar esse nome sempre que o tamanho da matriz for necessrio. Dessa forma, voc s precisa fazer uma alterao e recompilar para alterar o tamanho da matriz. Por exemplo, #define TAMANHO_MAX 100 /* ... */ float vetor[TAMANHO_MAX]; /* ... */ for (i=0; i<TAMANHO_MAX; i++) printf(%f, vetor[i]); Como TAMANHO_MAX define o tamanho da varivel vetor, se o tamanho desta precisar ser modificado no futuro, voc s precisa modificar a definio de TAMANHO_MAX. Todas as referncias subseqentes a ela sero automaticamente atualizadas quando voc recompilar seu programa. 9.2.2.3 Definindo Macros Semelhantes a Funes A diretiva #define possui outro recurso poderoso: o nome da macro pode ter argumentos. Cada vez que o nome da macro encontrado, os argumentos usados na sua definio so substitudos pelos argumentos reais encontrados no programa. As macros podem ser definidas com ou sem argumentos. Uma macro sem argumentos processadas como uma constante simblica. Considere a seguinte definio de macro com um argumento para calcular a rea de um crculo: #define AREA_CIRCULO(x) ( PI * (x) * (x) ) Sempre que AREA_CIRCULO(x) aparecer no arquivo, o valor de x substitui x no texto de substituio, a constante simblica PI substituda por seu valor (definido anteriormente) e a macro expandida no programa. Por exemplo, a instruo area = AREA_CIRCULO(4); expandida em

101

area = ( 3.14159 * (4) * (4) ); Como a expresso consiste apenas em constantes, durante a compilao, o valor da expresso calculado e atribudo varivel area. Os parnteses em torno de cada x no texto de substituio impem a ordem adequada de clculo quando o argumento da macro for uma expresso. Por exemplo, a instruo area = AREA_CIRCULO(c + 2); expandida em area = ( 3.14159 * (c + 2) * (c + 2) ); que calculada corretamente porque os parnteses impem a ordem adequada de clculo. Se os parnteses fossem omitidos, a expanso da macro seria area = 3.14159 * c + 2 * c + 2; que calculada erradamente como area = ( 3.14159 * c ) + (2 * c) + 2; devido a regra de precedncia de operadores. Para efetuar este clculo poderia ter sido definida uma funo, porm o overhead de uma chamada de funo. As vantagens da macro AREA_CIRCULO so que as macros inserem cdigo diretamente no programa evitando o overhead das funes e o programa permanece legvel porque o clculo de AREA_CIRCULO definido separadamente e recebe um nome significativo. Uma desvantagem que seu argumento calculado duas vezes. A seguir est uma definio de macro com 2 argumentos para a rea de um retngulo: #define AREA_RETANGULO(x, y) ( (x) * (y) ) Sempre que AREA_RETANGULO(x, y) aparecer no programa, os valores de x e y so substitudos no texto de substituio da macro e a macro expandida no lugar de seu nome. Por exemplo a instruo areaRet = AREA_RETANGULO(a + 4, b + 7); expandida em areaRet = ( (a + 4) * (b + 7) ); O valor da expresso calculado e atribudo a varivel areaRet.

102

ANEXO I Operadores
Os operadores de incremento e decremento so unrios que alteram a varivel sobre a qual esto aplicados. O que eles faze incrementar ou decrementar a varivel sobre a qual esto aplicados, de 1.
Ento: x++; x--; So equivalentes a: x = x + 1; x = x 1;

Estes operadores podem ser pr-fixados ou ps-fixados. A diferena que quando so pr-fixados eles incrementam e retornam o valor da varivel j incrementada. Quando so ps-fixados eles retornam o valor da varivel sem o incremento e depois incrementam a varivel.
x++ ++x x---x Exemplo: Incrementa() { Inteiro x, b; x = 1; b = x++; Escreva(x = %I, b = %I\n, x, b); } x = 2, b = 1 _ incrementa, devolvendo o valor NO atualizado incrementa devolvendo o valor atualizado decrementa devolvendo o valor NO atualizado decrementa devolvendo o valor atualizado

Exemplo: x = 23; y = x++; Em x = 23; y = ++x;

Teremos, no final y = 23 e x = 24

Teremos, no final y = 24 e x = 24

103

ANEXO II Expresses
Expresses que podem ser abreviadas
O C admite as seguintes equivalncias, que podem ser usadas para simplificar expresses ou facilitar o entendimento de um programa:
Expresso Original x = x + k; x = x k; x = x * k; x = x/k; x = x%k; Etc Expresso equivalente x+=k; x=k; x*=k; x/=k; x%=k;

Modeladores
Um modelador aplicado a uma expresso. Ele fora a mesma a ser de um tipo especificado. A sua forma geral : (tipo) expresso Exemplo: Modelador() { Inteiro num; Real f; num = 10; f = (Real)num/7; Escreva(%R, f); } Exerccios: 1. Considere as expresses que se seguem e transforme-as em expresses lineares para poderem ser compreendidas pelo compilador C. Se no se tivesse usado o modelador neste exemplo,o C faria uma diviso inteira entre 10 e 7. O resultado seria 1 (um) e este depois seria convertido para Real, mas continuaria a ser 1.0. Com o modelador tem-se o resultado correto.

1 b + + c2 c a) a = b 2+d c r
4+ r c2 1 b) b = a * + + 3 a 2 + t c
Notas: - A funo sqrt() devolve a raiz quadrada de um nmero passado como parmetro. - A funo pow() devolve o valor de um dado nmero elevada a um dado expoente, ambos passados como parmetro. Ex.: pox(x, 2) = x2
104

2. Diga o resultado das variveis depois da seguinte seqncia de operaes: a) Inteiro x, y, z; x = y = 10; z = ++x; x = -x; y++; x = x + y (z--); x y z

b) Inteiro x, y, a=14, b=3; Real z; x = a / b; y = a % b; z = y / x;

c) Inteiro v=0, x=1, y=2, z=3; v += x + y; x *= y = z +1; z %= v + v + v; v += x += y += 2;

3. A expresso lgica (-5 || 0) && (3 > = 2) && (1 != 0) || (3 < 0) : a) Verdadeira b) Falsa c) Invlida, pois sua sintaxe est errada d) Nem verdadeira, nem falsa e) Nenhuma das opes anteriores

105

ANEXO III As Instrues Break e Continue


As instrues break e continue so usados para alterar o fluxo de controle.

A Instruo Break
A instruo break quando executada em uma estrutura de repetio (Para-Faa, Enquanto-Faa e FaaEnquanto) faz com que acontea a sada imediata daquela estrutura. J no caso da estrutura Escolha, esta instruo quebra a execuo deste comando (switch). A execuo do programa continua com a primeira instruo depois da estrutura que est sendo interrompida. Os usos comuns da instruo break so para sair prematuramente de um loop, ou para saltar sobre o restante de uma estrutura Escolha (switch). Exemplo: 1 2 3 4 Inst_break() { Inteiro x; Para(x = 1; x< = 10; x++){ Se (x = = 5) ento break; Escreva (%I, x); } Escreva (\nSaiu do loop em x = = %I\n, x); }
Saiu do loop em x = = 5

A instruo Continue
O comando continue pode ser visto como sendo o oposto do break e s funciona dentro de uma estrutura de repetio (Para-Faa, Enquanto-Faa ou Faa-Enquanto). Este comando ignora (salta sobre) as instrues restantes no corpo daquela estrutura e realiza a prxima iterao do loop. em estruturas Enquanto-Faa e Faa-Enquanto, o teste de continuao do loop realizado imediatamente aps a instruo continue ser executada. Na estrutura Para-Faa, a expresso de incremento executada e depois o teste de continuao do loop realizado. Na estrutura Enquanto-Faa, caso a expresso de incremento encontre-se aps o comando continue, a mesma no executada antes de a condio do loop ser testada e o Enquanto-Faa no executado da mesma maneira que o Para-Faa.

Exemplo: Inst_Continue() { Inteiro x; Para(x = 1; x < = 10; x++){ Se (x = = 5) ento continue; Escreva(%I, x); 1 2 3 4 6 7 8 9 10

106

} }

Exerccios 1. Sendo num uma varivel inteira, o que imprime o trecho de cdigo a seguir? num = 1; Escolha(num){ Caso 1: Escreva(O nmero 1); Caso 2: Escreva(O nmero 2); Default: Escreva(O nmero diferente de 1 e 2); } 2. Os dois blocos de cdigo a seguir produzem o mesmo resultado? Faa o mapa de memria. a) b) Para(i = 0; i < 3; i++){ Para(j = 0; j < 3; j++) Escreva(i + j = %I\n, i+j); } Para(i = 0, j =0; i <3; i++){ Para( ; j < 3; j++) Escreva(i + j = %I\n, i+j); }

3. Qual a sada produzida pelo fragmento de cdigo a seguir: Inteiro x; Para(x = 35; x > 0; x/=3) Escreva(%I, x); 4. Os fragmentos de cdigo a seguir so equivalentes entre si? Faa o mapa de memria. b) Inteiro x = 10; Enquanto (--x > 9) Escreva(%I, x); Inteiro x = 10; Faa{ Escreva(%I, x); }Enquanto(--x > 9);

a)

107

ANEXO IV TABELA ASCII

As tabelas mostradas neste apndice representam os 256 cdigos usados nos computadores da famlia IBM. Esta tabela refere-se ao American Standard Code for Information Interchange (cdigo padro americano para troca de informaes), que um conjunto de nmeros representando caracteres ou instrues de controle, usados para troca de informaes entre computadores entre si, entre perifricos (teclado, monitor, impressora) e outros dispositivos. Estes cdigos tem tamanho de 1 byte com valores de 00h a FFh (0 a 255 decimal). Podemos dividir estes cdigos em trs conjuntos: controle, padro e estendido.

Os primeiros 32 cdigos de 00h at 1Fh (0 a 31 decimal), formam o conjunto de controle ASCII. Estes cdigos so usados para controlar dispositivos, por exemplo uma impressora ou o monitor de vdeo. O cdigo 0Ch (form feed) recebido por ima impressora gera um avano de uma pgina. O cdigo 0Dh (carriage return) enviado pelo teclado quando a tecla ENTER pressionada. Embora exista um padro, alguns poucos dispositivos tratam diferentemente estes cdigos e necessrio consultar o manual para saber exatamente como o equipamento lida com o cdigo. Em alguns casos o cdigo tambm pode representar um caracter imprimvel. Por exemplo o cdigo 01h representa o caracter (happy face).

Os 96 cdigos seguintes de 20h a 7Fh (32 a 127 decimal) formam o conjunto padro ASCII. Todos os computadores lidam da mesma forma com estes cdigos. Eles representam os caracteres usados na manipulao de textos: cdigos-fonte, documentos, mensagens de correio eletrnico, etc. So constitudos das letras do alfabeto latino (minsculo e maisculo) e alguns smbolos usuais.

Os restantes 128 cdigos de 80h at FFh (128 a 255 decimal) formam o conjunto estendido ASCII. Estes cdigos tambm representam caracteres imprimveis porem cada fabricante decide como e quais smbolos usar. Nesta parte do cdigo esto definidos os caracteres especiais: , , , ...

Vale ressaltar que o caractere resultante a partir de sua insero mediante a tecla Alt + valor decimal, poder variar de acordo com o tipo de fonte utilizado.

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH

108

Dec.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Hex.
00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

Controle
(Null) (Start of Heading) (Start of Text) (End of Text)

(End of Transmision) (Enquiry) (Acknowledge) (Bell) (Backspace) (Horizontal Tab) (Line Feed) (Vertical Tab) (Form Feed) (Carriage Return) (Shift Out) (Shift In) (Data Link Escape) (Device control 1) (Device control 2) (Device control 3) (Device control 4) (Negative Acknowledge) (Synchronous Idle) (End Transmission Block) (Cancel) (End of Media) (Substitute) (Escape) (File Separator) (Group Separator) (Record Separator) (Unit Separator)

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH

109

Caracter
<espao>

Dec.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Hex.
20h 21h 22h 23h 24h 25h 26h 27h 28h 29h 2Ah 2Bh 2Ch 2Dh 2Eh 2Fh 30h 31h 32h 33h 34h 35h 36h 37h 38h 39h 3Ah 3Bh 3Ch 3Dh 3Eh 3Fh 40h 41h 42h 43h

Caracter D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g

Dec.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

Hex.
44h 45h 46h 47h 48h 49h 4Ah 4Bh 4Ch 4Dh 4Eh 4Fh 50h 51h 52h 53h 54h 55h 56h 57h 58h 59h 5Ah 5Bh 5Ch 5Dh 5Eh 5Fh 60h 61h 62h 63h 64h 65h 66h 67h

Caracter h i j k l m n o p q r s t u v w x y z { | } ~
<delete>

Dec.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

Hex.
68h 69h 6Ah 6Bh 6Ch 6Dh 6Eh 6Fh 70h 71h 72h 73h 74h 75h 76h 77h 78h 79h 7Ah 7Bh 7Ch 7Dh 7Eh 7Fh 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh

! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH

110

Caracter

Dec.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176

Hex.
8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h A1h A2h A3h A4h A5h A6h A7h A8h A9h AAh ABh ACh ADh AEh AFh B0h

Caracter

Dec.
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

Hex.
B1h B2h B3h B4h B5h B6h B7h B8h B9h BAh BBh BCh BDh BEh BFh C0h C1h C2h C3h C4h C5h C6h C7h C8h C9h CAh CBh CCh CDh CEh CFh DOh D1h D2h D3h D4h D5h

Caracter

Dec.
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250

Hex.
D6h D7h D8h D9h DAh DBh DCh DDh DEh DFh E0h E1h E2h E3h E4h E5h E6h E7h E8h E9h EAh EBh ECh EDh EEh EFh F0h F1h F2h F3h F4h F5h F6h F7h F8h F9h FAh

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH

111

Caracter

Dec.
251 252 253 254 255

Hex.
FBh FCh FDh FEh FFh

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH

112

Entre os caracteres da tabela ASCII estendidos os mais teis esto, talvez, os caracteres de desenho de quadro em linhas simples e duplas: os caracteres de B3h at DAh (179 a 218 decimal). Como a visualizao deste conjunto difcil, o desenho abaixo pode auxiliar nesta tarefa:

196 194 218 179 195 192 197 193 217 200 180 191 201 186 204

205 203 206 202 188 187 185

209 213 198 212 216 207 190 211 184 181 214 199

210 215 208 189 183 182

Caracteres de desenho de quadro e seus respectivos cdigos ASII.

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH 113

ANEXO V Tipos de Dados e Valores Mximos Permitidos


A seguir esto listados os tipos de dados permitidos e seus valores mximos num compilador tpico para um hardwarede 16 bits:

Tipo char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double

Num de Bits 8 8 8 16 16 16 16 16 16 32 32 32 32 64 80

Intervalo Incio -128 0 -128 -32.768 0 -32.768 -32.768 0 -32.768 -2.147.483.648 -2.147.483.648 0 3,4E-38 1,7E-308 3,4E-4932 Fim 127 255 127 32.767 65.535 32.767 32.767 65.535 32.767 2.147.483.647 2.147.483.647 4.294.967.295 3,4E+38 1,7E+308 3,4E+4932

O tipo long double o tipo de ponto flutuante com maior preciso. importante observar que os intervalos de ponto flutuante, na tabela acima, esto indicados em faixa de expoente, mas os nmeros podem assumir valores tanto positivos quanto negativos.

PROFESSORES: FABIO FERNANDO KOBS E LISANDRO JOS FENDRICH 114

Você também pode gostar