• Nenhum resultado encontrado

VERSÃO: 2007 – Atualização 1106 Prof. º Ricardo de Oliveira Joaquim

N/A
N/A
Protected

Academic year: 2019

Share "VERSÃO: 2007 – Atualização 1106 Prof. º Ricardo de Oliveira Joaquim"

Copied!
35
0
0

Texto

(1)

(2)

Índice

Histórico

Principais Características da Linguagem C . . . 03

Compilação . . . 04

Variáveis Inicialização de Variáveis . . . 06

Turbo - C . . . 07

Seqüência de Escape Operadores Aritméticos Operadores Relacionais . . . 08

Operadores Lógicos Operadores de Negação . . . 09

Operadores de Atribuição Operadores Pré e Pós - Fixados Operadores Condicionais . . . 10

While, Do While . . . 11

For . . . 12

Continue Break . . . 13

Switch . . . 14

Gotoxy, funções, chamando Funções .. . . 16

Argumento Função Void . . . 17

Matriz . . . 18

Matrizes Bidimensionais . . . 21

Ponteiros . . . 22

# define . . . 23

# include . . . 23

Arquivos, Abrindo Arquivos . . . 24

Escrevendo e lendo no arquivo . . . 25

Fechando arquivos . . . 26

C - Avançado . . . 28

Círculos, curvas e arcos . . . 31

Preenchimento de Figuras . . . 33

(3)

Histórico

A linguagem ‘C’ foi desenvolvida a partir da necessidade de escrever programas que utilizem os recursos de máquina de uma forma mais agradável e mais portátil que o assembly.

A popularidade da linguagem ‘C’ deve-se exatamente a elegância em conciliar seu poder de programação em baixo nível, com alto grau de portabilidade, que torna os programas escritos em ‘c’ compatíveis,

independentemente da máquina utilizada.

Incorporando conceitos das mais conhecidas linguagens de programação como BASIC, FORTRAN e PASCAL -a lingu-agem ‘c’ derivou-se do ALGOL-68, e foi projet-ad-a em 1972 nos l-abor-atórios BELL, por Bri-an W. Kernigh-an e Dennis M. Ritchie.

BCPL – Nome inicial Linguagem ‘B’

No início ela se chamava BCPL, seu apelido era linguagem ‘B’.

Ela apresentava muitos erros, foi re-escrita, depurada (tirar erros), por Brian e Dennis.

Estrategicamente a equipe de marketing com a idéia da evolução pegou a próxima letra do nome, e foi lançada no mercado e utilizada até hoje como linguagem ‘C’.

Principais características da linguagem ‘C’

a) Alto grau de portabilidade, que permite que seus programas fontes sejam transportados entre máquinas sem maiores problemas.

b) É de uso geral sendo eficiente tanto para programação de utilitários como para sistemas operacionais, editores de texto, banco de dados e sistemas aplicativos em geral.

c) Gera um código objeto executável compacto e rápido em relação a maioria das outras linguagens.

d) Possui em sua síntaxe poucos comandos e muitos operadores.

(4)

Compilação

Consiste em 5 etapas a saber :

1ª - Preparação :

o programa c é preparado mediante a utilização de um editor de texto (turbo-c). Por convenção, o arquivo com programa é designado com extensão ( .c ).

2ª - Compilação :

o compilador toma o programa fonte, interpreta-o de acordo com a linguagem ( regras ) e cria um arquivo em linguagem de máquina.

3ª - Montagem :

o montador (assembler), recebe o arquivo em linguagem assemby e devolve um arquivo em código objeto ( .obj ).

ASSEMBLY = LINGUAGEM ASSEMBLER = MONTADOR

4ª - Linkedição :

o linkeditor examina o código objeto (.obj) e extrai dos arquivos da biblioteca quaisquer rotinas que são requeridas pelo programa. Ele então conecta todas as rotinas de seu arquivo criando o código ( .exe ).

5ª - Execução :

o arquivo pode então ser executado pelo computador mediante a digitação de seu nome seguido do enter. ( roda )

Compilação

roda ( .exe )

( .obj ) maq

( .c )

E L

M C

P

F9

(5)

Programa exemplo :

O programa abaixo permite a digitação de dois números identifica o maior, multiplica-o por dois e exibe na tela.

Início

“Digite um número:”

N1

“Digite outro número:”

N2

N1>N 2

Total:=N1 * 2 Total:=N2 * 2

“O total é:”, Total

Fim

Codificando em Linguagem C

main()

