Implementar, usando pilhas, um programa que verifica se existe um balanceamento entre parênteses, colchetes e chaves, em um programa escrito em linguagem C. O nome do arquivo contendo o programa deve ser fornecido pelo usuário.
Exemplo 1 - Entrada:
void main()
{
int x;
x = (2*3)+((5*10);
y = x;
}
Saida:
ERRO LINHA 4: Parêntese aberto mas não
fechado.
Exemplo 2 - Entrada:
coisa()
{
int x;
x=1;
}}
outro(){}
Saída:
ERRO LINHA 5: Chave fechada mas não
aberta
-----------------------------------------
Melhor trabalho
entregue até o momento: Clique
Aqui
Autores:
Ulysses Pereira de Almeida Neto
Higor Aparecido Vieira Alves
Kelly Rose Miyashiro
Fátima Solange Rodrigues
Outro exemplo de
implementação:: Clique
Aqui
Calcular o resultado de expressões aritméticas sem precedência implícita de operadores (Parênteses são utilizados para indicar precedência). A entrada conterá apenas números de 0 a 9 e os operadores usados serão o + (soma), * (multiplicação), - (subtração) e / (divisão). Os códigos criados no trabalho VBP devem ser reutilizados para verificar se a expressão fornecida não contém erros de balanceamento de parênteses.
Exemplo 1 - Entrada:
((2+1)*((3-1)/2))
Saida: 3
Exemplo 2 - Entrada:
((2+3)*(3/(3-1)))
Saida: 7.5
Exemplo 3 - Entrada:
((2+3*(3/(3-1)))
Saida: ERRO NO BALANCEAMENTO DOS PARÊNTESES
Melhor trabalho entregue até o momento : Clique Aqui
Autor:
Markus Reichel
Implementar um algoritmo que mostra uma solução para o problema da Torre de Hanoi pelo método da "tentativa cega", com o número de peças empilhadas, n, sendo fornecido pelo usuário. Verificar qual o maior valor de n para o qual o programa é capaz de oferecer uma resposta depois de alguns minutos.
Usar três pilhas para representar
cada um dos 3 "pinos" do problema da torre de Hanoi.
Usar
números inteiros de 1..n para representar as n pedras que
iniciam no pino 1.
Enquanto problema não resolvido faça
Sorteie e retire uma pedra X de um pino
qualquer Px, // Verifique também se existe pedra no pino.
Sorteie outro pino Py
Se a pedra que
está no topo de Py for menor que a pedra X
Retorne X para Px
Senão
Insira X em Py.
FimSenão
FimFaça
Página
com descrição do jogo
Melhor trabalho
entregue até o momento: Clique
Aqui
Autores:
Thiago Galves Moretto (emoretto@ec.ucdb.br)
Implementar um algoritmo para dar suporte ao "balde de tinta"
que aparece em alguns programas de desenho.
A entrada para
o algoritmo é uma matriz M[n x m] de "pixels", um
índice indicando um pixel da matriz e a nova cor da região
que contém o pixel indicado. Cada pixel será
representado por um char, indicando uma cor de 0 a 255.
Descrição do Algoritmo:
Entrada: M[n,m] // Matriz de pixels
Pi, Pj // Índices da Matriz M indicando um
pixel da regiao que deve ser "pintada"
nova_cor
Saída: M[n,m] com a região "pintada"
cor_antes = M[Pi,Pj]
Insere Pi,Pj em uma fila.
Enquanto
Fila nao Estiver Vazia Faça
Pi,Pj = Retira um
Elemento da Fila
M[Pi,Pj] = nova_cor
Insere vizinhos de Pi,Pj, cuja cor seja cor_antes, na fila
FimFaça
-----------
// IMPORTANTE: Pintar os vizinhos antes de
inserí-los na fila melhora
// consideravelmente o
desempenho. Experimente.
Disponibilizei uma implementação desse algoritmo
junto ao tutorial
do GTK: procure
aqui.
-----------
Exemplo 1 - Entrada:
| 2 2 2 2 2 2 2 2 2 2 |
| 9 9 9 9 9 9 9 9 9 9 |
| 9 9 1 1 1 1 1 1 9 9 |
| 9 9 1 1 1 1 1 1 9 9 |
| 9 9 9 9 1 1 9 9 9 9 |
| 9 9 9 9 1 1 9 9 9 9 |
| 9 9 9 9 1 1 9 9 9 9 |
| 9 9 9 9 1 1 9 9 9 9 |
| 7 9 9 9 1 1 9 9 7 7 |
| 7 7 9 9 9 9 9 7 7 7 |
Nova Cor: 0
Pixel Inicial: M[4,4]
Saída:
| 2 2 2 2 2 2 2 2 2 2 |
| 9 9 9 9 9 9 9 9 9 9 |
| 9 9 0 0 0 0 0 0 9 9 |
| 9 9 0 0 0 0 0 0 9 9 |
| 9 9 9 9 0 0 9 9 9 9 |
| 9 9 9 9 0 0 9 9 9 9 |
| 9 9 9 9 0 0 9 9 9 9 |
| 9 9 9 9 0 0 9 9 9 9 |
| 7 9 9 9 0 0 9 9 7 7 |
| 7 7 9 9 9 9 9 7 7 7 |
-----------------------------------------
Melhor trabalho
entregue até o momento: Clique
Aqui
Autores:
Ulysses Pereira de Almeida Neto
Higor Aparecido Vieira Alves
Paulo Ricardo Paz Vital
Projetar e implementar em Java o tradicional jogo paciência. Não devem ser reutilizadas as estruturas de dados, para listas e pilhas, já implementadas em Java (novas implementações terão que ser realizadas). As seguintes regras de funcionamento do jogo deverão ser respeitadas:
Configuração inicial e regras de empilhamento
Um único baralho de 52 cartas é utilizado (as cartas podem ser identificada por siglas de dois caracteres, o primeiro indicando o valor - A, 2, 3, ...,J ,Q , K - e o segundo indicando os naipes - E, C, P, O. Assim, a cadeia de caracteres "KC", por exemplo, representaria o rei de copas).
Existem 4 pilhas de naipe inicialmente vazias onde cartas do mesmo naipe devem ser empilhadas, em seqüência ascendente (iniciando com o ás e fechando com o rei).
Existem 7 pilhas de fileira que iniciam na seguinte configuração: 1 carta na primeira pilha, 2 na segunda, 3 na terceira, ..., 7 na sétima. Apenas a carta no topo da pilha de fileira é inicialmente virada para cima (as outras ficam viradas para baixo). As cartas devem ser empilhadas, em cada pilha de fileira, em seqüência descendente, com cartas de naipe espada ou paus (pretos) intercaladas com cartas de naipe copas e ouro (vermelhas). Sempre deve existir uma carta virada para cima em cada pilha de fileira.
Existe uma pilha de estoque, inicialmente contendo todas as cartas que não foram colocadas nas pilhas de fileira (viradas para baixo).
Existe uma pilha de descarte onde são colocadas as cartas retiradas da pilha de estoque que não foram inseridas nas pilhas de naipes ou de fileiras.
Movimentos possíveis e objetivo do jogo
Retirar cartas da pilha de estoque, uma por vez, e empilha-las nas pilhas de naipe, fileira ou descarte.
Retirar 1 carta virada para cima no topo de uma pilha de fileira e empilha-la em uma pilha de naipes.
Retirar n cartas que estejam viradas para cima em uma pilha de fileira e transporta-las para uma outra fileira. (este movimento pode virar a carta do novo topo).
Objetivo do jogo: empilhar todas as cartas nas pilhas de naipe.
Paulo Roberto Montefusco EDI - 2008
Projetar e implementar um jogo de dominó a ser jogado contra o computador. Cada uma das 28 peças de domíno podem ser representadas através de um par de inteiros, variando de 0 a 6: (0,0), (0,1), ..., (0,6), (1,1), (1,2), ..., (1,6), ..., (6,6). Listas encadeadas devem ser utilizadas para representar as peças do usuário, do computador, "do monte" e "na mesa".
Flavius Josephus foi um personagem famoso do século I. Diz a lenda que ele não teria sobrevivido se não fosse sua extraordinária capacidade matemática. Durante a guerra entre Judeus e Romanos, ele fazia parte de um grupo de 41 rebeldes judeus, cercados em uma caverna, pelo Romanos. Preferindo o suicídio à captura, os rebeldes decidiram formar um círculo e passando por cada soldado do círculo, de um em um, matar sempre o terceiro. Mas Josephus, nao querendo participar desse ato, calculou rapidamente em que posição ele, e seus amigos, deveriam ficar, para que todos os outros fossem escolhidos antes deles. (Do livro Concrete Mathematics de Knuth, Graham e Patashnick).
Seja n o número de pessoas no círculo e m o incremento que deve ser usado para escolher o elemento a ser eliminado. Implemente um algoritmo para calcular em que posição Josephus deveria ficar para não ter que ser eliminado (último escolhido). Por exemplo, se n=8 e m=3 então a ordem das eliminações será 3,6,1,5,2,8,4,7 e portanto, Josephus deveria ficar na sétima posicão do círculo.
Use uma lista circular duplamente encadeada na resolução do problema.
Entrada:
int n : Total de pessoas
int m : Incremento
Saida:
int p : Posição que será escolhida
por último
Opcionais: Mostrar, graficamente, a execução
do algorítmo.
-----------------------------------------
Melhor trabalho entregue até o momento: Clique Aqui (1) Clique Aqui (2)
Autores:
(1) Álvaro Roberto Silvestre Fialho
(2) Felipe Augusto Zuffo
Faça um programa para carregar na memória RAM uma "base de dados" contendo nome, endereço e telefone de algumas pessoas, e permitir que o usuário faca consultas a essa "base de dados" por nome e por telefone. A "base de dados" ficará em um arquivo no formato "texto delimitado", com um registro por linha. O delimitador de campos é o ponto-e-virgula. O arquivo agenda.txt é um exemplo de "base de dados" que poderá ser utilizada para testar o seu programa.
Na memória, a base de dados deverá ser armazenada em um vetor. Cada elemento do vetor será uma estrutura com 3 campos: nome, endereco e telefone. A busca será implementada através de duas AVLs, uma para os nomes e outra para os telefones.
Opções complementares:
- Inserção
e Remoção de Registros
- Apresentaçao das
Árvores AVL na tela do computador.
- Opção
para listar informações ordenadas por nome ou telefone.
Material de Apoio:
- at-p1.cpp
: Programa exemplo que lê o arquivo e guarda num vetor
(excelente ponto de partida).
Similar ao trabalho 6 mas utilizando
Árvore Binária de Busca no lugar de AVL.
Fontes
de programa simples que implementa uma Árvore de Busca
Binária em C++
Inclui arquivos de projetos e
arquivos auxiliares para compilacão no CBuilder.
Implementacao
de uma Lista usando C++ (com Templates).
Este arquivo
contem uma implementacao minha para lista simplesmente
encadeada. Pode ser usada como ponto de partida na implementacao de
outras estruturas de dados mais complexas.