You are on page 1of 89

Fundamentos de Programao

ESCOLA

Fundamentos de Programao

Escola Alcides Maya - Primeiro Mdulo

Sumrio

Fundamentos de Programao

Fundamentos de Programao 1
1 Introduo........................................................................................................................................ 4 2 Introduo Linguagem C............................................................................................................. 4 3 Tcnicas Bsicas de Programao.................................................................................................. 8 4 Estruturas de Controle A Tomada de Decises........................................................................ 30 5 Estruturas de Controle Laos de Repetio............................................................................. 43 6 Estruturas de Dados Homogneas I............................................................................................. 52 7 Estruturas de Dados Homogneas II........................................................................................... 59 8. Programao Estruturada .......................................................................................................... 64

1 Introduo

Escola Alcides Maya - Primeiro Mdulo

A disciplina de Fundamentos de Programao est ligada a de Lgica de Programao e vamos aplicar as estruturas lgicas utilizando a linguagem C. C uma linguagem de programao de finalidade geral. Foi criada por Dennis M. Ritchie e Ken Thompson, na Bell Laboratories em 1972, e estava associada ao sistema operacional UNIX. A linguagem, entretanto no est ligada a um sistema operacional, hoje usamos C em DOS, Windows e Linux. C foi baseada na linguagem B de Thompson que era uma evoluo da antiga Linguagem BCPL. B foi nomeada com a primeira letra de BCPL e C com a segunda. C uma linguagem de baixo nvel, que o deixa especificar todos os detalhes em lgica de algoritmos para obter a mxima eficcia do computador. Mas C tambm uma linguagem de alto nvel que pode esconder detalhes da arquitetura dos computadores, resultando no aumento da eficincia na programao. C foi escrita para que o programador possa planejar programas estruturados e modulares. O resultado um programa mais legvel e documentado. Hoje j podemos programar de forma moderna utilizando a OOP (Programao Orientada para Objetos) e tambm a Programao voltada para Eventos.

O padro ANSI C
O comit ANSI desenvolveu padres para a linguagem C. Diversas destas modificaes tiveram a inteno de aumentar a flexibilidade da linguagem, enquanto outras tentaram padronizar caractersticas previamente deixadas a cargo do implementador do compilador. Anteriormente, o nico padro era o livro: Linguagem de Programao C, de Brian Kernighan e Dennis Ritchie. Este livro no era especfico em alguns detalhes da linguagem, o que levou a divergncias entre os compiladores. O padro ANSI tentou remover essas ambigidades. Embora algumas das modificaes propostas pudessem causar problemas para alguns programas escritos anteriormente, elas no afetam muito o cdigo existente. O padro ANSI C proporciona uma oportunidade melhor para escrever um cdigo C porttil. Entretanto, o padro no corrige todas as reas de confuso e, por causa da eficincia da interface da linguagem C, com o hardware da mquina, muitos programas sempre exigiro algumas revises quando voc os mover para um ambiente diferente.

2 Introduo Linguagem C
Vamos agora ver alguns detalhes iniciais da linguagem. Iniciaremos nosso estudo com um programa simples, que apenas escreve na tela de seu computador a frase: Meu primeiro programa. Veja, abaixo, como o programa: main( ) { printf (Meu primeiro programa ); } Agora algumas consideraes sobre o programa acima: Um programa em C consiste de uma ou mais funes que especificam o que deve ser feito. No exemplo acima main( ) uma funo. Qualquer programa em C comea com a funo main( ) que marca o ponto inicial da execuo do programa. Todas as instrues devem estar dentro das chaves que iniciam e terminam a funo, elas tm a mesma funo que o begin e end em Pascal.

Primeiro programa em C

Fundamentos de Programao
A linha: printf (Meu primeiro programa); uma chamada a funo printf, com o argumento Meu primeiro programa, que uma seqncia de caracteres entre aspas . . . , chamada de: cadeia de caracteres, ou tambm string. A printf uma funo de biblioteca que escreve o argumento na tela do seu computador. Os parnteses devem estar presentes mesmo quando no h argumentos. As instrues C so sempre encerradas por um ponto-e-vrgula (;).

Seria interessante voc colocar uma funo para limpar a tela, antes de escrever a mensagem: Meu primeiro programa. Para fazer isto podemos utilizar a funo clrscr( ) que serve para este propsito. Veja as alteraes feitas no programa abaixo: main( ) { clrscr( ); printf (Meu primeiro programa ); }

Limpando a tela

A funo printf( ) uma das funes de E/S (entrada e sada) que podem ser usadas em C. Ela no faz parte da definio de C, mas todos os sistemas tm uma verso de printf( ) implementada. Os parnteses indicam que estamos em uma funo. Entre os parnteses esto as informaes que so passadas pelo programa main( ) para a funo printf( ), isto Meu primeiro programa. Esta informao chamada de argumento. Quando o programa encontra esta linha, passa o controle para a funo printf( ) que imprime na tela do seu computador Meu primeiro programa e, quando encerra a execuo, o controle transferido novamente para a funo main. Vamos ver o prximo exemplo: main( ) { clrscr( ); printf(Escola Tcnica Alcides Maya\n); printf(Estamos na etapa nmero: 2); } A funo printf( ) pode ter um ou vrios argumentos. Na primeira printf temos o seguinte argumento: Escola Tcnica Alcides Maya\n onde encontramos a string: Escola Tcnica Alcides Maya, e tambm os caracteres \n. Este caractere \n a notao C para o caractere de nova-linha, que provoca o avano do cursor para o incio da prxima linha. Se voc omitir o \n, voc ver como resultado as duas strings escritas em apenas uma linha na tela. Alm do caractere \n temos outros caracteres que esto na tabela abaixo: Cdigo \n \t \b \ \\ Significado Nova linha Tabulao Retrocesso Aspas Barra

A Funo printf( )

Formato inteiro decimal

Escola Alcides Maya - Primeiro Mdulo

Veja as alteraes que fizemos no programa anterior: main( ) { clrscr( ); printf(Escola Tcnica Alcides Maya\n); printf(Estamos na etapa nmero: %d , 2); } Agora, colocamos dois argumentos na segunda printf: Estamos na etapa nmero: %d , 2 Estes dois argumentos so separados por uma virgula. A expresso de controle pode conter caracteres que sero exibidos na tela e cdigos de formatao que indicam o formato em que os argumentos devem ser impressos. No exemplo o cdigo de formatao %d solicita a printf( ) imprimir o segundo argumento no formato de um nmero inteiro decimal.

Alm do cdigo de formatao decimal (%d), existe outros. No exemplo a seguir veremos o uso do cdigo %s para escrever na tela uma string. main( ) { clrscr( ); printf(O %s um dos melhores transportes urbanos, Metr); } Vamos agora escrever um programa com mais de uma instruo: main( ) { clrscr( ); printf(O %s venceu de %d gols de diferena contra o time adversrio, Inter , 4); } Neste exemplo passamos dois argumentos para a funo printf o %s do nome do time: Inter e o %d da quantidade de gols: 4. Vejamos o prximo exemplo: main( ) { clrscr( ); printf(A letra %c , x); printf(pronuncia-se %s., xis ); } Note que o x delimitado por aspas simples enquanto que xis delimitado por aspas duplas. Isto indica ao compilador como diferenciar um caractere de uma string.

Escrevendo uma string na tela

Fundamentos de Programao
A tabela, a seguir, mostra os cdigos para impresso formatada de printf( ); Cdigo %c %d %f %s %u %x Significado Caracteres simples Decimal Ponto flutuante String de caracteres Decimal sem sinal Hexadecimal

Exerccios de Fixao Vamos agora realizar alguns exerccios de fixao para sedimentar em nossa mente os conhecimentos adquiridos: 1. No programa abaixo h alguns problemas, faa as correes necessrias. main( ) ( clrscr( ) printf(Temos %d aulas no semestre, 33 ); ) 2. Qual ser o resultado do programa abaixo: main( ) ( clrscr( ) printf(As notas escolares so: %d %d %d\n , 4, 7, 9); ) 3. Neste outro programa o que ser apresentado na tela do computador: main( ) ( clrscr( ) printf(%s \n %s \n %s , Escola, Tcnica,Alcides Maya ); ) 4. Faa um programa que contenha uma nica instruo e escreva na tela: Esta a primeira linha. Esta j a segunda linha.

5. Escreva um programa que escreva na tela: UM DOIS TRES QUATRO 6. Qual ser a impresso obtida na tela por cada uma destas instrues? Assuma que fazem parte de um programa completo. a) printf (Boa Tarde ! Maria.); printf (Voc j lanchou ? \n); b) printf(Escola Tcnica\nAlcides Maya\n); 8. Faa um programa que escreva na tela o teu nome, o nome da tua me e o nome da tua av, todos em linhas diferentes na tela. (Use o \n). 9. Faa um programa que escreva na tela uma mensagem do tipo: Eu tenho 23 anos, sendo que a idade dever ser um argumento do tipo inteiro decimal. (Use o %d). 10. Faa um programa que numere as linhas da tela (cada linha com um nmero).

Escola Alcides Maya - Primeiro Mdulo

3 Tcnicas Bsicas de Programao


A partir deste momento vamos ter um contato direto com a parte pratica da Lgica de Programao. O computador possui uma rea de armazenamento temporria conhecida como memria. A memria do computador pode ser entendida como uma seqncia finita de caixas, que num dado momento, guardam algum tipo de informao, como um nmero, uma letra, uma palavra, uma frase, etc, no importa, basta saber que l sempre existe alguma informao. O computador, para poder trabalhar com algumas destas informaes, precisa saber onde, na memria, o dado est localizado. Fisicamente, cada caixa, ou cada posio de memria, possui um endereo, ou seja, um nmero, que indica onde cada informao est localizada, este nmero representado atravs da notao hexadecimal, tendo o tamanho de quatro, ou mais bytes. Abaixo segue alguns exemplos: Endereo Fsico 3000:B712 2000:12EC 3000:0004 Informao Joo 45 J

Variveis

Como pode ser observado, o endereamento das posies de memria atravs de nmeros hexadecimais perfeitamente compreendido pela mquina, mas para ns humanos torna-se uma tarefa complicada. Pensando nisto, as linguagens de computador facilitaram o manuseio, por parte dos programadores, das posies de memria da mquina, permitindo, que, ao invs de trabalhar diretamente com o nmero hexadecimal, fosse possvel dar nomes diferentes a cada posio de memria. Tais nomes seriam de livre escolha do programador. Com este recurso, os programadores ficaram livres dos endereos fsicos (nmeros hexadecimais) e passaram a trabalhar com endereos lgicos (nomes dados pelos prprios programadores).

Desta forma, o exemplo acima, poderia ser alterado para ter o seguinte aspecto: Endereo Fsico Cliente Idade Inicial Informao Joo 45 J

Fundamentos de Programao

Como tnhamos dito, os endereos lgicos so como caixas, que num dado instante guardam algum tipo de informao. Mas importante saber que o contedo desta caixa no algo fixo, permanente, na verdade, uma caixa pode conter diversas informaes, ou seja, como no exemplo acima, a caixa (endereo lgico) rotulada de Cliente num dado momento contm a informao Joo, mas em um outro momento, poder conter uma outra informao, por exemplo Pedro. Com isto queremos dizer que o contedo destas caixas (endereo lgico) podem variar, isto , podem sofrer alteraes em seu contedo. Tendo este conceito em mente, a partir de agora iremos chamar as caixas ou endereos lgicos, de Variveis. Desta forma podemos dizer que uma varivel uma posio de memria representada por um Nome simblico (atribudo pelo programador), a qual contm, num dado instante uma informao.

Uma varivel em C um espao de memria reservado para armazenar um certo tipo de dado com um nome para referenciar o seu contedo. Em um programa a varivel poder conter um valor em um determinado momento e um outro valor em outro momento. Veja o programa a seguir: main( ) { int num; num = 2; printf(Este o nmero: %d \n , num); num = 5 + 10; printf(Este o nmero: %d \n , num); }

Variveis na linguagem C

Agora algumas consideraes sobre o programa acima: Na linha int num; a declarao da varivel, que tem nome: num e tipo: int, ou seja, ir armazenar valores numricos inteiros. Na linha num = 2; estamos atribuindo a varivel o valor 2 (dois), portanto o endereo de memria identificado como num contm neste instante o nmero 2 (dois). Na linha printf(Este o nmero: %d \n , num); estamos apresentado o contedo desta varivel. Na linha num = 5 + 10; estamos efetuando um clculo e atribuindo a varivel o resultado deste clculo, portanto a varivel num contm neste instante o nmero 15 (quinze). Na linha printf(Este o nmero: %d \n , num); estamos apresentando o contedo desta varivel.

Para nomearmos variveis, geralmente, seguimos algumas regras, que, conforme o livro Linguagem de Programao C, de Brian Kernighan e Dennis Ritchie, elas seriam as seguintes: Os nomes das variveis so construdos com letras e dgitos. O primeiro caractere deve ser uma letra. O caractere de sublinha _ vale como uma letra; ele til para aumentar a clareza de nomes muito longos de variveis. Exemplo: data_de_nascimento. Letras em maisculo e minsculo so diferentes; uma prtica tradicional em C de usar letras minsculas para vaiveis. CASA, Casa, casa, representam variveis diferentes. Somente os primeiros oito caracteres de um nome interno so significativos, embora mais caracteres possam ser usados. Naturalmente melhor escolher nomes de variveis que tenham algum significado, que estejam relacionados com a finalidade da varivel, e que sejam diferenciados tipograficamente.

Nomes das variveis

Escola Alcides Maya - Primeiro Mdulo

Na declarao de uma varivel instrumos ao programa reservar uma quantidade de memria apropriada para armazenar o tipo especificado e indicar que o seu contedo ser referenciado pelo nome dado. Se voc tiver mais de uma varivel do mesmo tipo, poder declar-las de uma nica vez, separando seus nomes por virgulas. int idade, casa, livro; O local indicado para declarar as variveis logo aps a chave inicial da funo main, veja o exemplo abaixo: main( ) { int num, nota1, nota2, nota3, nota4, media; . . . . . } Antes de prosseguir, temos uma observao importante: Em C todas as variveis devem ser declaradas antes de serem utilizadas.

Declaraes das variveis

Tipos de variveis
Tipo char int float double

O tipo de uma varivel informa a quantidade de memria, em bytes, que est ir ocupar. Bit 8 16 32 64 Bytes 1 2 4 8 Escala -128 a 127 -32768 a 32767 3.4 E -38 a 3.4 E +38 1.7 E -308 a 1.7 E +308

O tipo char capaz de conter um caractere. O tipo int poder conter nmeros inteiros (ex.: 35, 0, -56) e o tipo float e double poder conter nmeros reais (35, 0, -56, 1.2, -45.897).

10

Fundamentos de Programao
C prov os modificadores de tipo como o short que um inteiro curto que varia de 32.763 at 32.762 e tambm o long que um inteiro longo e que varia de 2.147.483.648 at 2.147.483.647. main( ) { int idade; char inicial; float tempo; idade = 25; inicial = C; tempo = 17.25; printf(A inicial do meu nome : %c \n , inicial); printf(Minha idade : %d anos\n , idade); printf(Meu tempo na prova foi de %f minutos \n , tempo); }

Agora algumas consideraes sobre o programa anterior: Na linha int idade; a varivel, do tipo inteiro, que ir conter a idade. Na linha char inicial; a varivel, do tipo caractere, que ir conter a letra inicial de um nome. Na linha float tempo; a varivel, do tipo ponto flutuante, que ir conter o tempo em minutos. Na linha idade = 25; a inicializao da varivel idade. Na linha inicial = C; a inicializao da varivel inicial. Na linha tempo = 17.25; a inicializao da varivel tempo. Na linha printf(A inicial do meu nome : %c \n , inicial); a apresentao do contedo da varivel inicial. Na linha printf(Minha idade : %d anos\n , idade); a apresentao do contedo da varivel idade. Na linha printf(Meu tempo na prova foi de %f minutos \n , tempo); a apresentao do contedo da varivel tempo. Veremos agora o contedo relacionado a operadores aritmticos e operadores de atribuio. C uma linguagem rica em operadores. Alguns so mais usados que outros, como o caso dos operadores aritmticos que executam operaes aritmticas.

Operadores

Operadores aritmticos
Operador + * / %

Para efetuar clculos matemticos temos os seguintes operadores aritmticos: Ao Subtrao Adio Multiplicao Diviso Resto da diviso Exemplo 51 5+1 5*2 10 / 2 11%2 Resultado 4 6 10 5 1

11

Em C, o sinal de igual no tem a interpretao dada em matemtica. Representa a atribuio da expresso direita ao nome da varivel esquerda. Por exemplo: num = 2000; atribui o valor 2000 a varivel num. A ao executada da direita para a esquerda deste operador. C aceita vrias atribuies numa mesma instruo: laranjas = bergamotas = cenouras = abacates = 80; A seguir temos um programa que usa vrios operadores aritmticos e converte temperatura Fahrenheit em seu correspondente Celsius. main( ) { float ftemp, ctemp; ftemp = 120; ctemp = ( ftemp 32.0 ) * ( 5.0 / 9.0 ); printf(Temperatura em graus Celsius : %f , ctemp); } Agora algumas consideraes sobre o programa acima: Na linha float ftemp, ctemp; a declarao de duas variveis, do tipo float, que ir conter a temperatura em graus Fahrenheit e Celsius. Na linha ftemp = 120; estamos utilizando o operador de atribuio que armazena a temperatura de 120 graus Fahrenheit na varivel ftemp. Na linha ctemp = ( ftemp 32.0 ) * ( 5.0 / 9.0 ); estamos efetuando o clculo de converso da temperatura em Fahrenheit para Celsius e atribuindo o resultado do clculo para a varivel ctemp. Note que colocamos parnteses em ftemp 32.0. Se voc lembra um pouco de lgebra, a razo estar clara. Ns queremos que 32 seja subtrado de ftemp antes de multiplicarmos por 5 e dividirmos por 9. A multiplicao e a diviso so feitas antes da soma ou subtrao. Na linha printf(Temperatura em graus Celsius : %f , ctemp); estamos apresentando o resultado do clculo.

Operador de atribuio

Escola Alcides Maya - Primeiro Mdulo

12

Comentrios podem ser colocados em qualquer lugar de seu programa. Comentrios so recomendados para documentar a lgica utilizada no programa. Tudo que comea com dois caracteres, chamados smbolos de comentrios, barra-asterisco (/*) e terminam por asterisco-barra (*/), so comentrios e o contedo entre eles no ser verificado pelo compilador. No programa abaixo mostraremos vrios comentrios: /* Exerccio 015 * Este programa calcula * a idade de uma pessoa * em dias */ main( ) { float anos, dias;

Comentrios

Fundamentos de Programao

/* declarao de variveis */ /* inicializa a varivel anos */ /*calcula idade em dias*/

anos = 12; dias = anos * 365;

printf(A idade em dias : %f \n , dias); /* apresentar o resultado */ }

1. Faa um programa que armazene a quilometragem inicial de um carro. Depois de uma viagem, armazenar a quilometragem final do carro. Calcular e apresentar a distncia percorrida pelo carro. 2. Faa um programa que armazene as notas de um aluno (sero 4 notas, portanto, teremos 4 variveis). Calcule a mdia do aluno e armazene em uma varivel, depois apresente a mdia do aluno (use variveis do tipo inteiro). 3. Faa um programa que armazene as notas de um aluno (sero 4 notas, portanto, teremos 4 variveis). Calcule a mdia do aluno e armazene em uma varivel, depois apresente a mdia do aluno (use variveis do tipo ponto flutuante). 4. Faa um programa que calcule e apresente o valor do volume de uma lata de leo, utilizando a frmula: volume = 3.14159 * raio * altura. Obs.: Atribua valores a varivel raio e altura. 5. Faa um programa que calcule e apresente o volume de uma caixa retangular, por meio da frmula: volume = comprimento * largura * altura. Obs.: Atribua valores a varivel comprimento, largura e altura. 6. Faa um programa que leia dois valores inteiros para as variveis A e B, e efetuar a troca dos valores de forma que a varivel A passe a possuir o valor da varivel B e a varivel B passe a possuir o valor da varivel A. Apresentar na tela os novos valores das variveis A e B. 7. Faa um programa que leia quatro nmeros inteiros e apresentar o resultado da adio destes nmeros. (A + B + C + D) 8. Faa um programa que leia quatro nmeros inteiros e apresentar o resultado da multiplicao destes nmeros. (A * B * C * D)

Exerccios de Fixao

13

Escola Alcides Maya - Primeiro Mdulo


9. Indique com um X quais dos dados abaixo so do tipo inteiro. ( ) 1000 ( ) 0 ( ) -900 ( ) -456 ( ) 34 ( ) C ( )0 ( ) 1.56 ( ) 34.76 10. Indique com um X quais dos dados abaixo so do tipo float. ( ) -678 ( ) 0.87 ( ) 99.8 ( ) cinco ( ) 34 ( ) C ( ) 45.8976 ( ) 1.56 ( ) 34.76

O computador no uma mquina isolada, pois ele precisa se comunicar com o mundo exterior, com vdeo, impressora, teclado, discos, fitas, etc. Para realizar esta comunicao existem comandos que permitem que informaes sejam exibidas, por exemplo, no vdeo, como tambm existem comandos que permitem que informaes sejam colocadas na memria do computador atravs do teclado do PC. Os comandos que iremos ver so os comandos para LER e ESCREVER, respectivamente, comando de entrada e de sada. Entrada, Processamento e Sada Para criar um programa que seja executvel dentro de um computador, deve-se ter em mente trs coisas: a entrada de dados, o seu processamento e a sada deles. Sendo assim, todo programa estar trabalhando com estes trs conceitos. Se os dados forem entrados de forma errada, sero conseqentemente processados de forma errada e resultaro em respostas erradas. Desta forma, dizer a algum que foi erro do computador ser um tanto medocre. E isto o que mais ouvimos quando nosso saldo est errado e vamos ao banco fazer uma reclamao ou quando recebemos uma cobrana indevida. Se houve algum erro, porque foi causado por falha humana. Realmente impossvel um computador errar por vontade prpria, pois vontade uma coisa que os computadores no tm. O processo de execuo de um programa ocorre segundo o exposto, aps a entrada de dados com a instruo leia e a sua sada com a instruo escreva. O processamento ser uma conseqncia da manipulao das variveis de ao. Uma entrada e uma sada poder ocorrer dentro de um computador de diversas formas. Por exemplo, uma entrada poder ser feita via teclado. Uma sada poder ser feita em vdeo. As funes de biblioteca da linguagem C, mais comuns para a entrada e sada de dados so a printf() e a scanf().

