Postagens Antigas

Contest powered by:
Contest Burner

Vagas de Emprego em Jogos Digitais

C++

Programando em C++: Encontrando Palíndromos | Programação

Por Daniel Cardoso Tavares

 

 

Olá a todos, hoje criaremos um programa que verificará se duas palavras (ou frases), são palíndromos, ou seja: leem a mesma coisa de traz para frente ou em sentido normal.

Como comandos novos temos:

nomeDaSuaString.find(“termoQueVoceProcura”) –> encontra determinada palavra ou frase em uma string e retorna o “endereço” de onde ela começa, como se fosse em um array.

Exemplo: string hoje = “Hoje e um bom dia”; hoje.find(“bom dia”); //o retorno será 10.

nomeDaSuaString.begin()+indexador –> retorna a string a partir de determinado ponto. O indexador pode ser o número retornado pela função membro .find.

nomeDaSuaString.erase(nomeDaSuaString.begin()+indexador) –> este comando serve para deletar (erase) determinado character que está  na posição escolhida ou entre duas posições = nomeDaString.erase(posição1, posição2);

como exemplos de palindromos temos as frases: Anotaram a data da maratona; Socorram-me, subi no onibus em Marrocos; Mar e numero remuneram etc.

#include <iostream>
#include <conio .h>
#include <string>
 
using namespace std;
 
int main()
{
    string string1 = "";
    string string2 = "";
    string stringReverse = "";
    int strLength = 0;
    int index = 999;
    int counter = 0;
 
    cout < < "Entre com uma string: ";
    getline(cin, string1);
 
    string2 = string1;
 
    cout << "A string e: " << string1 << endl;
 
    for(int x = 0; x < string2.length(); x++)
    {
            string y = "";
            y = string2[x];
            if(y == " ")
            {
                              counter++;
            }
    }   
 
    if(counter > 0)
    {
        do
        {
            index = string2.find(" ");
            string2.erase(string2.begin()+index);
            counter--;
        }while(counter > 0);
    }
 
    stringReverse = string2;
 
    for(int x = 0; x < string2.length(); x++)
    {
            int c1 = string2.length() - x;
            stringReverse[c1 - 1] = string2[x];
    }
 
    cout << "O inverso dessa string e: " << stringReverse << endl; 
 
    if(stringReverse == string2)
    {
                     cout << "As duas strings inseridas sao palindromos!" << endl;
                     cout << "String 1: " << string2 << endl;
                     cout << "String 2: " << stringReverse << endl;
    }
 
    getch();
    return 0;
}

Acompanhe pelo Facebook: Profissionais de Jogos

Artigos relacionados:

Programando em C++: Strings Reversas (Colocando Textos ao Contrário) | Programação

Por Daniel Cardoso Tavares

 

 

Dando prosseguimento à série de códigos de aprendizado em c++, hoje colocaremos um que mostra como inverter a ordem da uma string, apresentando o texto ao contrário.

Para isso, utilizamos os seguintes comandos:

getline(cin, suaString) –> cuja finalidade é receber strings contendo espaços, o ideal para nomes completos, por exemplo.

nomeDaString[posiçãoQueVoceQuerDentroDoVetor] –> se você lidar com as strings como se fossem arrays (ou vetores), poderá “andar” por elas e verificar caractere por caractere. Como o c++ trata strings como classes, você utilizará isso a seu favor aqui e no comando seguinte.

nomeDaString.length() –> este comando retornará o tamanho da string.

image

Vamos ao código (que deve ser compilado utilizando o Dev-C++):

 
#include <iostream>
#include <conio .h>
 
using namespace std;
 
int main()
{
    string string1 = "";
    string stringReverse = "";
    int strLength = 0;
 
    cout < < "Entre com uma string: ";
    getline(cin, string1);
 
    stringReverse = string1;
 
    cout << "A string e: " << string1 << endl;
 
 
    for(int x = 0; x < string1.length(); x++)
    {
            int c1 = string1.length() - x;
            stringReverse[c1 - 1] = string1[x];
    }
 
    cout << "O inverso dessa string e: " << stringReverse << endl;    
 
    getch();
    return 0;
}

