Buscar

Lista de Exercícios3

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

Prévia do material em texto

UNIVERSIDADE	
  FEDERAL	
  RURAL	
  DE	
  PERNAMBUCO	
  
Departamento	
  de	
  Estatística	
  e	
  Informática	
  (DEINFO)	
  
Disciplina:	
  Introdução	
  à	
  Programação	
  I	
  	
  	
  	
  	
  Prof:	
  Lucas	
  Albertins	
  
	
  
	
  
Lista	
  de	
  Exercícios	
  3	
  
Recursividade,	
  Ponteiros	
  e	
  Vetores	
  
1	
  –	
  Implemente	
  uma	
  função	
  recursiva	
  soma(n)	
  que	
  calcula	
  o	
  somatório	
  dos	
  n	
  primeiros	
  	
  
números	
  inteiros.	
  
2	
  -­‐	
  O	
  Máximo	
  Divisor	
  Comum	
  (MDC)	
  de	
  um	
  número	
  pode	
  ser	
  definido	
  da	
  seguinte	
  forma:	
  
MDC(x,	
  y)	
  =	
  MDC(x	
  −	
  y,	
  y	
  se	
  ),	
  x	
  >	
  y	
  	
  
	
   MDC(x,	
  y)	
  =	
  MDC(y,	
  x),	
  x	
  <=y	
  
	
   MDC(x,	
  x)	
  =	
  x	
  
Exemplo:	
  MDC(9,	
  6)	
  =	
  MDC	
  (3,	
  6)	
  =	
  MDC	
  (6,	
  3)	
  =	
  MDC	
  (3,	
  3)	
  =	
  3	
  
Dado	
  isto,	
  escreva	
  uma	
  função	
  recursiva	
  para	
  o	
  cálculo	
  do	
  MDC	
  de	
  dois	
  números	
  inteiros.	
  
3	
   -­‐	
   Escreva	
   uma	
   função	
   recursiva	
   que	
   retorna	
   o	
   maior	
   elemento	
   de	
   um	
   vetor	
   entre	
   duas	
  
posições	
  passadas	
  como	
  parâmetro.	
  Exemplo	
  de	
  assinatura	
  da	
  função:	
  	
  
int	
  max(int	
  vet[],	
  int	
  inicio,	
  int	
  fim)	
  
4	
  –	
  Escreva	
  uma	
  função	
  recursiva	
  que	
  deve	
  buscar	
  se	
  um	
  número	
  inteiro	
  n	
  existe	
  dentro	
  de	
  um	
  
vetor	
  de	
   inteiros	
  vet.	
  Utilize	
  mais	
  dois	
  parâmetros	
  na	
  sua	
  função	
  um	
  de	
  início	
  e	
  outro	
  de	
  fim	
  
dos	
  índices	
  do	
  vetor.	
  A	
  função	
  deve	
  retornar	
  1	
  caso	
  o	
  número	
  exista	
  e	
  0	
  caso	
  contrário.	
  	
  
5	
  –	
  Escreva	
  uma	
  função	
  recursiva	
  que	
  dado	
  um	
  vetor	
  de	
  números	
  reais	
  e	
  a	
  quantidade	
  de	
  seus	
  
elementos	
  retorna	
  o	
  maior	
  elemento	
  do	
  vetor.	
  
6	
  –	
  O	
  problema	
  da	
  torre	
  de	
  Hanói	
  tem	
  uma	
  solução	
  recursiva.	
  Dado	
  um	
  procedimento	
  
void	
  torreHanoi(int	
  nDiscos,	
  char	
  origem,	
  char	
  auxiliar,	
  char	
  destino),	
  	
  
onde	
  nDiscos	
  é	
  a	
  quantidade	
  de	
  discos,	
  origem,	
  auxiliar	
  e	
  destino	
  são	
  as	
  três	
  torres,	
  podemos	
  
ter	
  uma	
  solução	
  da	
  seguinte	
  forma:	
  