Funes de Entrada e Sada

14

A funo printf( ) uma das funes de sada de dados da linguagem C, que voc j utilizou na Aula 1. A funo scanf( ) A funo scanf( ) o complemento de printf( ) e nos permite fazer a entrada de dados do teclado. Sua sintaxe uma expresso de controle seguida por uma lista de argumentos separados por virgulas. Os argumentos de scanf( ) devem ser endereos de variveis, cuja sintaxe ser apresentada a seguir: scanf( expresso de controle, lista de argumentos); A expresso de controle contem cdigos de formatao, sempre precedida por um sinal de % (percentagem). A lista de argumentos deve consistir nos endereos das variveis, onde sero armazenados os valores lidos. C oferece um operador para tipos bsicos chamados operador de endereo e referenciado pelo smbolo & que retorna o endereo do operando, voltaremos a este assunto quando ser abordado a aula de pointers. Para exemplificar o que estamos apresentando, veremos no programa a apresentao do contedo armazenado em uma varivel e o endereo da varivel. main( ) { int num; num = 2; printf(Contedo da varivel.......: %d \n , num); printf(Endereo Decimal............: %u \n , &num); printf(Endereo HexaDecimal....: %u \n , &num); } Agora algumas consideraes sobre o programa acima: Na declarao int num; estamos declarando a varivel inteira num. Na linha seguinte num = 2; estamos inicializando a varivel com o nmero inteiro 2. Na linha printf(Contedo da varivel.......: %d \n , num); a funo printf vai apresentar o contedo da varivel atravs do cdigo de formatao %d e na linha seguinte, atravs do cdigo %u o endereo da varivel num. Repare que o nome da varivel vem precedido do caractere &, indicando que o endereo da varivel. Um endereo de memria visto como um nmero inteiro sem sinal, por isso usamos o %u. Mas o que este programa tem a ver com a entrada de dados? Nada, apenas estamos apresentando a voc o endereo da varivel, j que para ler um valor para uma varivel, utilizando a funo scanf, temos que informar o endereo da varivel. No programa abaixo, ao invs de inicializar o valor da varivel, como em num = 2; vamos ler um nmero qualquer e depois apresent-lo. main( ) { int num; printf(Digite um nmero: ); scanf(%d , &num);

A funo printf( )

Fundamentos de Programao

15

printf(O nmero digitado foi: %d , num); } Agora algumas consideraes sobre o programa acima: Na declarao int num; estamos declarando a varivel inteira num. Na linha printf(Digite um nmero: ); informamos ao usurio que ele dever digitar um nmero. Na linha seguinte scanf(%d , &num); estamos esperando que o usurio digite um nmero inteiro e pressione a tecla ENTER. Nunca esquea que ao usar a funo scanf voc deve informar o endereo da varivel para onde vamos ler alguma coisa, caso contrrio voc ter surpresas desagradveis no teu programa. Na ltima linha printf(O nmero digitado foi: %d , num); a funo printf vai apresentar o contedo da varivel num.

Escola Alcides Maya - Primeiro Mdulo

Veja na tabela a seguir os cdigos bsicos de formatao da funo scanf( ) Cdigo %c %d %f Funo Leia um nico caractere Leia um inteiro decimal Leia um nmero em ponto flutuante

Agora vamos fazer um exemplo ligeiramente mais difcil. O prximo programa pede ao usurio o comprimento em jardas, e ento escreve na tela o valor convertido em ps e polegadas. main( ) { int jardas, pes, polegadas; printf(Digite o comprimento a ser convertido: ); scanf(%d , &jardas); polegadas = 36 * jardas; pes = 3 * jardas; /* entrada de dados */

/* processamento */

printf( %d jardas = %d ps \n , jardas, ps ); /* sada de dados */ printf( %d jardas = %d polegadas \n , jardas, polegadas ); } Agora algumas consideraes sobre o programa acima: Na declarao int jardas, pes, polegadas; estamos declarando as variveis inteiras jardas, ps, polegadas. Na linha printf(Digite o comprimento a ser convertido: ); solicitamos ao usurio que ele dever digitar um comprimento. Na linha seguinte scanf(%d , &jardas); estamos esperando que o usurio digite um nmero inteiro e pressione a tecla ENTER. Este nmero ser armazenado na varivel: jardas. Nas duas linhas seguintes: polegadas = 36 * jardas; e na linha pes = 3 * jardas; estamos calculando a converso de jardas em polegadas e a converso de jardas em ps. E, finalmente nas duas ltimas chamadas a funo printf, estamos apresentando o resultado das converses realizadas.

16

Fundamentos de Programao
Observao importante: veja como ficaram visveis, neste programa, as trs partes bsicas do processamento de dados: entrada, processamento e sada, destacadas no programa atravs dos comentrios. Se em cada programa, nos concentrssemos nestas partes bsicas, j teramos metade da soluo do programa resolvida. Veja o exemplo a seguir: Exemplo Faa um programa que leia um nmero inteiro qualquer, que representa o comprimento em jardas. Sabendo-se que esta medida de comprimento poder ser transformada em polegadas multiplicando-se pelo nmero 36, e que poder ser transformada em ps multiplicando-se pelo nmero 3, calcular e apresentar este valor convertido em ps e polegadas.

Conforme o enunciado do programa devemos procurar identificar os elementos bsicos do processamento de dados, ou seja, a entrada, o processamento e a sada de dados, fazendo algumas perguntas. Veja abaixo: Entrada de dados Pergunta: O que devemos ler? Resposta: Um nmero inteiro que represente o comprimento em jardas. Pergunta: Temos que ler mais alguma coisa? Resposta: No Processamento de dados Pergunta: O que devemos fazer com esta informao lida? Resposta: Calcular a converso de jardas para polegadas e ps. Pergunta: Como fazemos isto? Resposta: Matematicamente 1 jarda corresponde a 3 ps e 1 jarda corresponde a 36 polegadas. Devemos multiplicar o valor lido por 3 e obteremos a quantidade de ps. Tambm, multiplicar o valor lido por 36 e obteremos a quantidade de polegadas. Pergunta: Tem mais algum calculo para fazer? Resposta: No Sada de dados Pergunta: Depois de calcular a converso o que devemos fazer? Resposta: Apresentar os valores convertidos. Pergunta: Tem mais alguma coisa para apresentar? Resposta: No Podemos ento encerrar o programa. Estas so algumas consideraes importantes, mas gostaria de ressaltar o seguinte: Se todos os programadores fizessem o algoritmo do programa, antes de comear a codificar o programa, muitas dores de cabea e tempo perdidos seriam eliminados, pois encontrar um erro de sintaxe da linguagem fcil, mas encontrar um erro de lgica no programa 10 vezes mais difcil. Se voc um programador experiente, antes de codificar o programa, voc faz o algoritmo, e ao fazelo voc estar identificando, automaticamente os elementos do processamento de dados, que a entrada o processamento e a sada.

17

Exerccios de Fixao

Escola Alcides Maya - Primeiro Mdulo

Desenvolva os exerccios abaixo: 1. Faa um programa que leia e armazene em variveis dois nmeros inteiros quaisquer. Calcular e apresentar a soma entre eles. 2. Faa um programa que leia e armazene em variveis dois nmeros em ponto flutuantes. Calcular e apresentar a diferena entre eles. 3. Faa um programa que leia e armazene dois nmeros quaisquer. Calcular e apresentar o produto entre eles. 4. Faa um programa que leia e armazene em variveis dois nmeros inteiros quaisquer. Calcular e apresentar o resto da diviso de um pelo outro. 5. Faa um programa que leia um nmero do tipo ponto flutuante e outro nmero inteiro. Calcular e apresentar a diviso do nmero do tipo ponto flutuante pelo nmero inteiro. 6. Faa um programa que leia e armazene em variveis quatro notas escolares (entre 0 e 10) de um aluno. Calcular e apresentar a mdia final do aluno. 7. Faa um programa que leia e armazene em variveis uma letra e um nmero. No final apresentar a letra e o nmero lido. 8. Faa um programa que leia e armazene a idade de uma pessoa em anos. Calcular e apresentar a quantidade de dias, a quantidade de horas, a quantidade de minutos e de segundos desde o nascimento. 9. Faa um programa que leia a receita e a despesa de uma empresa. Calcular e apresentar o seu lucro. 10. Faa um programa que leia o nmero de identificao de um funcionrio, o seu nmero de horas trabalhadas no ms, o valor que recebe por hora. Calcular o salrio total deste funcionrio, sabendo-se que ele pago para trabalhar por hora. No final apresentar o salrio total deste funcionrio.

Na disciplina de lgica apresentamos alguns exemplos de aula que agora reproduzimos escritos em linguagem C para que voc possa fazer uma comparao entre eles. Desenvolver um programa que efetue o clculo da rea de uma circunferncia, apresentando a rea calculada. Para efetuar o clculo da rea de uma circunferncia necessrio conhecer a frmula que executa este clculo sendo esta: A = pR, em que A a varivel que conter o resultado do clculo da rea, p o valor de pi (3.14159), sendo uma constante na frmula) e R o valor do raio. Sendo assim, basta estabelecer: 1 Ler um valor para o raio, no caso a varivel R; 2 Estabelecer que PI possui o valor 3,14159; 3 Efetuar o clculo da rea, elevando ao quadrado o valor de R e multiplicando por PI; 4 Apresentar o valor da varivel A. A frmula para o clculo da rea passar a ser escrita como: A 3.14159 * R h 2 ou se voc preferir poder escrever da seguinte forma: A 3.14159 * R * R.

Exemplos de Aula Primeiro exemplo Algoritmo

18

Codificao em Linguagem C
main( ) { float A,R; clrscr( ); printf ( Digite o raio da circunferncia: ); scanf ( %f, &R ); A = 3.14159 * R * R; printf ( A rea da circunferncia e: %f, A ); getch( ); }

Fundamentos de Programao

Construir um programa que efetue o clculo do salrio lquido de um professor. Para fazer este programa, voc dever possuir alguns dados, tais como: valor da hora aula, nmero de horas trabalhadas no ms e percentual de desconto do INSS. Em primeiro lugar, deve-se estabelecer qual ser o seu salrio bruto para efetuar o desconto e ter o valor do salrio lquido.

Segundo exemplo

Algoritmo

1 Estabelecer a leitura da varivel HT (Horas trabalhadas no ms); 2 Estabelecer a leitura da varivel VH (valor hora aula); 3 Estabelecer a leitura da varivel PD (Percentual de desconto de INSS); 4 Calcular o salrio bruto (SB), sendo este a multiplicao das variveis HT e VH; 5 Calcular o total de desconto (TD) com base no valor de PD dividido por 100; 6 Calcular o salrio lquido (SL), deduzindo o desconto do salrio bruto; 7 Apresentar os valores dos salrios bruto e lquido: SB e SL.

Codificao em Linguagem C
main( ) { int HT; float VH, PD, TD, SB, SL; clrscr( ); printf(Digite a quantidade de horas trabalhadas no mes: ); scanf(%d, &HT); printf(Digite o valor da hora aula: ); scanf(%f, &VH); printf(Digite o percentual de desconto do INSS: ); scanf(%f, &PD); SB = HT * VH; TD = (PD/100) * SB;

19

SL = SB - TD;

Escola Alcides Maya - Primeiro Mdulo

printf(O valor do salario bruto e.....: %12.2f\n, SB); printf(O valor do salario liquido e...: %12.2f\n, SL); getch( ); }

Abaixo so apresentados exerccios, sugiro que voc os faa sem ver a soluo pronta do mesmo, utilize a soluo para verificar se voc fez corretamente. Primeiro exerccio Desenvolver um programa que leia dois valores numricos e apresente o resultado da soma dos quadrados dos valores lidos.

Exerccios de Aula

Algoritmo

1 Ler um valor para a varivel A e outro para a varivel B; 2 Efetuar o clculo do quadrado dos valores lidos, atribuindo os resultados as variveis QA e QB; 3 Somar o quadrado dos valores lidos atribuindo o resultado a varivel R; 4 Apresentar o valor da varivel R.

Codificao em Linguagem C
main( ) { int A, B, QA, QB, R; clrscr( ); printf(Digite um numero..................: ); scanf(%d, &A); printf(Digite outro numero..............: ); scanf(%d, &B); QA = A * A; QB = B * B; R = QA + QB; printf(A soma dos quadrados e.....: %d, R); getch( ); }

Segundo exerccio

Desenvolver um programa que apresente o resultado do clculo da rea de um trapzio. Algoritmo O clculo da rea do trapzio : rea = ( bMaior + bMenor * altura ) / 2, ento:

20

Fundamentos de Programao
1 Ler um valor para a base maior atribuindo a varivel bMaior; 2 Ler um valor para a base menor atribuindo a varivel bMenor; 3 Ler um valor para a altura atribuindo a varivel altura; 4 Efetuar o clculo da rea atribuindo a varivel area; 5 Apresentar o valor da varivel area.

Codificao em Linguagem C
main( ) { float area, bMaior, bMenor, altura; clrscr( ); printf(Digite o valor da base Maior...: ); scanf(%f, &bMaior); printf(Digite o valor da base Menor...: ); scanf(%f, &bMenor); printf(Digite o valor da altura.......: ); scanf(%f, &altura); area = ((bMaior + bMenor) * altura) / 2; printf(A area do trapezio e...........: %5.2f, area); getch( ); }

Veremos agora alguns detalhes interessantes da Linguagem C. Operadores J tnhamos visto os operadores aritmticos e de atribuio. Vamos agora complementar o assunto vendo os operadores de incremento e decremento, os operadores aritmticos de atribuio e os operadores relacionais. Operadores de incremento (+ +) e decremento (--) O operador de incremento (+ +) incrementa de um seu operando, ou seja, ele obtm o valor do operando e acrescenta um a este valor, o somar mais um. Em um primeiro instante isto parece uma coisa difcil de se entender, mas analise o programa abaixo e vers que muito fcil. main( ) { int num; num = 2; printf(Valor inicial = %d \n , num); num = num + 1; printf(Novo valor = %d \n , num); }

Detalhes adicionais da Linguagem C

21

Agora algumas consideraes sobre o programa acima: Na declarao int num; estamos declarando a varivel inteira num. Na linha seguinte num = 2; estamos inicializando a varivel com o nmero inteiro 2. Na prxima linha printf(Valor inicial = %d \n , num); est sendo apresentado o valor inicial da varivel num. Na linha num = num + 1; estamos somando um ao valor inicial da varivel num, e isto que chamamos de incrementar (somar um), e ento na ltima linha apresentamos o valor final de num que dever ser: trs

Escola Alcides Maya - Primeiro Mdulo

Agora veja o mesmo programa, mas utilizando o operador de incremento. main( ) { int num; num = 2; printf(Valor inicial = %d \n , num); num++; printf(Novo valor = %d \n , num); } Agora algumas consideraes sobre o programa acima: A nica diferena deste programa para o anterior a linha num++; onde estamos somando um ao valor inicial da varivel num. Mas, haveria uma outra forma de escrever o mesmo programa, veja as alteraes a seguir: main( ) { int num; num = 2; printf(Valor inicial = %d \n , num++ ); printf(Novo valor = %d \n , num); } Encontrou as diferenas? Neste programa apagamos a linha num++; porque colocamos o incremento na linha anterior printf(Valor inicial = %d \n , num++ ); onde voc deve notar que ao final da printf estamos usando o incremento do num++. Voc deve estar se perguntando: Mas no seria apresentado o valor 3 j na primeira printf? E a resposta : No, estamos usando a regra de precedncia, neste programa primeiro ele apresenta o valor de num para depois incrementa-lo. Este operador trabalha de dois modos. O primeiro modo chamado pr-fixado e o operador aparece antes do nome da varivel. O segundo modo o ps-fixado em que o operador aparece seguindo o nome da varivel. Em ambos os casos, a varivel incrementada. Porm quando ++num usado numa instruo, num e incrementada antes de seu valor ser usado, e quando num++ estiver numa instruo, num incrementada depois de seu valor ser usado. Veja o exemplo a seguir.

22

Fundamentos de Programao
main( ) { int n,x; n = 5; x = n++; printf(Valor de x = %d \n , x); printf(Valor de n = %d \n , n); } Veja o que aconteceu neste programa: Na linha n = 5; atribumos o valor 5 a varivel n Na linha seguinte x = n++; o valor de n atribudo a x e depois n incrementada de 1, tornando seu valor

6.

Na primeira printf a sada ser: Valor de x = 5 e na outra vai ser: Valor de n = 6 comprovando que quando o operador ps-fixado ele incrementa o valor da varivel depois de seu valor ser usado.

Vejamos o mesmo exemplo utilizando agora o operador de incremento sendo utilizado pr-fixado. main( ) { int n,x; n = 5; x = ++n; printf(Valor de x = %d \n , x); printf(Valor de n = %d \n , n); } Veja o que aconteceu neste programa: Na linha n = 5; atribumos o valor 5 a varivel n Na linha seguinte x = ++n; o valor de n incrementada de 1 tornando seu valor 6, e atribudo a x. Na primeira printf a sada ser: Valor de x = 6 e na outra vai ser: Valor de n = 6 comprovando que quando o operador pr-fixado ele incrementado de um e depois o seu valor ser usado. Operadores aritmticos de atribuio +=, -=, *=, /=, %= Nestes operadores usado um nome de varivel a sua esquerda e uma expresso a sua direita. A operao consiste em atribuir um novo valor a varivel que depender do operador e da expresso direita. Se n uma varivel, exp uma expresso e op um operador aritmtico, ento: n op= exp; Equivale a n = (n) op (exp);

23

Exemplos:

Escola Alcides Maya - Primeiro Mdulo


equivale a equivale a equivale a equivale a equivale a i = i + 2; x = x * (y+1); t = t / 2.5; p = p % 5; d = d - 3;

i + = 2; x *= y+1; t /= 2.5; p %= 5; d -= 3;

Uma expresso com estes operadores so mais compactos e normalmente produzem um cdigo de mquina mais eficiente. Exerccios de Fixao 1. Analise o programa abaixo e informe os valores apresentados na tela: main( ) { int a=1, b=2, c=3, d; d = a; printf(%d \n , d); d = b++; printf(%d \n , d); d = ++c; printf(%d \n , d); a += b; printf(%d \n , a); c *= b; printf(%d \n , c); }

/* valor de d: _________ */

/* valor de d: _________ */

/* valor de d: _________ */

/* valor de a: _________ */

/* valor de c: _________ */

2. Assuma que todas as variveis so do tipo int. Encontre o valor de cada uma delas e escreva um programa que as imprima para verificar os resultados: a) x = ( 2 + 1 ) * 6; b) y = ( 5 + 1 ) / 2 * 3; c) i = j = ( 2 + 3 ) / 4; d) a = 3 + 2 * ( b = 7 / 2 ); e) c = 5 + 10 % 4 / 2; 3. Reescreva as seguintes instrues usando os operadores de incremento e decremento: num = num + 1; num = num 1;

24

Fundamentos de Programao
4. Reescreva as seguintes instrues usando os operadores aritmticos de atribuio: num1 = num1 + num2; num2 = num2 num1; 5. Analise o programa abaixo e informe os valores apresentados na tela: main( ) { int num=0; printf(%d \n , num); /* valor de num: _________ */ /* valor de num: _________ */

printf(%d \n , num++); printf(%d \n , num); }

/* valor de num: _________ */

6. Analise o programa abaixo e informe os valores apresentados na tela: main( ) { int num=0; printf(%d \n , num); /* valor de num: _________ */ /* valor de num: _________ */

printf(%d \n , ++num); printf(%d \n , num); }

/* valor de num: _________ */

7. Analise o programa abaixo e informe os valores apresentados na tela: main( ) { int num=0; printf(%d \n , num); /* valor de num: _________ */ /* valor de num: _________ */

printf(%d \n , - -num); printf(%d \n , num); }

/* valor de num: _________ */

25

8. Analise o programa abaixo e informe os valores apresentados na tela: main( ) { int num=0; printf(%d \n , num); /* valor de num: _________ */ /* valor de num: _________ */

Escola Alcides Maya - Primeiro Mdulo

printf(%d \n , num- -); printf(%d \n , num); }

/* valor de num: _________ */

9. Analise o programa abaixo e informe os valores apresentados na tela: main( ) { int num=0; num += 10; printf(%d \n , num); num += 10; printf(%d \n , num); }

/* valor de num: _________ */

/* valor de num: _________ */

Em nosso primeiro programa colocamos na tela do computador, atravs da funo printf uma seqncia de caracteres entre aspas Meu primeiro programa, lembra ? Havia escrito que podemos cham-la de cadeia de caracteres ou de String. Usaremos, a partir deste momento, apenas String. String uma das mais importantes formas de dados em C e usada para armazenar e manipular textos como palavras, nomes e sentenas. String um vetor unidimensional do tipo char terminada pelo caractere null. Composta de uma srie de caracteres, a definio de string como sendo um vetor do tipo char bastante razovel. Cada caractere de uma string pode ser acessado como um elemento do vetor o que proporciona uma grande flexibilidade aos programas que processam textos. Na string a seguir: Alcides Maya cada caractere ocupa um byte de memria e o ltimo caractere sempre \0(null). Veja uma representao de como uma string no computador: A l c I d e s M a y a \0