{

int N_1, N_2, TOTAL;

clrscr();

printf("Digite o 1º numero: ");

scanf("%d",&N_1);

printf("Digite o 2º numero: ");

scanf("%d",&N_2);

if(N_1>N_2)

TOTAL=N_1*2;

else

TOTAL=N_2 * 2;

printf("O total é: %d",TOTAL);

delay(500);

(6)

Variáveis

‘C’ suporta a maioria dos tipos comuns para variáveis:

- inteiro (int); - character (char);

- real (ponto flutuante) (float); - real longa (double);

Todas as variáveis necessitam ser declaradas antes de sua utilização. Uma declaração tem a seguinte forma:

Os nomes das variáveis obrigatoriamente devem começar com uma letra ou sublinhado ( ‘A’ à ‘Z’, ‘a’ à ‘z’, ‘_’). O restante do nome pode ser composto por letras, sublinhado ou números. Somente os oito primeiros caracteres são significativos na maioria dos compiladores.

Exemplos:

a) int i; - declara i como sendo uma variável inteira.

b) char c; - declara c como sendo uma variável do tipo caracter. c) float f; - declara f como sendo uma variável do tipo real.

d) double d; - declara d como sendo uma variável do tipo real longa.

Inicialização de variáveis

É opcional na declaração.

Para inicializar uma variável na sua declaração, basta colocar um sinal de igual após o nome da variável seguida do seu valor.

int i; i = 3;

tipo nome-da-variável; ou

tipo nome, nome, nome;

(7)

Turbo - C

1 - Para carregar

- pelo ícone (2x - clique).

-

- windows explorer - tc

- bin - tc.exe

2 - Com o turbo na tela:

A) Sempre configurar a biblioteca:

+

B) Menus importantes:

FILE - ( new, open, save, save as, dos, e quit )

OPTION - ( directories = configurar biblioteca ) C) Teclas importantes:

F2 = para salvar ( use sempre .c ).

F3 = para abrir arquivos já existentes.

F5 = coloca / retira tarja de mensagem.

F6 = alterna arquivos abertos.

ALT + F3 = fecha arquivo aberto.

CTRL + F9 = compila / roda programa.

Passos à seguir:

1 - Carregar o turbo. 2 - Verificar bibliotecas.

3 - Salve com extensão .c e não .cpp 4 - Compile-o.

5 - Volte ao passo 3 ou feche o turbo. Iniciar

FILE EDIT . . . .

TARJA DE MENSAGEM

F5

O

ALT

D

(8)

Seqüência de Escape

Representa caracteres que não podem ser impressos e tenham um significado especial em ‘C’.

SEQÜÊNCIA DE ESCAPE

\n \t \0 \r

CARACTERE REPRESENTADO

Pula linha Tabulação Caracter nulo Retorno carro

Exemplo:

printf(“OI \n TUDO BEM?”); OI

TUDO BEM

Operadores Aritméticos

São os padrões da matemática.

Ou seja, adição, subtração, divisão, multiplicação. São representados por

O valor da divisão de um número inteiro por outro inteiro é truncado. O resto da divisão inteira é fornecida por meio do operador % . Então,

EXPRESSÃO

22/3 22%3

VALOR

7 1

* na divisão de números inteiros, a parte decimal é ignorada, só a parte inteira é aceita.

Operadores relacionais

‘C’, fornece a maioria dos operadores relacionais tal qual as outras linguagens, são eles:

== !=

> >=

< <=

igual a não igual a

maior que maior igual a

menor que menor igual a Pula linha

(9)

O resultado de dois valores conectados por um operador relacional ou será o valor 0 para falso, ou sera o valor 1 para verdadeiro, então:

EXPRESSÃO VALOR

2>3 4==4 12<10

3>1 34>0

0 1 0 1 1

Operadores Lógicos

Os dois operadores lógicos são:

&& ( tab - E ) | | ( tab - OU )

Então:

EXPRESSÃO VALOR

4||3 3&&0

2||0 1&&1

2||3

1 0 1 1 1

Operadores de Negação ( ! )

Inverte o sentido do valor que o segue.

Um valor não zero será convertido para zero, e um valor zero será convertido para um, (valor não zero).

Expressão Valor

!4 !0 !A

0 1

0 se for 1, 1 se for 0 E OU

(10)

Operadores de Atribuição ( = )

O operador copia o valor do lado direito para a variável, ou endereço do lado esquerdo.

i = 3 ; c = b; a = 5;

Operadores pré e pós-fixados

Eles incrementam (++), ou decrementam (- -) uma variável.

Uma operação pré-fixada é realizada antes da utilização do valor da variável. Uma operação pós-fixada é realizada após a utilização da variável.

Se o i = 5, então:

EXPRESSÃO VALOR DE i NA

AVALIAÇÃO VALOR EXPRESSÃO VALOR DE i APÓS AAVALIAÇÃO

5+i++ 5 10 6

5+i-- 5 10 4

++i+5 6 11 6

--i+5 4 9 4

Operadores Condicionais

É uma maneira rápida de escolher um entre dois valores, baseado no valor de uma outra expressão.

Sintaxe:

Exemplo: 32?a:b

Exercícios

a) 39-39 ? 5 : 4

b) 105 ? 12 : 17

