Você está na página 1de 37

Princpios de Programao

Antes de iniciar o estudo da linguagem C propriamente dita, faz-se necessrio lembrar os conceitos bsicos da programao de sistemas. Podemos dizer que programao, consiste na traduo do pensamento lgico necessrio para o cumprimento de uma determinada tarefa, em uma seqncia de comandos que podem ser interpretados e executados por uma mquina. A tarefa de programao constitui-se basicamente num processo de identificao e soluo de problemas. Para chegar ao programa propriamente dito necessrio passar pelos seguintes procedimentos: a) Exposio do problema: necessrio descrever detalhadamente o problema a ser resolvido pelo programa; b) Anlise da soluo: deve-se elaborar a ou as solues que melhor resolvem o problema em questo. c) Codificao da soluo: tendo-se idia da soluo do problema necessrio a descrio seqencial passo a passo da soluo que melhor resolve o problema. d) Traduo do cdigo: basta agora de posse do algoritmo traduzir essa seqncia em comandos que possam ser corretamente interpretados pela linguagem de programao utilizada; e) Depurao: o processo de verificao e teste do programa deforma a localizar e solucionar todas as eventuais falhas e erros de codificao que tenham acontecido em quaisquer fases anteriores.

Algoritmos
O Algoritmo trata-se de um conjunto lgico e finito de aes ( instrues ) que resolvem um determinado problema. Antes de utilizarmos uma linguagem de computador, necessrio organizar as aes a serem tomadas pela mquina de forma organizada e lgica, sem nos atermos s regras rgidas da Sintaxe de uma linguagem.

Fluxogramas
So as representaes grficas de um algoritmo atravs do uso de smbolos preestabelecidos. Assim sendo Fluxogramas so elementos grficos utilizados para estabelecer a seqncia de operaes necessrias para o cumprimento de determinada tarefa e, conseqentemente, a resoluo de um problema.

-1-

-1-

Introduo Linguagem C

Professor Cludio Renato R. Alves

A seguir, veremos alguns elementos a serem utilizados na construo de fluxogramas. Inicio ou terminao: utilizado para representar o inicio ou trmino do programa ou algoritmo. Processo ou Ao: este smbolo utilizado para descrever a realizao de uma determinada tarefa. Entrada de dados manual: este smbolo utilizado para descrever a entrada de dados via teclado(digitao). Tomada de deciso: este smbolo utilizado para representar um ponto de tomada de deciso, ou teste condicional. A tomada de deciso levar a um resultado verdadeiro ou falso. Em um dos casos o fluxo desviado, e no outro o programa seguira seu fluxo normal. Sada de dados no vdeo (exibir): este smbolo utilizado para descrever a exibio de uma mensagem na tela do microcomputador.

Conector: normalmente utilizado para indicar a descontinuidade na representao do fluxo(onde segue o fluxograma). Entrada e sada de dados: este smbolo utilizado para descrever a Entrada e sada de dados em geral.

-2-

Introduo Linguagem C

Professor Cludio Renato R. Alves

Vejamos um exemplo do fluxograma de um programa para a soluo de um problema simples: somar dois nmeros (A e B ) e armazenar o resultado em C.

Exerccios de fluxogramas
1. Desenvolva o fluxograma de um programa que leia duas notas digitadas, calcule a mdia aritmtica delas e apresente o resultado.

2. Desenvolva o fluxograma de um programa que leia duas notas digitadas, que somente aceite notas at cem, calcule a mdia aritmtica delas e apresente o resultado. 3. Desenvolva o fluxograma de um programa que leia duas notas digitadas, calcule a mdia aritmtica delas e apresente o resultado, junto com a classificao do aluno de aprovado,reprovado ou em recuperao. Mdia 70 ou acima = aprovado Mdia inferior a 50 = reprovado Mdia entre 50 a 69 = em recuperao

-3-

Introduo Linguagem C

Professor Cludio Renato R. Alves

1. Introduo
A linguagem C uma linguagem de alto nvel, genrica. Foi desenvolvida por programadores para programadores tendo como meta caractersticas de flexibilidade e portabilidade. O C uma linguagem que nasceu juntamente com o advento da teoria de linguagem estruturada e do computador pessoal. Assim tornou-se rapidamente uma linguagem popular entre os programadores. O C foi usado para desenvolver o sistema operacional UNIX, e hoje esta sendo usada para desenvolver novas linguagens, entre elas a linguagem C++ e Java. 1.1 Caractersticas do C

Entre as principais caractersticas do C, podemos citar:


O C uma linguagem de alto nvel com uma sintaxe bastante estruturada e flexvel tornando sua programao bastante simplificada. Programas em C so compilados, gerando programas executveis. O C compartilha recursos tanto de alto quanto de baixo nvel, pois permite acesso e programao direta do microprocessador. Com isto, rotinas cuja dependncia do tempo crtica, podem ser facilmente implementadas usando instrues em Assembly. Por esta razo o C a linguagem preferida dos programadores de aplicativos. O C uma linguagem estruturalmente simples e de grande portabilidade. O compilador C gera cdigos mais enxutos e velozes do que muitas outras linguagens. Embora estruturalmente simples (poucas funes intrnsecas) o C no perde funcionalidade pois permite a incluso de uma farta quantidade de rotinas do usurio. Os fabricantes de compiladores fornecem uma ampla variedade de rotinas prcompiladas em bibliotecas.

