Você está na página 1de 6

Universidade Católica de Angola

Faculdade de Engenharia
Correção da Prova de Frequência de Técnicas de Programação

2º Ano Data – 11 –Dezembro – 2023 Duração : 03:00 horas

1º Questão [5 pontos]
Por definição, dizemos que uma sequencia de número inteiros contém um pico,
se e somente se, os seus elementos estão em ordem descente até um
determinado elemento e a partir desse elemento estão em ordem decrescente.
Por exemplo:

1 2 3 4 5 6 5 4 3 2 3 4 7 5 2 1
↑ ↑
Pico Pico

Desenvolva uma função recursiva com o paradigma de Decrementar para


Conquistar, que entre outros parâmetros, recebe um vector A com uma sequencia
de números inteiros, e o número de elementos inseridos nesse vector. Retorne o
número de picos que essa sequencia contém.

Exemplo:

A = {1 2 3 4 8 6 5 4 2 1 0 } => 1

A= {1 -1 0 2 3 4 5 6 5 4 3 2 3 4 7 5 2 1} => 2

A = {1 2 3 4 5 6 7 8 } => 0

Resolução

int nPicos (int A[ ], int nElem, int i)


{
if ( i >= nElem) return 0;
if ( A[i -1] < A[i] && A[i] > A[i +1])
return 1 + nPicos (A, Nelem i+1);
return 0 + nPicos (A, nElem, i+1);
}

Vamos escrever em seguida uma função equivalente mais compacta.

Av. Pedro de Castro Van-Dúnem Loy 24, Luanda, Angola


C.P 2064 Tel. (+244) 222 010 916 Fax. (+244) 222 010 918
Universidade Católica de Angola
Faculdade de Engenharia
Correção da Prova de Frequência de Técnicas de Programação

2º Ano Data – 11 –Dezembro – 2023 Duração : 03:00 horas

int nPicos (int A[ ], int nElem, int i)


{
if ( i >= nElem-1) return 0;
return ( A[i -1] < A[i] && A[i] > A[i +1]) + nPicos (A, Nelem i+1);
}

Chamada

int nElem, totPicos;