c) 100-(50*2) ? 1 : 2

d) √12 ? 3 : 3

e) 1 ? 0 : 3

f ) 23 ? x : y

(11)

While (Enquanto)

Permite a repetição de um comando ou bloco de código até que alguma condição seja falsa, ou a repetição continuará indefinidamente.

Exemplo:

.

i = 0;

while (i<5)

{

printf(“OK”);

i++;

}

i recebe o valor de 0.

A expressão (i<5) é avaliada com verdadeira (1), e o corpo do while é executado 5 vezes, então o próximo comando do programa será executado.

Do While (Faça enquanto)

Se for necessário que a repetição execute pelo menos uma vez utilize o comando do while.

Exemplo: . i = 0;

do

{

printf(“OK”);

i++;

}

while(i<5);

não tem ( ; )

(12)

Laboratório

1 -main()

{

int a, b, c;

clrscr();

gotoxy(35,10);

printf("Tabela - E\n");

gotoxy(32,12);

printf(" && = ");

gotoxy(34,12);

scanf("%d", &a);

gotoxy(39,12);

scanf("%d", &b);

c=(a&&b);

gotoxy(45,12);

printf("%d", c);

getch();

}

For (para)

É o terceiro comando de laço, sua seqüência de operação é como segue: atribuir algum valor inicial a uma variável; executar o corpo de uma repetição; incrementar a variável; se o novo valor for menor que o valor pré-determinado, realizar a repetição novamente.

Sintaxe:

for(exp1;exp2;exp3)

{

comandos;

}

Exemplo:

i=0;

for(i=0;i<5;i++)

{

printf(“OK”);

}

2 - Transformar o programa da tab-E, em tab-OU

gotoxy(col, lin) Vá para a col... lin

não tem ( ; ) exp1 --> Inicialização

exp2 --> Teste

exp3 --> Incremento ou decremento

(13)

Exercícios Laboratório

/* TABELA ASCII */

main() { int a; clrscr(); for(a=0;a<256;a++) {

printf("%d -%c\n", a, a);

delay(300);

}

getch();

}

Continue (continua)

Com o for, o while e do while, às vezes é conveniente ter a possibilidade de não se executar os comandos restantes da repetição e realizar novamente o teste. A instrução continue é um dos comandos que permite isso.

Exemplo:

a = 0;

for(i=0;i<5;i++) { if(i>3)continue; a++; }

Break (quebra)

Ás vezes torna-se necessário quebrar uma repetição sem a realização do restante do mesmo. A instrução break permite isso:

Exemplo:

a = 0;

for(i=0;i<5;i++)

{

if(a>3)break;

a++;

Após fazer o programa TABELA ASCII com o for, faça-o também com o:

- while e depois com o do while

Extra: faça um contador, no centro da tela, utilizando qualquer um dos laços. Este contador tem que exibir até 9999.

0151

Use o gotoxy(col, lin)

Quando o valor de i, for > 3 o comando a++ será pulado, ignorado.

A repetição será executada 5 vezes entretanto o incremento de a, será efetuado 4 vezes. Após o término da repetição, a terá o valor 4.

* quando o comando que antecede o continue for falso, o comando continue fica inoperante.

Quando o valor de a for > 2, o controle será passado para fora da repetição for. O teste ( if (a>2)) será executado 4 vezes. Na saída, a terá o valor de 3, e i também terá o valor 3.

(14)

}

Switch (chave, interruptor)

Se o valor de uma expressão inteira, for testado muitas vezes, a instrução switch, tornará o código mais claro e também mais rápido.

Sintaxe:

switch(expressão inteira)

{

case rotulo 1:

comando 1;

case rotulo 2:

comando 2;

.

.

}

Exemplo:

switch(a)

{

case 1:

printf("Vc escolheu 1");break;

case 3:

printf("Vc escolheu 3");break;

case 18:

printf("Vc escolheu 18");break;

default:

printf("ERRO");

} .

.

Se o a for: Comandos Executados

1 Vc escolheu 1

3 Vc escolheu 3

18 Vc escolheu 18

(15)

PRG - 1 main() { int a,i; clrscr(); a=0; for(i=0;i<15;i++) {

printf("a = %d i = %d\n",a,i);

if (i>10) continue;

a++;

delay(1000);

}

getch();

}

PRG - 3 main()

{

int a;

clrscr();

a=0;

printf("Escolha um nº entre 1 e 5=");

scanf("%d", &a);

switch(a)

{

case 1:

printf("Vc escolheu 1");break;

case 2:

printf("Vc escolheu 2");break;

case 3:

printf("Vc escolheu 3");break;

case 4:

printf("Vc escolheu 4");break;

case 5:

printf("Vc escolheu 5");break;

default:

printf("Oh mane! Não sabe contar?");

}

PRG - 2 main() { int a,i; clrscr(); a=0; for(i=0;i<30;i++) {

printf("a = %d i = %d\n",a,i);

if (a>10) break;

a++;

delay(1000);

}

getch();

(16)

getch();

}

Gotoxy( )

Especifica a posição na tela.

Funções

É uma unidade de código de programa autônomo, desenhada para cumprir uma tarefa particular.

Funções dividem grandes tarefas de computação em tarefas menores e permitem as pessoas trabalharem sobre o que outras já fizeram, ao invés de partir do nada.

Provavelmente a principal razão da existência de funções é impedir que o programador tenha de escrever o mesmo código repetidas vezes.

Suponha que você tenha em seu programa, um parágrafo onde se calcula o quadrado de um nº, se mais adiante no programa, você precisar da mesma instrução, deverá escreve-la novamente. Em vez disso você poderia voltar para uma rotina do código que calcula o quadrado e voltar novamente a mesma posição.

Trabalhando assim, uma simples revisão do código pode ser usada repetidas vezes no mesmo programa.

Chamando Funções

Do mesmo modo que chamamos uma função de biblioteca (printf ( ), scanf ( ), getch ( )), chamamos nossas próprias funções.

Os parênteses que seguem o nome são necessárias para que o compilador possa diferenciar a chamada de uma função de uma variável. Visto que a chamada de uma função constitui uma instrução de programa, deve ser encerrada por ponto-e-vírgula (;)

Entretanto na definição (criação) de uma função, o ponto-e-vírgula (;) não pode se usado.

Programa de Moldura:

main() {

clrscr(); tarja();

printf("\xDB Um programa em Linguagem C \xDB\n"); tarja();

getch(); }

tarja() {

int a;

for(a=0;a<30;a++) {

printf("\xDB"); }

printf("\n"); gotoxy(coluna, linha) ;

Legenda: \xDB = Tarja ( );

(17)

}

Argumento

O mecanismo usado para transmitir informações para uma função, é chamado argumento.

Programa exemplo:

Este programa chama várias vezes a função (BAR), que recebe um argumento e desenha uma barra horizontal do tamanho do valor do argumento recebido.

main()

{

clrscr();

printf("Julia \t");

bar(35);

printf("Oscar \t");

bar(41);

printf("Helena \t");

bar(19);

printf("Vic \t");

bar(31);

printf("Naur \t");

bar(15);

getch();

}

bar(pontos)

int pontos;

{

int a;

for(a=0;a<pontos;a++)

printf("\xCD");

printf("\n");

}

Função Void

Toda função retorna algum valor, quando retorna um valor int, ela pode ser declarada como inteira.

Já as funções que não retornam nada, são definidas pelo comitê de padronização da linguagem ou American National Standard Institute ( ANSI ), como sendo do tipo void.

bar (argumento)

função

Legenda:

(18)

Matriz

São grupos de variáveis de mesmo tipo. Colchetes ( [ e ] ), são utilizados para definir e indexar matrizes. A sintaxe para uma declaração de matriz é:

Exemplo:

int net[5];

Declara net, como uma matriz de cinco elementos.

Os elementos individuais da matriz podem ser referenciados como:

net[0] --> primeiro elemento net[1] --> segundo elemento .

.

net[4] --> último elemento

Note que, o índice começa em 0 ao invés de 1. Uma matriz pode ser inicializada em uma declaração por meio de um conjunto de chaves { }, delimitando os valores dos elementos.

Exemplo: 1

-int net[5] = {2,5,7,14,18};

main()

{

clrscr();

gotoxy(5,10);

printf("O valor do índice 4=%d", net[4]);

getch();

}

2

-int net[5] = {2,5,7,14,18};

main()

{

clrscr();

net[2] = net[0] + net[4];

gotoxy(5,10);

printf("net[2] = %d", net[2]);

tipo nome_da_matriz[tamanho]; a --> variávela( ) --> função

(19)

getch();

}

3 - Faça com que o 1º PROG execute automaticamente, exibindo todos os conteúdos, de todos os índices.

Exemplo: net[0] = 2

net[1] = 5

net[2] = 7

net[3] = 14

net[4] = 18

Exercicios de Matrizes

1 - Identifique as matrizes:

a - int dp[5];

b - int pai[3];

c - char cha[2];

d - pt[4];

e - float tatu[19];

2 - Dadas as matrizes abaixo, coloque os valores dos elementos requeridos.

a) int dp[5] = {2, 4, 6, 8, 10}; b) int pd[5] = {10, 5, 4, 8, 1}; c) int lua[7] = {1, 2, 3, 4, 5, 6, 7};

Obs: 1 - Use o for

2 - No centro da tela

a - dp[3] = b - pd[3] = c - lua[6] =

(20)

3 - Dada a representação das matrizes, coloque sua declaração / identificação.

a -

b -

c -

4 - Dada as matrizes, represente-as:

a) int ano[10] = {1,2,9,3,0,4,8,6,5,7};

