terça-feira, 6 de outubro de 2020

Container set - declarando e inicializando


      Um set pode ser considerado semelhante
      a um recipiente ou um conjunto matemático.
      Por ser um repositório Associativo,
      jamais permite valores duplicados em sua interface,
      e os elementos são automaticamente ordenados
      de forma ascendente, eliminando duplicatas se houver.
      Um set só permite objetos de um mesmo tipo,
      que deve ser especificado no seu corpo em sua declaração.
      Uma vez armazenados, os objetos são do tipo key,
      que são chaves de valores constantes e que não se pode alterar.
      Se for preciso alterar um valor dentro de um set,
      precisamos primeiro excluir um elemento,
      para depois inserir outro em seu lugar,
      respeitando o tipo especificado no seu corpo.
      A parte teórica dos sets em C++ é um tanto extensa,
      mas não vejo nada mais necessário de apresentar,
      além do que já escrevemos aqui, mesmo porque
      o grau de dificuldade de usar os sets é quase 0,
      e isto é um privilégio para nós que estamos envolvidos com C++.
      No exemplo mostrado aqui, criamos um array do tipo string
      especial do C++ Builder, mas que poderia ser do tipo
      string padrão do C++, este array foi inicializado
      com algumas string em forma de frase, com algumas 
      repetidas e desordenadas.
      Na impressão da esquerda imprimimos o array
      como foi criado, e na impressão da direita
      temos o set imprimido com seus elementos
      ordenados e sem as frases repetidas do array de string. 



//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <iterator>
#include <algorithm>
#include <set>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
   String texto [  ] = {
"  Goiaba vermelha, fruta boa    ",
"  Eu sabia fazer, mas esqueci   ",
"  Fevereiro não tem carnaval    ",
"  Busque a paz e a siga               ",
"  Haverá paz no vale pra mim    ",
"  Cada louco com sua mania      ",
"  Amanhã será um novo dia       ",
"  Haverá paz no vale pra mim    ",
"  Goiaba vermelha, fruta boa    ",
"  Amanhã será um novo dia       ",
"  Eu sabia fazer, mas esqueci   ",
"  Duvido que você irá desistir  " };
 //---------------------------------------------------------------------------
void __fastcall TForm1::Informe ( TObject *Sender ) {
    SetBkColor ( Canvas -> Handle, RGB ( 255, 182, 193 ) );
Canvas -> Font-> Style = TFontStyles ( ) << fsItalic;
    Canvas -> Font -> Size = 11;
    Canvas -> Font -> Name = "Arial";
    Canvas -> Font -> Color = clBlack;
Canvas -> TextOut ( 330, 250, "Por: " );
Canvas -> Font -> Color = clRed;
Canvas -> TextOut ( 370, 250, "Samuel Lima" );
Canvas -> Font -> Color = clBlue;
Canvas -> TextOut ( 330, 265, "sa_sp10@hotmail.com" );
}
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
void __fastcall TForm1::Label_Manual ( TObject *Sender ) {
Label1 -> Visible = true;
Label1 -> Font -> Size = 13;
Label1 -> Font -> Name = "Arial";
Label1 -> Font-> Style = TFontStyles ( ) << fsBold << fsItalic;
//Label1 -> Font -> Color = clBlack;
Label1 -> Font -> Color = static_cast < TColor > ( RGB ( 0, 0, 0 ) );
Label1 -> Color = static_cast < TColor > ( RGB ( 0, 255, 255 ) );
Label1 -> Transparent = False;
Label1 -> Width = 100;
Label1 -> Height = 70;
Label1 -> Left = 300;
Label1 -> Top = 40;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint ( TObject *Sender ) {
//Alterando a cor do form
Canvas -> Brush -> Color = static_cast < TColor > ( RGB ( 255, 255, 205 ) );
Canvas -> Font -> Size = 14;
Canvas -> Font-> Style = TFontStyles ( ) << fsBold << fsItalic;
Canvas -> Font -> Name = "Arial";
Canvas -> Pen -> Width = 10;
Canvas -> Pen -> Color = static_cast < TColor > ( RGB ( 205, 0, 205 ) );
Canvas -> RoundRect ( 05, 05, 595, 295, 25, 25 );
//Colorindo a cor de frente do canvas com RGB
SetTextColor ( Canvas -> Handle, RGB ( 0, 0, 0 ) );
SetBkColor ( Canvas -> Handle, RGB ( 0, 255, 103 ) );
Canvas -> TextOut ( 70, 15, "CONTAINER SET - DECLARANDO E INICIALIZANDO" );
int i, j;
int a = 20;
Canvas -> Font -> Size = 12;
  for ( i = 0; i < 12; i++ ) {
a = a + 20;
if ( texto [ i ] >= "  " ) {
   SetBkColor ( Canvas -> Handle, RGB ( 255, 255, 103 ) );
   Canvas -> TextOut ( 30, a, texto [ i ] );
}
  }

Informe ( Sender );
   }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow ( TObject *Sender ) {
   Label_Manual ( Sender );
   String str_1;

//Declarando set para tipo String do C++ Builder
std::set < String > st;

//Converte o array de string texto em set
for ( String val : texto ) {
st.insert ( val );
}

for ( String val : st ) {
   if ( val >= "  " )
str_1 += "\n";
str_1 += val;
}
Label1 -> Caption = str_1;
}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------


#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <System.Classes.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.Forms.hpp>

#include <Vcl.Buttons.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;


void __fastcall Informe ( TObject *Sender );

void __fastcall Label_Manual ( TObject *Sender );

void __fastcall FormPaint ( TObject *Sender );

void __fastcall FormShow(TObject *Sender);

private: // User declarations


public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif 

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.