IF	
  nDiscos	
  >	
  0	
  	
  
torreHanoi(nDiscos-­‐1,	
  origem,	
  destino,	
  auxiliar)	
  
moveDisco(origem,destino)	
  
torreHanoi(nDiscos-­‐1,	
  auxiliar,	
  origem,	
  destino)	
  
Implemente	
  a	
  função	
  recursiva	
  para	
  o	
  jogo	
  de	
  Hanói.	
  
7	
  -­‐	
  Escreva	
  um	
  subprograma	
  em	
  C	
  que	
  recebe	
  um	
  vetor	
  de	
  40	
  valores	
  reais,	
  imprimi	
  os	
  valores	
  
lidos	
  e	
  devolve	
  o	
  menor	
  valor	
  existente	
  entre	
  os	
  20	
  primeiros	
  e	
  o	
  maior	
  valor	
  existente	
  entre	
  
os	
  20	
  últimos.	
  Observe	
  que	
  o	
  método	
  deve	
  retornar	
  ao	
  local	
  da	
  chamada	
  os	
  dois	
  valores	
  (não	
  
imprimir	
  ao	
  usuário).	
  Portanto,	
  você	
  precisará	
  usar	
  passagem	
  de	
  parâmetro	
  por	
  referência,	
  já	
  
que	
  os	
  métodos	
  só	
  podem	
  retornar	
  um	
  único	
  valor.	
  
8	
   -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  que	
   leia	
  dois	
  vetores	
  A	
  e	
  B	
  de	
  10	
  componentes	
   inteiros	
  cada	
  
um,	
  escreva	
  os	
  vetores	
  lidos	
  e	
  substitua	
  A	
  e	
  B	
  pelos	
  vetores	
  A	
  +	
  B	
  e	
  A	
  -­‐	
  B,	
  respectivamente.	
  O	
  
programa	
  deve	
  utilizar	
  apenas	
  dois	
  vetores	
  e	
  imprimir	
  os	
  valores	
  calculados	
  para	
  A	
  e	
  B.	
  
UNIVERSIDADE	
  FEDERAL	
  RURAL	
  DE	
  PERNAMBUCO	
  
Departamento	
  de	
  Estatística	
  e	
  Informática	
  (DEINFO)	
  
Disciplina:	
  Introdução	
  à	
  Programação	
  I	
  	
  	
  	
  	
  Prof:	
  Lucas	
  Albertins	
  
	
  
	
  
9	
   -­‐	
   Escreva	
   um	
   programa	
   em	
   C	
   para	
   ler	
   dois	
   vetores	
   de	
   15	
   componentes	
   inteiros	
   cada	
   e	
  
determinar	
   o	
   conjunto	
   união,	
   o	
   conjunto	
   interseção	
   e	
   o	
   conjunto	
   diferença	
   para	
   os	
   vetores	
  
lidos.	
  
10	
   –	
   Escreva	
   um	
   subprograma	
   que	
   recebe	
   um	
   ponteiro	
   para	
   um	
   vetor	
   de	
   inteiros	
   e	
   a	
  
quantidade	
   de	
   elementos	
   do	
   vetor,	
   e	
   retorna	
   o	
   vetor	
   de	
   forma	
  que	
   o	
  mesmo	
   fique	
   com	
  os	
  
valores	
  ordenados	
  na	
  ordem	
  crescente.	
  
11	
  -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  para	
  ler	
  uma	
  matriz	
  3	
  x	
  3	
  de	
  números	
  reais,	
  imprimir	
  a	
  matriz	
  
lida	
  e	
  determinar	
  a	
  soma	
  e	
  a	
  média	
  aritmética	
  dos	
  componentes	
  da	
  matriz.	
  
12	
  -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  para	
  ler	
  um	
  vetor	
  com	
  16	
  componentes	
  reais	
  e	
  transferir	
  estes	
  
componentes	
   para	
   uma	
  matriz	
   4	
   x	
   4	
   onde	
   a	
   i-­‐ésima	
   linha	
   é	
   formada	
   pelos	
   elementos	
   cujas	
  
