Mój amatorski kod i optymalizacja tego kodu

0

Witam, zacznę od tego że przygodę z programowaniem dopiero zaczynam, także przyjmę konstruktywną krytykę na klatę, z góry dzięki za rady!)
Piszę program wyznaczający spośród trzech podanych liczb tą o środkowej wartości. Mój problem polega na tym, że kod to bawienie sie 'if'.
Jest bardziej optymalny sposób na napisanie tego? pozdrawiam

double a, b, c;
Console.WriteLine("podaj wartość a");
a = float.Parse(Console.ReadLine());
Console.WriteLine("podaj wartość b");
b = float.Parse(Console.ReadLine());
Console.WriteLine("podaj wartość c");
c = float.Parse(Console.ReadLine());
if (a > b && a < c)
{
Console.WriteLine("środkowa liczba to " + a);
}
else if (b > a && b < c)
{
Console.WriteLine("środkowa liczba to " + b);
}
else if (c > a && c < b)
{
Console.WriteLine("środkowa liczba to " + c);
}
else if (b < a && b > c)
{
Console.WriteLine("środkowa liczba to " + b);
}
else if (c < a && c > b)
{
Console.WriteLine("środkowa liczba to " + c);
}
else if (a == b && b == c && a == c)
{
Console.WriteLine("Wszystkie liczby są takie same");
}
else if (a == c | b == c | a == b)
{
Console.WriteLine("dwie podane liczby są takie same");
}
Console.ReadKey();

2

Wrzuć liczby do tablicy i posortuj ją.

0
Patryk27 napisał(a):

Wrzuć liczby do tablicy i posortuj ją.

No dobra, wrzucam elementy do tablicy, sortuję. Jak teraz wyświetlić wartość środkową?

double[] liczby = new double[3];
Console.WriteLine("Podaj wartość a ");
liczby[0] = float.Parse(Console.ReadLine());
Console.WriteLine("Podaj wartość b ");
liczby[1] = float.Parse(Console.ReadLine());
Console.WriteLine("Podaj wartość c ");
liczby[2] = float.Parse(Console.ReadLine());
Array.Sort(liczby);
Console.ReadKey();

1
Console.WriteLine(liczby[1]); 
0

yyy... Console.WriteLine(liczby[1].ToString());

0

Super, działa ideolo. W między czasie piszę kolejny program który zamienia nam oceny 2.0, 4.0 itp na string. Mój pomysł to wrzucenie ocen słownych string (dostateczny, dobry) do tablicy, następnie wartość wpisaną (2.0) przyporządkować do odpowiedniego stringa w tablicy. Nie wiem jak przyporządkować zmienną a (w tym przypadku wartość 2.0,3.0) do odpowiedniej w tablicy.

string[] oceny = new string[6];
oceny[0] = "Niedostateczny";
oceny[1] = "Dostateczny";
oceny[2] = "+Dostateczny";
oceny[3] = "Dobry";
oceny[4] = "+Dobry";
oceny[5] = "Bardzo dobry";
double a;
Console.WriteLine("Podaj ocenę(Cyfra)");
a = float.Parse(Console.ReadLine());

1

uzyj Dictionary<key, value>

https://www.dotnetperls.com/dictionary

0
fasadin napisał(a):

uzyj Dictionary<key, value>

https://www.dotnetperls.com/dictionary

posłuchałem rady, użyłem dictionary, wyszło mi coś takiego:

Dictionary<string, double> oceny = new Dictionary<string, double>();
oceny.Add("Niedostateczny", 2);
oceny.Add("Dostateczny", 3);
oceny.Add("+Dostateczny", 3.5);
oceny.Add("Dobry", 4);
oceny.Add("+Dobry", 4.5);
oceny.Add("Bardzo dobry", 5);
double a;
Console.WriteLine("Podaj ocenę jako cyfrę");
a = float.Parse(Console.ReadLine());
Console.ReadKey();

Problem tkwi w tym - po wpisaniu wartości 'a', jak wyświetlić jego reprezentację z dictionary? Na podanej stronie niestety nie doszukałem się takiego kodu
3

