c#

C# tömbök

C# programozás Programozás

A tömb az az adattípus, amikor egy adott típusú változóból egy sorozatot, vagy vektort, mátrixot készítünk. A tömb egy összetett homogén adatstruktúra, melynek tetszőleges, de előre meghatározott számú eleme van. Az elemek típusa azonos. A tömb lehet egy vagy többdimenziós, a dimenzió száma nem korlátozott. Az egydimenziós tömböket vektoroknak hívjuk.
Általános szintaxis: Típus[] tömbnév = new Típus[hossz];

A tömbök elemeinek sorszámozása 0-tól kezdődik, az utolsó elem száma pedig elemek száma-1.
Tehát a szamok tömb elemei: 0. elem az 5, az utolsó elem pedig a szamok[4] amelynek értéke 2
Fontos megjegyezni, hogy a tömb statikus. Ha egyszer beállítottuk a méretét, nem lehet megváltoztatni. Azt viszont gond nélkül megtehetjük, hogy újra lefoglaljuk neki a helyet, de ekkor a benne tárolt adatok elvesznek (kivéve ha lementettük őket).

Tömb elemeinek kiíratása:

  • For ciklussal:
  • Foreach ciklussal

Példa 1

Nézzünk egy példa tömböt. Töltsünk fel egy 10 elemű tömböt 0-100 közötti véletlen számokkal! Rendezzük növekvő sorrendbe!
A tömb elemeinek növekvő sorba rendezése az Array.Sort(tömbneve) metódussal történeik. Ha szeretnénk fordított sorrendben kiíratni őket, akkor elöször rendezzük növekvőbe, majd az Array.Reverse(tömbneve) metódussal megkapjuk a fordított sorrendet!

Példa 2:

Nézzünk egy másik példát. Állítsunk elő 50 db egész számot -100 és 100 között! Írassuk ki őket 5 sorba! Írjuk ki a pozitív páros számokat is! Ha nincs egy sem, akkor ezt: „Nincs pozitív páros szám.” Itt a feladat második része miatt használunk tömböt, hogy meg tudjuk vizsgálni, van-e közöttük pozitív páros szám.

 

Két vagy többdimenziós tömbök

Nézzünk egy 2 dimenziós tömböt:
int [ , ] szamok2d = new int[ 1 , 2 ];
string [ , ] szoveg = new string [10, 9];

Vesszővel választjuk el a dimenziók számát. A többdimenziós tömbök elemeinek feltöltését egymásba ágyazott ciklusokkal valósítjuk meg.

Hozzunk létre egy 3×3-as „mátrixot”, töltsük fel véletlen számokkal. A többdimenziós tömböknél a tömb nagyságát a Tömb.GetLength(dimenzio száma) függvénnyel kérdezzük le. A tömb elemeinek feltöltéséhez több egymásba ágyazott ciklust használunk.

using System;
class Program
{
static public void Main()
{
int[,] matrix = new int[3, 3];
Random r = new Random();
for (int i = 0; i < matrix.GetLength(0); ++i)// sorok
{
for (int j = 0; j < matrix.GetLength(1); ++j)// oszlopok
{
matrix[i, j] = r.Next(1,20);
Console.Write(matrix[i, j]+"\t");
}
Console.WriteLine();
}
Console.ReadKey();
}
}

A következő példában egy 3×3-mas tömböt töltünk fel „kézzel”, majd kiíratjuk a tömb elemeit 3×3-as formában.

namespace matrix_feltolt
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Tömb elemeinek feltöltése...");
            int[,] tomb = new int[3, 3];
            int i, j;
            for (i = 0; i < 3; i++)
                for (j = 0; j < 3; j++)
                {
                    Console.Write("Kérem a {0}. sor {1}. oszlop elemét: ", i, j);
                    tomb[i, j] = int.Parse(Console.ReadLine());
                }
            Console.WriteLine("Az eredeti mátrix: ");
            for (i = 0; i < 3; i++)
            {
                for (j = 0; j < 3; j++)
                Console.Write("{0} ", tomb[i, j]);
                Console.WriteLine();
            }
        }
    }
}

Egy halgazdaság próbafogást rendez, 5 halat fognak ki, és vizsgálják a súlyukat és méretüket.
Az egyszerűség kedvéért dkg és cm mértékegységet használnak.
A program feladatai:mennyi a halak összsúlya?
– Mennyi a legkisebb súly? Milyen fajta hal?
– Mennyi a legnagyobb súly? Milyen fajta hal?

