[CAPÍTULO 1] - [CAPÍTULO 2] - [CAPÍTULO 3]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6]
Estruturas
Tipos de Dados
Em aulas anteriores dissemos que os TIPOS de DADO podem ser classificados em:- básicos ou primitivos
- compostos ou construídos
Tipos compostos
- Arranjos (matrizes e vetores)
- Ponteiros
- Definidos pelo usuário
- Estruturas
- Uniões
- Enumerações
- Campos de bits
-
typedef
s
Estruturas
Atividade : asciimap
- Crie um projeto C chamado asciimap
- Salve os arquivos abaixo no projeto
/* asciimap.h */ #define LAR_MAX 40 #define ALT_MAX 20 void ler_pontos(char asciimap[ALT_MAX][LAR_MAX]); void imprimir(char asciimap[ALT_MAX][LAR_MAX]);
NOTA : Sobre o uso de ARRANJOS em parametros de funções videL Matrizes e Parâmetros de Funções.
/* asciimap.c */ #include "asciimap.h" void ler_pontos(char asciimap[ALT_MAX][LAR_MAX]) { char opc[10] = "sim"; while( strcmp(opc,"nao") != 0 ) { unsigned short x,y; char c; printf("Ponto:\n"); printf(" x = "); scanf("%hu",&x); printf(" y = "); scanf("%hu",&y); if ( x >= LAR_MAX || y >= ALT_MAX ) { printf("erro: Max x = %hu e Max y = %hu\n", LAR_MAX -1, ALT_MAX -1); continue; } printf(" c = "); scanf(" %c" ,&c); asciimap[y][x] = c; printf("Outro? [sim|nao]\n"); scanf("%s",opc); } } void imprimir(char asciimap[ALT_MAX][LAR_MAX]) { int x,y; for( y=0; y < ALT_MAX; y++ ) { for( x=0; x < LAR_MAX; x++ ) printf("%c",asciimap[y][x]); printf("\n"); } }
/* asciimap-teste.c */ #include "asciimap.h" main() { char map[ALT_MAX][LAR_MAX]; memset(map,' ',LAR_MAX * ALT_MAX); ler_pontos(map); imprimir(map); }
Atividade 2 : retangulo
- crie um projeto C e salve com o nome de retangulo
- crie os arquivos abaixo no projeto retangulo
/* retangulo.h */ #include "asciimap.h" struct ponto { unsigned short x,y; char c; }; struct retangulo { struct ponto ini; unsigned short dx,dy; }; #define min(a,b) ((a) < (b) ? (a) : (b)) void desenhar(char asciimap[ALT_MAX][LAR_MAX], struct retangulo ret);
/* retangulo.c */ #include "retangulo.h" void desenhar(char asciimap[ALT_MAX][LAR_MAX], struct retangulo ret) { int x,xf,y,yf; xf = min(ret.ini.x + ret.dx, LAR_MAX); for ( x = ret.ini.x ; x < xf; x++ ) asciimap[ret.ini.y][x] = ret.ini.c; yf = min(ret.ini.y + ret.dy, ALT_MAX); for ( y = ret.ini.y; y < yf; y++ ) asciimap[y][ret.ini.x] = ret.ini.c; if ( ret.ini.y + ret.dy <= ALT_MAX ) for ( x = ret.ini.x ; x < xf; x++ ) asciimap[yf-1][x] = ret.ini.c; if ( ret.ini.x + ret.dx <= LAR_MAX ) for ( y = ret.ini.y ; y < yf; y++ ) asciimap[y][xf-1] = ret.ini.c; }
/* retangulo-teste.c */ #include "retangulo.h" main() { struct ponto p = {0, 0, '.'}; struct retangulo r = { p, 10, 4 }; struct retangulo r2= { {10,4,'-'}, 10, 10}; char map[ALT_MAX][LAR_MAX]; memset(map,' ', ALT_MAX*LAR_MAX); desenhar(map,r); desenhar(map,r2); imprimir(map); }
Leitura Recomendada
Exercícios
- Estenda o programa da atividade 2 para incluir o desenho de :
- retas (definida por dois pontos distintos; )
- circulos (definido por um ponto central e um raio );
- Escreva uma função que use as mesmas estruturas da atividade 2 para descobrir se um ponto está dentro de um retângulo.
- Defina uma estrutura que permita representar um triângulo, através das coordenadas dos seus vértices. Em seguida, escreva uma função que leia as coordenadas dos vértices de um triângulo e preencha a estrutura definida cujo endereço lhe é passado como parâmetro. Depois, escreva funções que determinem o perímetro e a área de um triângulo representado pela estrutura definida. Por fim, desenvolva um programa de teste de todas as funções criadas.
- Considere que uma empresa precisa armazenar os seguintes dados de um cliente:
- DADOS
- Nome completo com no máximo 50 caracteres;
- renda mensado do cliente;
- ano de nascimento;
- possui ou não carro.
- Defina um tipo e uma estrutura para armazenarem estes dados e escreva um programa que leia estes dados armazene-os em uma variável e em seguida os imprima.
- DADOS
- Considerando a mesma estrutura do exercício anterior, escreva um programa que leia os dados de 100 clientes e imprima:
- quantos clientes têm renda mensal acima da média;
- quantos clientes têm carro;
- quantos clientes nasceram entre 1960 (inclusive) e 1980 (exclusive).
- Considere que foi definida a seguinte estrutura:
typedef struct _frac { int numerador, denominador; } FRACAO;Escreva um programa em C que calcule as quatro operações (+, -, * e / ) usando frações definidas com estruturas do tipo FRACAO. O programa deve ler duas frações e imprimir o resultado de cada uma das quatro operações.
Bibliografia e fonte:
- [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
- LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
- [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
- DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
- Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.
Coloque aqui o seu email