b) char dia[8] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’};

c) int bim[6] = { 4,9,5,1,2,7};

5 - Faça um programa que execute automaticamente, exibindo todos os valores dos respectivos índices. Use o for. Matriz do item C exercício 4.

‘A’ ‘B’ ‘C’ ‘D’ mane

3 0 2

teco

7 3 2 0

bola

(21)

Matrizes Bidimensionais

Matrizes podem ter mais que uma dimensão.

Exemplo:

int dp[6][5];

Declara dp como uma matriz de inteiros de 2 dimensões.

Exemplo:

int dp[6][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}, {26,27,28,29,30}}; EXPRESSÃO VALOR dp[2][3]; dp[5][0]; dp[2][2]; dp[4][1]; dp[5][5]; pd[1][3]; dp[0][3]; 14 26 13 22 Não existe ? 4 Programas

1 - char ric[5][4]={"Ric", "Osc", "Jul", "Vic", "San"}; main()

{

int a; clrscr();

for(a=0;a<5;a++)

printf("ric[%d] - %s\n", a, ric[a]); getch();

}

char ric[5][4]={"Ric", "Osc", "Jul", "Vic", "San"}; 2 - main()

{ int a; clrscr(); printf("%c", ric[2][0]); getch(); }

(22)

Ponteiros

Apontadores ou Pointer ou simplesmente ponteiros são variáveis que contém o endereço de uma outra variável. Ele utiliza o asterisco ( * ) para a definição de uma variável como ponteiro.

Sintaxe:

tipo *nome-da-variável;

Exemplo:

int *pj; --- pj é uma variável ponteiro para variáveis int. float *pq; --- pq é uma variável ponteiro para variáveis float.

O Operador endereço ( & ) aplicado a uma variável fornece o endereço daquela variável.

Exemplo:

int i = 5; int *pj; . . . pj = &i;

Exemplo:

/* ponteste.c */

/* Faz um teste de funcionamento de ponteiros */

char vet1 [10] = "RICARDO"; main ()

{

char *ric; clrscr(); ric = vet1;

while (*ric != '\0') {

printf ("%c = ",*ric); /* mostra o conteúdo do índice *ric */ printf ("%d = ",ric-vet1); /* mostra o índice do vetor */

printf ("%d = ",ric); /* mostra o valor de memória do índice */ printf ("%d \n",&ric); /* mostra o endereço do ponteiro*/

ric ++; }

getch(); }

Coloca o endereço de i em pj. Exemplo da disposição destas variáveis na memória:

Variável Endereço Valor no endereço

(23)

# define

Apontadores ou Pointer ou simplesmente ponteiros são variáveis que contém o endereço de uma outra variável. Ele utiliza o asterisco ( * ) para a definição de uma variável como ponteiro.

# include

Apontadores ou Pointer ou simplesmente ponteiros são variáveis que contém o endereço de uma outra variável. Ele utiliza o asterisco ( * ) para a definição de uma variável como ponteiro.

Resultado do programa:

C:\> ponteste

R = 0 = 154 = -15 I = 1 = 155 = -15 C = 2 = 156 = -15 A = 3 = 157 = -15 R = 4 = 158 = -15 D = 5 = 159 = -15 O = 6 = 160 = -15

vet1 = 10 posições

‘R’ ‘I’ ‘C’ ‘A’ ‘R’ ‘D’ ‘O’ ‘\0’

154 160

* Existe um caractere chamado NULL ou ‘ \0 ‘ que indica o término para os apontadores, isso ajuda em muito sua programação.

Basicamente, um ponteiro é uma representação simbólica de um endereço. São fundamentais na manipulação de matrizes.

Em resumo:

O nome do ponteiro retorna o endereço para o qual ele aponta. ( posições de memória ).

O operador & junto ao nome do ponteiro retorna o endereço do ponteiro.

O operador * junto ao nome do ponteiro retorna o conteúdo da variável apontada.

No Programa

ric = posição memória. *ric = conteúdo vetor. &ric = endereço onde está a variável ric.

printf(“%d=”, ric –vet1) = índice do vetor.

0 1 2 (154 – 154 = 0 ..) (155 – 154 = 1 ..)

(24)

Arquivos

A linguagem ‘C’ trata os arquivos de duas formas :

- Entrada e saída em alto nível ou “bufferizada”

- Entrada e saída em baixo nível ou “não bufferizada”

O termo não bufferizada vem do fato de a transferência de dados ser feita, diretamente entre arquivo e programa, enquanto que no caso da bufferizada, esse processo é feito através de “buffers”.

Os termos alto nível e baixo nível nada tem haver com a qualidade dos tipos. Na realidade, estes termos referem-se mais ao fato das funções utilizadas por um ou outro tipo, que podem estar mais ligadas à máquina ou não.

Existem 2 tipos possíveis de acesso a arquivos :