if vazia(A)
printf (“\n ERRO: Lista Vazia”);
else
{
nElem = Tamanho (A);
if ( NElem < 2 )
printf (“ERRO: o vactor nao possui dois elementos “);
else
totPicos = nPicos ( A, NElen, 1);

Av. Pedro de Castro Van-Dúnem Loy 24, Luanda, Angola


C.P 2064 Tel. (+244) 222 010 916 Fax. (+244) 222 010 918
Universidade Católica de Angola
Faculdade de Engenharia
Correção da Prova de Frequência de Técnicas de Programação

2º Ano Data – 11 –Dezembro – 2023 Duração : 03:00 horas

2º Questão [ 5 Pontos]
Desenvolva um procedimento iterativo que recebe como parâmetros um vector A
de números inteiros, o número de elementos inseridos, e um determinado número
x também inteiro. Suponha que os elementos do vector A estão ordenados em
ordem crescente. Insira o valor x nesse vector de tal forma que a ordem dos seus
elementos seja preservada. Este procedimento deve verificar se as condições
para inserir esse elemento estão criadas.

Exemplo:

A = {1 2 4 5 7 18 } X = 8 => A = {1 2 4 5 7 8 18 }

Resolução

void inserirOrdem ( int A[ ], int *nELem, int x )


{
int pos, i;
if ( vazia(A) )
printf (“\n ERRO: vector vazio”);
else
{
for ( pos = 0; pos <= *nElem && A[pos] <= x; pos++);
for ( i = *nElem; i >= pos; i--)
A[i +1] = A[i];
A[pos] = x;
*nElem ++;
}
}

Vamos melhorar este procedimento. Só devemos inserir o elemento se o vector


não possuir um elemento com o mesmo valor, queremos com isso dizer que o
vector não deve possuir elementos

Av. Pedro de Castro Van-Dúnem Loy 24, Luanda, Angola


C.P 2064 Tel. (+244) 222 010 916 Fax. (+244) 222 010 918
Universidade Católica de Angola
Faculdade de Engenharia
Correção da Prova de Frequência de Técnicas de Programação

2º Ano Data – 11 –Dezembro – 2023 Duração : 03:00 horas

void inserirOrdem ( int A[ ], int *nELem, int x )


{
int pos, i;
if (vazia(A))
printf (“\n ERRO: vector vazio”);
else
{
for ( pos = 0; pos <= *nElem && A[pos] <= x; pos++);
if ( A[pos] == x)
printf ( “\n ERRO Elemento já inserido”);
else
{
for ( i = *nElem; i >= pos; i--)
A[i +1] = A[i];
A[pos] = x;
*nElem ++;
}
}

Av. Pedro de Castro Van-Dúnem Loy 24, Luanda, Angola


C.P 2064 Tel. (+244) 222 010 916 Fax. (+244) 222 010 918
Universidade Católica de Angola
Faculdade de Engenharia
Correção da Prova de Frequência de Técnicas de Programação

2º Ano Data – 11 –Dezembro – 2023 Duração : 03:00 horas

3º Questão [ 5 Pontos]
Desenvolva uma função recursiva com o paradigma de Decrementar para
Conquistar que entre outros parâmetros recebe duas cadeias de caracteres. A
primeira, denominada por MAI que contém uma palavra com letras maiúsculas, a
segunda denominada por MIN que contém uma palavra com letras minúsculas.
Essas cadeias de caracteres possuem o mesmo número de caracteres. Verifique
se gramaticalmente a palavra em letras musculas e a palavra em letras
minúsculas são iguais. OBS: não pode utilizar as funções bibliotecas.

Exemplo:

MAI = {ZUNGUEIRA} MIM = {zungueira} => 1


MAI = {PEDREIRO} MIN = {pEdreiRo} => 0

Resolução

int MyCompare ( char Mai[ ], char Min[ ], int i)


{
if ( Mai[i] == NULL ) return 0
return ( ( convert (Mim[i]) == Mai[i] ) + MyCompare ( Mai, Min, I + 1);

onde

char convert ( char c)


{
if ( c >= ‘a’ && c <= ‘z’) c += ‘A’ – ‘a’
return c;
}

Av. Pedro de Castro Van-Dúnem Loy 24, Luanda, Angola


C.P 2064 Tel. (+244) 222 010 916 Fax. (+244) 222 010 918
Universidade Católica de Angola
Faculdade de Engenharia
Correção da Prova de Frequência de Técnicas de Programação

2º Ano Data – 11 –Dezembro – 2023 Duração : 03:00 horas

4º Questão [5 Pontos]
Desenvolva um procedimento iterativo que recebe como parâmetro um vector de
inteiros, denominado por chuvaDia, totalmente preenchido, que contém 366
elementos que representam o número de dias do ano. Cada elemento desse
vector, contêm um número entre 1 a 300 que representa a quantidade de chuva
que caiu num determinado dia em milímetros. Retorne um vector, totalChuva com
60 elementos do tipo inteiro, em que cada elemento possui a seguinte informação:

1º elemento = Quantidade de dias com chuva entre 1 a 5 milímetros;


2º elemento = Quantidade de dias com chuva entre 6 a 10 milímetros;
3º elemento = Quantidade de dias com chuva entre 11 a 15 milímetros;
4º elemento = Quantidade de dias com chuva entre 16 a 20 milímetros;
5º elemento = Quantidade de dias com chuva entre 21 a 25 milímetros;
;
…..

60º elemento = Quantidade de dias com chuva entre 296 a 300 milímetros;

OBS: não pode utilizar o comando condicional.

Resolução

void CalculaTotais ( int ChuvaDia [ ], int totalChuva[ ] )


{
for ( int i, i = 1 ; i <= 366; i + 1 )
Totalchuva[chuvaDia[i] / 5] += ChuvaDia[i];
}

Chamada

int i, totalChuva [60], chuvaDia[366];


...

for ( i = 0, i <= 60, i ++ ) totalChuva[i] = 0;


CalculaTotais (ChuvaDia, TotalChuva);
ImprimeTotais (TotalChuva);

Av. Pedro de Castro Van-Dúnem Loy 24, Luanda, Angola


C.P 2064 Tel. (+244) 222 010 916 Fax. (+244) 222 010 918

Você também pode gostar