Odwróć ten słownik (zamień miejscami klucze i wartości), ponieważ w Twoim przypadku najwyraźniej chcesz mapować ocenę na jej nazwę, a nie na odwrót.
Przy czym liczbami zmiennoprzecinkowymi należy posługiwać się niesamowicie ostrożnie, weź na to poprawkę.

2
var  oceny = new Dictionary<double,string>();
oceny[1.0] ="jeden";
oceny[3.0] ="trzy";
Console.WriteLine(oceny[3.0]);
Console.WriteLine(oceny[1.0]);
0

dzięki wielkie, zadziałało!

0

Swój przykład na zamianę ocen możesz też zrobić za pomocą typu wyliczeniowego Enum. W dodatku dla treningu możesz wprowadzić obsługę błędów Try / Catch gdy ktoś wprowadzi np. 0 .

 public enum Ocena
    {
        Niedostateczny = 1,
        Dopuszczający = 2, 
        Dst = 3,
        Db = 4,
        Bdb = 5,
        Cel = 6
    }

    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Podaj ocenę:");
            int ocena = Convert.ToInt16(Console.ReadLine());


            if (ocena == 1)
            {
                Console.WriteLine("Twoja ocena to {0}", Ocena.Niedostateczny);
            }
            else if (ocena == 2)
            {
                Console.WriteLine("Twoja ocena to {0}", Ocena.Dopuszczający);
            }

            Console.ReadLine();
        }
    }
1

@vai0 Czemu if'y? Nie ma czasem switcha? Nawet pętla była by lepsza. A najlepiej użyć słownika i ocena[int wprowadzona_ocena]; A jeszcze lepiej evaluation[int selectedEvaluation]

0

dzięki za wszelkie porady i pomysły, jest coś co mnie ciekawi. otóz w tym kodzie

Dictionary<string, double> oceny = new Dictionary<string, double>();
oceny.Add("Niedostateczny", 2);
oceny.Add("Dostateczny", 3);
oceny.Add("+Dostateczny", 3.5);
oceny.Add("Dobry", 4);
oceny.Add("+Dobry", 4.5);
oceny.Add("Bardzo dobry", 5);
double a;
Console.WriteLine("Podaj ocenę jako cyfrę");
a = float.Parse(Console.ReadLine());
Console.ReadKey();

Czy da się wtrącić tutaj przedziały liczb? Chodzi mi o np.
<code class="c#">
oceny.Add("niedostateczny",2.0-2.9);
0

Dawno nie byłem w szkole ale za moich czasów tylko całe oceny i połówki były, chodzi ci o zaokrąglanie ocen w przypadku liczenia średniej?

0
Wybitny Terrorysta napisał(a):

Dawno nie byłem w szkole ale za moich czasów tylko całe oceny i połówki były, chodzi ci o zaokrąglanie ocen w przypadku liczenia średniej?

no dokładnie, kiedy np średnia wychodzi 2.3 - żeby taką liczbę też przypisało do Niedostateczny.

0

Nie wprowadzaj użytkownika w błąd.

Console.WriteLine("Podaj ocenę jako cyfrę");

Program czeka na liczbę, nie na cyfrę.
Żadne słowniki nie ułatwią życia:

if(a <= 2.9)
    ocena = "niedostateczny";
else if(a <= 3.4)
    ocena = "dostateczny";
...
0
bogdans napisał(a):

Nie wprowadzaj użytkownika w błąd.

Console.WriteLine("Podaj ocenę jako cyfrę");

Program czeka na liczbę, nie na cyfrę.

Żadne słowniki nie ułatwią życia:

if(a <= 2.9)
    ocena = "niedostateczny";
else if(a <= 3.4)
    ocena = "dostateczny";
...

faktycznie, mój błąd z tą cyfrą. Co do ifów myślałem, że dictionary będzie lepszym, bardziej optymalnym sposobem na napisanie tego programu.

0

Dictionary jest sposobem bardziej eleganckim, ale zupełnie się nie nadaje gdy każda liczba może być oceną.

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