Você está na página 1de 27

+++++++++++ NDICE +++++++++++

Mdulo I Lgica de Programao Captulo 1 Captulo 2 Captulo 3 Captulo 4 Captulo 5 Captulo 6 Captulo 7 Captulo 8 Captulo 9 Captulo 10 Captulo 11 Captulo 12 Histrico Objetivos Ambiente Bibliotecas Tipos de Dados Documentao A Funo Principal - main() Delimitadores de Bloco Variveis Funes de Sada Funes de Entrada Estruturas de Decises 12.1 - Seqncias Simples 12.2 - Seqncias Alternativas 12.2.1 - Seqncias Alternativas Simples - if 12.2.2 - Seqncias Alternativas Compostas - if...else 12.2.3 - Seqncias Alternativas com Mltiplas Condies 12.2.4 - Estrutura Caso - case Laos de Repetio - Iteraes 13.1 - Iterao Enquanto - while 13.2 - Iterao Repita do while 13.3 - Iterao Para - for Estruturas Homogneas 14.1 - Matrizes com Uma Dimenso (Vetores) 14.2 - Matrizes com Duas dimenses Estruturas Heterogneas 15.1 Registros - struct Procedimentos e Funes 3 3 4 5 6 7 8 8 9 10 11 16 16 17 17 18 19 20 23 24 28 31 34 34 37 42 42 48

Captulo 13

Captulo 14

Captulo 15 Captulo 16

Mdulo II Estruturas de Dados Captulo 1 Captulo 2 Captulo 3 Captulo 4 Captulo 5 Captulo 6 Captulo 7 Cadeia de Caracteres Listas Lineares Filas Pilhas Deques Recursividade rvores 51 53 57 62 68 74 77

Mdulo III Arquivos Captulo 1 Captulo 2 Arquivo Texto Arquivo Binrio 83 86

Anexo I Projetos Captulo 1 Captulo 2 Captulo 3 Captulo 4 Captulo 5 Criptografia Simtrica Criptografia Assimtrica Agenda Locadora Controle de Estoque 90 97 115 123 130

Anexo II Exerccios Resolvidos


-2-

+++++++++++ MDULO I +++++++++++


LGICA DE PROGRAMAO

HISTRICO

A Linguagem C foi desenvolvida no incio dos anos 70, em 1972, por Dennis M. Ritchie. Sua primeira implementao foi feita num PDP-11 com sistema UNIX, tendo sido, em seguida, utilizada para rescrever o UNIX. O desenvolvimento da linguagem C foi fortemente influenciado pela linguagem B, desenvolvida por Ken Tompson que, por sua vez, teve suas origens em uma linguagem relativamente antiga, BCPL, desenvolvida por Martin Richards. Embora muitas caractersticas de "C" sejam comuns com BCPL, "C" no um dialeto desta ltima linguagem.

II

OBJETIVOS

C uma linguagem de propsito geral. Mesmo tendo sido criada com o objetivo de ser uma linguagem de programao de sistemas operacionais e utilitrios, pelas suas facilidades de acesso a nvel de mquina e eficincia do cdigo gerado, "C" tambm bastante til para escrever um grande nmero de aplicaes numricas, de processamento de texto e de programas para banco de dados. Este livro aborda os conceitos bsicos da Linguagem, tratando o programa em C++ em mdulos, desde uma aplicao simples como uma soma de dois nmeros at uma aplicao complexa na realizao de um sistema de criptografia assimtrica. O foco principal deste documento so alunos universitrios, e para isso o livro aborda a ementa de duas (ou trs) disciplinas bsicas do curso de Cincia da Computao: Algoritmos, Linguagem de Programao e ainda Estrutura de Dados. Em Estrutura de Dados so apresentadas as principais estruturas como: Cadeia de Caracteres, Listas, Filas, Pilhas, Deques e ainda rvores, com o intuito de preparar o aluno para uma outra disciplina da grade de Cincia da Computao: grafos. O livro fecha com quatro projetos prticos: criptografia simtrica - criao e edito de arquivos texto com tcnica criptogrfica sem senha privada, criptografia assimtrica - incluindo senha privada alm da senha pblica j presente no projeto anterior), agenda - com as principais funes de uma agenda telefnica bsica e locadora - com variaes para Cd, VHS e DVD permitindo incluso, alterao, excluso, consulta, listagem, relatrio, etc.

-3-

III

C++ O AMBIENTE Dev C++

O ambiente Dev C++ integra os recursos de um compilador com um editor de textos, atravs da seleo de opes em um ambiente windows com menus e ferramentas especficas para a linguagem.

Figura 1 Ambiente Dev C++

medida que os recursos da linguagem forem utilizados, e os recursos da plataforma DEV C++ forem necessrios, estes sero citados e explicados paulatinamente. Boa parte das funes e comandos usados neste livro, com foco na plataforma DEV C++, tambm so compatveis com outros compiladores da linguagem C, como o Turbo C++ da Borland, que at pouco tempo atrs ainda era o compilador mais usado nas universidades com o foco acadmico e introdutrio nas linguagens de programao.

-4-

IV

BIBLIOTECAS