Acompanhe pelo Facebook: Profissionais de Jogos

Artigos relacionados:

Programando em C++: Rvalue e Lvalue | Programação

Por Daniel Cardoso Tavares

Fontes: ibm e VTC.

 

 

Algumas coisas não são tão importantes assim no dia-a-dia, mas são conceitualmente necessárias, por isso vou colocar aqui, rapidamente, o que são rvalues e lvalues em c++.

Lvalue

Basicamente, lvalues são aqueles valores que persistem ao longo do tempo.

Ex: x =  8 + 5; Aqui, 8, 5 e o resultado de 8 + 5, por si sós, serão perdidos após a passagem por esta parte do código. Em si mesmos, 8, 5 e o resultado da operação são “descartáveis”.

Por outro lado, x continuará “por aí”, interagindo com o valor que contém. Então, x, permanecendo ao longo do tempo, é um lvalue.

Em geral, lvalues aparecem do lado esquerdo da expressão (lvalue lembra “left value”).

Rvalue

Rvalues são exatamente aqueles valores 8, 5 e 13 (resultado) do exemplo x = 8 + 5;

Rvalues são temporários e permanecem apenas enquanto durar a execução. Além disso, rvalues não podem acontecer no seguinte contexto: 8 + 5 = x; –> isso gerará um erro.

Um rvalue é um valor que será guardado em determinada localização na memória. Todo lvalue guardará algum rvalue.

Quando chamamos um lvalue em determinados contextos, ele poderá ser convertido implicitamente em rvalue. Exemplo:

  x = 15;
  y = x + 1;

Em geral, os rvalues aparecerão do lado direito da expressão (rvalue lembra “right value”).

Acompanhe pelo Facebook: Profissionais de Jogos

Artigos relacionados:

Programando em C++: Strings para Nomes Completos | Programação

Por Daniel Cardoso Tavares

 

 

Faremos, hoje, uma string que receba nomes completos em C++.

Em primeiro lugar, é importante notar que você deve incluir a biblioteca <string>. Em seguida, sugiro que faça um teste utilizando apenas um cin tradicional e tente inserir seu nome completo:

 
#include <iostream>
#include <string>
#include <conio .h>
 
int main()
{
	std::string nomeCompleto = "";
	std::cout < < "Digite seu nome completo: " << std::endl;
	std::cin >> nomeCompleto;
 
	std::cout < < "Seu nome e: " << nomeCompleto;
 
	getch();
}

Não dará certo: apenas o primeiro nome aparecerá.

Isto se dá porque o recebimento de strings que aceitem espaços requer outro comando: getline(comando, variável).

Assim, em nosso código o certo seria colocar: getline(cin, nomeCompleto).

 
#include <iostream>
#include <string>
#include <conio .h>
 
int main()
{
	std::string nomeCompleto = "";
	std::cout < < "Digite seu nome completo: " << std::endl;
	getline(std::cin, nomeCompleto);
 
	std::cout << "Seu nome e: " << nomeCompleto;
 
	getch();
}

Valeu e até a próxima :)

Acompanhe pelo Facebook: Profissionais de Jogos

Artigos relacionados:

Programando em C++: (Training Wheel) Como Criar variáveis Sem Precisar Declarar o Tipo Usando “Auto” do C++11 | Programação

Por Daniel Cardoso Tavares

 

 

Em mais um curso de C++ que estou fazendo (colocarei o review aqui em breve), como sempre precedido pelo “blá blá blá” de ifs, elses, whiles etc., (desculpe quem está começando, mas depois da décima quinta vez que você vê isso a paciência começa a faltar) finalmente veio algo novo. De fato, várias informações novas, que aos poucos colocarei aqui.