posições	
  no	
  conjunto	
  terminam	
  por	
  i.	
  Imprimir	
  o	
  vetor	
  e	
  a	
  matriz.	
  
13	
  -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  para	
  ler	
  uma	
  matriz	
  4	
  x	
  4	
  de	
  números	
  reais,	
  imprimir	
  a	
  matriz	
  
lida	
  e	
  imprimir	
  a	
  matriz	
  com	
  todos	
  os	
  componentes	
  classificados,	
  na	
  seqüência	
  das	
  linhas,	
  em	
  
ordem	
  crescente.	
  
14	
  -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  para	
  ler	
  uma	
  matriz	
  4	
  x	
  4	
  de	
  números	
  inteiros	
  e	
  determinar	
  o	
  
maior	
  componente	
  em	
  cada	
  linha	
  e	
  coluna	
  da	
  matriz.	
  
15	
  -­‐	
  Escreva	
  um	
  subprograma	
  em	
  C	
  que	
  recebe	
  duas	
  matrizes	
  de	
  números	
  inteiros,	
  imprimi	
  as	
  
matrizes	
  lidas	
  e	
  retorna	
  a	
  matriz	
  produto	
  da	
  primeira	
  pela	
  segunda.	
  
16	
  -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  para	
  ler	
  uma	
  matriz	
  de	
  ordem	
  6	
  de	
  números	
  inteiros,	
  imprimir	
  
a	
  matriz	
   lida	
   e	
   determinar	
   a	
  matriz	
   transposta	
   correspondente.	
   Restrição:	
   o	
   programa	
   deve	
  
utilizar	
  uma	
  única	
  área	
  para	
  armazenar	
  a	
  matriz	
  lida	
  e	
  sua	
  transposta.	
  
17	
  -­‐	
  Escreva	
  um	
  programa	
  em	
  C	
  para	
  ler	
  uma	
  matriz	
  de	
  ordem	
  3,	
  de	
  números	
  reais,	
  imprimir	
  a	
  
matriz	
  lida	
  e	
  calcular	
  e	
  imprimir	
  seu	
  determinante.	
  
18	
  –	
  Escreva	
  um	
  subprograma	
  que	
  recebe	
  como	
  entrada	
  uma	
  matriz	
  A	
  de	
  ordem	
  3	
  e	
  devolve	
  
três	
  inteiros:	
  k,	
  Lin	
  e	
  Col.	
  O	
  inteiro	
  k	
  é	
  um	
  maior	
  elemento	
  de	
  A	
  e	
  é	
  igual	
  a	
  A[Lin][Col].	
  
19–	
   Escreva	
   um	
   programa	
   que	
   lê	
   uma	
   string	
   e	
   determina	
   se	
   ela	
   é	
   um	
   palíndromo.	
   Um	
  
palíndromo	
  corresponde	
  a	
  uma	
  palavra	
  que	
  tem	
  a	
  mesma	
  escrita	
  quando	
  invertida.	
  Ex:	
  ANA,	
  
ARARA,	
  SOCOS,	
  SAIAS,	
  OSSO,	
  ASA,	
  MUSSUM,	
  SERES,	
  SALAS.	
  	
  
20	
  -­‐	
  Escrever	
  um	
  subprograma	
  que	
  recebe	
  duas	
  strings	
  s1	
  e	
  s2	
  (sem	
  especificar	
  o	
  tamanho	
  das	
  
cadeias,	
   ou	
   seja,	
   utilizar	
   ponteiros),	
   e	
   devolve	
   uma	
   nova	
   cadeia	
   s3	
   que	
   contém	
   todos	
   os	
  
caracteres	
  que	
  aparecem	
  em	
  s1	
  e	
  em	
  s2.	
  
21	
  –	
  Explique	
  a	
  diferença	
  entre:	
  p++,	
  (*p)++,	
  *(p++),	
  *(p+10).

Outros materiais