Set 25 2009

Exercicio em C++

Boa noite,

Nos últimos dias uma amiga pediu ajuda para resolver dois exercícios em C++ que o professor dela havia passado. O enunciado dos mesmo são:

1. Faça um programa que leia um numero não determinado de valores inteiros e positivos. Para cada valor lido: se o numero for par, verificar quantos divisores possui e escrever esta informação. Se for impar e menor que 12, escrever o seu fatorial. Se for impar e maior que 12, escrever a soma dos números de 1 até ele.

Resolução C++ do exercicio 1.

2. Escrever um programa que leia valores, um de cada vez, e conta quantos deles estão em cada um dos intervalos: [0,25], [25, 50], [50, 75] e [75,100].

Resolução C++ do exercicio 2

Matheus

PS: Pra mim é C mas como só ajudei ela não entrei no mérito dessa questão.

Jun 23 2009

MD5 “Decrypter”, Java

Boa noite,

Nas aulas de programação concorrente o professor passou uma introdução de Programação Distribuida e pediu que nós criassemos algo que utilizasse ela. Então eu sugeri ao meu colega Olav para implementarmos um “quebrador” de senha por força bruta. O mesmo funciona da seguinte maneira, existe um master onde os slaves se conectam, o master informa a string a ser quebrada e qual faixa de caracteres o slave deve tentar. Após terminar aquela faixa caso ele não obtenha sucesso o slave recebe uma nova faixa, caso ele encontre, ele informa o master qual a string utilizada para gerar tal MD5.

Implementação do “MD5 Decrypter”

Existem muitas coisas que ainda podem ser aperfeiçoadas nesse programa como:
- Não precisar um número fixo de Slaves. Aceitar todos que forem se conectando em tempo real.
- Melhor distribuição de faixas.

Ele pode ser praticamente o inicio de um programa de Força Bruta Distribuida, que já devem existir vários por ai.

Espero que goste,
Matheus

Jun 22 2009

Exercício Estacionamento, Java, Programação Concorrente.

Boa tarde,

Semana passada fiz a última prova de Programação Concorrente deste semestre. O problema que devia se solucionar era o seguinte:

O estacionamento de uma universidade possui 30 vagas. Enquanto o mesmo possue vagas, não existe prioridade para quem estaciona. Quando o mesmo está cheio, forma-se uma fila, onde professores possuem a mais alta prioridade, seguido pelos funcionarios e após os alunos. Utilize java com Threads para “simular” este problema. Utilize 10 professores, 15 funcionários, 30 alunos.

O Professor Mazzucco, disponibilizou uma implementação do mesmo que vou disponibilizar para vocês.

Implementação problema estacionamento em Java

Matheus

Mai 28 2009

Exercícios, Programação Concorrente.

Boa noite,

Amanhã tenho uma prova de Programação com o conteúdo, “monitores” e “redes de petri”. O professor passou uns exercícios para que fossem resolvidos e entregues, dos 5 resolvi apenas 3 até o momento. A linguagem utilizada para implementação dos mesmos foi Pascal FC (uma linguagem para ensinar “programação concorrente”). Bom, vamos a resolução e enunciados dos mesmos.

1) Pombos correio foram treinados para transportar cartas da cidade
A para a cidade B. Na cidade A existe uma Caixa Postal onde as
pessoas depositam suas cartas para que sejam entregues na cidade
B. Os pombos consultam a Cxpostal e retiram sempre 5 cartas para
transportar na sua viagem. Caso não existam ainda 5 cartas na
caixa, o pombo espera até que esse número seja atingido. Na cidade
B existe uma gaiola onde os pombos depositam suas cartas e ficam
presos até que um processo tratador libere-os. O tratador verifica a
gaiola a cada 20 clocks e libera todos os pombos somente se o
número de pombos for maior ou igual a 2. Os pombos somente
transportam cartas de A para B, na sua volta eles voam vazios.
Construa um monitor para controlar a utilização da Caixa Postal
pelas pessoas (13), pombos (6) e o tratador (1).

Resolução do exercício sobre pombos.

2) Implemente o problema dos fumantes utilizando monitor. Três
fumantes e um agente sentados em uma mesa. Cada fumante
possui dois dos três ingredientes para se fazer um cigarro: fósforo,
fumo e palha. O agente possui os três e aleatoriamente sorteia um
dos ingredientes. O fumante contemplado faz o seu cigarro, fuma e
libera o agente para fazer novo sorteio.

Resolução do exercício sobre mesa de fumantes.

3) Processos produtores e consumidores se sincronizam através de
um buffer circular com 5 posições (um array de 5 posições). Um
produtor gera um número aleatório e coloca no buffer caso exista
uma vaga. Um consumidor retira um número do buffer se houver.
Implemente utilizando monitor.

Resolução do exercício sobre sincronização através de array circular.

4) Suponha um ambiente em que processos compartilham
impressoras. Existem dois tipos de impressora: tipo A e Tipo B.
Existem 3 classes de processos: classe PA que somente utilizam
impressoras do tipo A, classe PB que somente utilizam impressoras
do tipo B e classe PAB que utilizam impressoras de qualquer tipo.
Esses processos, do tipo PAB, têm prioridade sobre os demais
quando não houver impressoras disponíveis. Implemente utilizando
monitor.

Resolução do exercício sobre impressoras.

5) Implemente o problema da ponte utilizando monitor. Uma ponte,
que separa duas cidades A e B, somente permite tráfego em um
sentido de A para B ou de B para A. Se a ponte estiver vazia pode
ser utilizada por carros de A ou de B. Se um carro de A acessou a
ponte, ela é trancada para os carros de B e todos os carros de A que
desejarem podem também acessar. Quando o último carro que sai
de A para B deixar a ponte, ela deve ser liberada.

Resolução do exercício sobre Ponte.

Lista dos 5 exercícios e sua resolução.

UPDATE 1: Exercícios que não estavam resolvidos foram resolvidos e adicionados. Lembro que o professor ainda não entrou uma correção do mesmo, mas testei eles e parece-me tudo ok.Lembrando também que estes exercícios foram disponibilizados aos alunos pelo Professor José Mazzucco Júnior.

Espero que isso seja util a todos,
Matheus

Mai 06 2009

Lista encadeada, Estrutura de dados.

Saudações,

Para não perder o costume, irei postar outro exercicio resolvido em uma aula. Dessa vez o exercicio é o seguinte:
- Implemenetar o sistema de contabilidade de um mafioso. (outros detalhes continue lendo o post)

O enunciado do mesmo se encontra no “read the rest of this entry” para não deixar o post muito extenso devido ao longo enunciado.

A resolução do mesmo você pode baixar aqui.

Read more »

Abr 29 2009

Lista com ponteiros, Estrutura de Dados.

Boa noite a todos,

Como ainda não produzi nada muito bom hoje em casa (no lab produzi algo relaciona a xml-rpc que pretendo postar em breve), resolvi postar mais um dos 198578951 exercicios que estou tendo que fazer para estrutura de dados. O Exercicio de hoje é nada mais nada menos que uma implementação de uma Lista com Ponteiros, ou seja, ela não tem limite de elementos (é claro, se a memoria for infinita).

Como no exercicio anterior, o enunciado fica para a pagina inteira pois é muito grande.

O exercicio resolvido você encontra aqui.

Read more »

Abr 28 2009

Pilha, com ponteiros, Estrutura de Dados.

Então, hoje vou demonstrar um dos outros exercicios que fizemos na aula de estrutura de dados, lembrando mais uma vez que estes são exercicios que eu faço rapidamente e não me importo muito com várias coisas pela falta de tempo. O que irei mostrar hoje é uma Pilha com vetores porém em vez de ele ter um inteiro indicando o ultimo elemento, o ultimo será um ponteiro para o ultimo elemento da pilha.

Para ver o enunciado inteiro continue lendo (enunciado grande).

Para baixar o arquivo, clique aqui!

Read more »

Abr 25 2009

Lista, Estrutura de dados

Boa tarde,

Como estou tendo aula de estrutura de dados estou tentando colocar aqui, alguns dos conceitos que aprendemos em sala, junto ao seu exercicio e uma implementação de um exercicio (desenvolvido rapidamente, muitas vezes). A estrutura apresentada hoje é Lista, uma estrutura de dados linear. Existe também a lista ligada, ou encadeada que também é conhecida por linear e dinamica (fica pra outro post) e a lista duplamente ligada, ou duplamente encadeada (fica pra outro post também). A pilha e a fila são implementações especiais de listas. A Lista, não possue restrições como suas implementações especiais, e pode receber elementos em qualquer posição, remover de qualquer posição, remover especifico, adicionar em ordem entre outras.

