Problema 1
Apresentar em forma de desenho o estado final da pilha após a inserção dos elementos:
2 3 5 2 6 71 10
Apresente o desempilhamento de 4 itens e o estado final da pilha
Entrada: vetor de tamanho n (origem)
Saída: um novo vetor de tamanho n invertido (destino)
-
1) Para cada elemento no vetor (do ultimo ao primeiro)
1.1) Ler o valor do vetor de origem
1.2)
E A S * Y * Q U E * * * S T * * * I O * N * * *
Problema
Entrada: uma frase digitada pelo usuario
Saída: informar o número de consoantes na frase
T H E B O O K I S O N T H E T A B L E
int main(){
int numCons, i, tam;
char frase[100];
numCons = 0;
gets(frase); // ler a frase do teclado
tam = strlen(frase);
for (i = 0; i < tam; i++)
{
if (frase[i] != 'A' && frase[i] != 'E' &&
frase[i] != 'I' && frase[i] != 'O' &&
frase[i] != 'U' ){
numCons++;
}
}
printf("Numero de consoantes: %d\n", numCons);
return 0;
}
int main(){
int numCons, i, tam;
char frase[100];
numCons = 0;
gets(frase); // ler a frase do teclado
tam = strlen(frase);
for (i = 0; i < tam; i++)
{
if (frase[i] >= 'A' && frase[i] <= 'Z'){ // se o caractere for uma letra
printf("%c ", frase[i]);
}
}
printf("Numero de consoantes: %d\n", numCons);
return 0;
}
void subtrair(int *a, int *b, int *r){
*r = *a - *b;
}
sexta-feira, 20 de setembro de 2013
2013/2-2013.09.19-AED: TAD Livro (TP1)
# tad biblioteca de livros
typedef char[5] TipoCodigo;
typedef char[30] TipoTituloLivro;
typedef char[15] TipoCategoria;
typedef char[30] TipoAutor;
typedef float TipoValor;
struct T_Livro {
TipoCodigo codigo;
TipoTituloLivro titulo;
TipoCategoria categoria;
TipoAutor autor;
TipoValor valorPago;
};
typedef struct T_Livro TipoLivro;
struct T_Biblioteca{
int tamanho;
int capacidade;
TipoLivro[100] livros;
}
typedef struct T_Biblioteca TipoBiblioteca;
//assinatura das funções void adicionarLivro(TipoBiblioteca * b,
TipoLivro l);
// implementação das funções
void adicionarLivro(TipoBiblioteca * b,
TipoLivro l)
{
// se a biblioteca estiver cheia
if (b->capacidade == b->tamanho)
{
printf("ERRO: Biblioteca cheia!\n");
return;
}
int pos = b->tamanho;
b->livros[pos] = l;
b->tamanho++;
}
typedef char[5] TipoCodigo;
typedef char[30] TipoTituloLivro;
typedef char[15] TipoCategoria;
typedef char[30] TipoAutor;
typedef float TipoValor;
struct T_Livro {
TipoCodigo codigo;
TipoTituloLivro titulo;
TipoCategoria categoria;
TipoAutor autor;
TipoValor valorPago;
};
typedef struct T_Livro TipoLivro;
struct T_Biblioteca{
int tamanho;
int capacidade;
TipoLivro[100] livros;
}
typedef struct T_Biblioteca TipoBiblioteca;
//assinatura das funções void adicionarLivro(TipoBiblioteca * b,
TipoLivro l);
// implementação das funções
void adicionarLivro(TipoBiblioteca * b,
TipoLivro l)
{
// se a biblioteca estiver cheia
if (b->capacidade == b->tamanho)
{
printf("ERRO: Biblioteca cheia!\n");
return;
}
int pos = b->tamanho;
b->livros[pos] = l;
b->tamanho++;
}
sexta-feira, 13 de setembro de 2013
2013/2-AED-2013.09.12: TAD Pilha - Laboratório em sala de aula
Arquivo .h
// tad pilha.h
typedef int TipoChave;
typedef struct {
TipoChave Chave;
}TipoItem;
typedef struct TipoCelula * TipoApontador;
typedef struct TipoCelula{
TipoItem Item;
TipoApontador Prox;
}TipoCelula;
typedef struct {
int Tamanho;
TipoApontador Topo, Fundo;
}TipoPilha;
// criar uma nova pilha vazia
void FPVazia(TipoPilha * Pilha);
// verifica se a pilha está vazia
int VaziaPilha(TipoPilha Pilha);
// empilha um novo elemento na pilha
void Empilha(TipoItem x, TipoPilha* Pilha);
// desempilha um elemento da pilha
void Desempilha(TipoItem* x, TipoPilha* Pilha);
// informa o tamanho da pilha
int TamanhoPilha(TipoPilha Pilha);
// imprime os valores da pilha
void ImprimirPilha(TipoPilha Pilha);
// informa o elemento que está no topo da pilha
TipoItem TopoPilha(TipoPilha Pilha);
void FPVazia(TipoPilha * Pilha){
// criar a celula topo, cabeca
Pilha->Topo = (TipoApontador)
malloc(sizeof(TipoCelula));
// faz o fundo apontar para o mesmo lugar do topo
Pilha->Fundo = Pilha->Topo;
// inicializa o tamanho para zero
Pilha->Tamanho = 0;
}
int TamanhoPilha(TipoPilha Pilha){
return Pilha.Tamanho;
}
int VaziaPilha(TipoPilha Pilha){
return Pilha.Topo == Pilha.Fundo;
}
void Empilha(TipoItem x, TipoPilha* Pilha){
TipoApontador aux;
aux = (TipoApontador) malloc(sizeof(TipoCelula));
Pilha->Topo->Item = x;
aux->Prox = Pilha->Topo;
Pilha->Topo = aux;
Pilha->Tamanho++;
}
void Desempilha(TipoItem *x, TipoPilha* Pilha){
TipoApontador q;
if (VaziaPilha(*Pilha)){
printf("ERRO: Pilha vazia!\n");
return;
}
q = Pilha->Topo;
Pilha->Topo = q->Prox;
*x = q->Prox->Item;
free(q); // libera a celula removida da memoria
}
void ImprimirPilha(TipoPilha Pilha)
{
TipoApontador aux;
TipoItem item;
printf("Tamanho: %d\n", Pilha.Tamanho);
aux = Pilha.Topo;
printf("TOPO: \n");
while (aux->Prox != NULL){
printf("%d\n", aux->Prox->Item);
aux = aux->Prox;
}
printf("FUNDO: \n");
}
Arquivo .c
#include <stdio.h>
#include <stdlib.h>
#include "tad-pilha.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
TipoPilha Pilha;
TipoItem item;
TipoItem a[] = {2, 5, 6, 1, 6, 3, 7};
int tam = 7, i;
FPVazia(&Pilha); // inicializando a pilha
ImprimirPilha(Pilha);
for (i = 0; i < tam; i++){ // empilhamento
item = a[i];
Empilha(item, &Pilha);
ImprimirPilha(Pilha);
}
for (i = 0; i < tam; i++){ // desempilhamento
Desempilha(&item, &Pilha);
printf("Desempilhando: %d\n", item);
ImprimirPilha(Pilha);
}
return 0;
}
// tad pilha.h
typedef int TipoChave;
typedef struct {
TipoChave Chave;
}TipoItem;
typedef struct TipoCelula * TipoApontador;
typedef struct TipoCelula{
TipoItem Item;
TipoApontador Prox;
}TipoCelula;
typedef struct {
int Tamanho;
TipoApontador Topo, Fundo;
}TipoPilha;
// criar uma nova pilha vazia
void FPVazia(TipoPilha * Pilha);
// verifica se a pilha está vazia
int VaziaPilha(TipoPilha Pilha);
// empilha um novo elemento na pilha
void Empilha(TipoItem x, TipoPilha* Pilha);
// desempilha um elemento da pilha
void Desempilha(TipoItem* x, TipoPilha* Pilha);
// informa o tamanho da pilha
int TamanhoPilha(TipoPilha Pilha);
// imprime os valores da pilha
void ImprimirPilha(TipoPilha Pilha);
// informa o elemento que está no topo da pilha
TipoItem TopoPilha(TipoPilha Pilha);
void FPVazia(TipoPilha * Pilha){
// criar a celula topo, cabeca
Pilha->Topo = (TipoApontador)
malloc(sizeof(TipoCelula));
// faz o fundo apontar para o mesmo lugar do topo
Pilha->Fundo = Pilha->Topo;
// inicializa o tamanho para zero
Pilha->Tamanho = 0;
}
int TamanhoPilha(TipoPilha Pilha){
return Pilha.Tamanho;
}
int VaziaPilha(TipoPilha Pilha){
return Pilha.Topo == Pilha.Fundo;
}
void Empilha(TipoItem x, TipoPilha* Pilha){
TipoApontador aux;
aux = (TipoApontador) malloc(sizeof(TipoCelula));
Pilha->Topo->Item = x;
aux->Prox = Pilha->Topo;
Pilha->Topo = aux;
Pilha->Tamanho++;
}
void Desempilha(TipoItem *x, TipoPilha* Pilha){
TipoApontador q;
if (VaziaPilha(*Pilha)){
printf("ERRO: Pilha vazia!\n");
return;
}
q = Pilha->Topo;
Pilha->Topo = q->Prox;
*x = q->Prox->Item;
free(q); // libera a celula removida da memoria
}
void ImprimirPilha(TipoPilha Pilha)
{
TipoApontador aux;
TipoItem item;
printf("Tamanho: %d\n", Pilha.Tamanho);
aux = Pilha.Topo;
printf("TOPO: \n");
while (aux->Prox != NULL){
printf("%d\n", aux->Prox->Item);
aux = aux->Prox;
}
printf("FUNDO: \n");
}
Arquivo .c
#include <stdio.h>
#include <stdlib.h>
#include "tad-pilha.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
TipoPilha Pilha;
TipoItem item;
TipoItem a[] = {2, 5, 6, 1, 6, 3, 7};
int tam = 7, i;
FPVazia(&Pilha); // inicializando a pilha
ImprimirPilha(Pilha);
for (i = 0; i < tam; i++){ // empilhamento
item = a[i];
Empilha(item, &Pilha);
ImprimirPilha(Pilha);
}
for (i = 0; i < tam; i++){ // desempilhamento
Desempilha(&item, &Pilha);
printf("Desempilhando: %d\n", item);
ImprimirPilha(Pilha);
}
return 0;
}
quinta-feira, 12 de setembro de 2013
2013/2-AED-2013.09.12: TAD Pilha
Arquivo .H
#include <stdio.h>
#include <stdlib.h>
// TAD Pilha
#define MAX 900000
// definição do tipochave
typedef int TipoChave;
// definição do registro tipo item
typedef struct {
TipoChave Chave;
} TipoItem;
// definição do apontador para célula
typedef struct TipoCelula *TipoApontador;
// definição para o tipo célula
typedef struct TipoCelula {
TipoItem Item;
TipoApontador Prox;
} TipoCelula;
// definição do tipo pilha
typedef struct{
TipoApontador Fundo, Topo;
int Tamanho;
} TipoPilha;
// função que inicializa a pilha
void FPVazia(TipoPilha *Pilha);
// função que verifica se a pilha está vazia
int VaziaPilha(TipoPilha Pilha);
// função que empilha um item na pilha
void Empilha(TipoItem x, TipoPilha *Pilha);
// função que desempilha um item da pilha
void Desempilha(TipoPilha *Pilha, TipoItem *Item);
// função que retorna o tamanho da pilha
int TamanhoPilha(TipoPilha Pilha);
// função que informa o elemento no topo da pilha
TipoItem TopoPilha(TipoPilha *Pilha);
// função que imprime o estado atual da pilha
void ImprimirPilha(TipoPilha Pilha);
// função que cria uma nova pilha
void FPVazia(TipoPilha *Pilha)
{ // cria a célula cabeça
Pilha->Topo = (TipoApontador)
malloc(sizeof(TipoCelula));
// inicializa o topo e fundo
Pilha->Fundo = Pilha->Topo;
// inicializa o próximo do topo
Pilha->Topo->Prox = NULL;
// inicializa o tamanho
Pilha->Tamanho = 0;
}
// função que verifica se a
//pilha está vazia
int VaziaPilha(TipoPilha Pilha)
{ // se a célula no topo for igual
// a célula no fundo, ela está
// vazia
return (
Pilha.Topo == Pilha.Fundo);
}
// função que empilha um item na pilha
void Empilha(TipoItem x, TipoPilha *Pilha)
{
TipoApontador Aux; // apontador auxiliar
// aloca o apontador auxiliar
Aux = (TipoApontador)
malloc(sizeof(TipoCelula));
// coloca o item no topo da pilha
Pilha->Topo->Item = x;
// célula auxiliar aponta para topo
Aux->Prox = Pilha->Topo;
// topo recebe auxiliar
Pilha->Topo = Aux;
// incrementar o tamanho da pilha
Pilha->Tamanho++;
}
// função que desempilha o item no
// topo da pilha
void Desempilha(TipoPilha *Pilha,
TipoItem *Item)
{ TipoApontador q;
// se a pilha estiver vazia,
// mostrar uma mensagem de erro
if (VaziaPilha(*Pilha)) {
printf("Erro: pilha vazia\n"); return;
}
q = Pilha->Topo; // obtem a célula no topo
// altera o apontador para
// apontar para o próximo
Pilha->Topo = q->Prox;
// obtem o item a ser removido do topo
*Item = q->Prox->Item;
// libera o espaço de memória alocado
free(q);
// diminuir o tamanho da pilha
Pilha->Tamanho--;
}
// função para obter Tamanho da pilha
int TamanhoPilha(TipoPilha Pilha)
{ return (Pilha.Tamanho); }
// função para obter o elemento no topo da pilha
TipoItem TopoPilha(TipoPilha *Pilha)
{ TipoItem item; item.Chave = -1;
if (VaziaPilha(*Pilha) == 0){
item = Pilha->Topo->Prox->Item;
}
return (item);
}
void ImprimirPilha(TipoPilha Pilha)
{
TipoApontador aux; TipoItem item;
printf("Pilha Tamanho: %d -> ", Pilha.Tamanho);
aux = Pilha.Topo;
printf("Topo: ");
while (aux->Prox != NULL){
item = aux->Prox->Item;
printf(" %3d | ", item.Chave);
aux = aux->Prox;
}
printf(": Fundo\n");
}
Arquivo .C
#include "tad-pilha.h"
int main(void) {
TipoPilha pilha; TipoItem item; int i;
int chaves[] = {10, 11, 12, 45, 1};
FPVazia(&pilha); // Inicializa a pilha
printf("Pilha vazia?: %d\n", VaziaPilha(pilha)); // pilha vazia?
item = TopoPilha(&pilha); // elemento no topo da pilha
printf("Elemento no topo da pilha: %d\n", item.Chave);
ImprimirPilha(pilha);
/*Empilha cada chave */
for (i = 0; i < 5; i++){
item.Chave = chaves[i];
Empilha(item, &pilha);
printf("Empilhou: %3d => ", item.Chave);
ImprimirPilha(pilha);
}
int tamPilha = TamanhoPilha(pilha); // tamanho da pilha
printf("Tamanho da pilha: %d \n", tamPilha);
printf("Pilha vazia?: %d\n", VaziaPilha(pilha)); // pilha vazia?
item = TopoPilha(&pilha); // elemento no topo da pilha
printf("Elemento no topo da pilha: %d\n", item.Chave);
for (i = 0; i < tamPilha; i++) { /*Desempilha cada chave */
Desempilha(&pilha, &item);
printf("Desempilhou: %3d => ", item.Chave);
ImprimirPilha(pilha);
}
printf("Tamanho da pilha: %d\n", TamanhoPilha(pilha)); // tamanho da pilha
printf("Pilha vazia?: %d\n", VaziaPilha(pilha)); // pilha vazia?
system("PAUSE");
return EXIT_SUCCESS;
}
domingo, 8 de setembro de 2013
2013/2-PA-2013.09.06: Laboratório 2: Arquivos
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int c, n;
time_t seconds;
time(&seconds);
srand((unsigned int) seconds);
FILE * fp, * fp2;
fp = fopen("dados.txt", "w");
if (fp == NULL){
perror("ERRO: não foi possível abrir o arquivo para escrita.");
return EXIT_FAILURE;
}
printf("Escrevendo o arquivo . . .\n");
int numNumbers = 1000000;
for (c = 0; c < numNumbers; c++) {
n = rand()%100 + 1;
fprintf(fp, "%d\n", n);
}
fclose(fp);
fp2 = fopen("dados.txt", "r");
if (fp2 == NULL){
perror("ERRO: não foi possível abrir o arquivo para escrita.");
return EXIT_FAILURE;
}
printf("Lendo o arquivo . . .\n");
for (c = 0; c < numNumbers; c++) {
fscanf(fp2, "%d", &n);
fprintf(stdout, "%d ", n);
}
fclose(fp2);
return EXIT_SUCCESS;
}
#include <stdlib.h>
#include <time.h>
int main() {
int c, n;
time_t seconds;
time(&seconds);
srand((unsigned int) seconds);
FILE * fp, * fp2;
fp = fopen("dados.txt", "w");
if (fp == NULL){
perror("ERRO: não foi possível abrir o arquivo para escrita.");
return EXIT_FAILURE;
}
printf("Escrevendo o arquivo . . .\n");
int numNumbers = 1000000;
for (c = 0; c < numNumbers; c++) {
n = rand()%100 + 1;
fprintf(fp, "%d\n", n);
}
fclose(fp);
fp2 = fopen("dados.txt", "r");
if (fp2 == NULL){
perror("ERRO: não foi possível abrir o arquivo para escrita.");
return EXIT_FAILURE;
}
printf("Lendo o arquivo . . .\n");
for (c = 0; c < numNumbers; c++) {
fscanf(fp2, "%d", &n);
fprintf(stdout, "%d ", n);
}
fclose(fp2);
return EXIT_SUCCESS;
}
sexta-feira, 6 de setembro de 2013
2013/2-AED-2013.09.05: TAD Matriz (ATUALIZADA)
// tad matriz
// definição da TAD
typedef int TipoChave;
struct t_matriz{
int capacidade;
int tamanho;
int linha;
int coluna;
int numLinhas;
int numColunas;
TipoChave **a;
};
typedef struct t_matriz TipoMatriz;
// operações da TAD matriz
// criar uma nova matriz
void criarMatriz(TipoMatriz *m, int numLinhas, int numColunas);
void imprimirMatriz(TipoMatriz m);
void inserirMatriz(TipoMatriz *m, TipoChave c);
TipoChave obterElementoEm(TipoMatriz m, int linha, int coluna);
void obterPosicaoDe(TipoMatriz m, TipoChave c,
int *linha, int *coluna);
int cheiaMatriz(TipoMatriz m);
// implementacao
void criarMatriz(TipoMatriz *m, int numLinhas, int numColunas){
int c = 0;
m->numLinhas = numLinhas;
m->numColunas = numColunas;
m->capacidade = numLinhas * numColunas;
m->tamanho = 0;
m->linha = 0;
m->coluna = 0;
m->a = (int **) malloc(numLinhas * sizeof(int *));
for (c = 0; c < numLinhas; c++){
m->a[c] = (int *) malloc (numColunas * sizeof (int));
}
}
void imprimirMatriz(TipoMatriz m){
printf("Tamanho: %d\n", m.tamanho);
printf("Capacidade: %d\n", m.capacidade);
printf("Dimensao: %dx%d\n", m.numLinhas, m.numColunas);
int i, j;
for (i = 0; i < m.numLinhas; i++){
for (j = 0; j < m.numColunas; j++){
printf("%d ", m.a[i][j]);
}
}
}
TipoChave obterElementoEm(TipoMatriz m, int linha, int coluna){
if (linha == m.numLinhas || coluna == m.numColunas){
printf("ERRO: posição incorreta!\n");
return -1;
}
return m.a[linha][coluna];
}
void obterPosicaoDe(TipoMatriz m, TipoChave c,
int *linha, int *coluna){
int i, j;
for (int i = 0; i < linhas; i++){
for (j = 0; j < colunas; j++){
if (c == m.a[i][j]){
*linha = i;
*coluna = j;
return;
}
}
}
*linha = -1;
*coluna = -1;
}
int cheiaMatriz(TipoMatriz m){
return m.tamanho - m.capacidade;
}
// definição da TAD
typedef int TipoChave;
struct t_matriz{
int capacidade;
int tamanho;
int linha;
int coluna;
int numLinhas;
int numColunas;
TipoChave **a;
};
typedef struct t_matriz TipoMatriz;
// operações da TAD matriz
// criar uma nova matriz
void criarMatriz(TipoMatriz *m, int numLinhas, int numColunas);
void imprimirMatriz(TipoMatriz m);
void inserirMatriz(TipoMatriz *m, TipoChave c);
TipoChave obterElementoEm(TipoMatriz m, int linha, int coluna);
void obterPosicaoDe(TipoMatriz m, TipoChave c,
int *linha, int *coluna);
int cheiaMatriz(TipoMatriz m);
// implementacao
void criarMatriz(TipoMatriz *m, int numLinhas, int numColunas){
int c = 0;
m->numLinhas = numLinhas;
m->numColunas = numColunas;
m->capacidade = numLinhas * numColunas;
m->tamanho = 0;
m->linha = 0;
m->coluna = 0;
m->a = (int **) malloc(numLinhas * sizeof(int *));
for (c = 0; c < numLinhas; c++){
m->a[c] = (int *) malloc (numColunas * sizeof (int));
}
}
void imprimirMatriz(TipoMatriz m){
printf("Tamanho: %d\n", m.tamanho);
printf("Capacidade: %d\n", m.capacidade);
printf("Dimensao: %dx%d\n", m.numLinhas, m.numColunas);
int i, j;
for (i = 0; i < m.numLinhas; i++){
for (j = 0; j < m.numColunas; j++){
printf("%d ", m.a[i][j]);
}
}
}
TipoChave obterElementoEm(TipoMatriz m, int linha, int coluna){
if (linha == m.numLinhas || coluna == m.numColunas){
printf("ERRO: posição incorreta!\n");
return -1;
}
return m.a[linha][coluna];
}
void obterPosicaoDe(TipoMatriz m, TipoChave c,
int *linha, int *coluna){
int i, j;
for (int i = 0; i < linhas; i++){
for (j = 0; j < colunas; j++){
if (c == m.a[i][j]){
*linha = i;
*coluna = j;
return;
}
}
}
*linha = -1;
*coluna = -1;
}
int cheiaMatriz(TipoMatriz m){
return m.tamanho - m.capacidade;
}
Assinar:
Comentários (Atom)