Sei sulla pagina 1di 55

+++++++++++ 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 24 24 29 33 36 37 39 45 45 53

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 56 61 67 72 68 84 87

Mdulo III Arquivos Captulo 1 Captulo 2 Arquivo Texto Arquivo Binrio 93 96

Anexo I Exerccios Resolvidos Anexo II Projetos Comentados Captulo 1 Captulo 2 Captulo 3 Captulo 4 Captulo 5 Criptografia Simtrica Criptografia Assimtrica Agenda Locadora Controle de Estoque
-2-

130 137 155 183 212

+++++++++++ 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

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 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

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 SOMA 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 ("\n Programa Soma \n\n "); 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 SOMA, 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: Ax + Bx + C = 0 e a do 2 Delta : B - 4AC . O usurio dever digitar os coeficientes A, B e C respectivamente e lhe ser apresentado o valor do delta.
2

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 * R * ALTURA.
2

- 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 Literal 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 Literal 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 -

Extra: COMANDOS ESPECIAIS DE REFINAMENTO A seguir so apresentados alguns comandos de controle de ambiente de tela que a linguagem C controle oferece ao seu programador. Para us-los deve-se acrescentar a biblioteca conio.h no incio do programa. se 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 textos faz-los 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 fundo 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. superior 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 principalmente no Turbo C++, deve-se acrescentar a letra c no comandos, se 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 conjunto clculos matemticos mais complexos. Para utilizar essas funes, deve se declarar um outro arquivo deve-se cabealho com a biblioteca math.h. A seguir so apresentadas algumas destas funes: cos (x) sin (x) exp (x) log (x) sqrt(x) Etc...
- 22 -

retorna o co 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.

12.2.4 - Estrutura Caso - case Este tipo de estrutura, tem a finalidade de simplificar o uso de condies excessivas de acordo com a utilizao da instruo switch, que possui a sintaxe: switch (VC) { case <opo1> : <Instruo1>; break; case <opo2> : < Instruo2>; break; case <opoN> : < InstruoN>; break; default : <Instruo default>; } onde: <VC> - representa a Varivel de Controle da estrutura; ou seja: a opo que digitada pelo usurio busca comparativos com as opes estabelecidas pelo programador (opo1, opo2...). <opo> - o contedo da varivel a ser verificado; <instruo> - representa a execuo de uma instruo ou rotina do programa. A instruo default (equivalente ao casocontrario do algoritmo) opcional na estrutura. A instruo break tem a finalidade de desviar o processamento para fora do comando switch. Isto necessrio, uma vez que aps o processamento da funo, ele retorna para a primeira instruo aps sua chamada, que neste caso a instruo break. Obs.: Quando so utilizados mais de um comando dentro do Bloco de Instrues, deve-se incluir os delimitadores de bloco { e }. Como exemplo, apresentado abaixo um programa que simula a execuo de um menu. Digite-o e teste-o. #include<stdio.h> #include<conio.h> #include<conio.c> main() { char op; textbackground(WHITE); clrscr(); textcolor(WHITE);textbackground(BLUE); gotoxy(27,2); printf(" ----------------------------------------- "); gotoxy(27,3); printf(" Sistema MENU SIMULADO "); gotoxy(27,4); printf(" ----------------------------------------- "); gotoxy(27,5); printf(" 1 - Inserir "); gotoxy(27,6); printf(" 2 - REMOver "); gotoxy(27,7); printf(" 3 - Consultar "); gotoxy(27,8); printf(" 4 - Sair "); gotoxy(27,9); printf(" Opcao: "); gotoxy(27,10); printf(" ----------------------------------------- "); gotoxy(49,9); op = getche(); gotoxy(31,17); textcolor(YELLOW); switch (op) { case '1' : printf(" Simulando Inclusao! "); break; case '2' : { printf(" Simulando REMOcao! "); break; } case '3' : printf(" Simulando Consulta! "); break; case '4' : printf(" Obrigado por usar o Sistema << MENU SIMULADO >> "); break; default : printf(" Opcao Invalida! Pressione qualquer tecla para continuar! "); } getch(); }
- 23 -

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. 4)
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.

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.

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.

7)

- 24 -

XII XIII Laos DE Repeties (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.
- 25 -

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( ); }
- 26 -

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(); } }

- 27 -

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'. Outro Exemplo Considere como exemplo um programa que efetue o clculo da fatorial de um nmero qualquer. Supondo que este nmero seja 5, o programa dever apresentar o resultado 5! (fatorial de 5) Desta forma, temos que 5! = 5 . 4 . 3. 2 . 1 ou 5! = 1 .2 . 3 . 4. 5, equivalente a 120. O programa dever executar as multiplicaes sucessivamente e acumul-las a fim de possuir o valor 120 aps 5 passos. O nmero de passos dever ser controlado por um contador. Veja a seguir: Algoritmo 1. Inicializar as variveis FATORIAL e CONTADOR com 1; 2. Solicitar o valor de um nmero para calcular a sua fatorial; 3. Multiplicar sucessivamente a varivel FATORIAL pela varivel CONTADOR; 4. Incrementar 1 varivel CONTADOR, efetuando o controle at o limite definido no passo 2; 5. Apresentar ao final o valor obtido. Pelo fato de se ter que efetuar o clculo de uma fatorial de um nmero qualquer (N!), isto implica que o contador dever variar de 1 a N, por este motivo dever ser a varivel CONTADOR inicializada com valor 1. Pelo fato de a varivel FATORIAL possuir ao final o resultado do clculo da fatorial pretendida (atravs de uma multiplicao sucessiva), esta dever ser inicializada com valor 1. Se esta for inicializada com zero, no existir resultado final, pois qualquer valor multiplicado por zero resulta zero. Observe dentro do looping a indicao de dois contadores o primeiro funcionando como um acumulador, pois este que ter no final o valor do resultado da fatorial, e o segundo sendo utilizado para controlar a execuo do looping e ser a base para o clculo do acumulador. Programa /* Looping do tipo while para Fatorial */ #include <stdio.h> #include <conio.h> main() { int N, CONTADOR = 1 ; long FATORIAL = 1; printf("\n Programa Fatorial \n\n\t Fatorial de que numero:); scanf(%d ,&N); while (CONTADOR <= N) { FATORIAL *= CONTADOR; CONTADOR += 1; } printf("\n fatorial de %d equivale %d", N, FATORIAL); getch( ); }
- 28 -

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(). 8) Inserir em todos os programas anteriores, a formatao de cores de texto textcolor ( ) e cores de fundo textbackground ( ) e ainda refinar a esttica com o uso do comando gotoxy(C,L).

- 29 -

13.2 - Looping com condio no fim: do...while Esta estrutura caracteriza-se por efetuar um teste lgico no final de um looping, sendo parecida com a estrutura while. Seu funcionamento controlado tambm por deciso. Este tipo de looping ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Diferente da estrutura while que executa somente um conjunto de instrues se e enquanto a condio verdadeira. Desta forma, a iterao do...while ir processar um conjunto de instrues no mnimo uma vez at que a condio se torne Falsa. A sintaxe da instruo do...while a seguinte: do { <instruo1 >; <instruo2 >; <instruo3 >; <instruo N >; } while <(condio)>; 1 - Exemplo Para exemplificar a utilizao deste tipo de estrutura de looping, ser considerado o exemplo visto na iterao while: "o programa dever pedir a leitura de dois valores para as variveis A e B, efetuar a adio dos dois valores e implicar o resultado na varivel de resposta R e em seguida apresentar o valor do resultado obtido, repetindo esta seqncia por cinco vezes".

Algoritmo Literal 1. Criar uma varivel para servir como contador com valor inicial 1; 2. Ler os valores; 3. Efetuar o clculo, implicando o resultado em R; 4. Apresentar o valor calculado contido na varivel R; 5. Acrescentar o contador com mais 1; 6. Repetir os passos 2, 3, 4 e 5 at que o contador seja menor ou igual a 5. Programa /* Looping do tipo Do...While */ #include <stdio.h> #include <conio.h> main() { int A, B, R, I =1; printf ("\n Programa 5 Repeties \n"); do { printf ("\n\n\t Entre um valor para A: "); scanf ("%d", &A); printf ("\t Entre um valor para B: "); scanf ("%d", &B); R = A + B; printf ("\n O resultado %d corresponde a: %d", I, R); I=I+1; } while ( I <= 5 ) ; getch(); } Assim que o programa executado, a varivel contador I inicializada com o valor 1 ( I=1). Em seguida a iterao executada at que a condio estabelecida pela instruo do...while ( I <= 5) seja falsa; ou seja: enquanto a condio for verdadeira.
- 30 -

