Programação das Aulas - IME-USP

Propaganda
Departamento de Ciência da Computação - IME - USP
Programação das Aulas
Segunda parte
Nesta segunda fase da disciplina estudaremos:
variáveis do tipo real (float);
caracteres (char);
operações com números reais e caracteres;
funções (protótipos, estrutura e mecanismos de passagem de parâmetros).
AULA 1
TÓPICOS: constantes e variáveis do tipo float; aritmética envolvendo números do tipo float; leitura
de números do tipo float (%f), impressão de expressões do tipo float (%f); conversão de tipos
(casting).
PROBLEMA 1.
Dadas n > 0 notas
de provas de MAC2166, calcular a média aritmética das notas.
PROBLEMA 2 (exercício
2 da lista de exercícios sobre reais).
Dado um número inteiro n > 0, determinar o número harmônico Hn dado por
Hn = 1 + 1/2 + 1/3 + 1/4 + . . . + 1/n.
PROBLEMA 3 (exercício
3 da lista de exercícios sobre reais).
Os pontos (x,y) que pertencem à figura H (abaixo) são tais que x > 0, x > 0 e x2 + y2 < 1.
Dados n pontos reais (x,y), verifique se cada ponto pertence ou não a H.
PROBLEMA EXTRA (exercício 10 da lista de exercícios sobre reais).
Dado um número inteiro n > 0, calcular o valor da soma
Sn = 1/n + 2/(n-1) + 3/(n-2) + ... + n/1
AULA 2
PROBLEMA 4.
Dados números reais x ≥ 0 e epsilon > 0, calcular uma aproximação da raiz quadrada de x através
da seqüência de números abaixo. Tome r0 = x e rn+1 = 1/2 (rn+ x/rn). Exemplos:
Para
Para
Para
Para
x = 3, r0 = 3, r1 = 2,
r2 = 1.75, r3 = 1.732143, r4 = 1.732051
x = 4, r0 = 4, r1 = 2.5, r2 = 2.05, r3 = 2.000610, r4 = 2.000000
x = 5, r0 = 5, r1 = 3,
r2 = 2.33, r3 = 2.238095, r4 = 2.236068
x=0.81, r0=0.81, r1=0.905, r2=0.9000138122, r3=0.9000000001
A aproximação será o primeiro valor rn+1 tal que |rn+1-rn| < e.
PROBLEMA 5.
Dado um número real x e um número real epsilon > 0, calcular uma aproximação de ex através da
seguinte série infinita:
ex = 1 + x + x
2/2!
+ x
3/3!
+ . . . + x
k/k!
+ . . .
Inclua na aproximação todos os termos até o primeiro de valor absoluto (módulo) menor do que
epsilon.
(exercício 6 da lista de exercícios sobre reais).
Dados x real e n natural, calcular uma aproximação para cos x através dos n primeiros termos da
seguinte série:
PROBLEMA EXTRA
Compare com os resultados de sua calculadora!
PROBLEMA EXTRA.
Dado um número real x tal que 0 <= x <= 1, calcular uma aproximação do arco tangente de x (em
radianos) através da série infinita:
arctan(x) = x - x
3/3
+ x
5/5
- x
7/7
+ . . .
incluindo todos os termos da série até |xk/k| < 0,0001.
AULA 3
TÓPICOS: caracteres
- tipo char.
PROBLEMA 6.
Dados N e uma sequência de N caracteres representando um texto, determinar a frequência relativa de
vogais no texto (por exemplo, no texto "Em terra de cego quem tem um olho é caolho", essa frequência
é 16/42).
PROBLEMA 7.
Dada uma frase terminada por '.', imprimir o comprimento da palavra mais longa.
PROBLEMA 8.
Dada uma seqüência de caracteres terminada por '.', determinar quantas letras minúsculas e maiúsculas
aparecem na seqüência.
PROBLEMA EXTRA
Dada uma frase terminada por '.', determinar quantas letras e quantas palavras aparecem no texto. Por
exemplo, no texto "O voo GOL547 saiu com 10 passageiros." há 25 letras e 7 palavras.
AULA 4
TÓPICOS: funções; protótipos
de funções, estruturas de funções, passagem de parâmetros por valor.
PROBLEMA 9.
Dados dois números reais x e y e dois números inteiros positivos a e b, calcular o valor da expressão
xa + yb + (x-y)a+b.
PROBLEMA 9'.
Resolver novamente o PROBLEMA 9, mas desta vez utilizando uma função para calcular potência
int potencia(int base, int expoente){ . . . }
PROBLEMA 10.
Escreva uma função que recebe n e calcula n!.
Faça uma função que recebe dois números inteiros m e n, e usando a função do item anterior,
calcula
m!/(n!(m-n)!).
Faça um programa que lê um numero inteiro n > 0 e imprime os coeficientes da expansão de
(a+b)n.
PROBLEMA EXTRA.
Usando a função sqrt(x) da biblioteca matemática da linguagem C (#include <math.h>),
escreva uma recebe dois pontos no plano através de suas coordenadas cartesianas e devolve a
distância entre os pontos.
Faça um programa que lê um ponto origem (x0, y0) e uma seqüência de n pontos e determina o
ponto mais próximo do ponto origem.
PROBLEMA EXTRA.
AULA 5
Faça uma função que recebe um número inteiro n e devolve 1 se n é primo e devolve 0 em caso
contrário.
Faça um programa que lê um número inteiro m e verifica se m pode ser escrito como p+q, onde p
e q são números primos.
TÓPICOS: funções; protótipos
de funções, estruturas de funções, passagem de parâmetros.
PROBLEMA 11. (exercício 1 da lista de exercícios com funções - parte I).
Um número a é dito ser permutação de um número b se os dígitos de a formam uma permutação dos
dígitos de b. Exemplo: 5412434 é uma permutação de 4321445, mas não é uma permutação de
4312455. Obs.: Considere que o dígito 0 (zero) não aparece nos números.
Faça uma função contadígitos que dados um inteiro n e um inteiro d, 0 < d < 9, devolve
quantas vezes o dígito d aparece em n.
Usando a função do item anterior, faça um programa que lê dois números a e b e responde se a é
permutação de b.
PROBLEMA 12. (exercício 2
da lista de exercícios com funções - parte I).
Construa uma função encaixa que dados dois inteiros positivos a e b verifica se b corresponde
aos últimos dígitos de a. Exemplo:
a
b
567890
890
1243
1243
encaixa
2457
245
não encaixa
457
2457
não encaixa
encaixa
Usando a função do item anterior, faça um programa que lê dois inteiros positivos a e b e
verifica se o menor deles é subnúmero do outro. Exemplo:
a
b
567890
678
b é subnúmero de a
1243
2212435
a é subnúmero de b
235
236
um não é subnúmero do outro
PROBLEMA EXTRA. (exercício 3 da lista de exercícios com funções - parte I).
Uma seqüência de n números inteiros não nulos é dita piramidal m-alternante se é
constituída por m
segmentos: o primeiro com um elemento, o segundo com dois elementos e assim por diante até o mésimo, com m elementos. Além disso, os elementos de um mesmo segmento devem ser todos pares ou
todos ímpares e para cada segmento, se seus elementos forem todos pares (ímpares), os elementos do
segmento seguinte devem ser todos ímpares (pares). Por exemplo, a seqüência com n = 10 elementos:
12 3 7 2 10 4 5 13 5 11 é piramidal 4-alternante.
A seqüência com n = 3 elementos:
7 10 2 é piramidal 2-alternante.
A seqüência com n = 8 elementos:
1 12 4 3 13 5 12 6 não é piramidal alternante pois o último segmento não
tem tamanho 4.
Escreva uma função bloco que recebe como parâmetro um inteiro n e lê n inteiros do teclado,
devolvendo um dos seguintes valores:
0, se os n números lidos forem pares;
1, se os n números lidos forem ímpares;
-1, se entre os n números lidos há números com paridades
diferentes.
AULA 6
usando a função do item anterior, escreva um programa que, dados um inteiro n > 1 e uma
seqüência de n números inteiros, verifica se ela é piramidal m-alternante. O programa deve
imprimir o valor de m ou dar a resposta não.
TÓPICOS: passagem de
endereço como parâmetro.
Ilustração de um problema simples para realçar os conceitos de variáveis locais, parâmetros e
endereços como parâmetros. Exemplo: função troca, que recebe dois inteiros *a e *b e troca os valor
de *a com o valor de *b.
PROBLEMA 13.
Dizemos que um número natural n é palíndromo se lido da direita para a esquerda ou da esquerda para
a direita é o mesmo número. Exemplos:
567765 e 32423 são palíndromos.
567675 não é palíndromo.
Socorram-me subi no onibus em Marrocos.
Oto come doce seco de mocotó.
A diva em Argel alegra-me a vida.
Escreva uma função que recebe um inteiro n > 0 e devolve o seu primeiro dígito, seu último
dígito e altera o valor de n removendo seu primeiro e último dígitos. Exemplos:
valor inicial de n
primeiro dígito
valor final de n
732
7
2
3
14738
1
8
473
1010
1
0
1
78
7
8
0
7
7
0
7
último dígito
Escreva um programa que recebe um inteiro positivo n e verifica se n é palíndromo. Suponha
que n não contém o dígito 0.
PROBLEMA 14. (Solução).
Escreva uma função com protótipo
int divide (int *m, int *n, int d);
que recebe três inteiros positivos como parâmetros e retorna 1 se d divide pelo menos um entre
contrário. Fora isso, se d divide *m, divide *m por d, e o mesmo para *n.
Escreva um programa que lê dois inteiros positivos m e n e calcula, usando a função acima, o
mínimo múltiplo comum entre m e n.
*m e *n, 0 caso
PROBLEMA EXTRA. (Solução).
Faça uma função com protótipo
void somabit (int b1, int b2, int *vaium, int *soma);
que recebe três bits (inteiros 0 ou 1) b1, b2 e *vaium e retorna um bit soma representando a
soma dos três e o novo um bit "vai-um" em *vaium.
AULA 7
Escreva um programa que lê dois números em binário e calcula um número em binário que é a
soma dos dois números dados. Utilize a função acima.
TÓPICOS: passagem de
endereço como parâmetro.
PROBLEMA 15.
PROBLEMA 16.
AULA 8
TÓPICOS: problemas
extras da parte 2; simulação de programa com apontadores.
Primeira parte
Página de MAC2166
Download