Seite 1 von 2

Position in Plateau(Console Application)

Verfasst: Sa Jan 06, 2018 8:21 pm
von DerSamu
Ich muss ein Programm schreiben, in dem der User eine Zahl eingibt und diese dann nach dem längsten Plateau geprüft wird. (Plateau=wenn mehrere gleiche Ziffern nacheinander gleich sind also in 1113546 zb die 3 1er.)
Zudem muss ich dazu die Länge des Plateaus angeben, und die Position, an der das Plateau startet, also ganz links ist die Position 0. (bei meinem vorher angegeben Beispiel wäre die Länge also 3 und die Position 0).
Mein Lösungsversuch:

Code: Alles auswählen

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

namespace Plateau
{
    class Program
    {
        static void Main(string[] args)
        {
            long[] digits;
            long number;
            string userInput;
            int counter=0;
            long maxPlateau=0;
            int length=0;
            int position=0;
            long plateauDigit;
            long startPosition=0;

            Console.WriteLine("Erechnen des längsten Plateaus einer Zahl");
            Console.WriteLine("=========================================");
            Console.WriteLine();
            Console.Write("Bitte geben Sie eine zahl im Wertebereich von long ein: ");
            userInput = Console.ReadLine();
            number = Convert.ToInt64(userInput);
            while (number > 0)
            {
                number /= 10;
                counter++;
            }
            number = Convert.ToInt64(userInput);
            digits = new long[counter];
            while (number > 0)
            {
                digits[counter - 1] = number % 10;
                
                number /= 10;
                counter--;
            }
            plateauDigit = digits[0];
            for (int i = 0; i < digits.Length; i++)
            {
                
                if (i > 0)
                {
                    if (digits[i] == digits[i - 1])
                    {
                        length++;
                        plateauDigit = digits[i];
                        
                    }
                    else
                    {
                        length = 0;
                    }
                }
                           
                if (length > maxPlateau)
                {
                    maxPlateau = length;
                    if (false!=!(false))
                    {
                        startPosition = position;
                    }
                    
                }
                position++;
            }
            if (userInput!="0")
            {
                maxPlateau += 1;
                Console.WriteLine($"Die Länge des längsten Plateaus in der Zahl {userInput} beträgt {maxPlateau}, die Position an der das Plateau startet, ist {position} und die Ziffer, welche das Plateau hat ist {plateauDigit}. ");
            }
            Console.ReadKey();
        }
    }
}
Zurzeit funktioniert nur die Position ist, mir ist auch klar warum, weil die Position ja immer hochgezählt wird. Wie kann ich die Position jetzt in einer extra Variable speichern?
LG ;)

Re: Position in Plateau(Console Application)

Verfasst: Sa Jan 06, 2018 10:04 pm
von Xin
DerSamu hat geschrieben:Ich muss ein Programm schreiben,
...

Zurzeit funktioniert nur die Position ist, mir ist auch klar warum, weil die Position ja immer hochgezählt wird. Wie kann ich die Position jetzt in einer extra Variable speichern?
LG ;)
Zwei Hinweise: Erstens: Du beginnst mit den Worten 'Ich muss ein Programm schreiben' - woraus ich folgere, dass Du dabei etwas lernen sollst, also auch selbst denken musst.
Zweitens: Deine Frage ist vermutlich nicht die Frage, die Du stellen solltest. Aber ich beantworte sie gerne: Du legst eine extra Variable an und schreibst die Position da rein.

Die interessantere Frage ist: Wann?

Das ist als Bedingung jedenfalls fragwürdig.

Code: Alles auswählen

                    if (false!=!(false))
                    {
                        startPosition = position;
                    }
[code]

und das
[code]
            if (length > maxPlateau)
um anschließend die Startposition neu zu setzen scheint mir auch fraglich... denn je länger das Plateau, desto später die Startposition? Das steht doch da? Ich dachte, die Startposition fängt am Start an ^^
Und da kommt wir zu dem Punkt, wo Du selbst denken solltest...

Ich denke, Du kannst Dein Programm deutlich vereinfachen, wenn Du einfach den String als Array durchgehst.

Re: Position in Plateau(Console Application)

