b se os mesmos dígitos que forma a, também forma b, mesmo que em posições diferentes. Exemplo: 5412434 é uma permutação de 4321445. Faça um programa que leia 2 números inteiros e positivos onde o valor máximo é 999.999.999. Em seguida mostre na tela se o número é uma permutação do outro. 2) Faça uma programa que declara uma matriz de 10x10 caracteres inicializada com valores abaixo e solicita ao usuário uma palavra de busca com 5 caracteres onde o tamanho máximo é 4 terminador. Essa programa deve procurar na matriz quantas vezes ocorre a palavra de busca. A ocorrência da palavra na matriz pode estar na horizontal ou horizontal invertida e na vertical ou vertical invertida. No exemplo abaixo foram encontradas 4 ocorrências da palavra de busca casa. Certifiquese que o programa não apresenta memory leak. 0 1 2 3 4 5 6 7 8 9 0 Q F H Q P L P W S Y 1 A A N W A Z O Q A T 2 Z S U E S A S A C R 3 W A J R D X I L M E 4 S C M T F C U K N W 5 X V I C A S A J B C 6 E T K Y G V Y H V A 7 D G O U H B T G C S 8 C B L I J N R F X A 9 R Y P O K M E D Z Q
3) Em um campo de batalha existe um exército com 300.000 homens alinhados em 300 filas paralelas, sendo que cada soldado contém um fusível com uma certa quantidade de projéteis no fusível. O general passa uma folha quadriculada de 300x1000, sendo que cada soldado escreve sua quantidade de projéteis. Faça um programa para que o general digite essas quantidades de projéteis em uma matriz. Em seguida o general digita uma quantidade qualquer de linha e colunas. O programa deve achar na matriz qual é a maior quantidade de projéteis para a configuração de linha e coluna dada pelo general, sem mudar nenhum homem de posição. Abaixo segue um exemplo reduzido de um exército de 25 homens sendo que o general solicitou a quantidade de 2 linhas por 2 colunas, resultando o valor máximo de apresenta memory leak. 0 1 2 3 4 0 10 2 3 4 5 1 0 2 4 6 8 2 1 3 5 7 9 3 6 7 8 9 8 4 10 6 4 2 0
4) Faça um programa que leia do teclado 10 pares valores i e j (sem repetição de pares), sendo que 1<=i<=10 e 1<=j<=10. A cada leitura devese armazenar o valor “X” de uma matriz de caracter de ordem 10x10. Exemplo após a leitura das 10 posições: 1 2 3 4 5 6 7 8 9 10 1 X 2 X X 3 X 4 X 5 6 X 7 8 X X 9 10 X X
Em seguida para cada posição na matriz que não contém o valor X, armazene a quantidade de vizinhos na horizontal, vertical e diagonal. Não armazene “0” se a posição não contém vizinho. Exemplo após a leitura das 10 posições: 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 X 2 1 2 1 X 2 1 1 2 X 1 3 3 X 2 1 1 1 4 2 X 2 5 1 1 1 1 1 1 6 1 X 1 7 1 1 2 2 2 1 8 1 X X 1 9 2 2 1 1 2 2 1 10 X X 1 5) Considere n cidades numeradas de 0 a n1 que estão interligadas por uma série de estradas de mão única. As ligações entre as cidades são representadas pelos elementos de uma matriz quadrada L nxn, cujos elementos lij assumem o valor 1 ou 0, conforme exista ou não estrada direta que saia da cidade i e chegue à cidade j. Assim, os elementos da linha i indicam as
coluna j indicam as estradas que chegam à cidade j. Por convenção lii = 1. A figura mostra um exemplo para n = 4. 0 1 2 3 0 1 1 1 0 1 0 1 1 0 2 1 0 1 1 3 0 0 1 1 Faça uma função que recebe a matriz [4][4] e deve retornar um inteiro que indica a cidade com o maior quantidade de entradas.
6) Faça um programa que mostra na tela as coordenadas origem e destino onde as peças pretas podem tomar uma peça branca. É dado uma matriz de inteiros de dimensões 8x8 que representa a configuração atual de um jogo de damas, sendo que, 0 indica uma casa vazia, 1 indica uma casa ocupada por uma peça branca e 1 indica uma casa ocupada por uma peça preta. As regras para o jogo de damas são: a) Os movimentos somente acontecem nas casas brancas; b) As pretas só podem avançar no sentido crescente das linhas da matriz, portanto, as brancas no sentido decrescente das linhas da matriz; c) Apenas podese tomar uma peça branca por vez e para isso, deve existir uma casa com o valor zero na 2ª posição diagonal esquerda ou direita adjacente a uma pedra preta. No exemplo de configuração abaixo a peça preta linhacoluna 24 pode tomar a peça branca 33 movendose para 42 e a peça preta linhacoluna 3 5 pode tomar a peça branca 44 ou 46 movendose para 53 ou 57 respectivamente. 0 1 2 3 4 5 6 7 0 1 1 1 1 1 1 0 0 0 2 0 1 1 1 3 0 1 1 1 4 0 0 1 1 5 1 0 0 0 6 0 1 1 0 7 1 1 1 7) Faça um programa que declara uma matriz de 10x10 caracteres incializada e um vetor com 4 palavras { "gato", "vaca", "bode", "anta"} . Esse programa deve procurar em que linha e coluna começa e termina cada palavra. A ocorrência da
horizontal invertida e na vertical ou vertical invertida. Abaixo segue um exemplo de matriz 10x10 caracteres que procurou as palavras gato, vaca, bode e anta. 0 1 2 3 4 5 6 7 8 9 0 Q F H Q P L P W S Y 1 A B N W A Z O Q A T 2 Z O U E S O T A G R 3 W D J R D X I L M E 4 S E M T F C U K N W 5 X V I V A C A J B A 6 E T K Y G V Y H V T 7 D G O U H B T G C N 8 C B L I J N R F X A 9 R Y P O K M E D Z Q GATO INICIO 2,5 FIM 2,8 VACA INICIO 5,3 FIM 5,6 BODE INICIO 1,1 FIM 4,1 ANTA INICIO 5,9 FIM 8,9 8) Sr. Zé das Couves planta café e resolveu descobrir qual é a região em seu cafezal que possui a menor produtividade para retirar os pés que já não estão produzindo adequadamente. Os pés de café estão dispostos em 50 fileiras em que cada uma possui 100 pés de café. Na colheita desse ano, a produção em grãos de cada pé de café foi guardada separadamente em um saco e depois contabilizado. Faça um programa para ler a quantidade de grãos de café de cada pé de café e guardala em uma matriz. Em seguida o Zé poderá digitar uma quantidade de linhas e colunas, para que o programa identifique na matriz qual a região, formada pela quantidade de linhas e colunas, tem a menor produção. Para isso devese mostrar na tela os valores da menor região produtora. Certifiquese que o programa não apresenta memory leak.
9) O curso de Sistemas de Informação da AlFA deseja saber se existem alunos cursando as disciplinas Algoritmos, Linguagens de Programação mas não estão cursando Estruturas de Dados. Existe disponível um vetor que armazena as matriculas dos alunos que fazem Algoritmos (com 50 alunos); um outro vetor que armazena as matriculas dos alunos de Linguagens de Programação (com 80 alunos); e um outro as matriculas dos alunos de Estrutura de Dados (com 80 alunos).
int algo [50]; int prog[80]; int ed[80];
tentar acertar a cesta do time adversário. As cestas podem valer: 1 ponto quando foram lançadas em um lance livre; 2 pontos quando foram lançadas em disputa; e 3 pontos quando foram lançadas em disputa após a linha dos 3 pontos. Faça uma
programa que lê um vetor com 100 posições onde
cada posição desse vetor é uma estrutura contendo informações de uma cesta com os seguintes campos: período, minuto, segundos, jogador e pontos. Essa função deve retornar qual foi o jogador que fez a maior quantidade de pontos, sendo que somente esse vetor contém os números dos jogadores. Para ajudalo já foram definidas as estruturas e os vetores que serão usados nesse programa. typedef struct{ int periodo; int min; int seg; int jogador; int pontos; } tcesta; 11) No campeonato brasileiro de futebol existem 20 times de futebol que confrontam entre si para determinar o campeão. Portanto, existe 19 rodadas onde em cada rodada existem 10 confrontos entre times distintos. Faça um programa em que o usuário digita em um vetor com 20 posições a tabela de classificação com os nomes dos times e zere seus pontos. Esse vetor é formado pelos campos: time e pontos. Gere automaticamente em um vetor chamado brasileiro todas as combinações dos nomes dos time que se confrontam que totaliza 190 confrontos. Esse vetor é um registro formado pelos campos time1, gols1, time2 e gols2. Em seguida faça o usuário digite os gols marcados por cada time nos 190 confrontos. Se em um confronto houve empate no número de gols, cada time recebe 1 ponto em sua tabela de classificação. Se um time ganha o confronto (marca mais gols que o outro), recebe 3 pontos na tabela de classificação. No final mostre quem foi o time campeão (aquele que marcou maior quantidade de pontos) e o vice campeão (aquele que marcou a segunda maior quantidade de pontos) com seus respectivos pontos. Considere que não tem valores repetidos nos números de pontos. Lembrese de usar a função strcpy para copiar e a função strcmp para
estruturas e os vetores que serão usados nesse programa. typedef struct{ char [30] time; unsigned pontos; } tTabela; typedef struct{ char [30] time1; unsigned gols1; char [30] time2; unsigned gols2; } tConfronto; tTabela classificacao[20]; tConfronto brasileiro[190];
12) Faça um programa que o usuário digita um valor pelo teclado e em seguida responda se esse numero faz parte da sequencia de Fibonacci. Os dois primeiros números na sequencia de Fibonacci Fn são 1 e 1. O n ésimo número é dado pela seguinte formula:
f
i=
f
i−1
f
i−2 , parai3
. Por exemplo, os oitos primeiros números da sequencia é { 1, 1, 2, 3, 5, 8, 13, 21}, assim, o número 7 não faz parte da sequencia de Fibonacci e o número 13 faz parte da sequencia de Fibonacci.13) Faça uma função chamada desvioPadrao que recebe como parâmetro um vetor de 100 inteiros e retorna o desvio padrão desses valores. O desvio padrão é definido pela raiz quadrada da variância. A variância é definida pelo quadrado da somatória das diferenças entre cada elemento para a média, ou seja,
vr =
∑
n i=1
x
i−
md
2 , onde md é a média do conjunto e xi é cada elemento. Pode ser usada as funções damath.h pow() e a função srqt(). O vetor já foi inicializado pelo teclado e portanto não é para fazer a leitura dos dados no vetor.
14) Uma cidade possui lotes que podem estar vazios, ou com casas ou com prédios. Todos os lotes são retângulos e possuem medidas de sua base e altura. A cidade é formada por uma distribuição de lotes em um quadrado de 100 x 100. Abaixo são dados as definições de um enumerado para tipos de lotes, de uma estrutura que caracteriza os lote e uma matriz que define os lotes da cidade. Faça uma função chamada maiorAreaComCasa que recebe como parâmetro a matriz de 100x100 do tipo lote e retorna qual é o maior
casa. O cálculo da área do retângulo é base x altura. A matriz já foi inicializada pelo teclado e portanto não é para fazer a leitura dos dados na matriz.
typedef enum{VAZIO, CASA, PREDIO}
enumConstrucao; typedef struct{ enumConstrucao tipo; float base; float largura; } lote; lote cidade[100][100]; 15) Dois apostadores A e B apostaram cartelas na megasena. Cada cartela na megasena contém 6 números distintos. O apostador A está concorrendo com 150 cartelas e o apostador B está concorrendo com 95 cartelas. Faça um programa em C que inicialmente faz a leitura dos valores de cada cartela do apostador A e do apostador B. Para facilitar o usuário não vai digitar valores repetidos na mesma cartela e nem digitar cartelas repetidas para o mesmo jogador. No entanto, os valores digitados na cartela não obedecem nenhuma ordem. O programa deve descobrir quantas das cartelas do apostador A são iguais a do apostador B. Devese utilizar as matrizes a e b definidas abaixo para armazenar as cartelas do apostador A e do apostador B.
int a[150][6]; int b[95][6];
16) Construa um programa em C onde o usuário digita e armazena em variáveis as coordenadas X e Y de 1000 pontos geográficos. Em seguida o programa deve encontrar nestes 1000 pontos quais são os 3 pontos cuja soma entre suas distâncias seja o valor máximo. A fórmula para calcular a distância entre dois pontos é:
dist A , B=
x
A−
x
B
2
y
A−
y
B
2 . A soma entre 3 pontos é dist(A,B) + dist(B,C) + dist(C,A). Essa soma deve ser a maior entre os 1000 pontos do vetor.um jogo de Damas que recebe como parâmetro uma matriz de inteiros com dimensões 8x8 e dois números inteiros representando uma linha e coluna qualquer da matriz. A matriz representa a configuração atual do jogo de damas, sendo que, 0 indica uma casa vazia, 1 indica uma casa ocupada por uma peça branca e 1 indica uma casa ocupada por uma peça preta. Para a função retornar verdadeiro deve verificar se existe na matriz uma peça preta na linha e coluna passada para a função e se consegue realizar a captura de uma peça branca. Em qualquer outra situação a função retorna falso. A captura acontece quando a peça preta pula por cima da peça branca estabelecendose na posição consecutiva e vazia do tabuleiro. A função somente faz a verificação se é possível ou não caputrar, mas não realiza a captura. Certifiquese que a função não tenha memory leak. 0 1 2 3 4 5 6 7 0 1 1 1 1 1 1 1 1 1 2 1 1 1 1 3 0 0 0 0 4 0 0 0 0 5 1 1 1 1 6 1 1 1 1 7 1 1 1 1 18) Faça uma função chamada capturaPecaAzul de um jogo Reversi que recebe como parâmetro uma matriz de inteiros com dimensões 8x8 e dois números inteiros representando uma linha e coluna qualquer da matriz. A matriz representa a configuração atual do jogo reversi, sendo que, 0 indica uma casa vazia, 1 indica uma casa ocupada por uma peça vermelho e 1 indica uma casa ocupada por uma peça azul. Para a função retornar verdadeiro deve verificar se está vazia na matriz, a posição linha e coluna passada para a função e se consegue realizar a captura de peças azuis. Em qualquer outra situação a função retorna falso. Para capturar a peça azul, deve colocar a sua peça vermelha de forma a encurralar horizontal, vertical ou diagonalmente uma linha de peças azuis consecutivas entre suas peças vermelhas. A função somente faz a verificação se é possível ou não caputrar, mas não realiza a captura. Certifiquese que a função não tenha memory leak. Abaixo segue um exemplo de captura de peça azul:
A
C
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 3 0 0 0 1 1 0 0 0 4 0 0 0 1 1 0 0 0 5 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 3 0 0 1 1 1 0 0 0 4 0 0 0 1 1 0 0 0 5 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 19) Dada a estrutura abaixo, que armazena dois valores para as coordenadas x e y no plano, e o vetor coord que possui 100 elementos. Faça um
programa onde o usuário digita os 100 valores de
coordenadas x e y no vetor coord. Em seguida esse programa deve achar qual é o ponto central que gera o menor raio de cobertura para os demais pontos. É dado que a função sqrt(p) obtém raiz quadrada de p e função pow(p,q) eleva um número a p uma potência q e que a fórmula para cálculo da distância entre dois pontos P e Q no plano é: typedef struct{ float x; float y } tPonto; tPonto coord[100];
20) No ramo da matemática conhecido como análise real, a integral de Riemann, criada por Bernhard Riemann, foi a primeira definição rigorosa de uma integral de uma função em um intervalo. A função usada é f(x) = x2 e o usuário
informa 3 valores: a, b e n. Os valores a e b representam o intervalo de integração e n divide esse intervalo em subintervalos de mesmo tamanho. A divisão do intervalo gera retângulos superiores e inferiores. Faça um programa que calcula a diferença da somas das áreas dos retângulos superiores e inferiores de Riemann. A