
1. Um número a é dito 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.
(a) 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.
(b) Usando a função do item anterior, faça um programa
que lê dois inteiros positivos a e b e responda se a
é permutação de b.
Solução em C
2. (a) Construa uma função encaixa que dados dois inteiros positivos a e b verifica se b corresponde aos últimos dígitos de a.
Ex.:
| a | b | |
| 567890 | 890 | => encaixa |
| 1243 | 1243 | => encaixa |
| 2457 | 245 | => não encaixa |
| 457 | 2457 | => não encaixa |
(b) 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 é segmento do outro.
Exemplo:
| a | b | |
| 567890 | 678 | => b é segmento de a |
| 1243 | 2212435 | => a é segmento de b |
| 235 | 236 | => um não é segmento do outro |
3. (MAT - 94) 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.
(a) 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.
(b) 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.
Solução em Pascal
4. (POLI 97)
(a) Faça uma função arctan que recebe
o número real x
[0,1] e devolve uma aproximação do arco tangente de x
(em radianos) através da série incluindo todos os termos
da série
![]()
incluindo todos os termos da série até
.
(b) Faça uma função angulo que recebe um ponto de coordenadas cartesianas reais (x,y), com x > 0 e y > 0 e devolve o ângulo formado pelo vetor (x,y) e o eixo horizontal.
Exemplos: Observe a figura abaixo e verifique que os ângulos correspondentes aos pontos marcados é aproximadamente
|
![]() |
Para calcular o valor do ângulo
pedido, use a seguinte fórmula:

(c) Faça um programa que, dados n pontos do primeiro quadrante
(x > 0
e
y > 0) através de suas coordenadas cartesianas,
determina o ponto que forma o menor ângulo com o eixo
horizontal. Use a função do item anterior, mesmo que
você não a tenha feito.
Solução em C
5. (a) Escreva uma função que recebe um inteiro positivo m e devolve 1 se m é primo, 0 em caso contrário.
(b) Escreva um programa que leia um inteiro não-negativo n e
imprima a soma dos n primeiros números primos.
6. (a) Escreva uma função que recebe como parâmetros dois números a e b e devolve o mdc (máximo divisor comum) de a e b, calculado por meio do algoritmo de Euclides.
(b) Escreva um programa que leia um inteiro positivo n e
uma seqüência de n inteiros não-negativos e imprime o mdc
de todos os números da seqüência.
7. (POLI 97) Simule a execução do programa seguinte. Faça suas contas com duas casas de precisão. Não se preocupe com o formato da saída.
#include <stdio.h>
float f1 (int x, int y) {
float res;
if (y != 0)
res = (float) x / y;
else
res = (float) 1 / x;
while (x > y) {
res = res + (float) y / x;
x = x - 1;
}
return(res);
}
int main() {
int a, b;
float c, d;
printf("Digite quatro numeros.\n");
scanf("%d %d %f %f", &a, &b, &c, &d);
printf("a = %d b = %d c = %f d = %f\n", a, b, c, d);
while (a < b) {
if (c > d) {
d = f1(b,a);
b = b - 1;
}
else{
c = 1 / f1(a,b);
a = a + 1;
}
printf("a = %d b = %d c = %f d = %f\n", a, b, c, d);
}
return 0;
}
Dados:
2 5 3.0 2.0
Resultado da Simulação