Jednowymiarowe tablice statyczne (część 2). Visual Studio C#
Tablice mogą być statyczne lub dynamiczne, jedno lub wielowymiarowe. Jednowymiarowa tablica, to zbiór danych tego samego typu, przypisanych do jednej zmiennej w postaci szeregu wartości. Każda z tych wartości ma niepowtarzalny indeks w tak utworzonym zbiorze danych. Tablica jednowymiarowa jest odpowiednikiem osi liczbowej.
Cel: Napisz aplikację, która wykorzysta trzy tablice jednowymiarowe o ustalonym rozmiarze i losowych wartościach typu całkowitego, na których będzie można wykonać podstawowe działania matematyczne.
![statyczne tablice jednowymiarowe visual studio c#](./../g-VS/p26-1.png)
Krok1. Układ komponentów
- GroupBox- sztuk 4
- TextBox- sztuk 5
- Label- sztuk 2
- Button- sztuk 4
Proponowane rozmieszczenie komponentów przedstawia poniższa ilustracja
![rozmieszczenie komponentów](./../g-VS/p26-2.png)
Trzy kontrolki TextBox są umieszczone wewnątrz trzech kontrolek GroupBox. Każda z kontrolek TextBox ma ustawioną wartość Multiline na True
![wartość Multiline](./../g-VS/p26-3.png)
Pole Dock na Fill
![dock fill](./../g-VS/p26-5.png)
Wybieramy możliwość przewijania zawartości kontrolki poprzez ustawienie ScrollBars na Vertical
![scrollBars na vertical](./../g-VS/p26-4.png)
Krok 2. Deklarujemy zmienne
Deklarując tablice statyczne należy podać ich rozmiar, który określa maksymalną ilość elementów jaka może pomieścić dana tablica. W tym rozwiązaniu rozmiar jest podany jako wartość const w postaci zmiennej typu int.
Wskazówka:
public partial class Form1 : Form
{
const int ROZMIAR= 10;//rozmiar tablic
Random los = new Random();//generato wartosci losowych
int z = 0;//zakres losowania
int[] t1 = new int[ROZMIAR];//tablica nr 1
int[] t2 = new int[ROZMIAR];//tablica nr 2
Krok 3. Przypisanie tablicom losowych wartości
Proponowane rozwiązanie oparte jest na funkcji zwracającej typ jednowymiarowej tablicy. Funkcja jest uniwersalna i pozwala wylosować tablicę jednowymiarową o dowolnym rozmiarze z wartości nie przekraczających zadany zakres i różnych od zera
Wskazówka:
int[] losoweElementyTablicy(int rozmiar, int zakres)
{
int[] tab = new int[rozmiar];
for (int i = 0; i < rozmiar; i++)
{
tab[i] = los.Next(zakres) + 1;
}
return tab;
}
Wywołanie opisanej funkcji jest przypisane do zdarzenia Click przycisku button1
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
//odczytaj zakres losowego zbioru
z = Convert.ToInt16(textBox3.Text);
t1 = losoweElementyTablicy(ROZMIAR, z);
t2 = losoweElementyTablicy(ROZMIAR, z);
textBox1.Clear();
textBox2.Clear();
for (int i = 0; i < ROZMIAR; i++)
{
textBox1.AppendText(i.ToString() + ": " + t1[i].ToString() + Environment.NewLine);
textBox2.AppendText(i.ToString() + ": " + t2[i].ToString() + Environment.NewLine);
}
}
Skompiluj i uruchom program. Prawidłowo działająca aplikacja zwróci w kontrolkach TextBox kolejne losowe wartości utworzonych tablic
![TextBox visual studio c#](./../g-VS/p26-6.png)
Krok 4. Wykonanie działań na wartościach z określonych indeksów
Odczyt wartości z określonego miejsca (indeksu) tablicy jest proste. Wymaga podania numeru indeksu. Należy zadbać o to, aby indeks nie przekroczył rozmiaru tablicy.
Poniżej przykład instrukcji przypisania wartości odczytanej z tablicy do zmiennej lokalnej
int a=tab[3];Wykonujemy działanie dodawania dla wybranych wartości odczytanych z tablic przypiszemy do zdarzenia Click przycisku button2
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
textBox4.Clear();
int id = Convert.ToInt16(textBox5.Text);
float wynik= t1[id] + t2[id];
textBox4.AppendText(t1[id].ToString()+bt.Tag+t2[id].ToString()+"="+wynik.ToString());
}
Możemy również wykorzystać bardziej uniwersalne podejście dla większej ilości przycisków działań matematycznych. Proponowane rozwiązanie bazuje na rzutowaniu obiektu sender i rozpoznaniu rodzaju przycisku poprzez wartość pola Tag kontrolek Button
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
textBox4.Clear();
int id = Convert.ToInt16(textBox5.Text);
float wynik=0;
Button bt= sender as Button;
switch (bt.Tag)
{
case "+":wynik = t1[id] + t2[id];break;
case "-":wynik = t1[id] - t2[id];break;
}
textBox4.AppendText(t1[id].ToString()+bt.Tag+t2[id].ToString()+"="+wynik.ToString());
}
Skompiluj program i sprawdź efekt działania
![tablica jednowymiarowa c#](./../g-VS/p26-7.png)
Krok 5. Wykonanie działań na wszystkich elementach tablicy
Jednoczesne wykonanie działań na wszystkich elementach tablicy wymaga użycia pętli. Proponowany kod przedstawia dodawanie kolejnych elementów odczytanych równolegle z dwóch wcześniej utworzonych tablic. Wyniki kolejnych dodawań są wypisywane w kontrolce TextBox. Całość jest wywołana w zdarzeniu Click przycisku button4
Wskazówka:
private void button4_Click(object sender, EventArgs e)
{
textBox4.Clear();
for (int id = 0; id < ROZMIAR; id++)
{
int wynik = t1[id] + t2[id];
textBox4.AppendText(t1[id].ToString() +
"+" + t2[id].ToString() +
"=" + wynik.ToString() +
Environment.NewLine);
}
}
Skompiluj i uruchom program. Prawidłowo działająca aplikacja zwróci kolejne sumy
![int[] visual studio c#](./../g-VS/p26-8.png)
Kod rozwiązania
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 _26tabliceStatyczne
{
public partial class Form1 : Form
{
const int ROZMIAR= 10;//rozmiar tablic
Random los = new Random();//generato wartosci losowych
int z = 0;//zakres losowania
int[] t1 = new int[ROZMIAR];//tablica nr 1
int[] t2 = new int[ROZMIAR];//tablica nr 2
int[] losoweElementyTablicy(int rozmiar, int zakres)
{
int[] tab = new int[rozmiar];
for (int i = 0; i < rozmiar; i++)
{
tab[i] = los.Next(zakres) + 1;
}
return tab;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//odczytaj zakres losowego zbioru
z = Convert.ToInt16(textBox3.Text);
t1 = losoweElementyTablicy(ROZMIAR, z);
t2 = losoweElementyTablicy(ROZMIAR, z);
textBox1.Clear();
textBox2.Clear();
for (int i = 0; i < ROZMIAR; i++)
{
textBox1.AppendText(i.ToString() +
": " + t1[i].ToString()
+ Environment.NewLine);
textBox2.AppendText(i.ToString() +
": " + t2[i].ToString()
+ Environment.NewLine);
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox4.Clear();
int id = Convert.ToInt16(textBox5.Text);
float wynik=0;
Button bt= sender as Button;
switch (bt.Tag)
{
case "+":wynik = t1[id] + t2[id];break;
case "-":wynik = t1[id] - t2[id];break;
}
textBox4.AppendText(t1[id].ToString()+
bt.Tag+
t2[id].ToString()+
"="+wynik.ToString());
}
private void button4_Click(object sender, EventArgs e)
{
textBox4.Clear();
for (int id = 0; id < ROZMIAR; id++)
{
int wynik = t1[id] + t2[id];
textBox4.AppendText(t1[id].ToString() +
"+" + t2[id].ToString() +
"=" + wynik.ToString() +
Environment.NewLine);
}
}
}
}
Rozwiązanie pod konsolę C#
Powyższe zadania rozwiązane przy użyciu konsoli C# Visual Studio
Wskazówka:
using System;
namespace tablice_jednowymiarowe_cz2_konsola
{
internal class Program
{
const int ROZMIAR = 10;//rozmiar tablic
static Random los = new Random();//generatol wartosci losowych
static int z = 0;//zakres losowania
static int[] t1 = new int[ROZMIAR];//tablica nr 1
static int[] t2 = new int[ROZMIAR];//tablica nr 2
static int[] losoweElementyTablicy(int rozmiar, int zakres)
{
int[] tab = new int[rozmiar];
for (int i = 0; i < rozmiar; i++)
{
tab[i] = los.Next(zakres) + 1;
}
return tab;
}
static void zad1()
{
//odczytaj zakres losowego zbioru
Console.WriteLine("Podaj zakres losowego zbioru: ");
z = int.Parse(Console.ReadLine());
t1 = losoweElementyTablicy(ROZMIAR, z);
t2 = losoweElementyTablicy(ROZMIAR, z);
//Console.Clear();
//\t znacznik użycia tabulatora
Console.WriteLine("id\ttab1\ttab2");
for (int i = 0; i < ROZMIAR; i++)
Console.WriteLine(i + "\t" + t1[i] + "\t" + t2[i]);
}
static void zad2()
{
//sumowani elemtów z dwóch tablic
Console.WriteLine("Podaj indeks: ");
int id = int.Parse(Console.ReadLine());
int wynik = t1[id] + t2[id];
Console.WriteLine(t1[id]+"+"+t2[id]+"="+wynik);
}
static void zad3()
{
for (int id = 0; id < ROZMIAR; id++)
{
int wynik = t1[id] + t2[id];
Console.WriteLine(t1[id]+"+"+t2[id]+"="+wynik);
}
}
static void Main(string[] args)
{
Console.WriteLine("Witaj w CzD!");
Console.WriteLine("Zad 1");
zad1();
Console.WriteLine("Zad 2");
zad2();
Console.WriteLine("Zad 3");
zad3();
}
}
}
Ilustracja działającego rozwiązania konsolowego
![Ilustracja działającego rozwiązania konsolowego. Visual Studio C#](./g-VS/tablice-jednowymiarowe-cz2-konsola-1.webp)