C# - Nowa klasa z konstruktorami i metodami

0

Cześć,

Zacząłem ostatnio swoją przygodę w programowaniu C#. Wyszukałem sobie zadanie, które chciałbym zrobić, aczkolwiek zaciąłem się i nie jestem w stanie przeskoczyć przeszkody.

Treść zadania brzmi:
Zdefiniuj klasę Tablica:
pola prywatne: n - liczba elementów
a - tablica liczb całkowitych
Metody:

  • Konstruktor domyślny: n = 0, a = null;
  • Konstruktor: Tablica(int nn, int x[])
  • Getery i setery

Metody

  • średnia arytmetyczna wartosci elementow
  • element maksymalny (jego wartosc i indeks)
  • czy podana (jako parametr) wartosc wystepuje na ktorejs z k (k<= liczba elementow) początkowych pozycji tablicy
  • wyswietlanie wartosci elementow tablicy w postaci: a[i] = w dla i = 0,..., n-1

W klasie Main:

  • Zadeklaruj tablicę liczb całkowitych o rozmiarze n(n = 10), zainiciuj ją dowolnymi liczbami całkowitymi
  • Zadeklaruj obiekt klasy Tablica i zademonstruj działanie metod tej klasy.

Do sedna. Klase Tablica, konstruktory i klase Main ogarnąłem. Problem zaczyna się, w momencie, gdy mam wyliczyć w pierwszej metodzie średnią arytmetyczną za pomoc wcześniej podanych zmiennych i konstruktorów. Kombinowałem na różne sposoby i żaden nie okazał się właściwy.

class Program
    {
        static void Main(string[] args)
        {
            #region Obiekt Tablica
            Tablica tablica = new Tablica(2, new [] { 1, 2, 3, 4 });

            #endregion

            #region Tablica Liczb całkowitych
            int[] nArray = new int[10];
            nArray[0] = 1;
            nArray[1] = 2;
            nArray[2] = 3;
            nArray[3] = 4;
            nArray[4] = 5;
            nArray[5] = 6;
            nArray[6] = 7;
            nArray[7] = 8;
            nArray[8] = 9;
            nArray[9] = 10;
            #endregion

         
        }
    }
    

  public class Tablica
    {
        private int _n;
        private int[] _a;
        public int wynik = 0;

        public Tablica()
        {
            _n = 0;
            _a = null;
        }

        public Tablica(int nn, int [] x)
        {
            _n = nn;
            _a = x;
        }


    }

Z góry dziękuję za odpowiedź.

0

W zadaniu chodziło chyba o to, aby tą tablicę, którą tworzysz w funkcji main, przekazać jako argument do konstruktura. Czyli twój kod wyglądałby tak:

class Program
    {
        static void Main(string[] args)
        {
            #region Tablica Liczb całkowitych
            int[] nArray = new int[10];
            nArray[0] = 1;
            nArray[1] = 2;
            nArray[2] = 3;
            nArray[3] = 4;
            nArray[4] = 5;
            nArray[5] = 6;
            nArray[6] = 7;
            nArray[7] = 8;
            nArray[8] = 9;
            nArray[9] = 10;
            #endregion

            #region Obiekt Tablica
            Tablica tablica = new Tablica(nArray.Count, nArray);
            #endregion

        }
    }

  public class Tablica
    {
        private int _n;
        private int[] _a;
        public int wynik = 0;

        public Tablica()
        {
            _n = 0;
            _a = null;
        }

        public Tablica(int nn, int [] x)
        {
            _n = nn;
            _a = x;
        }
    }

W przypadku metod zawartych w treści zadania to po krótce:

  1. Średnia arytmetyczna - zadeklaruj sobie zmienną i przypisz do niej wartość 0, w następnym kroku w pętli po wszystkich elementach tablicy dodawaj wartość elementu do zmiennej suma, w ostatnim kroku zwróć suma / n
  2. Element maksymalny - zadeklaruj sobie obiekt typu Tuple<int, int> i wpisz do niego wartości (0, a[0]), następnie w pętli po wszystkich elementach tablicy sprawdzaj czy element jest większy od drugiej wartości w obiekcie Tuple - jeśli tak to wpisz do niego nowe wartości (i, a[i]). Zwróć obiekt tuple.
  3. Tu nie do końca rozumiem co jest parametrem funkcji - wartość, którą sprawdzamy czy k ?
  4. Wyświetlanie tablicy - w pętli po wszystkich elementach wypisz na ekranie n[i].

