2017-11-17 1 views
-4

Ich versuche, eine Konsolenanwendung in C# zu schreiben, die die Anzahl der eindeutigen Blöcke zählt, durch die sich ein Roboter in einem Raster auf einer Etage bewegt. Die Eingabe nimmt Anweisungen für die Bewegung unter Verwendung der vier Kompasspunkte wie: N, E, SW an.C# Konsolenanwendungsgitterberechnung

Die Anwendung verarbeitet die Anzahl der Blöcke, durch die der Roboter einmal fährt, wenn die X-Koordinate und die Y-Koordinate von Der Weg des Roboters kann jederzeit kreuzen, dieser Block wird einmal und nicht zweimal gezählt. Wenn zum Beispiel der Roboter N4, 2E, 2S und 4W fährt, gibt es einen Schnittpunkt von x und y auf dem zweiten Block, den der Roboter zu Beginn seiner Bewegung zurückgelegt hat.

Dies ist, was ich bisher:

static void Main(string[] args) 
    { 

     //List<string> movements = new List<string>(); 

     int x1 = 0; 
     int y1 = 0; 

     int x2 = 0; 
     int y2 = 0; 

     int x3 = 0; 
     int y3 = 0; 

     int x4 = 0; 
     int y4 = 0; 



     int N, S, E, W, Total; 
     string coordinate1, coordinate2, coordinate3, coordinate4; 


     Console.Write("Enter North : "); 
     N = int.Parse(Console.ReadLine()); 

     if(N != 0) 
     { 
      x1 += 0; 
      y1 += N; 

     } 
     coordinate1 = "(" + x1 + "," + y1 + ")"; 








     Console.Write("Enter East: "); 
     E = int.Parse(Console.ReadLine()); 

     if (E != 0) 
     { 
      y3 += 0; 
      x3 += E; 

     } 
     coordinate3 = "(" + x3 + "," + y3 + ")"; 



     Console.Write("Enter South: "); 
     S = int.Parse(Console.ReadLine()); 

     if (S != 0) 
     { 
      x2 += 0; 
      y2 -= S; 

     } 

     coordinate2 = "(" + x2 + "," + y2 + ")"; 


     Console.Write("Enter West: "); 
     W = int.Parse(Console.ReadLine()); 

     if (W != 0) 
     { 
      y4 += 0; 
      x4 -= W; 

     } 
     coordinate4 = "(" + x4 + "," + y4 + ")"; 




     if (coordinate1 == coordinate2|| coordinate1== coordinate3 || coordinate1 == coordinate4 || coordinate2 == coordinate3 || coordinate2 == coordinate4 || coordinate3 ==coordinate4) 
     { 
      Total = (N + S + E + W) - 1 ; 
      Console.WriteLine("The total Blocks travelled are " + Total); 
     } 

     else 
     { 
      Total = N + S + E + W; 
      Console.WriteLine("The total Blocks travelled are " + Total); 
     } 



    } 
+2

Der beste Weg, dies zu erreichen ist, fragen Sie Ihren Lehrer oder TA. Niemand hier wird Code von Grund auf für Sie schreiben. Nicht wissen, wie viel Sie wissen, es ist schwer, Zeiger zu bieten – pm100

+1

@ pm100 Ich habe die Frage mit etwas von dem Code I'v abgeschlossen, konnte ich eine grundlegende Berechnung der Eingänge tun, ich bin mir nicht sicher, wie es geht Weiterleiten mit, wie ermittelt werden kann, ob zuvor ein Block übergeben wurde. –

+0

ist die Eingabe ("die Sequenz von Schritten, die der Roboter nimmt") eine willkürliche Liste von Bewegungen, z.B. 'N7 E2 S4 E9 N6 W14' oder, wie Ihr Code angibt, nur ein Offset in jeder der vier Richtungen? – HABO

Antwort

1

Sie es mit einfacher Mathematik tun. Und das ist ein einfacher Weg, wenn Sie mehr Komplexität möchten, kann ich es auch schreiben.

int N,S,E,W,Total; 
    Console.Write("Enter North : "); 
    N=int.Parse(Console.Readline()); 

    Console.Write("Enter South: "); 
    S=int.Parse(Console.Readline()); 

    Console.Write("Enter East: "); 

    E=int.Parse(Console.Readline()); 

    Console.Write("Enter West: "); 
    W=int.Parse(Console.Readline()); 

    if(N > S) 
     Total = N-S; 
    else 
     Total = S-N; 

    if(E > W) 
     Total += (E-W) 
    else 
     Total += (W-E) 

    Console.Write("Final Total Step are : "+Total); 
+1

[Math.Abs ​​() '] (https://docs.microsoft.com/en-us/dotnet/api/system.math.abs?view=netframework-4.7.1) würde die Dinge vereinfachen. – HABO

+1

aber Math.Abs ​​() kann nur 1 Parameter und diese Methode kann nicht mit mehreren Werten vergleichen –

+1

@KadirKalkan Vielen Dank für Ihre Hilfe Herr, leider funktioniert das nicht. Ich zum Beispiel den Roboter bewegt sich 4 Blöcke Norden, 2 Blöcke Ost, 2 Blöcke Süden und 4 Blöcke West, der Roboter hätte insgesamt 12 Blöcke bewegt, aber es hätte einen Block passiert, den es bereits durchlaufen hatte (X würde mit schneiden Y) und deshalb wäre die Anzahl der einzelnen Blöcke 11 –