Hilfe für ein Projekt

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
maschbau61
Beiträge: 18
Registriert: Di 9. Okt 2012, 15:47

Hilfe für ein Projekt

Beitrag von maschbau61 »

Hallo Liebe Leute,

ich muss für die Uni ein Programm schreiben welches den EInschaltvorgang einer Glühbirne simuliert. Ich komme eigentlich auch gut zurecht (mit meinem bücher und Tutorial wissen) nur habe ich zwei probleme:
1.ich wollte dass der Benutzer das Material eingibt und das Programm dann der Eingabe entsprechend die Konstanten als spezifischen Wiederstand speichert damit ich damit weiter rechnen kann jedoch klappt es irgendwie nicht....gib es vllt eine Regel die ich vergesse?
2. Das Programm muss am ende einen Graphen zeichnen...soweit ich das richtig gelesen habe geht das nicht mit Free Pascal wie kann ich es dann trotzdem machen? muss ich es mit einem anderen Programm koppeln?

hier ist das bis jetzt geschriebene Programm (bestimmt findet ihr das jetzt ziemlich billig aber ist das erste richtige Programm das ich schreibe)

Code: Alles auswählen

program einschalt1;
 
uses    Crt;
 
CONST   silber = 0.016;
        wolfram = 0.0528;
        kupfer = 0.017;
        Alu = 0.03;
 
VAR     T,V,l,d,P,SW: Integer;
        Material: Extended;
 
begin
  Writeln ('Dieses Programm simuliert das Einschaltverhalten einer Gluehbirne.');
  readln;
  Writeln ('Um die Simulation zu starten, werden zunaechst einige Informationen benoetigt.');
  readln;
 
  Write ('Welche Temperatur herrscht gegenwaertig vor? [in Grad Celsius] ');
  readln (T);
  Write ('Wie gross ist die angelegte Spannung? [in Volt] ');
  readln (V);
  Write ('Welche Leistung hat die Gluehbirne? [in Watt] ');
  readln (P);
  Write ('Wie Lang ist der in der Gluehbirne verbaute Gluehdraht? [in mm] ');
  readln (l);
  Write ('Welchen Durchmesser weisst der Gluehdraht auf? [in mm] ');
  readln (d);
 
  Writeln ('Aus welchem Material besteht der Gluehdraht?');
  writeln ('Bitte waehlen Sie einen der nachfolgenden Materialien!');
  Writeln ('Aluminium');
  Writeln ('Kupfer');
  writeln ('Silber');
  writeln ('Wolfram');
  readln (Material);
 
  IF Material= 1 THEN writeln('der spezifische wiederstand beträgt: ', Alu); readkey;
 
 
writeln ('zum beenden Enter');
readln;
end.

Ich danke euch vielmals im voraus für eure mühen und wünsche euch noch nen schönen tag! :)
Zuletzt geändert von Lori am Di 9. Okt 2012, 17:56, insgesamt 1-mal geändert.
Grund: Highlighter

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Hilfe für ein Projekt

Beitrag von Heinrich Wolf »

Hallo,

in Deinem Programm lese ich

Code: Alles auswählen

uses CRT
. Arbeitest Du auf Linux? Erscheinen die Meldungen aus Deinen writeln Befehlen? Bei Linux muss man dazu unter Ansicht - Debuggerfenster die Konsole einschalten.

Du möchtest einen Graphen zeichnen. Dann vergiss

Code: Alles auswählen

uses CRT
am besten. Mach ein neues Projekt ohne das und arbeite Dich in die graphische Programmsteuerung ein. Zum Eingeben der Zahlen benutzt Du TEdit. Zum Auswählen der Metalle benutzt Du TComboBox oder TRadioGroup. Für ein TEdit erstellst Du einen OnExit Messagehandler zum Zeichnen und Rechnen. Diesen Messagehandler weist Du dann auch den anderen TEdits und dem OnChange der TComboBox oder TRadioGroup zu. Für den Graphen kannst Du ein TImage auf Dein TForm legen und da hinein zeichnen. Vielleicht hilft auch ein TChart oder ähnliches, aber damit kenne ich mich nicht aus.