1.1.2 Histrico 1970: Denis Ritchie desenha uma linguagem a partir do BCPL nos laboratrios da Bell Telephones, Inc. Chama a linguagem de B. 1978: Brian Kerningham junta-se a Ritchie para aprimorar a linguagem. A nova verso chama-se C. Pelas suas caractersticas de portabilidade e estruturao j se torna popular entre os programadores. ~1980: A linguagem padronizada pelo American National Standard Institute: surge o ANSI C. ~1990: A Borland International Co, fabricante de compiladores profissionais escolhe o C e o Pascal como linguagens de trabalho para o seu Integrated Development Enviroment (Ambiente Integrado de Desenvolvimento): surge o Turbo C. ~1992: O C se torna ponto de concordncia entre tericos do desenvolvimento da teoria de Object Oriented Programming (programao orientada a objetos): surge o C++.

-4-

Introduo Linguagem C

Professor Cludio Renato R. Alves

1.2. Estrutura do programa C


Um programa em C constitudo de: um cabealho contendo as diretivas de compilador onde se definem o valor de constantes simblicas, declarao de variveis, incluso de bibliotecas, declarao de rotinas, etc. um bloco de instrues principal e outros blocos de rotinas. documentao do programa: comentrios.

Um programa em linguagem C formado por uma ou mais funes. Cada funo um bloco de cdigo delimitado que deve ter um nome e executa um conjunto de operaes. Uma funo denominada main obrigatria em todos os programas, pois o seu ponto de entrada, isto , o programa comea a ser executado no incio da funo main e termina ao final desta funo. Normalmente a funo main inicia com a declarao int main(void) e tem seu corpo delimitado por um par de chaves { }.Ao concluir a funo main, com o comando return, a execuo do programa finalizada, sendo que pelo padro ANSI, esta funo deve retornar 0 (zero) se o programa foi finalizado com sucesso, ou um valor maior que zero caso ele tenha sido finalizado por uma situao de erro. Alm da funo main, o programa pode possuir outras funes, como ser visto adiante, sendo que estas devem ser, direta ou indiretamente, chamadas pela funo main. Na codificao de um programa, deve-se observar que o compilador C diferencia letras maisculas de minsculas, portanto TESTE diferente de teste, que por sua vez diferente de Teste. Todas as palavras reservadas da linguagem devem ser digitadas em letra minscula. /* prog01.c Exemplo de programa em C */ #include <stdio.h> int main(void) { printf("Programa C muito simples\n"); getchar(); /* Aguarda pressionar Enter */ return(0); }

-5-

Introduo Linguagem C

Professor Cludio Renato R. Alves

1.2.1. Diretiva #include


Toda a diretiva, em C, comea com o smbolo # no incio da linha. Esta diretiva inclui o contedo de um outro arquivo dentro do programa atual, ou seja, a linha que contm a diretiva substituda pelo contedo do arquivo especificado. Sintaxe: #include <nome do arquivo>

Exemplo: #include<stdio.h>
Ela serve para incluir alguns arquivos que contm declarao das funes da biblioteca padro, entre outras coisas. Estes arquivos, normalmente, possuem a extenso .h e se encontram em algum diretrio pr-definido pelo compilador. Sempre que o programa utilizar alguma funo da biblioteca-padro deve ser includo o arquivo correspondente. A tabela a seguir apresenta alguns dos principais .h do C:

stdio.h string.h math.h stdlib.h ctype.h


Arquivo Descrio

Funes de entrada e sada (I/O) Funes de tratamento de strings Funes matemticas Funes de uso genrico Funes de teste e tratamento de caracteres

1.2.3. Comentrios
Os comentrios servem principalmente para documentao do programa e so ignorados pelo compilador, portanto no iro afetar o programa executvel gerado. Os comentrios iniciam com o smbolo /* e se estendem at aparecer o smbolo */. Um comentrio pode aparecer em qualquer lugar no programa onde possa aparecer um espao em branco e pode se estender por mais de uma linha.

Exemplo: /* primeiro programa em linguagem C */

-6-

Introduo Linguagem C

Professor Cludio Renato R. Alves

1.2.4. Diretiva #define


Esta diretiva utilizada para a definio de macros, que so nomes que representam valores constantes. Aps a definio da macro, toda ocorrncia do seu nome no programa substituda pelo valor definido. Por conveno todo o nome de macro escrito em letras maisculas. Sintaxe: #define nome valor

Exemplo: #define PI 3.14159265358979323846


... area = PI * (raio*raio);

1.2.5 Declarao de rotinas


Todos os programas em C tm que ter uma funo main, pois esta funo que ser chamada quando o programa for executado. O contedo da funo delimitado por chaves { }. O cdigo que estiver dentro das chaves ser executado seqencialmente quando a funo for chamada. A palavra int indica que esta funo retorna um inteiro. O que significa este retorno ser visto posteriormente, quando estudarmos um pouco mais detalhadamente as funes do C. A ltima linha do programa, return(0); , indica o nmero inteiro que est sendo retornado pela funo, no caso o nmero 0.