Strings Um tipo especial de caracteres

No exemplo acima temos uma srie de elementos do vetor de caracteres, sendo que o primeiro elemento, onde est a letra A o elemento 0 (zero) do vetor. O segundo elemento, onde est a letra l o elemento 1 (um) do vetor. O terceiro elemento, onde est a letra c o elemento 2 (dois) do vetor e assim sucessivamente. A 0 l 1 c 2 I 3 d 4 e 5 s 6 7 M 8 a 9 y 10 a 11 \0 12

26

Fundamentos de Programao
Variveis que armazenam uma string Uma das maneiras de receber uma string do teclado atravs da funo scanf( ) pelo formato %s. main( ) { char nome[16]; printf(Digite seu nome: ); scanf(%s , &nome[0]); printf(Ol, %s, tudo bem? , nome); } Agora algumas consideraes sobre o programa acima: Na declarao: char nome[16]; declaramos a varivel nome do tipo char que tem um tamanho de 16 caracteres, reservando o ltimo elemento da string para o caracter \0 (null). Na linha printf(Digite seu nome: ); voc encontra uma string entre as aspas Na prxima linha scanf(%s , &nome[0]); temos a funo scanf() que vai ler uma string e armazenar na varivel nome. Voc deve ter notado que usamos o operador & precedendo o segundo argumento de scanf() e tambm que estamos fazendo referncia ao primeiro elemento do vetor [0]. Visto que o nome de um vetor o seu endereo inicial poderamos usar a scanf() da seguinte forma: scanf(%s , nome); que o resultado seria o mesmo. Na ltima linha printf(Ol, %s, tudo bem? , nome); estamos apresentando o contedo do vetor.

Ler uma string consiste em dois passos: reservar espao de memria para armazen-la e usar alguma funo que permita a sua entrada. O primeiro passo declarar a string especificando o seu tamanho, sempre com um espao a mais para o caracter \0 (null). char nome[16]; Uma vez reservado o espao necessrio voc pode usar a funo scanf() para receber a string. A funo scanf() bastante limitada para a leitura de strings. Por exemplo, considere a seguinte execuo do Exerccio 26. Digite seu nome: Alcides Maya Ol, Alcides, tudo bem? O programa subitamente eliminou o ltimo nome. Lembre-se de que scanf() usa qualquer espao em branco para terminar a entrada. O resultado que no existe uma forma de digitar um texto de mltiplas palavras numa nica varivel usando scanf(). A funo scanf() usada, principalmente para ler uma mistura de tipos de dados numa mesma instruo. Por exemplo, se em cada linha de entrada quisermos ler o nome de um material do estoque, o seu nmero do estoque e o seu preo, scanf() se adaptam perfeitamente. Lendo strings com a Funo gets() A funo gets() bastante conveniente para a leitura de strings. O seu propsito ler uma string da sua entrada padro, que por default o teclado. Visto que uma string no tem um tamanho predeterminado, gets( ) I caracteres at encontrar o de nova linha (\n) que gerado pressionando-se a tecla [Enter]. Todos os caracteres anteriores ao \n so armazenados na string e ento includo o caractere \0. Caracteres brancos como espaos e tabulaes so perfeitamente aceitveis como parte da string. Eis um

Lendo strings com a Funo scanf()

27

exemplo simples:

Escola Alcides Maya - Primeiro Mdulo

main( ) { char nome[16]; printf(Digite seu nome: ); gets(nome); printf(Ol, %s, tudo bem? , nome); ) Agora algumas consideraes sobre o programa acima: No programa anterior usamos scanf(%s , &nome[0]); mas agora, utilizamos gets(nome); que poder ler mais de uma palavra separada por espao em branco. A funo gets( ) exatamente o que procurvamos: agora o programa lembrar todo o nome. Agora ao digitarmos duas ou mais palavras, ser armazenado o nome completo. Se forem digitadas as palavras Alcides Maya, teremos o resultado apresentado como no exemplo abaixo: Digite seu nome: Alcides Maya Ol, Alcides Maya, tudo bem? OBSERVAO: Se voc digitar um nome maior que o espao reservado para o string, (15 caracteres no programa acima) o programa segue armazenando os dados na memria do computador, sem fazer qualquer consistncia em relao ao tamanho do string, podendo armazenar em cima da rea de programa, que est na memria do computador. Experimente rodar o programa acima digitando as seguintes palavras: Escola Tcnica Alcides Maya, e veja o que poder acontecer. Inicializando strings O compilador oferece uma forma de inicializao de strings consideravelmente mais simples: char nome[ ] = Ana; Enquanto os caracteres simples so colocados entre aspas simples, a string colocada entre aspas duplas. O uso da segunda forma causa a incluso automtica do caractere \0, ou seja teremos a seguinte string na memria. A n a 0 1 2 \0 3

main( ) { char nome[ ] = Alcides Maya; printf(Ol, %s, tudo bem? , nome); }

28

Fundamentos de Programao
Agora algumas consideraes sobre o programa acima: Na linha char nome[ ] = Alcides Maya; estamos declarando a varivel nome que do tipo vetor de caracteres e j est sendo inicializada com o valor Alcides Maya, ele ter um tamanho de 13 caracteres, j contando o lugar reservado para o \0 (null). 1. Faa um programa que leia o nome de 2 pessoas e armazene os nomes lidos (use a funo scanf para ler os nomes). Depois escreva na tela os nomes lidos. 2. Faa um programa que leia o nome de 2 pessoas e armazene os nomes lidos (use a funo gets para ler os nomes). Depois escreva na tela os nomes lidos. 3. Faa um programa que leia trs frases. As frases devero ser armazenadas e depois ser apresentadas na tela. 4. Faa um programa que declare uma string de 80 caracteres de espao em branco. Depois escrever 25 printfs que imprimam esta string na tela. O que acontece? 5. Faa um programa que leia o teu nome, o nome da tua me e escreva na tela o teu nome e o nome da tua me, cada um em uma linha da tela. 6. Quais das declaraes de string est correta? ( ) string nome[80]; ( ) char nome(80); ( ) char nome[80]; ( ) char nome = 80; ( ) Nenhuma alternativa acima 7. Qual das funes mais apropriada para ler uma string composta por vrias palavras? ( ( ( ( ( ) ) ) ) ) scanf printf puts gets Nenhuma alternativa acima

Exerccios de Fixao

8. Assuma a seguinte inicializao: char nome[] = Escola Alcides Maya; Como voc se refere string Maya (as ltimas 4 letras da string)?

9. Qual o erro da instruo abaixo? nome = Alcides Maya;

29

10. ( ) ( ) ( ) ( ) ( )

Escola Alcides Maya - Primeiro Mdulo

Qual o ltimo caractere de uma string? \n \t \s \0 Nenhuma alternativa acima

4 Estruturas de Controle A Tomada de Decises


Foi visto anteriormente como trabalhar com entrada, processamento e sada utilizando funes, variveis e operadores. Apesar de j se conseguir solucionar problemas e transforma-los em programas, os recursos at aqui estudados so limitados, pois haver momentos em que um determinado valor dentro de um programa necessitar ser tratado para se efetuar um processamento mais adequado. Imagine a seguinte situao: um programa que apresente a mdia escolar de um aluno. At aqui, muito simples, mas alm de calcular a mdia, o programa deve apresentar se ele est aprovado ou reprovado segundo a anlise de sua mdia. Observe que aqui ser necessrio verificar a mdia do aluno para ento tomar uma deciso no sentido de apresentar a sua real situao: aprovado ou reprovado. Tomar esta deciso implica em comparar a mdia com um valor numrico, e para realizar esta comparao utilizamos operadores relacionais que veremos a seguir. Operadores relacionais Os operadores relacionais so usados para fazer comparaes. So eles: Operador > >= < <= == != Ao maior do que maior ou igual menor do que menor ou igual igual a diferente Exemplo 5 > 2 5 >= 7 5 < 7 5 <= 7 5 == 7 5 != 7 Resultado V F V V F V

Operadores relacionais so o vocabulrio que o programa usa para fazer perguntas. Em C no existe um tipo de varivel chamada booleana, isto , que assuma um valor verdadeiro ou falso. O valor zero (0) considerado falso e qualquer valor diferente de zero (0) considerado verdadeiro. Vamos fazer um exemplo que possa identificar estes operadores. main( ) { int valor1, valor2; printf(Informe um valor1: ); scanf(%d , &valor1); printf(Informe um valor2: ); scanf(%d , &valor2); printf(valor1 > valor2 %d \n , (valor1 > valor2) ); printf(valor1 < valor2 %d \n , (valor1 < valor2) ); printf(valor1 >= valor2 %d \n , (valor1 >= valor2) );

30

Fundamentos de Programao
printf(valor1 <= valor2 %d \n , (valor1 <= valor2) ); printf(valor1 == valor2 %d \n , (valor1 == valor2) ); printf(valor1 != valor2 %d \n , (valor1 != valor2) ); }

Desvio Condicional Simples

O comando if, que significa se, utilizado para fazer um Desvio Condicional Simples. Sua forma geral : if (expresso) comando; Onde a expresso avaliada; se for verdadeira (isto , se a expresso tiver um valor diferente de zero), o comando executado. Desde que um if simplesmente testa o valor numrico de uma expresso, certas abreviaes na codificao so possveis. A mais bvia escrever: if (expresso) Ao invs de if (expresso ! = 0) Algumas vezes isso natural e claro; outras vezes, totalmente obscuro. Iniciaremos nosso estudo do if com um programa simples, que l um nmero do teclado e escreve na tela de seu computador se o nmero digitado positivo. main( ) { int num; printf (Digite um nmero: ); scanf (%d , &num); if (num > 0) printf (O nmero digitado positivo); } Agora algumas consideraes sobre o programa acima: Declaramos uma varivel numrica do tipo inteiro e pedimos para o usurio digitar um nmero. Na linha if (num > 0) estamos testando o nmero digitado para saber se o mesmo maior do que zero. Se o resultado desta expresso for verdadeira a linha printf (O nmero digitado positivo); ser executada. Repare que o comando abaixo do if foi colocado alguns espaos mais para dentro da linha, este processo de codificao chamado de edentao. Isto facilita a leitura de um programa em qualquer linguagem. Para o compilador no necessrio a edentar, mas para os programadores, quando esto depurando erros de programao, extremamente til.

31

Desenvolver um programa que leia dois valores numricos. Efetuar a adio e apresentar o seu resultado caso o valor somado seja maior que 10.

Exemplo de Aula Primeiro exemplo Algoritmo

Escola Alcides Maya - Primeiro Mdulo

1 Ler um valor para a varivel A e outro valor para a varivel B; 2 Efetuar a soma dos valores incgnitos A e B, atribuindo o valor da soma na varivel X; 3 Apresentar o valor da soma contido na varivel X, caso o valor de X seja maior que 10.

Codificao em Linguagem C
main( ) { int A,B,X; clrscr( ); printf ( Digite um nmero: ); scanf ( %d, &A ); printf ( Digite outro nmero: ); scanf ( %d, &B ); X = A + B; if ( X > 10 ) printf ( A Soma dos nmeros e: %d , X ); getch( ); } O comando if-else, onde o if significa se e o else significa seno utilizado para fazer um Desvio Condicional Composto. Sua forma geral :

Desvio Condicional Composto

if (expresso) comando_1; else comando_2;

Onde a expresso avaliada; se for verdadeira (isto , se a expresso tiver um valor diferente de zero), o comando_1 executado. Se for falsa (isto , se a expresso tiver um valor igual a zero) e se houver uma parte else, o comando_2 executado. Continuaremos o estudo do if-else com um programa simples, que l um nmero do teclado e escreve na tela de seu computador se o nmero digitado positivo ou se negativo.

32

Fundamentos de Programao
main( ) { int num; printf (Digite um nmero: ); scanf (%d , &num); if (num > 0) printf (O nmero digitado positivo); else printf (O nmero digitado negativo); } Agora algumas consideraes sobre o programa acima: Declaramos uma varivel numrica do tipo inteiro e pedimos para o usurio digitar um nmero. Na linha if (num > 0) estamos testando o nmero digitado para saber se o mesmo maior do que zero. Se o resultado desta expresso for verdadeira a linha printf (O nmero digitado positivo); ser executada. Na linha else (seno for um nmero maior do que zero) estamos indicando para o programa executar a linha printf (O nmero digitado negativo);

Exemplo de Aula
Primeiro exemplo
Desenvolver um programa que ler dois valores numricos e efetuar a adio. Caso o valor somado seja maior ou igual a 10, dever ser apresentado somando a ele mais 5; caso o valor somado no seja maior ou igual a 10, este dever ser apresentado subtraindo 7.

Algoritmo
1 Ler um valor para a varivel A e outro valor para a varivel B; 2 Efetuar a soma dos valores incgnitos A e B, atribuindo o valor da soma na varivel X; 3 Verificar se X maior ou igual a 10; caso seja verdadeiro, calcule R x + 5. Seno calcule R X 7.

Codificao em Linguagem C
main( ) { int A,B,X,R;

clrscr( ); printf ( Digite um numero: ); scanf ( %d, &A ); printf ( Digite outro numero: ); scanf ( %d, &B ); X = A + B; if ( X >= 10 ) R = X + 5;

33

else R = X - 7;

Escola Alcides Maya - Primeiro Mdulo

printf ( O resultado do calculo e: %d , R ); getch( ); }

Quando desejamos agrupar comandos, criando um bloco de comandos, utilizamos o abre chaves { e fecha chaves } para encapsular estes comandos. No if a mesma coisa, caso vrios comandos sejam necessrios no corpo do comando if, eles devem estar entre chaves. Sua forma geral : if (expresso) { comando_11; comando_12; comando_13; } else { comando_21; comando_22; } Onde a expresso avaliada; se for verdadeira os comando_11, comando_12 e o comando_13 so executados. Se for falsa o comando_21 e o comando_22 so executados. O programa abaixo d um exemplo de como encapsulamos comandos. main( ) { int num; printf (Digite um nmero: ); scanf (%d , &num); if (num > 0) { printf (O nmero ); printf (digitado ); printf (positivo); }

Mltiplos comandos dentro de um if

34

Fundamentos de Programao
else { printf (O nmero digitado ); printf (negativo); } }

Exerccios de Fixao
Vamos fazer alguns exerccios 1. FUP que leia dois nmeros quaisquer, e escreva o maior deles. 2. FUP que leia dois nmeros quaisquer, e escreva o menor deles. 3. FAA UM PROGRAMA que leia dois nmeros quaisquer, e escreva o resultado do clculo do maior dividido pelo menor. 4. FAA UM PROGRAMA que leia a receita e a despesa de uma empresa e apresente se ela est com LUCRO ou com PREJUZO. 5. FAA UM PROGRAMA que leia 4 notas escolares de um aluno. Calcule e apresente a mdia. Sabendo-se que a mdia de aprovao da escola 7, apresente a informao se o aluno foi APROVADO ou REPROVADO. 6. FAA UM PROGRAMA que leia dois nmeros e apresente o sinal do produto entre eles. Considere que somente nmeros diferentes de zero sero digitados. 7. FAA UM PROGRAMA que leia um nmero e escreva maior do que 100, se o nmero digitado for maior que 100 e escreva menor do que 100, se o nmero for menor do que 100. 8. FAA UM PROGRAMA que leia um cdigo:1 sinal vermelho, 2 sinal verde. Baseado no cdigo digitado diga para o pedestre que est esperando no sinal:SIGA ou ESPERE 9. FAA UM PROGRAMA que leia a quantidade de vitrias e a quantidade de derrotas de um time de futebol. Escrever BOM se o nmero de vitrias for maior que o nmero de derrotas, caso contrrio escrever RUIM.

Existem casos em que necessrio estabelecer verificao de condies sucessivas, em que uma determinada ao poder ser executada se um conjunto anterior de instrues ou condies for satisfeito. Sendo a ao executada, ela poder ainda estabelecer novas condies. Isto significa utilizar uma condio dentro de outra condio. Este tipo de estrutura poder possuir diversos nveis de condio, sendo chamadas de aninhamentos ou encadeamentos.

Desvio Condicional Encadeado

Exemplos de Aula
Primeiro exemplo
Desenvolver a lgica para um programa que efetue o clculo do reajuste de salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15% caso seu salrio seja menor que 500. Se o salrio for maior ou igual a 500, mas menor ou igual a 1000, seu reajuste ser de 10%; caso seja ainda maior que 1000, o reajuste dever ser de 5%.

Algoritmo
Perceba que o problema em questo estabelece trs condies para calcular o reajuste do salrio do funcionrio, sendo: Salrio <= 500, reajuste de 15% Salrio > 500, mas <= 1000, reajuste ser de 10% Salrio > 1000, reajuste ser de 5% Estas condies devero ser encadeadas, pois todas as possibilidades de reajuste devero ser cercadas. Sendo assim, observe o algoritmo abaixo:

35

1 Definir uma varivel para o salrio reajustado: novo_salario; 2 Ler um valor para a varivel salrio; 3 Verificar se o valor de salario <= 500, se sim reajustar em 15%; 4 Verificar se o valor de salario <= 1000, se sim reajustar em 10%; 5 Verificar se o valor de salario > 1000, se sim reajustar em 5%; 6 Apresentar o valor reajustado, atribuindo a novo_salrio. Codificao em Linguagem C main( ) { float novo_salario,salario; printf ( Digite o valor do salario: ); scanf ( %f, &salario ); if ( salario <= 500 ) novo_salario = salario * 1.15; else if ( salario <= 1000 ) novo_salario = salario * 1.10; else novo_salario = salario * 1.05; printf ( O novo salario e: %12.2f , novo_salario ); }

Escola Alcides Maya - Primeiro Mdulo

Exerccios de Fixao Vamos fazer alguns exerccios 1 - FAA UM PROGRAMA que leia o valor do salrio hora, a quantidade de horas trabalhadas e a quantidade de filho menores de 14 anos de um funcionrio. Calcular o valor do salrio bruto. Para calcular o valor do salrio famlia levar em considerao o seguinte: Se o salrio bruto for at R$ 500,00 o salrio famlia ser de R$ 10,50 por cada filho; Se o salrio bruto for acima de R$ 500,00 at R$ 1.000,00 o salrio famlia ser de R$ 6,50 por cada filho; Se o salrio bruto for acima de R$ 1.000,00 o salrio famlia ser de R$ 1,50 por cada filho. No final apresentar o valor do salrio bruto e o valor do salrio famlia a ser recebido. 2 - FAA UM PROGRAMA que leia o salrio bruto de uma pessoa e calcule o desconto do INSS levando em considerao o seguinte: Para salrios at R$ 500,00 a alquota de INSS ser de 8% Para sal.acima de R$ 500,00 at R$ 1.000,00 a alquota de INSS ser de 10% Para sal.acima de R$ 1.000,00 a alquota de INSS ser de 12%. No final dever ser apresentado: Salrio bruto Taxa de INSS Valor de INSS Salrio lquido

36

Fundamentos de Programao
3 - FAA UM PROGRAMA que leia o cdigo de uma mercadoria e que escreva o nome do produto conforme tabela abaixo: 1 Sabo 2 Vassoura 3 Detergente 4 - FAA UM PROGRAMA que leia dois nmeros e o cdigo de uma operao matemtica (+, -, *, /) e que apresente o resultado da operao. Por exemplo: se forem digitados os nmeros [2] e [5] e a operao [-], ser apresentado o resultado [-3].

Operadores Lgicos Os operadores lgicos, como o prprio nome diz, avaliam uma expresso lgica e retornam valores tambm lgicos, ou seja, verdadeiro ou falso. Em vrias ocasies na tomada de decises temos que usar os operadores lgicos. Os operadores lgicos mais comuns so: .e., .ou., .no., representados em portugus estruturado, mas que em linguagem C so respectivamente &&, ||, !. A tabela seguinte apresenta todos os operadores lgicos da linguagem C: Operador Representao Descrio && .e. Efetua a operao lgica E. Se ambas as expresses forem verdadeiras, ento o resultado ser verdadeiro. || .ou. Efetua a operao OU. Se uma das expresses (ou ambas) for verdadeira, ento o resultado ser verdadeiro. ! .no. Efetua a operao lgica NO. Inverte o estado lgico de uma expresso; se ela for verdadeira, tona-a falsa e vice-versa. Para entender melhor como funcionam os operadores lgicos, vamos analisar cada um deles. O Operador Lgico && O operador lgico && (.E.) pode ser visto como um conector lgico. Imagine que voc possua dois fios ligados a uma lmpada e a uma bateria. A lmpada somente acender se voc tiver ligado ambos os fios aos plos da bateria. Acompanhe esse exemplo no seguinte diagrama: Fio vermelho ligado Falso Verdadeiro Falso Verdadeiro Frio preto ligado Falso Falso Verdadeiro Verdadeiro Lmpada acende Falso Falso Falso Verdadeiro

Exemplos de Aula Primeiro exemplo Desenvolver um programa que leia um nmero. Informar se o nmero digitado est na faixa de 20 a 90. Algoritmo 1 Ler um valor para a varivel num; 2 Se o valor digitado estiver na faixa de 20 a 90 apresentar uma mensagem informando.

37

Codificao em Linguagem C
main( ) { int num; clrscr( ); printf ( Digite um nmero: ); scanf ( %d, &num );

Escola Alcides Maya - Primeiro Mdulo

if (num >= 20 && num <= 90) printf ( O nmero est na faixa de 20 a 90 ); else printf ( O nmero est fora da faixa de 20 a 90 ); getch( ); } O operador lgico .e. escrito em C atravs do operador && , observe tambm a posio dos parnteses. Segundo exemplo Desenvolver a lgica para um programa que leia um ngulo (entre 0 e 360) e que escreva o quadrante ao qual pertence. Ignorar os eixos. Algoritmo 1 Ler um valor para a varivel angulo; 2 Verificar se o ngulo digitado > 0 e < 90, se for verdade: ngulo est no primeiro quadrante 3 Verificar se o ngulo digitado > 90 e < 180, se for verdade: ngulo est no segundo quadrante 4 Verificar se o ngulo digitado > 180 e < 270, se for verdade: ngulo est no terceiro quadrante 5 Verificar se o ngulo digitado > 270 e < 360, se for verdade: ngulo est no quarto quadrante

Codificao em Linguagem C
main( ) { int angulo;

clrscr( ); printf ( Digite um angulo: ); scanf ( %d, &angulo ); if (angulo > 0 && angulo < 90) printf ( Angulo no primeiro quadrante ); else if (angulo > 90 && angulo < 180) printf ( Angulo no segundo quadrante ); else if (angulo > 180 && angulo < 270) printf ( Angulo no terceiro quadrante ); else

38

Fundamentos de Programao
if (angulo > 270 && angulo < 360) printf ( Angulo no quarto quadrante ); getch( ); }

Operador Lgico: .ou.


O operador do tipo .ou. utilizado quando pelo menos um dos relacionamentos lgicos (quando houver mais de um relacionamento) de uma condio necessita ser verdadeiro. Abaixo, apresentada a tabela de deciso para este tipo de operador: Condio 1 Falsa Verdadeira Falsa Verdadeira Condio 2 Falsa Falsa Verdadeira Verdadeira Resultado Falso Verdadeiro Verdadeiro Verdadeiro

Considere agora, como exemplo, que voc deseja escrever uma carta. Se voc tiver uma mquina de escrever ou (OR) um microcomputador, pode tranqilamente satisfazer seu desejo. Acompanhe o diagrama em seguida: Tem mquina Falso Verdadeiro Falso Verdadeiro Exemplos de Aula Desenvolver um programa que leia o cdigo relativo ao sexo (masculino=1 ou feminino=2). Se for digitado um cdigo correto informar que o cdigo vlido, caso contrrio informar que o cdigo invlido. Tem computador Falso Falso Verdadeiro Verdadeiro Pode escrever Falso Verdadeiro Verdadeiro Verdadeiro

Primeiro exemplo Algoritmo

1 Ler um cdigo numrico para a varivel codigo; 2 Se o cdigo digitado for igual a 1 ou igual a 2 apresentar uma mensagem informando que o cdigo vlido caso contrrio informar que o cdigo invlido.

39

Codificao em Linguagem C
main( ) { int codigo;

Escola Alcides Maya - Primeiro Mdulo

clrscr( ); printf( Digite 1 - para sexo masculino\n ); printf( Digite 2 - para sexo feminino: ); scanf( %d, &codigo ); if ( codigo == 1 || codigo == 2 ) printf ( O cdigo do sexo e vlido ); else printf ( O cdigo do sexo e invlido ); getch( ); } O operador lgico .ou. escrito em C atravs do operador | | (barra,barra). O operador do tipo .no. utilizado quando houver necessidade de estabelecer a inverso do resultado lgico de uma determinada condio. Se a condio for verdadeira, ser considerada falsa. Se a condio for falsa, ser considerada verdadeira. Abaixo, apresentada a tabela de deciso para este tipo de operador: Condio Falsa Falsa Resultado Verdadeiro Verdadeiro

Operador Lgico: .no.

Considere agora, como exemplo, que se voc possui um carro e o pneu est furado, voc no (NOT) pode viajar. o que mostra a tabela abaixo: Pneu est furado Falso Verdadeiro Pode viajar Verdadeiro Falso

Primeiro exemplo Desenvolver a lgica para um programa que somente efetue o clculo de C (A + B) * X, se o valor da varivel X no for maior que 5. Qualquer valor de 5 para baixo efetuar o clculo C (A + B) * X. Se forem informados os valores 5, 1 e 2, respectivamente, para as variveis A, B e X, resultar para a varivel C o valor 12, pois o valor 2 da varivel X controlado pela instruo se .no. (X > 5) ento, como sendo verdadeiro, uma vez que no maior que 5. Sendo assim, os valores 5 e 1 so somados resultando 6 e multiplicados por 2 resultando 12. Mas se forem informados os valores 5, 1 e 6, respectivamente, para as variveis A, B e X, resultar para a varivel C o valor 24, pois o valor 6 da varivel X controlado pela instruo se. no. (X > 5) ento, como sendo falso. Sendo assim, os valores 5 e 1 so subtrados resultando 4 e multiplicados por 6 resultando 24.

Exemplos de Aula

40

Fundamentos de Programao
Algoritmo 1 Ler um valor numrico para a varivel A ,B, X; 2 Se .no. (X > 5) ento calcular: C (A + B) * X caso contrrio calcular: C (A B) * X 3 - Apresentar o valor do resultado do clculo. Codificao em Linguagem C main( ) { int A, B, C, X; clrscr( ); printf( \nDigite um numero qualquer.....: ); scanf ( %d,&A ); printf( \nDigite outro numero qualquer..: ); scanf ( %d,&B ); printf( \nDigite mais um numero qualquer: ); scanf ( %d,&X ); if ( !(X > 5) ) C = (A + B) * X; else C = (A - B) * X; printf ( O resultado do calculo e: %d, C ); getch( ); } O operador lgico .no. escrito em C atravs do operador ! (exclamao).

Exerccios de Aula
Primeiro exerccio
Ler trs valores para os lados de um tringulo, considerando lados como: A, B e C. Verificar se os lados fornecidos formam realmente um tringulo, e se for esta condio verdadeira, dever ser indicado qual tipo de tringulo foi formado: issceles, escaleno ou eqiltero.

Algoritmo
Para estabelecer este algoritmo, necessrio em primeiro lugar saber o que realmente um tringulo. Se voc no souber o que um tringulo, conseqentemente no conseguir resolver o problema. Tringulo uma forma geomtrica (polgono) composta por trs lados, sendo que cada lado menor que a soma dos outros dois lados. Perceba que isto uma regra (uma condio) e dever ser considerada. um tringulo quando A<B+C, quando B<A+C e quando C<A+B. Tendo certeza de que os valores informados para os trs lados formam um tringulo, sero ento analisados os valores para estabelecer qual tipo de tringulo ser formado: issceles, escaleno ou eqiltero. Um tringulo issceles quando possui dois lados iguais e um diferente, sendo A=B ou A=C ou B=C; escaleno quando possui todos os lados diferentes, sendo A<>B e B<>C e eqiltero quando possui todos os lados iguais, sendo A=B e B=C. 1 Ler trs valores para os lados de um tringulo: A, B e C; 2 Verificar se cada lado menor que a soma dos outros dois lados. Se sim, saber se A=B e B=C, sendo verdade o tringulo eqiltero.

41

Se no, verificar se A=B ou A=C ou B=C, sendo verdade o tringulo issceles; caso contrrio, o tringulo escaleno. 3 Caso os lados fornecidos no caracterizem um tringulo, avisar a ocorrncia.

Escola Alcides Maya - Primeiro Mdulo

Codificao em Linguagem C main( ) { float A, B, C; clrscr( ); printf( Digite um lado do triangulo.....: ); scanf (%f,&A ); printf( Digite outro lado do triangulo..: ); scanf (%f,&B ); printf( Digite o outro lado do triangulo: ); scanf (%f,&C ); if ( A < B + C && B < A + C && C < A + B) if ( A == B && B == C ) printf (Triangulo eqiltero); else if ( A == B || A == C || C == B ) printf (Triangulo Issceles); else printf (Triangulo Escaleno); else printf( As medidas no formam um triangulo ); getch( ); }

1 - FAA UM PROGRAMA que leia as coordenadas de um ponto no plano (x,y) e escreva o quadrante ao qual pertence o ponto no plano. No primeiro quadrante x e y so positivos. No segundo quadrante y positivo. No terceiro quadrante nem x nem y positivo. No quarto quadrante x positivo. 2 - FAA UM PROGRAMA que leia o QI de uma pessoa e escreva uma mensagem baseada na tabela abaixo. Observe que os colchetes identificam um intervalo fechado e os parnteses identificam um intervalo aberto. [ 000, 030 ) - Ameba [ 030, 050 ) - Dbil Mental [ 050, 070 ) - Regular [ 070, 100 ) - Normal [ 100, 150 ] - Gnio Outros - QI invlido

Exerccios de Fixao

42

Fundamentos de Programao
3 - FAA UM PROGRAMA que leia trs notas de uma pessoa. Calcular a mdia e apresentar um conceito conforme a tabela abaixo: [ 10, 09 ] - ( 09, 07 ] - ( 07, 04 ] - ( 04, 00 ] - A B C D

4 - A empresa XYZ & Cia Ltda decidiu conceder um aumento de salrios a seus funcionrios de acordo com a tabela abaixo: SALRIO ATUAL De 0 at 400 Acima de 400 at 700 Acima de 700 at 1000 Acima de 1000 at 1800 Acima de 1800 at 2500 Acima de 2500 NDICE DE AUMENTO 15% 12% 10% 7% 4% 0%

FAA UM PROGRAMA que leia o nmero do funcionrio, o seu salrio atual. Calcular e apresentar o valor do salrio j corrigido.

5 Estruturas de Controle Laos de Repetio


Como j foi visto na disciplina de Lgica de Programao, existem ocasies em que necessrio efetuar a repetio de um trecho de programa um determinado nmero de vezes. Neste caso, poder ser criado um looping que efetue o processamento de um determinado trecho, tantas vezes quantas forem necessrias. Os loopings tambm so chamados de laos de repetio. Vamos agora implementar estas estruturas em linguagem C. Por exemplo, imagine um programa que pea a leitura de um valor para a varivel num, multiplique esse valor por 3, colocando a resposta na varivel result e apresente o valor obtido, repetindo esta seqncia por cinco vezes, conforme mostrado abaixo:

Codificao em Linguagem C
main( ) { int num, result;

printf(\nDigite um nmero: ); scanf(%d , &num); result = num * 3; printf(\nO nmero multiplicado por 3 : %d , result); printf(\nDigite um nmero: ); scanf(%d , &num); result = num * 3; printf(\nO nmero multiplicado por 3 : %d , result);

43

printf(\nDigite um nmero: ); scanf(%d , &num); result = num * 3; printf(\nO nmero multiplicado por 3 : %d , result); printf(\nDigite um nmero: ); scanf(%d , &num); result = num * 3; printf(\nO nmero multiplicado por 3 : %d , result); printf(\nDigite um nmero: ); scanf(%d , &num); result = num * 3; printf(\nO valor digitado multiplicado por 3 : %d , result); } Para estes casos existem comandos apropriados para efetuar a repetio de determinados trechos de programas o nmero de vezes que for necessrio. A principal vantagem deste recurso que o programa passa ater um tamanho menor, podendo sua amplitude de processamento ser aumentada sem alterar o tamanho do cdigo de programao. Desta forma, pode-se determinar repeties com nmeros variados de vezes.

Escola Alcides Maya - Primeiro Mdulo

Repetio do tipo: Teste Lgico no incio do looping


Caracteriza-se por uma estrutura que efetua um teste lgico no incio de um looping, verificando se permitido executar o trecho de instrues subordinado a esse looping. A estrutura em questo denominada de enquanto, sendo conseguida com a utilizao do conjunto de instrues enquanto...faa...fim_enquanto. A estrutura enquanto...faa...fim_enquanto tem o seu funcionamento controlado por deciso. Sendo assim, poder executar um determinado conjunto de instrues enquanto a condio verificada for Verdadeira. No momento em que esta condio se torna Falsa, o processamento da rotina desviado para fora do looping. Se a condio for Falsa logo de incio, as instrues contidas no looping so ignoradas. No incio desta aula fizemos um programa que fazia a leitura de um valor para a varivel num, multiplicava esse valor por 3, colocando a resposta na varivel result e apresentava o valor obtido, repetindo esta seqncia por cinco vezes, porque no conhecamos a estrutura enquanto...faa...fim_enquanto, agora vamos fazer o mesmo exemplo utilizando a estrutura para o controle do lao de repetio.

Exerccios de Aula
Primeiro exemplo Algoritmo
1 Criar uma varivel para servir de contador com valor inicial 1; 2 Enquanto o valor do contador for menor ou igual a 5, processar os passos 3, 4, 5 e 6 3 Ler um valor para a varivel num; 4 Efetuar a multiplicao do valor de num por 3, atribuindo o resultado em result; 5 Apresentar o valor calculado contido na varivel result; 6 Acrescentar +1 a varivel do tipo contador, definida no passo 1; 7 Quando contador for maior que 5, encerrar o processamento do looping. Desenvolver um programa que faa a leitura de um valor para a varivel num, multiplique esse valor por 3, colocando a resposta na varivel result e apresentar o valor obtido, repetindo esta seqncia por cinco vezes.

44

Codificao em Linguagem C
main( ) { int num, result, cont; clrscr( ); cont = 1; while ( cont <= 5 ) { printf ( \nDigite um nmero: ); scanf ( %d , &num ); result = num * 3; printf ( \nO nmero multiplicado por 3 : %d , result ); cont = cont + 1; } getch( ); }

Fundamentos de Programao

Para ilustrar de forma um pouco diferente, imagine que o primeiro exemplo dever ser executado enquanto o usurio queira. Desta forma, em vez de possuir dentro da rotina um contador de vezes, pode-se possuir uma instruo pedindo que o usurio informe se deseja continuar ou no.

Segundo exemplo

Algoritmo

1 Criar uma varivel para ser utilizada como resposta; 2 Enquanto a reposta for sim, executar os passos 3, 4 e 5. 3 Ler um valor para a varivel num; 4 Efetuar a multiplicao do valor de num por 3, atribuindo o resultado em result; 5 Apresentar o valor calculado contido na varivel result; 6 Quando a resposta for diferente de sim, encerrar o processamento do looping.

45

Codificao em Linguagem C
main( ) { int num,result; char resp; clrscr( ); resp = S;

Escola Alcides Maya - Primeiro Mdulo

while( resp == S ) { printf ( \nDigite um numero: ); scanf ( %d, &num ); result = num * 3; printf ( O numero multiplicado por 3 e: %d \n, result ); printf ( Deseja continuar? ); resp = getch( ); } }

Utilizando a estrutura while os exerccios abaixo: 1. FAA UM PROGRAMA que escreva na tela os nmeros de 0 at 20. 2. FAA UM PROGRAMA que escreva na tela os nmeros pares de 0 at 20. 3. FAA UM PROGRAMA que escreva na tela os nmeros de 20 at 0 4. FAA UM PROGRAMA que leia 10 valores inteiros e escreva no final a soma dos valores lidos. 5. FAA UM PROGRAMA que leia 10 valores inteiros e escreva no final a mdia dos valores lidos. 6. FAA UM PROGRAMA que leia 20 valores e escreva no final a soma dos valores positivos e a mdia dos negativos. 7. FAA UM PROGRAMA que leia nmeros at que o usurio no queira mais digitar os nmeros. No final escrever a soma dos valores positivos e a soma dos valores negativos.

Exerccios de Fixao

A estrutura em questo denominada de repita, sendo conseguida com a utilizao do conjunto de instrues repita...at_que. A estrutura repita...at_que tem o seu funcionamento controlado por deciso. Porm, ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Diferente da estrutura enquanto que executa somente um conjunto de instrues, enquanto a condio verdadeira. Desta forma repita tem seu funcionamento em sentido contrrio a enquanto, pois sempre ir processar um conjunto de instrues no mnimo uma vez at que a condio se torne verdadeira. Para a estrutura repita um conjunto de instrues executado enquanto a condio se mantm Falsa at que ela seja Verdadeira.

Repetio do tipo: Teste Lgico no fim do looping

Exemplos de Aula
Primeiro exemplo
Desenvolver um programa que faa a leitura de um valor para a varivel num, multiplique esse valor por 3, colocando a resposta na varivel result e apresentar o valor obtido, repetindo esta seqncia por cinco vezes. o mesmo exemplo utilizado na estrutura enquanto para que voc possa fazer uma comparao entre as estruturas.

46

Algoritmo

Fundamentos de Programao

1 Criar uma varivel para servir de contador com valor inicial 1; 2 Ler um valor para a varivel num; 3 Efetuar a multiplicao do valor de num por 3, atribuindo o resultado em result; 4 Apresentar o valor calculado contido na varivel result; 5 Acrescentar +1 a varivel do tipo contador, definida no passo 1; 6 Repita os passos 2, 3, 4 e 5 at que o contador seja maior que 5.

Codificao em Linguagem C
main( ) { int num,result; int cont; clrscr( ); cont = 1; do { printf ( \nDigite um numero: ); scanf ( %d, &num ); result = num * 3; printf ( O numero multiplicado por 3 e: %d \n, result ); cont = cont + 1; } while ( cont <= 5 ); } Na linguagem C temos uma pequena mudana, pois, o lao de repetio com o teste no final tem a seguinte traduo: faa...enquanto ou seja no lao de repetio acima ele ser executado enquanto a condio cont <= 5 for verdadeira, quando ela tornar-se falsa ento ele encerra o lao de repetio.

A seguir, apresentado o exemplo em que no se utiliza o contador como forma de controle de execuo de vezes de uma rotina em uma estrutura de repetio. Considere que ser o usurio que encerrar o processamento segundo a sua vontade.

Segundo exemplo

Algoritmo

1 Criar uma varivel para ser utilizada como resposta; 2 Ler um valor para a varivel num; 3 Efetuar a multiplicao do valor de num por 3, atribuindo o resultado em result; 4 Apresentar o valor calculado contido na varivel result; 5 Repetir os passos 2, 3, 4 e 5 at que a resposta do usurio seja no.

47

Codificao em Linguagem C
main( ) { int num,result; char resp;

Escola Alcides Maya - Primeiro Mdulo

clrscr( ); do { printf ( \nDigite um numero: ); scanf ( %d, &num ); result = num * 3; printf ( O numero multiplicado por 3 e: %d \n, result ); printf ( Deseja continuar? ); resp = getch( ); } while( resp == S ); }

Exerccios de Fixao
Vamos fazer alguns exerccios 1. FAA UM PROGRAMA que leia nmeros at que o usurio no queira escrever a soma dos valores lidos. 2. FAA UM PROGRAMA que leia nmeros at que o usurio no queira escrever a mdia dos valores lidos. 3. FAA UM PROGRAMA que leia nmeros at que o usurio no queira escrever a soma dos valores positivos e a soma dos valores negativos. 4. FAA UM PROGRAMA que leia nmeros at que o usurio no queira escrever a soma dos valores positivos e a mdia dos valores negativos. mais digitar os nmeros. No final mais digitar os nmeros. No final mais digitar os nmeros. No final mais digitar os nmeros. No final

Anteriormente, foram vistas duas formas de elaborar looping. Uma usando o conceito enquanto e a outra usando o conceito repita. Foi visto tambm como elaborar rotinas que efetuaram a execuo de um looping um determinado nmero de vezes com a utilizao de um contador (por meio de uma varivel de controle). Porm, existe uma possibilidade de facilitar o uso de contadores finitos sem fazer uso das duas estruturas anteriores, deixando-as para utilizao de loopings em que no se conhece de antemo o nmero de vezes que uma determinada seqncia de instrues dever ser executada. Os loopings que possuem um nmero finito de execues podero ser processador por meio de estrutura de laos contados do tipo para, sendo conseguida com a utilizao do conjunto de instrues para...de...at...passo...faa...fim_para. A estrutura para...de...at...passo...faa...fim_para tem o seu funcionamento controlado por uma varivel denominada contador. Sendo assim, poder executar um determinado conjunto de instrues um determinado nmero de vezes.

Repetio do tipo: Varivel de Controle

Desenvolver um programa que faa a leitura de um valor para a varivel num, multiplique esse valor por 3, colocando a resposta na varivel result e apresentar o valor obtido, repetindo esta seqncia por cinco vezes. o mesmo exemplo utilizado na estrutura enquanto para que voc possa fazer uma comparao entre as estruturas.

Exemplos de Aula Primeiro exemplo

48

Algoritmo

Fundamentos de Programao

1 Definir um contador, variando de 1 a 5; 2 Ler um valor para a varivel num; 3 Efetuar a multiplicao do valor de num por 3, atribuindo o resultado em result; 4 Apresentar o valor calculado contido na varivel result; 5 Repitir os passos 2, 3, 4 e 5 at que o contador seja encerrado. Codificao em Linguagem C main( ) { int num,result; int cont; clrscr( ); for( cont=1; cont <= 5; cont++ ) { printf ( \nDigite um numero: ); scanf ( %d, &num ); result = num * 3; printf ( O numero multiplicado por 3 e: %d \n, result ); } }

Segundo exemplo Algoritmo

Desenvolver um programa que escreva na tela os nmeros de 1 at 10. Repare que estamos desejando escrever os nmeros na seguinte seqncia: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. 1 Definir um contador, variando de 1 a 10; 2 Apresentar o valor contido na varivel contador; 5 Repitir o passo 2 at que o contador seja encerrado.

Codificao em Linguagem C
main( ) { int cont;

clrscr( ); for( cont=1; cont <= 10; cont++ ) printf ( %d \n, cont ); getch( ); }

49

Terceiro exemplo

Escola Alcides Maya - Primeiro Mdulo

Desenvolver um programa que escreva na tela os nmeros de 10 at 1. Repare que estamos desejando escrever os nmeros na seguinte seqncia: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1. Algoritmo 1 Definir um contador, variando de 10 a 1; 2 Apresentar o valor contido na varivel contador; 5 Repitir o passo 2 at que o contador seja encerrado. Codificao em Linguagem C main( ) { int cont; clrscr( ); for( cont=10; cont <= 1; cont-- ) printf ( %d \n, cont ); getch( ); }

