Ćwiczenia na klasach

0

Witam

Przerabiam aktualnie kurs na udemy i wszystko spoko, ale brakuję mi tam ćwiczeń po każdym wykładzie.
Teraz jestem w trakcie ogarniania klas i po kilku wykładach nie czuję się jeszcze tam swobodnie i chciałbym porobić jakieś ćwiczenia żeby swobodnie już operować klasami

Znalazłem coś takiego http://www.cs.put.poznan.pl/anstroinski/data/uploads/mipo/materials/mipo-programowanie-obiektowe-w-c-zadania.pdf , ale brakuję mi tam rozwiązań żeby sprawdzić czy dobrze zrobiłem, albo ewentualnie znaleźć jakąś podpowiedź jakbym czegoś nie wiedział.

Gdzie mógłbym znaleźć takie podobne ćwiczenia, ale z rozwiązaniami?

Z góry dzięki za odpowiedź.

1

Ćwiczeń zapewne jest dużo w Internecie ale tych zawierających przy okazji gotowe rozwiązania już pewnie niekoniecznie.
Zachęcam do dzielenia się kodem tutaj, bo na pewno ktoś odpowie i Cię naprowadzi.

1
grzesiek51114 napisał(a):

Ćwiczeń zapewne jest dużo w Internecie ale tych zawierających przy okazji gotowe rozwiązania już pewnie niekoniecznie.
Zachęcam do dzielenia się kodem tutaj, bo na pewno ktoś odpowie i Cię naprowadzi.

Programowanie jest po części powielaniem rozwiązań, i tu gotowe odpowiedzi mają sens, po części twórczością, i tu ocena z forum może być lepsza.
Oprócz tego na większość zagadnień jest* szkoła falenicka i szkoła otwocka
*

0

Ok, dzięki
Wziąłem się już za rozwiązywanie zadań i mam jedno małe pytanie, a nie chcę o taką błahostkę robić specjalnie nowego tematu.
Otóż odnośnie pierwszego zadania ze strony, którą podałem to zrobiłem coś takiego.

class Program
    {
        static void Main(string[] args)
        {
            /* int a, b;
              Console.WriteLine("Podaj a");
              a = Int32.Parse(Console.ReadLine());

              Console.WriteLine("Podaj b");
              b = Int32.Parse(Console.ReadLine());

            */
            Licz licz = new Licz();
            Console.WriteLine("Wynik dodawania to = " + licz.Dodaj());
            Console.WriteLine("Wynik odejmowania to = " + licz.Odejmij());

            Console.ReadLine();
           
        }
    }
    class Licz
    {
        public int a = 0;
        public int b = 0;



        public int Dodaj()
        {
                return  a + b;
        }
        public int Odejmij()
        {
            return a - b;
        }
    }
}

Teoretycznie wszystko działa tylko chciałbym, aby to użytkownik wpisywał liczby, a nie ja z poziomu programu.
Jak zrobić żeby parsowanie przypiswało liczbę do zmiennej w klasie?
Próbowałem na chłopski rozum coś takiego:
(Nazwaklasy).a = Int32.Parse(Console.ReadLine());

albo też w klasie zmienić nazwę zmiennych na np.
public int zma = 0;
public int zmb = 0;
i poźniej przypisać a = zma, b = zmb, ale średnio to zadziałało.

1

Dobrze kombinujesz. Zrób np tak:

        static void Main(string[] args)
        {
            int a, b;
            Console.WriteLine("Podaj a");
            a = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Podaj b");
            b = Int32.Parse(Console.ReadLine());

            Licz licz = new Licz();
        	licz.a=a;
			licz.b=b;

            Console.WriteLine("Wynik dodawania to = " + licz.Dodaj());
            Console.WriteLine("Wynik odejmowania to = " + licz.Odejmij());

            Console.ReadLine();
        }

lub jeśli chcesz od razu wrzucać wartości do obiektu licz, musisz go utworzyć przed miejscem gdzie chcesz mu wpisywać wartości do właściwości:

public static void Main()
	{
			Licz licz = new Licz();
            Console.WriteLine("Podaj a");
            licz.a = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Podaj b");
            licz.b = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Wynik dodawania to = " + licz.Dodaj());
            Console.WriteLine("Wynik odejmowania to = " + licz.Odejmij());

            Console.ReadLine();
	}
1

No nie jest to ładne rozwiązanie.

  1. Nie używaj Parse, ponieważ w przypadku błędu zostanie wyrzucony wyjątek, a jak wiadomo sytuacja, w której user wpisuje literkę zamiast liczby wcale nie jest wyjątkowa. Lepiej oprogramować to odpowiednio za pomocą TryParse.
  2. Zamiast metod lepiej w tym wypadku skorzystać z własności;

Coś np. takiego:

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

namespace _4p
{
    class MathBox
    {
        //  Readonly, ponieważ te pola są i tak inicjalizowane
        //  wyłącznie w konstruktorze klasy.
        private readonly int a;
        private readonly int b;

        //  Zastosowanie własności zamiast metod.
        public int Sum { get => a + b; }
        public int Diff { get => a - b; }
        public int Mul { get => a * b; }
        public int Div { get => b != 0 ? a / b : 0; }

        public MathBox(int a, int b)
        {
            this.a = a;
            this.b = b;
        }
    }

    class Program
    {
        //  Tutaj masz pewność, że zawsze zostanie wczytana liczba całkowita
        private static int ReadInteger()
        {
            int result = 0;
            while (!int.TryParse(Console.ReadLine(), out result))
            {
                Console.WriteLine("Wyrażenie nie jest liczbą całkowitą.");
            }
            return result;
        }

        static void Main(string[] args)
        {
            Console.Write("Podaj 'a':");
            int a = ReadInteger();
            Console.Write("Podaj 'b':");
            int b = ReadInteger();

            var box = new MathBox(a, b);
            Console.WriteLine($"Suma: {box.Sum}\nRóżnica: {box.Diff}\nIloczyn: {box.Mul}\nIloraz: {box.Div}\n");
        }
    }
}

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