A maior rede de estudos do Brasil

Grátis
120 pág.
ApostilaANSI-C

Pré-visualização | Página 20 de 27

Professora: Rosângela Fátima da Silva 
 
 
87 
 
/*--------------------------------------------------------------------- 
Função: delay 
Descrição: Calcula o tempo de timeout e atualiza resultado na tela 
Entrada: - 
Saída: int - tempo já transcorrido do processo de espera moeda 
---------------------------------------------------------------------*/ 
void delay(time_t delay) 
{ 
time_t outro,tempo = time(NULL); 
 outro=time(NULL); 
while((outro-tempo)<delay) 
 outro=time(NULL); 
} 
 
/***************************************************************************** 
Programa 32 
Este programa verifica a presença da livraria que suporta as 
operações de I/O. Caso ela exista, o programa verifica o estado de 
uma chave, quando ela é ligada um led pisca 5 vezes. 
 
******************************************************************************/ 
 
int main(void) 
{ 
if(init()==-1) 
 return(-1); 
 
short dado,x; 
short end; 
 
/* estabelece o registro de dados como saída (bit 5 do registro 
 de controle igual a zero */ 
end=0x37A; 
dado= inportb(end); 
dado&=0xDF; 
outportb(end,dado); 
dado=inportb(end); 
 
// coloca todos os bits do registro de dados em nível baixo 
end=0x378; 
dado=0x0; 
outportb(end,dado); 
printf("\nLigue a chave"); 
 
// endereço do registro de status 
end=0x379; 
 
// verifica o estado da chave (bit 3 do registro de status) 
do 
{ 
dado = inportb(end); // Espera botão pressionado 
 
}while(!(dado&0x08)); 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
88 
 
end=0x378; 
printf("\nTa piscando"); 
for(x=0; x<5; x++) 
 { 
 // Liga LED 
 dado=0x01; 
 outportb(end,dado); 
 delay(1); 
 // Liga LED 
 dado=0x0; 
 outportb(end,dado); 
 delay(1); 
 } 
printf("\nFim da festa\n"); 
system("pause"); 
 
FreeLibrary(hLib); 
return 0; 
} 
 
9.7 Reescreva o Programa 32 ligando a chave ao bit 7 do registro de Status. 
 
9.8 Reescreva o Programa 32 de tal maneira que quadro leds de um pisca-pisca 
de uma árvore de natal pisquem indefinidamente, quando uma chave é acionada 
eles são apagados e o programa é finalizado. 
 
 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
89 
AULA PRÁTICA 10 
 
 
OBJETIVO: 
 
� Estudar vetores 
 
 
INTRODUÇÃO 
 
Não sei se você se lembra, mas nós já estudamos ema estrutura de dados onde 
podíamos guardar uma seqüência de caracteres. Nessa estrutura armazenava-se 
cada caractere em uma posição de memória. As posições tinham tamanho fixo, 
eram dispostas seqüencialmente e podíamos acessar qualquer uma delas. 
Lembrou-se? São as strings, ou seja, vetores de caracteres. 
 
VETORES 
Vetor é um conjunto de posições de tamanho determinado por um dos tipos de 
dados de C. Variável possui apenas uma posição cujo tamanho é determinado por 
seu tipo de dado. Para se declarar um vetor podemos utilizar a seguinte forma 
geral: 
<tipo_da_variável> <nome_da_variável [tamanho]> 
Quando o compilador C vê uma declaração como essa, ele reserva um espaço na 
memória suficientemente grande para armazenar o número de células 
especificadas em tamanho. Por exemplo, se declararmos: 
int celula[30]; 
O compilador irá reservar 30 células de 32 bits ou 30 células de 4 bytes, ou 120 
bytes que são reservados de maneira contígua. 
Na linguagem C a numeração começa sempre em zero. Isto significa que, no 
exemplo anterior, os dados serão indexados de 0 a 29. Para acessá-los vamos 
escrever: 
celula[0] 
celula[1] 
. 
. 
. 
celula[29] 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
90 
 
Mas ninguém o impede de escrever: 
 celula[30] 
 celula[59] 
Por quê? Porque o compilador C não verifica se o índice que você usou está 
dentro dos limites válidos. Este é um cuidado que você deve tomar. Se o 
programador não tiver atenção com os limites de validade para os índices ele 
corre o risco de ter variáveis sobre-escritas ou de ver o computador travar. Bugs 
terríveis podem surgir. 
Vetores de caracteres 
Strings são vetores de chars. Nada mais e nada menos. As strings são o uso mais 
comum para os vetores. Devemos apenas ficar atentos para o fato de que as 
strings têm como seu último elemento o caractere NULL, que em C é 
representado por: '\0'. A declaração geral para uma string é: 
char nome_da_string [tamanho]; 
Devemos lembrar que o tamanho da string deve incluir o caractere NULL final. 
A biblioteca padrão do C possui diversas funções que manipulam strings. Estas 
funções são úteis pois não se pode, por exemplo, igualar duas strings: 
string1=string2; /* NAO faça isto */ 
Fazer isto é um desastre. Quando você terminar de ler a seção que trata de 
ponteiros você entenderá porquê. As strings devem ser igualadas elemento a 
elemento. 
O fato de todas as strings termirnarem com o caractere NULL permite ao 
programador fazer bom proveito do fato. Veja exemplo a seguir: 
#include <stdio.h> 
#include <stdlib.h> 
 
/***************************************************************************** 
Programa 33 
Este programa iguala duas strings, ou seja, copia os caracteres 
de uma string para o vetor da outra. 
 
******************************************************************************/ 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
91 
 
 
int main () 
{ 
 int cont; 
 char palavra1[15], palavra2[15]; 
 
 // Leitura dos dados 
 printf(“Digite a primeira palavra: ”); 
 gets(palavra1); 
 printf(“\nDigite a segunda palavra: ”); 
 gets(palavra2); 
 
 // A palavra1 que será copiada sobre palavra2 
 for (cont=0;palavra1[cont];cont++) 
 palavra2[cont]=palavra1[cont]; 
 palavra2[cont]='\0'; 
 
 //O programa imprime a palavra2 
 printf(“\nA segunda palavra possui agora o seguinte conteudo: ”); 
 printf(palavra2); 
 
 printf(“\n\n”); 
 system(“pause”); 
 return(0); 
} 
A condição no loop for acima é baseada no fato de que a string que está sendo 
copiada termina em '\0'. Quando o elemento encontrado em str1[count] é o 
caractere '\0', o valor retornado para o teste condicional é falso (nulo). Desta forma 
a expressão que vinha sendo verdadeira (não zero) continuamente, torna-se falsa. 
Vamos ver agora algumas funções básicas para manipulação de strings. Uma 
delas é função gets(), as outras são: 
Strcpy() 
Sua forma geral é: 
strcpy(string_destino, string_origem); 
A função strcpy() copia a string-origem para a string- destino. Seu funcionamento 
é semelhante ao da rotina apresentada no Programa 33. As funções apresentadas 
nestas seções estão no arquivo cabeçalho string.h. A seguir apresentamos um 
exemplo de uso da função strcpy(): 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
 
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS 
Departamento de Ensino do 2o grau - Coordenação de Eletrônica 
Disciplina: Laboratório de Introdução a Programação 
Professora: Rosângela Fátima da Silva 
 
 
92 
/***************************************************************************** 
Programa 34 
Este programa usa a função strcpy() para copiar uma string para o 
vetor da outra. Esta função foi definida no arquivo cabeçalho 
<string.h> 
 
******************************************************************************/ 
int main () 
{ 
 char str1[100],