Dodam, że nie piszę w C# warto by poszukać w dokumentacji, czy np nie ma jakiejś funkcji/property w tablicy, która zwraca maksymalny element, minimalny etc. Z tego co kiedyś miałem okazję pisać w c# to orientuję się, że jest dużo tego typu pól w obiektach

0

Super dzięki za szybką odpowiedź. Poprawię i dam znać jaki efekt.

0

Poza tym poczytaj o pętlach i wywal pole wynik, które nie jest Ci do niczego potrzebne.

0

Sprawdź czy o to ci chodziło i czy nie ma błędu , Pozdrawiam ;)

using System;


namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
             int[] tablicaLiczb  = { 200, 2, 4, -5, 10, 1, -42, 6, 0, 24, 7, 99, 500, 1, 500, 500 };
            //int[] tablicaLiczb = { 200 };
            Tablica tb = new Tablica(tablicaLiczb);
            tb.WyswietlElementyTablicy();
            Console.WriteLine("średnia arytmetyczna = {0}", tb.SredniaArytmetyczna());
            tb.WartoscMaksymalna();
            Console.WriteLine("Czy tablica zawiera liczbę 24 {0}", tb.CzyIstniejeWartosc(24) ? "tak" : "nie");
        }
    }

    class Tablica
    { 
        int[] a;
        int n;
        public Tablica(int[] x)
        {
            n = x.Length;
            a = x;
        }

        public int SredniaArytmetyczna()
        {
            int sredniaArtm = 0;
            for(int i = 0; i < a.Length; i++)
            {
                sredniaArtm = sredniaArtm + a[i];
            }
            sredniaArtm = sredniaArtm / n;
            return sredniaArtm;
        }

        public void WartoscMaksymalna()
        {
            int tmp = a[0];
            int indeks = 0;
            if (n == 1) Console.WriteLine("maksymalna wartoość {0} - indeks = {1}", a[indeks], indeks);
            else
            {
                for (int i = 1; i < n; i++)
                {
                    if (tmp < a[i])
                    {
                        tmp = a[i];
                        indeks = i;
                    }
                        
                }
                Console.WriteLine("maksymalna wartoość {0} - indeks = {1} ", tmp, indeks);
            }
        }

        public bool CzyIstniejeWartosc(int wrt)
        {
            for (int i = 0; i < n; i++)
            {
                if (a[i] == wrt) return true;
            }
            return false;
        }

        public void WyswietlElementyTablicy()
        {
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("indeks - {0} - {1}", i, a[i]);
            }
        }
    }
}
0

