Seite 1 von 8 12345 ... LetzteLetzte
Ergebnis 1 bis 20 von 141

Thema: Der "Grosse" Programmierthread

  1. #1

    Der "grosse" Programmierthread

    hmm,

    so, ich hab mich jetzt (in Zusammenarbeit mit Zack) dazu entschlossen mal einen allgemeinen Programmierthread zu eröffnen.
    Im Prinzip, wie im PHP-Thread (der jetzt hier mit einfließt), d.h alle möglichen Probleme, Ideen etc. Ich denke das sollte reichen als Ersatz für das abgelehnte Programmiererforum.
    In punkto Sprachen ist alles erlaubt von ASM bis C#.


    Ach, und bitte keine Einzeiler/Sinnlosposts like
    "Cooler Thread. Ich kann Visual Basic. mfg blabla"


    na dann
    happy posting
    so far...

    Edit:
    Sollte ein Problem programmiersprachen-spezifisch sein, gebt bitte die Sprache mit an. Nicht alle wollen sich das jeweils aus der Syntax herreimen.

    Geändert von Malakai (01.07.2003 um 03:09 Uhr)

  2. #2

    first prob.

    so des Aha macht gleich mal den Anfang

    also folgendes Problem, dieses hübsche delphi-Programm (zu allen mögliche Vektorrechungen) :

    (alle Variablen außer dem counter sind als real deklariert)
    (initialisierungen und anderer schnullipups sind aus Platzgründen mal weggelassen worden ^^ )

    Code:
    procedure TFormVektor.go1Click(Sender: TObject);
    begin
    if counter=0 then
    begin
    ax:= strtoint(editax.text);
    ay:= strtoint(editay.text);
    az:= strtoint(editaz.text);
    bx:= strtoint(editbx.text);
    by:= strtoint(editby.text);
    bz:= strtoint(editbz.text);
    
    if ((ax=0) and (ay=0) and (az=0))
    or ((bx=0) and (by=0) and (bz=0)) then
    begin
    label0vektor.caption:= 'MÖP keine Nullvektoren bidde :D - danke';
    end
    else
    begin
    label0vektor.caption:='';
    ab:= sqrt(sqr(ax)+sqr(ay)+sqr(az));
    bb:= sqrt(sqr(bx)+sqr(by)+sqr(bz));
    editab.text:= format('%3.1f',[ab]);
    editbb.text:= format('%3.1f',[bb]);
    
    skalar:= ax*bx+ay*by+az*bz;
    editskalar.text:= format ('%3.1f',[skalar]);
    
    coab:= ((skalar)/(ab*bb));
    bwab:= arccos(coab);
    wiab:= (bwab)/(Pi)*180;
    editwab.text:= format('%3.1f',[wiab]);
    
    vx:= ay*bz-az*by;
    vy:= az*bx-ax*bz;
    vz:= ax*by-ay*bx;
    editvx.text:= format('%3.1f',[vx]);
    editvy.text:= format('%3.1f',[vy]);
    editvz.text:= format('%3.1f',[vz]);
    
    para:= sqrt(sqr(vx)+sqr(vy)+sqr(vz));
    Drei:= 1/2 * para;
    editparallel.text:= format('%3.1f',[para]);
    editdreieck.text:= format('%3.1f',[drei]);
    end;
    end;
    
    if counter=1 then
    begin
    ax:= strtoint(editax.text);
    ay:= strtoint(editay.text);
    az:= strtoint(editaz.text);
    bx:= strtoint(editbx.text);
    by:= strtoint(editby.text);
    bz:= strtoint(editbz.text);
    cx:= strtoint(editcx.text);
    cy:= strtoint(editcy.text);
    cz:= strtoint(editcz.text);
    
    if ((ax=0) and (ay=0) and (az=0))
    or ((bx=0) and (by=0) and (bz=0))
    or ((cx=0) and (cy=0) and (cz=0)) then
    begin
    label0vektor.caption:= 'MÖP keine Nullvektoren bidde :D - danke';
    end
    else
    begin
    label0vektor.caption:='';
    vx:= ay*bz-az*by;
    vy:= az*bx-ax*bz;
    vz:= ax*by-ay*bx;
    
    ab:= sqrt(sqr(ax)+sqr(ay)+sqr(az));
    bb:= sqrt(sqr(bx)+sqr(by)+sqr(bz));
    editab.text:= format('%3.1f',[ab]);
    editbb.text:= format('%3.1f',[bb]);
    
    coab:= ((skalar)/(ab*bb));
    bwab:= arccos(coab);
    wiab:= (bwab)/(Pi)*180;
    editwab.text:= format('%3.1f',[wiab]);
    
    cb:= sqrt(sqr(cx)+sqr(cy)+sqr(cz));
    editcb.text:= format('%3.1f',[cb]);
    
    skalarbc:= bx*cx+by*cy+bz*cz;
    skalarca:= cx*ax+cy*ax+cz*az;
    
    cobc:= ((skalarbc)/(bb*cb));
    coca:= ((skalarca)/(cb*ab));
    bwbc:= arccos(cobc);
    bwca:= arccos(coca);
    wibc:= (bwbc)/(Pi)*180;
    wica:= (bwca)/(Pi)*180;
    editwbc.text:= format('%3.1f',[wibc]);
    editwca.text:= format('%3.1f',[wica]);
    
    Spat:= vx*cx+vy*cy+vz*cz;
    Pyramide:= 1/6 * Spat;
    editspat.text:= format('%3.1f',[spat]);
    editpyramide.text:= format('%3.1f',[pyramide]);
    end;
    end;
    end;
    erzeugt bei ungefähr gleich großen Vektoren einen Gleitkomma-Error. Kennt jemand eine Möglichkeit diesen zu verhindern?

  3. #3
    hmm,

    nunja...
    Vom Fehler her würde ich tippen, dass der Datentypbereich gesprengt wird. (in dem Falle der Real) Die andere (unwahrscheinliche, aber nicht auszuschließende) Möglichkeit wäre ein Prozessorfehler, wie damals beim P III, der auch ein Problem mit Fließkommaberechnung hatte.
    Vielleicht solltest du das Programm einfach mal in WinDisASM32 laden und den Sprungpunkt zurückverfolgen...

    so far...

  4. #4

    thx

    also erstmal ein §thx @malle

    den Datenbereich der Variable hat es wirklich gesprengt. wenn ich alle variablen auf extended anstatt auf real deklariere, verkraftet er immerhin ähnliche Vektoren im unteren Zahlenbereich und das ist doch schon mal was

    aber es könnte noch besser sein ...
    btw. wo bekomm ich WinDisASM32 her ?

  5. #5
    cout <<"Und wofür ist jetzt der Thread???";
    if (Frage=sinnlos)
    {
    delete Thread;
    }
    else
    {
    please_answer;
    }

    getch();
    return 0;

  6. #6
    hmm,

    also zieh es am besten HIER. Einen größeren Datentyp, als extended, im reelen Bereich weiss ich jedoch auch nicht.
    Bei weiteren Problemen schreib einfach mal ne PN.

    @Minoko Mitsayu
    tjo, dein "Programm" wird nicht funktionieren, da du die Header-Include`s vergessen hat. (Von der Variablendeklaration mal ganz abgesehen) :P

    Code:
    #include <iostream>
    #include <string>
    using namespace std;
    
    cout <<"Und wofür ist jetzt der Thread???";
    if (Frage=sinnlos)
    {
    delete Thread;
    }
    else
    {
    please_answer;
    }
    
    getch();
    return 0;
    Hab ich das oben noch nicht geschrieben? Oder kennst du den PHP-Thread nicht?
    Aber um deine Frage zu beantworten:
    Hier können dann einfach (wie bei Ahasver) gewisse Probleme gelöst und Ideen ausgetauscht werden.(Zumindest programmiertechnische Probleme ^.~)
    btw. wolltest du dich nicht bei den IT-News um Softwarenews kümmern???

    so far...

    Geändert von Malakai (01.07.2003 um 03:05 Uhr)

  7. #7
    mkay,

    ich hab mal ein bissche Fehlersuche betrieben, indem in nacheinander stückchenweise alles mal als kommentar gemacht hab. und der Fehler scheint (zu 99,9%) aus der Ecke Winkelberechnug zu kommen. Also aus diesem codestück hier :
    Code:
    coab:= ((skalar)/(ab*bb));
    bwab:= arccos(coab);
    wiab:= (bwab)/(Pi)*180;
    editwab.text:= format('%3.1f',[wiab]);
    -Edit-
    mkay habs selba gelöst
    Code:
    coab:= ((skalar)/(ab*bb));
    if round(coab*10000000)=10000000 then
    begin
    bwab:= 0;
    end
    else
    begin
    bwab:= arccos(coab);
    end;
    wiab:= (bwab)/(Pi)*180;
    editwab.text:= format('%3.1f',[wiab]);
    das man mit "round" so einfach runden kann hät mir aber auch mal einer von euch sagen können (so hats die delphi hilfe) . Das Problem war das er den arccos von 1 nicht bildet will (was ja eigentlich auch logisch ist, denn dieser ist nicht deffiniert)

    @malle
    §thx for the help and the nice proggi.

    -Edit2-
    man hier merkt aber auch niemand was, das eine Klammerkommentar war totaler stuss, aber eigentlich isses auch toll das es keiner gemerkt hat, so konnt ich es löschen bevor mich jemand korrigiert

    Geändert von Ahasver (02.07.2003 um 05:48 Uhr)

  8. #8
    So ich bin’s mal wieder (mit Doppelposterlaubnis ).
    Diesmal drängt die Lösung des Problems nicht so, denn ich habe das Programm auf andere bessere Weise gelöst und es geht sozusagen nur darum mich zu bilden .
    Diesmal ist es ein Programm, welches ein beim Windowsstart daran erinnert, das Person ‚xy’ übermorgen, morgen oder heute Geburtstag hat. Die alte und hier relevante Version verfügt dazu über 12Textdateien (Januar.txt, Februar.txt, …). Die alle mit folgendem Code eingelesen werden :
    Code:
    Variablen:
    jan,feb,maer,... : array[1..31] of string;
    
    Dateiname:='januar.txt';
    assignfile (Datei,Dateiname);
    reset (Datei);
    while (not eof(datei)) do
          begin
          counter:=counter+1;
          readln (datei,zeile);
          jan[counter]:=zeile;
          end;
    closefile (datei);
    
    ...
    Nun wird bei dem entsprechendem Monat (die zeit wurde natürlich eingelesen und decodiert) nachgeschaut ob der aktuelle folgende Tag oder der dem folgendem Tag folgendem Tag auf X (den darauf sind alle Tage initialisiert) stehen oder nicht. Der Code dazu sieht folgendermaßen aus:
    Code:
    case month of
    1 : begin
        for i:=1 to 31 do
        begin
        if jan[i] <> 'x' then
        begin
        if i-day=2 then
        anzeige1.caption:=anzeige1.caption+
               (' '+jan[i]+' hat/haben in zwei Tagen Geburtstag !');
        if i-day=1 then
        anzeige2.caption:=anzeige2.caption+
               (' '+jan[i]+' hat/haben morgen Geburtstag !');
        if i-day=0 then
        anzeige3.caption:=anzeige3.caption+
               (' '+jan[i]+' HAT/HABEN HEUTE Geburtstag !');
        end;
        end;
        end;
    2: ...
    Nun wird alles noch hochgerückt, damit nicht immer das Fenster so groß ist als ob heute, morgen und übermorgen noch jemand geb. hat, allerdings ist das, und der restliche Schmarn jetzt mal ziemlich unwichtig.
    Denn das Problem WAR, dass wenn ich alle Textdateien mit diesem X von Zeile 1 bis 31 ausgestattet hatte (von den Gebs. Mal abgesehen) folgender Fehler kam :

    Zugriffsverletzung bei Adresse 0040380D in Modul ‚Gebrem.exe’. Lesen von Adresse FFFFFFF7.

    Der mir soviel : ……. sagt, meine Frage ist also was hat dieser Fehler zu bedeuten. Meine Vermutungen sind, das es entweder zu viele Daten waren die er einlesen musste, oder das er nicht so viele Zugriffe auf einmal machen kann.

    Bdw. Die fast fertige Version liest nur die Dateien aus die sie braucht. Die Zeilen der Dateien sind nicht mehr auf x sonder auf nichts ( also: ’’) initialisiert und das Proggi verfügt außerdem über einen Monatssprung (falls das bei der Interpretation des Fehlers helfen sollte).

    Ach ja Programmiersprache ist wieder Delphie 4

    Geändert von Ahasver (05.07.2003 um 21:48 Uhr)

  9. #9
    so ^^ hier nochma meine frage

    wie isses möglich einen brenn- bzw.
    kopierschutz in mein mit delphi
    geschriebenes programm zu machen ???

    thx 4 help

  10. #10
    - also einen Kopier/Brennschutz kannst du mit Delphie selbst nicht erzeugen (zumindest soweit ich weis, aber ich bin auch kein Profi, insofern kann das auch falsch sein)

    - was du hingegen machen kannst ist eine kleine Abfrage integrieren, z.B. in Form einer kleinen Form mit Edit und Button, gibt der Benutzer den Falschen Text ein kommt er halt nicht ins Hauptprogramm.
    > wenn die Abfrage nicht jedes mal kommen soll kannst du natürlich extern (Datei/Registrie) abspeichern, das der Key eingegeben wurde. (Allerdings solltest du nicht vergessen das auch der Key weitergegeben werden kann)

    - bdw., um was für ein Proggi handelt es sich denn *neugier*

  11. #11
    Hmm ja, das is eben mein problem...

    die können den key halt einfach weitergeben
    und dann bringts das auch alles wieder nich -.-

    also zum progamm ^^
    da es ja nu zum ende des schuljahrs
    hingeht durften wir in Informatik
    ein Programm unserer Wahl schreiben ^^
    natürlich dachte da jeder sofort an ein spiel ^^
    ich hab mich für ein memory entschieden...

    auf jeden fall hab ich dann aber so verdammt
    viel arbeit in das teil gesteckt, dass es
    ziemlich gut geworden ist...
    hab sogar noch CD Cover und ein CD Label
    entworfen ^^

    naja, und so isses eben ein ziemlich großes und
    (meiner meinung nach auch) gutes Projekt geworden

    hmm, wenn ich webspace hätte, würd ich ja ein paar
    screens online stellen ^^
    aber das is leider nich der fall...
    aber ich frag mal nen kumpel, ob er mir
    die bilder reinstellt
    (kann also noch ein bissel dauern ^^)

    kk also bis dann & THX

  12. #12
    hmm,

    ich hab mir (mit meinem minimalen Delphi-Wissen) mal eine CD-Key Lösung überlegt:

    Ausgehend von einem Ausgangswert (Name des Nutzers, Zufallswert etc.) wird der Schlüssel berechnet. Ziel bei dieser Berechnung ist natürlich, dass ihre Grundlage nicht so einfach durchschaut wird.
    Im folgenden wird ein einfacher CD-Key in der Form xxxx-xxxx-xxxx erstellt. Im Grundwert, "Seed", dürfen nur Zahlen stehen. Weitere Möglichkeiten um den Schlüssel zu generieren bieten z.B. Rechenoperationen, XOR oder Vertauschoperationen.
    Ich gehe mal davon aus, dass sich der CD-Key in einer TEdit-Komponente namens "Eingabe" befindet.

    Code:
    function CDKey(Seed:String): String;
    const Key1: Array[0..9] of Char = ('2','5','8','9','5','a','1','3','6','7');
          Key2: Array[0..9] of Char = ('8','3','4','0','1','7','x','9','3','9');
    var i: integer;
    
    begin
     result := Seed + '-';
    
     for i:= 1 to length(Seed) do
      result := result + Key1[Ord(Seed[i])-48];
    
     result := result + '-';
    
     for i:= 1 to length(Seed) do
      result := result + Key2[Ord(Seed[i])-48];
    
    end;
    
    ...
    
     if CDKey(Copy(Eingabe.Text,1,4)) = Eingabe.Text then
      Caption := 'Richtig' else Caption := 'falscher Key';
    Ich hoffe, dass ich dir einen Denkanstoss geben konnte.

    so far...

  13. #13
    jo cool thx

    aber noch eine frage...

    wenn man dann doch einen richtigen code hat,
    kann man den jedes mal verwenden...
    d.h. sobald einer das orginal hat, kann
    der die cd brennen und den key weitergeben...
    oder etwa nich ???

  14. #14
    hmm,

    joah, das Problem ist natürlich da. Aber das lässt sich auch nicht ändern, außer du lässt dein kleines Programm im CD-Presswerk herstellen.
    Das ist dann wohl doch etwas übertrieben...
    Probier erstmal die "normale" Lösung aus, das sollte ersteinmal reichen. Solang du nicht den Sourcecode beilegst, ist die Raubkopierrate nicht so hoch. (denk ich mal ~~)

    so far...

  15. #15
    hmm jo ^^ passt schon

    aber ich kapier das alles nich so ganz -.-

    also zb... wird das alles in ein editfeld eingeben und
    dann eben durch die 3 "-" abgetrennt...
    oder sind das 4 editfelder ?

    und was issn nu der richtige code ^^
    bzw wie funzt das alles genau ^^

    achja ^^ haste das programm geproggt
    oder nur den code geschrieben ??
    falls dus geproggt hast wärs cool,
    wenn dus mir ma mailn würdest

    Oliver@Ja-Jerusalem.de

    thx ^^

  16. #16
    @ Vampire_Master

    jaja unser malakai ist einer von der umständlichen Sorte. Wenn du es ganz einfach haben willst, dann mach vier editfenster, deren eingabe du dann zusammenschmeiß ( eingabe := edit1.text + edit2.text + edit3.text + edit4.text; ) und dann mit einem constanten key vergleichst (if eingabe=key then ...).willst du es natürlich elegant haben und den key abhängig vom benutzernamen machen solltest du dich mit malakais code auseinandersetzten. Allerdings würd ich des anders machen ich würde die eingabe zurück in einen asci verwandeln ( dazu gibts glaub ich irgendwo n tollen "strto"dingsbums befehl ) und dann da irgendwie dranrumschusstern bis es die richtige länge hat.

    @ all

    so ein stückchen weiter im programm und siehe da er ist wieder da mein lieblingsfehler :

    Zugriffsverletzung bei Adresse 0040380D in Modul ‚Gebrem.exe’. Lesen von Adresse FFFFFFF7.

    könnt mir vielleicht mal jemand sagen was des genau bedeutet, des es ist ganz nett zu wissen was für einen Fehler man hat, um denselben zu beseitigen ( und diese regel gilt nicht nur beim programmieren )

  17. #17
    JO thx

    das klingt doch schonma gut ^^

    dann is der programmier code eben einfach nur
    verarschung...also hat nich wirklich nen
    schützenden sinn, da er ja einfach weiter-
    gegeben werden kann... auch egal ^^

    thx für eure hilfe leutz

  18. #18
    so leute ^^ ich brauch schon wieder hilfe...

    also... was is daran bitte falsch ???

    for i:=1 to felder do
    for j := 1 to felder do begin
    if (i = ((felder div 2) + 1)) and (j = ((felder div 2) + 1)) then
    else begin
    try
    bilder[i,j].destroy;
    except

    end;
    if bilder[i,j] <> nil then
    bilder[i,j]:= nil;
    end;
    end;

    also... bilder is ein array of tImage, was komplett
    entfernt werden soll(damits dann später wieder
    neu erstellt werden kann)...
    in fast allen fällen funktionierts, aber ab und zu
    stürzt das programm bei dieser procedure aus unerklärlichen
    Günden ab -.-

    HILFE

  19. #19
    also auf die schnelle würd ich ersteinmal vollgende Dinge korrigieren :

    for i:=1 to felder do

    > hier gehört meines erachtens ein begin hin

    for j := 1 to felder do begin
    if (i = ((felder div 2) + 1)) and (j = ((felder div 2) + 1)) then


    > du musst ihm auch sagen was er dann machen soll wenn der Fall (i = ((felder div 2) + 1)) und (j = ((felder div 2) + 1)) eintritt

    else begin
    try
    bilder[i,j].destroy;
    except

    end;
    if bilder[i,j] <> nil then
    bilder[i,j]:= nil;
    end;
    end;


    allerdings hab ich grad net all zu viel Zeit, werd aber heut Abend/Nacht vieleicht noch was reineditieren oder posten

    Geändert von Ahasver (12.07.2003 um 23:44 Uhr)

  20. #20
    hmm schonma thx

    also wenn eben dieser fall mit i=((felder div 2) + 1)
    und j=((felder div 2) + 1) eintrifft,
    dann soll er eben einfach nix machen ^^
    und wenn nich dann halt das was bei else steht ^^

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •