Pole (array)
Pole je skupina prvků stejného typu se kterou se dá zacházet jako s celkem. Proměnné v této skupině se nazývají prvky pole, jsou očíslovány (indexovány)
a s jednotlivými prvku se pracuje pomocí jejich pořadových čísel (indexů). Pole jsou referenční typy a jsou odvozena ze třídy System.Array.
Pole začíná indexem nula, je možné pomocí statické metody System.Array.CreateInstance() vytvořit pole s libovolnou dolní mezí.
Deklarace pole
Jednorozměrné:
typ[] seznam_identifikatoru;
Dvourozměrné:
typ[,] seznam_identifikatoru;
// deklarace odkazů
int[] x;
// deklarace odkazů
int[] x, y;
// deklarace odkazů
string[] knihy;
Typ je typ prvků pole. Následují prázdné hranaté závorky říkají, že deklarujeme pole, nikoli obyčejnou proměnnou. Seznam identifikatorů, to jsou identifikátory
deklarovaných odkazů.
V deklaraci se neuvádí počet prvků pole. Ten se určí později až se bude poel vytvářet.
První možností v uvedeném popisu syntaxe obsahuje prázdné lomené závorky a slouží k deklaraci jednorozměrného pole.
Druhá možnost obsahuje v lomených závorkách čárku a slouží k deklaraci pole se dvěma indexy (dvourozměrného).
Chceme-li pole s n indexy, tak napíšeme do lomených závorek n-1 čárek.
Vytvoření pole
K vytvoření pole se použije operátor new. Tento operátor vrátí odkaz na nově vytvořené pole. Za operátorem new se uvede typ prvků a jejich počet.
x = new int[8]; //vytvoření nového pole typu int s 8 prvky
x = y; //přiřazení odkazu, pole jsou referenční typy, nevytváří se kopie
knihy = new string[4]; //pole typů string se 4 prvky
Musím však připomenout, že když budu mít pole s 8 prvky, jejich index budou začínat od nuly. Takže k prvkům z pole velkého 8, se dostanu indexi 0 - 7.
V poli řetězců se 4 prvky jsou indexi 0 - 3.
Pole zanikne až budou zrušeny všechny odkazy na něj.
Vše můžu samozřejmě napsat do jednoho řádku.
int[] knihy = new knihy[4];
INICIALIZACE POLE - Pole můžu naplnit takto:
knihy[0] = "Kniha 1";
knihy[1] = "Kniha 2";
knihy[2] = "Kniha 3";
knihy[3] = "Kniha 4";
Pokud znám prvky pole předem, můžu je tam zapsat přímo v deklaraci. Za identifikátor napíšeme rovnítko a pak ve složených závorkách jednotlivé
prvky oddělené čárkami a to takto:
double[] cisla = {45, 34, 34, 32, 64};
Program vytvoří pole o potřebném počtu prvků, uloží do něj dané hodnoty a okdaz na ně přiřadí proměnné čísla.
Také pole vytvořené pomocí new můžeme inicializovat. Prostě za zápis operátoru new připíšeme do lomených závorek seznam hodnot.
double[] cisla = new double[3] {43, 3, 2};
Tak zde máme pár inicializací a deklarací jednorozměrného pole
using System;
class policko
{
static void Main()
{
//pole řetězců
string[] LOTR = new string[4];
LOTR[0] = "Minas Morgul";
LOTR[1] = "Minas Thirith";
LOTR[2] = "Lothlorien";
LOTR[3] = "Dol-Guldur";
foreach (string s in LOTR)
Console.WriteLine(s);
Console.Write("\n");
string[] oblasti;
oblasti = new string[3];
oblasti[0] = "Morie";
oblasti[1] = "Mordor";
oblasti[2] = "Středozem";
foreach (string s in oblasti)
Console.WriteLine(s);
Console.Write("\n");
//pole intů
int[] cisla = new int[10];
cisla[0] = 1;
cisla[3] = 4;
cisla[9] = 10;
//cisla[10] = 34; pozor zde by byla chyba,
//pac bych inicializoval někde mimo pole :D
//zde take vidime, že ostatní indexi pole jsou
//automaticky inicializované nulou
foreach (int vypisCisla in cisla)
Console.WriteLine(vypisCisla);
Console.Write("\n");
//zde mame dalsi inicializaci pole s prvky jak
//jdou za sebou
int[] dalsiCisla = new int[] { 3, 4, 9, 90 };
foreach (int vypisDalsiCisla in dalsiCisla)
Console.WriteLine(vypisDalsiCisla);
Console.Write("\n");
//pozor pri teto inicializaci musim dosadit vsech
//sest hodnot, jinak mi to hodi chybku
int[] _01_cisla = new int[6] {5, 3, 4, 4, 4, 4};
foreach (int vypis in _01_cisla)
Console.WriteLine(vypis);
Console.Write("\n");
//pokud chci typ char, musim dat znaky do apostrofů
char[] zkouska = new char[4];
zkouska[0] = '4';
zkouska[1] = 'd';
zkouska[2] = 'k';
zkouska[3] = '5';
foreach (char vypis in zkouska)
Console.WriteLine(vypis);
}
}
Zde jsem si dal práci nad poli v jazyku C#. No snad to bude jasné.
using System;
class pole
{
static void Main()
{
int[] cisla = new int[2];
cisla[0] = 666;
cisla[1] = 999;
char[] samohlasky = new char[] { 'a', 'e', 'i', 'o', 'u' };
Console.WriteLine(samohlasky[3]);
for (int r = 0; r < samohlasky.Length; r++)
{
Console.WriteLine(r + " = " + samohlasky[r]);
}
Console.Write("\n");
for (int k = 0; k < cisla.Length; k++)
{
Console.WriteLine(cisla[k]);
}
Console.WriteLine("\n");
foreach (char vypis in samohlasky)
{
Console.WriteLine(vypis);
}
string[] mamRad = new string[9];
mamRad[0] = "\nSystem of a down";
mamRad[1] = "Metallica";
mamRad[2] = "Nightwish";
mamRad[3] = "Prodigy";
mamRad[4] = "Daniel Landa";
mamRad[5] = "Moby";
mamRad[6] = "Bloodhound Gang";
mamRad[7] = "Faithless";
mamRad[8] = "Offspring";
foreach(string skupiny in mamRad)
Console.WriteLine(skupiny);
//vypise to co je v indexech pole
for (int g = 0; g < mamRad.Length; g++)
Console.WriteLine(mamRad[g]);
//kazdy index naplni cislem 4
int[] numera = new int[8];
for (int h = 0; h < numera.Length; h++)
{
numera[h] += 4;
Console.WriteLine(numera[h]);
}
Console.Write("\n");
//zde demonstrace chyby :D
//chtel jsem kazde pole naplit tak, aby
//se k nemu vzdy precetla hodnota nasledujiciho
//pole, ale jen jsem menil index 0 stale jinou
//hodnotou ^^
int[] numera2 = new int[8];
for (int h = 0; h < 1; h++)
{
for (int s = 0; s < numera2.Length; s++)
{
numera2[h] += s;
Console.WriteLine(numera2[h]);
}
}
//odradkovani :D
Console.Write("\n");
//inicializace pole je rovna jeho indexu
int[] numera3 = new int[8];
for (int h = 0; h < numera3.Length; h++)
{
int k = h;
numera3[h] += k;
Console.WriteLine(numera3[h]);
}
Console.Write("\n");
//kontrola --> je to naplneny po jedny
Console.WriteLine(numera3[0]);
Console.WriteLine(numera3[3]);
Console.WriteLine(numera3[5]);
//inicializace pole zacina s hodnotami od jedne
int[] numera4 = new int[8];
for (int h = 0; h < numera4.Length; h++)
{
int k = h;
k++;
numera4[h] += k;
Console.WriteLine(numera4[h]);
}
Console.Write("\n");
//kontrola --> je to naplneny o5 po jedne od jedne
Console.WriteLine(numera4[0]);
Console.WriteLine(numera4[3]);
Console.WriteLine(numera4[5]);
Console.Write("\n");
//inicializace pole zacina s hodnotami od nuly
int[] numera5 = new int[8];
int l = 0;
for (int h = 0; h < numera5.Length; h++)
{
l += h;
numera5[h] += l;
Console.WriteLine(numera5[h]);
}
Console.Write("\n");
//kontrola --> je to vzdy cislem vetsi o to predchazejici
Console.WriteLine(numera5[0]);
Console.WriteLine(numera5[3]);
Console.WriteLine(numera5[5]);
}
}