using System;
namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {//hal fajtája, tömege, hossza 5sor 3 oszlop
            string[,] halak = new string[5, 3] {
            {"csuka","100","40"},
            {"ponty","510","75"},
            {"harcsa","2250","88"},
            {"ponty","2450","62"},
            {"törpeharcsa","25","24"},
            };
            /*
            Console.WriteLine("{0} hal tömege: {1}dkg hossza: {2}cm",halak[0,0], halak[0,1], halak[0,2]);
            Console.WriteLine("{0} hal tömege: {1}dkg hossza: {2}cm", halak[1, 0], halak[1, 1], halak[1, 2]);
            Console.WriteLine("{0} hal tömege: {1}dkg hossza: {2}cm", halak[2, 0], halak[2, 1], halak[2, 2]);
            */
            //Halak adatai
            for (int i = 0; i < halak.GetLength(0); i++)
            {
                for (int j = 0; j < halak.GetLength(1); j++)
                { Console.Write("{0} ", halak[i, j]); }
                Console.WriteLine();
            }
            //A halak össztömege
            //Legnehezebb hal tömegének mentése
            int maxsuly = 0; int minsuly = 1000;
            int ossztomeg = 0; string maxsuly_index=""; string minsuly_index="";
            for (int i = 0; i < halak.GetLength(0); i++)
                
                {
                    ossztomeg += Convert.ToInt32(halak[i, 1]);
                if (Convert.ToInt32(halak[i, 1]) > maxsuly)
                {
                    maxsuly = Convert.ToInt32(halak[i, 1]);
                    maxsuly_index = halak[i, 0];
                }
                if (Convert.ToInt32(halak[i, 1]) < minsuly)
                {
                    minsuly = Convert.ToInt32(halak[i, 1]);
                    minsuly_index = halak[i, 0];
                }
            }
            Console.WriteLine("össztömeg: {0} dkg",ossztomeg);
            Console.WriteLine("legnehezebb hal:{0} súlya: {1} dkg",maxsuly_index,maxsuly);
            Console.WriteLine("legkönnyebb hal:{0} súlya: {1} dkg", minsuly_index, minsuly);
        }
    }
}

Feladat: Töltsünk fel egy 10 elemű tömböt 1-20 közötti véletlenszámokkal, úgy, hogy ne ismétlődjenek a tömbben a számok!

namespace tomb_ism_nelkul
{
    class Program
    {
        static void Main(string[] args)
        {
            Random vsz = new Random();
            int[] tomb= new int[10];
            bool vanmar; //van-e már ilyen eleme a tömbnek?
            int ujelem=0;
            for (int i = 0; i <tomb.Length; i++)
            {                
                do                  
                {
                    vanmar = false;
                    ujelem = vsz.Next(1, 20);                    
                    for (int j = 0; j < tomb.Length; j++)
                        if (tomb[j] == ujelem)
                        {
                            vanmar = true;
                        }
                }
                while (vanmar);
                tomb[i] = ujelem;
            }
            Console.WriteLine();
            foreach (int item in tomb)
                Console.Write("{0} ",item);
        }
    }
}

Feladat: Készítsünk egy órarendet, amit egy kétdimenziós tömb tárol. Írassuk ki a tömb összes elemét! Írassuk ki csak 1db óra adatát! Az átláthatóbb adatok miatt a tömbbe beírtam a napok neveit is.

using System;
namespace szept20_orarend
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Órarend");
            string[,] orarend = new string[5, 5]
            {
                {"hétfő","info","ének","rajz","úszás"},
                {"kedd","úszás","tech","biosz","matek"},
                {"szerda","magyar","földrajz","töri","info"},
                {"csütörtök","ofő","magyar","matek","angol"},
                {"péntek","matek","tesi","rajz","angol"}
            };
            //kiíratás, összes adat
            for (int i = 0; i < orarend.GetLength(0); i++)
            {
                for (int j = 0; j < orarend.GetLength(1); j++)
                {
                    Console.Write("{0} ", orarend[i, j]);
                }
                Console.WriteLine();
            }
            //kiíratás 1 adat, szerda 4.óra
            //a tömbök elemei 0 sorszámmal kezdődnek!
            Console.WriteLine("{0}",orarend[2,4]);
        }
    }
}