1 - FAA UM PROGRAMA que escreva a soma dos nmeros de 1 at 100, ou seja, quanto 1+2+3+...+98+99+100. 2 - FAA UM PROGRAMA que leia 10 valores e escreva no final a soma dos valores lidos. 3 - FAA UM PROGRAMA que leia 10 valores e escreva no final a soma dos valores positivos e a mdia dos negativos. 4 - FAA UM PROGRAMA que leia valores e escreva no final a soma dos valores positivos e a mdia dos negativos. Neste programa o usurio quem vai determinar o fim da leitura dos nmeros, ou seja, voc dever perguntar ao usurio se ele deseja continuar digitando valores. 5 - FAA UM PROGRAMA que leia 4 notas escolares de 15 alunos. Para cada um dos alunos calcular e apresentar a mdia. 6 - FAA UM PROGRAMA que leia 4 notas escolares de n alunos. Para cada um dos alunos calcular e apresentar a mdia. Sabendo-se que a mdia da escola 7, informar tambm se o aluno foi Aprovado ou Reprovado. Neste programa o usurio quem vai determinar o fim da leitura das notas, ou seja, voc dever perguntar ao usurio se ele deseja continuar digitando notas. 7 - FAA UM PROGRAMA que leia dois nmeros inteiros quaisquer. No final escrever os nmeros entre eles. Por exemplo, se forem digitados 6 e 2, dever escrever 6, 5, 4, 3 , 2. Mas se forem digitados 2 e 6, dever escrever 2, 3, 4, 5, 6. 8 - FAA UM PROGRAMA que leia 20 vezes o cdigo de um produto. Os produtos podem ser: 1 Panela 2 Chaleira 3 Prato Outro Cdigo invlido Ao final escrever o total digitado de cada cdigo, inclusive a quantidade de cdigos invlidos digitados. 9 - FAA UM PROGRAMA que leia 4 notas escolares dos alunos de uma escola. Para cada um dos alunos calcular e apresentar a mdia e informar o conceito do aluno baseado na informao abaixo: [0 4) - Conceito D [4 7) - Conceito C [7 9) - Conceito B [9 10] - Conceito A Os colchetes marcam o intervalo fechado e os parnteses marcam um intervalo aberto.

Exerccios de Fixao

50

Fundamentos de Programao
Neste programa o usurio quem vai determinar o fim da leitura das notas, ou seja, voc dever perguntar ao usurio se ele deseja continuar digitando notas. 10 - FAA UM PROGRAMA que leia cdigos e execute tarefas, conforme tabela abaixo: 0 Encerra o programa 1 Inclui uma unidade no estoque 2 Exclui uma unidade no estoque 3 Mostra o total disponvel no estoque 4 Mostra o total de entradas no estoque 5 Mostra o total de sadas no estoque Outro cdigo escrever: Cdigo Invlido

11 - FAA UM PROGRAMA para controlar o acesso de pessoas a um restaurante. O restaurante possui uma capacidade de 40 vagas, que no poder ser ultrapassada. O controle se dar atravs de cdigos, conforme a tabela: 0 FIM 1 ENTRA UMA PESSOA (escrever: Entrou) 2 SAI UMA PESSOA (escrever: Saiu) 3 MOSTRAR QUANTOS LUGARES ESTO DISPONVEIS 4 MOSTRAR O TOTAL DE PESSOAS QUE ENTRARAM 5 MOSTRAR O TOTAL DE PESSOAS QUE SARAM Outro cdigo escrever: Cdigo Invlido 12 - FAA UM PROGRAMA que calcule o desconto do imposto de renda. O programa dever perguntar quando a pessoa deseja encerrar o programa (Deseja fazer outro clculo? (S/N)). O programa deve pedir o valor do salrio, calcular e apresentar o valor do desconto baseado na seguinte informao: Salrio at R$ 900,00 isento (No paga imposto de renda) Salrio acima de R$ 900,00 at R$ 1.800,00 para 15% de imposto de renda Salrio acima de R$ 1.800,00 para 27% de imposto de renda 13 - FAA UM PROGRAMA que leia o peso das pessoas que querem entrar em um elevador. A capacidade mxima do elevador de 15 pessoas ou 800 Kg, o que ocorrer primeiro. O programa deve ler o peso da pessoa que deseja entrar, se a sua entrada no fizer com que seja ultrapassado qualquer um dos limites, dever escrever: PODE ENTRAR, caso contrrio, ou seja, ultrapassando os limites, dever escrever: NO PODE ENTRAR: ELEVADOR LOTADO e encerrar o programa, mostrando o nmero de pessoas transportadas e o peso total transportado. 14 - FAA UM PROGRAMA que leia dois nmeros e a operao desejada ( + , - , * , / ) e que escreva na tela o resultado da operao. O programa depois de apresentar o resultado dever perguntar quando a pessoa deseja encerrar o programa (Deseja fazer outro clculo? (S/N)). Se a reposta for S dever pedir outros nmeros e a operao desejada, se a resposta for N dever encerrar o programa. 15 - Em uma fbrica de chocolates, foi designado ao programador, fazer um programa que calcule o desconto de INSS dos funcionrios. Este programa deve ler o nome do funcionrio e o valor do salrio bruto. Calcular o desconto do INSS levando em considerao o seguinte: f) Para salrios at R$ 500,00 a alquota de INSS ser de 8% g) Para salrios acima de R$ 500,00 at R$ 1.000,00 a alquota de INSS ser de 10% h) Para salrios acima de R$ 1.000,00 a alquota de INSS ser de 12% Para cada funcionrio dever ser apresentado na tela: a) Nome do Funcionrio b) Salrio Bruto c) Taxa de INSS d) Valor de INSS e) Salrio Lquido Aps estas apresentaes o programa dever fazer uma pergunta: Deseja fazer mais algum clculo? (S/N), se a resposta for afirmativa o programa dever continuar com os dados do prximo funcionrio, caso contrrio

51

dever ser terminado. 16 - FAA UM PROGRAMA que possibilite calcular a rea total de uma residncia (sala, cozinha, banheiro, quartos, rea de servio, quintal, garagem, etc). O programa deve solicitar a entrada do nome, a largura e o comprimento de um determinado cmodo. Em seguida, deve apresentar a rea do cmodo lido e tambm uma mensagem solicitando do usurio a confirmao de continuar calculando novos cmodos. Caso o usurio responda que NO, o programa deve apresentar o valor total acumulado da rea residencial.

Escola Alcides Maya - Primeiro Mdulo

6 Estruturas de Dados Homogneas I


Durante os pontos estudados em Desvios condicionais e Estruturas de repetio, percebeu-se que o poder de programao tornou-se maior, antes limitado somente ao que foi estudado em tcnicas bsicas de programao. Porm, tendo o domnio das tcnicas anteriores, ainda correr-se- o risco de no conseguir resolver alguns tipos de problemas, pois foram trabalhadas at aqui apenas variveis simples que somente armazenam um valor por vez. Vamos agora apresentar uma tcnica de programao que permitir trabalhar como o agrupamento de vrias informaes dentro de uma mesma varivel, sendo sempre do mesmo tipo de dado, e por esta razo chamado de estrutura de dados homognea. A utilizao deste tipo de estrutura de dados recebe diversos nomes, como: variveis indexadas, variveis compostas, variveis subscritas, arranjos, vetores, matrizes, tabelas em memria ou arrays (do ingls). So vrios os nomes encontrados, a que ns iremos tratar por matrizes. Este tipo de estrutura conhecida como matrizes unidimensionais ou tambm de vetor. Caracteriza-se por ser definida uma nica varivel dimensionada com um determinado tamanho. A dimenso de uma matriz constituda por uma constante inteira positiva. Os nomes dados s matrizes seguem as mesmas regras de nomes utilizados para identificar as variveis simples. Para ter uma idia de como utilizar matrizes em uma determinada situao considere o seguinte problema: Em uma Escola Tcnica de Informtica, h um professor que faz 6 avaliaes durante o semestre. Gostaramos de fazer um programa que leia as 6 notas de um aluno. No final calcular e apresentar a mdia do aluno. Desta forma ser necessrio somar as 6 notas de cada aluno e calcular a sua mdia. A tabela a seguir apresenta um aluno, suas notas bimestrais e a coluna da mdia do aluno que dever ser calculada. Aluno 1 Nota 1 4.0 Nota 2 6.0 Nota 3 5.0 Nota 4 3.0 Nota 5 7.5 Nota 6 4.0 Mdia ?

Matrizes de uma dimenso ou vetores

Agora basta escrever um programa para efetuar o clculo da mdia de cada aluno. Vamos comear pelo clculo da mdia de cada aluno, iremos representar as notas de cada aluno pelas variveis: nota1, nota2, nota3, nota4, nota5, nota6, e para o clculo da mdia a varivel media, todas do tipo real.

Algoritmo

1 Ler as notas do aluno para as variveis nota1, nota2, nota3, nota4, nota5, nota6; 2 Efetuar a soma das notas e a diviso delas por 6, atribuindo o seu resultado para a varivel media; 3 Apresentar o valor da varivel media aps a operao de soma e diviso dos valores fornecidos. Com o conhecimento adquirido at este momento, seria ento elaborado um programa que efetuaria a leitura de cada nota, a soma delas e a diviso do valor da soma por 6, obtendo-se desta forma a mdia do aluno.

52

Codificao em Linguagem C
main( ) { float nota1; float nota2; float nota3; float nota4; float nota5; float nota6; float soma; float media;

Fundamentos de Programao

printf( Digite a nota 1: ); scanf( %f , &nota1 ); printf( Digite a nota 2: ); scanf( %f , &nota2 ); printf( Digite a nota 3: ); scanf( %f , &nota3 ); printf( Digite a nota 4: ); scanf( %f , &nota4 ); printf( Digite a nota 5: ); scanf( %f , &nota5 ); printf( Digite a nota 6: ); scanf( %f , &nota6 ); soma = nota1 + nota2 + nota3 + nota4 + nota5 + nota6; media = soma / 6; printf ( A mdia do aluno foi: %f \n , media ); } Perceba que para receber as notas foram utilizadas 6 variveis. Com a tcnica de matrizes poderia ter sido utilizada apenas uma varivel com a capacidade de armazenar 6 valores. Uma matriz de uma dimenso ou vetor ser representada por seu nome e seu tamanho (dimenso) entre colchetes. Desta forma seria uma matriz nota[6], sendo seu nome nota, possuindo um tamanho de 6. Isto significa que podero ser armazenados em nota at 6 elementos. Perceba que na utilizao de variveis simples existe uma regra: uma varivel somente pode conter um valor por vez. No caso das matrizes, podero armazenar mais de um valor por vez, pois so dimensionadas exatamente para este fim. Desta forma poderse- manipular uma quantidade maior de informao com pouco trabalho de processamento. Deve-se apenas considerar que com relao manipulao dos elementos de uma matriz, eles ocorrero de forma individualizada, pois no possvel efetuar a manipulao de todos os elementos do conjunto ao mesmo tempo. No caso do exemplo do clculo da mdia do aluno, ter-se-ia ento uma nica varivel indexada (a matriz) contendo todos os valores das 8 notas. Isto seria representado da seguinte forma:

Operaes bsicas com Matrizes de uma dimenso

53

Escola Alcides Maya - Primeiro Mdulo


nota[0] = 4.0 nota[1] = 6.0 nota[2] = 5.0 nota[3] = 3.0 nota[4] = 7.5 nota[5] = 4.0 Observe que o nome um s. O que muda a informao indicada dentro dos colchetes. A esta informao d-se o nome de ndice, sendo este o endereo em que o elemento est armazenado. necessrio que fique bem claro que o elemento o contedo da matriz, neste caso os valores das notas. No caso de nota[0] = 4.0, o nmero 0 o ndice; o endereo onde cujo elemento 4.0 est armazenado. Anteriormente, foram utilizadas vrias instrues para poder definir e montar um programa. No caso da utilizao de matrizes, ser definida a instruo conjunto que indicar em portugus estruturado a utilizao de uma matriz, tendo como sintaxe: conjunto[<dimenso>] de <tipo de dado>, sendo que <dimenso> ser a indicao dos valores inicial e final do tamanho do vetor e <tipo de dado> se o vetor em questo utilizar valores reais, inteiros, lgicos ou caracteres. A leitura de uma matriz processada passo a passo, um elemento por vez. A instruo de leitura leia seguida da varivel mais o ndice. A seguir, so apresentados o fluxograma e a codificao em portugus estruturado da leitura das notas dos alunos, clculo da mdia e a sua apresentao.

Atribuio de uma Matriz

Leitura de dados de uma Matriz

Codificao em Linguagem C
main( ) { float nota[6]; float soma; float media; int indice; clrscr( ); soma = 0; for( indice = 0; indice < 6; indice++ ) { printf ( Digite a nota %d do aluno: , indice+1 ); scanf ( %f, &nota[indice] ); soma = soma + nota[indice]; } media = soma / 6; printf ( A media do aluno e: %4.1f, media ); getch( ); } Observe que na linguagem C o ndice comea com o valor zero, pois o endereo do primeiro elemento da matriz em C zero, o endereo do segundo elemento da matriz em C um e assim sucessivamente.

54

Fundamentos de Programao
A tabela a seguir, mostra como ficaro os valores armazenados na matriz em linguagem C: Matriz: nota ndice 0 1 2 3 4 5 Elemento 4.0 6.0 5.0 3.0 7.5 4.0

O processo de escrita de uma matriz bastante parecido com o processo de leitura de seus elementos. Para esta ocorrncia dever ser utilizada a instruo escreva seguida da indicao da varivel e seu ndice. Supondo que aps a leitura das 6 notas, houvesse a necessidade de apresenta-las antes da apresentao do valor da mdia. Abaixo so apresentados o fluxograma e a codificao em portugus estruturado da escrita das 6 notas antes de ser apresentado o clculo da mdia.

Escrita dos dados de uma Matriz

Codificao em Linguagem C
main( ) { float nota[6]; float soma; float media; int indice; clrscr( ); soma = 0; for( indice = 0; indice < 6; indice++ ) { printf ( Digite a nota %d do aluno: , indice+1 ); scanf ( %f, &nota[indice] ); soma = soma + nota[indice]; } media = soma / 6; for( indice = 0; indice < 6; indice++ ) printf ( A nota %d do aluno e: %4.1f \n, indice+1, nota[ndice] ); printf ( A media do aluno e: %4.1f, media ); getch( ); } Para demonstrar a utilizao de uma matriz em um exemplo um pouco maior, considere como problemas os exemplos apresentados em seguida:

Exemplos de Aula

55

Desenvolver um programa que efetue a leitura de dez elementos de uma matriz A tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de formao: se o valor do ndice for par, o valor dever ser multiplicado por 5, sendo mpar, dever ser somado com 5. Ao final mostrar o contedo da matriz A e B

Primeiro exemplo

Escola Alcides Maya - Primeiro Mdulo

Algoritmo

Este exemplo de resoluo estar mostrando como fazer o tratamento da condio do ndice. 1 Iniciar o contador de ndice, varivel ndice como 1 em um contador at 10; 2 Ler os 10 valores, um a um; 3 Verificar se o ndice par se sim multiplica por 5, se no soma 5. Criar a matriz B; 4 Apresentar o contedo das duas matrizes. Dever ser verificado se o valor do ndice em um determinado momento par (ele ser par quando dividido por 2 obtiver resto igual a zero). Sendo a condio verdadeira, ser atribudo na matriz B[ndice] a multiplicao do elemento da matriz A[ndice] por 5. Caso o valor do ndice seja mpar, ser atribudo na matriz B[ndice] a soma do elemento da matriz A[ndice] por 5.

Codificao em Linguagem C
main( ) { int matrizA[10]; int matrizB[10]; int indice; int resp; clrscr( ); for( indice = 0; indice < 10; indice++ ) { printf ( Digite um valor numerico inteiro: ); scanf ( %d, &matrizA[indice] ); } for( indice = 0; indice < 10; indice++ ) { resp = indice %; if ( resp == 0 ) matrizB[indice] = matrizA[indice] * 5; else matrizB[indice] = matrizA[indice] + 5; } for( indice = 0; indice < 10; indice++ ) printf ( \nConteudo da Matriz A indice %d = %d, indice, matrizA[indice] ); for( indice = 0; indice < 10; indice++ ) printf ( \nConteudo da Matriz B indice %d = %d, indice, matrizB[indice] ); getch( ); }

56

Segundo exemplo Algoritmo

Fundamentos de Programao

Desenvolver um programa que efetue a leitura de dez elementos de uma matriz A do tipo vetor. No final, apresente o total da soma de todos os elementos que sejam mpares. Perceba que em relao ao primeiro exemplo, este apresenta uma diferena: o primeiro pedia para verificar se o ndice era par ou mpar. Neste exemplo, est sendo solicitado que analise a condio do elemento e no do ndice. J foi alertado anteriormente para se tomar cuidado para no confundir elemento com ndice. Vamos a soluo: 1 Iniciar o contador de ndice, varivel ndice como 1 em um contador at 10; 2 Ler os 10 valores, um a um; 3 Verificar se o elemento mpar; se sim efetuar a soma dos elementos; 4 Apresentar o total somado de todos os elementos mpares da matriz. Observe que quando se faz meno ao ndice indica-se a varivel que controla o contador de ndice, e no caso do exemplo anterior, a varivel ndice. Quando se faz meno ao elemento, indica-se matrizA[ndice] pois desta forma est se pegando o valor armazenado e no a sua posio de endereo.

Codificao em Linguagem C
main( ) { int matrizA[10]; int indice; int resp; int soma; clrscr( ); soma = 0; for( indice = 0; indice < 10; indice++ ) { printf ( Digite um valor numerico inteiro: ); scanf ( %d, &matrizA[indice] ); } for( indice = 0; indice < 10; indice++ ) { resp = matrizA[indice] % 2; if ( resp == 1 ) soma = soma + matrizA[indice]; } printf ( \nA soma dos elementos mpares : %d , soma ); getch( ); }

57

1 Desenvolva os algoritmos, seus respectivos fluxogramas e proceda a codificao em portugus estruturado os seguintes programas: 2. Faa um programa para ler 10 elementos de uma matriz tipo vetor e apresenta-los 3. Faa um programa para ler 8 elementos em uma matriz A tipo vetor. Construir uma matriz B de mesma dimenso com os elementos da matriz A multiplicados por 3. O elemento B[1] dever ser atribudo pelo elemento A[1] * 3, o elemento B[2] atribudo pelo elemento A[2] * 3 e assim por diante, at 8. Apresentar a matriz B. 4. Faa um programa para ler duas matrizes A e B com 20 elementos. Construir uma matriz C, onde cada elemento de C a soma do elemento correspondente de A com B. Apresentar a matriz C. 5. Faa um programa que leia 15 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de formao: Todo elemento de B dever ser o quadrado do elemento de A correspondente. Apresentar as matrizes A e B. 6. Faa um programa para ler uma matriz A do tipo vetor com 15 elementos. Construir uma matriz B de mesmo tipo, sendo que cada elemento da matriz B seja o fatorial do elemento correspondente da matriz A . Apresentar as matrizes A e B. 7. Faa um programa para ler duas matrizes A e B com 15 elementos cada. Construir uma matriz C, sendo esta a juno das duas outras matrizes. Desta forma C dever ter o dobro de elementos, ou seja 30. Apresentar a matriz C. 8. Faa um programa para ler duas matrizes do tipo vetor, sendo A com 20 elementos e B com 30 elementos. Construir uma matriz C, sendo esta a juno das duas outras matrizes. Desta forma C dever ter a capacidade de armazenar 50 elementos. Apresentar a matriz C. 9. Faa um programa para ler 20 elementos de uma matriz A tipo vetor e construir uma matriz B de mesma dimenso com os mesmos elementos da matriz A, sendo que devero estar invertidos. Ou seja, o primeiro elemento de A passa a ser o ltimo de B, o segundo elemento de A passa a ser o penltimo de B e assim por diante. Apresentar as matrizes A e B. 10. Faa um programa para ler trs matrizes (A, B e C) de uma dimenso com 5 elementos cada. Construir uma matriz D, sendo esta a juno das trs outras matrizes. Desta forma D dever ter o triplo de elementos, ou seja 15. Apresentar os elementos da matriz D. 11. Faa um programa para ler uma matriz A do tipo vetor com 20 elementos. Construir uma matriz B do mesmo tipo da matriz A, sendo que cada elemento de B seja o somatrio do elemento correspondente da matriz A . Se o valor do elemento de A[1] for 5, B[1] dever ser 10, se o valor do elemento de A[2] for 7, B[2] dever ser 14 e assim por diante. 12. Faa um programa para ler uma matriz A do tipo vetor com 10 elementos. Construir uma matriz B do mesmo tipo da matriz A, sendo que cada elemento de B dever ser o valor negativo do elemento correspondente da matriz A . Desta forma, se o valor do elemento de A[1] for 8, B[1] dever ser -8, se o valor do elemento de A[2] for 3, B[2] dever ser -3 e assim por diante. 13. Faa um programa para ler uma matriz A tipo vetor com 10 elementos. Construir uma matriz B de mesmo tipo, sendo que cada elemento de B dever ser a metade de cada elemento de A . Apresentar os elementos das matrizes A e B. 14. Faa um programa que efetue o clculo de uma tabuada de um nmero qualquer e armazene os resultados em uma matriz A de uma dimenso para 10 elementos. Apresentar os valores armazenados na matriz. 15. Ler 20 elementos (valores reais) para temperaturas em graus Celsius em uma matriz A de uma dimenso do tipo vetor. O programa dever apresentar a menor, a maior e a mdia das temperaturas lidas. 16. Ler 25 elementos (valores reais) para temperaturas em graus Celsius em uma matriz A de uma dimenso do tipo vetor. Construir uma matriz B de mesmo tipo e dimenso, em que cada elemento da matriz B dever ser a converso da temperatura em graus Fahrenheit do elemento correspondente da matriz A . Apresentar os elementos das matrizes A e B. 17. Ler 12 elementos inteiros para uma matriz A de uma dimenso do tipo vetor. Construir uma matriz B de mesmo tipo e dimenso, observando a seguinte lei de formao: Todo elemento da matriz A que for mpar dever ser multiplicado por 2 e armazenado na matriz B; caso contrrio, o elemento da matriz A dever ser armazenado na matriz B sem nenhum clculo. Apresentar os elementos das matrizes A e B. 18. Ler 15 elementos reais para uma matriz A de uma dimenso do tipo vetor. Construir uma matriz B de mesmo tipo e dimenso, observando a seguinte lei de formao: Todo elemento da matriz A que possuir ndice par dever ter seu elemento dividido por 2; caso contrrio, o elemento da matriz A dever ser multiplicado por 1.5. Apresentar os elementos das matrizes A e B.