- seqüencial (é realizado através de um indicador corrente)

- aleatório (é feito através de funções, que alteram a posição corrente do indicador de posição)

Abrindo arquivos

Existem várias maneiras de se abrir arquivos em ‘C’, exemplo:

fptr = fopen(“arqtext.txt”, “w”);

fopen ( ) abre arq. para ser utilizado ( alto nível ).

open ( ) abre arq. para ser utilizado ( baixo nível ). 1 – Nome do arquivo

2 – Onde guardar as informações

3 – Tipo de abertura

¹

(25)

O nome do arquivo também aceita o caminho completo ou drive desejado como (c:\ric\c\arqtext.txt).

A função fopen( ) retorna um ponteiro para a estrutura FILE, onde estão guardadas as informações sobre o nosso arquivo, que será armazenado na variável fptr declarada como ponteiro para o tipo File.

O “w” é um dos 3 tipos que podemos especificar para a abertura de um arquivo.

“r” leitura “w” gravação “a” adicionar dados.

“r” abrir um arq. texto para leitura. O arquivo deve estar presente ( existir ).

“w” abrir um arq. texto para gravação. Se o arquivo estiver presente ele será destruído e reinicializado. Se não existir, ele será criado.

“a” abrir um arq. texto para gravação. Os dados serão adicionados ao fim do arquivo existente, ou um novo arquivo será criado.

“r+” abrir um arq. texto para leitura e gravação. O arquivo deve existir e pode ser atualizado.

“w+” abrir um arq. texto para leitura e gravação. Se o arquivo existir ele será destruído e reinicializado. Se não existir, será criado.

“a+” abrir um arq. texto para atualizações e para adicionar dados ao fim do arquivo existente ou um novo arquivo será criado.

Escrevendo e lendo no arquivo (Manipulação)

Uma vez estabelecida a linha de comunicação com um arquivo, podemos escrever nele.

putc( ) – escreve um caractere num arquivo ( A. N ) getc( ) – lê um caractere de um arquivo ( A. N ) fputs( ) – escreve uma linha num arquivo ( A. N ) fgets( ) – lê uma linha do arquivo ( A. N )

read( ) – leitura de dados ( B. N ) write( ) – escrita de dados ( B. N )

Parecido com UNIX

(26)

Fechando arquivos

Quando terminamos a gravação do arquivo, precisamos fechá-lo.

fclose( ) fecha um arquivo ( A. N ) close( ) fecha arquivos ( B. N )

Fechar um arquivo implica dizer que qualquer caractere que estiver o buffer ( área de memória ) é gravado no disco. Assim, o programa força o buffer a ser gravado no disco quando o arquivo é fechado.

Fechar um arquivo, também é liberar as áreas de comunicação usados, para que estejam disponíveis a outros arquivos.

Uma outra função que fecha arquivos é exit( ). Ela fecha todos os arquivos abertos, e também termina o programa devolvendo o controle ao S. O, e o fclose( ) simplesmente fecha o arquivo associado ao ponteiro FILE usado como argumento.

De um modo geral, os arquivos em disco devem obedecer a seguinte seqüência :

- abertura do arquivo (fopen( ) / open( ) )

- leitura / escrita (putc( ) / getc ( ) / fputs ( ) / fgets ( ) read ( ) / write ( ) )

- fechamento do arquivo (fclose( ) / close( ) )

Exemplo - GRAVAÇÃO :

O exemplo a seguir grava “strings” num arquivo, usando fputs( ).

/* arqgrava.c */

/* grava strings digitados no teclado, no arquivo */

#include <stdio.h> main()

{

FILE *fptr; char string[81]; clrscr();

fptr = fopen ("c:\TESTE.TXT","w"); while (strlen(gets(string))>0) {

fputs (string,fptr); fputs ("\n",fptr); }

(27)

Exemplo - LEITURA

A função fgets( ) é o complemento de fputs( ), isto é, fgets( ) lê uma linha por vez de um arquivo texto.

/* lê.c */

/* lê strings do arquivo e mostra-os na tela */

#include <stdio.h> main()

{

FILE *fptr; char string[81]; clrscr();

fptr = fopen ("c:\TESTE.TXT","r"); while (fgets(string,80,fptr) != NULL) printf ("%s",string);

fclose (fptr); getch();

(28)

C – Avançado

Revisão de termos

Os termos abaixo serão usados freqüentemente, portanto, você deve estar completamente familiarizado com eles.

Código Fonte

O texto que um usuário pode ler; normalmente interpretado como programa. O código-fonte é a entrada para o compilador ‘C’.

Código objeto

Tradução do código-fonte de um programa em código de máquina que o computador pode ler e executar diretamente. O código-objeto é a entrada para o linkeditor.

Linkeditor

Um programa que une funções compiladas separadamente em um programa. Ele combina as funções da biblioteca C padrão com o código que você escreveu. A saída do linkeditor é um prg. Executável.

Biblioteca

O arquivo contendo as funções padrão que seu programa pode usar. Essas funções incluem todas as operações de E/S como também outras rotinas úteis.

Tempo de Compilação

Os eventos que ocorrem enquanto o seu programa está sendo compilado. Uma ocorrência comum em tempo de compilação é um erro de sintaxe.

Tempo de execução

(29)

DEF : ANSI : American National Standards Institute – Comitê de Padronização da Linguagem

Apesar do padrão ANSI ‘C’ não definir funções de telas gráficas ou de texto, elas são importantes para a maioria dos trabalhos de programação atual. O padrão ANSI não define essas funções em razão das grandes diferenças entre as capacidades e interfaces dos diferentes tipos de hardware. Inclusive os compiladores projetados para o mesmo ambiente normalmente implementam as funções gráficas e de texto de forma bastante diferente. As funções gráficas que veremos são da Microsoft-C versão 5.1 e 6.0. As funções vistas em outros compiladores podem ser diferentes, mas os princípios são semelhantes.

Os protótipos para as funções gráficas e de texto da Microsot-C estão contidos em GRAPH.H, justamente com os diversos modos de vídeo disponíveis para a linha PC. Vocênecessita dessa informação auxiliar para entender certas funções gráficas.

Como você provavelmente sabe, há diversos tipos de adaptadores de vídeo atualmente disponíveis para PC’s. os mais comuns são:

- CGA ( Adaptador Gráfico Colorido )

- EGA ( Adaptador Gráfico Estendido) e

- VGA ( Matriz Gráfica de Vídeo ).

Juntos estes adaptadores suportam diversos modos diferentes de operação em vídeo.

Alguns modos são para texto e alguns para gráficos. Em um modo texto, apenas texto pode ser apresentado. Em um modo gráfico, tanto texto como gráfico podem ser apresentados.

Menor parte da tela endereçável pelo usuário no modo texto é um caractere. A menor parte de sua tela endereçável pelo usuário em um modo gráfico é um pixel.

Na verdade, o termo pixel referia-se, originalmente, só ao menor elemento individual de fósforo em um monitor de vídeo que podia ser energizado individualmente pelo feixe de varredura. No entanto, o termo foi generalizado para se referir ao menor ponto endereçável de um visor gráfico.

Em um modo texto, as posições individuais dos caracteres na tela são referenciadas pelo número de linha e de coluna. Em um modo gráfico, os pixels individuais são referenciados por suas coordenadas x, y, sendo x o eixo horizontal.

(30)

No modo de 16 cores da EGA/VGA, uma paleta consiste em 16 cores selecionadas entre 64 possíveis. Os valores default são mostrados a seguir:

Exemplo:

Programa teste cor. Este programa visa o desenvolvimento de textos coloridos.

#include <conio.h> #include <dos.h> main ()

{

int i; clrscr();

for (i=0;i<16;i++) {

textcolor(i); gotoxy(5,i+1);

cprintf("RIC - %d",i); delay(500);

}

delay(3000); }

Textcolor( i )

Seleciona uma cor específica ( i ) no modo texto.

Textbackground ( i )

Seleciona uma cor de fundo ( i ) no modo texto.

(Para mudar as cores no Turbo-C)

COR VALOR

PRETO 0

AZUL 1

VERDE 2

CIANO 3

VERMELHO 4

MAGENTA 5

MARRON 6

CINZA CLARO 7

CINZA ESCURO 8

COR VALOR

AZUL CLARO 9

VERDE CLARO 10

CIANO CLARO 11

VERMELHO CLARO 12

MAGENTA CLARO 13

AMARELO 14

BRANCO 15

Modo PISCANTE 128

PARA MUDAR AS CORES NO TURBO-C

<ALT + O> ENVIRONMENT COLORS

(31)

NOTA: Para utilizar estas funções, não esqueça de usar o #include<CONIO.>. Elas usam saída direta para vídeo, por isso use a função específica (cprintf) para obter o resultado desejado.

cprintf( )

Envia uma saída formatada ( específica “colorida” ) para a tela.

cprintf usa <CONIO.H>, e não entende o caractere Escape linefeed (\n), para ter este efeito utilize o retorno do carro (\r) junto. Exemplo: ( \r\n ).

Círculos, curvas e arcos

As curvas são as figuras mais difíceis de criar, pois requerem cálculos relativamente complexos para determinar os pontos que as compõem. As funções circle, ellipse e arc são de grande conveniência na criação de figuras curvas.

Circle( )

A função circle( ) desenha um arco completo de 0º à 360º, o raio é especificado em pixels e é centralizado nas coordenadas de tela fornecidas.

Exemplo:

#include<graphics.h> int x, y, raio;

circle (x, y, raio);

Arc( )

A função arc( ) desenha uma curva circular. Com o raio especificado, entre os ângulos determinados e centralizada nas coordenadas x e y fornecidos.

Exemplo:

#include<graphics.h> int x, y, inicio, fim, raio; arc(x, y, iicio, fim, raio);

Ellipse( )

A função ellipse( ) é similar á função arc( ), exceto pelo fato de que são especificados, em separado, raios para os eixos x e y.

Exemplo:

#include<graphics.h>

int x, y, inicio, fim, raio-x, raio-y); ellipse (x, y, inicio, fim, raio-x, raio-y);

OBS) Não esqueça de copiar o arquivo EGAVGA.BGI para o diretório corrente. Configurar a parte gráfica no turbo: OPTIONS

LINKER

(32)

Programa exemplo de Círculo:

#include <graphics.h> #include <conio.h>

main() {

int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "");

/* desenhando o círculo */

circle(x, y, raio); /*COLOCAR VALORES */

getch();

}

Programa exemplo de Arco:

#include <graphics.h> #include <conio.h>

main() {

int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "");

/* desenhando o arco */

arc(x, y, inicio, fim, raio); /*COLOCAR VALORES */

getch();

}

Programa exemplo de Elipse:

#include <graphics.h> #include <conio.h>

main( ) {

int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "");

/* desenhando uma elipse */

ellipse(x, y, inicio, fim, raio_x, raio_y); /*COLOCAR VALORES */ getch();

(33)

Preechimento de Figuras

Veremos agora como preencher as figuras com cores específicas:

Fillellipse( )

Desenha uma elipse utilizando xcentro, ycentro, como ponto central e x-raio como os eixos horizontal e vertical, preenchendo-a.

Exemplo:

#include<graphics.h> int x, y, x-raio, y-raio;

fillellipse ( x, y, x-raio, y-raio);

Sector( )

Cria um arco elíptico, desenha linhas a partir dos pontos finais até o ponto central e, por fim, preenche a figura por completo.

Exemplo:

#include<graphics.h>

int x, y, inicio, fim, x-raio, y-raio; sector (x, y, inicio, fim, x-raio, y-raio);

Programa de Preenchimento de Elipse:

#include <graphics.h> #include <conio.h>

main() {

int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "");

for (i=0;i<15;i++) {

setfillstyle(SOLID_FILL,i);

fillellipse(meio_x,meio_y,x_raio,y_raio);/*COLOCAR VALORES */ delay(300);

}

(34)

Setfillstyle( )

Determina o padrão e a cor de preenchimento.

Exemplo:

#include<graphics.h>

setfillstyle(SOLID_FILL, 14 ); /* MAIÚSCULO OBRIGATORIAMENTE */

Observe que as cores para fill (preenchimento) e para drawing (desenho) são separadas e podem ter valores diferentes. Os padrões de preenchimento estão definidos em graphics.h, conforme mostrado na tabelaabaixo :

Polígonos

Drawpoly( )

Desenha a linha externa (contorno) de um polígono.

Programa de Preenchimento de DrawPoly:

#include <graphics.h> #include <conio.h>

main() {

int gdriver = DETECT, gmode,pontos;

int desenho []={ 10,300, 600,10, 600,450, 400,300, 10,300};

pontos=sizeof(desenho)/(2*sizeof(int));

initgraph(&gdriver, &gmode, "");

getch();

/* desenhando o poligono */ drawpoly(pontos, desenho);

getch();

}

(35)

Sizeof

Retorna o tamanho em bytes da expressão dada.

O drawpoly( ) trabalha com as coordenadas (x,y) em cada ponto, no programa acima temos 5 coordenadas:

Y . 250

X . 300 600,450

Fillpoly( )

A função fillpoly( ) desenha a linha de contorno de um polígono com a cor padrão, e preenche o polígono utilizando os padrões de fundo e de preenchimento corrente ( branco ).

Exemplo:

#include<graphics.h> setfillstyle(SOLID_FILL, i); fillpoly(pontos, desenho);

THE END (Feliz Natal e um Maravilhoso ano Novo)

x y 400,300 10,300

x y 10,300

Referências

Documentos relacionados

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1

Os maiores coeficientes da razão área/perímetro são das edificações Kanimbambo (12,75) e Barão do Rio Branco (10,22) ou seja possuem uma maior área por unidade de

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Educação e trabalho: o trabalho docente como formação científico-pedagógica na Licenciatura Plena Parcelada da Universidade Estadual de Goiás – Brasil.. Aveiro:

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

A partir da discussão teórico-crítica realizada no ponto anterior, percebe-se que, na era da globalização, os impactos da fluidez, da rapidez e da aceleração são sentidos

Observe que ponteiros são utilizados para modificar meus dados dentro da função, atribuindo valores utilizando o operador seta.. Para ler os dados, basta chamar

Quando dentro de um programa o usuário faz referência à uma variável, o computador automaticamente sabe onde está localizada esta variável dentro da sua memória (o que de certa