Exemplo:
int main( ) { bloco de instrues return(0); }

-7-

Introduo Linguagem C

Professor Cludio Renato R. Alves

1.2.6 Declarao de variveis


Para que se possa usar uma varivel em um programa, necessrio fazer uma declarao de varivel antes. A declarao de variveis simplesmente informa ao processador quais so os nomes utilizados para armazenar dados variveis e quais so os tipos usados. Deste modo o processador pode alocar (reservar) o espao necessrio na memria para a manipulao destas variveis. possvel declarar mais de uma varivel ao mesmo tempo, basta separ-las por vrgulas (,). Sintaxe: A sintaxe para declarao de variveis a seguinte: tipo variavel_1 [, variavel_2, ...] ; Onde tipo o tipo de dado e variavel_1 o nome da varivel a ser declarada. Se houver mais de uma varivel, seus nomes so separados por vrgulas.

Exemplo: int i; int x,y,z; char letra; float nota1,nota2,media; double num;
No exemplo acima, i, x, y e z foram declaradas variveis inteiras. Assim elas podem armazenar valores inteiros de -32768 at 32767. Do mesmo modo letra foi declarada como varivel caractere podendo receber valores de -128 at 127 ou caracteres do conjunto padro ASCII. As variveis nota_1, nota_2 e media foram declaradas como ponto flutuante tipo float e num como ponto flutuante tipo double. A declarao de variveis feita, em geral, dentro de uma rotina. Por exemplo, a rotina principal main(). Deste modo se diz que est se fazendo uma declarao de variveis locais. Variveis locais podem ser referenciadas apenas dentro da rotina dentro da qual foi declarada, neste caso a rotina main(). Exemplo: Observe o uso da declarao de variveis no trecho de programa abaixo: #include<stdio.h> void main( ) { float raio, rea; raio = 2.5; rea = 3.14 * raio * raio; } // declarao de variveis

// Declarao das variveis

-8-

Introduo Linguagem C

Professor Cludio Renato R. Alves

No exemplo anterior, as variveis rea e raio foram declaradas como variveis locais tipo float. Assim o processador faz a alocao de dois espaos (endereos) de 4 bytes cada para armazenar as informaes, um para cada varivel. Na terceira linha, o processador coloca no endereo alocado para raio o valor 2.5. Depois, na quarta linha, o processador coloca o resultado da conta (19.625) no endereo de rea. possvel fazer a declarao de variveis fora de uma rotina. Neste caso diz-se que se fez a declarao de variveis globais. Obs.: Neste ltimo exemplo a funo principal no retorna valor em seu final, assim sendo declara-se void main( ) (no vai return no final).

-9-

Introduo Linguagem C

Professor Cludio Renato R. Alves

2.Trabalhando no Turbo C
Abaixo so citados os passos seqncias para trabalhar no Turbo C, passos estes que devem ser seguidos cada vez que voc for utilizar o laboratrio de linguagem C.

1.

Ao entrar no ambiente de edio de programas fazer a indicao dos diretrios de trabalho para o compilador. Acessar o comando Options opo Diretories.

2.

Direcionar o diretrio de trabalho para dentro de sua pasta(no caminho especificado). Comando File opo Change diretory

- 10 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

3.

Aps estar no ambiente de edio(entrando pelo cone na rea de trabalho), acessar o comando File e a opo New.( para editar um novo programa)

4.

Salvar o programa nomeando-o. Atravs do comando File opo Save as .Por exemplo : C:\TC\PRG\411\PRG1.C . (O programa a ser digitado assumir o nome de PRG1.C.) No esquecer de salvar seguidamente enquanto edita.

5.

Ao final da edio do programa deve-se compilar o mesmo. Comando Compile opo Compile . caso exista erro de edio sero apontados pelo compilador.

- 11 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

6. Ao final da compilao caso no haja erro algum o programa poder ser executado. Comando Run opo Run

7.

Feito isto basta alternar da janela de edio para o ambiente DOS para verificar o efeito do programa na tela do monitor. Comando File opo Dos shell.

8. Para retornar janela de edio basta digitar EXIT + enter

- 12 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

3. Entrada e sada padro

As principais funes para entrada e sada (leitura e escrita) de valores, em C, esto definida em < stdio.h >.O nome deste arquivo originou-se do termo ingls "standard input/output", que significa "entrada e sada padro".

3.1. A funo printf


A funo printf uma funo da biblioteca padro utilizada para escrever valores. Ela pode receber diversos parmetros, sendo que o primeiro dever ser uma string, chamada string de formato. Somente ser exibido o que for solicitado dentro desta string. Tudo o que aparecer nesta string que no um especificador de formato ser impresso literalmente. Cada especificador de formato encontrado nesta string substitudo pelo parmetro seguinte na lista de parmetros da funo.

3.1.1. Especificadores de formato