Feladat: Totó
Készítsünk programot, amely totó tippeket sorsol! A feladatot 2 tömb segítségével oldjuk meg! Az egyik tömb tartalmazza az elemeket (1,2,x) a másikat pedig töltsük fel véletlenszerűen az első tömb elemeivel!

using System;
namespace okt11_toto_tombok
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("TOTÓ tippek...");
            string[] elemek = new string[3] {"1","2","x"};
            string[] toto = new string[14];
            Random vsz = new Random();
            
            for (int i=0; i<toto.Length; i++)
            {
                toto[i] = elemek[vsz.Next(0, 3)];
            }
            foreach (string i in toto)
                Console.Write("{0} ",i);
        }
    }
}

Feladat: min,max, megszámlálás, átlag gyakorlása.:
Állítson elő véletlenszerűen 40 számot a [-20, 20] tartományból!

  • Állapítsa meg pozitív vagy negatív számból van-e több? A választ
    és a darabszámokat írja a képernyőre!
  • Hányszor fordult elő a 7-es szám?
  • Van-e a számok között 0?
  • Adja meg a legkisebb szám indexét!
  • Adja meg a negatív számok átlagát!
  • Adja meg melyik a legkisebb, és a legnagyobb szám!
  • Melyik volt a pozitív számok közül a legkisebb?
  • Melyik volt a negatív számok közül a legnagyobb?
    -Írassa ki növekvő sorrendben a számokat!
    -Írassa ki csökkenő sorrendben a számokat!
using System;
namespace gyakorlas1018
{
    class Program
    {
        static void Main(string[] args)
        {
            int min = 20; int max = -20; int poz = 0; int neg = 0; int hetes = 0;
            int nulla = 0; int minind = 0; int minpoz = 20; int maxmin = -20;
            int negativok = 0;
            Random vsz = new Random();
            int[] tomb = new int[40];
            for (int i = 0; i < tomb.Length; i++)
            {
                tomb[i] = vsz.Next(-20, 21);
                if (min > tomb[i]) { min = tomb[i]; minind = i; }
                if (max < tomb[i]) max = tomb[i];
                if (tomb[i] > 0) poz++;
                if (tomb[i] < 0) { neg++; negativok = negativok + tomb[i]; }
                if (tomb[i] == 7) hetes++;
                if (tomb[i] == 0) nulla++;
                if (tomb[i] > 0 && tomb[i] < minpoz) minpoz = tomb[i];
                if (tomb[i] < 0 && tomb[i] > maxmin) maxmin = tomb[i];
            }
            int se = 0;
            foreach (int i in tomb)
            {
                se++;
                if (se % 20 == 0) Console.WriteLine();
                Console.Write("{0} ", i);
            }
            Console.WriteLine("poz: {0} db negatív: {1} db", poz, neg);
            if (poz > neg) Console.WriteLine("Több a pozitív szám!");
            else if (neg > poz) Console.WriteLine("Több a negatív szám!");
            else Console.WriteLine("Egyenlő");
            if (hetes == 0) Console.WriteLine("Nincs hetes szám!");
            else Console.WriteLine("Hetesek: {0} db", hetes);
            if (nulla == 0) Console.WriteLine("Nincs 0!");
            else Console.WriteLine("Nullák: {0} db", nulla);
            Console.WriteLine("min: {0} indexe: {2},max: {1}", min, max, minind);
            Console.WriteLine("Negatív számok átlaga: {0}",negativok/neg);
            Console.WriteLine("Legkisebb pozitív szám: {0}", minpoz);
            Console.WriteLine("Legnagyobb negatív szám: {0}", maxmin);
            Array.Sort(tomb);
            Console.WriteLine("Növekvő sorrendben:");
            se = 0;
            foreach (int i in tomb)
            {
                se++;
                if (se % 20 == 0) Console.WriteLine();
                Console.Write("{0} ", i);
            }
            
            Array.Reverse(tomb);
            Console.WriteLine("Csökkenő sorrendben:");
            se = 0;
            foreach (int i in tomb)
            {
                se++;
                if (se % 20 == 0) Console.WriteLine();
                Console.Write("{0} ", i);
            }
        }
    }
}

2D tömb elemeinek elforgatása 90 fokkal: