• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Emerson

[C++] Ajuda: Estrutura e POO

13 mensagens neste tópico

ola pessoal...estou a precisar da vossa ajuda...estive a faze um programa, mas gostaria de ter uma forma diferente de fazer o mesmo programa em c++...

aqui esta o programa que ja tenho feito:

#include <string>
#include <iostream>

using namespace std;

/************************************************************************/
/*                         Definição de funções                         */
/************************************************************************/

string opA_lerString( void );
string opB_subConsoante( string str );
string opC_converterMinuscula( string str );
string opD_converterMaiuscula( string str );
string opE_subMaiuscula( string str );
string opF_inserirCardinal( string str );

/************************************************************************/
/*                    Definição de funções auxiliares                   */
/************************************************************************/
int calculaTabelaConsoante( char c );
bool tabelaConsoante( char c );
bool consoanteMaiuscula( char c );
bool consoanteMinuscula( char c );
bool digito( char c );

/************************************************************************/
/*                  Implementação de funções auxiliares                 */
/************************************************************************/

/* Verifica se o char é uma consoante para o calculo da tabela*/
bool tabelaConsoante( char c )
{
  if( (c > 97) && (c <= 122) && (c != 101) && (c != 105) && (c != 111) && (c != 117) )
    return true;
  else
    return false;
}


/* Verifica se o char e uma consoante Maiuscula */
bool consoanteMaiuscula( char c )
{
if( ((c >= 65) && (c <= 90)) )
	return true;
else
	return false;
}

/* Verifica se o char e um digito */
bool digito( char c )
{
if( (c >= 48) && (c <= 57) )
	return true;
else
	return false;
}

/* Verifica se o char e uma consoante Minuscula */
bool consoanteMinuscula( char c )
{
if( (c >= 97) && (c <= 122) )
	return true;
else
	return false;
}

/* Faz a correspondencia entre o char e o numero */
int calculaTabelaConsoante( char c )
{
  bool teste = tabelaConsoante( c );
  int valor = -1;

  if ( teste )
  {
    switch( c )
    {
      case 'b':
        valor = 0;
        break;
      case 'c':
        valor = 1;
        break;
      case 'd':
        valor = 2;
        break;
      case 'f':
        valor = 3;
        break;
      case 'g':
        valor = 4;
        break;
      case 'h':
        valor = 5;
        break;
      case 'j':
        valor = 6;
        break;
      case 'k':
        valor = 7;
        break;
      case 'l':
        valor = 8;
        break;
      case 'm':
        valor = 9;
        break;
      case 'n':
        valor = 0;
        break;
      case 'p':
        valor = 1;
        break;
      case 'q':
        valor = 2;
        break;
      case 'r':
        valor = 3;
        break;
      case 's':
        valor = 4;
        break;
      case 't':
        valor = 5;
        break;
      case 'v':
        valor = 6;
        break;
      case 'w':
        valor = 7;
        break;
      case 'x':
        valor = 8;
        break;
      case 'y':
        valor = 9;
        break;
      case 'z':
        valor = 0;
        break;
    }
  }
  return valor;  
}

/************************************************************************/
/*                       Implementação das funções                      */
/************************************************************************/

/* Le uma string do stdio, terminada por '\n', com max == STRING_SIZE*/
string opA_lerString( void )
{
  string s = "";
  getline(cin, s);
  string s1 = s.substr(0, 50);
  return s1;
}

/* Substitui todas as consoantes minusculas por algarismos */
string opB_subConsoante( string str )
{
  int valor;
  for( int i = 0; i <= (int)str.length(); i++)
  {
    valor = calculaTabelaConsoante( str[i] );
    if( valor > -1 ){
      char c = 48 + valor;
      str[i] = c;
    }      
  }
  return str;
}

/* Passa todos os caracteres de indice impar a minusculas */
string opC_converterMinuscula( string str )
{
for( int i = 0; i < (int)str.length(); i++)
{
	if( (i%2)!=0 )
	{
		if( consoanteMaiuscula(str[i]) )
			str[i] = str[i] + 32;
	}
}
return str;
}

/* Passa todos os caracteres de indice par a maiusculas */
string opD_converterMaiuscula( string str )
{
for( int i = 0; i < (int)str.length(); i++)
{
	if( (i%2)==0 ) 
	{
		if( consoanteMinuscula(str[i]) )
			str[i] = str[i] - 32;
	}
}
return str;
}

/* Substitui as vogais maiusculas que estejam em indice par pelas letras que as sucedem na tabela ASCII */
string opE_subMaiuscula( string str )
{
for( int i = 0; i < (int)str.length(); i++)
{
	if( (i%2)==0 ) 
	{
		if( consoanteMaiuscula(str[i]) )
			str[i] = str[i] +1;
	}
}
return str;
}

/* Insere um '#' depois de dois ou mais digitos */
string opF_inserirCardinal( string str )
{
int count = 0;
string alterada = "";

for( int i = 0; i <= (int)str.length(); i++)
{
	if( digito(str[i]) )
	{
		count++;
		continue;
	}

	if( count >= 2 )
	{
		string s1 = str.substr(0, i);
		string s2 = str.substr(i, str.length());
		str = s1 + "#" + s2;
	}
	count = 0;
}
return str;
}


/************************************************************************/
/*                       PROGRAMA PRINCIPAL                             */
/************************************************************************/