A seguir, apresentado o exemplo em que no se utiliza o contador como forma de controle de execuo do nmero de vezes de uma determinada rotina em uma estrutura de repetio. Considere que ser o usurio que encerrar o processamento segundo a sua vontade. Algoritmo Literal 1. Criar uma varivel para ser utilizada como resposta; 2. Ler os valores; 3. Efetuar o clculo, implicando o resultado em R; 4. Apresentar o valor calculado contido na varivel R 5. Perguntar ao usurio se deseja continuar executando o programa; 6. Repetir os passos 2, 3, 4 e 5 at que a resposta do usurio seja diferente de s. Programa /* Looping do tipo Do...While Verso 2 */ #include <stdio.h> #include <conio.h> #include <conio.c> main() { int A, B, R; char RESP = 's'; do { clrscr(); printf ("\n\n Programa Soma \n\n\t Entre com um valor para A: "); scanf("%d", &A); printf ("\n\t Entre com um valor para B: "); scanf("%d", &B); R = A + B; printf ("\n O resultado corresponde da soma : %d", R); printf ("\n\n\t\t Deseja continuar? - Tecle (s) ou (n):); RESP = getche(); } while (RESP == 's'); } 2-. Exemplo Com do...while, apresentado a seguir o programa para clculo da fatorial de um nmero qualquer. Programa /* Looping do tipo Do...While para Fatorial */ #include <stdio.h> #include <conio.h> main() { int CONTADOR, N; long FATORIAL = 1; CONTADOR = 1; printf ("\n Programa Fatorial \n"); printf ("\n Fatorial de que numero:); scanf (%d,&N); do { FATORIAL = FATORIAL * CONTADOR; CONTADOR = CONTADOR + 1; } while (CONTADOR <= N); printf ("\n Fatorial de %d equivale a %d", N, FATORIAL); getch(); }

- 31 -

Exerccios Exerccios
1) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para escrever na tela de um
computador todos os nmeros inteiros de 1 at 100 com o auxlio da iterao do...while.

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para encontrar a mdia entre duas notas de acordo com a frmula: M=(N1+N2)/2. O programa dever ser efetuado de acordo com a digitao de um RA que dever ser diferente de zero. Diferencial: Cada nota digitada no programa deve por obrigao estar compreendida entre zero e dez. Apresentar ao usurio, a mdia e a situao do aluno, sendo aprovado caso a mdia seja maior ou igual a 5 e reprovado caso contrrio. 3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular a soma dos
salrios de N funcionrios de uma empresa durante um ano, de janeiro a dezembro, enquanto o nome do funcionrio for diferente de Sair, apresentando no final, os valores totalizados no ano corrente (POR FUNCIONRIO). Utilize as estruturas while e do..while no desenvolvimento de seu programa.

4) Uma

loja atacadista deseja saber quanto arrecada em: 1- Vendas por Balco, 2- Vendas no Telefone, e ainda saber o total de vendas acumuladas e por setor em 3- Totalizao. Considerando-se que ser lido o cdigo (1 ou 2) e o valor da venda, Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para a resoluo do problema de acordo com o menu ao lado. Ateno: no permita que sejam digitados valores no positivos para as vendas. Force o usurio a informar corretamente.

5) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular o total gasto
com Combustvel em um automvel flex, informando os litros consumidos em cada abastecimento do veculo, de acordo com o menu ao lado. A cada abastecimento o usurio escolher o combustvel (por cdigos: 1- lcool ou 2- Gasolina) e digitar o volume, em litros, do abastecimento (obrigar o usurio a informar o volume sempre maior que zero e menor que o limite do tanque, que de 40 litros). Os gastos ento so computados de acordo com os seguintes valores por litro: lcool: R$ 1,09 e Gasolina: R$ 2,39. A qualquer momento, o usurio poder solicitar a apresentao dos valores gastos (em R$) com o auxlio da opo (3-Gastos) no menu, onde so apresentados os gastos individuais por combustvel e ainda o valor total gasto em abastecimentos (lcool + gasolina) at o momento da solicitao. O programa encerrado quando o usurio escolher no menu a opo 4-Sair. Utilize as iteraes (e estruturas em geral) mais adequadas para cada situao.

6) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular (com o auxlio
de um menu) o total gasto com DDD por operadora (1-Telefnica, 2-Embratel), saindo do sistema somente quando a opo (4-Sair) for selecionada. A cada ligao interurbana o usurio escolher a operadora (por cdigos: 1 ou 2) e lanar o tempo gasto, em minutos, da conversa telefnica (no permitir a digitao de tempo menor que zero), que sero computados de acordo com os seguintes valores por minuto: Telefnica: R$ 0,15 e Embratel: R$ 0,21. A qualquer momento, o usurio poder solicitar a apresentao dos valores gastos com o auxlio da opo (3-Gastos) no menu, onde so apresentados os gastos individuais por operadora e ainda o valor total gasto em interurbanos at o momento da solicitao. Utilize as iteraes (e estruturas em geral) mais adequadas para cada situao.

- 32 -

13.3 - Looping finito: For Voc j aprendeu duas formas de elaborar loopings. Com as tcnicas apresentadas possvel elaborar rotinas que efetuam a execuo de um looping, um determinado nmero de vezes, atravs da utilizao de um contador (variveis que executam um determinado nmero de vezes) ou mesmo por uma varivel que aguarde a resposta do usurio. Independentemente da forma de tratamento, esta varivel denominada varivel de controle. Existe uma outra forma que visa facilitar o uso de contadores finitos, sem fazer uso das estruturas anteriores. Desta forma, os looping com while e do...while passam a ser utilizados em situaes onde 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 processados atravs do looping do tipo: for. Este tipo de looping tem seu funcionamento controlado por uma varivel de controle do tipo contador, podendo ser crescente ou decrescente, tendo como sintaxe:

for (<incio>; <fim>; <incremento>) <instrues>;

Caso venha a existir mais de uma instruo para ser executada dentro do looping, estas devero estar inseridas em um bloco { e }:

for (<incio>; <fim>; <incremento>) { <instrues l>; <instrues 2>; <instrues N>; } onde: <inicio> <fim> <incremento> uma instruo de atribuio com o valor inicial do lao uma instruo de condio com o valor final do lao expresso com o incremento do lao

Exemplo 1 O exemplo a seguir, escrever na tela os valores 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10. Observe a indicao na funo for() dos trs argumentos necessrios para o seu funcionamento. O primeiro argumento inicializa a varivel contador com 1, o segundo argumento verifica se a varivel atingiu o valor limite e o terceiro argumento se encarrega de executar o incremento de 1 em 1 na varivel em uso. /* Looping crescente de 1 em 1 */ #include <stdio.h> main( ) { int I ; for (I = 1; I <= 10; I++) printf ("\n Nmero = %d", I ) ; }

- 33 -

Exemplo 2 O exemplo a seguir, escrever na tela os valores 10, 9, 8, 7, 6, 5, 4, 3, 2 e 1. O primeiro argumento inicializa a varivel contador com 10, o segundo argumento verifica se a varivel atingiu o valor limite e o terceiro argumento se encarrega de executar o decremento de 1 em 1 na varivel em uso. /* Looping decrescente de 1 em 1 * #include <stdio.h> main( ) { int I; for (I =10; I >= 1; I--) printf ("\n Nmero = %d", I ) ; }

Exemplo 3 O exemplo a seguir, escrever na tela os valores 1, 3, 5, 7 e 9. O primeiro argumento inicializa a varivel contador com 1, o segundo argumento verifica se a varivel atingiu o valor limite e o terceiro argumento se encarrega de executar o incremento de 2 em 2 na varivel em uso. /* Looping crescente de 2 em 2 */ #include <stdio.h> main( ) { int I; for (I = 1; I<=9; I+=2) printf ("\n Nmero = %d", I ); }

