Wieso funktioniert der Delphi/Lazarus Code nicht?

3 Antworten

Wenn -p/2 syntaktisch nicht akzeptiert wird, probiere einmal (p/2) * (-1). Mich wundert es allerdings, dass -p/2 Probleme macht.

Als was wurde term1 denn definiert? Das steht nicht in der Frage. Der Datentyp muss natürlich auch negative Zahlen aufnehmen können.

Danke, aber das hat leider auch nicht funktioniert. Und term1 hab ich im Quelltext als real definiert, ich habs hier bloß vergessen.

0
@4chap

Ich würde auf jeden Fall am Ende der Zeilen Semikola setzen und zwischen den Klammern ein Malzeichen:

term1:=-p/2; 
term2:=(p/2)*(p/2)-q; 
0
@4chap
Memo1.text:=floattostr(Loesungen);

Hier solltest du IntToStr verwenden.

0
@Suboptimierer

Es geht trotzdem nicht (und da stand ein Malzeichen aber gutefrage.net hat das als kursiv interpretiert deshalb sieht man es nicht)

0
@4chap

Was bekommst du denn als Fehlermeldung? Was bedeutet "Geht nicht?"

p:=StrToInt(Edit1.Text); 
q:=StrToInt(Edit2.Text); 

Solltest du hier nicht StrToFloat verwenden?

1

Ist eigentlich nicht einzusehen, aber Du hast nicht den Code gepostet, der ohne das Minuszeichen "geht": term1 ist nicht definiert, es fehlen verschiedene Semikolons.

Außerdem verwendest Du potentiell undefinierte Werte (x1 und x2).

im Quelltext stehen die Semikolons und term1 da, ich habs hier wohl aus versehen gelöscht. aber wieso sind x1 und x2 potentiell undefiniert?

0
@4chap

Im Fall Loesungen <> 2 werden denen keine Werte zugewiesen.

Ich kenne den Lazarus-Compiler nicht (nur Delphi), aber bin eigentlich ziemlich sicher, dass auch der Dir entsprechende Warnungen ausgeben wird. Es ist guter Programmierstil, wenn man die Auslöser für Warnungen aus dem Code entfernt.

1

-Variable geht in Delphi so nicht. Mir ist auch keine Sprache bekannt, in welcher das geht.

so gehts richtig: 

term1:=-1 * p/2;
//noch einfacher so
term1 := p / -2;

wie kommst du darauf? also mir fällt im moment KEINE programmiersprache ein, wo das NICHT geht. hast du das mit delphi ausprobiert? du meinst doch

x := 5;
y := -x;

?

0
@maximilianus7

keine Ahnung wie ich darauf kam. Hat vor langer Zeit mal nicht funktioniert (vlt. wegen ner ganz anderen Sache) und seid dem hab ich das immer vermieden.

habe es gerade mal in delphi, js, c# und php ausprobiert. Funktioniert super! =)

...man lernt nie aus...

0

In einem bestimmten Intervall alle Primzahlen ausgeben?

Hallo liebe Community ich habe folgendes Problem, ich habe die Aufgabe ein Programm zu schreiben, welches mir aus dem Intervall von 20-30 ausgibt wie viele Primzahlen dort enthalten sind und welche es sind. Anstatt mir aber, 2 als Anzahl und 23 und 29 als Primzahlen auszugeben, gibt mir das Programm 77 als Anzahl und dann ne Menge Zahlen aus. Ich verstehe jedoch nicht warum.

Quellcode:

procedure TForm1.StartClick(Sender: TObject);
var
  A, B, C, ANFANGS_WERT, END_WERT, ANZAHL : Cardinal;
  IST_PRIMZAHL : Boolean;
  PRIM_FELD : array[1..100] of Cardinal;
begin
  ANZAHL := 0;
  ANFANGS_WERT := StrToInt(Eingabe1.Text);
  END_WERT := StrToInt(Eingabe2.Text);
  for A := ANFANGS_WERT  to END_WERT do
  begin
    IST_PRIMZAHL := true;
    for B := 2 to (A div 2) do
    begin
      C :=  A mod B;
      if C = 0 then
      begin
        IST_PRIMZAHL := false;
      end
      else if IST_PRIMZAHL = true then
      begin
        Inc(ANZAHL);
        PRIM_FELD[ANZAHL] := A
      end
      else IST_PRIMZAHL := true;
    end;
  end;
  Ausgabe.items.add(' Primzahlen: ' + IntToStr(ANZAHL));
  for A := 1 to ANZAHL do
    begin
      Ausgabe.Items.Add(IntToStr(PRIM_FELD[A]));
    end;
end;
...zur Frage

Label löschen bei Eingabe in Delphi?

Hallo, Wir programmieren seit einiger zeit mit Delphi in der Schule... Ich mache auch ab und zu etwas zuhause wenn ich Langeweile habe.... jetzt aber zum Problem: ich will einen taschenrechner zusammenbasteln mit Delphi und will das oben das Label, wo später das ergebnis stehen soll beim Start der .exe bereits etwas anzeigt und sich das nach der eingabe der zahlen über das Zahlenfeld löscht und dann mit der anzeige der eingegebenen Zahlen und später des erbnisses anfängt.

...zur Frage

Wie in Java mit PQ-Formel und statischen Methoden rechnen?

Guten Abend miteinander, unzwar habe ich eine Aufgabe die zu lösen ist, wobei ich leider nicht weiter komme. Die PQ-Formel habe ich hingekriegt, was jedoch mit dem "Satz von Vieta" gemeint und wie dieser anzuwenden ist, ist mir unschlüssig.