So smbolos, representados por um % mais um outro caractere, que indicam que um valor vai ser escrito pela funo, na posio correspondente da string de formato. Indicam tambm o tipo e/ou a base numrica do dado a ser escrito. Cada valor deve ter um especificador correspondente: se faltarem especificadores, os ltimos valores no sero exibidos; se sobrarem especificadores, sero exibidos valores indeterminados (lixo). A tabela a seguir apresenta os principais especificadores de formato utilizados com a funo printf. Formato %d %o %x %c %s %f %% Descrio Nmero inteiro decimal Nmero inteiro octal Nmero inteiro hexadecimal Um nico caractere String Nmero em ponto flutuante Exibe um %

- 13 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

3.1.2. O tamanho e preciso do campo


O tamanho do campo indica quantas posies da sada sero utilizados para exibir o valor correspondente a um especificador de formato. O tamanho do campo determinado colocando-se um nmero entre o % e o caractere indicador do formato. Por exemplo, %5d indica que o valor a ser impresso vai ocupa 5 posies na tela. Por padro, as posies em excesso so preenchidas com brancos e o valor alinhado direita do campo. Se o tamanho do campo for precedido por um smbolo - (menos), ento o valor ser alinhado esquerda do campo. Se o tamanho do campo for precedido com o smbolo 0 (zero), ento as posies excedentes so preenchidas com zeros. Sempre que o tamanho do campo for insuficiente para exibir o valor solicitado, este tamanho ignorado. Desta forma um valor nunca truncado. Para valores em ponto-flutuante, pode-se definir o nmero de casas decimais a serem impressas, colocando-se o um ponto (.) e outro nmero depois do tamanho do campo. Por exemplo, o formato %10.2f, exibe o valor em ponto-flutuante com duas casas decimais, dentro de um campo de tamanho 10. Se esta mesma lgica for utilizada com strings (formato %s), o valor antes do ponto continua indicando a tamanho do campo, porm a segunda parte limitar o nmero mximo de caracteres da string a serem impressos. Exemplo: /* prog03.c */ #include <stdio.h> int main(void) { char letra = 'A'; int num = 15; double dv = 13.71; char curso[]="COMPUTACAO"; printf("[%c]", curso[1]); printf("[%c] [%d]\n",letra, letra); printf("[%d] [%o] [%x]\n", num, num, num); printf("[%5d] [%05d] [%-5d]\n",num, num, num); printf("[%7.1f]\n",dv); printf("[%.3f]\n",dv); printf("[%-7.1f]\n",dv); printf("[%15s]\n", curso); printf("[%-15s]\n", curso); printf("[%15.4s]\n", curso); printf("[%-15.4s]\n", curso); getchar(); return(0); }

- 14 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

3.2. Funo scanf


a principal funo de entrada de dados da biblioteca padro, sendo utilizada principalmente para a leitura de valores numricos (variveis int, float e double). utilizada de forma semelhante funo printf, iniciando com uma string de formato, onde deve aparecer o especificador de formato adequado s variveis que esto sendo lidas, conforme a tabela abaixo.

Formato
%d %f % lf %c %s int float double Um caractere Uma string..

Tipo

As variveis que sero lidas devem ser precedidas do smbolo &, exceto para strings. Qualquer caractere inserido na string de formato que no um especificador considerado separador, isto , delimita o contedo que ser atribudo a cada uma das variveis lida. Exemplo: #include <stdio.h> int main( ){ int dia, mes, ano; float temp, far; printf("Informe a temperatura (Celsius): "); scanf("%f", &temp); printf("Informe a data (dd/mm/aaaa): "); scanf("%d/%d/%d", &dia, &mes, &ano); far=(9.0 / 5.0 * temp + 32.0); printf("Em %02d/%02d/%04d a temperatura foi %.1f (fahrenheit)\n", dia, mes, ano, far); fflush(stdin); getchar(); return(0); }

Exerccio de aplicao:
Desenvolva o fluxograma e a codificao de um programa que leia dois nmeros digitados, calcule a soma deles e apresente o resultado na tela.

- 15 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

4. Estruturas de Controle
Estruturas de controle permitem controlar a seqncia das aes lgicas de um programa. Basicamente, existem dois tipos de estruturas de controle: estruturas de repetio e estruturas de deciso. A estrutura de repetio permite que um bloco de instrues seja executado repetidamente uma quantidade controlada de vezes. A estrutura de deciso permite executar um entre dois ou mais blocos de instrues. Neste captulo estudaremos em detalhe as instrues do C que permitem implementar estas estruturas.

4.1.Condio de controle
Em todas as estruturas, existe pelo menos uma expresso que faz o controle de qual bloco de instrues ser executado ou quantas vezes ele ser executado: o que chamamos de condio de controle. Uma condio de controle uma expresso lgica ou aritmtica cujo resultado pode ser considerado verdadeiro ou falso. A Linguagem C no possui, entretanto, variveis ou constantes lgicas, possui somente expresses numricas, assim quando uma expresso numrica se encontra em uma condio de controle, ela ser considerada falsa se seu valor for igual a zero, e verdadeira se seu valor for diferente de zero. Exemplo: Observe nas condies abaixo, seu valor numrico e seu significado lgico. Considere as variveis int i = 0, j = 3; condio valor numrico significado lgico (i == 0) 1 verdadeiro (i > j) 0 falso (i) 0 falso (j) 3 verdadeiro

- 16 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Deciso de um bloco (if...)


