Laden...

Forenbeiträge von Carl17 Ingesamt 7 Beiträge

21.06.2022 - 02:16 Uhr

Hier das Programm:

Zahlen in TextBox eingeben, mit Enter bestätigen und das Diagramm zeigt in Echtzeit welche Zahlen und wie oft sie eingegeben wurden.  
  
über TextBox werden Zahlen in Listen geschrieben. Nacheinander.   
Dann kommt das eigentliche Algorithmus (nicht von mir. Rest ist von mir) ins Spiel. Es ermittelt, ob die eingegebene Zahl schon eingegeben wurde, wenn ja wie oft.  
   

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;

namespace Diagramm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       
        List<double> zahlenList = new List<double>();
        private void textBoxEingabeZahlen_KeyUp(object sender, KeyEventArgs e)
        {        
            if ((e.KeyCode == Keys.Enter) & (textBoxEingabeZahlen.Text != String.Empty))
           {
                chart1.Series[0].Points.Clear();
                zahlenList.Add(Convert.ToDouble(textBoxEingabeZahlen.Text));
                double[] haufigkeit = new double[zahlenList.Count];
                textBoxEingabeZahlen.Text = String.Empty;

                for (int i = 0; i < zahlenList.Count; i++)
                {
                    haufigkeit[i] = -1;
                }

                for (int s = 0; s < zahlenList.Count; s++)
                {
                    int zaehler = 1;
                    for (int m = s + 1; m < zahlenList.Count; m++)
                    {
                        if (zahlenList[s] == zahlenList[m])
                        {
                            zaehler++;
                            haufigkeit[m] = 0;
                        }
                    }

                    if (haufigkeit[s] != 0)
                    {
                        haufigkeit[s] = zaehler;
                    }
                }
                for (int x = 0; x < zahlenList.Count; x++)
                {
                    if (haufigkeit[x] != 0)
                    {
                        chart1.Series[0].Points.AddXY(Convert.ToString(zahlenList[x]), Convert.ToString(haufigkeit[x]));
                    }
                }
            }
        }
    }
}


21.06.2022 - 02:06 Uhr

Hallo zusammen,

Weil ich dann einfach nicht glauben wollte, dass so ein kleines Programm solche schwer sein kann, konnte ich nicht aufgeben.
Ich hab das Programm endlich fertig programmiert. Das passende Algorithmus in einem US-Forum gefunden. Ich hab das an meine Aufgabenstellung
angepasst und auch erweitert. Man kann jetzt nicht nur 5 Zahlen eingeben sondern sehr viele. Ob ich das elegant und technisch korrekt gemacht habe,
weiss ich nicht. Aber das Program tut was es tun soll. Den Code werde ich später posten,
Und nicht nur weil das in den Forumsregeln steht (danke an Alf 😉 ) sondern damit andere Leute was davon haben. Das soll nicht heissen,
dass ich die Forumsregeln nicht Respektire oder so…
Und natürlich würde ich mich auf eure Kommentare Verbesserungsvorschläge freuen.

@Wilfried:  
Vielen Dank! Ja, vermutlich geht das in die richtige Richtung. Sieht interessant aus. Aber ob das so funktionieren würde? Und das ist für mich wieder nur ein Hinweis mit dem ich  
Leider nicht viel anfangen kann.  Kannst du vielleicht genauer sagen, wie die XY-Werte dem Diagramm übergeben werden können? Und zwar alles in Echtzeit.  
Ich gebe Zahlen ein und das Diagramm zeigt in Echtzeit welche Zahlen und wie oft eingeben wurden.  
  
@Alf:  
Für die Hinweise bin ich dankbar. Aber ich sag mal so, ich habe nicht nach Links gefragt damit ich mich selber schlau machen kann. Ich habe schon davor ziemlich lange recherchiert.  
Ich wollte von einem  
erfahrenen Entwickler wissen wie man an die Sache rangehen soll. Mit welchem Algorithmus kann man das realisieren. Es ist mir klar, dass man keine fertige Lösung  
erwarten soll und dass Leute keine Lust haben hier lange Codes zu generieren. Aber bei kleinen Programmen/Aufgabestellungen kann man doch etwas genauer  
auf den Code eingehen. Es ist nicht das Erste Mal, dass ich ein paar Codezeilen und ein paar Links bekommen habe, die mein Problem nicht lösten.   
Weil…, Forumsregeln, es wird niemandem was geschenkt, Eigeninitiative, keine Lust zu schreiben und zu Coden aber hier paar links , ich habe die Lösung aber ich geb sie dir nicht usw…           (nicht böse gemeint)   
Das finde ich irgendwie schade. Wir haben in Deutschland so viele Ingenieure, starke Wirtschaft Industrie… da kann man doch etwas mehr Action erwarten 🙂  
Die anderen rennen nach vorne und wir sitzen gemütlich und hängen an unseren didaktischen Prinzipien. So empfinde ich das zumindest 🙂 Aber nichts gegen die Forumsregeln,  
Regeln sind Regeln…  
@TH69:  
Ich kann mir immer noch mit dem besten Willen nicht vorstellen wie du mit deinen Vorschlägen, die du gepostet hast, das Programm zum Laufen bringen kannst.  
Wenn du mal Lust und Zeit hast, wäre es cool wenn du deine Lösung mal zeigen würdest. Vielleicht nicht so spannend für dich aber trotzdem..   
Das würde mich interessieren.
19.06.2022 - 20:57 Uhr

Hi Th69,
ich danke dir für die Tipps und Hinweise, aber das hilft mir nicht weiter. Ich kann dass ganze nicht zusammensetzen...
Dachte, dass hier ein erfahrener Programmierer so ein einfaches Programm in ein paar Minuten erklären könnte.... schein dann doch nicht so einfach zu sein...
Und weil ich schon damit einige Stunden verbracht habe und immer noch kein Erfolg, will ich nicht mehr Zeit verschwenden. Ist echt frustrierend...
Aber danke trotzdem.

19.06.2022 - 19:11 Uhr

Also, ich habe DataSet als eine manuelle Lösung ausprobiert, nur um das Diagramm zu testen. Das funktioniert aber das ist nicht das was ich wollte. So vorgegangen
- DataSet hinzufügen und eine Tabelle erstellen: eine Spalte mit 2 Zellen ( Range, RangeValue)
- Auf die Benutzeroberfläche DataGridView einfügen
- über DataGridView-Aufgaben Menü DataSet als Datenquelle zugewiesen
- DataMember-Eigenschaft der automatischerzeugten BindingSource geändert (Name der DataSet-Tabelle)
- chart einfügen
- Series - Samlmlung
Name -> Range; XValueMember ->Range; YValueMambers -> RangeValue
Zum Chart Aktualisieren:


Private void dataSet1BindingSource_ListChanged(object sender, ListChangedEventArgs e)
{
	chart1.DataBind();
}

In die erste Spalte Range kann ich Zahlen 1 -5 eintragen, in die zweite RangeValue beliebige Werte.
Das funktioniert, aber wie gesagt ich will alles über eine TextBox realisieren. Das Programm soll selber ermitteln welche Zahlen und wie oft eingeben wurden.
Ins DataGridView so reingeschrieben:
dataGridView1.Rows[0].Cells[0].Value = textBox.Tex;
Werte werden zwar reingeschrieben aber das Diagramm wird nicht Aktualisiert. Man muss dafür manuell ins DataGridView klicken.

Ich habe auch Folgendes versucht aber ohne Erfolg:


chart1.Series[0].Points.AddXY(range, counter);

Also..., ich stehe grad echt auf dem Schlauch....

19.06.2022 - 14:17 Uhr

Vielen Dank für die Tipps!
das alles kenne ich schon. Inhalt der Textbox kann ich auch löschen.
Ich hab irgendwie trotzdem keine Ahnung wie ich programmiertechnisch die Werte erhöhen kann.
Das Diagramm muss man doch nach jeder Eingabe updaten und die alten Werte zwischenspeichern...

19.06.2022 - 12:12 Uhr

Wenn ich ehrlich bin, weis ich nicht wie ich an die Sache rangehen soll.
Ich denke das Problem liegt beim Verstehen und Implementieren des Algorithmus.
Ich weiss wie man auf Inhalt der Textbox zugreift und wie die ins Diagramm übertragen werden.
Aber bei der Aufgabe muss man vermutlich Iterationen anwenden....?
Ich überlege mir grade, ob die eingegebenen Zahlen zuerst in ein dynamisches Array oder List reinkopiert werden sollen, dann durchsuchen, sortieren nach Häufigkeit und das alles dann ins Diagramm...
Wahrscheinlich denke ich zu kompliziert... 🙂

19.06.2022 - 10:33 Uhr

Hallo zusammen,

Bin neu hier. Vielleicht könnt ihr mir helfen.
Ich versuche in WinForms ein Häufigkeitsdiagramm zu implementieren.
Und Zwar:
Auf der Benutzeroberfläche: Textbox und Chart (Balkendiagramm)
In die Textbox gebe ich Zahlen ein (1 - 5) und das Diagramm soll zeigen wie oft die Zahlen von 1- 5 eigegeben wurden und zwar in Echtzeit.

Zum Beispiel:
ich gebe 5 ein -> bestätige mit Enter -> Im Diagramm Balken Nr. 5 geht auf 1.
Gebe ich wieder 5 ein -> Enter -> Balken Nr. 5 geht auf 2 (erhöht sich um 1)
Gebe ich 2 ein -> Enter -> Balken Nr. 2 geht auf 1.
Usw…
Wenn Enter gedrückt wird, soll die Zahl im Textbox gelöscht werden.

Wie kann man das machen?

Viel Grüsse