Exemplo 4 (Completo e pronto para ser digitado com getch() e conio.h) Ser considerado agora como exemplo, um programa que dever pedir a leitura de dois valores para as variveis A e B, efetuar a adio dos dois valores e implicar o resultado na varivel de resposta R e em seguida apresentar o valor do resultado obtido, repetindo esta seqncia por cinco vezes. /* Looping do tipo For */ #include <stdio.h> #Include <conio.h> main( ) { int A, B, R, I ; printf ("\n\t Programa 5 Somas \n\n ") ; for(I = 1; I <= 5; I++) { 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\t O resultado corresponde a: %d", R) ; } getch() ; }

- 34 -

Exerccios Exerccios
1) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para escrever na tela de um
computador todos os nmeros inteiros de 1 at 100 com o auxlio da iterao for.

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para apresentar todos os
nmeros inteiros pares de 2 at 2000 (incluindo ambos), com o auxlio da iterao for.

3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, que mostre todos os
nmeros mltiplos de 3; entre 1 e 300 inclusive.

4) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para efetuar a contagem
regressiva de um lanamento de um foguete com o auxlio da iterao for. 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().

5) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, que leia um nmero N
(obrigatoriamente positivo), mostre todos os nmeros inteiros entre 1 e N (inclusive) e a mdia aritmtica dos nmeros mostrados.

6) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular o gasto total
na compra de um automvel em dlar, em 24 prestaes fixas + variao cambial. Adote o dlar paralelo valendo R$ 2,00 e leve em considerao que durante os 24 meses de prestao, o dlar aumentar 1 centavo ao ms (esta a variao cambial). O programa dever informar ao usurio: a) quanto ele gastar em cada ms em Reais (R$) na prestao do carro e b) quanto ele gastar no final das 24 prestaes tambm em Real. Ateno: O usurio dever informar, apenas uma vez, o valor fixo em dlar contido no carn de 24 prestaes.

7) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular o total gasto
com Pedgio durante um ano inteiro (12 meses, de janeiro (1) a dezembro (12) utilize iterao for neste momento). O usurio dever digitar somente quanto gastou em cada ms (no permita que sejam aceitos valores negativos utilize iterao do...while neste momento). Dever ser apresentado mensalmente o total parcial acumulado gasto at o ms corrente. No final do ano, aps o ltimo dos 12 valores ser digitado, dever ser apresentado o total gasto no ano inteiro e ainda uma mensagem indicando: gasto nulo (se o total for igual a 0), moderado (se o total for menor que R$300,00), ou excessivo (se o total for maior ou igual que R$300,00).

- 35 -

XIV XIV

Estruturas Homogneas

Tem a caracterstica de permitir o agrupamento de vrias informaes do mesmo tipo de dado em uma nica varivel, em formato de Matriz, criando um Novo Tipo de Dado Construdo com base em um Tipo de Dado Primitivo (int, float, char...) ou com base em outro Tipo de Dado previamente Construdo (como uma Matriz de Matriz por exemplo). 14.1 - MATRIZES COM UMA DIMENSO (VETORES)

Este tipo de estrutura caracteriza uma matriz unidimensional. Sua utilizao mais comum est vinculada criao de tabelas. Caracteriza-se por ser definida uma nica varivel dimensionada com um determinado tamanho. A dimenso de uma matriz constituda por constantes inteiras e positivas. Os nomes dados s matrizes seguem as mesmas regras de nomes utilizados em variveis simples. Exemplo: Calcular e apresentar a mdia geral de uma turma de 8 alunos. Desta forma, ser necessrio somar todas as mdias e dividi-las por 8. Da mdia de cada aluno, efetuado o clculo da mdia da turma. De maneira equivocada, SEM usar matrizes, para representar a mdia do primeiro aluno utilizada a varivel MD1, para o segundo MD2 e assim por diante. Levando em considerao que j se tem as mdias de cada aluno (Ex.: MD1=4.5, MD2=6.5, MD3=8.0, MD4=3.5, MD5=6.0, MD6=7.0, MD7=6.5, MD8=6.0) basta ento som-las e dividi-las pela quantidade de alunos, resultando na mdia da turma.

/* Clculo de Mdia Escolar */ #include <stdio.h> #include <conio.h> main() { float MD1, MD2, MD3,MD4, MD5, MD6, MD7, MD8; float SOMA, MEDIA; SOMA = 0; printf ("Programa 8 Mdias); printf ("Informe Mdia 1:); scanf ("%f,&MD1); printf ("Informe Mdia 2:); scanf ("%f,&MD2); printf ("Informe Mdia 3:); scanf ("%f,&MD3); printf ("Informe Mdia 4:); scanf ("%f,&MD4); printf ("Informe Mdia 5:); scanf ("%f,&MD5); printf ("Informe Mdia 6:); scanf ("%f,&MD6); printf ("Informe Mdia 7:); scanf ("%f,&MD7); printf ("Informe Mdia 8:); scanf ("%f,&MD8); SOMA = MD1 + MD2 + MD3 + MD4 + MD5 + MD6 + MD7 + MD8; MEDIA = SOMA / 8; printf ("A Mdia : %.2f", MEDIA); getch(); } Note que para receber a mdia foram utilizadas 8 variveis. Com a tcnica de matrizes poder ser utilizada apenas uma varivel com a capacidade de armazenar os 8 valores resultando em um programa muito mais eficiente e inteligente.

- 36 -

14.1.1

Operaes com Matrizes Unidimensionais (Vetor)

Uma matriz de uma dimenso ou vetor representada por seu nome, tamanho (dimenso) entre colchetes e seu tipo, tendo assim, a seguinte sintaxe: tipo MATRIZ [dimenso]; onde: <tipo> <matriz> <dimenso> O tipo de dado a ser guardado na matriz; O nome atribudo matriz; O tamanho da matriz ,em nmero de elementos

Uma varivel somente pode conter um valor por vez. No caso das matrizes, estas podero armazenar mais de um valor por vez, pois so dimensionadas exatamente para este fim. Lembrando que a manipulao dos elementos de uma matriz ocorrer 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 dos 8 alunos, possvel ter ento uma nica varivel contendo todos os valores das 8 notas. Isto representado, por exemplo, da seguinte forma: MD[1] = 4.5, MD[2] = 6.5, MD[3] = 8.0, MD[4] = 3.5, MD[5] = 6.0, MD[6] = 7.0, MD[7] = 6.5, MD[8] = 6.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 onde o elemento est armazenado, ou seja, a mdia do aluno. Para uma tabela de 8 elementos, os ndices so numerados de 0 at 7, ou de 1 at 8, etc... Tanto a entrada quanto a sada de dados operada com uma matriz, processada passo a passo, um elemento por vez. Estes processos devem ser executados com o auxilio de uma iterao.

1 - Exemplo Considerando a proposta anterior, segue o programa que executa a leitura da mdia de cada aluno, o clculo da mdia da sala e em seguida a apresentao da mdia geral UTILIZANDO Vetor. /* Clculo de Mdia para 8 alunos COM Vetor */ #include <stdio.h> #include <conio.h> main( ) { float MD[8]; float MEDIA, SOMA = 0; int I; printf("\n Clculo de Mdia Escolar \n \ n"); for (I = 1; I <= 8; I++) { printf("Informe a nota %d: ", I); scanf("%f", &MD[I]); SOMA = SOMA + MD[I]; } MEDIA = SOMA / 8; printf("\n A mdia da turma : %.2f \n", MEDIA); getch( ); } O programa em questo faz referncia rea de declarao de variveis, a matriz MD[8], onde definido o nmero de elementos, no caso 8 elementos, iniciando-se, neste caso especfico, com ndice 1 sendo percorrido de um em um (I++) at o ndice 8.

- 37 -

2- Exemplo Desenvolver um programa que efetue a leitura de 8 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 os contedos das duas matrizes. Este exemplo demonstra como fazer o tratamento da condio do ndice. Algoritmo Literal 1. Iniciar o contador de ndice, varivel I como 1 em um contador at 8; 2. Ler os 8 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 os contedos das duas matrizes. Programa /* Checa ndice: Par ou mpar */ #include <stdio.h> #include <conio.h> main() { int A[8], B[8]; int I; printf("\t Programa dois vetores Par ou mpar \n \n"); /* Entrada de dados */ for (I = 1; I<= 8; I++) { printf("Informe um valor para o elemento A[%d]: ", I); scanf("%d", &A[I]); } /* Checando se ndice Par / mpar */ for (I=1; I<=8; I++) { if ( I % 2 == 0 ) /* % tem o mesmo sentido do mod em Algoritmos */ B[I] = A[I] * 5; else B[I] = A[I] + 5; } /* Sada na tela das matrizes */ for (I=1; I<=8; I++) printf (\n A[%d] = %d \t B[%d] = %d, I, A[I], I, B[I] ); getch(); }

Exerccios Exerccios
1) Desenvolver
um programa no Dev C++, completo e voltado ao usurio final, para Ler duas matrizes unidimensionais (vetores) A e B com 20 elementos cada. Construir um vetor C, onde cada elemento de C a soma dos elementos correspondentes aos ndices dos vetores A com B.

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para Ler 15 elementos de uma matriz A unidimensional (vetor). Construir um vetor B de mesmo tipo, observando a seguinte lei de formao: Todo elemento do vetor B dever ser o quadrado do elemento de A correspondente. 3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para cadastrar 2 notas de provas (float) (obrigatoriamente entre 0 e 10) em um vetor e apresentar a mdia encontrada. Em seguida, apresentar em ordem crescente as 2 notas cadastradas no vetor, indicando em qual prova o aluno foi melhor.
- 38 -

14.2 - MATRIZES COM MAIS DE UMA DIMENSO

Com o conhecimento adquirido at agora, voc teria condies suficientes para elaborar um programa que efetuasse a leitura das notas de n alunos, o clculo da mdia de cada aluno e no final apresentar a mdia do grupo, utilizando-se apenas de matrizes unidimensionais. Porm, h de se considerar que o trabalho seria grande, uma vez que se necessitaria manter um controle de cada ndice em cada matriz para cada aluno. Para facilitar o trabalho com este tipo de estrutura, so 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 momentos em que se necessite trabalhar com um nmero maior de dimenses, porm estas sero fceis de ser utilizadas se voc dominar bem a utilizao de uma matriz com duas dimenses. Em matrizes de mais de uma dimenso, os seus elementos sero tambm manipulados de forma individualizada, sendo a referncia feita sempre atravs de dois ndices: o primeiro para indicar a linha e o segundo para indicar a coluna. Desta forma, TABELA[2][3] indica que est sendo feita uma referncia ao elemento armazenado na linha 2 coluna 3. Pode-se considerar que uma matriz com mais de uma dimenso tambm um vetor, sendo vlido para este tipo de matriz tudo o que j foi utilizado anteriormente para as matrizes de uma dimenso. Na realidade, a linguagem C no trabalha com o conceito de matrizes que tenham mais de uma dimenso, mas permite a simulao perfeita deste efeito. isto ocorre pelo fato desta linguagem trabalhar com o conceito de matrizes de matrizes, ou seja, uma matriz considerada de duas dimenses na verdade uma matriz onde cada um de seus elementos por sua vez uma outra matriz.

14.2.1

Operaes com Matrizes de duas Dimenses

Uma matriz de duas dimenses estar sempre fazendo meno a linhas e colunas e ser representada por seu nome e seu tamanho (dimenso) entre colchetes. Desta forma, seria uma matriz de duas dimenses TABELA[8][5], onde seu nome TABELA, possuindo um tamanho de 8 linhas e 5 colunas, ou seja, uma matriz de 8 por 5 (8 x 5). Isto significa que podero ser armazenados em TABELA at 40 elementos. A tabela a seguir apresenta a matriz TABELA com a indicao dos endereos (posies) que podero ser utilizados para armazenamento de seus elementos.

Matriz: TABELA 11 21 31 41 51 61 71 81 12 22 32 42 52 62 72 82 13 23 33 43 53 63 73 83 14 24 34 44 54 64 74 84 15 25 35 45 55 65 75 85

Uma matriz de duas dimenses atribuda de forma semelhante atribuio de uma matriz de uma dimenso, sendo representada pelo seu nome, tamanho (dimenso de linhas e colunas) entre colchetes e seu tipo, tendo assim, a seguinte sintaxe: tipo MATRIZ [dimenso linha] [dimenso coluna]; onde: <tipo> <matriz> <dimenso linha> <dimenso coluna> O tipo de dado homogneo a ser guardado na matriz O nome atribudo a matriz. O tamanho da matriz, em nmero de linhas; O tamanho da matriz, em nmero de colunas;
- 39 -

Para exemplificar a utilizao de matrizes deste tipo, considere o programa de entrada e sada das notas escolares. A leitura e escrita de uma matriz de duas dimenses, assim como as matrizes de uma dimenso, so processadas passo a passo. Considerando a manipulao de 2 notas de 5 alunos, a tabela em questo armazenar 10 elementos. Um detalhe a ser considerado a utilizao de duas variveis para controlar os dois ndices de posicionamento de dados na tabela, uma para cada dimenso. /* 2 notas de 5 Alunos */ #include <stdio.h> #include <conio.h> main() { float MD[5] [2], NUMERO; int I, J; printf("\n Leitura e Apresentao de 2 notas de 5 Alunos \n"); /* Entrada das notas */ for (I= 1; I<= 5; I++) { printf("\n Informe as notas do Aluno %d: \n\n,I); for (J= 1; J<= 2; J++) { printf("\t Nota %d: ", J); scanf("%f", &NUMERO); MD[I] [J] = NUMERO; } } /* sada das notas */ printf("\n\n Apresentao das notas dos 5 Alunos \n"); for (I= 1; I<= 5; I++) { printf("\n Notas do aluno %d: ", I); for (J= 1; J<= 2; J++) printf(" Nota %d: %.2f \t ", J, MD[I][J]); } getch(); } Note que em um exemplo anterior foi utilizada a varivel I para controlar as posies dos elementos dentro da matriz, ou seja, a posio em nvel de linha. Neste exemplo, a varivel I continua tendo o mesmo efeito e a segunda varivel, a J, est controlando a posio da coluna. Analisando o programa, temos a inicializao das variveis I e J como 1 atravs dos laos for, ou seja, a leitura ser efetuada na primeira linha da primeira coluna. Em seguida iniciado o looping da varivel I para controlar a posio em relao s linhas e depois iniciado o looping da varivel J para controlar a posio em relao s colunas. Veja que ao serem iniciados os valores para o preenchimento da matriz, estes so colocados na posio MD[1,1] (primeira linha e primeira coluna), lembrando que o primeiro valor dentro dos colchetes representa a linha e o segundo representa a coluna. Assim sendo, ser ento digitado para o primeiro aluno a sua primeira nota. Depois incrementado mais 1 em relao a coluna, sendo colocada para a entrada a posio MD[1,2] (primeira linha e segunda coluna) da matriz. Desta forma, ser digitado para o primeiro aluno a sua segunda nota. Em seguida o contador da varivel i ser incrementado com mais 1, tornando-se 2. Ser ento inicializado novamente o contador J em 1, permitindo assim, que seja digitado um novo dado na posio MD[2,1] e assim sucessivamente at o preenchimento total da matriz.

- 40 -

Exerccios Exerccios
1) Desenvolver
um programa no Dev C++, completo e voltado ao usurio final, para Ler duas matrizes bidimensionais A e B, cada uma com 5 linhas e 3 colunas de elementos inteiros. Construir uma matriz S de mesma dimenso, onde S formada pela soma dos elementos da matriz A com os elementos da matriz B. Apresentar os valores da matriz S com a diagramao correta de uma matriz bidimensional usando a funo gotoxy( ).

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para preencher uma matriz de 3 linhas e 4 colunas com P para as colunas pares e I para as colunas mpares. Apresentar esta matriz formada ao usurio com a diagramao correta de uma matriz bidimensional usando a funo gotoxy( ). O usurio, neste caso, apenas executa o programa e visualiza a formao correta da matriz.