A estrutura de deciso de um bloco permite que se execute (ou no) um bloco de instrues conforme o valor de uma condio seja verdadeiro ou falso. O fluxograma desta estrutura mostrada na figura abaixo.

condio

bloco

Figura 5.1: Fluxograma da estrutura de deciso if... Sintaxe: Deciso com um bloco: if(condio){ bloco } bloco um conjunto de instrues. Se a condio verdadeira, o bloco executado. Caso contrrio, o bloco no executado. Exemplo: No trecho abaixo, se o valor lido for maior que 10, ento o seu valor redefinido como 10. Observe que o bloco constitui-se de um nica instruo. onde: condio uma expresso lgica ou numrica.

printf("Digite o nmero de repeties: (mximo 10)"; scanf("%d",&iten); if(iten > 10){ iten = 10;}

Este fato deve ficar claro pois, nas estruturas que estudaremos, quando for dito que uma condio falsa ou verdadeira quer se dizer que seu valor e igual a zero ou diferente de zero.

- 17 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Exerccio de aplicao:
Desenvolva o fluxograma e a codificao de um programa que leia dois nmeros digitados, somente aceite nmeros positivos, calcule a soma deles e apresente o resultado na tela.

- 18 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Operadores Relacionais e Lgicos


A chave para a flexibilidade de um algoritmo a tomada de decises atravs da avaliao de condies de controle. Uma condies de controle uma expresso lgica que avaliadas como verdadeira ou falsa. Uma expresso lgica construda com operadores relacionais e lgicos. Operadores relacionais Operadores relacionais verificam a relao de magnitude e valores. So seis os operadores relacionais em C: Operador > < >= <= == != igualdade entre dois

Significado maior que menor que maior ou igual a (no menor que) menor ou igual a (no maior que) igual a no igual a (diferente de)

Sintaxe: A sintaxe das expresses lgicas : expresso_1 operador expresso_2 onde expresso_1 e expresso_2 so duas expresses numricas quaisquer, e operador um dos operadores relacionais. Exemplo: If (DADO<= 25) goto ent1:

Desenvolva o fluxograma e a codificao de um programa que leia duas notas digitadas, calcule a mdia aritmtica delas e apresente o resultado, junto com a classificao do aluno de aprovado,reprovado ou em recuperao. Mdia igual ou acima de 70 = aprovado Mdia inferior a 50 = reprovado Mdia entre 50 a 70 = em recuperao

- 19 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Deciso de dois blocos (if...else)


Atravs deste comando realizada a comparao de determinada condio , caso o resultado seja Verdadeiro ser executado o(s) comando(s) relacionado(s) com if , caso seja Falso ser(o) executado o(s) comando(s) relacionado(s) com Else . A figura abaixo mostra o fluxograma correspondente a esta estrutura de deciso.

condio?

bloco 1

bloco 2

Fluxograma da estrutura de deciso if...else Sintaxe: Deciso de dois blocos: if(condio){ bloco 1;} else{ bloco 2;} onde: condio uma expresso lgica ou numrica. bloco 1 e bloco 2 so conjuntos de instrues. Se a condio for verdadeira o bloco 1 executado. Caso contrrio, o bloco 2 executado. Exemplo: No trecho abaixo, se o valor de raiz*raiz for maior que num o valor de raiz ser atribudo a max, caso contrario, ser atribudo a min. if(raiz*raiz > num) { max = raiz;} else{ min = raiz; }

- 20 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Operadores lgicos:
Smbolo && || ! Operador E OU NO Significado Lgica And (todas as condies) Lgica Or (basta uma das condies) Lgica de negao

Exemplo: If (Nota1<0 || Nota1>100) goto ent1; Se Nota1 for menor que zero ou se Nota1 for maior que cem v para ent1; Desenvolva o fluxograma e a codificao de um programa que leia trs valores para os lados de um tringulo, considerando lados como A,B e C. Verificar se os lados fornecidos realmente formam um tringulo. Caso verdadeiro dever ser indicado qual o tipo de tringulo formado: issceles, escaleno ou eqiltero. Condies para tringulo: Tringulo uma figura geomtrica (polgono) composta por trs lados, sendo que cada lado menor que a soma dos outros dois lados. Classificao: Issceles = Possui dois lados iguais e um diferente. Equiltero= Possui todos os lados iguais. Escaleno= Possui todos os lados diferentes entre si.

- 21 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

5.Lendo Valores

getche( )

Usada para a entrada de variveis char , l um caractere e exibe na tela o caractere digitado. Esta definida em conio.h. Letra = getche(); /* o que foi digitado assumido pela varivel Letra */

getch( )

Usada para a entrada de variveis char , l um caractere e no exibe na tela o caractere digitado. Esta definida em conio.h. Letra = getche(); /* o que foi digitado assumido pela varivel Letra sem mostrar*/

gets( )

Usada para a entrada de variveis string , recebe uma string digitada. Esta definida em conio.h. printf(Digite seu nome: ); gets(nome); Obs.: Para que se guarde uma string necessrio que se crie um vetor com um limite de caracteres para o contedo(tamanho mximo). Isto feito durante a declarao de variveis. Exemplo: { float Soma,soma, _1; int a,b,c; char nome[80]; // contedo de nome um conjunto de at 80 caracteres

Deve ser utilizada para a entrada de variveis numricas(int, float e double). O modo de utilizar semelhante funo printf, porm colocar obrigatoriamente o smbolo & em frente ao nome da varivel sendo lida. Est definida em stdio.h . scanf(%d, & A) ;

scanf( )

- 22 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Exemplo de aplicao: /* Programa de exemplo de aplicao de gets,getch e scanf #include<stdio.h> #include <conio.h> main( ) { char varc; int vari; float varf; char nome[80];

*/

clrscr( ); //Limpa a tela e posiciona o cursor no incio da primeira linha printf(Digite seu nome: ); gets(nome); printf(Digite um nmero inteiro: ); scanf (%d, & vari); printf(Digite um nmero real: ); scanf (%d, & varf); printf(Digite um caractere: ); varc=getche( ); printf( \n %s, voc digitou %d, %f e %c,nome, vari, varf, varc); getch( ); }

- 23 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Estrutura switch...case
A estrutura switch...case uma estrutura de deciso que permite a execuo de um conjunto de instrues a partir pontos diferentes conforme o resultado de uma expresso inteira de controle. O resultado deste expresso comparado ao valor de cada um dos rtulos, e as instrues so executadas a partir desde rtulo. A figura abaixo mostra o fluxograma lgico desta estrutura.

expresso

rotulo 1 conjunto 1 rotulo 2

conjunto 2

...

rotulo N

conjunto N rotulo D

conjunto D

Figura : Fluxograma da estrutura switch...case.

- 24 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Sintaxe: Esta estrutura possui a seguinte sintaxe: switch(expresso){ case rtulo_1:{ conjunto_1 } case rtulo_2:{ conjunto_2} ... case rtulo_n:{ conjunto n} default:{ conjunto d} onde: expresso uma expresso inteira. rtulo_1,rtulo_2,...rtulo_n e rtulo_d so constantes inteiras. conjunto 1, conjunto 2, ..., conjunto n e conjunto d so conjuntos de instrues. O valor de expresso avaliado e o fluxo lgico ser desviado para o conjunto cujo rtulo igual ao resultado da expresso e todas as instrues abaixo deste rtulo sero executadas. Caso o resultado da expresso for diferente de todos os valores dos rtulos ento conjunto (default) executado. Os rtulos devem ser expresses constantes inteiras diferentes entre si. O rtulo default opcional. Esta estrutura particularmente til quando se tem um conjunto de instrues que se deve executar em ordem, porm se pode comear em pontos diferentes. Exemplo: O trecho abaixo ilustra o uso da instruo switch em um menu de seleo. Neste exemplo, o programa iniciar o processo de usinagem de uma pea em um ponto qualquer dependendo do valor lido. N1: printf(Digite 1 para somar, 2 para calcular a mdia ou 3 para sair ); scanf (%d, & varf); switch(varf) { case 1 : printf(realizando a soma); goto soma; break; case 2 : printf(calculando a mdia); goto media; break; case 3 : printf(AT LOGO!); goto fim; break; default : clrscr( ); goto n1; break; } soma: media: fim: }
- 25 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Desenvolva o fluxograma e a codificao de um programa que aceite um nmero pelo teclado e realize a converso entre sistemas de numerao (binrio,octal,decimal e hexadecimal), e apresente o resultado na tela a partir do seguinte quadro de opes: Este programa realiza a converso entre sistemas de numerao. Faa sua opo: 1 Converter decimal em hexadecimal. 2 Converter decimal em octal. 3 Converter hexadecimal em decimal. 4 Converter octal em decimal 5 Converter octal em hexadecimal 6 Para sair Deseja realizar nova converso (S/N)? Obs.: Consultar especificadores de formato com printf

- 26 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Escrita formatada em cores cprintf( ): Esta funo utilizada em conjunto com as definies de cor de texto (textcolor) e de cor de fundo (textbackground) . Esta funo permite que sejam mostradas na tela mensagens coloridas. Cor
Preto Azul Verde Cian Vermelho Magenta Marrom Cinza Claro Cinza Escuro Azul Claro Verde Claro Cian Claro Vermelho Claro Magenta Claro Amarelo Branco Piscante Azul Piscante

Constante

Valor

Fundo
O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. ---------------------

Letra
O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k. O.k.

BLACK 0 BLUE 1 GREEN 2 CYAN 3 RED 4 MAGENTA 5 BROWN 6 LIGHTGRAY 7 DARKGRAY 8 LIGHTBLUE 9 LIGHTGREEN 10 LIGHTCYAN 11 LIGHTRED 12 LIGHTMAGENTA 13 YELLOW 14 WHITE 15 BLINK 128 Obs.: cor piscante = cor +128 BLUE+BLINK 129

Nota-se pela tabela acima que nem todas as cores so vlidas como cor de fundo. Convm salientar que tais funes esto definidas em conio.h

- 27 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Limpeza de tela: clrscr( ), clreol( )


Biblioteca: conio.h

clrscr( ):Esta funo limpa a janela de tela e posiciona o cursor na primeira linha e
primeira coluna da janela(canto superior esquerdo).

clreol( ): A funo clreol() (clear to end of line) limpa uma linha desde a posio do
cursor at o final da linha mas no modifica a posio do cursor. Ambas preenchem a tela com a cor de fundo definida pela funo textbacground(). funes

Posiciona Cursor

gotoxy(coluna,linha):Esta funo permite o posicionarmos o cursor em qualquer posio da tela. Sendo que a tela possui 80 colunas e 25 linhas. Logo gotoxy(1,1) at gotoxy(80,25) so vlidos. Devemos lembrar que este comando dever anteceder o printf ou o cprintf para que a mensagem esteja posicionada onde desejarmos.
#include <conio.h> int main( ) { clrscr(); gotoxy(14, 4); cprintf("The function CLREOL clears all characters from the\r\n"); cprintf("cursor position to the end of the line within the\r\n"); cprintf("current text window, without moving the cursor.\r\n"); cprintf("Press any key to continue . . ."); gotoxy(14, 4); getch( ); clreol( ); getch( ); return 0; }

- 28 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Sada sonora: sound( ), delay( ), nosound( )


Biblioteca:

dos.h

sound( ): ativa o alto-falante do PC com uma freqncia (Hz). nosound( ): desativa o alto-falante. delay( ) :realiza uma pausa (aguarda intervalo de tempo) de durao tempo
(milisegundos).

Lao for

for(inicializao;condio;incremento) ;Em sua forma mais simples, a incializao


um comando de atribuio que o compilador usa para estabelecer a varivel de controle do loop. A condio uma expresso de relao que testa a varivel de controle do loop contra algum valor para determinar quando o loop terminar. O incremento define a maneira como a varivel de controle do loop ser alterada cada vez que o computador repetir o loop.
#include <dos.h> #include <conio.h> #include <stdio.h> #define T 250 main( ){ clrscr(); sound(660);delay(2*T); sound(550);delay(T); sound(495);delay(T); sound(440);delay(2*T); sound(495);delay(T); sound(550);delay(T); sound(495);delay(2*T); sound(330);delay(6*T); nosound(); }

Ex2: #include<stdio.h> main( ) { int x; for(x=1;x<100;x++)printf("%d\n",x); }

- 29 -

Introduo Linguagem C

Professor Cludio Renato R. Alves

Desenvolva o fluxograma e a codificao de um programa que leia duas notas digitadas, calcule a mdia aritmtica delas e apresente o resultado, junto com a classificao do aluno de aprovado, reprovado ou em recuperao. Quando aprovado o resultado dever ser apresentado em letras verdes sobre um fundo amarelo. Caso a classificao seja de em recuperao dever ser anunciado em letras amarelas piscantes sobre fundo preto acompanhado de sirene 1,5kHz durante 3s. Estando o aluno reprovado dever ser anunciado em letras vermelhas sobre fundo branco acompanhado de sirene bitonal de 1k e 3kHz durante 3s. Antes de encerrar o programa dever aparecer a opo de

realizar novo clculo?(s/n) .


Mdia acima de 70 = aprovado Mdia inferior a 50 = reprovado Mdia entre 50 a 70 = em recuperao

- 30 -

Lao for for(inicializao;condio;incremento) :Em sua forma mais simples, a


incializao um comando de atribuio que o compilador usa para estabelecer a varivel de controle do loop. A condio uma expresso de relao que testa a varivel de controle do loop contra algum valor para determinar quando o loop terminar. O incremento define a maneira como a varivel de controle do loop ser alterada cada vez que o computador repetir o loop. Ex: #include<stdio.h> main( ) { int x; for(x=1;x<100;x++)printf("%d\n",x); }

ouport(porta,dado),outportb(porta,dado);
Introduo Como a maioria j sabe o computador possui portas de comunicao com o mundo externo, entre estas encontramos Portas de Comunicao serial e a Porta Paralela. A porta paralela no e usada somente como uma impressora, voc pode desenvolver um circuito eletrnico e acopl-lo a essa porta e, atravs de um programa especfico, enviar-lhe sinais digitais para control-lo. Enviando dados para porta paralela outport(porta,dado) Envia uma word(16bits) para uma porta do computador conforme a especificao do endereo . Porta Paralela Lpt1 Lpt2 Lpt3 Endereo 0x378 0x379 0x37A Sentido comunicao Output Input Output / Input

Obs.: A especificao do endereo da porta pode ser feita indiretamente atravs de uma constante a ser declarada atravs da diretiva #define . Exemplo: # include<stdio.h> # include<conio.h> #define lpt1 0x378 int main( ){ outport (lpt1, 0xFFFF); // Todos os bits em nvel alto. } outportb(porta,dado) Envia um byte(8bits) para uma porta do computador conforme a especificao do endereo . Exemplo: # include<stdio.h> # include<conio.h> #define Lpt1 0x378 int main( ){ outportb (lpt1, 0x80); // Apenas o bit7 em nvel alto. return 0;}

Introduo Linguagem C

Professor Cludio Renato R. Alves

ACESSANDO O MUNDO EXTERNO ATRAVS DA PORTA PARALELA Neste circuito temos oito leds conectados em catodo comum, desta forma enviarmos atravs da porta paralela um bit em nvel alto, o led correspondente acender.

Por exemplo: Dado 0xFF Dado 0x00 Dado 0x80 Dado 0x01 Todos Leds acesos Todos Leds apagados Led7 aceso Led0 aceso

Desenvolva o fluxograma e a codificao de um programa que acenda seqencialmente os oito leds ligados a porta paralela com intervalo de 500ms entre cada ativao, e com espaos igual ao tempo ligado.

- 33 -

Desenvolva o fluxograma e a codificao de um programa que acenda seqencialmente leds ligados porta paralela com diferentes intervalos entre cada ativao. Sendo que este programa dever oferecer ao usurio quatro opes de diferentes programas a partir da seguinte tela de abertura. Cada programa dever rodar 10vezes e retornar ao menu de abertura: PROGRAMA DE ACIONAMENTO SEQUENCIAL DE LEDS Digite o intervalo de tempo: ______ Faa a sua opo de programa: 1- programa de acionamento do led0 ao led7 2- programa de acionamento do led7 ao led0 3- programa de acionamento de fora para dentro 4- programa de acionamento de dentro para fora 5- sair

Introduo Linguagem C

Professor Cludio Renato R. Alves

Lendo dados atravs da porta paralela

inport(porta)
L uma word(16bits) de uma porta do computador conforme a especificao do endereo . Porta Paralela Lpt1 Lpt2 Lpt3 Endereo 0x378 0x379 0x37A Sentido comunicao Output Input Output / Input

Obs.: A especificao do endereo da porta pode ser feita indiretamente atravs de uma constante a ser declarada atravs da diretiva #define .

L um byte(8bits) de uma porta do computador conforme a especificao do endereo . Exemplo: # include<stdio.h> # include<conio.h> #define Lpt2 0x379 #define Lpt1 0x378 int main( ) { unsigned int A,b; for(b=1;b<100; b++){ A= inportb(Lpt2); // L o contedo da porta Lpt2 e associa o valor a varivel A gotoxy(25,12); printf(O contedo de Lpt2 0x%X,A); gotoxy(35,16); printf(%d,b); delay(300); } return (0) ;}

inportb(porta)

- 35 -

Lendo o mundo externo atravs da porta paralela


A Porta Paralela, no modo padro, tm cinco entradas. Isso til quando voc precisa capturar sinais do mundo externo para dentro do computador. Como por exemplo, saber se um sensor esta ativo ou no; se um alarme foi disparado, etc.As cinco entradas atravs do conector DB25 so: Ack no pino 10, Busy no pino 11, Paper end no pino 12, Slct out no pino 13 e Error no pino 15. Portanto voc poder enviar para o computador cinco bits de uma s vez. Os bits do byte de STATUS tambm so conhecidos como; S7 (Busy), S6 (Ack), S5 (Paper end), S4 (Slct out), e S3 (Error). A letra S significa registrador de STATUS, e o nmero significa a posio do bit no byte; juntos, formam um nome sugestivo para os sinais. OBS.: Quando o nome de um bit de Status estiver com uma linha em cima, indica que o sinal ser ativo com 0 (zero). __ Ex.: S7(Busy). Usando a funo inportb( ) pode-se ler o registrador de Status da Porta Paralela, e saber se o sinal em um determinado pino est alto ou baixo (0-zero ou 1-um). A funo inportb( ) l um byte atravs da Porta Paralela. Se voc quiser saber se um determinado pino est com o sinal alto ou baixo, ter de converter este byte em binrio para saber o estado do mesmo. Nem todos os bits do byte recebido atravs da funo inportb( ) so vlidos, como so somente cinco as entradas no registrador de Status da Porta Paralela, e cada entrada est relacionada com um bit. Ao ler o registrador de Status, os bits nas posies 0, 1 e 2 no devem ser levados em conta, porque no esto relacionados com nenhum pino do DB25, mesmo assim far parte do byte recebido. A tabela abaixo mostra o significado de cada bit do byte recebido, atravs da funo inportb( ), usando o Circuito abaixo conectado Porta Paralela. Observe que os bits, Ack, Paper end, Slct out e Error, trabalham de maneira normal, diferente de Busy, que s ativado quando tiver um sinal 0 (zero) no pino 11:
__ S7

S6

S5

S4

S3

Paper end

11

10

12

13

15

Byte lido em binrio: Byte lido em Decimal: Byte lido em Hexadecimal:

Error
1

busy

Ack

Descrio/nmero dos pinos:

Slot out

Nenhum pino relacionado nestas posies do byte

1 126 0x7E

Introduo Linguagem C

Professor Cludio Renato R. Alves

Desenvolva o fluxograma e a codificao de um programa que acenda seqencialmente leds ligados porta paralela com diferentes intervalos entre cada ativao. Sendo que este programa dever rodar quatro opes de diferentes programas a partir da leitura dos bits da porta paralela (Lpt2). Cada programa dever rodar 10vezes e retornar ao menu de abertura:

PROGRAMA DE ACIONAMENTO SEQUENCIAL DE LEDS Digite o intervalo de tempo: ______ Deseja executar o programa novamente(S/N)?

- 37 -