Heiner
Zuletzt geändert von Heinrich Wolf am Di 9. Okt 2012, 19:08, insgesamt 1-mal geändert.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Hilfe für ein Projekt

Beitrag von Heinrich Wolf »

maschbau61 hat geschrieben: 1.ich wollte dass der Benutzer das Material eingibt und das Programm dann der Eingabe entsprechend die Konstanten als spezifischen Wiederstand speichert damit ich damit weiter rechnen kann jedoch klappt es irgendwie nicht....gib es vllt eine Regel die ich vergesse?

Code: Alles auswählen

Writeln ('Aluminium');
  Writeln ('Kupfer');
  writeln ('Silber');
  writeln ('Wolfram');
  readln (Material);

Code: Alles auswählen

Var Material : Integer; // Typ ändern wegen Abfrage mit Case
  ...
  Case Material of //oder Case RadioGroup.ItemIndex of
     0 : SpezifischerWiederstand := Alu;
     1 : SpezifischerWiederstand := Kupfer;
     2 : SpezifischerWiederstand := Silber;
     3 : SpezifischerWiederstand := Wolfram;
  end;
 
Zuletzt geändert von Heinrich Wolf am Mi 10. Okt 2012, 16:47, insgesamt 1-mal geändert.

maschbau61
Beiträge: 18
Registriert: Di 9. Okt 2012, 15:47

Re: Hilfe für ein Projekt

Beitrag von maschbau61 »

Hallo,
erstmal vielen dank für deine schnelle Antwort.
Ich arbeite auf Windows7 und die writeln anweisungen alle angezeigt.

Kannst du mir vielleicht ein gutes Tutorial empfehlen damit ich mich in die grafische Steuerung einarbeiten kann? hab heute das erste mal davon gehört :)

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Hilfe für ein Projekt

Beitrag von Heinrich Wolf »

maschbau61 hat geschrieben:Kannst du mir vielleicht ein gutes Tutorial empfehlen damit ich mich in die grafische Steuerung einarbeiten kann? hab heute das erste mal davon gehört :)
Diese Bitte muss ich an die Allgemeinheit weitergeben. Ich habe mit Delphi1 und seiner Online Hilfe gelernt, Windows Oberflächen zu gestalten. Ein Buch dazu hab ich nicht gelesen. Vorher hab ich mit Turbo Pascal 5.5 für DOS gearbeitet. OOP hab ich darin noch nicht benutzt. Dazwischen hab ich ein bisschen mit Turbo Pascal 1.5 für Windows gespielt. Aber Windows Programme waren mir darin zu kompliziert.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Hilfe für ein Projekt

Beitrag von Heinrich Wolf »

Mal was zur Physik in diesem Thema:
a) Kupfer, Silber oder Alu als Metall für den Glühdraht ist wahrscheinlich Theorie und nicht praktikabel.
b) mit spezifischem Widerstand, Länge und Durchmesser des Drahtes und mit angelegter Spannung liegt wahrscheinlich die Leistung schon fest. Ob der Draht dann glüht, steht auf einem anderen Blatt.

maschbau61
Beiträge: 18
Registriert: Di 9. Okt 2012, 15:47

Re: Hilfe für ein Projekt

Beitrag von maschbau61 »

