Struktury.

 

    Struktury to zbiór logicznie powiązanych zmiennych jednego lub kilku różnych typów, zgrupowanych pod jedną nazwą. Zbiór tworzy się zaczynając od słowa kluczowego struct po którym podaje się nazwę struktury (nazwa jest dowolna), następnie wstawia się nawiasy klamrowe zakończone średnikiem, wewnątrz których umieszcza się deklaracje zmiennych.

struct Baza
{
 char Name[250];
 chat Mark[50];
 float  Cost;
};

Tak wygląda prosta struktura, można ją wykorzystać do przechowywania danych, jednak żeby to było możliwe trzeba zadeklarować tablicę typu strukturalnego. Tablica może mieć dowolną nazwę lecz musi być zadeklarowana jako konkretny typ strukturalny, czyli załóżmy że chcę stworzyć tablicę przechowującą informacje o sprzęcie komputerowym i wykorzystam do tego celu strukturę Baza, która zawiera pola umożliwiające wprowadzenie nazwy (Name), marki (Mark) oraz wartości (Cost), tablica będzie nosiła nazwę Hard i będzie mogła przechowywać informacje o 5 elementach.

// Plik źródłowy np. Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdio.h>

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
struct Baza
{
 char Name[250];
 char Mark[50];
 float Cost;
};

 Baza Hard[5];

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 sprintf(Hard[0].Name, "%s", "Bear Paw 1200 TA");
 sprintf(Hard[0].Mark, "%s", "Skaner");
 Hard[0].Cost = 350;

 sprintf(Hard[1].Name, "%s", "ImageQuest Q770");
 sprintf(Hard[1].Mark, "%s", "Monitor");
 Hard[1].Cost = 800;

 sprintf(Hard[2].Name, "%s", "Tracer TRK 21MTT");
 sprintf(Hard[2].Mark, "%s", "Klawiatura");
 Hard[2].Cost = 187;

 sprintf(Hard[3].Name, "%s", "FlashDisk");
 sprintf(Hard[3].Mark, "%s", "Napęd Dyskowy USB Flash");
 Hard[3].Cost = 120;

 sprintf(Hard[4].Name, "%s", "Epson Stylus C20SX");
 sprintf(Hard[4].Mark, "%s", "Drukarka");
 Hard[4].Cost = 320;
}
//---------------------------------------------------------------------------

Tak wypełnioną tablicę można np zapisać do pliku (ale o tym w dziale porady | różne | zapisywanie struktury do pliku), lub przepisać np do obiektu Memo1. Pokażę jednak jak przepisać tak utworzoną strukturę do obiektu StringGrid1, ponieważ w tym przypadku zastosowanie tabelki jest bardziej praktyczne. W tym celu umieszczamy na formularzu obiekt StringGrid1 i ustawiamy jego właściwości w następujący sposób:

Po przygotowaniu tabelki (proponuje jeszcze dopasować szerokości kolumn - ręcznie), wstawiamy na formularz obiekt Button2 i w zdarzeniu OnClick przepisujemy zawartość struktury Hard do obiektu StringGrid:

// Plik źródłowy np. Unit1.cpp
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 StringGrid1->Cells[0][0] = "Nazwa";
 StringGrid1->Cells[1][0] = "Marka";
 StringGrid1->Cells[2][0] = "Cena w PLN";

 for(int i = 0; i < 5; i++)
 {
  StringGrid1->Cells[0][i + 1] = Hard[i].Name;
  StringGrid1->Cells[1][i + 1] = Hard[i].Mark;
  StringGrid1->Cells[2][i + 1] = Hard[i].Cost;

  StringGrid1->RowCount++;
 }

 StringGrid1->RowCount--;
}
//---------------------------------------------------------------------------

Po uruchomieniu programu trzeba najpierw wypełnić strukturę wartościami klikając na przycisk Button1, a dopiero potem można nacisnąć przycisk Button2. Przedstawiony przykład wykorzystania struktury jest w istocie bardzo prosty i służy tylko pokazaniu w jaki sposób można się tym typem danych posługiwać. Struktury mają zastosowanie wszędzie tam gdzie trzeba przenosić dane pomiędzy różnymi obiektami. Sprawdzają się również doskonale w przypadku zapisywania i odczytywania danych z / do plików, ponieważ umożliwiają zapis całej struktury, wraz z układem danych i odczytanie jej z pliku bez potrzeby zamartwiania się o to jak te dane pogrupować i ponownie ułożyć w logiczną całość. Możliwości wykorzystania struktury są znacznie większe, jak również zawrzeć wewnątrz nich większą liczbę danych i w większej liczbie typów niż te które tutaj przedstawiłam. T wszystko co można zastosować do zmiennych różnych typów, można również zastosować do struktur, ponieważ struktura to nic więcej jak zbiór zmiennych, o czym pisałem na samym początku.

Jak zapisywać struktury do plików?

Jak odczytywać struktury z plików?

Opracował: Cyfrowy Baron.