A linguagem C por natureza prpria uma linguagem estruturada. A maior parte de seus recursos conseguida via utilizao de funes. Assim sendo, a linguagem possui uma coleo de bibliotecas que podem ser usadas a qualquer momento. Uma biblioteca o conjunto de rotinas prontas para serem usadas pelo programador. Abaixo, so apresentadas algumas das bibliotecas existentes na Linguagem C e sua rpida descrio: stdio.h Esta biblioteca a mais utilizada na programao em C, pois a biblioteca padro (std) de entrada (i) e sada (o) de dados. nela que esto todas as funes de entrada e sada de dados da linguagem, como: scanf(), printf(), getchar(), puts(), gets() entre outras que sero apresentadas nos prximos captulos. conio.h Esta biblioteca possui as rotinas de console de entrada e sada no Ms-DOS, e ainda as funes de ambiente clrscr(), gotoxy(), getche() entre outras. No DEV C++ algumas destas funes esto alocadas em uma variao da biblioteca conio, chamada conio.c math.h Esta biblioteca possui as rotinas do pacote matemtico. dos.h Esta biblioteca possui as rotinas de tratamento do Ms-DOS e dos processadores da famlia Intel: x86. Alguns compiladores tem dificuldade em trabalhar com recursos do DOS, impossibilitando o uso desta biblioteca. graphic.h Esta biblioteca possui as rotinas do pacote grfico string.h Esta biblioteca possui as rotinas de tratamento de memria e strings. Etc... Para poder fazer uso deste recurso necessrio o uso de uma diretiva (#include), que deve ser colocada antes da declarao da funo main(). Desta forma, sua sintaxe corresponde a: #instruo <biblioteca> Onde instruo uma palavra reservada (include entre outras) e biblioteca uma ou mais das bibliotecas citadas acima. Uma diretiva caracteriza-se na linguagem C, por ser uma instruo precedida do caractere tralha "#", que dever ser sempre escrito na primeira coluna. A instruo, aps o smbolo tralha, uma palavra reserva do pr-processador. O pr-processador um programa que checa o programa-fonte escrito em linguagem C e efetua no programa-fonte, modificaes. O pr-processador recebe este nome pelo fato de ser o primeiro programa a ser executado em um processo de compilao, fazendo com que o programa-fonte seja alterado, na forma de texto, antes de ser propriamente compilado. Uma biblioteca poder ser escrita como: #include <stdio.h> ou #include stdio.h substituindo os sinais de menor (<) e maior (>) por aspas () e vice-versa.

-5-

TIPOS TIPOS DE DADOS

Para se desenvolver um programa que seja executvel dentro de um computador, necessrio ter em mente que o trabalho de gerenciamento de dados ocorre em trs nveis: 1. A entrada dos dados; 2. O processamento dos dados; 3. A sada de dados. O objetivo principal de qualquer computador a manipulao de dados, que so representados por elementos em estado primrio. Ao agregar valores esses dados, so criadas as informaes, que ao serem estruturadas de forma organizada e com algum significado, tem por objetivo gerar algum conhecimento. Os computadores servem para armazenar informaes e programas para sua manipulao. Sendo assim, um programador consciente no pode ignorar a importncia dos dados e como eles devem ser estruturados. Como exemplo padro da estruturao de dados e informaes pode ser citada a lista telefnica , que por ser ordenada alfabeticamente, torna razoavelmente simples e rpido o acesso a um determinado nmero de telefone de um assinante. Os dados ento so representados pelas informaes a serem processadas por um computador. A linguagem C fornece ao programador um conjunto de tipos de dados predefinidos, podendo ser dos tipos: numricos, caracteres e lgicos (camuflados por 0 e 1). 5.1. Tipos de dados inteiros So caracterizados tipos inteiros os dados numricos positivos ou negativos, excluindo-se destes qualquer nmero fracionrio. Em C, este tipo de dado pode ser referenciado por um dos seguintes identificadores: int long unsigned int 5.2 Tipos de dados reais So caracterizados tipos reais os dados numricos positivos, negativos e nmeros fracionrios e tambm os inteiros. Em C, este tipo de dado pode ser referenciado por um dos seguintes identificadores: float double de 3.4 E -38 at 3.4 E+38 de 1.7 E -308 at 1.7 E+308 de -32.768 a 32.767 de -2.147.483.648 at 2.147.483.647 de 0 at 65.535

Este tipo de dado real permite trabalhar com uma representao de valores em ponto flutuante que consiste em uma mantissa (parte fracionria). 5.3 Tipos de dados caracteres So caracterizadas tipos caracteres as seqncias contendo letras, nmeros e smbolos especiais. Uma seqncia de caracteres deve ser representada na linguagem C entre aspas ( " " ). Este tipo de dado referenciado pelo identificador char, podendo armazenar de 0 at 255 caracteres. 5.4 Tipos de dados lgicos Na linguagem C, no existe um tipo de dado lgico ou booleano propriamente dito, ou seja, no existiro os valores lgicos Falso ou Verdadeiro para um determinado tipo de dado. Nesta linguagem, qualquer valor igual a zero 0, considerado um valor lgico falso, e qualquer valor diferente de zero (que ser representado pelo nmero 1 inteiro) ser considerado um valor lgico verdadeiro.
-6-

VI

DOCUMENTAO

Comentrios Desenvolvendo Comentrios O uso de comentrios de extrema importncia para o programador, pois tem a finalidade de documentar o programa, deixando-o mais claro e fcil de ser compreendido, alterado ou corrigido. Existem dois tipos de comentrios: comentrio do prlogo e comentrios intercalares

6.1 Comentrio do Prlogo colocado antes da lgica de programao e constitudo por quatro etapas: 1- Definio do programa Ex: // Programa Soma entre 2 nmeros 2- Nome do autor e datas de criao e ltima alterao do programa Ex: // Fulano de Tal em: 04/04/1989; Ultima Alterao: 12/03/2008 3- Declaraes das variveis novas ou desconhecidas usadas no programa Ex: // N1 e N2 = Nmeros digitados pelo usurio; S = Soma encontrada 4- Funcionalidade do Programa Ex: // O usurio digita 2 nmeros e tem como resposta a soma entre eles.

6.2 Comentrios Intercalares Servem para comentar, de maneira breve, funes ou comandos novos ou desconhecidos para o programador. Obs. 1: A especificao de comentrios em Linguagem C++ identificada pelo uso de duas barras em seqncia: // Obs. 2: Quando em um comentrio so utilizadas mais de uma linha, tambm possvel delimit-lo com o uso de /* no inicio da primeira linha e */ no final da ltima linha. /* Programa Soma entre 2 nmeros Fulano de Tal em: 04/04/1989; Ultima Alterao: 03/03/2008 N1 e N2 = Nmeros digitados pelo usurio; S = Soma encontrada O usurio digita 2 nmeros e tem como resposta a soma entre eles. */

-7-

VII

A FUNO PRINCIPAL

Todo e qualquer programa em C constitudo de no mnimo uma funo, tendo assim a possibilidade de se construir programas modulares ou estruturados. main( ) Primeira, e principal funo do C.

A funo main( ) a principal instruo a ser considerada em um programa escrito na linguagem C, ou seja, esta funo dever estar presente em algum lugar do programa, pois ela que marca o ponto de inicializao do processo de execuo do programa. apresentado a seguir, o modelo da forma geral de escrita de um programa em C, com a definio e comentrio de cada um dos elementos bsicos do programa.

[<definies de pr-processamento>] [<declarao das variveis globais>] main() { /* Este trecho reservado para o corpo da funo, com a declarao de suas variveis locais, seus comandos e funes de trabalho. */ } Toda informao situada entre [ ] indica informaes que podero ou no estar presentes em um programa. J qualquer informao entre < > caracteriza-se por ser obrigatria. Os smbolos ( ) indicam incio e fim da rotina. Todas as informaes escritas entre os delimitadores /* e */ so comentrios para documentao do programa e no so compiladas quando da execuo do programa pelo compilador. Normalmente, um programa em C iniciado com as definies de pr-processamento e com a declarao das variveis globais, lembrando que estas variveis podero ser usadas em qualquer parte do programa, seguidas da declarao de todas as funes a serem utilizadas no programa. As funes em C so formadas inicialmente pela declarao de seu tipo, informao esta opcional, e de seu nome seguida da lista de parmetros entre parnteses a ser utilizada pela mesma. A lista de parmetro poder estar vazia, sendo que a finalidade de um parmetro servir como um ponto de comunicao bidirecional entre as vrias funes de um programa.

VII VIII

DELIMITADORES DE BLOCO

Delimitam toda a lgica de programao escrita pelo programador. So representados (em C++) por { e } conforme observado na sintaxe abaixo: /* ...Comentrio do Prlogo... */ Bibliotecas; main() { ------------------------}

-8-

IX

VARIVEIS

Varivel, no sentido de programao, uma regio previamente identificada e que tem por finalidade armazenar as informaes (dados) de um programa temporariamente. Uma varivel armazena apenas um valor por vez. Sendo considerado como valor o contedo de uma varivel, desta forma, um valor est relacionado ao tipo de dado de uma varivel, podendo ser numrico, lgico ou caractere. O nome de uma varivel utilizado para sua identificao e posterior uso dentro de um programa, sendo assim necessrio se estabelecer algumas regras de utilizao das mesmas: Nomes de uma varivel podero ser atribudos com um ou mais caracteres; O primeiro caractere do nome de uma varivel no poder ser em hiptese alguma um nmero, sempre dever ser uma letra; O nome de uma varivel no poder possuir espaos em branco; No poder ser nome de uma varivel uma palavra reservada a uma instruo ou identificador de uma linguagem de programao; No podero ser utilizados outros caracteres a no ser letras e nmeros, com exceo do caractere underscore "_", que poder ser utilizado para simular a separao entre duas palavras, como: MEDIA_ESCOLAR. Na linguagem C, os 32 primeiros caracteres de um nome de varivel so significativos, porm, se o sistema operacional em uso o MS-DOS, somente sero considerados os primeiros 8 caracteres. Este fator limita um pouco o uso das variveis.

Outro detalhe a ser considerado na linguagem C o fato de haver diferena entre caracteres maisculos e minsculos. Sendo assim as variveis: NOME, nome e Nome, so diferentes. Todo dado a ser armazenado na memria de um computador atravs de uma varivel utilizando-se a linguagem C deve ser previamente declarado, ou seja, primeiro necessrio saber qual o seu tipo para depois fazer o seu armazenamento. Estando armazenado o dado, este poder ser utilizado e manipulado a qualquer momento, durante a execuo do programa. Pelo fato de a linguagem C obrigar o programador a trabalhar de forma estruturada e ser baseada no uso de funes, as variveis podem assumir dois estados de comportamento (global e local). Uma varivel considerada Global quando declarada no inicio de um programa escrito em C, precisamente antes da funo main ( ), que ser estuda a seguir, podendo este tipo de varivel ser utilizado por qualquer parte do programa. Uma varivel considerada Local quando declarada apenas dentro de uma funo e somente vlida dentro do limite de abrangncia da referida funo. Desta forma, as demais rotinas no podero fazer uso daquelas variveis como Global, pois no visualizam a existncia das mesmas. Todo programa tem a obrigatoriedade de declarar (antes da lgica) todas as variveis que sero utilizadas, pois estas s podero receber valores aps tal declarao, que ocorre de acordo com a seguinte sintaxe: tipo_de_dado NOME_DA_VARIAVEL ; Ex: int IDADE; float N1 , N2 , S ;

-9-

9.1 Constantes Tem-se como definio de constante tudo aquilo que fixo ou estvel, e existiro vrios momentos em que este conceito dever estar em uso. Ao operar com variveis correspondentes a valores constantes ou frmulas, deve-se utilizar o smbolo = que significa uma atribuio. Por exemplo, o valor 4.12 da frmula a seguir uma constante e est sendo atribudo varivel INSS: INSS = SAL * 4.12.

9.2 Operadores Aritmticos Tanto variveis como constantes podero ser utilizadas na elaborao de clculos matemticos com a utilizao de operadores aritmticos. Os operadores aritmticos so classificados em duas categorias, sendo binrios ou unrios. So binrios quando atuam em operaes de: exponenciao, multiplicao, diviso, adio e subtrao. So unrios quando atuam na inverso de um valor atribuindo a este o sinal positivo ou negativo.

FUNES DE SADA

So responsveis pela sada de dados, ou seja: apresentao destes valores em qualquer programa, sendo obrigatrio o uso dos parnteses para delimitar os dados apresentados. A primeira funo de sada apresentada a printf( ) que possibilita efetuar a sada de informaes no vdeo, de acordo com a sintaxe: printf ("expresso de controle", lista de argumentos);

A expresso de controle se caracteriza por conter cdigos de formatao para o tipo de dado a ser processado, precedidos pelo sinal de percentagem %.

Veja a seguir, a tabela com os cdigos de formatao para a funo printf( ). %c %d %e %f %g %o %s %u %x Permite que seja efetuada a escrita de apenas um caractere Permite que seja efetuada a escrita de nmeros inteiros decimais Permite que seja efetuada a escrita de nmeros em notao cientfica Permite que seja efetuada a escrita de nmeros reais (ponto flutuante) Permite que seja efetuada a escrita de %e ou %f no formato mais curto Permite que seja efetuada a escrita de nmeros octais Permite que seja efetuada a escrita de uma srie de caracteres Permite que seja efetuada a escrita de um nmero decimal sem sinal Permite que seja efetuada a escrita de um nmero hexadecimal

- 10 -

A funo printf ( ) pode usar alm da expresso de controle e da lista de argumentos um conjunto de cdigos especiais atravs do smbolo \ com finalidade de efeito visual conforme apresentado abaixo: printf (Clube do Remo \n Campeo Brasileiro Srie C 2005); O resultado desta operao na tela do computador seria: Clube do Remo Campeo Brasileiro Srie C 2005 A utilizao destes cdigos especiais tem a finalidade de auxiliar o programador na utilizao de recursos no disponveis no teclado. Estes cdigos so apresentados a seguir: \n \t \b \ \\ \f \0 Cria uma linha nova a partir do ponto que indicado Cria um espao de tabulao do ponto que indicado Executa um retrocesso de espao do ponto que indicado Apresenta o smbolo de aspas no ponto que indicado Apresenta o smbolo de barra no ponto que indicado Adiciona um salto de pgina de formulrio (impressora) Gera um nulo

XI

FUNES DE ENTRADA

So responsveis pela insero de dados em um programa, ou seja, tudo que tiver de ser digitado pelo usurio dever usar uma funo de entrada. Tambm obrigatrio o uso dos parnteses para delimitar os dados digitados e obedece a seguinte sintaxe: A primeira funo de sada apresentada a funo scanf( ) , que possibilita efetuar entrada de dados via teclado.

A sintaxe desta funo se caracteriza por ser uma expresso de controle seguida de uma lista de argumentos separados por virgula, sendo que seus argumentos so endereos de variveis. scanf ("expresso de controle", lista de argumentos); A expresso de controle se caracteriza por conter cdigos de formatao para o tipo de dado a ser processado, precedidos pelo sinal de percentagem %. Veja a seguir, a tabela com os cdigos de formatao para a funo scanf( ). %c %d %e %f %l %o %s %u %x Permite que seja efetuada a leitura de apenas um caractere Permite que seja efetuada a leitura de nmeros inteiros decimais Permite que seja efetuada a leitura de nmeros em notao cientfica Permite que seja efetuada a leitura de nmeros reais (ponto flutuante) Permite que seja efetuada a leitura de um nmero inteiro longo Permite que seja efetuada a leitura de nmeros octais Permite que seja efetuada a leitura de uma srie de caracteres Permite que seja efetuada a leitura de um nmero decimal sem sinal Permite que seja efetuada a leitura de um nmero hexadecimal
- 11 -

A lista de argumentos se caracteriza por ser a indicao dos endereos das variveis em uso, atravs do operador de endereo &, que possibilita retomar o contedo da varivel. Caso no seja usado o operador de endereo &, ser retornado o endereo de memria em que se encontra a varivel.

O Primeiro Programa em C Para colocar em prtica o que foi explicado at este momento, considere o seguinte exemplo: /* Programa Nome Autor: Fulano de Tal Dt_Cri: 22/08/1986 Dt_Ult_Alt: 12/03/2008 Sem Variveis O usurio simplesmente apresentado ao autor do programa

*/

#include <stdio.h> #include <conio.h> main ( ) // Primeira funo do programa em C { // Corresponde ao "Inicio" do Algoritmo printf ( "Programa desenvolvido por \n Fulano de Tal" ); // Corresponde ao "escreva" do algoritmo getch ( ); // Espera ser pressionada qualquer tecla p/ continuar } // Corresponde ao "fim" do algoritmo

Edite o programa acima, compile-o e verifique a funcionalidade de seu arquivo executvel.

Considere agora o seguinte exemplo de algoritmo: "Dever ser desenvolvido um programa que efetue a leitura de dois valores numricos. Faa a operao de adio entre os dois valores e apresente o resultado obtido". Com relao ao problema da leitura dos dois valores (que no conhecemos e tambm no precisamos conhecer, pois utilizaremos duas variveis para trabalhar estas incgnitas N1 e N2) e a sua respectiva adio (conseqncia dos valores informados, a qual tambm uma incgnita e dependendo dos valores fornecidos, utilizaremos para esta a varivel S).

Assim sendo, o programa em questo dever obedecer a seguinte ordenao: Algoritmo Literal: 1. Ler um valor para a varivel N1; 2. Ler outro valor para a varivel N2; 3. Efetuar a adio das variveis N1 e N2, implicando o seu resultado na varivel S; 4. Apresentar o valor da varivel S aps a operao de soma dos dois valores fornecidos. Observe que temos neste exemplo, as trs fases de trabalho de um programa: a fase de entrada retratada nos passos 1 e 2, o processamento retratado no passo 3 e por fim a sada retratada no passo 4. Completada a fase de interpretao do problema e da definio das variveis a serem utilizadas, atravs de um algoritmo, passa-se para a fase de diagramao. Tendo estabelecido os passos anteriores, ser efetuada a codificao do programa. Desta forma, so utilizadas no exemplo, trs variveis: N1, N2 e S (que neste caso esto no estado de variveis locais), sendo que estas devero ser declaradas segundo o seu tipo, no caso como inteiras. /* Programa Soma entre 2 nmeros Fulano de Tal em: 04/04/1989; Ultima Alterao: 03/03/2008 N1 e N2 = Nmeros digitados pelo usurio; S = Soma encontrada O usurio digita 2 nmeros e tem como resposta a soma entre eles.
- 12 -

*/

main( ) { int N1; int N2; int S; Tendo relacionado as variveis que sero utilizadas no programa, bem como os seus respectivos tipos, passa-se para a fase de montagem do programa propriamente dito. As variveis poderiam ser tambm relacionadas em uma nica linha: int N1, N2, S; Observe que o bloco de instrues entre { e } est deslocado um pouco para a direita. Este estilo de escrita deve ser obedecido, para facilitar a leitura de um bloco de programa, recebendo o nome de identao. Apesar de a informao escrita entre os delimitadores /* e */ no ser processada, adequado sempre identificar um programa com um nome que deve vir no comentrio de prlogo. scanf ("%d", &N1); scanf ("%d", &N2); S = N1 + N2; printf ("%d", S); } Aps a leitura dos valores para as variveis N1 e N2 com a funo scanf ( ), estes sero adicionados e implicados na varivel S, a qual ser apresentada com o valor da adio processada atravs da funo printf ( ). Note que as instrues utilizadas dentro da funo main( ) so precedidas de ponto e virgula, indicando desta forma o fim da instruo naquela linha. A seguir, apresentado o programa completo: /* Programa Soma entre 2 nmeros Fulano de Tal em: 04/04/1989; Ultima Alterao: 03/03/2008 N1 e N2 = Nmeros digitados pelo usurio; S = Soma encontrada O usurio digita 2 nmeros e tem como resposta a soma entre eles.

*/

#include <stdio.h> #include <conio.h> main ( ) { int N1,N2,S; printf ("Informe 1 numero: "); scanf ("%d", &N1); printf ("Informe 2 numero: "); scanf ("%d", &N2); S = N1 + N2; printf ("\n A Soma igual a %d", S); getch ( ); }
- 13 -

// Primeira funo do programa em C // Corresponde ao "Inicio" do Algoritmo // Declarao das variveis como inteiras // Corresponde ao "escreva" do Algoritmo // Corresponde ao "leia" do Algoritmo

// Espera ser press. qq tecla p/ prosseguir

Edite o programa acima, compile-o e verifique a funcionalidade de seu arquivo executvel. Como terceiro exemplo, desenvolva um programa que efetue o clculo do salrio liquido de um profissional que trabalhe por hora. Para fazer este programa voc dever possuir alguns dados, tais como: valor da hora de trabalho, nmero de horas trabalhadas no ms e o percentual de desconto do INSS. O programa em questo dever apresentar o valor do salrio bruto, o valor descontado e o valor do salrio liquido. Algoritmo Literal 1. Estabelecer a leitura da varivel HT (horas trabalhadas no ms); 2. Estabelecer a leitura da varivel VH (valor hora trabalhada); 3. Estabelecer a leitura da varivel PD (percentual de desconto); 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 liquido (SL), subtraindo o desconto do salrio bruto; 7. Apresentar os valores dos salrios bruto e liquido: SB, TD e SL. A seguir, apresentado o programa completo: /* Programa Calculo de Salrio Fulano de Tal em: 05/04/1989; Ultima Alterao: 03/03/2008 HT horas trabalhadas no ms, VH valor da hora trabalhada , PD percentual de desconto , SB Salrio Bruto, D Desconto e SL Salrio liquido O usurio digita HT, VH e PD e tem SB, TD e SL. */

include <stdio.h> include <conio.h> main( ) { float HT, VH, PD, D, SB, SL; printf ("Informe numero de horas trabalhadas no ms: "); scanf ("%f", &HT); printf ("Informe valor da hora trabalhada: "); scanf ("%f", &VH); printf ("Informe percentual de desconto: "); scanf ("%f", &PD); SB = HT * VH; D = (PD/100) * SB; SL = SB - D; printf ("Salrio Bruto............: %7.2f \ n , SB); printf ("Desconto..................: %7.2f \ n , D); printf ("Salrio liquido..........: %7.2f \ n , SL); getch( ); } Note que no exemplo de clculo de salrios esto sendo colocados junto ao cdigo da expresso de controle dois valores separados por ponto: %7.2f. O valor numrico 7 indica que ser estabelecido um campo para a parte do valor inteiro com a capacidade de apresentar tabulados valores at 9999, pois o valor 2 depois do ponto indica que sero utilizadas apenas duas casas decimais para valores com ponto flutuante, utilizando trs espaos dos sete espaos separados.
- 14 -

ExerccioS ExerccioS
1) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para encontrar a mdia
escolar de uma disciplina que trabalha com a seguinte frmula: duas provas valendo 10 pontos sendo que a primeira tem peso 4 e a segunda tem peso 6. O usurio dever digitar somente as 2 notas e dever ser apresentada ele a mdia encontrada.

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para encontrar o delta de uma equao do 2 grau. A frmula geral de equaes do 2 grau a seguinte: Ax2 + Bx + C = 0 e a do Delta : B2 - 4AC . O usurio dever digitar os coeficientes A, B e C respectivamente e lhe ser apresentado o valor do delta. 3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para que um usurio, informando a distncia entre dois pontos e o tempo gasto no percurso, tenha como resposta a velocidade obtida no trajeto. Lembre-se que V = S/T. Adotar as unidades: km para a distncia e hora para o tempo. 4) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para efetuar o clculo da
quantidade de litros de combustvel gastas em uma viagem, utilizando-se um automvel que faz 12 Km por litro. Para obter o clculo, o usurio dever fornecer o tempo gasto na viagem e a velocidade mdia durante a mesma. Desta forma, ser possvel obter a distncia percorrida com a frmula DISTANCIA = TEMPO * VELOCIDADE. Tendo o valor da distncia, basta calcular a quantidade de litros de combustvel utilizada na viagem com a frmula: LITROS_USADOS = DISTANCIA / 12. O programa dever apresentar os valores da velocidade mdia, tempo gasto, a distncia percorrida e a quantidade de litros utilizada na viagem.

5) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para ler uma temperatura
em graus Centgrados e apresent-la convertida em graus Fahrenheit. A frmula de converso : F = (9 * C + 160) / 5, onde F a temperatura em Fahrenheit e C a temperatura em Centgrados.

6) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para ler uma temperatura
em graus Fahrenheit e apresent-la convertida em graus Centgrados. A frmula de converso : C = (F 32) * 5/9, onde F a temperatura em Fahrenheit e C a temperatura em Centgrados.

7) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular e apresentar o
valor do volume de uma lata de leo, utilizando a frmula: VOLUME = 3.14159 * R2 * ALTURA.

- 15 -

XII

ESTRUTURAS DE DECISES

12.1 - Seqncia Simples: considerada linguagem em Seqncia Simples, todo programa que contm comandos escritos e executados de forma linear, ou seja: de cima para baixo, sem desvios, de acordo com a seguinte sintaxe: /* ...Comentrio do Prlogo... */ bibliotecas; main() { Ao 1; Ao 2; Ao N; } Ex.: /* Programa Soma entre 2 nmeros reais Fulano de Tal em: 04/04/1989; Ultima Alterao: 02/04/2008 N1 e N2 = Nmeros digitados pelo usurio; S = Soma encontrada O usurio digita 2 nmeros e tem como resposta a soma entre eles. #include <stdio.h> #include <conio.h> main ( ) { float N1,N2,S; printf ("Informe 1 numero: "); scanf ("%f", &N1); printf ("Informe 2 numero: "); scanf ("%f", &N2); S = N1 + N2; printf ("\n A Soma igual a %f", S); getch ( ); } 12.2 - Seqncias Alternativas 12.2.1 - Seqncias Alternativas Simples: if So estruturas compostas por desvios em sua formao, ou seja: no so executadas necessariamente de maneira linear, pois existem blocos de instrues que podem ser saltados (ignorados) dentro do corpo do programa. Neste tipo de estrutura uma condio analisada e caso o valor lgico desta condio seja verdadeiro, um determinado bloco de aes (B) executado. Caso o valor lgico da condio seja falso, este bloco de aes (B) ignorado, podendo ocorrer ento um desvio na seqncia de comandos. A sintaxe das estruturas com alternativa simples a seguinte: /* ...Comentrio do Prlogo... */ bibliotecas; main() { Aes A; if (CONDIO) { Aes B; } Aes C; }
- 16 -

*/

Obs.1: Utiliza-se { e } para delimitar blocos internos de um desvio com mais de um comando em sua formao. Obs.2: O uso dos parnteses ( ) obrigatrio para delimitar as condies. Obs.2: Ao utilizar estruturas alternativas, aconselhvel o uso da identao. Entende-se por identao, como sendo a organizao esttica dos blocos de comandos ou aes existentes no programa. Para exemplificar a estrutura, considere o seguinte problema: "Ler dois valores numricos, e mostralos em ordem crescente. Ou seja, poder haver uma troca entre variveis. Algoritmo 1. Conhecer dois valores inteiros e incgnitos ( estabelecer variveis A e B ); 2. Verificar se o valor de A maior que de B; a. Se for verdadeiro, efetuar a troca (*) de valores entre as variveis; b. Se for falso, pedir para executar o que esta estabelecido no passo 3; 3. Apresentar os valores das duas variveis

(*) Para efetuar a troca, foi necessrio usar uma terceira varivel, no caso, X (por exemplo), de forma que X seja igual ao valor de A, liberando A para receber o valor de B deixando B livre para receber o valor que est em X, que anteriormente constava o contedo de A. Programa /* Programa Ordenao entre 2 nmeros inteiros Fulano de Tal em: 04/04/1989; Ultima Alterao: 02/04/2008 A e B = Nmeros digitados pelo usurio; X = Varivel auxiliar O usurio digita 2 nmeros e tem como resposta ambos ordenados.

*/