3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para Ler uma matriz A quadrada de 25 elementos inteiros na ntegra e em seguida apresentar os valores da matriz formada com a diagramao correta de uma matriz bidimensional usando a funo gotoxy( ). Apresentar tambm a soma dos elementos da diagonal principal da matriz digitada.

4) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para Ler uma matriz A de uma dimenso com 5 elementos inteiros. Construir uma matriz B de duas dimenses com 3 colunas e 5 linhas, onde a primeira coluna da matriz B formada pelos elementos da matriz A somados com 5 (+5), a segunda coluna formada pelos elementos da matriz A subtrados de 1 (-1) e a terceira e ltima coluna dever ser formada pelo quadrado (2) dos elementos correspondentes da matriz A. Apresentar a matriz formada ao usurio do programa. Apresentar os valores da matriz B com a diagramao correta de uma matriz bidimensional usando a funo gotoxy( ) seguindo o modelo abaixo.

- 41 -

EXTRA
Trabalhando com STRINGS um dos mais importantes tipos de dados utilizados em uma linguagem de programao, pois usado para a operao e armazenamento de textos. E na linguagem C, este tipo de dado recebe um tratamento diferente de outras linguagens, pois caracteriza-se por ser um vetor (matriz unidimensional) do tipo char o qual terminado com o caractere null \0". J sabido que uma matriz o conjunto de dados de mesmo tipo, armazenado em uma mesma varivel e controlado por um ndice. Em C, o tipo string um conjunto de elementos do tipo char. Desta forma, possvel acessar qualquer um dos elementos da referida matriz. Em alguns programas anteriores, voc j trabalhou com string, por exemplo no programa anterior: printf("\n Leitura e Apresentao de 2 notas de 5 Alunos \n"); a mensagem: Leitura e Apresentao de 2 notas de 5 Alunos, uma string considerada constante pelo fato de estar escrita entre aspas. O caractere null \0" tambm est presente no final da string, apesar de no ser visvel, sendo este de suma importncia, pois a nica forma que as funes possuem de identificar o final de uma string. Ser estudado neste momento, como trabalhar com strings variveis, as quais sero fornecidas via teclado, como: um nome, um endereo, um nmero de telefone, etc. Estas strings inicialmente sero entradas para processamento atravs da funo scanf() com a utilizao do formato %s. A seguir, dado um exemplo com um programa que pede o nome e o sobrenome, faz uma saudao e apresenta o nome completo. /* Pede dados pessoais */ #include <stdio.h> #include <conio.h> main() { char NOME[10], SB_NOME[15]; printf("Digite o seu nome ...........: "); scanf ("%s", NOME); printf("Digite o seu sobrenome ..: "); scanf ("%s", SB_NOME); printf("Nome completo: %s %s", NOME, SB_NOME); getch(); } O exemplo anterior est fazendo uso de duas matrizes do tipo string: uma sendo NOME com a capacidade de armazenar at 10 caracteres e a outra sendo SB_NOME com a capacidade de at 15 caracteres. As instrues scanf("%s", NOME); e scanf("%s", SB_NOME); fazem a leitura de cada caractere digitado e os armazenam seqencialmente a partir do endereo de NOME e SB_NOME. O processo encerrado quando um caractere branco encontrado na string. Neste momento, o caractere'"\0" colocado automaticamente nesta posio. Desta forma, necessrio tomar cuidado com o tamanho da matriz do tipo string. Se a matriz possui declarado um valor de tamanho como 10, voc s poder usar 9, deixando pelo menos uma posio livre para o caractere \0. Outro detalhe a ser observado a ausncia do operador &, precedendo o segundo argumento das instrues de entrada com a funo scanf(). Quando se utilizam matrizes, este operador no pode ser usado, pois o nome de uma matriz o seu endereo inicial. Desta forma, a expresso scanf("%s", NOME); equivalente a scanf("%s", &NOME[0]);.

- 42 -

Operaes Bsicas com string Por exemplo, se for digitado para NOME a string Dennys e em seguida para SB_NOME for digitado a string Noronha, ser apresentada a mensagem: Nome Completo: Dennys Noronha. Porm, se para NOME for digitado Dennys Peixoto , o programa no ir solicitar o sobrenome, pois na string Dennys Peixoto existe um espao em branco entre Dennys e Peixoto. Desta forma, a string Dennys fica armazenada em NOME e a string Peixoto fica armazenada em SB_NOME. Este efeito indesejvel ocorre pelo fato da funo scanf() ser bastante limitada para a leitura de string. Para resolver este problema podemos usar uma outra funo de entrada de dados: gets (), pois o propsito desta funo efetuar leitura de dados do tipo string fornecidos via teclado. A funo gets() aceita caracteres em branco no meio da string, colocando o caractere de controle "\0" apenas quando for pressionada a tecla <ENTER>. Observe o exemplo a seguir: /* Pede dados pessoais com funo gets() */ #include <stdio.h> #include<conio.h> main() { char NOME[20], SB_NOME[20]; printf("Digite o seu nome ..............: "); gets (NOME); printf("Digite o seu sobrenome ......: "); gets (SB_NOME); printf("Nome Completo: %s %s", NOME, SB_NOME); getch(); } Alm do uso da funo gets(), foi tomado o cuidado de aumentar o tamanho das matrizes, para assim evitar qualquer corte na string. Assim como a funo scanf() foi substituda pela funo gets(), a funo printf() pode ser substituda pela funo puts() que tem com principal caracterstica o fato de permitir a impresso de uma nica string por vez, alm de pular sozinha uma linha aps a impresso de uma string. Deve-se considerar que a funo puts() no ser usada para todas as aplicaes, pois esta somente aceita um argumento, a varivel que ser impressa, podendo causar alguns efeitos visuais distorcidos e incmodos. Veja a seguir o exemplo: /* Pede dados pessoais com gets() e imprime com puts() */ #include <stdio.h> #include <conio.h> main() { char NOME[20], SB_NOME[20]; puts("Digite o seu nome .................: "); gets(NOME); puts("Digite o seu sobrenome .......: "); gets(SB_NOME); printf("Nome Completo: %s %s", NOME, SB_NOME); getch(); } Observe, ao executar o exemplo, que ao ser encontrada a instruo puts("Digite o seu nome ...: ");, o cursor posicionado na linha seguinte, onde ser fornecido o respectivo dado. Note tambm que a apresentao do nome completo est sendo feita com a funo printf().

- 43 -

Cadeia de Caracteres Uma cadeia de caracteres uma string e existe um tratamento especfico para trabalhar com esse tipo de dado na Linguagem C; comeando pela insero de uma nova biblioteca possibilitando o uso de suas principais funes: #include <string.h> Na sintaxe de criao deste tipo de dado em C++, j indicado alm do nome da varivel, o tipo e o tamanho mximo da cadeia: char Cadeia[tam] ; A seguir so apresentadas algumas funes para trabalhar com tratamento de Strings na Linguagem C++ : scanf gets printf puts strcpy strncpy strcat strcmp strlwr strupr strchr strncat strstr strncmp strlen L um texto at o primeiro espao em branco L um texto at que seja pressionado enter Escreve uma seqncia de caracteres Escreve uma seqncia de caracteres copia uma string em outra copia os N primeiros caracteres de SO em SD Concatena uma string S2 em S1 Compara duas strings Transforma uma string toda em letras minsculas Transforma uma string toda em letras maisculas Retorna a ocorrncia de um caracter qualquer na string Concatena os N primeiros caracteres de S2 em S1 Procura a ocorrncia da substring S2 em S1 Compara os N primeiros caracteres de S1 e S2 Retorna o tamanho de uma string scanf ( %s , S1 ) ; gets ( S1 ) ; printf ( %s , S1 ) ; puts ( S1 ) ; strcpy ( SDest , SOrig ) ; strncpy ( SDest , SOrig , 4 ) ; strcat (S1 , S2 ) ; strcmp ( S1 , S2 ) ; strlwr ( S1 ) ; strupr ( S1 ) ; strchr ( S1 , c ) ; strncat ( S1 , S2 , 4 ) ; strstr ( S1 , S2 ) ; strncmp ( S1 , S2 , 7 ) ; strlen ( S1 ) ;

Exerccios Exerccios
1) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para calcular o
comprimento de uma cadeia de caracteres qualquer, dada esta cadeia pelo usurio do programa em forma de uma frase com at 40 caracteres. #include <stdio.h> #include <conio.h> #include <string.h> main() { char frase[40]; int comp; printf( "\t Programa Comprimento de uma Cadeia de Caracteres \n\n" ); printf( "Digite uma frase qualquer: " ); gets(frase); comp = strlen(frase); printf( "\n\nEsta frase possui %d caracteres", comp ); getch( ); }

2) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para solicitar uma senha (char) de um usurio e em seguida verificar se a confirmao da senha igual a senha digitada anteriormente. Quando a confirmao for igual a primeira senha digitada, diga que a senha est OK, caso contrrio faa com que o usurio informe a senha e a confirmao da senha novamente. Utilize a estrutura do...while. O nmero mximo de tentativas deve ser igual a 3.
- 44 -

XV

Estruturas Heterogneas

Para utilizar diferentes tipos de dados em uma mesma varivel, torna-se necessrio, como mecanismo para construo de novos tipos de dados, o uso da estrutura Registro (struct), pois s assim possvel operar com agregados heterogneos. 15.1 - REGISTROS (struct)

A estrutura heterognea da linguagem C chamada de registro em outras linguagens, enquanto os membros da estrutura so chamados de campos. Na verdade, o conceito o mesmo, o que muda a nomenclatura, pois uma estrutura o conjunto de uma ou mais variveis, geralmente de tipos diferentes, colocadas sob um mesmo nome. Para tanto, considere que seja informado para um funcionrio: seu cdigo, seu nome e seu salrio, conforme diagrama apresentado abaixo. So trs variveis com tipos de dados distintos. Somente um registro, que agrega dados heterogneos, capaz de suportar tais dados associados mesma varivel.

Para criar uma estrutura registro struct na Linguagem C, deve ser utilizada uma entre as trs sintaxes abaixo. A primeira e a segunda em qualquer situao e a ltima, apresentando a varivel que ir operar o registro imediatamente aps a criao da struct e retirando assim o ; que fecha o bloco. struct <nome> { <tipos e variveis>; }; struct <nome> <varivel>; struct <nome> { <tipos e variveis>; }; <nome> <varivel>; struct <nome> { <tipos e variveis>; } <varivel>;

Onde nome o nome da estrutura (registro) e tipos e variveis a relao de variveis que sero usadas como campos, bem como o seu tipo, podendo ser: float, int, char e qualquer outro tipo construdo. Tomando como exemplo o diagrama do Funcionrio apresentado acima, a struct FUNCIONARIO poderia ser criada das seguintes formas: struct FUNCIONARIO { int CODIGO; char NOME[40]; float SALARIO; }; struct FUNCIONARIO F; struct FUNCIONARIO { int CODIGO; char NOME[40]; float SALARIO; }; FUNCIONARIO F; struct FUNCIONARIO { int CODIGO; char NOME[40]; float SALARIO; } F;

A estrutura que est sendo denominada FUNCIONARIO, representada por um conjunto de dados heterogneos (um membro tipo int, um char e um float). Desta forma, possvel guardar em uma mesma estrutura, e consequentemente em uma mesma varivel, diferentes campos com diferentes tipos de dados. Qualquer meno feita a um membro de uma estrutura, seja uma leitura, uma escrita ou mesmo uma atribuio a uma varivel, dever ser feita com o nome da estrutura seguido do nome da varivel separado por um caractere "." (ponto) que recebe o nome de operador de associao, como pode ser observado no programa de Leitura e Escrita de um Funcionrio apresentado a seguir:

- 45 -

#include <stdio.h> #include <conio.h> main() { struct FUNCIONARIO { int CODIGO; char NOME[40]; float SALARIO; } F; printf("Cadastro de Funcionario \n\n"); printf("Informe Codigo...: "); scanf("%d", &F.CODIGO); printf("Informe Nome.....: "); scanf("%s", F.NOME); printf("Informe Salario..: "); scanf("%f", &F.SALARIO); printf("\n Codigo .......: %d \n" , F.CODIGO); printf(" Nome .........: %s \n" , F.NOME); printf(" Salario.......: %.2f\n", F.SALARIO); getch(); } No exemplo apresentado temos apenas um registro FUNCIONARIO. possvel criarmos vrios destes registros aplicando os conceitos de matrizes, visto no Captulo 14. Desta forma podemos criar um vetor de registros, conforme apresentado no exemplo a seguir. #include <stdio.h> #include <conio.h> main() { struct FUNCIONARIO { int CODIGO; char NOME[40]; float SALARIO; } F[3]; int i; printf("Cadastro de Funcionarios \n\n"); for (i=0;i<=2;i++) { printf("\n Cadastrando Funcionario %d \n\n",i+1); printf("Informe Codigo...: "); scanf("%d", &F[i+1].CODIGO); printf("Informe Nome.....: "); scanf("%s", F[i+1].NOME); printf("Informe Salario..: "); scanf("%f", &F[i+1].SALARIO); } printf("\n Listagem de Funcionarios: \n"); for (i=0;i<=2;i++) { printf("Codigo .......: %d \n" , F[i+1].CODIGO); printf("Nome .........: %s \n" , F[i+1].NOME); printf("Salario.......: %.2f\n", F[i+1].SALARIO); } getch(); }
- 46 -

Note que para criar um vetor de 3 registros de Funcionrios foi necessrio apenas incluir o tamanho da varivel F em [3] rodando o lao for nas posies F[0], F[1] e F[2] fazendo ento com que a varivel i tivesse a necessidade de ser incrementada em uma unidade para sua melhor apresentao ao usurio. Caso voc no queira trabalhar com uma unidade a mais para a varivel de controle e trocar o i+1 por simplesmente i , torna-se necessrio adicionar uma unidade no tamanho do vetor. No caso especfico, a varivel F iria de [3] para [4], rodando o lao for nas posies F[1], F[2] e F[3], deixando a posio F[0] livre. Este artifcio, de incrementar em uma unidade o tamanho do vetor, ser usado nos prximos exemplos. Agora vamos pensar na possibilidade de cada funcionrio poder ter 12 salrios e no mais apenas um. Assim seria necessrio criarmos um vetor para a varivel SALARIO com 12+1 elementos: SALARIO[13]. Desta forma podemos criar um vetor de 3 registros, indicado por F[3+1] representado por F[4] e com um vetor entre seus campos, com a varivel SALARIO[13] conforme apresentado no exemplo a seguir: #include <stdio.h> #include <conio.h> main() { struct FUNCIONARIO { int CODIGO; char NOME[40]; float SALARIO[13]; } F[4]; int i,j; printf("Cadastro de Funcionarios \n\n"); for (i=1;i<=3;i++) { printf("\n Cadastrando Funcionario %d \n\n",i); printf("\t Informe Codigo...: "); scanf("%d", &F[i].CODIGO); printf("\t Informe Nome.....: "); scanf("%s", F[i].NOME); for (j=1; j<=12; j++) { printf("\t Informe Salario [%d]: ",j); scanf("%f", &F[i].SALARIO[j]); fflush(stdin); } } printf("\n Listagem de Funcionarios: \n"); for (i=1;i<=12;i++) { printf("\n\t Codigo .......: %d \n" , F[i].CODIGO); printf("\t Nome .........: %s \n" , F[i].NOME); for (j=1; j<=3; j++) printf("\t Salario [%d]...: %.2f\n",j, F[i].SALARIO[j]); } getch(); }

- 47 -

