Você está na página 1de 3

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO – CAMPUS PAU DOS FERROS

BACHARELADO EM TECNOLOGIA DA INFORMAÇÃO


DISCIPLINA: LABORATÓRIO DE ALGORITMOS E ESTRUTURAS DE DADOS I
PROFESSOR: THIAGO RIQUE

LISTA 02
PONTEIROS

Questão 1) Quais serão os valores de x, y e p ao final do trecho de código abaixo:

int x, y, *p;
y = 0;
p = &y;
x = *p;
x = 4;
(*p)++;
--x;
(*p) += x;

Questão 2) Considere o trecho de código abaixo:

int main(void) {
int x, *p;
x = 100;
p = x;
printf(“Valor de p = %p\tValor de *p = %d”, p, *p);
}

Se tentarmos compilar o programa (não o compile ainda), você acha que o compilador nos
fornece alguma mensagem? Se sim, responda:
a) Esta mensagem é de erro ou advertência?
b) Por que o compilador emite tal mensagem?
c) Compile e execute o programa. A execução foi bem sucedida?
d) Modifique o trecho de código acima, de modo que nenhuma mensagem seja emitida
pelo compilador.
e) Compile e execute novamente o programa. A execução foi bem sucedida?

Questão 3) Crie um programa para calcular a área e o perímetro de um hexágono. O seu


programa deve implementar uma função chamada calcula_hexagono que calcula a área e o
perímetro de um hexágono regular de lado l. A função deve obedecer ao seguinte protótipo:
void calcula_hexagono(float l, float *area, float *perimetro); A área e o perímetro de um
hexágono regular são dados, respectivamente, por:
3𝑙2 √3
𝐴 = 𝑃 = 6𝑙
2

Para os cálculos, utilize as funções sqrt e pow do módulo math da biblioteca padrão de C. Em
seguida, crie a função principal do programa e utilize a função calcula_hexagono para calcular a
área e o perímetro de um hexágono de lado l informado pelo usuário.

Questão 4) Qual será a saída exibida pelo programa a seguir:

#include <stdio.h>
int main(void) {
int a, b, c, d;
int *p1;
int *p2 = &a;
int *p3 = &c;
p1 = p2;
*p2 = 10;
b = 20;
int **pp;
pp = &p1;
*p3 = **pp;
int *p4 = &d;
*p4 = b + (*p1)++;
printf("%d\t%d\t%d\t%d\n", a, b, c, d);
return 0;
}

Questão 5) Um ponteiro pode ser usado para dizer a uma função onde ela deve depositar o
resultado de seus cálculos. Escreva uma função hm que converta minutos em horas e minutos.
A função recebe um inteiro mnts e os endereços de duas variáveis inteiras, digamos h e m, e
atribui valores a essas variáveis de modo que m seja menor que 60 e que 60*h + m seja igual a
mnts. Escreva também uma função main que use a função hm.

Questão 6) Escreva uma função mm que receba um vetor inteiro v[0..n-1] e os endereços de
duas variáveis inteiras, digamos min e max, e deposite nessas variáveis o valor de um elemento
mínimo e o valor de um elemento máximo do vetor. Escreva também uma função main que use
a função mm.

Questão 7) (OBI 2016 - Lâmpadas) Você está de volta em seu hotel na Tailândia depois de um
dia de mergulhos. O seu quarto tem duas lâmpadas. Vamos chamá-las de A e B. No hotel há dois
interruptores, que chamaremos de I1 e I2. Ao apertar I1, a lâmpada A troca de estado, ou seja,
acende se estiver apagada e apaga se estiver acesa. Se apertar I2, ambas as lâmpadas A e B
trocam de estado.
As lâmpadas inicialmente estão ambas apagadas. Seu amigo resolveu bolar um desafio para
você. Ele irá apertar os interruptores em uma certa sequência, e gostaria que você respondesse
o estado final das lâmpadas A e B.
Entrada
A primeira linha contém um número N que representa quantas vezes seu amigo irá apertar
algum interruptor. Na linha seguinte seguirão N números, que pode ser 1, se o interruptor I1 foi
apertado, ou 2, se o interruptor I2 foi apertado.

Saída
Seu programa deve imprimir dois valores, em linhas separadas. Na primeira linha, imprima 1 se
a lâmpada A estiver acesa no final das operações e 0 caso contrário. Na segunda linha, imprima
1 se a lâmpada B estiver acesa no final das operações e 0 caso contrário.

Restrições
• 1 ≤ N ≤ 105

Exemplos

Fonte:
CELES, Waldemar; CERQUEIRA, Renato; RANGEL, José Lucas. Introdução a Estruturas de Dados: com técnicas de programação em
C. Elsevier, 2016.
FEOFILOFF, Paulo. Algoritmos em linguagem C. Elsevier Brasil, 2009.
OLIVEIRA, Ulysses de. Programando em C. Editora Ciência Moderna, v. 1, 2008.
OLIMPÍADA BRASILEIRA DE INFORMÁTICA. OBIs Passadas. Disponível em:< http://olimpiada.ic.unicamp.br/passadas/OBI2016>.
Acesso em: 30 de jun. 2017.

Você também pode gostar