int main( int argc, char **argv )
{
  string opA = opA_lerString();
  string opB = opB_subConsoante( opA );
  string opC = opC_converterMinuscula( opB );
  string opD = opD_converterMaiuscula( opC );
  string opE = opE_subMaiuscula( opD );
  string opF = opF_inserirCardinal( opE ) ;

  /* DEBUG */
  //cout << "opA:" + opA + '\n';
  //cout << "opB:" + opB + '\n';
  //cout << "opC:" + opC + '\n';
  //cout << "opD:" + opD + '\n';
  //cout << "opE:" + opE + '\n';
  //cout << "opF:" + opF + '\n';

  /*Resultado Final */
  cout << opF + '\n';
  return 1;
}

estes são os objectivos do programa:

Objectivo

Realizar um programa em C++ com o nome csi, capaz de ler uma cadeia de caracteres do standard input e de realizar sobre ela um conjunto de conversões. No fim, escrever a cadeia modificada no standard output.

Lista de operações

Deverás  realizar uma sequência de operações sobre uma cadeia de caracteres por ti introduzida (a cadeia

original terá no máximo 50 caracteres, mas a cadeia transformada poderá, devido às operações

envolvidas, exceder esse número).

A. Ler uma string do standard input, terminada por newline e com não mais de 50 caracteres

B. Substituir todas as consoantes por algarismos de acordo com a seguinte tabela: (b..m n..y z)->(0..9 0..9 0).

C. Passar todos os caracteres de índice ímpar a minúsculas.

D. Passar todos os caracteres de índice par a maiúsculas.

E. Substituir as vogais maiúsculas que estejam em índice par pelas letras que as sucedem na tabela

ASCII (ex: AEaeIAUO à BEaeJAVO)

F.    Inserir um ‘#’ depois de cada sequência de dois ou mais dígitos (ex: 12d1g45678 à 12#d1g45678#);

Requisitos do programa csi

Cada operação deve ser implementada numa função.

O programa csi deve efectuar os seguintes passos:

0. Ao arrancar, não deverá aparecer nada na prompt  do programa. Deverás escrever com o ecrã “limpo”.;

1. Escrever uma cadeia de caracteres no standart  input  que obedeça ás operações a realizar;

2. Escrever para standard output o correspondente ao resultado do passo 1;

csi - execução do programa

122A332AA3XavV24a - cadeia digitada pelo utilizador

1 - resultado

a22Ae32AA3XavV24a

se me poderem ajudar obrigado... :P :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem-vindo ao fórum Emerson.

coloca as tags 'code' para que seja mais fácil ler o teu código.

qual é a tua dúvida exactamente?

já compilaste o programa? qual foi o resultado obtido?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

minha dificuldade vai ser a apresentar este programa...eu keria outra maneira de fazer o programa mais facil isso porque eu vou apresentar amanha...

se tiverem outra maneira mais facil de fazer o codigo....que me ajudem...

obrigada :P :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema desse código é sobretudo a nível da organização.

acho que devias separar isso em, pelo menos, dois (três contando com o '.h') ficheiros. um para a função main e outro para as outras funções (e outro para os headers).

as funções 'string op...(string str)' talvez podessem ser implementadas numa subclasse da classe string criada por ti, desta forma irias usar um pouco mais de POO no teu programa. se bem que este já é um aspecto sobre o qual eu não estou muito à vontade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tambem tenhu o mesmo problema! o trabalho e defenitivamente igual! mas acho k tens muito codigo para um programa desses! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para fazeres isso em C++, tens de usr o paradigma OO, ou seja, tens de definir uma classe, com os seus métodos públicos e privados. Depois instancias um objecto dessa classe e usa-la, por fim destrois o objecto.

Um ponto de partida parece-me fazeres uma classe e colocares os métodos auxiliares como privados e os outros como públicos.

Mas aconselho-te a leres sobre o paradigma OO, sob pena de não saberes o significado do que realmente estás a fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pessoal axam k esse codigo ta bem? e pk eu axo mesmo muito codigo para um programa k se formos a ver é um programa k se pode diminuir o "tamanho" de codigo k esta insirida como o emerson fex! :P :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pessoal axam k esse codigo ta bem? e pk eu axo mesmo muito codigo para um programa k se formos a ver é um programa k se pode diminuir o "tamanho" de codigo k esta insirida como o emerson fex! :P :hmm:

tendo em conta que as funções têm que ser feitas separadamente, não me parece muito grande.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem eu sou uma beka novato em C++ tou agr a comecar com prgramaçao! e por acaso tb tenhu de faxer esse programa para presentar! bem mas vou tentar diminuir o codigo! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

PEssoal da-me este erro.. ja me ta a fritar a buchinha toda!! :wallbash:

se alguem me poder dar alguma maozinha! :thumbsup: :smoke:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estão aí dois { } que não estão ai a fazer nada... ou então estão e falta ai o nome de uma função...

Os { } são delimitadores, e há ai 2 que caem do céu...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gostava de ver o erro, mas continuo a não conseguir sacar anexos... Algúem que tenha sacado pode por isso no imageshack ou algo do género?

pessoal podem-me explikar para k é o "bool" ? :thumbsup:

O bool é um tipo de dados básicos no C++, que só permite ter 2 valores: true ou false, sendo que false corresponde a 0 e true corresponde a qualquer outro valor. Isto dito assim pode ficar a parecer que ocupa menos espaço em memória que por exemplo um char, mas é errado assumir isso. Na maioria das plataformas continua a ocupar os 8 bits na memória, porque este é o espaço mínimo de memória que é possível alocar para uma variável. É possível em algumas plataformas ocupar mais ou menos que um byte, mas como em geral falamos de x86...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora