Arrays în Delphi
Array - este o structură de date care reprezintă un set de variabile de același tip, având un nume comun. Tablourile sunt utile pentru stocarea omogene în natura informației, cum ar fi tabele și liste.
Apoi, trebuie să faceți clic aici:
Nume: [nizhniy_indeks..verhniy_indeks] de tip
- nume - numele de matrice;
- matrice - limbaj Delphi cuvinte cheie. indicând faptul că anunța numele este numele de matrice;
- nizhniy_indeks și verhniy_indeks - constantele întregi ce definesc intervalul indicelui matrice, și, implicit, numărul de elemente (dimensiuni) ale șirului;
- tip - tipul de elemente din matrice.
temperament: array [1..31] real;
koef: array [0..2] din întreg;
nume: array [1..30] string [25];
const
BT = 15; // numărul de echipe
SN = 25; // limita lungimea numelui comenzii
var
Echipa: array [1. BT] string [SN];
Pentru ca programul să folosească un element de matrice, este necesar să se precizeze numele matrice și numărul articolului (index), care include indicele între paranteze drepte. În expresie constantă sau un întreg de tip poate fi folosit ca un index, de exemplu:
Echipa [1]: = „1 Zenith;
d: = koef [l] * koef [l] - 4 * koef [2] * koef [1];
ShowMessage (nume [n + 1]);
temperament: = StrToFloat (text Editl.);
Nume: array [nizhniy_indeks. verhniy_indeks] de tip = (lista);
unde lista - valori separate prin virgulă ale elementelor de matrice.
a: array [lÖ] integer = (0. 0. 0. 0. 0. 0. 0. 0. 0. 0);
Echipa: array [1..5] de String [10] = ( 'rotor' 'Zenith Dynamo Spartak CAS“....);
Dacă încercați să inițializeze o matrice compilator locale afișează un mesaj de eroare: Nu se poate inițializa variabilele locale (variabilele locale nu pot fi inițializat). matrice locală poate fi inițializat numai în timpul rulării, de exemplu, după cum urmează:
pentru i: = 1 până la 10 face o: = 0;
operații tipice atunci când se lucrează cu matrice sunt:
- matrice de ieșire;
- matrice de intrare;
- căutarea maximă sau minimă a elementului matrice;
- căutarea unui element de matrice predeterminat;
- Sortarea unei matrice.
matrice de ieșire
Prin încheierea de matrice se referă la ieșirea de pe ecran (în dialogul) valori ale elementelor de matrice.
Dacă programul pe care doriți să o afișați valorile tuturor elementelor din matrice, atunci este convenabil de a folosi pentru instruire, în timp ce pentru contor variabilă manual poate fi folosit ca un element al indicelui matrice.
Ca un exemplu, în Fig. 5.1 cerere este dat o casetă de dialog care indică valorile de proces de inițializare și de ieșire ale elementelor de matrice în domeniul tag. Programul afișează o listă numerotată de echipe de fotbal. Trebuie remarcat faptul că în lista de echipe uitat într-adevăr ca o listă, Label1.AutoSize proprietate trebuie să atribuie o valoare de fals (setați proprietatea la True Label1.Autosize și a vedea modul în care programul va funcționa). Textul programului este prezentat în listă.
Listarea. Inițializarea și matrice de ieșire
02. interfaţă03. Ferestre, Mesaje, SysOtils, variante, Clase, Grafică, Controale, Formulare, Dialoguri, StdCtrls;
04. tipul
05. TForml = class (TForm)
06. Buttonl: TButton;
07. Label1: TLabel;
08. Procedura ButtonlClick (Expeditor: TObject);
09. privat
10.
11. publică
12.
13. sfârșit;
14. var
15. Form1: TForm1;
16. punerea în aplicare
17.
18. const
19. NT = 5;
20. var
21. Echipa: array [1. NT] de string [10] = ( 'Zenit1' 1. Dynamo 'Rotor1' Spartacus', 'CAS');
22. Procedura de TForml. ButtonlClick (Expeditor: TObject);
23. var
24. st: string; // lista de comenzi
25. i: integer; // index al numărului elementului matrice
26. începe
27. Lista formare a // pentru afișare în formă de
28. pentru i: = l la NT face st: = st + IntToStr (i) + '' + echipa + # 13;
29. // lista de imprimare
30. Label1. Legendă: = st;
31. final;
32. final.
matrice de intrare
Sub matrice de intrare se înțelege procesul de obținere de către utilizator (sau un fișier), în timp ce valorile elementelor de matrice ale unui program,
soluție „cap-“ la problema de matrice de intrare - pentru fiecare matrice pentru a crea un element casetă de text. Cu toate acestea, dacă doriți să introduceți o matrice suficient de mare, o astfel de soluție este inacceptabilă. Imaginați-vă forma, de exemplu, un zece câmpuri de editare!
Este evident că numerele de secvență sunt administrați convenabil în rândul din tabel, în cazul în care fiecare număr este situat pe o celulă separată. Mai jos avem în vedere două variante ale organizării șirului de intrare folosind componente StringGrid și Memo.
Sub matrice de intrare se înțelege procesul de obținere a (sau meniul File) al utilizatorului în timp ce valorile elementelor de matrice ale programului, soluție „cap-“ la problema de matrice de intrare - pentru fiecare element de matrice pentru a crea o casetă text. Cu toate acestea, dacă doriți să introduceți o matrice suficient de mare, o astfel de soluție este inacceptabilă. Imaginați-vă forma, de exemplu, un zece câmpuri de editare! Este evident că numerele de secvență sunt administrați convenabil în rândul din tabel, în cazul în care fiecare număr este situat pe o celulă separată. Mai jos avem în vedere două variante ale organizării șirului de intrare folosind componente StringGrid și Memo.
Utilizarea componentelor StringGrid
Pentru a introduce o serie de componente StringGrid utile. Icon component StringGrid este pe Additiona l fila (fig. 5.2).
componenta strinqGrid este un tabel, ale cărui celule conțin un șir de caractere.
Ca un exemplu al unei componente de intrare stringGrid matrice, luați în considerare un program care calculează media aritmetică a elementelor de matrice medie. Caseta de dialog Programul prezentat în Fig. 5.3. componenta stringGrid este folosită pentru a intra în matrice și componentele Label1 Label2 - pentru a afișa textul explicativ și un rezultat de calcul, Buttoni - pentru pornirea procesului de calcul.
componenta StringGrid este adăugată sub formă exact aceeași ca și celelalte componente. După adăugarea componentei pentru a forma este necesar să se efectueze setarea conform tabelului. 5.2. Valorile proprietăților pentru lățime și înălțime ar trebui să folosească mouse-ul pentru a seta astfel încât mărimea componentei a fost de dimensiuni egale linie.
Textul programului este prezentat în listă.
Proprietatea valorilor componentelor StringGrid1
Listarea. Introducerea și prelucrarea unei game largi de numere întregi
01. getar_ unitare;
02. interfaţă
03. utilizări
04. Ferestre, Mesaje, SysUtils, variante, Clase, Grafică, Controale,
05. Formulare, Dialoguri, Grile, StdCtrls;
06. tip
07. TForml = class (TForm]
08. Labell: TLabel;
09. StringGridl; TStringGrid;
10. Buttonl: TButton;
11. Label2: TLabel;
12. Procedura ButtorilClicMSender: TObject];
13. privat
14.
15. publică
16.
17. final;
18. var
19. Forml: TForml;
20. punerea în aplicare
21.
22. Procedura de TForml. ButtonlClick (Expeditor: TObject);
23. var
24. a. array [1..5] din întreg; // array
25. suntrn: integer; // suma elementelor
26. sr: real; // media aritmetică
27. i: integer / // Index
28. începe
29. Matricea de intrare //
30. // consideră că dacă celula este goală, corespunzător
31. Elementul de matrice // s este zero
32. pentru i: = 1 până la 5 do
33. în cazul în lungime (StringGridl. Celulele [i-l, 0]] 0
34. apoi a: = (celule StringGridl [j- 1. 0) StrToInt).
35. altfel o: = 0;
36. // procesare matrice
37. summ: = 0;
38. pentru i: = 1 până la 5 do
39. summ: = summ + a;
40. sr. = Summ / 5;
41. // rezultate de imprimare
42. Label2. 'cantitatea de elemente:' =: Caption + IntToStr (summl + # 13 + „Media aritmetică:„+ FloatToStr (sr);
43. final; end.
După ce se execută proces programului există o dorință de a face modificări la o serie de proces de intrare. Deci, ar fi frumos să aibă cursorul se va muta automat la următoarea celulă a tabelului, de exemplu, prin apăsarea unei taste. Acest lucru se poate face folosind procedura evenimentului # 111; nkeypress. În aceeași procedură sarcina de filtrare a tabelelor de date de intrare într-o celulă poate fi stabilită. În cazul nostru, este necesar pentru a permite intrarea celulei doar numere.
Procedura de eveniment Text # 111; nkeypress din listingul 5.3. Notă proprietatea Col că în timp ce programul conține un număr de coloană de tabel în care se află cursorul. Această caracteristică poate fi de asemenea folosit pentru a muta cursorul în celula dorită tabelă. Cu toate acestea, ține cont de faptul că coloana a tabelului, cu toate acestea, ca liniile sunt numerotate de la zero.
Listarea 5.3. Procedura de manipulare a evenimentului # 111; nkeypress
Procedura TForml. StringGridlKeyPress (Expeditor: TObject; var cheie; Char);
începe
caz cheie de
# 8 '0'. '9'. ; // numere și cheie
# 13 // cheie
dacă StringGridl. Col
altfel cheie: = Cro (O); // restul personajelor nu sunt permise
se încheie;
se încheie;
Dacă doriți să introducă o serie de numere în virgulă mobilă (o: [. 01 mai] matrice de reale), procedura de eveniment # 111; nkeypress oarecum complicat, astfel încât în plus față de numărul de caractere admisibile sunt caracterul separator (virgulă sau perioada - depinde de setările de Windows) și minus ... În scopul de a oferi un program de ușurința în ceea ce privește utilizatorul poate aplica adevărat utilizator truc substitut de inserare incorectă delimitator. Determinați care caractere de separare a permis în setarea curentă Windows, puteți prin contactarea unui separator zecimal variabilă globală. Listarea 5.4 prezintă aplicația modul de introducere a textului și procesarea unui șir de numere fracționare. Procedura de manipulare a evenimentului # 111; nkeypress oferă intrare la celula de masă admisă numai atunci când se înregistrează un număr fracționar de simboluri.
Listarea 5.4. Introducerea și procesarea șirului de numere fracționare
01. getar_l unitare;02. interfaţă
03. utilizări
04. Ferestre, Mesaje, SysUtils, variante, Clase, Grafică, controale,
05. Formulare, Dialoguri, Grile, StdCtrls;
06. tip
07. TForml - Clasa (TFora)
08. Labell: TLabel;
09. StringGridl: TStringGrid;
10. Buttonl: TButton;
11. Label2: TLabel;
12. Procedura ButtonlClick (Expeditor: TObject);
13. Procedura StringGridlKeyPress (Expeditor: TObject; var cheie: Char);
14. privat
15.
16. publică
17.
18. final;
19. var
20. Forml: TForml;
21. punerea în aplicare
22.
23. Procedura de TForml. ButtonlClick (Expeditor: TObject);
24. var
25. o. array [1..5] real; // array
26. Summ: real, - // suma elementelor
27. sr: real; // media aritmetică
28. i: integer; // indicele
29. începe
30. // array intrare
31. // consideră că dacă celula este goală, corespunzător
32. Elementul de matrice // s este zero
33. pentru i: = eu să fac 5
34. în cazul în care LengtMStringGridl. Celulele [j- 1. 0]) 0
35. decât o [i): = StrToFloat [StringGridl. Celulele [j- 1. 0]]
36. altceva a: = 0;
37. // procesare matrice
38. summ: = 0;
39. pentru i: = 1 până la 5 do
40. summ: = summ + a;
41. sr: = summ / 5;
42. // rezultate de imprimare
43. Label2. Legendă: =
44. 'Suma:' + FloatToStr (summ) + # 13 +
45. 'aritmetică:' + FloatToStr (SR);
46. final;
47. // funcție asigură o intrare în celulă numai caractere valide
48. Procedura TForml. StringGridlKeyPress (Expeditor: TObject; var cheie: Char);
49. începe
50. caz cheie de
51. # 8 '0'. '9'. ; // numere și
52. # 13 // cheie
53. în cazul în care StringGridl. Col
55.“. “. “. “. // părțile zecimale ale numărului
56. începe
57. în cazul în care cheia DecimalSeparator atunci
58. Cheie: = Separator zecimal; // inlocuieste separatorul
59. // o validă
60. dacă Pos (StringGridl. Celule [StringGridl. Col, 0].
61. DecimalSeparator) pe Despre
62. apoi Cheie: = Cro (O); // a doua interdicție de intrare
63. // delimitator
64. final;
65. '-'. // minus se poate intra doar „primul caracter,
66. // t. E. Când celula este goală
67. dacă Lungime (StringGridl. Celule [5tringGridl. Col, 0]) de aproximativ
68. apoi Cheie: = Cro (O);
69. altfel // alte simboluri interzise
70. Tasta: = Cro [0);
71. final; se încheie; end.