No programa anterior, foi implementada a funo fflush(stdin);, logo aps a leitura dos valores dos salrios. Isto necessrio, pois o buffer de teclado pode ficar carregado com o valor anterior, causando resultados imprevisveis. A funo fflush() tem por finalidade descarregar o buffer pendente. O argumento stdin (standard input) se refere entrada padro, que no caso o teclado. Para que a funo fflush() aceite corretamente o argumento stdin, necessria a utilizao da biblioteca padro stdio.h (standard input/output) atravs da diretiva #include (conforme apresentado no Captulo 4). Exerccio exemplo: Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para controlar o estoque pessoal de 50 DVDs de um usurio. Cada DVD ter um nome e um preo que devero ser cadastrados. Ao final do cadastro, dever ser apresentado quanto o usurio gastou com os 50 DVDs e ainda todos os DVDs cadastrados (registro completo nome e preo) com valor maior que R$ 20,00. /* Definio: Algoritmo Controle de 50 DVDs * Autor: Dennys Noronha Data de Criao: 02/06/2009 * Var: i controla os laos e as posies dos elementos * Funcionalidade: O usurio cadastra 50 DVDs com Nome e Preo e v os maiores que R$20,00 */ #include <stdio.h> #include <conio.h> main() { struct DVD { char NOME[40]; float PRECO; } D[51]; int i; float TOTAL = 0 ; printf("Cadastro de DVDs \n\n"); for (i=1;i<=50;i++) { printf("\n Cadastrando DVD %d \n\n",i); printf("\t Informe Titulo.: "); scanf("%s", D[i].NOME); printf("\t Informe Preco..: "); scanf("%f", &D[i].PRECO); TOTAL = TOTAL + D[i].PRECO ; } printf("\n\n Total gasto com DVDs: R$ %.2f \n\n", TOTAL); printf("\n\n Listagem de DVDs maiores que R$20,00: \n\n"); for (i=1;i<=50;i++) { if (D[i].PRECO > 20 ) { printf("\n\t Titulo %d ...: %s \n" ,i, D[i].NOME); printf("\t Preco.......: R$ %.2f \n", D[i].PRECO); } } getch(); }
- 48 -

Exerccios Exerccios
uma maratona X qualquer, possvel a inscrio de 7 atletas. Cada um com cdigo int e Nome char. Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para atribuir inicialmente espaos vazios para as 7 possveis inscries de atletas. Possibilitar ento o cadastro de todos os atletas inscritos na maratona, um a um, atravs de um menu com 1- Incluso (Inscrio do Atleta) e 2- Listagem dos Inscritos, at que a opo do usurio seja igual a 3- Sair. No momento do cadastro, o atleta ir escolher seu nmero de inscrio que corresponder aos ndices do vetor de registros (obrigatoriamente de 1 at 7) e no poder estar ocupado.

1) Em

2) Desenvolver

um programa no Dev C++, completo e voltado ao usurio final, para trabalhar com um Controle de CDs... Sero at 7 registros de CDs... Cada registro possuindo em sua formao: um Cdigo (int),um Nome (char) e ainda um Preo (float). O usurio dever ter, atravs de um menu, as seguintes opes: 1-Incluso (incluir, na ntegra, um registro CD de cada vez); 2-Consulta Geral (apresentar todos os CDs cadastrados); 3-Sair (apresentar uma mensagem de at breve). Observaes: 1- Inicializar todos os registros como vazios; (usar iterao for); 2- Adotar o cdigo dos CDs como sendo a prpria posio (ndice) do vetor (1 at 7); 3- O Sistema dever ser executado at que a opo desejada seja igual a 3-Sair (usar uma iterao do...while para isso) e no deve aceitar valores diferentes de 1, 2 ou 3 (usar default); 4- Os ndices (cdigos) so limitados de 1 at 7. No deixe que sejam informados ndices fora deste intervalo e no permita a incluso de um registro em uma posio (ndice) ocupada.

- 49 -

3) Desenvolver um programa no Dev C++, completo e voltado ao usurio final, para trabalhar com um
Controle de Livraria... Sero at 7 registros de Livros... Cada registro possuir um Cdigo (int), um Ttulo (char) e ainda o Preo de cada Livro (float). O usurio dever ter, atravs de um menu, as seguintes opes: 1-Incluir (dever ser includo, na ntegra, um registro de cada vez); 2-Consultar (sero apresentados todos os Livros cadastrados somente os cadastrados); 3-Alterar (devero ser alterados na ntegra, os dados cadastrais de cada Livro - registro - de acordo com o cdigo informado); 4-REMOver (devero ser excludos, na ntegra, os dados cadastrais de cada Livro - registro - de acordo com o cdigo informado); 5-Sair (dever ser apresentada uma mensagem de at breve). Observaes: 1. Inicializar todos os registros como vazios; (usar iterao for); 2. Adotar o cdigo do Livro como sendo a prpria posio do vetor (1 at 7); 3. O Sistema dever ser executado at que a opo desejada seja igual a 5-Sair e no deve aceitar valores diferentes de 1, 2, 3, 4 ou 5; 4. Os ndices (cdigos) so limitados de 1 at 7. No deixe que sejam informados ndices fora deste intervalo; 5. No permitida a incluso de um registro em uma posio (ndice) ocupada. Isso deve ser comunicado ao usurio e a incluso no deve ser efetuada. 6. Deve ser apresentada uma Confirmao de operao para o usurio na alterao e na excluso dos registros; (ex.: Deseja realmente alterar / excluir os dados do Livro ALGORITMOS S/N) 7. Deve ser apresentada tambm uma mensagem de operao realizada com ou sem sucesso aps cada, incluso, consulta, alterao, ou excluso de registro. 8. No devem ser apresentados registros vazios na Consulta Geral. Apresente apenas os registros j cadastrados.

- 50 -

Resoluo do Exerccio 2: (Sem bordas, janelas e refinamento esttico) /* Definio: Algoritmo Controle de 7 CDs * Autor: Dennys Noronha Data de Criao: 02/06/2009 * Var: i e j: controlam os laos e as posies dos elementos op: opo do menu * Funcionalidade: O usurio pode Incluir e Listar ate 7 CDs com Cdigo, Nome e Preo */ #include <stdio.h> #include <conio.h> #include <conio.c> main() { int i,j; char op, NomeTemp[9]; struct CDS { int CODIGO; char NOME[9]; float PRECO; } CD[8]; for (i=1; i<=7; i++) { CD[i].CODIGO='\0'; CD[i].NOME[0]='\0'; CD[i].PRECO='\0'; } do { textcolor(BLACK); textbackground(BLACK); clrscr(); textcolor (WHITE); gotoxy(27,3); printf(" CONTROLE DE CDS "); textcolor(BLACK); textbackground(YELLOW); gotoxy(27,5); printf(" "); gotoxy(27,6); printf(" 1: Incluir CD "); gotoxy(27,7); printf(" 2: Consulta Geral "); gotoxy(27,8); printf(" 3: Sair "); gotoxy(27,9); printf(" Opo: "); textbackground(BLACK);textcolor(YELLOW); printf("[ ]"); gotoxy(51,9); textcolor(WHITE); op=getche(); switch(op) { case '1': { gotoxy(26,13); printf(" INCLUSAO DE CDS "); textbackground(YELLOW);textcolor(BLACK); gotoxy(21,15); printf("Informe o Codigo do CD [1a7]:"); textcolor(YELLOW);textbackground(BLACK);printf("[ ]"); gotoxy(51,15); textcolor(WHITE); scanf("%d",&i); if ((CD[i].NOME[0] == '\0')&&(i<8)) { CD[i].CODIGO = i; textbackground(YELLOW); gotoxy(53,15); printf(" "); gotoxy(21,16); printf(" "); gotoxy(21,18); printf(" ");
- 51 -

//Zerando Todos os Registros

