AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array timer, stringgrid hilft mir

Ein Thema von Feuerwehrmann90 · begonnen am 1. Dez 2007 · letzter Beitrag vom 7. Dez 2007
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
Feuerwehrmann90

Registriert seit: 1. Dez 2007
Ort: Wallerfangen
71 Beiträge
 
Delphi 6 Personal
 
#1

Array timer, stringgrid hilft mir

  Alt 1. Dez 2007, 16:24
Hallo Zusammen,

ich war in den letzten Informatikstunden auf Einstellungstest und hänge somit ein gutes Stück hinter den andern,
Und zu meiem Entsetzen schreiben wir Montag eine Arbeit und was kann ich? NICHTS!!!

deshalb brauch ich dringens eure hilfe

die Arbeit besteht aus

Timer
Arrays
StringGrid
Schleifen
manipulation von Zeichenketten

sie soll auf dem Nieveau wie folgt aufgebaut sein ...


1.Ein von Ihnen geschriebenes Programm nimmt die Temperaturen auf, die in einem Kühlhaus gemessen werden. Es sollen lediglich die letzten 60 Messwerte in einem dafür geeigneten Array gespeichert und in einem StringGrid angezeigt werden. Die Messwerte liegen im Bereich von -25,00 bis -15,00 Grad Celsius und sollen durch die Generierung von Zufallszahlen simuliert werden (2 Stellen hinter dem Komma genau). Pro Sekunde soll ein Messwert generiert, in einem Array abgespeichert und in einem StringGrid angezeigt werden d.h. pro Sekunde erhöht sich die Zeilenanzahl des StringGrids um 1. Sind 60 Messwerte aufgenommen und angezeigt, beginnt das StringGrid wieder mit der ersten Zeile. In der nachfolgenden Abbildung wurden 8 Messwerte in einer Zeitspanne von 8 Sekunden aufgenommen. In der ersten Spalte des StringGrids wird die Messwertnummer (Werte von 1 bis 60) angezeigt, in der zweiten aktuelles Datum und aktuelle Uhrzeit und in der dritten Spalte der Messwert.

Nach jedem Hinzufügen eines Messwertes werden Minimum, Maximum und Mittelwert der bisher aufgenommenen Messwerte aktualisiert (siehe Abbildung). Der Mittelwert soll auf 2 Stellen hinter dem Komma gerundet werden.

Mit den Schaltern „Überwachung starten“ bzw. „Überwachung stoppen“ kann die Aufnahme der Messwerte gestartet bzw. gestoppt werden.


ich könnt grad
Miniaturansicht angehängter Grafiken
unbenannt_704.jpg  
Mathias
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#2

Re: Array timer, stringgrid hilft mir

  Alt 1. Dez 2007, 16:48
Und wo ist das Problem? Wünschst du dir etwa, dass dir jemand hier deine "Hausaufgaben" macht und dir so ein Programm schreibt?

Im Grunde starten und stoppen die beiden Buttons einen TTimer (1000ms Intervall), welcher im "OnTimer"-Event einfach 'ne Zeile an das TStringGrid hängt. Die Delphi-Hilfe sollte dir auch zeigen wie das alles geht, wenn du nach den Stichworten suchst.

Alle Stichworte, mit denen du die Foren-Suche, Delphi-Hilfe und Google bedienen kannst, hast du doch selber schon genannt.
  Mit Zitat antworten Zitat
Benutzerbild von Opa
Opa

Registriert seit: 12. Jun 2003
107 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 09:07
Nicht lernen
Mfg.
  Mit Zitat antworten Zitat
Feuerwehrmann90

Registriert seit: 1. Dez 2007
Ort: Wallerfangen
71 Beiträge
 
Delphi 6 Personal
 
#4

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 12:27
opa auf solche kommentare kann ich echt verzichten,
NEIN es soll mir keine meine Hausuafgaben machen so soll unsere Arbeit aussehn und ich weiß echt nicht wie ich anfangen soll
da ich durch die scheiß EInstelungstest nur noch Bahnhof verstehe
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 12:37
Fang doch damit an, Dir Gedanken darüber zu machen, wie das Array auszusehen hat. Mir fallen da ganz spontan 2 Möglichkeiten ein:
1. ein dynamisches Array, bei dem Du halt die Länge auf 60 überprüfen musst.
2. ein statisches Array of record. Der Record enthält den Messwert sowie eine Kennung, ob dieser Wert gemessen wurde.