Exerccios de Fixao

Escola Alcides Maya - Primeiro Mdulo

58

Fundamentos de Programao
19. Faa um programa que leia uma matriz numrica de 10 elementos. No final apresentar quantos nmeros so positivos e quantos so negativos 20. Faa um programa que leia uma matriz numrica de 10 elementos. No final encontrar nesta matriz o maior valor lido, apresentando a sua posio na matriz e o seu valor. 21. Faa um programa que leia uma matriz numrica de 10 elementos. No final encontrar nesta matriz o menor valor lido, apresentando a sua posio na matriz e o seu valor. 22. Faa um programa que leia uma matriz numrica de 10 elementos. No final encontrar nesta matriz o maior valor lido e o menor valor lido 23. Faa um programa que leia uma matriz numrica chamada notas de 10 elementos. Ler valores para o vetor e, aps ter lido, determinar a media dos valores contidos no vetor 24. Em uma Escola Tcnica de Informtica, h um professor que faz 6 provas. Faa um programa que leia as notas destas provas para um vetor notas. No final calcular e apresentar a mdia do aluno e o resultado obtido conforme a tabela a seguir: [00,05) [05,07) [07,09) [09,10] - Reprovado - Recuperao - Satisfatrio - timo

7 Estruturas de Dados Homogneas II


No captulo anterior trabalhamos com o agrupamento de vrias informaes dentro de uma mesma varivel, de mesmo tipo de dado, chamada de estrutura de dados homognea, ou seja, matrizes, do tipo vetor. Agora iremos trabalhar com uma estrutura um pouco mais complexa, tambm chamada de matrizes, mas de mais de uma dimenso. Matrizes com mais de uma dimenso Anteriormente, houve contato com o uso de uma nica varivel indexada com apenas uma dimenso (uma coluna e vrias linhas), quando foi utilizado o exemplo para efetuar o clculo da mdia do aluno. A partir deste ponto, sero apresentadas tabelas com mais colunas, sendo assim, teremos variveis no sentido horizontal e vertical. Com o conhecimento adquirido at este ponto, voc tem condies suficientes para elaborar um programa que leia as notas dos alunos, calcule a mdia de cada aluno e no final apresente a mdia de toda a turma, utilizando-se de matrizes bidimensionais. Porm, cuidado, necessrio manter um controle de cada ndice em cada matriz para um mesmo aluno. Para facilitar o trabalho com estruturas deste porte que sero utilizadas matrizes com mais dimenses. A mais comum a matriz de duas dimenses por se relacionar diretamente com a utilizao de tabelas. Matrizes com mais de duas dimenses so utilizadas com menos freqncia, mas podero ocorrer em momentos em que se necessite trabalhar com um nmero maior de dimenses, porm estas so fceis de utilizar, se estivermos dominando bem a utilizao de uma matriz com duas dimenses. importante considerar que na manipulao de uma matriz unidimensional utilizada uma nica instruo de looping. No caso de matrizes com mais dimenses, devero ser utilizadas o nmero de loopings relativo ao tamanho de sua dimenso. Desta forma, uma matriz de duas dimenses dever ser controlada com dois loopings de trs dimenses dever ser controlada por trs loopings e assim por diante. Em matrizes de mais de uma dimenso os seus elementos so tambm manipulados de forma individualizada, sendo a referncia feita sempre por meio de dois ndices; o primeiro para indicar a linha e o segundo para indicar a coluna. Para voc ter uma idia de como utilizar matrizes de duas dimenses vamos utilizar o mesmo exemplo que usamos no captulo anterior, mas agora com um nmero maior de alunos: Em uma Escola Tcnica de Informtica, h um professor que faz 4 avaliaes durante o semestre. Gostaramos de fazer um programa que leia as 4 notas de cada aluno da turma (turma com 8 alunos), calcule e apresente a mdia de cada aluno..

59

Veja como ficaria nossa tabela com as notas e as mdias de cada aluno: Aluno 1 2 3 4 5 6 7 8 Nota 1 4.0 6.0 9.0 3.0 4.0 7.0 8.0 6.0 Nota 2 6.0 7.0 8.0 5.0 6.0 7.0 7.0 7.0 Nota 3 5.0 5.0 9.0 4.0 6.0 7.0 6.0 2.0 Nota 4 3.0 8.0 6.0 2.0 8.0 7.0 5.0 9.0

Escola Alcides Maya - Primeiro Mdulo

Operaes bsicas com matrizes de duas dimenses Uma matriz de duas dimenses est sempre fazendo referncia a linhas e a colunas e representada por seu nome e seu tamanho (dimenso) entre colchetes. Desta forma uma matriz de duas dimenses nota[8][4] , onde seu nome nota, possuindo um tamanho de 8 linhas e 4 colunas, ou seja, uma matriz de 8 por 4 (8 x 4). Isto significa que podem ser armazenados em nota at 32 elementos. Para armazenar as 4 notas do primeiro aluno deveramos fazer algo como visto abaixo: nota[0] [0] = 4.0 nota[0] [1] = 6.0 nota[0] [2] = 5.0 nota[0] [3] = 3.0 Observe que o nome um s. O que muda a informao indicada dentro dos colchetes. No primeiro colchete est a informao da linha e no segundo colchete est a informao da coluna. Para armazenar as 4 notas do segundo aluno deveramos fazer o seguinte: nota[1] [0] = 6.0 nota[1] [1] = 7.0 nota[1] [2] = 5.0 nota[1] [3] = 8.0 Para armazenar as 4 notas do terceiro aluno deveramos fazer o seguinte: nota[2] [0] = 9.0 nota[2] [1] = 8.0 nota[2] [2] = 9.0 nota[2] [3] = 6.0 E assim sucessivamente at que se armazene as notas de todos os oito alunos. Atribuio de uma Matriz Uma matriz de duas dimenses atribuda pela instruo conjunto j utilizada para definir o uso de uma matriz de uma dimenso, sendo bastante parecidas em sua referncia. A sintaxe : varivel : conjunto[<dimenso1>:<dimenso2>] de <tipo de dado>, sendo que <dimenso1> e <dimenso2> so a indicao do tamanho da tabela e <tipo de dado> o tipo da matriz, que poder ser formada por valores reais, inteiros, lgicos ou caracteres.

60

A leitura de uma matriz de duas dimenses, assim como das matrizes de uma dimenso processado passo a passo, um elemento por vez. A instruo de leitura leia seguida da varivel mais os seus ndices. A seguir, so apresentados o fluxograma e a codificao em portugus estruturado da leitura das notas dos alunos, clculo da mdia e a sua apresentao. Observe que est sendo considerada a leitura de 4 notas de 8 alunos. Assim sendo, a tabela em questo armazena 32 elementos. Um detalhe a ser considerado a utilizao de duas variveis para controlar os dois ndices de posicionamento de dados na tabela. Anteriormente, utilizamos a varivel ndice para controlar as posies dos elementos dentro da matriz, ou seja, a posio em nvel de linha. Neste exemplo a varivel ndice passa a ser tratada como lin, controlando a posio da linha, e a segunda varivel ser tratada como col, controlando a posio da coluna. Muitos programadores utilizam i no lugar de lin e utilizam j no lugar de col. Analisando o fluxograma, temos a inicializao das variveis lin e col como 1, ou seja, a leitura ser efetuada na primeira linha da primeira coluna. Em seguida iniciado em primeiro lugar o looping da varivel lin para controlar a posio em relao s linhas e depois iniciado o looping da varivel col para controlar a posio em relao s colunas. Veja que, ao serem iniciados os valores para o preenchimento da tabela, eles so colocados na posio nota[1,1], lembrando que o primeiro valor dentro dos colchetes representa a linha e o segundo representa a coluna. Ser digitado ento, para o primeiro aluno a primeira nota. Depois incrementado mais 1 em relao coluna, sendo colocada para a entrada a posio nota[1,2], linha 1 coluna 2. Desta forma, ser digitado para o primeiro aluno a segunda nota. Quando o contador de coluna atingir o valor 4, ele ser encerrado e ser efetuado o clculo e a apresentao da mdia. Em seguida o contador da varivel lin ser incrementado com mais 1, tornando-se 2. Ser ento inicializado novamente o contador col em 1, permitindo que seja digitado um novo dado na posio nota[2,1]. O mecanismo de preenchimento estender-se- at que o contador de linhas atinja o seu ltimo valor, no caso 8. Esse looping o principal, tendo a funo de controlar o posicionamento na tabela por aluno. O segundo looping, mais interno, controla o posicionamento das notas.

Leitura de dados de uma Matriz

Fundamentos de Programao

Codificao em Linguagem C
main( ) { float nota[8][4]; float soma, media, valor; int lin, col; clrscr( ); for( lin = 0; lin < 8; lin++ ) { soma = 0; for( col = 0; col < 4; col++ ) { printf ( Digite a nota %d do aluno %d : , col+1, lin+1 ); scanf ( %f, &valor ); nota[lin][col] = valor; soma = soma + nota[lin][col]; }

61

Escola Alcides Maya - Primeiro Mdulo


media = soma / 4; printf ( A media do aluno e: %4.1f \n, media ); } getch( ); } Para demonstrar a utilizao de uma matriz de duas dimenses, considere os exemplos apresentado sem seguida: Desenvolver um programa que efetue a leitura das receitas e despesas dos primeiros 6 meses de uma empresa. Calcular e armazenar o resultado mensal da empresa. Algoritmo 1 Ler as receitas de cada ms 2 Ler as despesas de cada ms 3 Calcular o resultado de cada ms subtraindo a receita da despesa 4 Apresentar as receitas, as despesas e o resultados de cada ms Pela caracterstica do programa a ser desenvolvido, seria ideal utilizarmos uma matriz 3 x 6, para armazenar estes dados. Nas colunas teremos os meses, nas linhas teremos respectivamente receitas, despesas e resultados, veja o desenho a seguir: Janeiro Receitas Despesas Resultados Fevereiro Maro Abril Maio Junho

Exemplos de Aula Primeiro exemplo

Codificao em Linguagem C
main( ) { float caixa[3][6]; float valor; int lin, col; clrscr( ); lin = 0; for( col = 0; col < 6; col++ ) { printf ( Digite a receita do mes %d: , col+1 ); scanf ( %f, &valor ); caixa[lin][col] = valor; } lin = 1; for( col = 0; col < 6; col++ )

62

Fundamentos de Programao
{ printf ( Digite a despesa do mes %d: , col+1 ); scanf ( %f, &valor ); caixa[lin][col] = valor; } for( col = 0; col < 6; col++ ) caixa[2][col] = caixa[0][col] - caixa[1][col]; for( col = 0; col < 6; col++ ) { printf ( A receita do mes %d e: %.2f \n, col+1, caixa[0][col] ); printf ( A despesa do mes %d e: %.2f \n, col+1, caixa[1][col] ); printf ( O resultado do mes %d e: %.2f \n, col+1, caixa[2][col] ); } getch( ); }

Exerccios de Fixao 1 Desenvolva os algoritmos, seus respectivos fluxogramas e proceda a codificao em portugus estruturado os seguintes programas: 1. Faa um programa para ler duas matrizes A e B, cada uma de duas dimenses com 5 linhas e 3 colunas. Construir uma matriz C de mesma dimenso, que formada pela soma dos elementos da matriz A com os elementos da matriz B. Apresentar a matriz C. 2. Faa um programa para ler duas matrizes A e B, cada uma com 7 elementos. Construir uma matriz C, de duas dimenses, em que a primeira coluna dever ser formada pelos elementos da matriz A e a segunda coluna dever ser formada pelos elementos da matriz B. Apresentar a matriz C. 3. Faa um programa para ler 20 elementos para uma matriz qualquer, considerando que ela tenha o tamanho de 4 linhas por 5 colunas, em seguida apresentar a matriz. 4. Faa um programa para ler uma matriz A de uma dimenso com 10 elementos. Construir uma matriz C de duas dimenses com trs colunas, em que a primeira coluna da matriz C formada pelos elementos da matriz A somados com mais 5, a segunda coluna formada pelo valor do clculo da fatorial de cada elemento correspondente da matriz A e a terceira e ltima coluna dever ser formada pelos quadrados dos elementos correspondentes da matriz A . Apresentar a matriz C. 5. Faa um programa para ler duas matrizes A e B, cada uma com uma dimenso pra 12 elementos. Construir uma matriz C de duas dimenses, sendo que a primeira coluna da matriz C dever ser formada pelos elementos da matriz A multiplicados por 2 e a segunda coluna dever ser formada pelos elementos da matriz B subtrados de 5. Apresentar a matriz C. 6. Faa um programa para ler uma matriz A de duas dimenses com 5 linhas e 4 colunas. Construir uma matriz B de mesma dimenso, onde cada elemento da matriz B dever ser o fatorial de cada elemento correspondente da matriz A . Apresentar ao final as matrizes A e B. 7. Faa um programa para ler uma matriz A de duas dimenses com 4 linhas e 5 colunas, armazenando nessa matriz os valores das temperaturas em graus Celsius. Construir uma matriz B de mesma dimenso, sendo que cada elemento da matriz B dever ser o valor da temperatura em graus Fahrenheit de cada elemento correspondente da matriz A . Apresentar ao final as matrizes A e B. 8. Faa um programa para ler uma matriz A de duas dimenses com 5 linhas e 5 colunas. Construir uma matriz B de mesma dimenso, sendo que cada elemento da matriz B dever ser o dobro de cada elemento correspondente da matriz A, com exceo para os valores situados na diagonal principal (posies B[1,1], B[2,2], B[3,3], B[4,4] e B[5.5] ) os quais devero ser o triplo de cada elemento correspondente da matriz A . Apresentar

63

ao final a matriz B. 9. Faa um programa para ler uma matriz A de duas dimenses com 7 linhas e 7 colunas. Construir uma matriz B de mesma dimenso, sendo que cada elemento da matriz B dever ser o somatrio de cada elemento correspondente da matriz A, com exceo para os valores situados na diagonal principal (posies B[1,1], B[3,3], B[5.5] e B[7,7] ) os quais devero ser o fatorial de cada elemento correspondente da matriz A . Apresentar ao final a matriz B. 10. Faa um programa para ler uma matriz A de duas dimenses com 6 linhas e 5 colunas. Construir uma matriz B de mesma dimenso, que dever ser formada do seguinte modo: para cada elemento par da matriz A dever ser somado 5 e para cada elemento mpar da matriz A dever ser subtrado 4. Apresentar ao final a matriz A e B. 11. Faa um programa para ler uma matriz A de duas dimenses com 4 linhas e 4 colunas. Apresentar o somatrio dos elementos situados na diagonal principal (posies A[1,1], A[2,2], A[3,3], A[4.4] ) da referida matriz. 12. Faa um programa que leia uma matriz A de duas dimenses com 15 linhas e 15 colunas. Apresentar o somatrio dos elementos pares situados na diagonal principal da referida matriz. 13. Faa um programa que leia uma matriz A de duas dimenses com 7 linhas e 7 colunas. Ao final apresentar o total de elementos pares existentes dentro da matriz. 14. Faa um programa que leia uma matriz de duas dimenses com 7 linhas e 7 colunas. Ao final apresentar o total de elementos positivos, o total de elementos negativos e o total de elementos cujo valor zero. 15. Faa um programa que leia uma matriz numrica de duas dimenses de 5 linhas e 8 colunas. No final encontrar e apresentar desta matriz o maior valor lido e o menor valor lido. 16. Faa um programa que leia uma matriz de duas dimenses com 5 linhas e 5 colunas. Apresentar o somatrio dos elementos positivos situados na diagonal principal da referida matriz.

Escola Alcides Maya - Primeiro Mdulo

8. Programao Estruturada
A partir desta aula sero estudados a aplicao e o uso de Funes. Quando aprendemos conceitos de sub-rotinas em algoritmos, tambm falvamos sobre Funes. Estas sub-rotinas tambm so conhecidas pela denominao de mdulos, sub-programas, ou subalgoritmos. Na linguagem C as sub-rotinas so tratadas como FUNES. Na realidade, no importa como so chamadas, o que importa a forma como funcionam e como devem ser aplicadas em um programa, e isto que iremos aprender a partir deste momento. Iremos rever o conceito de criao estruturada de programas, pois para escrever um programa de computador necessita-se de estudo (levantamento de todas as necessidades e detalhes do que dever ser feito) e metodologia (regras bsicas que devero ser seguidas). Sem a aplicao de mtodos no ser possvel resolver grandes problemas; quando muito, pequenos problemas. No geral, problemas complexos exigem algoritmos complexos. Mas sempre possvel dividir um problema grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples, e esse trecho menor que chamado de sub-rotina. Uma sub-rotina na verdade um programa, e sendo um programa poder efetuar diversas operaes computacionais (entrada, processamento e sada) e dever ser tratada como foram os programas projetados at este momento. As sub-rotinas so utilizadas na diviso de algoritmos complexos, permitindo assim possuir a modularizao de um determinado problema, considerado grande e de difcil soluo. Quando trabalhamos com esta tcnica, pode-se deparar com a necessidade de dividir uma sub-rotina em outras tantas quantas forem necessrias, buscando uma soluo mais simples de uma parte do problema maior. O processo de dividir sub-rotinas em outras denominado Mtodo de Refinamento Sucessivo.

Funes I

As Sub-rotinas

64

Desde muito tempo este um dos processos mais simples e mais utilizados pelos programadores. O processo de programar um computador torna-se bastante simples quando aplicado o mtodo de utilizao de sub-rotinas (mdulos de programas). Porm, a utilizao dessas sub-rotinas dever ser feita com aplicao do mtodo top down. Um mtodo bastante adequado para a programao de um computador trabalhar com o conceito de programao estruturada, pois a maior parte das linguagens de programao utilizadas atualmente tambm , o que facilita a aplicao deste processo de trabalho. O mtodo mais adequado para a programao estruturada o Top-Down (De cima para baixo) o qual se caracteriza basicamente por: Antes de iniciar a construo do programa, o programador dever ter em mente as tarefas principais que este dever executar. No necessrio saber como funcionaro, somente saber quantas so. Conhecidas todas as tarefas a serem executadas, tem-se em mente como dever ser o programa principal, o qual vai controlar todas as outras tarefas distribudas em suas sub-rotinas. Tendo definido o programa principal, iniciado o processo de detalhamento para cada sub-rotina. Desta forma so definidos vrios algoritmos, um para cada rotina em separado, para que se tenha uma viso do que dever ser executado em cada mdulo de programa. Existem programadores que estabelecem o nmero mximo de linhas de programa que uma rotina dever possuir. Se o nmero de linhas ultrapassa o limite preestabelecido, a rotina em desenvolvimento dividida em outra sub-rotina ( neste ponto que se aplica o mtodo de refinamento sucessivo). O mtodo Top-Down faz com que o programa tenha uma estrutura semelhante a um organograma. A utilizao do mtodo de cima para baixo permite que seja efetuado cada mdulo de programa em separado. Desta forma, cada um pode ser testado separadamente garantindo que o programa completo esteja sem erro ao seu trmino. Outro detalhe a ser considerado que muitas vezes existem em um programa trechos de cdigos que so repetidos vrias vezes. Esses trechos podero ser utilizados como sub-rotinas, proporcionando um programa menor e mais fcil de ser alterado num futuro prximo. A utilizao de sub-rotinas e o uso do mtodo Top-Down na programao permitem ao programador elaborar rotinas exclusivas. Por exemplo, uma rotina somente para entrada, outra para a parte de processamento e outra para sada dos dados.

O Mtodo Top-Down

Fundamentos de Programao

As sub-rotinas podem ser subdivididas em dois tipos: Procedimentos e Funes. Entre estes dois tipos de sub-rotinas existem algumas diferenas, mas o conceito o mesmo para ambas. Um Procedimento um bloco de programa contendo incio e fim e ser identificado por um nome, por meio do qual ser referenciado em qualquer parte do programa principal ou do programa chamador da rotina. Quando uma sub-rotina chamada por um programa, ela executada e ao seu trmino o controle de processamento retorna automaticamente para a primeira linha de instruo aps a linha que efetuou a chamada de sub-rotina. Uma funo tambm um bloco de programa, como so os procedimentos, contendo inicio e fim e sendo identificada por um nome, por meio do qual tambm ser referenciada em qualquer parte do programa principal. Uma sub-rotina de funo na verdade muito parecida com uma sub-rotina de procedimento. A sua principal diferena est no fato de uma funo retornar um determinado valor. As funes formam o alicerce da programao em C. Voc faz toda a programao C dentro de uma funo, porque todos os programas devem incluir main, que uma funo. Em outras linguagens como Pascal, so utilizados procedimentos e funes, FORTRAN utiliza somente funes e a linguagem Assembly utiliza somente procedimentos. A linguagem C utiliza somente funes com e sem retorno de valores, tornando-se um pouco diferente na qualificao de sub-rotinas e funes, conforme a lgica de programao. Mas, no se preocupe, isto no ir mudar a forma como voc vai trabalhar na linguagem C. Exerccio de Aula

Aplicao prtica do uso de Sub-Rotinas

65

