Problem ze skojarzeniem zmiennej z tablicą

0

Cześć mam problem jak w temacie. pobieram z obiektu dane, rozdzielam na pół. Przykładowo jak jest A1 to chciałbym żeby A wybierało tablicę a i indeks 1 a jak jest B2 to żeby z tablicy b wybierało index 2. Zamieszczam kod niżej. Czy jest ktoś w stanie pomóc?

using System;

namespace zad3
{
    public class Prostokat
    {
        public double bokA { get; set; }
        public double bokB { get; set; }
        public double przekatna { get; set; }
        public double pole { get; }
        public double obwod { get; }
        public double pierwiastekZDwóch;
        string[] wymiaryA = { "841×1189", "594×841", "420×594", "297×420", "210×297", "148×210", "105×148", "74×105", "52×74", "37×52", "26×37"};
        string[] wymiaryB = { "1000×1414", "1000×1414", "500×707", "353×500", "250×353", "176×250", "125×176", "88×125", "62×88", "44×62", "31×44"};
        

        public Prostokat (double bokA, double bokB)
        {
            this.bokA = bokA;
            this.bokB = bokB;
            pole = bokA * bokB;
            obwod = 2 * bokA + 2 * bokB;

            Console.WriteLine("pole: " +pole+ " obdwod: " +obwod);
        }
        public Prostokat(string format)
        {
            //a = format[0];
            int indeks = format.IndexOf(' ');
            int  i = int.Parse(format.Substring(1,1));
            string a = format.Substring(0, 1);
                      
            Console.WriteLine("Format " + a + i + " ma wymiary " +wymiaryA[i]);

        }
       

}

    class Program
    {
        static void Main(string[] args)
        {
            Prostokat p1 = new Prostokat("A3");
            Prostokat p2 = new Prostokat("A2");
            Prostokat p3 = new Prostokat(10, 5);

            
            
        }
    }
}

0
Adam Ananiew napisał(a):

Cześć mam problem jak w temacie. pobieram z obiektu dane, rozdzielam na pół. Przykładowo jak jest A1 to chciałbym żeby A wybierało tablicę a i indeks 1 a jak jest B2 to żeby z tablicy b wybierało index 2. Zamieszczam kod niżej. Czy jest ktoś w stanie pomóc?

Mniemam, że jedziesz XY problem
https://en.wikipedia.org/wiki/XY_problem

Wymyśliłeś sobie, że w/w pseudo algorytm będzie potrzebny do rozwiązania celu jaki masz, i w to brniesz jak w bagno

Z kodu nie wynikają założenia, jak to ma działać *) ale

  • być może konstruktor z parametrem enum (A,B), stosowna tablica dwupoziomowa sterowana tym enumem, jakoś tak (jedna próba zrozumienia).
  • (druga próba zrozumienia) potrzebujesz tablicę struktur/klas (pole a, pole b)

*) w kodzie niemal wszystko budzi moją odpowiedź "nie"

0

Zdefiniować klasę Prostokąt, z następującymi elementami:
własności do odczytu i zapisu double bokA, bokB, i przekątna - modyfikując przekątną zachowujemy bokA i modyfikujemy bokB, modyfikując dowolny bok zawsze zachowujemy drugi i modyfikujemy przekątną
własności tylko do odczytu double pole i obwód
statycznymi polami tylko do odczytu
double pierwiastekZDwóch,
Dictionary<string, double> Stałe = {
[“pw2”] = Math.Sqrt(2),
[“1/pw2”] = Math.Sqrt(2) / 2,
[“pw3”] = Math.Sqrt(3),
[“1/pw3”] = Math.Sqrt(3) / 3,
[“fi”] = (1 + Math.Sqrt(5)) / 2,
[“1/fi”] = (1 + Math.Sqrt(5)) / 2 - 1
}
Dictionary<char, double> wysokośćArkuszaX0 = {
[‘A’] = 1189,
[‘B’] = 1414,
[‘C’] = 1297
}
dwoma konstruktorami
dwuargumentowy przyjmujący długości boków
jednoargumentowy, przyjmujący napis w jednym z dwóch formatów:
“Ai”, “Bi” lub “Ci”, np “A0”, “B1” “C2” - zgodnie z formatami arkusza papieru wg normy ISO 216 i ISO 269
Wykrywamy jaką literą zaczyna się napis, po czym wybieramy odpowiednią wysokość arkusza
Wyciągamy numer i w szeregu
Obliczamy wymiary jako
bokA = wysokość / Math.Pow(pierwiastekZDwóch, i),
bokB = bokA / pierwiastekZDwóch
“bokA x bokB”, np “2 x 4”, “2.51 x 1.34”, “1 fi x 2”, “2 pw2 x 3 fi”
rozbijamy napis wejściowy względem “ x ” (z obejmującymi spacjami)
z pierwszej części robimy bokA, a z drugiej bokB,
dla każdej rozbijamy względem spacji i sprawdzamy, czy jest tylko jedna część (liczba) czy dwie (liczba i znacznik stałej”)

  • w drugim wypadku długość boku mnożymy przez odpowiednią stałą ze statycznego słownika
0

Nadal totalnie nie wiem, co jest zadaniem, a co Twoim mniemaniem, ze tak trzeba kod napisać.

Implementacja rozmiaru arkusza jako string jest najsłabsza z możliwych. To powinno być w rodzaju (pisane bez IDE).
kolejnośc jest zła, element 0 ma być największy, potem jego połówki, bo tak idą arkusze w przemyśle papierniczym

public struct RozmiarArkusza {
    readonly double x,y;
   }

puiblic enum Arkusze { A, B, C };
static private readonly RozmiarArkusza rozmiaryA [] = { { 841, 1189 }, { 594, 841 }, .... // kolejność zła
static private readonly RozmiarArkusza rozmiaryB [] = { { ,  }, { ,  }, .... 
static private readonly RozmiarArkusza rozmiaryC [] = { { ,  },  .... 

public readonly Dictionary<Arkusze,  RozmiarArkusza []>  wszystko = new Dictionary<Arkusze,  RozmiarArkusza []>  ();
wszystko[ Arkusze.A ] = rozmiaryA ;
wszystko[ Arkusze.B ] = rozmiaryB ;
wszystko[ Arkusze.c ] = rozmiaryC ;


Gdzieś w kodzie masz pozyskany string, który może być "A", albo "B" albo "C" oraz liczbę nr 0 lub więcej

Arkusze ark = (Arkusze)  Enum.Parse(typeof(Arkusze ), str, true); 
RozmiarArkusza  tenRozmiar = wszystko[ ark ][ nr ]


Tak więc masz wędkę, rybe łap sam.

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