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.
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
Trzy kontrolki TextBox są umieszczone wewnątrz trzech kontrolek GroupBox. Każda z kontrolek TextBox ma ustawioną wartość Multiline na True
Pole Dock na Fill
Wybieramy możliwość przewijania zawartości kontrolki poprzez ustawienie ScrollBars na Vertical
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
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
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
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