Dziękuję wszystkim za odpowiedzi. Koniec końców zrobiłem tak (jeszcze nie mam ostatniego i przedostatniego myślnika z metod, czyli nie wiem jeszcze czemu, ale nie wyświetla mi ile jest wystąpień k w tablicy i w ostatnim myślniku z metod zastanawiam się jak wyświetlić te wartości tablicy w metodzie):

 class Program
    {
        static void Main(string[] args)
        {
            #region Tablica Liczb całkowitych
            int[] nArray = new int[10];
            nArray[0] = 1;
            nArray[1] = 2;
            nArray[2] = 2;
            nArray[3] = 2;
            nArray[4] = 5;
            nArray[5] = 6;
            nArray[6] = 7;
            nArray[7] = 8;
            nArray[8] = 2;
            nArray[9] = 10;
            #endregion

            #region Obiekt Tablica
            Tablica tablica = new Tablica(10, nArray);
            tablica.ShowGetAverageValue();
            tablica.ShowMaxValueAndMaxValueIndex(); 
            tablica.ShowOccuringValueInTable(); 

            #endregion

  

 public class Tablica
    {
        private int _n;
        private int[] _a;
        

        public Tablica()
        {
            _n = 0;
            _a = null;
        }

        public Tablica(int nn, int [] x)
        {
            _n = nn;
            _a = x;
        }

        public double GetAverageValue()
        {
            double sum = 0;

            foreach (var value in _a)
            {
                sum += value;
            }

            return sum / _n;
        }

        public void ShowGetAverageValue()
        {
            Console.WriteLine("Average numbers from the table is: {0}", GetAverageValue());
        }

        public int MaxValue(int []x) 
        {
            int max = x[0]; 

            for (int i = 1; i < x.Length; i++) 
            {
                if (x[i] > max) 
                {
                    max = x[i];
                } 
            }
            return max;
            
        }

        public int MaxValueIndex(int[] x)
        {
            int index = 0;      

            for (int i = 1; i < x.Length; i++) 
            {
                if (x[i] > x[index]) 
                {
                    index = i;
                }
            }
            return index; 

        }

        public void ShowMaxValueAndMaxValueIndex()
        {
            Console.WriteLine("Max Vaule from the table is: {0}", MaxValue(_a));
            Console.WriteLine("Index of Max Vaule from the table is: {0}", MaxValueIndex(_a));
            Console.ReadLine();
        }

        public int OccuringValueInTable(int[] x) 
        {
            int k = 0;

            for (int i = 0; i < x.Length; i++)
            {
                if (x[i] == 1)
                {
                    k += 1;
                }
            }
            return k;
        }

        public void ShowOccuringValueInTable()
        {
            Console.WriteLine("test {0}", OccuringValueInTable(_a));
        }

        public void ShowTheTable()
        {

        }
    }



0
elfiorr napisał(a):

Dziękuję wszystkim za odpowiedzi. Koniec końców zrobiłem tak (jeszcze nie mam ostatniego i przedostatniego myślnika z metod, czyli nie wiem jeszcze czemu, ale nie wyświetla mi ile jest wystąpień k w tablicy i w ostatnim myślniku z metod zastanawiam się jak wyświetlić te wartości tablicy w metodzie):

 class Program
    {
        static void Main(string[] args)
        {
            #region Tablica Liczb całkowitych
            int[] nArray = new int[10];
            nArray[0] = 1;
            nArray[1] = 2;
            nArray[2] = 2;
            nArray[3] = 2;
            nArray[4] = 5;
            nArray[5] = 6;
            nArray[6] = 7;
            nArray[7] = 8;
            nArray[8] = 2;
            nArray[9] = 10;
            #endregion

            #region Obiekt Tablica
            Tablica tablica = new Tablica(10, nArray);
            tablica.ShowGetAverageValue();
            tablica.ShowMaxValueAndMaxValueIndex(); 
            tablica.ShowOccuringValueInTable(); 

            #endregion

  

 public class Tablica
    {
        private int _n;
        private int[] _a;
        

        public Tablica()
        {
            _n = 0;
            _a = null;
        }

        public Tablica(int nn, int [] x)
        {
            _n = nn;
            _a = x;
        }

        public double GetAverageValue()
        {
            double sum = 0;

            foreach (var value in _a)
            {
                sum += value;
            }

            return sum / _n;
        }

        public void ShowGetAverageValue()
        {
            Console.WriteLine("Average numbers from the table is: {0}", GetAverageValue());
        }

        public int MaxValue(int []x) 
        {
            int max = x[0]; 

            for (int i = 1; i < x.Length; i++) 
            {
                if (x[i] > max) 
                {
                    max = x[i];
                } 
            }
            return max;
            
        }

        public int MaxValueIndex(int[] x)
        {
            int index = 0;      

            for (int i = 1; i < x.Length; i++) 
            {
                if (x[i] > x[index]) 
                {
                    index = i;
                }
            }
            return index; 

        }

        public void ShowMaxValueAndMaxValueIndex()
        {
            Console.WriteLine("Max Vaule from the table is: {0}", MaxValue(_a));
            Console.WriteLine("Index of Max Vaule from the table is: {0}", MaxValueIndex(_a));
            Console.ReadLine();
        }

        public int OccuringValueInTable(int[] x) 
        {
            int k = 0;

            for (int i = 0; i < x.Length; i++)
            {
                if (x[i] == 1)
                {
                    k += 1;
                }
            }
            return k;
        }

        public void ShowOccuringValueInTable()
        {
            Console.WriteLine("test {0}", OccuringValueInTable(_a));
        }

        public void ShowTheTable()
        {

        }
    }



Tylko zdecyduj się albo na polskie nazewnictwo albo angielskie. Nie mieszaj.

0

Ok zapamiętam

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