obliczanie ilosci obiektow

0

Witam mam takie zadanko do zrobienia. I zatrzmałem się na podpukncie : int ile(Klient k)
Pytanie brzmi jak zaczac to robic dobra droga ide? Jezeli ktos moglby choc troszke kodu wspomóc byłbym bardzo wdzięwczny.
tresc zadania :Image and video hosting by TinyPic

a oto moj kod ktory udalo mi sie naklepac :

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

namespace ConsoleApplication1
{
    class Program
    {

        class Osoba
        {
            public int rok_urodzenia;


            public Osoba(int r)
            {

                rok_urodzenia = r;

            }




        }

        class Klient : Osoba
        {
            public int zaplata;

            


            public Klient(int r, int z)
                : base(r)
            {
                zaplata = z;
            }



        }


        class Ewidencja
        {
            //na tablicach 

            public Osoba[] tab;
            public int i;


            public Ewidencja(int n)  // konstruktor
            {
                // przekazanie wieklosci tablicy przez parametr 
                tab = new Osoba[n]; // tworzenie 21                                         tablicy n elementowej
                i = 0;
            }

            public void Insert(Osoba o) // 
            {
                tab[i] = o; // w [] miejsce w tablicy 
                i++;
            }

            public void Wypisz()
            {
                int p;
                for (p = 0; p < i; p++)
                {


                    if (tab[p] is Klient) // spr czy w tablicy na miejscu p jest klient
                    {
                        Console.WriteLine("Klient " + tab[p].rok_urodzenia + " " + (tab[p] as Klient).zaplata); //obiekt na miejscu p jako klienta
                    }
                    else
                    {
                        Console.WriteLine("Osoba " + tab[p].rok_urodzenia + " ");
                    }
                }


            }
            public int Ile(Klient k)
            {
                int t;
                int zaplata_klienta_k = 0;

                for (t = 0; t < i; t++)
                {
                    if (tab[t] is Klient)
                    {
                        zaplata_klienta_k += (tab[t] as Klient).zaplata; // odwolujemy sie do Klienta i bierzemy zaplate
                    }


                }
                if (t> zaplata_klienta_k)
                { Console.WriteLine("sa 3"); }

                else
                {
                    Console.WriteLine("jest mniej");
                }
            }












            static void Main(string[] args)
            {

                Ewidencja obiekt = new Ewidencja(1000);     //tworzymy nowy obiekt klasy ewidencja
                obiekt.Insert(new Osoba(1992));
                obiekt.Insert(new Klient(1953, 2280));
                obiekt.Insert(new Klient(1980, 3020));

                obiekt.Wypisz();
                






                Console.ReadLine();




            }
        }
    }
}
1

Ten sam kod co powyżej, reformatowany i wstawiony w <code class="csharp"> dla czytelności (dla innych osób które mogłyby chcieć odpowiedzieć)

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

namespace ConsoleApplication1
{
    class Program
    {
        class Osoba
        {
            public int rok_urodzenia;

            public Osoba(int r)
            {
                rok_urodzenia = r;
            }
        }

        class Klient : Osoba
        {
            public int zaplata;
            public Klient(int r, int z)
                : base(r)
            {
                zaplata = z;
            }
        }

        class Ewidencja
        {
            public Osoba[] tab;
            public int i;

            public Ewidencja(int n)
            {
                tab = new Osoba[n];
                i = 0;
            }

            public void Insert(Osoba o) // 
            {
                tab[i] = o;
                i++;
            }

            public void Wypisz()
            {
                for (int p = 0; p < i; p++)
                {
                    if (tab[p] is Klient)
                    {
                        Console.WriteLine("Klient " + tab[p].rok_urodzenia + " " + (tab[p] as Klient).zaplata);
                    }
                    else
                    {
                        Console.WriteLine("Osoba " + tab[p].rok_urodzenia + " ");
                    }
                }
            }

            public int Ile(Klient k)
            {
                int t;
                int zaplata_klienta_k = 0;

                for (t = 0; t < i; t++)
                {
                    if (tab[t] is Klient)
                    {
                        zaplata_klienta_k += (tab[t] as Klient).zaplata; // odwolujemy sie do Klienta i bierzemy zaplate
                    }
                }

                if (t > zaplata_klienta_k) { Console.WriteLine("sa 3"); }
                else
                {
                    Console.WriteLine("jest mniej");
                }
            }

            static void Main(string[] args)
            {
                Ewidencja obiekt = new Ewidencja(1000);
                obiekt.Insert(new Osoba(1992));
                obiekt.Insert(new Klient(1953, 2280));
                obiekt.Insert(new Klient(1980, 3020));

                obiekt.Wypisz();

                Console.ReadLine();
            }
        }
    }
}

Odpowiedź właściwa:

Zadeklarować klasę Osoba z atrybutem rok_urodzenia - jest (powinno być rokUrodzenia, ale to już wina zadania)
Zadeklarować Klient (...) - jest
Zadeklarować Ewidencja (...) - jest (nazwy metod powinny być Insert, Ile, Min - to nie Java. Ale to też wina zadania)

Ewidencję lepiej (i prościej) byłoby zrobić na listach:

public List<Osoba> osoby; // zamiast Osoba[] tab
osoby.Add(o); // zamiast tab[i] = o; i++

Chyba że z jakiegoś powodu odgórnego ich nie możesz użyć.

Ile jest niepoprawne (i sie nie kompiluje nawet). Nie mam pojęcia co to miało robić.

Powinno być:

public int Ile(Klient k)
{
    int ile = 0;
    for (int t = 0; t < i; t++)
    {
        if (tab[t] is Klient && (tab[t] as Klient).zaplata > k.zaplata)
        {
            ile++;
        }
    } return ile;
}

Chociaż ofc do tego służy LINQ ;]:

public int Ile(Klient k)
{
    return tab.OfType<Klient>().Count(x => x.zaplata > k.zaplata);
}

Min wcale nie ma. Można zrobić zwykłe przejście po tablicy trzymając dotychczasowe minimum w zmiennej (albo użyć metody .Min z LINQ)

ma wypisać wynik wywołania metody min na ewidencji
Powinno być raczej Console.WriteLine(obiekt.min()) niż obiekt.wypisz() wypisujące zawartość

1 użytkowników online, w tym zalogowanych: 0, gości: 1