Bei weiteren Schwierigkeiten bitte den bisherigen Quellcode posten und konkrete Fragen stellen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DGS

Registriert seit: 10. Jul 2004
65 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 12:39
Ich werde dir ned die Aufgabe machen, sondern dir mal paar Tipps geben, damit du auch selbst siehst, wie man es macht:

Als erstes, jede Sekunde ein Messwert ->
du brauchst einen Timer. stelle Intervall auf 1sekunde ( = 1000 ms )
Im OnTimer ereignis wirst jetzt eine Funktion schreiben.

Schauen wir uns dann mal die Beschränkung auf 60 Einträge an.
Die werden zyklisch geschrieben.
d.h. du brauchst ne globale Variable, die dir sagt, in welche Zelle du schreiben kannst. Wir nehmen am besten dazu Index der Zelle. d.h. wir intialisieren im onCreate diese Variable mit 1. Nennen wir sie J.

Jedesmal, wenn du Datensatz schreibst ( also im OnTimerEvent ), musst halt folgende Dinge machen:
Datensatz generieren
Datensatz in Tabelle schreiben, dabei achten, ob Zeilen genug.
J inkrementieren und auf Grenze "60" achten.
Min/Max/Durchscnitt beachten

Punkt Datensatz generieren.
Der Zufallsgenerator muss zwischen -15,00 und -25,00 was berechnen. zwei Stellen genau.
d.h. du brauchst ein random(1000).
Genauer gesagt ist deine Temperatur: random(1000)/100-25;

In Tabelle schreiben dürfte ned schwer werden. Schaust halt, ob J>= Stringgrid.rowcount. Falls ja, fügst neue Zeile hinzu.

J inkrementieren...
... J := J+1 oder Inc(J);
Die 60er Grenze muss beachtet werden. Da wir bei 1 anfangen ist letzter gültige Wert die 60.
Machst einfach ne Zeile rein:
if J > 60 then J := J -60;

Min/Max/Durchschnitt
Gehst am besten jedesmal alle 60 Zeilen durc, dabei zwei variablen, die sich max/min wert merken.
auf dritte summierst alle Werte und teilst am Ende durch 60.


Nun aufnahme starten/stoppen.
Einfach Timer.Enabled := true/false;

Hoffe, du hats Vorstellung bekommen, was und wie du programmieren solltest.
Vorschläge für sinnvolle Signatur bitter per PN
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 13:21
ich gebe jetzt auch nochma meinen senf dazu
wobei ich einen leicht anderen lösungsweg gehen würde.
ich würde die messwerte in einem array speichern und nur zur ausgabe in das stringgrid schreiben.
erstens is das (meiner meinung nach) bequemer und zweitens steht in der aufgabenstellung ja auch, dass ihr arrays verwenden sollt.

du kannst einen globalen array von fließkomma werten erstellen und dort dort die messwerte dann später speichern.
Messwerte: array of Double; im ontimer event vom timer spielt sich dann alles ab (die beiden knöppe stellen timer.enabled nur auf true bzw false - an/aus).

hier prüfst du halt ob du schon 60 messwerte hast. dann mußt du ja von vorne anfangen (soweit ich das verstanden hab).
wenn du 60 werte erreicht hast setzt du einfach die größe vom array auf 0. dadurch sind dann alle alten messwerte weg.
Delphi-Quellcode:
  if length(Messwerte) >= 60 then
  begin
    setlength(Messwerte, 0);
    ...
  end;
hier sollte man dann evtl noch die zeilen anzahl des stringgrids wieder zurücksetzen (sieht vll besser aus ^^).

danach holst du dir einen messwert vom zufallsgenerator
Delphi-Quellcode:
  randomize; //zufallsgenerator initialisieren
  messwert := RandomRange(-1500, -2500) / 100;
hierdurch erhälst du messwerte im bereich von -25 bis -15 (der zufalls generator gibt eine ganzzahl zwischen -1500 und -2500 aus z.B. -1813. diese wird dann durch 100 geteilt. so bekommste dann z.B. -18,13).

dann erweiterst du deinen messwerte array um ein element(mit setlength) und speicherst in dem neuen feld deinen aktuellen messwert
Delphi-Quellcode:
  setlength(Messwerte, length(Messwerte)+1);
  Messwerte[high(Messwerte)] := messwert;
high(Messwerte) gibt das höchste element (in diesem fall das neu angefügte) des arrays an.
length(Messwerte) gibt die gesamt länge an. da dynamische arrays von 0 zu zählen beginnen ergibt bei einem array mit z.B. 20 element
length(Messwerte) = 20, jedoch high(Messwerte) = 19

dann erweiterst du dein stringgrid um eine reihe und schreibst deinen messwert in die entsprechende celle.
das aktuelle datum kriegst du so
DateTimeToStr(now); da du das ganze nun in einem array hast kannste bequem fertige delphi funktionen benutzen um das minimum/maximum zu ermitteln.
Delphi-Quellcode:
  minimum := MinValue(Messwerte);
  maximum := MaxValue(Messwerte);
nur den durchschnitt mußte meines wissens von hand ausrechnen.
du läufst einfach in einer schleife deinen array durch (von 0 bis high(Messwerte)) addierst da alle werte.
danach teilst du diese summe durch die anzahl messwerte (length(Messwerte))

danach kannste dann einfach die werte in die 3 editboxen speichern
Delphi-Quellcode:
  edit1.Text := FloatToStr(minimum);
  edit2.Text := FloatToStr(maximum);
  edit3.Text := FloatToStr(durchschnitt);
die beschriftung von dem stringgrid wirste ja wohl hinkriegen, ne?
als hilfe: Stringgrid1.Cells[spaltenindex, zeilenindex] := 'Ein String';
  Mit Zitat antworten Zitat
DGS

Registriert seit: 10. Jul 2004
65 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 13:55
OK, das mit Array hab ich mir gespart gehabt. Mein Fehler.

Nur:
In deiner Methode löschst du die Messwerte, sobald man 60 hat.
Ich glaube, man sollte nicht alle löschen, sondern den ältesten drch neuen ersetzen, damit man nach einer Minute stets 60 Messwerte hat. Und halt für die letzte Minute Art Statistik hat mit Min, Max und Durchschnitt.

ich würde da halt ein statisches Array der Länge 60 nehmen und ne index variable, die man im kreis laufen lässt.

*edit:

Als Tipp für Beschriftung des Stringgrid und einfügen der Messwerte:
FloatToStrF
( achte auf das letzte F. die Delphi Doku hilft dann mit den Parametern )
Vorschläge für sinnvolle Signatur bitter per PN
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 14:11
Zitat von DGS:
Punkt Datensatz generieren.
Der Zufallsgenerator muss zwischen -15,00 und -25,00 was berechnen. zwei Stellen genau.
d.h. du brauchst ein random(1000).
Genauer gesagt ist deine Temperatur: random(1000)/100-25;
Besser 1001 - sonst kann es nie einen Wert -15.00 geben
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#10

Re: Array timer, stringgrid hilft mir

  Alt 2. Dez 2007, 14:42
Zitat von DGS:
OK, das mit Array hab ich mir gespart gehabt. Mein Fehler.

Nur:
In deiner Methode löschst du die Messwerte, sobald man 60 hat.
Ich glaube, man sollte nicht alle löschen, sondern den ältesten drch neuen ersetzen, damit man nach einer Minute stets 60 Messwerte hat. Und halt für die letzte Minute Art Statistik hat mit Min, Max und Durchschnitt.

ich würde da halt ein statisches Array der Länge 60 nehmen und ne index variable, die man im kreis laufen lässt.
jo, dann hast du recht. dann würde ich auch n statischen array nehmen mit ner index-variable. dachteh alt er soll nach 60 werten nochma von vorne los rattern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz