INF 1007 Programação II Semestre 09.2

Documentos relacionados
INF 1620 Estruturas de Dados Semestre Segundo Trabalho: Jogo de Caça-Palavras

Caracteres e Cadeias de Caracteres

Introdução à Programação

Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Algoritmos e Programação

3.1 - Funções para manipular dados de entrada e saída padrão

Introdução a Programação de Jogos

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação I A Linguagem C. Prof. Carlos Alberto

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

Introdução à Linguagem C Variáveis e Expressões

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Linguagem C Princípios Básicos (parte 1)

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Introdução à Linguagem C

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Programação: Vetores

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

1 Questões de Múltipla Escolha

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Disciplina de Algoritmos e Programação

1ª Lista de Exercícios

Vetores e Matrizes. Conceito. Conceito. Conceito. Conceito. Conceito. Variáveis Compostas Homogêneas. Matriz

Linguagem C: Introdução

Ambiente de desenvolvimento

3. Linguagem de Programação C

Algoritmos e Programação

INF 1620 P2-14/10/05 Questão 1 Nome:

Apêndice B. Cadeias de Caracteres (Strings)

Linguagem de Programação C

INF 1007 Simulado P2 Nome: Instruções

Linguagem de Programação I Vetores e Strings. Thiago Leite Francisco Barretto

LISTA DE EXERCÍCIOS - ro. 04

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Linguagem C. André Tavares da Silva.

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

CCO 016 / COM 110 Fundamentos de Programação

Estrutura de Programas e Tipos de Dados Simples

1 Exercícios com ponteiros

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

INF 1620 P1-14/04/07 Questão 1 Nome:

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Faculdade de Computação

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Trabalho de Programação 2 Processador CESAR

cadeia de caracteres (string) INF Programação I Prof. Roberto Azevedo

Métodos Computacionais. Strings (Vetor de Caracteres)

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Algoritmos e Estruturas de dados

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

INF 1005 Programação I

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Introdução à Programação Estruturada Parte 3. Material da Prof. Ana Eliza

Capítulo 6: Arquivos

1 Exercícios com ponteiros

Transcrição:

INF 1007 Programação II Semestre 09.2 Trabalho 1: Logodesafio O Logodesafio é um passatempo que exercita o conhecimento léxico dos participantes, consistindo em formar palavras a partir de um conjunto de letras embaralhadas que são exibidas em um quadro grande, e uma seqüência de letras exibida em um quadro menor. O objetivo do jogo é obter o maior número de pontos, da seguinte forma: a palavra principal, ou seja, a palavra que é escrita utilizando todas as letras contidas no quadro grande, vale 15 pontos; palavras comuns, ou seja, aquelas formadas apenas com as letras contidas no quadro grande, com 3 ou mais letras, valem 5 pontos; palavras sequências, ou seja, palavras de 4 ou mais letras que contêm a seqüência de letras do quadro menor e letras do quadro grande, valem 10 pontos. As letras disponíveis só podem aparecer uma vez em cada palavra e os acentos são ignorados. Além disso, não valem verbos, plurais, nomes próprios e abreviaturas. T L A N U LHA P I S A A Por exemplo, para o quadro acima, a palavra principal é PAULISTANA, e com as letras do quadro principal foram encontradas 30 palavras de 5 letras, 12 de 6 letras, 3 de 7 letras, 3 de 8 letras, 1 de 9 letras. Por exemplo, LÁPIS, TULIPA, PLATINA, ANALISTA e PAULATINA. Além disso, foram encontradas 8 palavras contendo a seqüência LHA. Por exemplo, PALHA e SAPATILHA. O objetivo deste trabalho é implementar, em linguagem C, um conjunto de funções que auxiliarão na criação do programa de um jogo de Logodesafio, ou seja, um jogo em que o participante tentará formar palavras a partir de dois grupos de letras que são fornecidos. O programa do Logodesafio e o usuário (jogador) interagem da forma descrita a seguir: O programa carrega um jogo específico e exibe as letras e instruções. Forme palavras com 3 letras ou mais com os caracteres: T L A N U P I S A A Ou com 4 letras ou mais e contendo tambem a sequencia: LHA

Em seguida o programa apresenta uma dica da quantidade de palavras que é possível formar com diferentes números de letras. Uma dica, voce pode formar: 12 palavras de 3 letras 19 palavras de 4 letras 34 palavras de 5 letras 12 palavras de 6 letras 3 palavras de 7 letras 5 palavras de 8 letras 2 palavras de 9 letras 1 palavra de 10 letras Num total de 88 palavras. O programa aguarda o usuário continuar o jogo digitando as palavras, ou terminar, digitando um único caractere e ENTER: Digite uma palavra com 3 ou mais letras, ou um unico caractere e ENTER para terminar... Se a palavra fornecida pelo usuário tiver menos de 3 caracteres, o programa exibe uma mensagem de erro e pede nova palavra. A palavra deve ter mais de 3 letras, tente outra vez... Se a palavra fornecida pelo usuário não cumpre as regras de formação para palavra principal, comum ou sequência, o programa exibe uma mensagem de erro e pede nova palavra. Essa palavra nao e valida, tente outra... Se a palavra fornecida pelo usuário for repetida, o programa exibe uma mensagem de erro e pede nova palavra. Essa palavra e repetida, tente outra... Se a palavra fornecida pelo usuário não consta da lista de palavras possíveis, o programa exibe uma mensagem de erro e pede nova palavra. Essa palavra nao existe, tente outra... Finalmente, se a palavra fornecida pelo usuário é bem formada, não repetida e consta da lista, o programa exibe a pontuação do jogador. Parabéns, vc ganhou mais 10 pontos, totalizando 55 pontos... A qualquer momento o usuário pode deixar o jogo digitando uma palavra com um único caractere. Após a pontuação final o programa mostrará a solução. Vc encontrou 11 palavras e acumulou 70 pontos... Observe que as palavras do jogo são armazenadas somente com letras maiúsculas, mas o jogador pode digitar as palavras com letras maiúsculas ou minúsculas de forma

indiferente, pois todos os caracteres são convertidos para maiúsculas. O Anexo 1 apresenta a listagem do programa logodesafio.c, que implementa o programa descrito anteriormente, exibindo estas e outras mensagens para situações específicas. Este programa utiliza a biblioteca desafio.h, que deve ser implementada pelos alunos, e a biblioteca jogo.h, que é fornecida aos alunos. O Anexo 2 apresenta o arquivo desafio.h, e o Anexo 3 apresenta o arquivo jogo.h. OBSERVAÇÕES: 1 A especificação completa e detalhada dos tipos de dados e funções que devem ser implementados estão no arquivo desafio.h --- cujo conteúdo não pode ser alterado ---, que está disponível como anexo a esse enunciado e também no site da disciplina. 2 A função main, fornecida no arquivo logodesafio.c, tem a finalidade de demonstrar a utilização das funções implementadas. Além disso, pode servir também como modelo para a implementação de testes mais completos. 3 O arquivo desafio.c deve ser enviado contendo apenas as funções implementadas. Ou seja, o seu arquivo submetido NÃO deve possuir a função main. A correção do trabalho será realizada pelo corretor automático, que terá um programa que chamará as funções conforme declaradas na interface desafio.h. 4 Programas que apresentarem erro na compilação receberão nota zero. O programa não pode ser escrito usando a sintaxe própria de C++ ou funções que não são do padrão ANSI C. Programas que compilarem serão executados e avaliados através de seqüência de testes. 5 Certamente cada aluno pode discutir com seus colegas (e com seus professores) a forma de implementação que empregará. Ressaltamos, entretanto, que os trabalhos são individuais. Trabalhos similares poderão ter suas notas reduzidas, podendo receber nota zero se o grau de similaridade for muito acentuado. 6 Data de entrega: 30 de setembro.

ANEXO 1 /* logodesafio.c */ #include <stdio.h> #include <stdlib.h> #include "jogos.h" #include "desafio.h" int main(void) char *quadro, *seq, *palavra; char **solucao, **respostas=null; int n, continua, k=0, valor, total = 0; n = Carrega_jogo(&quadro, &seq, &solucao); printf("forme palavras com 3 letras ou mais com os caracteres:\n\n"); Mostra_quadro(quadro); printf("ou com 4 letras ou mais e contendo tambem a sequencia:\n\n"); Mostra_sequencia(seq); printf("uma dica, voce pode formar:\n\n"); Mostra_dica(solucao, n); while(1) printf("\ndigite uma palavra com 3 ou mais letras, ou um único caractere e ENTER para terminar...\n"); palavra = Le_palavra(); if((palavra==null) (palavra[1]=='\0')) break; if(strlen(palavra)<3) printf("\na palavra deve ter mais de 3 letras, tente outra vez...\n"); free(palavra); else valor = 0; if(palavra_principal(quadro, palavra)) valor = 15; else if(palavra_comum(quadro, palavra)) valor = 5; else if(palavra_sequencia(quadro, seq, palavra)) valor = 10; if(valor==0)

printf("\nessa palavra nao e valida, tente outra...\n"); free(palavra); else if(verifica(palavra, respostas, k)) printf("\nessa palavra e repetida, tente outra...\n"); free(palavra); else if(verifica(palavra, solucao, n)) respostas = Registra(palavra, respostas, k); printf("\nparabéns, vc ganhou mais %d pontos, totalizando %d pontos...\n", valor, total); total = total + valor; k++; if(k==n) break; else printf("\nessa palavra nao existe, tente outra...\n"); free(palavra); printf("\nvc encontrou %d palavras e acumulou %d pontos...\n\n", k, total); printf("as palavras que que poderiam ser formadas sao:\n\n"); Mostra_tudo(solucao, n);

ANEXO 2 /* desafio.h */ /* Função Palavra_principal Verifica se uma palavra pode ser a */ /* palavra principal, ou seja, contem todas as letras do */ /* quadro grande, sem repeticao. */ /* quadro - ponteiro para a cadeia de caracteres quadro */ /* palavra - ponteiro para a cadeia de caracteres contendo a */ /* palavra a ser verificada. */ /* Saída: inteiro com valor 1 se a palavra eh a principal, ou 0, */ /* caso contrario. */ int Palavra_principal(char* quadro, char* palavra); /* Função Palavra_comum Verifica se uma palavra contem */ /* apenas caracteres nao repetidos do quadro grande e tamanho */ /* maior ou igual a tres. */ /* quadro - ponteiro para a cadeia de caracteres quadro */ /* palavra - ponteiro para a cadeia de caracteres contendo a */ /* palavra a ser verificada. */ /* Saída: inteiro com valor 1 se a palavra eh valida, ou 0, */ /* caso contrario. */ int Palavra_comum(char* quadro, char* palavra); /* Função Palavra_sequencia Verifica se uma palavra contem */ /* a sequencia fornecida como parametro e caracteres nao */ /* repetidos do quadro grande e tamanho maior ou igual a quatro. */ /* quadro - ponteiro para a cadeia de caracteres quadro */ /* sequencia - ponteiro para a cadeia de caracteres contendo uma */ /* sequencia. */ /* palavra - ponteiro para a cadeia de caracteres contendo a */ /* palavra a ser verificada. */

/* Saída: inteiro com valor 1 se a palavra eh valida, ou 0, */ /* caso contrario. */ int Palavra_sequencia(char* quadro, char* sequencia, char* palavra); /* Função Le_palavra Le uma palavra do teclado com tamanho */ /* maximo 20 e armazena em uma cadeia de caracteres alocada */ /* dinamicamente, apos converter todos os caracteres para */ /* maiusculas. */ /* Saída: Ponteiro para nova string alocada dinamicamente ou */ /* NULL, se nao for possivel alocar a nova cadeia. */ char* Le_palavra(void); /* Função Verifica Verifica se uma palavra esta em um vetor de */ /* palavras registradas. */ /* palavra - ponteiro para a cadeia de caracteres contendo a */ /* palavra a ser verificada. */ /* lista - ponteiro para o vetor de palavras registradas. */ /* n tamanho da lista. */ /* Saída: inteiro com valor 1 se a palavra esta no vetor, ou 0, */ /* caso contrario. */ int Verifica(char* palavra, char** lista, int n); /* Função Registra Copia um vetor de palavras registradas de */ /* tamanho n recebido como parametro para um novo vetor alocado */ /* dinamicamente com tamanho n+1. Na ultima posicao do novo vetor */ /* deve ser colocado o ponteiro para a cadeia de caracteres */ /* contendo a palavra a ser registrada, recebido como parametro. */ /* Se nao for vazio, o vetor original deve ser liberado. */ /* palavra - ponteiro para a cadeia de caracteres contendo a */ /* palavra a ser registrada. */ /* lista - ponteiro para o vetor de palavras registradas. */

/* n tamanho da lista. */ /* Saída: ponteiro para o novo vetor, ou NULL, caso nao consiga */ /* alocar memoria */ char** Registra(char* palavra, char** lista, int n);

ANEXO 3 /* jogo.h */ /* Carrega_jogo Carrega as informacoes necessarias para um */ /* jogo. */ /* letras - ponteiro para receber o endereco da cadeia de */ /* caracteres contendo as letras do quadro principal. */ /* seq - ponteiro para receber o endereco da cadeia de caracteres */ /* contendo a sequencia do quadro menor. */ /* sol - ponteiro para receber o endereco do vetor de ponteiros */ /* para cadeias de caracteres, que contem a solucao */ /* do jogo. */ /* Saída: inteiro com numero de elementos do vetor solucao. */ int Carrega_jogo(char** letras, char** seq, char*** sol); /* Mostra_tudo Mostra na tela todas as palavras que se pode */ /* formar em um jogo. */ /* sol - ponteiro para o vetor de palavras validas no jogo. */ /* n tamanho do vetor. */ void Mostra_tudo(char** sol, int n); /* Mostra_tam Mostra na tela as palavras que se pode formar */ /* em um jogo com o tamanho definido como parametro. */ /* sol - ponteiro para o vetor de palavras validas no jogo. */ /* n tamanho do vetor. */ /* tam numero de caracteres. */ void Mostra_tam(char** sol, int n, int tam);

/* Mostra_dica Mostra na tela uma dica sobre a quantidade de */ /* palavras que e possivel formar em um jogo. */ /* sol - ponteiro para o vetor de palavras validas no jogo. */ /* n tamanho do vetor. */ void Mostra_dica(char** sol, int n); /* Mostra_quadro Mostra na tela os caracteres validos para */ /* formar uma palavra do jogo. */ /* quadro - ponteiro para a cadeia de caracteres contendo a */ /* as letras validas. */ void Mostra_quadro(char* quadro); /* Mostra_sequencia Mostra na tela a sequencia de caracteres */ /* valida de um jogo. */ /* seq - ponteiro para a cadeia de caracteres contendo a */ /* sequencia. */ void Mostra_sequencia(char* seq);