fel
le

Tömbök

Egy osztályt definiáljunk, amely tartalmaz egy "nagy" méretű vektort (500.000 elemmel). Az egyszerűség kedvéért töltsük fel ezt a vektort "1" értékekkel. Így tudjuk hogy a tömbelemek összege 500.000 lesz.

Tartalmazzon egy publikus osszeg mezőt is, mely induláskor legyen 0. Készítsünk két void-os visszatérésű, paraméter nélküli függvényt alsofele() és felsofele() névvel. Az első a vektor alsó felét, 0..249999 közötti elemek összegét számolja ki oly módon, hogy minden vektorelemet hozzáad az osszeg mezőhöz. Hasonlóan, a felső felét összegző függvény a 2500000 és 4999999 sorszámú elemeket összegzi.

Készítsünk programot, amely a két függvényt egymás után meghívja, és kiírja a vektor elemeinek összegét (nem meglepő módon ez 500.000 lesz).

Tömb több szálon

Készítsük el a program azon változatát, amely két szálon indítja el a két függvényt, és kiírja a képernyőre továbbra is a vektor elemek összegét. Vizsgáljuk meg és értsük meg mi történik, és oldjuk meg hogy a program stabilan adja a jó értéket.

Vektoros program forráskódja

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;



namespace tombos
{
    class tomb
    {
        public int osszeg = 0;
        public int[] V = new int[500000];
        //.......................................................................
        public tomb()
        {
            for (int i = 0; i < V.Length; i++) V[i] = 1;
            this.osszeg = 0;
        }
        //.......................................................................
        public void alsoFele()
        {
            for (int i = 0; i < 250000; i++)
            {
              this.osszeg = this.osszeg + V[i];
            }
        }
        //.......................................................................
        public void felsoFele()
        {
            for (int i = 250000; i < V.Length; i++)
            {
              this.osszeg = this.osszeg + V[i];
            }
        }
        //.......................................................................
    }
    class FoProgram
    {
        public static void Main()
        {
            tomb t = new tomb(); // egyuttal fel is toltodik 1-esekkel
            t.alsoFele();
            t.felsoFele();
            Console.WriteLine("A tombelemek osszege={0}", t.osszeg);
            Console.ReadLine();
        }
    }
}
 
Hernyák Zoltán
2013-04-15 14:00:05