Position in Plateau(Console Application)

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Position in Plateau(Console Application)

Beitrag von DerSamu » Sa Jan 06, 2018 8:21 pm

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 ;)
lernender Programmierer, hauptsächlich C# und Java

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Position in Plateau(Console Application)

Beitrag von Xin » Sa Jan 06, 2018 10:04 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Re: Position in Plateau(Console Application)

Beitrag von DerSamu » Sa Jan 06, 2018 10:24 pm

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.
lernender Programmierer, hauptsächlich C# und Java

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Position in Plateau(Console Application)

Beitrag von Xin » Sa Jan 06, 2018 10:50 pm

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... ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mfro
Beiträge: 339
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Position in Plateau(Console Application)

Beitrag von mfro » So Jan 07, 2018 4:50 pm

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Re: Position in Plateau(Console Application)

Beitrag von DerSamu » So Jan 07, 2018 9:17 pm

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.
lernender Programmierer, hauptsächlich C# und Java

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Position in Plateau(Console Application)

Beitrag von Xin » So Jan 07, 2018 9:45 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DasSamu
Beiträge: 7
Registriert: Mi Dez 20, 2017 9:26 pm

Re: Position in Plateau(Console Application)

Beitrag von DasSamu » So Jan 07, 2018 10:10 pm

Des längsten Plateaus.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8721
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Position in Plateau(Console Application)

Beitrag von Xin » So Jan 07, 2018 11:07 pm

DasSamu hat geschrieben:Des längsten Plateaus.
Und wo speicherst Du das?
Bzw. wo speicherst Du den Beginn des gerade durchlaufenden Plateaus?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mfro
Beiträge: 339
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Position in Plateau(Console Application)

Beitrag von mfro » Mo Jan 08, 2018 8:49 am

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Antworten