Escolar Documentos
Profissional Documentos
Cultura Documentos
Avaliação
Disciplina: Algoritmos & Estruturas de Dados – 1
Professor: Wanderley de Souza Alencar Nota:
Aluno(a): Matrícula:
1ª Avaliação Formal – 2023/2 Data: 28-30/11/2023
INSTRUÇÕES
1. Esta avaliação vale 10,0 (dez pontos) e a nota obtida nela é nomeada de nota da Av-
1, correspondendo a 70% (setenta por cento) da primeira média da disciplina (chamada
de M1). Os 30% (trinta por cento) remanescentes são provenientes da média das notas
obtidas nas Atividades Supervisionadas de números 01, 02 e 03, já aplicadas e entregues;
2. Você pode resolver qualquer quantidade de questões para obter os dez pontos desta ava-
liação;
3. Você somente deve realizar esta avaliação se o seu número de matrícula na UFG, em
2023/2, termina por um numeral ímpar;
4. As resoluções das questões devem ser submetidas ao Sharif Judge System (SJS) utilizado
na disciplina <https://sharif.inf.ufg.br/wanderley> no assignment nomeado de Av1 –
28/11/2023 [ímpar], das 18h50min às 20h20min do dia 28 de novembro de 2023;
Ela quer que você desenvolva um programa de computador que seja capaz de calcular
o valor assumido por um certo polinômio P (x) no ponto x = α, com α ∈ ℜ, sabendo que
o polinômio é de grau n, ou seja, ele é expresso por:
P (x) = a0 · x0 + a1 · x1 + a2 · x2 + · · · + an · xn
n ∈ N, e n < 20
ai ∈ ℜ, i = {0, 1, 2, . . . n}, e ai ∈ [−100.0, +100.0]
Assim, ela poderá, usando o seu programa, corrigir a lista de exercícios de maneira faci-
litada em relação à correção manual.
Você, que tinha sido aluno(a) da professora Eliza Maria, imediatamente aceitou fornecer-
lhe ajuda e foi falar com seu(sua) professor(a) da área de programação na Universidade.
Ele(a), para estimulá-lo(a) a aprofundar seus conhecimentos acerca de recursividade, adi-
cionou à solicitação que o programa a ser elaborado por você seja recursivo. Por
outro lado, auxiliou-lhe dizendo o seguinte:
1. Considere que o programa deverá receber primeiramente os valores de t e n, sendo
que t é o número de “casos de teste” que será utilizado na corrente execução do
programa e n é o grau do polinômio. Ambos valores são números naturais maiores
que zero e devem ser fornecidos numa única linha, nesta ordem, e separados por um
único espaço em branco entre eles;
2. Em seguida, o programa deverá ler os coeficientes do polinômio – a0 , a1 , a2 , . . . , an –
também numa única linha, nesta ordem, e separados por um único espaço em branco
entre eles;
3. Por fim, o programa deverá ler os t valores α, ou seja, α1 para o primeiro caso de
teste, α2 para o segundo caso de teste e, assim, sucessivamente, até ler o αt para
o t-ésimo caso de teste. Novamente a leitura deve ser realizada numa única linha,
nesta ordem, e separados por um único espaço em branco entre eles.
As saídas devem ser impressas, uma por linha, e com uma única casa decimal de precisão.
Exemplo 01:
ENTRADA SAÍDA
32 1.0
1 -2 1 0.0
012 1.0
Exemplo 02:
ENTRADA SAÍDA
53 -22.0
-4 1 -2 1 -8.0
-2 -1 0 1 2 -4.0
-4.0
-2.0
Exemplo 03:
ENTRADA SAÍDA
56 130.0
-12 1 -4 -2 3 -1 1 -10.0
-2 -1 0 1 2 -12.0
-14.0
38.0
Observações:
1. Para ser considerada completamente válida, a solução tem que utilizar o conceito
de recursividade. Se a resolução estiver correta, mas sem o uso de recursividade,
implicará na atribuição de metade de nota, ou seja, 2,5 (dois pontos e meio) à
questão;
2. Se n = 0, então P (x) = a0 .
Questão 02 (4,0 pontos). O número de Neper, frequentemente representado pela letra e
estilizada (em itálico ou outra grafia especial), tem seu nome originado em homenagem ao
matemático escocês John Neper (1550–1617) e designado pelo matemático suíço Leonhard
Euler (1707–1783). Uma das possibilidades é que Euler tenha escolhido a letra por ela
ser a primeira da palavra exponencial (ou exponential, em Inglês).
É incrível descobrir que o número de Neper é uma constante que surge em várias aplicações
científicas, dentre elas ao calcular o limite da sucessão númerica mostrada a seguir:
1 n
e = lim 1 + ≈ 2, 7182818285
n→∞ n
O valor deste limite é um número irracional e transcendente (ou seja: não é solução de
qualquer equação algébrica de coeficientes racionais).
Na Natureza, por exemplo, o número de Neper aparece associado à desintegração radi-
oativa: uma substância radioativa x desintegra-se espontaneamente segundo uma lei de
decrescimento exponencial dada pela expressão a seguir:
mx = m0 · e−k·t
As saídas – valores de m – devem impressas, uma por linha, como números inteiros
desprezando-se a porção decimal. A seguir são fornecidos exemplos para facilitar a com-
preensão da especificação e possíveis resultados da execução do supramencionado pro-
grama.
Exemplo 01:
ENTRADA SAÍDA
3 50
100 0.0228 30 25
100 0.0228 60 6
100 0.0228 120
Exemplo 02:
ENTRADA SAÍDA
5 99
100 0.0001 30 99
100 0.0001 60 98
100 0.0001 120 97
100 0.0001 240 95
100 0.0001 480
Exemplo 03:
ENTRADA SAÍDA
5 118
120 0.0003 30 133
180 0.0050 60 0
250 0.0500 120 0
500 0.0500 240 0
1000 0.0700 480
Questão 03 (10,0 pontos) Um(a) estudante universitário(a) da área de Computação está
estudando o conceito de TAD (Tipos Abstratos de Dados) e, por isso, resolveu desafiar-se
ao encontrar, num website de programação, a seguinte proposta para elaboração de um
programa, na linguagem C, conforme se descreve a seguir:
Como sabe utilizar o programa avaliador denominado Sharif Judge System, o(a) estu-
dante resolveu primeiramente elaborar alguns “casos de teste” antes de implementar o
programa, pois eles o(a) ajudarão a relembrar como é realizado o cálculo de determinan-
tes de matrizes. Eles são os seguintes:
Teste 01:
ENTRADA SAÍDA
2 2.0
12
14
Teste 02:
ENTRADA SAÍDA
3 68.0
2 3 -4
-2 1 2
056
Teste 03:
ENTRADA SAÍDA
4 70.0
2 3 4 -1
0020
3 -1 1 1
-1 0 2 3
Observações:
4. Por fim, para uma matriz quadrada M qualquer, de ordem n, o determinante pode
ser calculado utilizando-se o chamado Teorema de Laplace, que estabelece que:
(a) Deve-se escolher uma fila qualquer da matriz (linha ou coluna) M , digamos que
a linha i seja a escolhida;
(b) O determinante de M é expresso pela seguinte fórmula:
n
X
|M | = ai,j · Ai,j
j=1
sabendo-se que Ai,j = (−1)(i+j) · Di,j e que Di,j é o determinante da matriz que
se obtém eliminando-se a linha i e a coluna j da matriz M .
Note que este determinante – Di,j – é o determinante de uma matriz quadrada
cuja ordem é um a menos que a ordem da matriz M , ou seja, no processo
ocorre uma redução da ordem do determinante a ser calculado, permitindo-se
que o cálculo do determinante de uma matriz de grande ordem, n >>> 1,
seja sucessivamente calculado pelo somatório de determinantes de matrizes com
ordens cada vez menores, podendo-se atingir até mesmo a ordem 1 (um) cujo
cálculo do determinante é imediato.
Observações:
1. Para ser considerada completamente válida, a solução tem que utilizar o conceito
de TAD (Tipo Abstrato de Dados). Entretanto, com o Sharif Judge System não
permite a submissão de dois ou mais arquivos-fontes, você deverá fazer com que o
programa-fonte tenha as seguintes declarações, nesta ordem:
• include de bibliotecas padrões da linguagem C;
• tipos de dados globais que utilizar;
• protótipos das funções concebidas;
• corpo das funções, com seu código;
• função main.
2. A figura a seguir mostra a estrutura geral do programa-fonte:
Questão 04 (3,0 pontos). Seu(Sua) irmão(irmã), que cursa a primeira série do ensino médio,
está com uma grande lista de exercícios de Matemática para resolver e mostrou-lhe a lista.
Você percebeu que há um grande número de exercícios que exigem o cálculo do MDC
(máximo divisor comum) entre três números naturais, sempre menores que 10.000. Ao
invés de calcular manualmente os MDCs de cada uma das questões, você resolveu escrever
um programa C que recebe os três números como entrada e imprime o MDC correspon-
dente. Além disso, para não ter que executar o programa para cada um dos MDCs a
ser calculado, introduziu a ideia de “casos de teste” que já utiliza frequentemente na dis-
ciplina de Algoritmos e Estruturas de Dados - 1 que está cursando no INF/UFG e que
emprega o Sharif Judge System. Portanto, a primeira linha da entrada conterá o número
t, t ∈ N∗ e t < 100, que corresponde ao número de casos de teste para a execução corrente
do programa. A segunda linha da entrada conterá os três números naturais – a, b e c
– cujo MDC deve ser calculado. Por fim, cada uma das linhas da saída deverá exibir o
MDC obtido para o caso de teste correspondente. Veja alguns exemplos a seguir.
Exemplo 01:
ENTRADA SAÍDA
3 1
3 7 11 2
2 8 16 4
16 40 60
Exemplo 02:
ENTRADA SAÍDA
3 3
126 39 42 1
371 426 187 4
88 172 512
Exemplo 03:
ENTRADA SAÍDA
4 1
1727 142 655 2
462 726 338 2
5638 7726 9826 3
729 243 600
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <math.h>
4
5 #define SUCESSO 1
6 #define FALHA −1
7
8 struct nodo {
9 unsigned int chave;
10 float dado;
11 Apontador prox;
12 } Nodo;
13
14 typedef
15 struct Nodo ∗ Apontador;
16
17 Apontador primLista;
(a) criar uma LLSE inicialmente vazia, sendo que a lista deve ser passada como parâmetro
para a função que, por sua vez, deve retornar SUCESSO ou FALHA;
(b) criar uma LLSE que contenha inicialmente um único nó, sendo que a função deverá
receber como parâmetros a lista a ser criada e o nó já preenchidos com os valores
corretos para os seus campos de chave e dado.