Aufgabe: Das Problem für die Lösungsberechnung der Gleichung (x^2 −3 · 10^200 x+2 = 0) ist lösbar. (Die Lösungen lauten x1 ≈ 3 · 10200 und x2 ≈ 7 · 10−201, sind also in Java darstellbar.) Wie muss man vorgehen, damit sie in Java berechnet werden? Hilfreich dazu ist der „Satz von Vieta“, insbesondere die Beziehung x1x2 = q der zwei Lösungen zu q.

Das ist was ich bisher dafür hab:


public class Bonusaufgabe { public static String rechnePQFormel(double x, double p, double q){ double x1, x2, diskriminante; diskriminante = (p/2)(p/2)-q; if (diskriminante >= 0) { x1 = (-p/2) + Math.sqrt((p/2)(p/2)-q); x2 = (-p/2) - Math.sqrt((p/2)(p/2)-q); if (x1==x2) { return "Die Lösungsmenge der PQ-Formel ist L={"+x2+"}";
} else { return "Die Lösungsmenge der PQ-Formel ist L={"+x1+"; "+x2+"}"; } } else { return "Keine Lösung da die Diskriminante "+diskriminante+" ist!"; } // end of if-else } public static String rechneSatzVonVieta(double x, double p, double q){ x1 = -1
(p+q); x2 = p*q; }
public static void main(String[] args){

} }

PS. weiß leider nicht wie ich mein Programm hier schön einfügen kann, deshalb nochmal als Bild angehangen.

...zur Frage

Mein C Programm stürzt nach Eingabe ab....

Ich habe ein kleines Programm geschrieben das die Lösung einer Quadratischen Gleichung angibt, es ließt zuerst die Variablen a,b und c ein, und nachdem a eingescannt ist, stüzt das Prog. ab... Hat jemand einen Rat für mich? Die includes gehen mit dem code von gutefrage kaputt sorry...

include <stdio.h>
include <stdlib.h>
include <math.h>

int main(int argc, char **argv[])
{
    double a,b,c,x1,x2;
    double p = b/a;
    double q = c/a;
    double D = p*p/4-q;
    printf("Dieses Programm sagt dir wie viele Loesungen deine Quadratische Gleichung hat,\nund oder loest sie!\n");
    printf("Die Strucktur der Gleichung muss der Normalform entsprechen.\n Es werden die Variablen 'a,b und c' benoetigt.\n");
    printf("Bitte gebe den Wert a ein.\n");
    scanf("%lf,&a");
    fflush(stdin);
    printf("Bitte gebe den Wert b ein\n");
    scanf("%lf,&b");
    fflush(stdin);
    printf("Bitte gebe den Wert c ein\n");
    scanf("%lf,&c");
    fflush(stdin);

        if(D<0);
         printf("Es gibt keine reelle L\x94sung\n");
        if(D>0);
         x1 = -(p/2)+sqrt(D);
         x2 = -(p/2)-sqrt(D);        
         printf("Es gibt 2 reelle L\x94sungen:\n");
         printf("x1 = %lf\n",x1);
         printf("x2 = %lf\n",x2);
        if(D=0);
         printf("Es gibt eine reelle L\x94sung\n");
         printf("x = %lf\n",x1); 

getch();
return 0;
}
...zur Frage

VBA Makros - if Anweisung

Hi,

ich will mit makros etwas abfragen...

ich habe eine hauptabfrage und wenn diese zutrifft, nur dann, soll es noch andere abfragen geben.

also diesen aufbau

if .......... then if .....then if......then

End IF

Nach jedem If muss aber ein END-IF kommen....

weiße von euch jmd wie man das machen könnte?

Danke schon mal

...zur Frage

Wie behebe ich den Fehler beim Berechnen von kinetischer Energie mit Delphi?

Ich muss ein DELPHI-Programm für die Berechnung von potenzieller und kinetischer Energie schreiben, allerdings kommt ständig der gleiche Fehler. Helft mir.

program Project2;
{$APPTYPE CONSOLE}
uses
  sysutils;
VAR potenzielle_energie, kinetische_energie : real;
PROCEDURE eingabe;
VAR masse, hoehe, potenzielle_energie: real;
    geschwindigkeit: integer;
  BEGIN
  writeln('Eingabe: ');
  writeln('---------');
  write('Masse (in kg): '); readln(masse);
  write('Flughoehe (in m): '); readln(hoehe);
  write('Geschwindigkeit (in km/h): '); readln(geschwindigkeit);
  writeln('-----------------------------------------------------------------');
  readln;
  END;
FUNCTION potenzielle_engergie (masse, hoehe :integer) : real;
BEGIN
potenzielle_energie :=  masse * 9.81 * hoehe;
result := potenzielle_energie;
END;
FUNCTION kinetische_energie (masse, geschwindigkeit :integer) : real;
BEGIN
result :=  masse / 2 * ( geschwindigkeit * geschwindigkeit);
END;
PROCEDURE ausgabe;
BEGIN
  writeln('Ausgabe: ');
  writeln('---------');
  write('Potenzielle Energie: ');
  write(potenzielle_energie:8:2); write(' J');
  write('Kinetische Energie: ');
  write(kinetische_energie:8:2); write(' J');
  readln;
END;
begin
     eingabe;
     ausgabe;
end.

So sieht's aus, und der Fehler ist --> Bezeichner redifiniert 'kinetische_energie'

...zur Frage

Was möchtest Du wissen?