#include <stdio.h> #include <conio.h> main( ) { int A, B, X; printf ("Informe um valor para a varivel A:); scanf (%d, &A); printf ("Informe um valor para a varivel B:); scanf (%d, &B); if (A > B) { X = A; A = B; B = X; } printf("\n Os valores ordenados so: %d e %d", A, B); getch( ); } Note a utilizao das chaves { e } aps a utilizao da instruo if. Isto se fez necessrio, pois a troca de valores conseguida com a execuo de trs operaes, sendo que estas trs operaes devem acontecer quando a condio for Verdadeira. Sendo a condio Falsa, sero apresentados os valores como entrados, uma vez que j esto em ordem. Observe a linha: printf ("\n Os valores ordenados so: %d e %d", A, B); note que a colocao do cdigo %d dentro da mensagem indica o local de posicionamento do valor da varivel.

- 17 -

Operadores Relacionais No exemplo anterior, foi utilizado o sinal de > (maior que) para verificar o estado da varivel quanto ao seu valor, ou seja, a sua condio. Sendo assim, uma condio tambm poder ser verificada como: diferente, igual, menor que, maior ou igual a que e menor ou igual a que. Estas verificaes so efetuadas com a utilizao dos chamados operadores relacionais, conforme tabela abaixo: == != > < >= <= Igual Diferente Maior Menor Maior ou Igual Menor ou Igual

Obs. Ao fazer uso do operador relacional "= =" que representa o valor de igualdade de uma comparao entre dois elementos, deve-se tomar o cuidado para no confundi-lo com o sinal "=", que na linguagem C utilizado como smbolo de atribuio. Este erro comum para quem utiliza outras linguagens de programao como Pascal, Visual Basic, Delphi, Quick Basic, pois a segunda forma usada tanto para atribuio como para comparao.

12.2.2 - Seqncias Alternativas Compostas: if ... else So estruturas compostas por desvios mltiplos em sua formao, onde um bloco de aes B executado em caso de condio verdadeira e um bloco de aes C executado em caso de condio falsa. A estrutura de formao para as seqncias alternativas compostas utiliza a seguinte sintaxe: /* ...Comentrio do Prlogo... */ bibliotecas; main() { Aes A; if (CONDIO) { Aes B; } else { Aes C; } Aes D; }

Para um exemplo da utilizao desta estrutura considere o seguinte problema: "Ler dois valores numricos, efetuar a adio. Caso o valor somado seja maior ou igual a 10, este dever ser apresentado somando-se a ele mais 5. Caso o valor somado no seja maior ou igual a 10, este dever ser apresentado subtraindo-se 7". Algoritmo 1. Conhecer dois valores ( variveis A e B ); 2. Efetuar a soma dos valores A e B e implicar o valor da soma em X; 3. Verificar se X maior ou igual 10, caso sim mostre X+5, seno mostre X-7.

- 18 -