Vamos criar um programa de calculadora que apresente um menu de selees no programa principal. Esse menu dever dar ao usurio a possibilidade de escolher uma entre quatro operaes aritmticas. Escolhida a opo desejada, dever ser solicitada entrada de dois nmeros e depois de processada a operao, dever ser exibido o resultado. Este programa dever ser um conjunto de cinco rotinas, sendo uma principal e quatro secundrias. A rotina principal efetuar o controle das quatro rotinas secundrias que, por sua vez, pediro a leitura de dois valores, faro a operao e apresentaro o resultado obtido. A figura a seguir apresenta um organograma com a idia de hierarquizao das rotinas do programa. A quinta opo no se caracteriza por ser uma rotina, apenas a opo que vai encerrar o looping de controle do menu.

Escola Alcides Maya - Primeiro Mdulo

Tendo uma idia da estrutura geral do programa, ser escrito em separado cada algoritmo com os seus detalhes de operao. Primeiro o programa principal e depois as outras rotinas, de preferncia na mesma ordem em que esto mencionadas no organograma. ideal que voc codifique o programa aos poucos, como por exemplo: na definio do programa acima, primeiro vamos testar o menu e ver se a interao entre as partes funciona. Veja no programa a seguir: main( ) { /* chave incial da main */ char opcao; while(opcao != 5) { clrscr( );

/* chave inicial do lao while */

printf(1 - Adicao\n); printf(2 - Subtracao\n); printf(3 - Multiplicacao\n); printf(4 - Divisao\n); printf(5 - Fim do programa\n); printf(Escolha uma opcao: ); opcao = getch( ); switch(opcao) { /* chave inicial do switch */ case 1: somar( ); break; case 2: subtrair( ); break; case 3: multiplicar( ); break; case 4: dividir( ); break; case 5: printf(\nEncerrando o programa); break; default:

66

Fundamentos de Programao
printf(\nOpcao invalida); } /* chave final do switch */

printf(\nPressione uma tecla para continuar); getch( ); } /* chave final do lao while */ } /* chave final da main */

somar( ) { printf(\nFuncao de Soma); } subtrair( ) { printf(\nFuncao de Subtracao); } multiplicar( ) { printf(\nFuncao de Multiplicacao); } dividir( ) { printf(\nFuncao de Divisao); }

Agora algumas consideraes sobre o programa anterior: Na linha char opcao; declaramos a varivel do tipo char para armazenar a opo de menu escolhida pelo usurio. Na linha seguinte while(opcao != 5) o controle do lao de repetio: Faa enquanto opo diferente de 5. Logo aps limpamos a tela e colocamos as opes do menu. Para ver a opo do usurio codificamos: opcao = getch( ); Para verificar qual opo digitada pelo usurio foi escolhida a estrutura switch que a mais adequada quanto temos vrias opes de um menu. No tratamento do primeiro caso, ou seja, se o usurio digitou 1 para fazer a soma. Colocamos neste case a linha: somar( ); que a chamada para a funo somar. No tratamento dos demais casos utilizamos a chamada para a funo subtrair( ); , multiplicar( ); e dividir( ); Depois da chave final da funo main( ) colocamos a declarao da funes

Se tudo funcionou corretamente nos comandos da funo main, vamos agora fazer as modificaes necessrias em cada uma das funes. Devemos, ento codificar os comandos para a execuo das tarefas de

67

cada uma das funes. Veja como ficou a parte do programa relativa as funes somar, subtrair, multiplicar e dividir: somar( ) { float valorA, valorB, result; printf(\nRotina de Soma\n); printf(Digite um valor para A: ); scanf(%f,&valorA); printf(Digite um valor para B: ); scanf(%f,&valorB); result = valorA + valorB; printf(A soma de A com B e: %5.2f\n,result); } subtrair( ) { float valorA, valorB, result; printf(\nRotina de Subtracao\n); printf(Digite um valor para A: ); scanf(%f,&valorA); printf(Digite um valor para B: ); scanf(%f,&valorB); result = valorA - valorB; printf(A subtracao de A com B e: %5.2f\n,result); } multiplicar( ) { float valorA, valorB, result; printf(\nRotina de Multiplicacao\n); printf(Digite um valor para A: ); scanf(%f,&valorA); printf(Digite um valor para B: ); scanf(%f,&valorB); result = valorA * valorB; printf(A multiplicacao de A com B e: %5.2f\n,result); } dividir( ) { float valorA, valorB, result; printf(\nRotina de Divisao\n); printf(Digite um valor para A: ); scanf(%f,&valorA);

Escola Alcides Maya - Primeiro Mdulo

68

Fundamentos de Programao
printf(Digite um valor para B: ); scanf(%f,&valorB); result = valorA / valorB; printf(A divisao de A com B e: %5.2f\n,result); } Novas consideraes sobre o programa:: Na linha float valorA, valorB, result; declaramos as variveis para ler os valores de A, de B e para armazenar o resultado da operao matemtica. Nas linhas seguintes pedidos para o usurio entrar com os dados relativos aos valores de A e de B Efetuamos o processamento (clculo da operao matemtica) Apresentamos os resultado do clculo

Funes dividem grandes tarefas de computao em tarefas menores. Funes apropriadas podem freqentemente esconder detalhes de operao de partes de programa que no necessitam conhec-las, esclarecendo o todo, e facilitando mudanas. Voc usou a printf( ) sem conhecer detalhes de sua programao. Provavelmente a principal razo da existncia de funes impedir que o programador tenha de escrever o mesmo cdigo repetidas vezes. Funes simples Vamos recordar como fazemos uma funo de maneira bem simples analisando o programa abaixo: main( ) { clrscr( ); poemsg( ); printf(Pressione uma tecla); getch( ); } poemsg( ) { printf(Funo que pe uma a mensagem na tela\n); } Agora algumas consideraes sobre o programa anterior: A funo principal sempre a funo main( ), a partir dela que chamamos a funo poemsg( ). Os comandos da funo main( ) esto encapsuladas entre as chaves ({...}) Os comandos da funo poemsg( ) tambm esto encapsuladas entre as chaves ({...}) Na primeira linha de comando da funo main( ) temos: clrscr( ); onde estamos chamando a funo que limpa a tela Na segunda linha de comando da funo main( ) temos: poemsg( ); onde estamos chamando a funo que pe uma mensagem na tela. Repare que quando chamamos uma funo ela vem acompanhada de ponto-e-vrgula (;) Aps a chave final da funo main( ) vem a declarao da funo poemsg( ) Repare que quando declaramos uma funo ela no vem acompanhada de ponto-e-vrgula (;)

Funes II

69

Consideraes importantes Como voc pode ver, a estrutura de uma funo C bastante semelhante a da funo main( ). A nica diferena que main( ) possui um nome especial, e a funo que d inicio ao seu programa. Todo programa em C comea com a funo main( ). Todas as funes em C comeam com um nome seguido de parnteses e, aps isto, chaves que envolvem o corpo da funo. Do mesmo modo que chamamos uma funo de biblioteca C (printf( ), getch( ), etc.) chamamos nossas prprias funes como em poemsg( ). Os parnteses que seguem o nome so necessrios para que o compilador possa diferenciar a chamada a uma funo de uma varivel que voc esqueceu de declarar. A chamada a uma funo constitui uma instruo de programa, deve ser encerrada por ponto-e-vlrgula. Entretanto, na definio de uma funo, o ponto-e-vrgula no pode ser usado. Variveis locais Cada funo pode chamar outras funes. As variveis que so declaradas dentro de uma funo so chamadas variveis locais e so conhecidas somente dentro de seu prprio bloco. Um bloco comea quando o computador encontra uma chave de abertura ({) e termina quando o computador encontra uma chave de fechamento (}). Um dos aspectos mais importantes que voc deve entender sobre as variveis locais que elas existem apenas durante a execuo do bloco de cdigo onde esto declaradas; isto , uma varivel local criada quando se entra em seu bloco e destruda na sada. Vejamos o programa a seguir: main( ) { char nome[ ]=Escola Tecnica Alcides Maya; printf(%s \n,nome); poemsg( ); printf(Pressione uma tecla); } poemsg( ) { char nome[ ]=Possui professores dedicados e competentes\n; printf(%s \n,nome); } Agora algumas consideraes sobre o programa: A varivel do tipo string declarada na funo main( ), no tem nada a ver com a varivel declarada dentro da funo poemsg( ), so duas variveis distintas entre si, e internas a cada funo, por isto que no ocorre erro ou conflito entre elas, apesar de possurem os mesmos nomes. Vejamos mais um exemplo para ficar bem claro estas informaes: main( ) { char nome1[ ]=Fred; char nome2[ ]=Vilma; printf(%s e %s so casados\n, nome1, nome2); poemsg( );

Escola Alcides Maya - Primeiro Mdulo

70

Fundamentos de Programao
printf(%s e %s se amam\n, nome1, nome2); printf(Pressione uma tecla); } poemsg( ) { char nome1[ ]=Barney; char nome2[ ]=Bety; printf(%s e %s so casados\n, nome1, nome2); } Agora algumas consideraes sobre o programa: Veja que as variveis nome1 e nome2 da funo main( ), permanecem com as mesmas informaes antes e depois da chamada da funo poemsg( ).

Nos programas utilizados at agora foram utilizadas variveis declaradas dentro das funes, ou seja, dentro de seu prprio bloco, consideradas, portanto privadas ao bloco onde foram declarada e nenhuma outra funo tem acesso direto a elas. O mesmo verdadeiro para variveis de outras funes. Cada varivel local numa rotina passa a existir somente quando a funo chamada e deixa de existir quando a funo termina. Devido s variveis locais virem e irem com a ativao da funo, elas no retm seus valores de uma chamada para outra, e devem ser explicitamente inicializadas a cada ativao. Se elas no forem inicializadas, contero lixo. Como uma alternativa, possvel definir variveis que sejam externas a todas as funes, isto , variveis globais que possam ser acessadas pelo nome por qualquer funo que assim o desejar. Visto que as variveis externas sejam globalmente acessveis, podem ser usadas, ao invs de listas de argumentos, para comunicar dados entre funes. Alm do mais, devido s variveis externas existirem permanentemente, ao invs de aparecerem com a ativao e desativao de funes, elas retm seus valores mesmo quando as funes que as acessam deixam de existir. Uma varivel externa deve ser definida fora de qualquer funo; isso aloca armazenamento para as mesmas. A varivel deve tambm ser declarada em cada funo que desejar acessa-la; isso pode ser feito por uma declarao explcita extern ou implicitamente pelo contexto. Vamos ver um pequeno programa que possa exemplificar o uso de variveis externas. char nome1[ ]=Fred; char nome2[ ]=Vilma; main( ) { extern char nome1[ ]; extern char nome2[ ]; printf(%s e %s sao casados\n, nome1, nome2); poemsg( ); printf(%s e %s se amam\n, nome1, nome2);

Variveis globais

71

Escola Alcides Maya - Primeiro Mdulo


printf(Pressione uma tecla); getch( ); } poemsg( ) { extern char nome1[ ]; extern char nome2[ ]; printf(%s e %s sao casados\n, nome1, nome2); } Agora algumas consideraes sobre o programa: Veja que a declarao das variveis nome1 e nome2 antes da funo main( ), isto identifica estas variveis como sendo variveis globais, ou seja, externas. No inicio da funo main( ) e tambm da funo poemsg( ), declaramos o uso das variveis globais com a declarao: extern char nome1[ ]; e extern char nome2[ ]; com isto estamos informando ao programa que vamos usar as variveis globais declaradas antes de main( ).

As variveis globais costumam ser chamadas de variveis externas na linguagem C. Em main( ), as variveis externas nome1 e nome2 so definidas nas primeiras linhas do exemplo acima, que definem seus tipos e alocam rea de armazenamento para as mesmas. Sintaticamente definies externas so iguais s declaraes que j usamos anteriormente, mas, como ocorrem fora das funes, as variveis so externas. Antes de uma funo usar uma varivel externa, o nome da mesma deve ser conhecido pela funo. Uma maneira de fazer isso escrever uma declarao extern na funo; a declarao igual anterior, exceto que precedida da palavra-chave extern Em certas circunstncias, a declarao extern pode ser omitida. Se a definio externa de uma varivel ocorrer no arquivo fonte antes de seu uso numa funo particular, ento no h a necessidade de uma declarao extern na funo. As declaraes extern em main( ) e poemsg( ) so, portanto, redundantes. De fato, a prtica comum colocar a definio de todas as variveis externas no incio do arquivo fonte e, ento, omitir todas as declaraes extern. Se o programa est em vrios arquivos fonte, e uma varivel definida em, digamos, arquivo1 e usada em arquivo2, ento uma declarao extern necessria no arquivo2 para conectar as duas ocorrncias da varivel. Baseado nisto o programa anterior poderia ter sido escrito da seguinte forma: char nome1[ ]=Fred; char nome2[ ]=Vilma; main( ) { clrscr( ); printf(%s e %s sao casados\n, nome1, nome2); poemsg( ); printf(%s e %s se amam\n, nome1, nome2);

Consideraes importantes

72

Fundamentos de Programao
printf(Pressione uma tecla); getch( ); } poemsg( ) { printf(%s e %s sao casados\n, nome1, nome2); }

Voc deve observar que estamos usando as palavras declarao e definio cuidadosamente quando nos referimos a variveis externas nessa seo. Definio refere-se ao local onde a varivel est sendo criada ou qual atribuda uma rea de armazenamento; declarao refere-se ao local onde a natureza da varivel dada, sem alocao de rea de armazenamento. A propsito, h uma tendncia de se fazer com que tudo em vista seja uma varivel extern porque simplifica aparentemente a comunicao listas de argumentos so curtas e as variveis esto sempre onde voc as quer. Mas variveis externas esto sempre l, mesmo quando voc no as quer. Este estilo de codificao cheio de perigos porque leva a programas cujas conexes de dados no so bvias variveis podem ser mudadas de modo inesperado e inadvertidamente, e o programa difcil de modificar se o for necessrio. Ns ainda no tratamos funes com passagem de argumentos, mas logo vamos ver como isto funciona, e ai ento, poderemos identificar melhor o uso destas variveis.

O refinamento sucessivo uma tcnica de programao que possibilita dividir uma funo em outras funes. Deve ser aplicado com muito critrio para que o programa a ser construdo no se torne desestruturado e difcil de ser compreendido por voc ou por outras pessoas. Na aula anterior vimos um programa que utilizava um menu na rotina principal e 4 funes para efetuar clculos bsicos (soma, subtrao, multiplicao e diviso). Neste programa podemos aplicar esta tcnica, aliada a declarao de variveis externas. Por exemplo: a entrada e a sada so efetuadas com as mesmas variveis. Observe que as variveis valorA, valorB e result so definidas quatro vezes, uma em cada funo. A soluo definir as variveis valorA, valorB e result como externas e construir mais duas funes, uma para a entrada e a outra para a sada. As quatro funes atuais sero diminudas em nmeros de linhas, pois tudo o que se repete nas funes ser retirado. Veja no programa a seguir a definio das variveis externas e a definio das duas novas funes de entrada e de sada. Perceba nas funes esto sendo declaradas as variveis que sero utilizadas pela funo, fazendo uso do conceito de variveis externas. float valorA, valorB, result; main( ) { char opcao=0; while(opcao != 5) { clrscr( ); printf(1 - Adicao\n);

Refinamento Sucessivo

73

Escola Alcides Maya - Primeiro Mdulo


printf(2 - Subtracao\n); printf(3 - Multiplicacao\n); printf(4 - Divisao\n); printf(5 - Fim do programa\n); printf(Escolha uma opcao: ); opcao = getch( );

switch(opcao) { case 1: somar( ); break; case 2: subtrair( ); break; case 3: multiplicar( ); break; case 4: dividir( ); break; case 5: printf(\nEncerrando o programa); break; default: printf(\nOpcao invalida); } printf(\nPressione uma tecla para continuar); getch( ); }

} somar( ) { printf(\nRotina de Soma\n); entrada( ); result = valorA + valorB; saida( ); }

subtrair( ) { printf(\nRotina de Subtracao\n); entrada( ); result = valorA - valorB; saida( ); }

74

Fundamentos de Programao
multiplicar( ) { printf(\nRotina de Multiplicacao\n); entrada( ); result = valorA * valorB; saida(); }

dividir( ) { printf(\nRotina de Divisao\n); entrada( ); result = valorA / valorB; saida( ); }

entrada( ) { printf(Digite um valor para A: ); scanf(%f,&valorA); printf(Digite um valor para B: ); scanf(%f,&valorB); }

saida( ) { printf(O resultado de A com B e: %5.2f\n,result); } Agora algumas consideraes sobre o programa anterior: Antes da funo main( ), definimos as variveis externas: float valorA, valorB, result; Nas funes de clculo declaramos as variveis externas: extern float valorA, valorB, result; Tambm nas funes de clculo fizemos a chamada da funo de entrada de dados: entrada( ); E conseqentemente a chamada da funo de sada de dados: saida( ); Na nova funo de entrada declaramos as variveis externas: extern float valorA, valorB; Na nova funo de sada declaramos a varivel externa: extern float result;

As funes formam o alicerce da programao. Conforme voc aumentar a sua prtica em programao, seus programas tomaro uma aparncia modular quando voc comear a programao com funes. Estilos e Prottipos das Funes As funes em C foram grandemente modificadas durante o processo de padronizao ANSI. Este novo padro de C grandemente baseado no prottipo de funes usado em C++. Conforme voc l vrios artigos, livros, e revistas sobre C, ver diversas variaes usadas para descrever as funes.

Funes III

75

Prevendo a necessidade que voc vai encontrar em definir o tipo de funo a ser utilizada vamos introduzir aqui o conhecimento sobre prottipo de funes. As declaraes de funo comeam com o prottipo da funo C. O prottipo da funo simples e includo no incio do cdigo do programa para notificar o compilador do tipo e do nmero de argumentos que uma funo utilizar. Embora outras variaes sejam legais, sempre que possvel voc deve utilizar a forma do prottipo de funo que uma rplica da linha de declarao da funo. Vamos fazer isto atravs de exemplos, ento nos prximos exemplos voc ter uma noo mais aprofundada sobre os prottipos das funes. O programa a seguir exemplifica um programa que no recebe nenhum argumento e no retorna nenhum valor. A declarao void foi batizada pelo comit ANSI para a funo que no retornam nada e no recebem nada. void somar(void); main( ) { somar( ); printf(\nPressione uma tecla para continuar); } void somar(void) { int valorA, valorB, result; printf(\nRotina de Soma\n); printf(Digite um valor para A: ); scanf(%d,&valorA); printf(Digite um valor para B: ); scanf(%d,&valorB); result = valorA + valorB; printf(A soma de A com B e: %d\n,result); } Antes da funo main( ), declaramos o prottipo da funo somar: void somar(void); onde o primeiro void est identificando que a funo somar no retorna nenhuma informao para a funo chamadora. O segundo void que est entre parnteses informa que a funo chamadora no vai passar nenhum argumento para a funo chamada. Aps a chave final do main (}) definida a funo somar: void somar(void) que deve ser coerente com o seu prottipo antes da funo main.

Escola Alcides Maya - Primeiro Mdulo

Prottipos de Funes

Funes que no retornam um valor e no recebem argumentos

Agora algumas consideraes sobre o programa anterior:

Funes que retornam um valor

O programa a seguir exemplifica o retorno de uma informao da funo chamada. int somar(void);

76

Fundamentos de Programao
main( ) { int soma; soma = somar( ); printf(A soma de A com B e: %d\n, soma); printf(\nPressione uma tecla para continuar); } int somar(void) { int valorA, valorB, result; printf(\nRotina de Soma\n); printf(Digite um valor para A: ); scanf(%d,&valorA); printf(Digite um valor para B: ); scanf(%d,&valorB); result = valorA + valorB; return(result); } Agora algumas consideraes sobre o programa anterior: Antes da funo main( ), declaramos o prottipo da funo somar: int somar(void); onde identificamos que a funo somar vai retornar um valor inteiro. Dentro do main( ) declaramos a varivel soma para receber o valor retornado int soma; Ainda dentro do main( ) armazenamos o resultado retornado da funo somar na varivel soma atravs da linha de comando: soma = somar( ); No incio da funo somar ela est definida da seguinte forma: int somar(void) Dentro da funo somar temos o retorno de um valor inteiro atravs linha de comando: return(result); O comando return Nos programas anteriores mostramos funes que retornam ao programa que chamou quando encontram a chave ( } ) que termina a funo. No h necessidade de uma instruo return. O comando return causa a atribuio de qualquer expresso entre parnteses a funo que chamadora. Ento quando somar( ) chamada por main( ) a varivel soma adquire o valor do calculado pela funo somar. A varivel soma local a main( ), mas o valor de result mandado para main( ) pelo comando return. Este valor pode, ento, ser atribudo a uma varivel ou fazer parte de alguma expresso. O comando return tem dois usos importantes: Primeiro: voc pode usar return( ) para devolver um valor e retornar, imediatamente, para a prxima instruo do cdigo de chamada. Segundo: voc pode us-lo, sem os parnteses, para causar uma sada imediata da funo na qual ele se encontra; isto , return far com que a execuo do programa volte para o cdigo de chamada assim que o computador encontrar este comando, o que ocorre, em geral, antes da ltima instruo da funo. Voc pode colocar mais de um comando return em suas funes. Uma das limitaes do comando return( ) que ele pode retornar somente um nico valor funo que chama.

77

