Simulado de Prova

 



1) Dada a definição da função alg abaixo,


int alg(int a, int b)

{

if(b == 1) return a;

else return alg(a+1, b-1) + a * b;

}


Que valor a seguinte chamada devolve?


alg ( 2 , 6 )  =  __________________


Justifique através do preenchimento da tabela ao lado:





a

b

alg (a,b)




























2) Crie uma função em C que receba por parâmetro dois vetores de números reais e um número inteiro que represente o tamanho destes vetores; a função deve calcular a chamada distância quadrática de dois vetores. Este cálculo soma os quadrados das diferenças dos valores correspondentes dos dois vetores, ou seja, (A[0] - B[0])² + (A[1] - B[1])² + (A[2] - B[2])² + … + (A[10] - B[10])². Pronto! A assinatura da função é assim: double distanciaQuadratica (double A[ ], double B[ ], int N).

Exemplo:



0

1

2

3

4

5

6

7

8

9

10




A

0

3

-2

7

9

11

15

0

0

0

0




















0

1

2

3

4

5

6

7

8

9

10




B

0

4

0

7

9

11

15

0

1

0

1





No exemplo acima, o resultado seria: (0)² + (3-4)² + (-2-0)² + (7-7)² + (9-9)² + (11-11)² + (15-15)² + (0-0)² + (0-1)² + (0-0)² + (0-1)² = 7

OBS.: USE COMANDOS DE REPETIÇÃO, POIS OS VETORES PODEM SER DE TAMANHO ARBITRÁRIO (O ACIMA É SÓ UM EXEMPLO).


3) Crie uma função em C para calcular e retornar a soma dos elementos que não estão na borda de uma matriz. Exemplo: dada a matriz abaixo, a função retornará: 6 + 7 + 10 + 11 = 34.




0

1

2

3



0

1

2

3

4



1

5

6

7

8



2

9

10

11

12



3

13

14

15

16



O protótipo da função é: int somaCentro ( int L, int C, int mat [ L ] [ C ] )

Use repetição para criar seu código. Lembre-se que a função deverá funcionar para matrizes de quaisquer tamanhos.


4) Crie uma função RECURSIVA para calcular a soma dos quadrados dos números positivos até N. Para valores negativos de N, a função deve retornar o valor dela para o módulo do número, ou seja, o correspondente positivo. O protótipo da função é assim: int somaQuadrados (int N)

    Exemplos:

  • se N for 10, a função somaQuadrados deverá retornar o valor de 1² + 2² + 3² + …. + 8² + 9² + 10² = 385

  • se N for 5, a função somaQuadrados deverá retornar o valor de 1² + 2² + 3² + 4² + 5² = 55

  • se N for 0, a função somaQuadrados deverá retornar o valor 0

  • se N for -5, a função somaQuadrados deverá retornar o mesmo que somaQuadrados(5) = 55


5) a) Qual o valor de y no final do programa?

   b) Escreva um /* comentário */ em cada comando de atribuição explicando o que ele faz e o valor da variável à  esquerda do '=' após sua execução.

   c) Explique o porquê de a atribuição  *q = 10  causar problemas.


#include <stdio.h>
int main()
{
int x, y, *p, *q;
y = 19;
p = &y;
x = *p;
x = 7;
(*p)++;
x--;
(*p) = (*p) + x;
printf ("y = %d\n", y);
*q = 10;
return 0;
}


6) Comente o trecho abaixo linha-a-linha e mostre o que será impresso pelo comando printf:


int a = 10, b = 7, c;
int * p = &a;
int * q = &b;
int * r = &c;
*r = *p;
*p = *q;
*q = *r;
printf("%d  -  %d", a, b);

7) Comente o trecho abaixo linha-a-linha e mostre o que será impresso pelo comando printf:


int vet[ ] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }; 
int * p = &(vet[2]);
int i;
for ( i = 1; i <= 6; i++ ) 
{ printf ("%d -  ", *p);
p++;
}


8) Por que o primeiro scanf abaixo usa o operador '&' e o segundo não?


int x;
scanf("%d", &x);
char nome[50];
scanf("%s", nome);


9) Faça uma função que crie uma figura de uma bandeira existente:

https://thumbs.dreamstime.com/b/bandeiras-de-pa%C3%ADses-13821928.jpg

Dicas:

-Pense numa imagem de 200 linhas por 300 colunas.

-Para facilitar sua vida, escolha uma bandeira como a do Chade (3 listras verticais: azul, amarelo e vermelho), a da Costa do Marfim (3 listras verticais: laranja, branco e verde), a da França (3 listras verticais: azul, branco e vermelho), etc.


10) Faça uma função que crie uma figura semelhante a isto:


= = = = = = = = = = =
=
= = = = = = = =
= = =
= = = = = =
= = = = =
= = = =
= = = = = = =
= =
= = = = = = = = =



11) Faça uma função recursiva que pinte uma imagem de branco. Ela seria mais ou menos assim:


void pintarBranco(int** original, int linhas, int colunas, int maxValor, int inicioX, int inicioY)
{ ....
}


Dicas: 

-Se a coordenada inicioX ou inicioY estiver fora da imagem, que tem dimensões 'linhas' e 'colunas', nada será feito

-Se na coordenada (inicioX, inicioY) já houver o tom branco (maxValor), nada será feito

-Se na coordenada (inicioX, inicioY) não houver o tom branco, pinto com essa cor (maxValor)

-Invoco o procedimento recursivo para a coordenada de cima, de baixo, da esquerda e da direita

-Pronto!!!


Uma resposta possível:

void pintarBranco(int** original, int linhas, int colunas, int maxValor, int inicioX, int inicioY)
{ if(inicioX>=0 && inicioX<linhas && inicioY>=0 && inicioY<colunas && original[inicioX][inicioY] != maxValor)
{ original[inicioX][inicioY] = maxValor;
pintarBranco(original, linhas, colunas, maxValor, inicioX+1, inicioY);
pintarBranco(original, linhas, colunas, maxValor, inicioX-1, inicioY);
pintarBranco(original, linhas, colunas, maxValor, inicioX, inicioY-1);
pintarBranco(original, linhas, colunas, maxValor, inicioX, inicioY+1);
}
}

12) Refaça a funcionamento do PROCURAR no Cadastro de Amigos que já fizemos de modo a trabalhar mesmo com pedaços de nomes (dica: pesquise uma função chamada "strstr").


DICA: exemplo de uso da função strstr()

#include <stdio.h>
#include <string.h>
int main () {
char texto[20] = "Joao da Silva";
char pedaco1[10] = "Silva";
char pedaco2[10] = "Santos";
if(strstr(texto, pedaco1) != NULL)
printf("O pedaco %s existe dentro de %s\n",
pedaco1, texto);
else printf("O pedaco %s NAO existe dentro de %s\n",
pedaco1, texto);
if(strstr(texto, pedaco2) != NULL)
printf("O pedaco %s existe dentro de %s\n",
pedaco2, texto);
else printf("O pedaco %s NAO existe dentro de %s\n",
pedaco2, texto);
return 0;
}

13) Crie uma funcionalidade de alterar (Update do crUd) para o nosso Cadastro de Amigos.


Comentários

Postagens mais visitadas deste blog