Programa /* Adiciona Nmeros */ #include <stdio.h> #include <conio.h> main( ) { int A, B, X; printf ("Informe um valor para a varivel A: "); scanf ("%d", &A); printf ("Informe um valor para a varivel B: "); scanf ("%d", &B); X = A + B; printf ("\n O resultado eqivale a: "); if (X >= 10) printf ("%d", X+5); else printf ("%d", X-7); getch( ); } Observe que aps a definio dos tipos de variveis, solicitada a leitura dos valores para as variveis A e B, depois estes valores so implicados na varivel X, que possui o resultado da adio dos dois valores. apresentada ento a mensagem O resultado eqivale a:, que no posicionar o cursor na prxima linha, desta forma qualquer que seja o resultado avaliado pela condio, ser apresentado ao lado direito da mensagem. Em seguida a esta linha verificado no programa, a condio que permitir escrever o resultado da soma adicionado de 5, caso esta seja maior ou igual a 10. No sendo, o programa apresentar o resultado subtraindo 7. Operadores ou Conectivos Lgicos Existem ocasies onde necessrio trabalhar com o relacionamento de duas ou mais condies ao mesmo tempo na mesma instruo if, efetuando desta forma testes mltiplos. Para estes casos necessrio trabalhar com a utilizao dos operadores lgicos, tambm conhecidos como operadores booleanos. J foi comentado anteriormente que a linguagem C no faz uso de valores lgicos, tais como: Verdadeiro ou Falso, pelo fato de estes dois valores no existirem. Em uma expresso condicional ou no uso de operadores lgicos, ser considerado como valor Verdadeiro o resultado da expresso que for nozero (que ser considerado para efeito de avaliao lgica o valor numrico um: 1). Sendo o resultado da expresso zero, esta ser considerada como valor Falso. Os 3 operadores lgicos utilizados comumente na Linguagem C so: E, OU e NO. Em alguns casos, o uso de operadores lgicos evita a utilizao de muitas instrues if encadeadas.

Operador Lgico E: && O operador do tipo && utilizado quando dois determinada condio necessitam ser verdadeiros. Abaixo de operador: Condio 1 Condio 2 0 (Falsa) 0 (Falsa) 1 (Verdadeira) 0 (Falsa) 0 (Falsa) 1 (Verdadeira) 1 (Verdadeira) 1 (Verdadeira) ou mais relacionamentos lgicos de uma apresentada a tabela verdade para este tipo Resultado . 0 (Falso) 0 (Falso) 0 (Falso) 1 (Verdadeiro)

O operador && faz com que somente seja executada uma determinada operao se todas as condies mencionadas forem simultaneamente verdadeiras, gerando assim um resultado lgico verdadeiro.

- 19 -

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

0 1 0 1

0 0 1 1

0 1 1 1

O operador | | faz com que seja executada uma determinada operao, se pelo menos uma das condies mencionadas gerar um resultado lgico verdadeiro. Operador Lgico NO: ! O operador do tipo ! utilizado quando se necessita estabelecer que uma determinada condio deve no ser verdadeira ou deve no ser falsa. O operador ! se caracteriza por inverter o estado lgico de uma condio. Abaixo apresentada a tabela verdade para este tipo de operador: Condio 1 (Verdadeira) 0 (Falso) Resultado . 0 (Falso) 1 (Verdadeira)

O operador ! faz com que seja executada uma determinada operao, invertendo o resultado lgico da condio.

12.2.3 - Seqncias Alternativas com Mltiplas Condies Esta estrutura composta por mltiplas condies, onde cada uma pode conter um valor lgico diferente. Tais condies so analisadas individualmente e a elas so atribudos valores lgicos individuais, que passam a ser operados com as tabelas verdade, encontrando assim um nico valor lgico correspondente ao conjunto de condies citadas na operao. A estrutura de seqncias alternativas com mltiplas condies deve respeitar a seguinte sintaxe: /* ...Comentrio do Prlogo... */ bibliotecas; main() { Aes A; if (CONDIO1 conectivolgico CONDIO2 conectivolgico CONDION) { Aes B; } else { Aes C; } Aes D; } Para demonstrar a utilizao de operadores lgicos, considere o seguinte problema (clssico): "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. Se for esta condio verdadeira, dever ser indicado qual tipo de tringulo foi formado: issceles, escaleno ou equiltero".
- 20 -

Algoritmo Forma-se 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 se estabelecer qual tipo de tringulo ser formado: issceles, escaleno ou equiltero. Um tringulo equiltero quando possui todos os lados iguais, sendo A==B e B==C; issceles quando possui dois lados iguais, sendo A==B ou A==C ou B==C; escaleno quando possui todos os lados diferentes, sendo A!=B e B!=C e A!=C 1. Ler trs valores para os lados de um tringulo: A, B e Q 2. Verificar se cada lado menor que a soma dos outros dois lados a. Se sim, saber se A= =B e se B= =C, sendo verdade o tringulo equiltero b. Se no, verificar A= =B ou se A= =C ou se B= =C, sendo verdade o tringulo issceles, caso contrrio o tringulo ser escaleno; 3. Caso os lados fornecidos no caracterizem um tringulo, avisar a ocorrncia. Programa /* Programa Tipo de Tringulo */ #include<stdio.h> #include<conio.h> main( ) { float A, B, C; printf("\t Programa Tipo de Triangulo \n\n"); printf("\n Informe o lado A: "); scanf("%f", &A); printf("\n Informe o lado B: "); scanf("%f", &B); printf("\n Informe o lado C: "); scanf("%f", &C); printf("\n"); if (A<B+C && B<A+C && C<A+B) { if (A==B && B== C) printf("Triangulo Equilatero \n"); else { if (A==B || A==C || C==B) printf("Triangulo Isosceles \n"); else printf("Triangulo Escaleno \n"); } } else printf("Os valores fornecidos nao formam um triangulo \n); getch( ); } O exemplo demonstra atravs da utilizao dos operadores lgicos, a capacidade de um programa definir se determinados valores fornecidos formam realmente um tringulo, e se a condio for verdadeira, este programa indica o tipo de tringulo formado. Se forem fornecidos respectivamente os valores 8, 2 e 3 para os lados A, B e C, ser apresentada a mensagem: "Os valores fornecidos no formam um tringulo", pois a primeira condio da instruo if (A<B+C && B<A+C && C<A+B) resulta o valor lgico falso, uma vez que 8 maior que a soma de 2 com 3. Caso sejam fornecidos os valores 8, 8 e 2, a primeira instruo if ser verdadeira, indicando que os lados fornecidos formam um tringulo. Apesar de o lado A ser igual ao lado B, mas este no ser igual ao lado C, o tringulo formado no do tipo equiltero, desta forma a segunda instruo if tem seu resultado lgico como falso, sobrando a verificao da condio para a terceira instruo if que indica o tringulo como sendo do tipo issceles, pois o lado A igual ao lado B.
- 21 -