Verfasst: Sa Jan 06, 2018 10:24 pm
von DerSamu
Oh, sorry. Dieses unnötige if ist natürlich nicht wirklich gewollt, das habe ich gestern aus langeweile reingemacht, warum auch immer.
Und ja, den String als array durchdenken hätte ich mir schon überlegt, aber unser Lehrer verbietet es uns, warum weiß ich nicht.
Die startPosition soll dafür stehen, wann das Plateau anfängt. Und die Anweisung startPosition= position stand ursprünglich in

Code: Alles auswählen

 if (digits[i] == digits[i - 1])
                    {
                        length++;
                        plateauDigit = digits[i];
                       
                    }
was natürlich nicht funktionierte, weil die startPosition dann immer die letzte Position im Plateau war.

Re: Position in Plateau(Console Application)

Verfasst: Sa Jan 06, 2018 10:50 pm
von Xin
Okay... weiterdenken...

Wenn die Zahl gleich bleibt, dann stand da ursprünglich, dass sich die Startposition ändert.

Ich denke, der wichtigste Kinken in Deiner Denke ist, dass Du noch nichts schrieben hast, wieviele Startpositionen es eigentlich in Deinem Problem gibt... ^^

Re: Position in Plateau(Console Application)

Verfasst: So Jan 07, 2018 4:50 pm
von mfro
Hast Du dein anderes Progrämmchen (das, dass Du in https://www.proggen.org/forum/viewtopic.php?f=54&t=6769 andiskutiert, aber keine Lösung präsentiert hast) zum Funktionieren gebracht?

Schau' dir das nochmal an und vergleiche die Problematik. Wenn Du die dort richtig gelöst hast, kannst Du für das Problem hier 90% weiterverwenden.

Re: Position in Plateau(Console Application)

Verfasst: So Jan 07, 2018 9:17 pm
von DerSamu
Wenn Du die dort richtig gelöst hast, kannst Du für das Problem hier 90% weiterverwenden.
Ja, habe ich auch so gemacht. Wie gesagt, die Position funktioniert ja auch- nur das Speichern der Position klappt nicht, und mir fällt einfach nicht ein wie ich das machen könnte.

Re: Position in Plateau(Console Application)

Verfasst: So Jan 07, 2018 9:45 pm
von Xin
DerSamu hat geschrieben:
Wenn Du die dort richtig gelöst hast, kannst Du für das Problem hier 90% weiterverwenden.
Ja, habe ich auch so gemacht. Wie gesagt, die Position funktioniert ja auch- nur das Speichern der Position klappt nicht, und mir fällt einfach nicht ein wie ich das machen könnte.
Welcher Position? Der Startposition des aktuellen oder der Startposition des längsten Plateau?

Re: Position in Plateau(Console Application)

Verfasst: So Jan 07, 2018 10:10 pm
von DasSamu
Des längsten Plateaus.

Re: Position in Plateau(Console Application)

Verfasst: So Jan 07, 2018 11:07 pm
von Xin
DasSamu hat geschrieben:Des längsten Plateaus.
Und wo speicherst Du das?
Bzw. wo speicherst Du den Beginn des gerade durchlaufenden Plateaus?

Re: Position in Plateau(Console Application)

Verfasst: Mo Jan 08, 2018 8:49 am
von mfro
DerSamu hat geschrieben:
Wenn Du die dort richtig gelöst hast, kannst Du für das Problem hier 90% weiterverwenden.
Ja, habe ich auch so gemacht. Wie gesagt, die Position funktioniert ja auch- nur das Speichern der Position klappt nicht, und mir fällt einfach nicht ein wie ich das machen könnte.
Wenn Du die andere Aufgabe richtig gelöst hast (warum zeigst Du uns die denn nicht im anderen Thread?), hast Du Code, mit dem Du feststellen kannst, ob eine Ziffer in der Zahl an einer bestimmten Position steht.

In dieser Aufgabe hier geht es (zusätzlich) nur darum festzustellen, ob sich diese Ziffer auch links und/oder rechts davon befindet und sich den längsten "Run" (Anfang, Ende, Ziffer) zu merken. Wenn Du das in einer Schleife für alle möglichen Ziffern (0-9) machst, bist Du fertig.