O enunciado do exercicio que foi proposto para lista é o seguinte:

1. Crie o seu tipo de dados tLista em um headerfile;
2. esta deverá ser uma lista de elementos do tipo tAgenda;
3. O tipo tAgenda é um tipo que representa um nome de 30 posições e um número de telefone;
4. crie uma função maior(a,b) que compare os nomes de duas entradas;
5. programe todas as funções documentando cada função, inclusive com dicionário de dados;
6. crie um programa principal que execute todas as funções de lista a partir de um menu. A função procurar específico deverá basear-se no nome em uma Agenda;
7. além dessas funções, o programa deverá ser capaz de listar a lista em ordem alfabética.

Resolução do mesmo aqui.

Até mais,
Matheus

Abr 15 2009

Fila, Estrutura de dados

Boa Noite,

Como estou tendo aula de estrutura de dados estou tentando colocar aqui, alguns dos conceitos que aprendemos em sala, junto ao seu exercicio e uma implementação de um exercicio (desenvolvido rapidamente, muitas vezes). A estrutura apresentada hoje é Fila, uma estrutura de dados baseada no principio FIFO (first in, first out) ou seja, primeiro a entrar é o primeiro a sair. Ela, como a pilha possui duas funções básicas, que é adiciona e remove. Uma adicionando no fim, como uma fila (sem furos, é claro!) e a outra retirando do inicio.

Já faz alguns dias que resolvemos esse exercicio e pra ser sincero não tenho certeza se estou postando a ultima versão que tenho do mesmo, mas acredito que sim. O enunciado do exercicio resolvido foi o seguinte:

* Implemente todas as operações vistas sobre fila;
* implemente um programa principal que utilize a fila através de um menu com os seguintes itens: enfileirar, desenfileirar, limpar, mostrar fila, sair do programa. Use a estrutura de programação switch do “C” para isto;
* a fila possuirá tamanho máximo 100, definido como uma constante chamada MAXFILA. Utilize esta constante para a definição da estrutura de dados que será a fila;
* a fila será referenciada por uma variável global;
* para implementar a estrutura de dados defina um tipo elementoDaFila que será char[40] e defina a sua fila como um vetor de 100 elementoDaFila .

Aqui está a implementação da mesma que acredito ser a ultima.

Abraços,
Matheus

PS: Com o tempo eu pretendo (não sei se consigo) fazer algumas mudanças nas mesmas assim que for aprendendo novas tecnicas e conceitos relacionados ao assunto, mas como a faculdade ta muito corrida não sei se vai ser possivel.

Abr 02 2009

Pilha, Estrutura de dados.

Boa Noite,

Hoje vou ensinar um conceito bem básico de estrutura de dados, que vimos a algumas aulas atrás. PILHA, é uma estrutura de dados abstratos amplamente utilizada na informatica e é baseada no principio LIFO (Last in, first out), ou seja ultimo a entrar, primeiro a sair. Ela possue 2 funções que todas devem possuir, push (adicionar) e pop (remover), outros metodos que podem existir, podem ser considerados como privados, pois só mechem na estrutura interna da pilha.

O enunciado do exercicio que tivemos que resolver foi o seguinte:

* Implemente todas as operações vistas sobre pilha;
* implemente um programa principal que utilize a pilha através de um menu com os seguintes itens: empilhar, desempilhar, limpar, mostrar pilha, sair do programa. Use a estrutura de programação switch do “C” para isto;
* ao mostrar a pilha, o programa deve colocar embaixo de cada dado, a sua posição no vetor. Utilize as opções de definição de tamanho de campo de impressão do printf() para isto;
* a pilha possuirá tamanho máximo 30, definido como uma constante chamada MAXPILHA. Utilize esta constante para a definição da estrutura de dados que será a pilha;
* a pilha será referenciada por uma variável global.

Aqui está a primeira implementação que fizemos.

Abraços,
Matheus

PS: Com o tempo vou postar reformulações desse exercicio e os novos codigos desenvolvidos.