COMANDOS ESPECIAIS DE REFINAMENTO A seguir so apresentados alguns comandos de controle de ambiente de tela que a linguagem C oferece ao seu programador. Para us-los deve-se acrescentar a biblioteca conio.h no incio do programa. No Dev C++, alm da biblioteca conio.h ainda podem ser necessrias as bibliotecas conio.c e/ou conio2.h, caso estas estejam instaladas no pacote do compilador. textcolor (); Usado para adotar cores em fontes no C ou para faz-las piscar. Ex.: textcolor (RED); // A cor do texto fica vermelha. textbackground(); Usado para adotar cor de fundo nas fontes do C. Ex.: textbackground (BLUE); // A cor do texto fica azul. getche(); Tem a finalidade de interromper momentaneamente a execuo de um programa em C. clrscr(); Tem a funo de limpar a tela, posicionando o cursor no canto superior esquerdo da tela. gotoxy(col,lin); Tem a finalidade de direcionar uma instruo para uma determinada coluna e linha da tela. Ex.: gotoxy (30,10); // Posiciona a prxima instruo na coluna 30 e na linha 10 da tela. Obs. Para utilizar alguns destes comandos deve-se acrescentar a letra c no incio da funo que se deseja usar. Por exemplo: textcolor (RED); cprintf (Esta mensagem aparecer com a cor vermelha na tela); O compilador C tambm utiliza um vasto conjunto de funes aritmticas que facilitam o acesso aos clculos matemticos mais complexos. Para utilizar essas funes, deve-se declarar um outro arquivo cabealho com a biblioteca math.h. A seguir so apresentadas algumas destas funes: cos (x) sin (x) exp (x) log (x) sqrt(x) Etc... retorna o co-seno da varivel x. retorna o seno da varivel x. retorna o valor de e elevado a x. calcula o logaritmo natural de x. calcula a raiz quadrada do valor x.

- 22 -

Exerccios Exerccios
Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para que um usurio, informando a distncia entre dois pontos e o tempo gasto no percurso, tenha como resposta a velocidade obtida no trajeto. Lembre-se que V = S/T. Adotar as unidades: km para a distncia e hora para o tempo. O diferencial deste exerccio, que dever ser retornando um aviso de multa caso a velocidade tenha ultrapassado o limite de 110km/h e uma mensagem de boa conduta em caso contrrio.

1)

2)

Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para ler um nmero inteiro positivo e saber se este nmero par ou mpar. O resultado deve ser apresentado ao usurio do programa.

3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para Efetuar a leitura de
trs valores (variveis A, B e C) e efetuar o clculo da equao de segundo grau, apresentando as duas razes, se para os valores informados for possvel efetuar o referido clculo.

Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para ler duas notas escolares de um aluno e imprimir uma mensagem dizendo que o aluno foi aprovado se o valor da mdia escolar (mdia simples) for maior ou igual a 7. Se o valor da mdia for menor que 7, solicitar que seja informada uma nota de exame. Some ento esta nota de exame com o valor da mdia anterior e encontre a nova mdia. Se esta nova mdia for maior ou igual a 5, apresentar uma mensagem dizendo que o aluno foi aprovado, caso contrrio: reprovado. Apresentar junto com as mensagens o valor da mdia do aluno para qualquer condio.

4)

5) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para efetuar o controle de
entrada de um cinema a partir da informao do valor do ingresso e ainda a idade do cliente. Se a idade for >= 65 ou a idade for < 12 o cliente paga apenas meia entrada, caso contrrio paga inteira.

6) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para que a partir da leitura
de 3 valores, A, B e C, saber se estes valores formam ou no um tringulo. O resultado da pesquisa deve ser informado ao usurio do programa e caso os valores formem um tringulo, dever ser mostrado ao usurio o tipo do tringulo formado.

7)

Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para que a partir da informao da base e altura de um tringulo, seja encontrada e apresentada a rea do mesmo, ( A = ( B * H ) / 2 ). Refine o seu algoritmo, dando respostas especficas caso a base ou a altura sejam informadas como negativas ou zero.

- 23 -

XII XIII Laos DE Repeties Loopings (ITERAES Loopings )


Existem sistemas que tem necessidade de repetir um determinado trecho do programa algumas vezes. Isto pode ser conseguido de duas formas: a primeira, de forma braal, com muito Crtl+C Ctrl+V, escrito o mesmo trecho tantas vezes quanto necessrio, um tanto trabalhoso e sem classe e a segunda forma, muito mais inteligente, utilizando o conceito de looping, que so conhecidos tambm por: laos, iteraes ou repeties. Supondo um programa que deveria executar um determinado trecho de instrues por quatro vezes. Com o conhecimento adquirido at este momento voc s poderia optar pela primeira forma, escrevendo o mesmo tantas vezes quanto for necessrio, no caso quatro vezes. Por exemplo, imagine um programa que pea a leitura de dois valores para as variveis A e B respectivamente. Efetue a adio de um com o outro, implicando o resultado na varivel de resposta R e em seguida apresente o valor do resultado obtido, repetindo esta seqncia por quatro vezes. /* Programa soma de dois nmeros 4 vezes sem looping Autor: Fulano de tal Data: 04/04/1974 Var: A e B para os nmeros somados e R para o resultado a soma. Funcionalidade: o usurio informa 2 nmeros e tem a soma entre eles por 4 vezes consecutivas */ #include <stdio.h> #include <conio.h> main ( ) { int A, B, R; printf (" \n\n Programa soma de 2 nmeros por 4 vezes \n\n "); printf (" Entre com um valor para A: "); scanf("%d", &A); printf (" Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf (" O resultado da soma : %d \n\n\n ", R); printf (" Entre com um valor para A: "); scanf("%d", &A); printf (" Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf (" O resultado da soma : %d \n\n\n ", R); printf (" Entre com um valor para A: "); scanf("%d", &A); printf (" Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf (" O resultado da soma : %d \n\n\n ", R); printf (" Entre com um valor para A: "); scanf("%d", &A); printf (" Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf (" O resultado da soma : %d \n\n\n ", R); getch(); } A vantagem em se utilizar looping que o programa passa a ter um tamanho menor, podendo sua amplitude de processamento ser aumentada sem se alterar o tamanho do cdigo de programao. Desta forma, podem-se determinar repeties com nmeros variados de vezes; como veremos a seguir.

- 24 -

13.1 Iterao Enquanto - Looping com condio no incio: while Esta estrutura caracteriza-se por efetuar um teste lgico no inicio de um looping, verificando se permitido executar o trecho de instrues subordinado a este. A estrutura while tem o seu funcionamento controlado por condio. Desta forma, poder executar um determinado conjunto de instrues enquanto a condio verificada permanecer Verdadeira. No momento em que esta condio se torna Falsa, o processamento da rotina desviado para fora do looping. Sendo a condio Falsa logo no inicio do looping, as instrues contidas no bloco de aes so ignoradas. Caso seja necessrio executar mais de uma instruo para uma condio verdadeira dentro de um looping, estas devero estar mencionadas dentro de um bloco definido com { e }. Desta forma, a instruo while dever ser escrita respeitando a seguinte sintaxe: while (condio verdadeira) { <Bloco de Aes>; } 1 - Exemplo Como exemplo, considere o problema anterior, onde necessrio executar quatro vezes a solicitao de dois nmeros para o clculo da adio. Neste caso, ser necessrio definir um contador para controlar a execuo do programa, e a cada vez que for executado o trecho desejado do programa, este contador dever ser incrementado de mais 1. Observe abaixo os detalhes para a soluo deste problema: Algoritmo Literal 1. Criar uma varivel para servir como contador com valor inicial 1; 2. Enquanto o valor do contador for menor ou igual a 4, processar os passos 3, 4 e 5; 3. Ler os dois valores; 4. Efetuar o clculo, implicando o resultado em R; 5. Apresentar o valor calculado contido na varivel R; 6. Acrescentar o contador com mais 1 unidade; 7. Quando o contador for maior que 4, encerrar o processamento. Programa /* Programa soma de dois nmeros 4 vezes com looping while Autor: Fulano de tal Data: 04/04/1974 Var: A e B para os nmeros somados; R para o resultado e CONTADOR para contar os 4 loopings Funcionalidade: o usurio informa 2 nmeros e tem a soma entre eles por 4 vezes consecutivas */ #include <stdio.h> #include<conio.h> main( ) { int A, B, R, CONTADOR; printf ("\n\n Programa soma de 2 nmeros por 4 vezes \n\n "); CONTADOR=1; while (CONTADOR <= 4) { printf (" \n Entre com um valor para A: "); scanf("%d", &A); printf (" \n Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf (" \n O resultado da soma : %d \n\n ", R); CONTADOR = CONTADOR + 1; } getch( ); }
- 25 -

Alm da utilizao das variveis A, B e R, foi necessrio criar uma terceira varivel, chamada no caso de CONTADOR para controlar a contagem do nmero de vezes que o trecho de programa executado. Assim que o programa inicializado, a varivel contador atribuda com o valor 1 (CONTADOR =1). Em seguida a instruo while (CONTADOR <= 4) efetua a checagem da condio estabelecida, verificando que a condio verdadeira, pois o valor da varivel CONTADOR que neste momento 1, realmente menor que 4 e enquanto for, dever processar o looping. Desta forma, iniciada a execuo da rotina de instrues contidas no looping delimitado com a instruo while. Depois de efetuar a solicitao dos valores, ter processado a operao de adio e exibido o resultado, o programa encontra a linha com a instruo CONTADOR = CONTADOR + 1, indicando o acrscimo de 1 na varivel contador. Observe que a varivel CONTADOR possui neste momento o valor 1 e somado a mais 1 esta passa a ter o valor 2, ou seja, CONTADOR = 1 + 1, resultando em CONTADOR =2. Estando a varivel CONTADOR com o valor 2, o processamento do programa volta para a instruo while (CONTADOR <= 5), que verifica a condio da varivel. Sendo esta condio Verdadeira, ser executada novamente a mesma rotina de instrues. Quando o processamento do programa chegar na instruo CONTADOR = CONTADOR + 1, far com que a varivel CONTADOR passe a possuir o valor 3. Desta forma o programa processar novamente a rotina de instrues, passando o valor de CONTADOR para 4, que ser verificado, e sendo menor ou igual a 4, ser executada mais uma vez a mesma rotina de instrues. Em seguida o valor da varivel CONTADOR passa a ser 5, que resultar para a instruo while uma condio falsa e por conseguinte desviar o processamento para a primeira instruo encontrada aps o bloco definido entre { e }, no caso para o getch() e em seguida para o fim do programa. O uso de contadores na linguagem C tambm pode ser escrito de outras formas. No programa anterior, por ex., a linha CONTADOR = CONTADOR + 1 poderia ter sido escrita como: CONTADOR += 1. Imagine agora uma outra situao, onde o usurio deseja executar a rotina do programa vrias vezes, mas no sabe quantas vezes ao certo dever executar o trecho de programa. Neste caso, no seria conveniente manter um contador para controlar o looping, seria melhor que o programa fizesse ao usurio uma pergunta, solicitando se o mesmo deseja ou no continuar executando o programa. Veja o exemplo: /* Programa soma de dois nmeros indeterminadas vezes com looping while Autor: Fulano de tal Data: 04/04/1974 Var: A e B para os nmeros somados; R para o resultado e RESP para determinar o nmero de loopings Funcionalidade: o usurio informa 2 nmeros e tem a soma entre eles por n vezes consecutivas */ #include <stdio.h> #include <conio.h> main() { int A, B, R; char RESP = 's'; printf ("\n\n Programa soma de 2 nmeros por indeterminadas vezes \n "); while (RESP == 's') { printf (" \n\n Entre com um valor para A: "); scanf("%d", &A); printf (" \n Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf (" \n O resultado da soma : %d \n\n ", R); printf (" \n Deseja continuar? - Tecle (s) ou (n): ); RESP = getche(); } }

- 26 -

No exemplo, o contador foi substitudo pela varivel RESP, que enquanto tiver o seu valor igual a 's', executar o bloco de instrues subordinado a while. Neste caso, o nmero de vezes que a rotina se repetir ser controlado pelo usurio e depender da informao fornecida para a varivel RESP. Observe no programa anterior, o uso de apstrofos na string da condio ao invs de aspas. Na linguagem C, somente so colocadas strings entre aspas quando so usadas com a funo printf(), no caso de uma condio, deve-se fazer uso de apstrofos. Observe que para a entrada da resposta no foi utilizada a funo scanf(), sendo usada a funo getche() que permite que seja feita a leitura de um caractere do teclado sem que se pressione a tecla <ENTER>. Outro detalhe a ser observado na sintaxe da linguagem C o fato de permitir simplificaes na forma de escrita. No programa anterior, iniciada a varivel RESP como sendo do tipo string (char) e antes de iniciar o looping esta varivel atribuda com o valor 's' para dar incio ao processamento do looping. Perceba que aps a inicializao da varivel com o seu tipo, est sendo atribudo simultaneamente o valor da varivel RESP = 's': char RESP = 's'.

Exerccios Exerccios
1) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para escrever na tela de um
computador 20 vezes a frase: Eu serei aprovado.

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para escrever na tela de um
computador todos os nmeros inteiros entre 33 e 50.

3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para escrever na tela de um
computador todos os nmeros inteiros e pares entre 44 e 74.

4) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para escrever na tela de um
computador indeterminadas vezes a frase: Remo Campeo enquanto o usurio do programa assim desejar. Confirme a vontade do usurio com a varivel RESP sendo ou no igual a s. Use o comando: RESP = getche();

5) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para ler a matrcula (RA) de
um aluno e enquanto esta matrcula for diferente de 0 (zero), cadastrar 2 notas e encontrar a mdia entre elas de acordo com a seguinte frmula: M = (N1+N2)/2. Apresentar a mdia encontrada e ainda: se essa mdia for maior ou igual a 5, comunicar que o aluno est aprovado, seno comunicar que este aluno est reprovado.

6) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para controlar a entrada em
uma boate com capacidade para at 300 pessoas. proibida a entrada de menores de 18 anos e o programa encerrado quando o usurio informa 0 (zero) para a idade de um cliente. Deve ser solicitada a idade de cada cliente da boate e se esta idade for menor que 18 anos, deve ser apresentada uma mensagem de entrada proibida para o cliente, porm, se a idade for maior ou igual a 18, o cliente entra na boate e apresentado para o usurio do programa o nmero de clientes que esto naquele momento dentro da boate.

7) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para efetuar a contagem
regressiva de um lanamento de um foguete. O tempo da contagem de 8 segundos. Utilize o comando _sleep(1000) , que faz parte da biblioteca <stdlib.h> , para que cada lao demore um segundo para ser executado. Informe ao usurio, segundo a segundo, o tempo restante para o lanamento do foguete, Quando o foguete for lanado o usurio deve ser informado que o lanamento foi executado. Tente representar o foguete decolando com o uso do comando gotoxy().

- 27 -