Hallo,
sorry war lange nicht mehr hier..
also ist es nicht möglich mit Freepascal selbst einen Graphen zu zeichnen? (ich möchte mehrere Graphen zeichnen lassen "graph1: Temperatur auf der x-achse und den Widerstand auf der y-achse usw.)

wegen der Physik: Ja das mit dem Kupfer, silber und Alu ist aus rein theoretischen Gründen.

Ich danke dir nochmal für deine Hilfe.
Mfg

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Hilfe für ein Projekt

Beitrag von Scotty »

maschbau61 hat geschrieben:...ich möchte mehrere Graphen zeichnen lassen...
http://wiki.freepascal.org/TAChart (das Package ist Teil der LCL)

Ist deine Wortwahl richtig?

http://de.wikipedia.org/wiki/Graphentheorie
Die Graphentheorie ist ein Teilgebiet der Mathematik, das die Eigenschaften von Graphen und ihre Beziehungen zueinander untersucht.
http://de.wikipedia.org/wiki/Graphik
Grafik (ist) im weitesten Sinn ... der Sammelbegriff für alle künstlerischen oder technischen Zeichnungen sowie deren manuelle drucktechnische Vervielfältigung.
http://de.wikipedia.org/wiki/Diagramm
Ein Diagramm ist eine grafische Darstellung von Daten, Sachverhalten oder Informationen.

Soner
Beiträge: 739
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Hilfe für ein Projekt

Beitrag von Soner »

Mit Freepascal kannst du auch Grafiken zeichnen. Also nach dem Brechnungen Grafikfenster öffnen, zeichnen und mit Enter beenden usw. Genauso wie unter TP damals.
Du findest entsprechende Units in dein FPC-Verzeichnis z.B.:
\lazarus\fpc\2.6.1\source\packages\graph

Hilfsdokumente hier:
http://www.freepascal.org/docs-html/rtl ... index.html

Jochen
Beiträge: 35
Registriert: So 30. Nov 2008, 23:35

Re: Hilfe für ein Projekt

Beitrag von Jochen »

Muss es denn ohne grafische Oberfläche sein? Wenn nein, dann hab ich hier ein Beispiel:
  • in Lazarus Projekt -> neues Projekt -> Anwendung
  • aus dem Menü drei TButtons, ein TImage auf die Oberfläche der Form ziehen
  • Caption eines Button zu sin(x) ändern
  • Quelltext mit folgendem ersetzen

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,  ExtCtrls;
 
type
 
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Image1:  TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { private declarations }
    function function1(x: double): double;
    function function2(x: double): double;
  public
    { public declarations }
  end;
 
  functiondouble = function(x: double): double of object;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  x:    integer;
  func: functiondouble;
 
begin
  if (Sender as TButton).Caption = 'sin(x)' then
    func := @function1
  else
    func := @function2;
 
  with Image1.Canvas do
  begin
    // center line
    Clear;
    Clear;
    Pen.Color := clBlack;
    MoveTo(0, Height div 2);
    LineTo(Width, Height div 2);
 
    //origin
    MoveTo(0, round(func(0)));
    Pen.Color := clGreen;
 
    // function
    for x := 0 to Width do
    begin
      LineTo(x, (round(func(x / 20) * -100 + Height / 2)));
    end;
  end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  Image1.Canvas.Clear;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
  pic: TPortableNetworkGraphic;
begin
  pic := TPortableNetworkGraphic.Create;
  pic.Assign(Image1.Picture.Bitmap);
  pic.SaveToFile('picture' + FormatDateTime('yyyy-mm-dd_hh-MM-ss', Now) + '.png');
  pic.Free;
end;
 
function TForm1.function1(x: double): double;
begin
  Result := sin(x);
end;
 
function Tform1.function2(x: double): double;
begin
  Result := sin(x) * sin(x);
end;
 
end.
 
Jochen

maschbau61
Beiträge: 18
Registriert: Di 9. Okt 2012, 15:47

Re: Hilfe für ein Projekt

Beitrag von maschbau61 »

Hallo Leute,
Vielen dank für eure Hilfe
habe es jetzt mit TChart gemacht und es klappt auch, aber irgendwie ist die X-Achse mit 2400 begrenzt....wenn ich größere werte Brauche dann bekomme ich die Fehlermeldung "overflow" hat jemand eine idee was man da tun kann?

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Hilfe für ein Projekt

Beitrag von Thomas B. »

Eine Begrenzung von 2400 in TChart kenne ich nicht. Ich habe mit AddXY(..) schon über eine Million Werte zugefügt und anzeigen lassen.
An welcher Stelle kommt den die Fehlermeldung?

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Hilfe für ein Projekt

Beitrag von MitjaStachowiak »

Mal 'ne Off-Topic-Frage: An welche Uni bist du?

An der TU-Darmstadt hat man von Lazarus anscheinend noch nie etwas gehört. Ich darf mich hier mit Java rumplagen :x

maschbau61
Beiträge: 18
Registriert: Di 9. Okt 2012, 15:47

Re: Hilfe für ein Projekt

Beitrag von maschbau61 »

Tu-Dortmund

Antworten