A info do dia é: como criar variáveis no c++ sem ter que declarar o tipo (int, float, bool etc), ao estilo PHP (que não tem qualquer declaração) ou JavaScript (que usa o termo genérico “var”).

Bom, a coisa é muito simples, basta colocar “auto” como tipo Smiley piscando e o C++ cuidará de resolver qual a melhor estrutura para suportar seus dados.

Naturalmente, essa é a pior coisa que você pode fazer em um programa “de verdade”, pois você perderá o controle “fino” da coisa, mas serve como método de aprendizado, como “training wheel”.

Auto não está funcionando! C++03 versus C++11 ou C++0x

Ok, quem for mais apressado e testar no DevC++ verá que não funciona.

Isso se dá porque o “auto” está habilitado a partir do chamado C++11 (ou programas que traziam suas inovações), que é uma nova formulação do C++, que surgiu no ano passado (aprovado pela ISO em 12 de agosto de 2011). Até então, o C++03 era o padrão.

O C++11 incorpora diversas bibliotecas acessórias ao “standart” do C++, excluindo, porém, as de expressões matemáticas complexas. Veja maiores informações aqui.

Como fazer o “Auto” funcionar?

Aqui, estou utilizando o Microsoft Visual Studio c++ 2010 versão express (a Microsoft libera o download gratuito aqui). Importante é lembrar-se de usar a versão “Win32 Console Aplication”: há diferentes versões de C++ no Visual Studio, sendo que a sintaxe muda de uma para a outra.

Script de teste (Visual C++ Express 2010)

Neste teste, introduzimos um novo comando: typeid(x).name()

O typeid(x) recebe a variável no X e mostra seu tipo.

#include <iostream>
#include <conio .h>
 
int main()
{
	int a = 34;
	double b = 2;
	auto y = 9;
 
	std::cout < < "O tipo de A e: " << typeid(a).name() << std::endl;
	std::cout << "O tipo de B e: " << typeid(b).name() << std::endl;
	std::cout << "O tipo de (a*b) e: " << typeid(a*b).name() << std::endl;
	std::cout << "O tipo de y e: " << typeid(y).name() << std::endl;
 
	getch();
}

image

Acompanhe pelo Facebook: Profissionais de Jogos

Artigos relacionados:

Programando em C++: Using Namespace STD ou Não? | Programação

Por Daniel Cardoso Tavares

 

 

Hoje, enquanto fazia um trabalho para a faculdade, acabei esbarrando em uma discussão sobre o uso ou não do comando using namespace std.

Os pontos de vista são basicamente os seguintes:

  • Um lado acredita que a programação fica mais fácil, rápida e simples sem ter que colocar std:: antes de cada pequeno comando, como cout.
  • O outro, acredita que não é uma boa prática de programação o uso do using namespace std (ou qualquer outro).

O lado dos “contra” (composto por programadores mais experientes) afirma que em grandes códigos muitas vezes namespaces diferentes acabam utilizando os mesmos comandos, o que pode fazer com que seu programa saia com bugs ou torne-se complexo demais para uma manutenção adequada.

Eles argumentam que a “preguiça” é rapidamente superada com a prática, que transforma o uso da namespace seguido por :: algo bem visto.

Nesta discussão, eu tendo a apoiar os “preguiçosos” primeiro, sendo minha prática cortar um grande caminho com os namespaces, mas tenho que admitir que os “contra” têm razão.

Vou começar, assim a tentar praticar a forma mais extensa da coisa.

Exemplo de código com “using namespace”

 
#include <iostream>
 
using namespace std;
 
int main()
{
    cout < < "Olá mundo!" << endl;    
}

 

Exemplo de código sem o “using namespaces”

 
#include <iostream>
 
int main()
{
    std::cout < < "Olá mundo!" << std::endl;    
}

Acompanhe pelo Facebook: Profissionais de Jogos

Artigos relacionados:

Destaque: