Tablice jednowymiarowe w języku C#. Część 1
Typ tablicowy zaliczany jest do typów strukturalnych- budowa typu tablicowego jest złożona.
Tablica jednowymiarowa jest przykładem złożonych typów danych. Do złożonych typów danych należą tablice (jedno-, dwu-, wielowymiarowe), rekordy (struktury), listy, pliki. Na wartość tego rodzaj typów danych składają inne wartości, których złożoność może być duża. Tablice jednowymiarowe są przykładem prostej złożoności.
Ogólnie, tablica to ciąg elementów tego samego typu. Każdy element tablicy ma przyporządkowany indeks. Elementy tablicy numerowane sa od zera.
Tablica jednowymiarowa
Tablica jest rodzajem zmiennej indeksowanej o własnej niepowtarzalnej nazwie w obrębie jednej klasy. Do tej nazwy przypisuje się kolejne indeksy, pod którymi przechowuje się typ danych zadeklarowany w momencie definiowania zmiennej tablicowej.
Rysunek przedstawiający różnicę pomiędzy pojedynczą zmienną a tablicą jednowymiarową
Źródło Informatyka dla szkół ponadpodstawowych. Zakres podstawowy Klasa II wyd. MiGra
Zwróć uwagę, że indeksowanie zmiennych w tablicy rozpoczyna się od indeksu równego 0 (zero)
Deklaracja tablicy jednowymiarowej
W zależności od rodzaju deklaracji tablicy możemy utworzyć tablicę statyczną lub dynamiczną. Tablice dynamiczne nie mają z góry określonej ilości elementów. Ich rozmiar może ulegać zmianie w trakcie wykonywania programu. Tablice statyczne mają rozmiar z góry określonych w momencie ich deklaracji. Oznacza to, że pamięć przydzielona na zmienną tablicową tak utworzoną nie zmienia się, nie zależnie od tego czy została wypełniona danymi.
Przykłady deklaracji tablicy jednowymiarowej
Deklaracja tablicy jednowymiarowej typu całkowitego o rozmiarze pięciu elementów
int[] t= new int [5];Deklaracja tablicy jednowymiarowej typu całkowitego o rozmiarze pięciu elementów z równoczesnym przypisaniem wartości. Rozmiar tablicy zostaje ustalony na podstawie ilości podanych wartości
int[] t= new int[]{9, 8, 1, 4, 3};Odwołania do elementów tablicy jednowymiarowej
Przypisanie wartości do wybranego indeksu tablicy
t[3]=121;Odczytanie wartości z dowolnego indeksu tablicy
int a = t[2];int suma = t[2]+t[5];
Podstawowe operacje na tablicach jednowymiarowych- ćwiczenia
Zad. 1
Utwórz jednowymiarową 10- elementową tablicę liczb całkowitych wypełnioną wartościami w momencie jej deklaracji. Zawartość tablicy wypisz w kontrolce TextBox ustawionej do pracy w trybie multiline.
Wskazówka:
public partial class Form1 : Form
{
int[] tabZad1 = new int[10] { 99, 3, 5, 18, 21, 45, 67, 34, 98, 41 };
Rozwiązanie
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
//pokaż tablicę
for (int i = 0; i < 10;i++)
textBox1.AppendText(
tabZad1[i].ToString()
+ Environment.NewLine);
//podejście bardziej elastyczne w stosunku do rozmiaru
//tablicy
textBox1.AppendText(
"To samo ale z odczytem rozmiaru liczności tablicy"
+ Environment.NewLine);
for (int i = 0; i < tabZad1.Length; i++)
textBox1.AppendText(
tabZad1[i].ToString()
+ Environment.NewLine);
}
Zad. 2
Wygeneruj losową stuelementową tablicę liczb całkowitych z przedziału od 1 do 500. Wypisz zawartość tablicy w kontrolce TextBox ustawionej do pracy w trybie multiline.
Wskazówka:
public partial class Form1 : Form
{
int[] tabZad1 = new int[10] { 99, 3, 5, 18, 21, 45, 67, 34, 98, 41 };
int[] tabZad2 = new int[100];
Random los = new Random();//generator liczb losowych
Rozwiązanie
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
//włącz generator liczb losowych
for(int i = 0; i < tabZad2.Length; i++)
tabZad2[i]=los.Next(500)+1;
//pokaz tablicę
textBox1.Text = "";
for (int i = 0; i < tabZad2.Length; i++)
textBox1.AppendText(
tabZad2[i].ToString()
+ Environment.NewLine);
}
Zad. 3.
Zmodyfikuj zad.2 tak aby program podał indeks i wartość najmniejszego elementu tablicy.
Rozwiązanie
Wskazówka:
private void button3_Click(object sender, EventArgs e)
{
//korystamy z wyników zadania drugiego
//losujemy i pokazujemy tablicę o 100 elementach
button2_Click(sender, e);
//tymczasowo przymij, ze min to pierwszy element
int min = tabZad2[0],
id =0;
//szukaj najmniejszego elementu
//oraz ustal jego indeks
for (int i = 1; i < tabZad2.Length; i++)
{
if (tabZad2[i] < min)
{
min = tabZad2[i];
id = i;
}
}
MessageBox.Show(
"Minimum to: " + min.ToString() + Environment.NewLine
+"Indeks minimum " +id.ToString(),
"Komunikat",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
Zad. 4
Zmodyfikuj zadanie 2 tak aby program policzył sumę elementów tablicy.
Pełny kod programu
Wskazówka:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace tablicaJednowymiarowa_cz1
{
public partial class Form1 : Form
{
int[] tabZad1 = new int[10] { 99, 3, 5, 18, 21, 45, 67, 34, 98, 41 };
int[] tabZad2 = new int[100];
Random los = new Random();//generator liczb losowych
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
//pokaż tablicę
for (int i = 0; i < 10;i++)
textBox1.AppendText(
tabZad1[i].ToString()
+ Environment.NewLine);
//podejście bardziej elastyczne w stosunku do rozmiaru
//tablicy
textBox1.AppendText(
"To samo ale z odczytem rozmiaru liczności tablicy"
+ Environment.NewLine);
for (int i = 0; i < tabZad1.Length; i++)
textBox1.AppendText(
tabZad1[i].ToString()
+ Environment.NewLine);
}
private void button2_Click(object sender, EventArgs e)
{
//włącz generator liczb losowych
for(int i = 0; i < tabZad2.Length; i++)
tabZad2[i]=los.Next(500)+1;
//pokaz tablicę
textBox1.Text = "";
for (int i = 0; i < tabZad2.Length; i++)
textBox1.AppendText(
tabZad2[i].ToString()
+ Environment.NewLine);
}
private void button3_Click(object sender, EventArgs e)
{
//korystamy z wyników zadania drugiego
//losujemy i pokazujemy tablicę o 100 elementach
button2_Click(sender, e);
//tymczasowo przymij, ze min to pierwszy element
int min = tabZad2[0],
id =0;
//szukaj najmniejszego elementu
//oraz ustal jego indeks
for (int i = 1; i < tabZad2.Length; i++)
{
if (tabZad2[i] < min)
{
min = tabZad2[i];
id = i;
}
}
MessageBox.Show(
"Minimum to: " + min.ToString() + Environment.NewLine
+"Indeks minimum " +id.ToString(),
"Komunikat",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
private void button4_Click(object sender, EventArgs e)
{
//korystamy z wyników zadania drugiego
//losujemy i pokazujemy tablicę o 100 elementach
button2_Click(sender, e);
long suma = 0;
for (int i = 1; i < tabZad2.Length; i++)
suma += tabZad2[i];
MessageBox.Show(
"Suma elemntów wynosi "+suma.ToString(),
"Komunikat",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
}
}
Rozwiązanie pod konsolę
Wybierając rozwiązanie konsolowe znaczenie ma wybranie wersji platformy z warunkiem używania lub nie używania instrukcji najwyższego poziomu. Wybór między innymi rzutuje na postać inicjacji kodu. Na przykład platforma NET 7.0 z opcją: Nie używaj instrukcji najwyższego poziomu
Tworzy zalążek kodu jak poniżej
A wybór platformy NET 7.0 z brakiem zaznaczenia opcji : Nie używaj instrukcji najwyższego poziomu
Daje zalążek kodu jak poniżej
Oba kody są jednoznaczne.
Zmienna statyczna? w programowaniu jest to zmienna, która w danym bloku programu posiada dokładnie jedną instancję i istnieje przez cały czas działania programu.
Poniżej rozwiązania podanych problemów z zastosowaniem konsoli
Wskazówka:
using System;
namespace tablice_jednowymiarowe_cz1
{
internal class Program
{
//Zmienna statyczna ? w programowaniu jest to zmienna,
//która w danym bloku programu posiada dokładnie jedną instancję
//i istnieje przez cały czas działania programu.
//W języku C++ każda zmienna globalna jest jednocześnie zmienną statyczną.
//incjacja danych statycznych
static int[] tabZad1 = new int[10] { 99, 3, 5, 18, 21, 45, 67, 34, 98, 41 };
static int[] tabZad2 = new int[100];
static Random los = new Random();//generator liczb losowych
static void zad1()
{
//pokaż tablicę
for (int i = 0; i < 10; i++)
Console.WriteLine(tabZad1[i]);
//podejście bardziej elastyczne w stosunku do rozmiaru tablicy
//To samo ale z odczytem rozmiaru liczności tablicy
Console.WriteLine("***To samo, ale z odczytem rozmiaru tablicy***");
for (int i = 0; i < tabZad1.Length; i++)
Console.WriteLine(tabZad1[i]);
}
static void zad2()
{
//włącz generator liczb losowych
for (int i = 0; i < tabZad2.Length; i++)
tabZad2[i] = los.Next(500) + 1;
//pokaz tablicę
for (int i = 0; i < tabZad2.Length; i++)
Console.WriteLine(tabZad2[i]);
}
static void zad3()
{
//korystamy z wyników zadania drugiego
//losujemy i pokazujemy tablicę o 100 elementach
zad2();
//tymczasowo przymij, ze min to pierwszy element
int min = tabZad2[0],
id = 0;
//szukaj najmniejszego elementu
//oraz ustal jego indeks
for (int i = 1; i < tabZad2.Length; i++)
{
if (tabZad2[i] < min)
{
min = tabZad2[i];
id = i;
}
}
Console.WriteLine(
"Minimum to: " + min.ToString() + Environment.NewLine
+ "Indeks minimum " + id.ToString());
}
static void zad4()
{
//korzystamy z wyników zadania drugiego
//losujemy i pokazujemy tablicę o 100 elementach
zad2();
long suma = 0;
for (int i = 1; i < tabZad2.Length; i++)
suma += tabZad2[i];
Console.WriteLine(
"Suma elemntów wynosi " + suma.ToString());
}
static void Main(string[] args)
{
Console.WriteLine("Witaj w CzD!");
Console.WriteLine("Zadanie 1:");
zad1();
Console.WriteLine("Zadanie 2:");
zad2();
Console.WriteLine("Zadanie 3:");
zad3();
Console.WriteLine("Zadanie 4:");
zad4();
}
}
}
Wynik działania kodu przedstawia poniższa ilustracja