Buscar

Gabarito-Tvc1-LabII-2011-3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

UNIVERSIDADE FEDERAL DE JUIZ DE FORA
INSTITUTO DE CIÊNCIAS EXATAS
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
1º TVC de Laboratório de Programação II – 23/09/2011
ALUNO (A) __________________________________________________________________________ Turma:______ 
ATENÇÃO: A prova deve ser feita na linguagem C.
1) Dado o programa abaixo, indique o que será impresso: (30)
int main()
{
 int a = 10, b = 20, c = 30, v[3], *pti, *pti1, *pti2;
 pti1 = &a; //pt1 aponta pra a
 pti2 = &b; //pt2 aponta pra b
 *pti1 = c; //a = c  a = 30
 *pti2 = c; //b = c  b = 30
 pti = v; //pti aponta pra v[0]
 *pti = 1; //v[0] = 1
 *(pti+1) = 2; //v[1] = 2
 *(pti+2) = 3; //v[2] = 3
 printf(">> Teste (1) << \n");
 printf("A: %d, B: %d, C: %d\n", a, b, c);
 printf("V: %d, %d, %d\n", v[0], v[1], v[2]);
 a = *pti + 99; //a = v[0] + 99  a = 1 + 99  a = 100
 v[0] = *pti1 + *pti2; //v[0] = a + b  v[0] = 100 + 30  v[0] = 130
 v[1] = **&pti2; //v[1] = b  v[1] = 30
 *(v+2) = *pti; //v[2] = v[0]  v[2] = 130
 (*pti2)++; //b++  b = 31
 (*(v+1))--; //v[1]--  v[1] = 29
 printf(">> Teste (2) << \n");
 printf("A: %d, B: %d, C: %d\n", a, b, c);
 printf("V: %d, %d, %d\n", v[0], v[1], v[2]);
 return 0;
}
2) Considerando as definições abaixo de uma matriz M (n x m) de elementos reais onde somente os elementos das linhas 
pares são diferentes de zero, desenvolver as funções cria_matriz (cria uma matriz dadas as quantidades de linhas e 
colunas) e consulta (retorna o valor contido na posição relativa aos índices i e j da matriz). Atenção à paridade de n.
M =
m0,0 m0,1 m0,2 ... m0,m
0.0 0.0 0.0 ... 0.0
m2,0 m2,1 m2,2 ... m2,m
0.0 0.0 0.0 ... 0.0
... ... ... ... ...
struct matrizLP
{
 int n, m;
 float *v;
};
typedef struct matrizLP MatLP; //TAD Matriz Linha Par
a) MatrizLP* cria_matriz(int n, int m); (15)
b) float consulta(MatrizLP *mat, int i, int j); (15)
n
a b c v[0] v[1] v[2]
Teste (1) 30 30 30 1 2 3
Teste (2) 100 31 30 130 29 130
UNIVERSIDADE FEDERAL DE JUIZ DE FORA
INSTITUTO DE CIÊNCIAS EXATAS
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
MatrizLP* cria_matriz(int n, int m)
{
 MatrizLP *mat = (MatrizLP *)malloc(sizeof(MatrizLP));
 if(mat == NULL)
 {
 printf("Memória insuficiente!\n");
 exit(1);
 }
 mat->n = n;
 mat->m = m;
 if(n % 2 == 0)
 mat->v = (float *)malloc( n/2 * m * sizeof(float));
 else
 mat->v = (float *)malloc( (n/2 + 1) * m * sizeof(float));
 // ou alternativamente, no lugar do if/else
 // mat->v = (float *)malloc( (n/2 + n%2) * m * sizeof(float));
 return mat;
}
float consulta(MatrizLP *mat, int i, int j)
{
 if(i < 0 || i >= mat->n || j < 0 || j >= mat->m)
 {
 printf("Índice inválido!\n");
 exit(0);
 }
 if(i % 2 == 0)
 {
 int k = (i/2) * mat->m + j;
 return mat->v[k];
 }
 else
 return 0.0;
}
3) Abaixo encontram-se as definições que implementam o TAD Conjunto. Os dados armazenados para representar um 
conjunto de inteiros são um vetor de zeros e uns e o seu tamanho máximo. Cada índice do vetor representa um inteiro. O 
valor 0 representa a ausência desse inteiro no conjunto, e o valor 1 representa a existência do mesmo no conjunto 
(exemplo abaixo). Desenvolver as funções cria_conj_vazio (cria um conjunto vazio de no máximo n elementos), 
insere (insere um elemento no conjunto), pertence (verifica se um elemento pertence a um conjunto) e 
intersecao (cria um conjunto como sendo a interseção de 2 conjuntos).
{1,4,7} = 0 1 0 0 1 0 0 1 0 0 tam = 10
0 1 2 3 4 5 6 7 8 9
struct conjunto
{
 int tam;
 int *v;
};
typedef struct conjunto Conjunto; //TAD Conjunto
a) Conjunto* cria_conj_vazio(int n); (10)
b) void insere(Conjunto *c, int x); (10)
c) int pertence(Conjunto *c, int x); (10)
d) Conjunto* intersecao(Conjunto *c1, Conjunto *c2); (10)
UNIVERSIDADE FEDERAL DE JUIZ DE FORA
INSTITUTO DE CIÊNCIAS EXATAS
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Conjunto* cria_conj_vazio(int n)
{
 int i;
 Conjunto *c = (Conjunto *)malloc(sizeof(Conjunto));
 if(c == NULL)
 {
 printf("Memória insuficiente!\n");
 exit(1);
 }
 c->tam = n;
 c->v = (int *)malloc(n * sizeof(int));
 for(i = 0; i < c->tam; i++)
 {
 c->v[i] = 0;
 }
 return c;
}
void insere(Conjunto *c, int x)
{
 if(x < 0 || x >= c->tam)
 {
 printf("Valor fora dos limites do conjunto!\n");
 exit(0);
 }
 c->v[x] = 1;
}
int pertence(Conjunto *c, int x)
{
 if(x < 0 || x >= c->tam)
 {
 printf("Valor %d fora dos limites do conjunto!\n", x);
 exit(0);
 }
 if(c->v[x] == 1)
 return 1;
 else
 return 0;
}
Conjunto* intersecao(Conjunto *c1, Conjunto *c2)
{
 int n, i;
 Conjunto *c3;
 if(c1->tam < c2->tam)
 n = c1->tam;
 else
 n = c2->tam;
 c3 = cria_conj_vazio(n);
 for(i = 0; i < n; i++)
 {
 if(c1->v[i] == 1 && c2->v[i] == 1)
 c3->v[i] = 1;
 }
 return c3;
}

Continue navegando