Escola Alcides Maya - Primeiro Mdulo Funes que recebem argumentos e retornam um valor
O programa a seguir uma variao do programa anterior, que exemplifica a passagem de informaes entre a funo chamadora e a funo chamada. int somar(int valorA, int valorB); main( ) { int soma, valA, valB; clrscr( ); printf(Digite um valor para A: ); scanf(%d, &valA); printf(Digite um valor para B: ); scanf(%d, &valB); soma = somar(valA, valB); printf(A soma de A com B e: %d\n, soma); printf(\nPressione uma tecla para continuar); getch( ); } int somar(int valorA, int valorB) { int result; printf(\nRotina de Soma\n); result = valorA + valorB; return(result); } Agora algumas consideraes sobre o programa: Antes da funo main( ), declaramos o prottipo da funo somar: int somar(int valorA, int valorB); onde identificamos que a funo somar vai retornar um valor inteiro e vai receber como argumento dois valores inteiros valorA e valorB. Dentro do main( ) declaramos a varivel soma para receber o valor retornado int soma,valA,valB; e tambm as variveis que onde sero digitados os valores a serem passados como argumentos para a funo somar. Ainda dentro do main( ) armazenamos o resultado retornado da funo somar na varivel soma atravs da linha de comando: soma = somar(valA, valB); No incio da funo somar ela est definida da seguinte forma: int somar(void) Dentro da funo somar temos o retorno de um valor inteiro atravs linha de comando: return(result);

78

As funes podem ser utilizadas da forma mais simples possvel, como as que no recebem nenhuma informao e tambm no retornam nenhuma informao. Mas podem ser um pouco mais sofisticadas podendo receber informaes de quem as chamou e se for necessrio retornar uma informao para a funo que a chamou. Vamos rever estes conceitos, com maiores detalhes, para que voc no tenha dvidas.

Funes IV

Fundamentos de Programao

Na aula anterior estudamos que as declaraes de uma funo comeam com o prottipo da funo C. O prottipo da funo simples e includo no incio do cdigo do programa para notificar o compilador do tipo e do nmero de argumentos que uma funo utilizar. Veja a sintaxe deste prottipo: tipo_de_ retorno nome_da_funo( tipo(s)_argum nome(s)_argum );

Prottipos de Funes

Veja o significado desta sintaxe: A funo pode ser do tipo void, int, float e assim por diante, especficado em tipo_de_retorno. O nome_da_funo um nome significativo para descrever a funo. Se for passado alguma informao para a funo, devemos fornecer um tipo_argum seguido por um nome_argum. Os tipos de argumentos tambm podem ser do tipo void, int, float, etc. Podemos passar muitos valores para a funo repetindo o tipo de argumento e nome separados por uma vrgula. A prpria funo um pedao de cdigo encapsulado que segue a definio da funo main . A funo tm a seguinte sintaxe: tipo_de_retorno nome_da_funo( tipo(s)_argum nome(s)_argum ) { . . (declarao de dados e corpo da funo) . . return( ); }

Notamos que a primeira linha da funo idntica (exceto pela ausncia do ponto-e-vrgula (;)) do prottipo que listado no incio de um programa. Vejamos um exemplo de um programa utilizando uma funo. int somar( int x, int y ); main( ) { int a,b,c; a=5; b=93; c = somar( a, b ); /* chamada da funo */ /* prottipo da funo */

79

printf(%d + %d = %d\n, a, b, c); } int somar( int x, int y ) { int z; z = x + y; return(z); }

Escola Alcides Maya - Primeiro Mdulo

/* declarao da funo */

/* tipo de retorno da funo */

Veja algumas consideraes sobre o programa acima: Antes da funo main( ), declaramos o prottipo da funo somar: int somar( int x, int y ); onde o prottipo explica que a funo aceitar dois argumentos int e retorna um valor tipo int. Na verdade, o padro ANSI sugere que toda a funo seja prototipada num arquivo de cabealho separado. Como podemos presumir, assim que os arquivos de cabealho so associados s suas bibliotecas C apropriadas. Para programas simples, voc pode incluir o prottipo da funo dentro do corpo do programa Na chamada da funo: c = somar( a, b ); estamos atribuindo o valor de retorno da funo a uma varivel Logo aps a chave final da funo main temos a declarao da funo: int somar( int x, int y ) , que no tem ponto-e-vrgula. E finalmente, antes da chave final da funo: return(z); retornamos para a funo chamadora o resultado do clculo.

No programa anterior, os argumentos foram passados por valor para a funo somar. Quando variveis so passadas dessa maneira, uma cpia do valor da varivel passada para a funo. Como uma cpia passada, a varivel no programa de chamada no alterada. Chamar uma funo por valor um meio popular de passar informaes para uma funo e o mtodo padro em C. A limitao desta tcnica (chamada por valor) que somente um valor retornado pela funo.

Chamada por valor

Em uma chamada por referncia, o endereo do argumento, e no seu valor, passado para a funo. Esta passagem exige menos memria pelo programa do que a chamado por valor. Quando usamos uma chamada por referncia, as variveis na chamada do programa podem ser alteradas. A vantagem desta tcnica (chamada por referncia) que mais de um valor pode ser retornado pela funo. Vejamos o programa anterior utilizando esta tcnica: int somar( int *x, int *y ); main( ) { int a,b,c; a=5; b=93;

Chamada por referncia

80

Fundamentos de Programao
c = somar( &a, &b ); printf(%d + %d = %d\n, a, b, c); } int somar( int *x, int *y ) { int z; z = *x + *y; return(z); } Veja algumas consideraes sobre o programa acima: Antes da funo main( ), declaramos o prottipo da funo somar: int somar( int *x, int *y ); onde o prottipo informa que a funo aceitar dois argumentos int passados como uma chamada por referncia. Na chamada da funo: c = somar( &a, &b ); estamos passando os endereos de memria das variveis a e b, permitindo que se possa alterar o contedo destas variveis dentro da funo chamada, o que no ocorre no exemplo acima. (No prximo programa vamos ver um exemplo onde isto realizado) Aps a funo main temos a declarao da funo: int somar( int *x, int *y ) No comando: z = *x + *y; podemos l-lo da seguinte forma: O contedo apontado pela varivel x ser somado ao contedo apontado pela varivel y e atribudo a varivel z. E na linha: return(z); retornamos para a funo chamadora o resultado do clculo. Vejamos um exemplo, que utiliza melhor esta tcnica: void somar( int *x, int *y, int *z ); main( ) { int a,b,c; a = 5; b = 93; somar( &a, &b, &c ); printf(%d + %d = %d\n, a, b, c); } void somar( int *x, int *y, int *z ) { *x = 10; *y = 20; *z = *x + *y; } Veja algumas consideraes sobre o programa acima:

81

Na declarao do prottipo da funo somar: void somar( int *x, int *y, int *z ); informamos que esta funo no ir retornar nenhum informao (void), e que a funo aceitar trs argumentos int passados como uma chamada por referncia. Note que na funo main, antes da chamada da funo somar, estamos atribuindo um valor para a varivel a: a = 5; e outro para a varivel b: b = 93; Na chamada da funo: somar( &a, &b, &c ); estamos passando os endereos de memria das variveis a, b e c, permitindo que se possa alterar o contedo destas variveis dentro da funo chamada. Nesta funo no estamos atribundo um valor de retorno a nenhuma varivel, porque a funo foi declarada como void Aps a funo main temos a declarao da funo: void somar( int *x, int *y, int *z ) Dentro desta funo estamos alterando o contedo das variveis a e b, atravs dos comandos de atribuio: *x = 10; (L-se: O contedo apontado pela varivel x recebe o valor 10, significando que o contedo da varivel a ser alterado aps esta atribuio), o mesmo ocorrendo com a varivel b na atribuio: *y = 20; Neste momento o contedo inicial da varivel a e b substitudo pelos novos valores atribuidos atravs da variveis que apontam para seus endereos ( *x e *y ). No comando: *z = *x + *y; podemos l-lo da seguinte forma: O contedo apontado pela varivel x ser somado ao contedo apontado pela varivel y e atribudo ao contedo apontado pela varivel z. E no temos comando de return nesta funo.

Escola Alcides Maya - Primeiro Mdulo

Nesta aula vamos tratar dos Argumentos das Funes, que so parmetros passados para as funes, ou seja, informaes que so levadas da funo chamadora para a funo chamada. Estes argumentos so opcionais, algumas funes podem no receber argumentos enquanto outras podem receber diversos argumentos. Os argumentos podem ser misturados, ou seja, podemos utilizar diversos tipos de dados. Argumentos de Funo Formais e Reais A definio de uma funo contm uma lista de argumentos (ou parmetros) chamada lista de argumentos formais. A lista pode estar vazia ou pode conter qualquer combinao de tipos, como inteiro, ponto flutuante ou caracteres. Quando a funo realmente chamada de dentro do corpo do programa, uma lista de argumentos passa para a funo. Esta lista chamada de lista de argumentos reais. Funo sem argumentos - void Na ausncia de argumentos da funo, podemos usar o void. Usar void adequado, mas no necessrio. O programa a seguir tem uma funo simples chamada poemsg que no recebe argumentos e no retorna um valor. A funo main chama a funo poemsg. Quando poemsg completa a sua tarefa, o controle retorna para a funo main. void poemsg (void); main( ) { printf(Este programa apresenta a soma de dois nmeros\n); poemsg( ); } void poemsg (void) { int a = 4; int b = 7; int c = 0; c = a + b;

Funes V

82

Fundamentos de Programao
printf (%d + %d = %d , a, b, c); } Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo poemsg: void poemsg (void); informamos que esta funo no requer nenhum argumento de entrada e no ir retornar nenhuma informao (void)

Caracteres podem ser passados para uma funo. No exemplo a seguir, um caractere ser esperado do teclado na funo main e passado para a funo poechar. A funo getch ser utilizada para ler um caracter do teclado e retornar o valor do caractere digitado, sem apresent-lo na tela. Ns estamos acostumados a usar esta funo para esperar uma tecla qualquer e seguir na execuo do programa, ou em um menu de escolha, para saber qual a opo teclada pelo usurio. Na biblioteca padro da linguagem C, estas outras funes de caractere esto relacionadas com getch: getc, getchar e getche. void poechar (char c); main( ) { char caracter; printf(Pressione uma tecla qualquer\n); caracter = getch( ); poechar(caracter); } void poechar (char c) { printf (O caracter digitado foi..........................: %c\n ,c); printf (O cdigo ASCII do caracter digitado : %d\n ,c); } Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo poechar: void poechar (char c); informamos que esta funo requer um dado do tipo char e que no ir retornar nenhuma informao (void) Na linha: caracter = getch( ); lido o valor do caracter digitado Na linha: poechar(caracter); passado para a funo poechar o caracter digitado Na primeira linha da funo poechar apresentado o caracter digitado com o comando: printf (O caracter digitado foi..........................: %c\n ,c); E aproveitando apresentamos o valor ASCII do caracter digitado utilizando o parmetro %d do caracter digitado com o comando: printf (O cdigo ASCII do caracter digitado : %d\n ,c);

Funo com argumento de caracteres - char

Funo com argumento de inteiros - int


83

Neste programa, um nico int ser lido do teclado com a funo scanf. Esse int ser passado para a funo raio. A funo raio utiliza o raio fornecido para calcular e escrever a rea de um crculo, o volume da esfera e a rea da superfcie da esfera. void raio (int r); main( ) { int vlraio; printf(Informe o raio, como um valor inteiro: ); scanf(%d, &vlraio); raio(vlraio); } void raio (int r) { float area, volume, superficie; area = 3.14159 * (float) (r*r); superficie = 3.14159 * 4.0 * (float) (r*r); volume = 3.14159 * 4.0 / 3.0 * (float) (r*r*r); printf (O raio ......................: %d\n ,r); printf (A rea do crculo....: %f\n ,area); printf (A rea da esfera .....: %f\n ,superficie); printf (O volume da esfera..: %f\n ,volume); } Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo raio: void raio (int r); informamos que esta funo requer um dado do tipo int e que no ir retornar nenhuma informao (void) Na funo main vamos ler o valor do raio e chamar a funo que faz os clculos passando como argumento o valor do raio na linha: raio(vlraio); Note que dentro da funo raio, estamos recebendo como parmetro a varivel r que possui o raio. Veja tambm que nos clculos estamos fazendo o uso de um cast (float) na frente da linha que utiliza o parmetro r, que inteiro, forando o clculo para ser convertido para float, isto que significa o cast. Funo com argumento em ponto flutuante - float Os nmeros em ponto flutuante so to simples de ser passados como argumentos quanto os inteiros. No exemplo a seguir vamos ler o salrio bruto de uma pessoa e a taxa de INSS para o desconto da previdncia social. A funo que calcula o salrio lquido vai receber estes dois parmetros, calcular e apresentar o valor do salrio lquido.

Escola Alcides Maya - Primeiro Mdulo

84

Fundamentos de Programao
void calc_sal ( float sb, float tx ); main( ) { float salbruto, txinss; printf(Digite o valor do salrio bruto: ); scanf(%f, &salbruto); printf(Digite a taxa de desconto do INSS: ); scanf(%f, &txinss); calc_sal (salbruto, txinss); } float calc_sal ( float sb, float tx ) { float saliq; saliq = sb - (sb * tx / 100); printf(O valor do salrio lquido : %12.2f\n, saliq); } Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo calc_sal: void calc_sal ( float sb, float tx ); informamos que esta funo requer dois dados do tipo float e que no ir retornar nenhuma informao. Na funo main vamos ler o valor do salrio bruto e a taxa de desconto do inss chamamos a funo calc_sal, que calcula e apresenta o salrio lquido.

Nesta aula vamos tratar dos inmeros tipos de funes. Um tipo de funo o tipo de valor retornado pela funo. Na aula anterior os nossos exemplos no retornavam nenhum valor e, portanto elas eram do tipo void. Agora iremos trabalhar com vrias funes que retornam tipos de dados diferentes. Ns j trabalhamos com os tipos de funo void, de modo que o prximo exemplo ser um pouco mais elaborado. Na linguagem C a informao numrica pode ser formatada em hexadecimal, decimal e octal, mas no em binrio. A especificao de dados no formato binrio til quando voc estiver usando aritmtica binria ou desenvolvendo mscaras de bits. A funo binario converte um nmero decimal informado pelo teclado para uma representao binria. Os dgitos binrios so armazenados individualmente numa matriz. Para visualizar o nmero binrio, voc precisa escrever o contedo da matriz.

Funes VI

Funo do tipo void

85

void binario ( int numero ); main( ) { int numero;

Escola Alcides Maya - Primeiro Mdulo

printf(Digite um numero decimal: ); scanf(%d, &numero); printf(Este numero em binario e: ); binario(numero); } void binario ( int numero ) { int i=0; int matriz[40]; matriz[0]=0; if(numero) { while(numero != 0) { matriz[i] = (numero % 2); numero /= 2; i++; } --i; } for( ; i >= 0; i-- ) printf(%d, matriz[i]); } Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo binario: void binario ( int numero ); informamos que esta funo requer um argumento do tipo inteiro e que a funo no ir retornar nenhuma informao; A funo binario est convertendo o nmero para binrio fazendo divises sucessivas por dois. O nmero na base dez ser o quociente da diviso anterior. O resto, aps cada diviso, ser um ou zero. O resto ser o dgito binrio.

86

Funo do tipo char

Fundamentos de Programao

A funo maiuscula aceita um argumento char e retorna um argumento tambm char. char maiuscula ( char letra ); main( ) { char letramai, letramin; printf(Digite uma letra minscula: ); scanf( %c, &letramin); letramai = maiuscula ( letramin ); printf( A letra digitada em maisculo : %c , letramai); } char maiuscula ( char letra ) { if (letra >= a && letra <= z) letra = letra + A - a; return(letra); } Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo maiuscula: char maiuscula ( char letra ); informamos que esta funo requer um argumento do tipo char e que a funo no ir retornar um argumento tambm do tipo char; Na funo main pedido para o usurio digitar uma letra em minscula. Na funo maiuscula, temos a linha: if (letra >= a && letra <= z) onde verificamos se o caracter recebido uma letra minscula e se isto for verdade convertemos a letra para maiscula na linha: letra = letra + A - a; caso contrrio retornamos o prprio caracter digitado. A funo cubo aceita um nmero gerado em main, eleva este nmero ao cubo e retorna o valor int para main. O nmero original e o cubo sero impressos na tela. int cubo ( int numero ); main( ) { int i, num; for ( i=0; i <= 20; i += 2 ) { num = cubo ( i ); printf(O cubo de %d e %d \n, i, num); } } int cubo ( int numero ) { return(numero * numero * numero); }

Funo do tipo int

87

Algumas consideraes sobre o programa acima: Na declarao do prottipo da funo cubo: int cubo ( int numero ); informamos que esta funo requer um argumento do tipo int e que a funo no ir retornar um argumento tambm do tipo int; Na funo o clculo realizado dentro do prprio retorno: return(numero * numero * numero); 1. Faa um programa que efetue o clculo de uma prestao em atraso. Para tanto, utilize a frmula PREST = VALOR + (VALOR * (TAXA / 100) * TEMPO). O programa dever chamar uma funo que faa a entrada dos dados e o clculo da prestao e retorne o valor deste clculo para a funo principal (main). Finalmente apresentar o valor da prestao. 2. Faa um programa que possua uma funo que efetue e permita apresentar o somatrio dos N primeiros nmeros inteiros. (1+2+3+4+5+6+...+N). Esta funo dever receber da funo principal (main) o nmero N e no final esta mesma funo dever retornar o valor do somatrio, que dever ser apresentado ao usurio pela funo principal (main). 3. Faa um programa que possua uma funo para calcular e apresentar o valor de uma potncia de um nmero qualquer. Ou seja, ao informar para a funo o nmero e sua potncia, dever ser apresentado o seu resultado. Por exemplo, se for mencionado no programa principal a funo POTENCIA(2,3), dever ser apresentado o valor 8. 4. Faa um programa que possua uma funo para calcular e apresentar a srie de Fibonacci de N termos. A srie de Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34,...etc. Est srie caracteriza-se pela soma de um termo posterior com o seu anterior subseqente. A funo main deve apenas chamar a funo que calcula a srie de Fibonacci. 5. Faa um programa que efetua a leitura de um nmero inteiro e apresente uma mensagem informando se o nmero par ou mpar. Usar uma funo que identifique se o nmero par ou mpar. 6. Faa um programa que apresente um menu com as seguintes opes de clculos: Calcular a rea do quadrado Calcular a rea do retngulo Calcular a rea do circulo Encerrar o programa Estes clculos devem ser realizados em funes, ou seja, dever ter uma funo para cada tipo de clculo. Cada funo dever ter entrada de dados (digitao dos dados para o clculo), processamento dos dados (clculos propriamente ditos) e a sada de dados (apresentao dos resultados dos clculos). 7. Faa um programa que apresente um menu com as seguintes opes e efetue os respectivos clculos atravs de funes: Calcular o volume de uma lata de leo Calcular o volume de uma caixa Encerrar o programa 8. Em uma Escola Tcnica de Informtica, h um professor que faz 6 provas. Faa um programa para calcular a mdia dos alunos de uma escola. O programa dever ter um menu com as seguintes informaes: Calcular a mdia Encerrar o programa O clculo da mdia dever ser realizado em uma funo onde dever ser solicitado o valor das 6 notas escolares, efetuar o clculo da mdia e apresentar no final o resultado obtido conforme a tabela a seguir: [00,05) [05,07) [07,09) [09,10] - Reprovado - Recuperao - Satisfatrio - timo

Escola Alcides Maya - Primeiro Mdulo

Exerccios de Fixao

9. Faa um programa para ler uma temperatura em graus Celsius. Criar uma funo que converte a temperatura de Celsius para Fahrenheit. A frmula de converso F ( 9 * C + 160 ) / 5, sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. A funo de converso deve receber como entrada de dados a temperatura em Celsius em tipo de dado float, fazer a converso e retornar o valor convertido em graus Fahrenheit.

88

Fundamentos de Programao
10. Faa um programa para ler uma temperatura em graus Fahrenheit. Criar uma funo que converte a temperatura de Fahrenheit para Celsius. A frmula de converso C ( F 32 ) * ( 5 / 9 ), sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. A funo de converso deve receber como entrada de dados a temperatura em Fahrenheit em tipo de dado float, fazer a converso e retornar o valor convertido em graus Celsius. 11. Faa um programa que leia um caracter do teclado. Criar uma funo que ir converter esta letra para uma letra minscula e retorna-la. 12. Faa um programa que leia dois nmeros. Criar uma funo chamada potencia que eleva o primeiro nmero a uma potncia inteira do segundo nmero e retorna o valor calculado. Por exemplo, se for lido os nmeros 2 e 3, a funo ir calcular 2 ou seja 2 * 2 * 2 13. Faa um programa que leia e calcule a rea de um retngulo. O programa dever ter uma funo que leia a base e a altura do retngulo, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do retngulo = base * altura. 14. Faa um programa que leia e calcule a rea de um tringulo. O programa dever ter uma funo que leia a base e a altura do retngulo, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do tringulo = (base * altura) / 2. 15. Faa um programa que leia e calcule a rea de um trapzio. O programa dever ter uma funo que leia a base maior, a base menor e a altura do trapzio, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do trapzio = ((base maior + base menor) /2) * altura. 16. Faa um programa que leia e calcule a rea de um crculo. O programa dever ter uma funo que leia o raio do crculo, calcule a rea e retorne o valor do resultado que dever ser apresentada na funo main. Frmula: rea do crculo = PI * r.

1. MANZANO, JOS AUGUSTO N. G. Algoritmos: Lgica para Desenvolvimento de Programao, Editora rica, So Paulo, 2000. 2. MANZANO, JOS AUGUSTO N. G. Lgica estruturada para Programao, Editora rica, So Paulo, 2001. 3. BOHI, MARILYN Guia para programadores, Editora Campus, Rio de Janeiro, 1988. 4. ALCIDES MAYA - Polgrafo Tcnicas de Programao Porto Alegre, 2001 5. ALCIDES MAYA - Polgrafo Algoritmo Porto Alegre, 2001 6. REIS, ANTONIO Manual Bsico de Linguagem C, Porto Alegre, 2000. 7. Outras fontes Internet, Revistas e Peridicos.

Bibliografia utilizada:

89

You might also like