textcolor(BLACK); gotoxy(21,17); printf("Informe o Titulo do CD......:"); textcolor(YELLOW); textbackground(BLACK); printf("[ ]"); textbackground(YELLOW); textcolor(BLACK); gotoxy(21,19); printf("Informe o Preco do CD......:"); textcolor(YELLOW); textbackground(BLACK); printf("[ ]"); gotoxy(51,19); textcolor(WHITE); printf("R$ .00"); fflush(stdin); // Limpa o buffer de entrada de dados gotoxy(51,17); gets(NomeTemp); //L o contedo da varivel NomeTemp incluindo espaos em branco strcpy (CD[i].NOME,NomeTemp); // Copia o conteudo da string NomeTemp para CD[i].NOME gotoxy(54,19); scanf("%f",&CD[i].PRECO); gotoxy(21,22); printf(" Dados Inseridos com Sucesso! "); textbackground(BLACK); textcolor(YELLOW); gotoxy(21,25); printf("Pressione qualquer tecla para continuar!"); getch(); } else { gotoxy(21,22); if ((CD[i].NOME[0] != '\0')&&(i<8)) printf(" Codigo Ocupado "); else printf(" Codigo Invalido "); textcolor(YELLOW); gotoxy(21,25); printf("Pressione qualquer tecla para continuar!"); getch(); } } break; case '2': { gotoxy(26,13); printf(" LISTAGEM GERAL DE CDS "); textbackground(YELLOW); textcolor(BLACK); gotoxy(3,18); printf(" NOME:"); gotoxy(3,21); printf("PRECO:"); for (i=1;i<=7;i++) { if (CD[i].NOME[0] != '\0') { gotoxy(3+i*10,16); printf(" %d ",CD[i].CODIGO); gotoxy(i*10,18); printf("%9s",CD[i].NOME); gotoxy(i*10,21); printf("R$ %6.2f",CD[i].PRECO); } } gotoxy(21,25); textbackground(BLACK); textcolor(YELLOW); printf("Pressione qualquer tecla para continuar!"); getch(); } break; default: { textcolor(YELLOW); if (op!='3') { gotoxy(12,25); printf("Opcao Invalida! Pressione qualquer tecla para continuar!"); getch(); } else { gotoxy(36,25); printf("Ate Logo..."); _sleep(1000); } } } } while(op!='3'); }
- 52 -

XVI

Procedimentos Procedimentos e Funes

Levando em considerao que j sabemos que a Linguagem C bastante funcional, veremos agora como criar funes nos programas, fazendo com que eles fiquem mais compactos resultando no melhor entendimento do programador. A criao destas funes, em modo geral, pode ser expressa de acordo com a seguinte sintaxe: [<tipo>] <nome> ([parmetros]) [<tipos de parmetros>]; { [<variveis (locais)>]; [<instrues>]; } onde: <tipo> <nome> <parmetros> <tipos de parmetros> <variveis> <instrues> tipo de dado que a funo dar retorno; o nome atribudo ao procedimento; informao opcional com as variveis de controle da funo; quando existente, necessita declarar tipo; lista de variveis locais (opcionais); processamento do corpo da funo.

16.1

Aplicao da Funo Rotina

Vamos usar como base a idia do exerccio da Incluso e Consulta dos 7 CDs, com resoluo apresentada no ltimo Captulo. Cada opo do menu (incluir e consultar) vira uma rotina que chamada na funo principal. Outro ponto importante a ser notado a possibilidade de desmembramento das Variveis em Locais e Globais. Sendo globais aquelas variveis que servem para qualquer rotina (e/ou inclusive para o programa principal), e como variveis locais as que so usadas especificamente por apenas uma rotina ou apenas pelo programa principal. As Variveis Globais so ento declaradas antes das funes no programa, enquanto que as variveis locais aparecem dentro das funes que elas fazem parte especificamente. No programa em questo, que inclui e consulta at 7 CDs, temos o desmembramento das variveis da seguinte forma: A varivel CD que trata do vetor de registros com Cdigo, Nome e Preo deve ser tratada como global, pois usada em mais de uma rotina do programa. As variveis i e j, tambm so tratadas como globais, pois servem de varivel de controle de laos em mais de uma rotina. A varivel op, vira local do programa principal, pois s usada na operao da estrutura caso. O mesmo ocorre com a varivel NomeTemp que passa a ser local da rotina incluir(), visto que a mesma s utilizada dentro desta rotina. A seguir apresentado o exerccio da Incluso e Consulta dos 7 CDs utilizando funes. Utilize a mesma idia nos exerccios 1 e 3 do Captulo de Registros e em qualquer outra situao que opere com menus.
- 53 -

/* Definio: Algoritmo Controle de 7 CDs * Autor: Dennys Noronha Data de Criao: 02/06/2009 * Var: i e j: controlam os laos e as posies dos elementos op: opo do menu * Funcionalidade: O usurio pode Incluir e Listar ate 7 CDs com Cdigo, Nome e Preo */ #include <stdio.h> #include <conio.h> #include <conio.c> struct CDS { int CODIGO; char NOME[9]; float PRECO; } CD[8]; int i,j; int incluir() { char NomeTemp[9]; gotoxy(26,13); printf(" INCLUSAO DE CDS "); textbackground(YELLOW);textcolor(BLACK); gotoxy(21,15); printf("Informe o Codigo do CD [1a7]:"); textcolor(YELLOW);textbackground(BLACK);printf("[ ]"); gotoxy(51,15); textcolor(WHITE); scanf("%d",&i); if ((CD[i].NOME[0] == '\0')&&(i<8)) { CD[i].CODIGO = i; textbackground(YELLOW); gotoxy(53,15); printf(" "); gotoxy(21,16); printf(" "); gotoxy(21,18); printf(" "); textcolor(BLACK); gotoxy(21,17); printf("Informe o Titulo do CD......:"); textcolor(YELLOW); textbackground(BLACK); printf("[ ]"); textbackground(YELLOW); textcolor(BLACK); gotoxy(21,19); printf("Informe o Preco do CD......:"); textcolor(YELLOW); textbackground(BLACK); printf("[ ]"); gotoxy(51,19); textcolor(WHITE); printf("R$ .00"); fflush(stdin); // Limpa o buffer de entrada de dados gotoxy(51,17); gets(NomeTemp); //L o contedo da varivel NomeTemp incluindo espaos em branco strcpy (CD[i].NOME,NomeTemp); // Copia o conteudo da string NomeTemp para CD[i].NOME gotoxy(54,19); scanf("%f",&CD[i].PRECO); gotoxy(21,22); printf(" Dados Inseridos com Sucesso! "); textbackground(BLACK); textcolor(YELLOW); gotoxy(21,25); printf("Pressione qualquer tecla para continuar!"); getch(); } else { gotoxy(21,22); if ((CD[i].NOME[0] != '\0')&&(i<8)) printf(" Codigo Ocupado "); else printf(" Codigo Invalido "); textcolor(YELLOW); gotoxy(21,25); printf("Pressione qualquer tecla para continuar!"); getch(); } }
- 54 -

int consultar() { gotoxy(26,13); printf(" LISTAGEM GERAL DE CDS "); textbackground(YELLOW); textcolor (BLACK); gotoxy(3,18); printf(" NOME:"); gotoxy(3,21); printf("PRECO:"); for (i=1;i<=7;i++) { if (CD[i].NOME[0] != '\0') { gotoxy(3+i*10,16); printf(" %d ",CD[i].CODIGO); gotoxy(i*10,18); printf("%9s",CD[i].NOME); gotoxy(i*10,21); printf("R$ %6.2f",CD[i].PRECO); } } gotoxy(21,25); textbackground(BLACK); textcolor(YELLOW); printf("Pressione qualquer tecla para continuar!"); getch(); } main() { char op; for (i=1; i<=7; i++) //Zerando Todos os Registros { CD[i].CODIGO='\0'; CD[i].NOME[0]='\0'; CD[i].PRECO='\0'; } do { textcolor(BLACK); textbackground(BLACK); clrscr(); textcolor (WHITE); gotoxy(27,3); printf(" CONTROLE DE CDS "); textcolor(BLACK); textbackground(YELLOW); gotoxy(27,5); printf(" "); gotoxy(27,6); printf(" 1: Incluir CD "); gotoxy(27,7); printf(" 2: Consulta Geral "); gotoxy(27,8); printf(" 3: Sair "); gotoxy(27,9); printf(" Opcao:"); textbackground(BLACK); textcolor(YELLOW); printf("[ ]"); gotoxy(52,9); textcolor(WHITE); op=getche(); switch(op) { case '1': incluir(); break; case '2': consultar(); break; default: { textcolor(YELLOW); if (op!='3') { gotoxy(12,25); printf("Opcao Invalida! Pressione qualquer tecla para continuar!"); getch(); } else { gotoxy(36,25); printf("Ate Logo..."); _sleep(1000); } } } } while(op!='3'); }
- 55 -

Potrebbero piacerti anche