sábado, 2 de fevereiro de 2019

C++ Builder - ordenando vetores

Aproveitando a função sorteia,
que já usamos muitas vêses,
carregamos um vetor de inteiro
de números de ( 0 à 9 ), 
totalmente desordenados,
mas fazendo uso da função qsort (),
do C, podemos ordenar o mesmo vetor,
imprimindo um número por vez,
criando uma nova sequência a cada
pressionamento do botão ok da caixa
de mensagem destinada ao usuário.







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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
#include <time.h>
#define tam 10
int Qsort_Ord ( const void *a, const void *b ) {
return ( strcmp ( ( char * ) a, ( char * ) b ) );
}
//---------------------------------------------------------------------------
void Sorteia ( int *A, int *vet ) {
int i, j, aut, t;
srand ( time ( NULL ) );
A = ( int* ) malloc ( tam * sizeof ( int ) );
for ( i = 0; i < tam; i++ ) {
do {
do {
t = rand ( ) % tam;
break;
} while ( 1 );
aut = 0;
for ( j = 0; j < tam; j++ )
if ( t == A [ j ] )
aut = 1;
if ( aut == 0 ) {
A [ i ] = t;
}
} while ( aut == 1 );
}
for ( i = 0; i < tam; i++ ) {
vet [ i ] = A [ i ];
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnPaint ( TObject *Sender ) {
Canvas -> Font -> Size = 16;
Canvas -> Font -> Name = "Arial";
Canvas -> Pen -> Color = clYellow;
Canvas -> Pen -> Width = 10;
Canvas -> Rectangle ( 05, 05, 595, 295 );
SetTextColor ( Canvas->Handle, RGB ( 255, 25, 2 ) );
Canvas -> TextOut ( 120, 20, "C++ BUILDER - ORDENANDO VETORES" );
String str_1;
String str_2;
int vet [ tam ];
int b = 1;
int i, x = 0;
int *A;
A = ( int* ) malloc ( tam * sizeof(int) );
Sorteia ( A, vet );
Canvas -> Font->Color = clBlack;
Canvas -> TextOut ( 60, 100, "Vetor desordenado" );
Canvas->Font->Color = clRed;
for ( i = 0; i < tam; i++ ) {
str_1 += vet [ i ];
str_1 += " ";
Canvas -> TextOut ( 60, 130, str_1 );
}
Canvas -> Font -> Color = clBlack;
Canvas -> TextOut ( 360, 100, "Vetor ordenado" );
Canvas -> Font -> Color = clRed;
for ( i = 0; i < tam; i++ ) {
do {
qsort ( ( void * ) vet, 10, sizeof ( vet [ 0 ] ), Qsort_Ord );
b = vet [ i ];
i++;
x++;
MessageDlgPos( L"Pressione o botão OK Para ordenar\n"
"O vetor, imprimindo um número de cada vez",
mtInformation, TMsgDlgButtons() << mbOK, 0, 290, 430 );
str_2 += vet [ b ];
str_2 += " ";
Canvas -> TextOut ( 340, 130, str_2 );
} while ( x < tam );
i = i - 1;
}
Canvas -> Font -> Style = TFontStyles() << fsBold << fsUnderline << fsItalic ;
Canvas -> Font -> Color = clBlue;
Canvas -> TextOut ( 200, 220, "Por: Samuel Lima " );
Canvas -> Font -> Style = TFontStyles() << fsBold << fsItalic ;
Canvas -> Font -> Color = clGreen;
Canvas -> TextOut ( 200, 250, "sa_sp10@hotmail.com" );
free ( A );

}

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

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
void __fastcall OnPaint(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

#endif


object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'C++ BUILDER - ORDENANDO VETORES'
  ClientHeight = 300
  ClientWidth = 600
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnPaint = OnPaint
  PixelsPerInch = 96
  TextHeight = 13
end

Nenhum comentário:

Postar um comentário

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