Autor |
Beitrag |
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 13.12.05 01:47
Probiers doch einfach aus.
Ausschnitt 1 ergibt immer Wahr (Compiler-Meldung).
Ausschnitt 2 ergibt ein 'Out of Range' (lässt sich mit ShowMessage nachweisen).
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 13.12.05 01:48
Eigentlich ganz einfach.
Der erste Source verursacht auf Grund des Datentyps (WORD) keinen Vorzeichenwechsel, weshalb die Zählvairable IMMER >= 0 ist (Dec(0) --> $FFFF = 65535).
Das zweite erzeugt einfach bei eingeschalteter Bereichsprüfung einen Integer-Overflow wegen 123 * 2^40
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 13.12.05 02:13
BenBE hat folgendes geschrieben: | Der erste Source verursacht auf Grund des Datentyps (WORD) keinen Vorzeichenwechsel, weshalb die Zählvairable IMMER >= 0 ist (Dec(0) --> $FFFF = 65535).
Das zweite erzeugt einfach bei eingeschalteter Bereichsprüfung einen Integer-Overflow wegen 123 * 2^40 |
Und woher weiß ich, ob das nicht so gewollt war? 
|
|
mael
      
Beiträge: 198
Erhaltene Danke: 39
Delphi XE3 Prof.
|
Verfasst: Di 13.12.05 02:26
Wieso gibt es "statische Arrays" in C#?
Man muß doch immer den new-Operator verwenden. Laut Dokumentation bei MS, ist es nur eine Abkürzung wenn man new wegläßt.
Übrigens ist statisch sehr schwammig. Konstante Arrays gibt es nämlich auch nicht in C#, da gab es nur Workarounds (wo man die readonly machen kann).
Was also soll statisch bedeuten?
|
|
derDoc
      
Beiträge: 623
Win Vista Prof
D2007 Prof
|
Verfasst: Di 13.12.05 08:37
Mich würde mal interessieren, wie man in C# ein statisches Array beginnend mit der Indizierung bei 6 mit 5 einzelnen Bytes anlegt.
Bei Delphi wäre das:
Delphi-Quelltext 1:
| xyz: array [6..10] of Byte; |
Was hat es eigentlich mit den Mengen (neudeutsch Sets) auf sich? Die Aufzählung von Konstanten (neudeutsch Enumeration) wie sie in C# möglich ist stellt also eurer Ansicht keine Menge dar?
_________________ MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 13.12.05 08:49
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Di 13.12.05 10:03
mael hat folgendes geschrieben: | Wieso gibt es "statische Arrays" in C#?
Man muß doch immer den new-Operator verwenden. Laut Dokumentation bei MS, ist es nur eine Abkürzung wenn man new wegläßt.
Übrigens ist statisch sehr schwammig. Konstante Arrays gibt es nämlich auch nicht in C#, da gab es nur Workarounds (wo man die readonly machen kann).
Was also soll statisch bedeuten? |
Das würde ich auch gerne mal wissen. Die array-Syntax in C# ist doch
C#-Quelltext 1: 2: 3:
| int[] intArray;
intArray = new int[10]; |
Natürlich kann man Deklaration und Initialiserung auch zu einer Zeile zusammenfassen:
C#-Quelltext 1:
| int[] intArray = new int[10]; |
aber auf jeden Fall kann ich zu einem späteren Zeitpunkt der gleichen array-Variable ein anderes array zuweisen:
C#-Quelltext 1:
| intArray = new int[20]; |
Beim Erzeugen des Array-Objektes kann man die Grösse auch durch eine Variable festlegen:
C#-Quelltext 1:
| intArray = new int[arrSize]; |
Auf jeden Fall wird das Array zur Laufzeit auf dem Heap erzeugt. Für mich ist das ein dynamisches Array. Wie ist denn eure Definition?
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Di 13.12.05 10:16
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Di 13.12.05 10:28
super ich hatte bei der for schleife keinen fehler oder ne warnung. woher soll ich wissen dass das ganze so nicht gewollt ist???
kann doch keiner wissen dass ihr keinen overflow wollt. bei manchen programmen ist sowas bestimmt erwünscht
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
Robert_G
      
Beiträge: 416
Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
|
Verfasst: Di 13.12.05 10:32
Stefan.Buchholtz hat folgendes geschrieben: | Auf jeden Fall wird das Array zur Laufzeit auf dem Heap erzeugt. Für mich ist das ein dynamisches Array. Wie ist denn eure Definition? |
Array Instanzen sind immer statisch in .Net. IMMER! Dyn. Arrays wurden wahrscheinlich nichtmal in Erwägung gezogen (wozu auch  ).
Ich habe echt nicht an den overflow gedacht. Aber ich hatte den ersten angekreuzt, auch wenn er in den Ergebnissen nicht fett dargestellt war...
btw: Die Fragen waren diesmal ziemlich gut (mit dieser gewissen Prise Hinterhältigkeit  )
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Di 13.12.05 11:00
Amateur hat folgendes geschrieben: | super ich hatte bei der for schleife keinen fehler oder ne warnung. woher soll ich wissen dass das ganze so nicht gewollt ist???
kann doch keiner wissen dass ihr keinen overflow wollt. bei manchen programmen ist sowas bestimmt erwünscht |
Unwahrscheinlich - und wenn doch ist es sehr unsaubere Technik. Das führt nämlich dazu, dass die Schleife nicht mehr funktioniert, wenn man die Überlaufprüfung einschaltet. Wenn der Überlauf gewollt ist, schaltet man am Schleifenbeginn die Überlaufprüfung (mit {$Q-}) aus und schreibt einen Kommentar dran.
Noch dazu ist es unportabel: Wenn Delphi mal mit einem 64-Bit Compiler kommt, bei dem ein Integer standardmässig 64 Bit gross ist, gibt es keinen Überlauf mehr und die Schleife liefert ein anderes Ergebnis.
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Di 13.12.05 12:57
ja aber es war ja auch nur die schleife dargestellt. kann ja gut sein dass die compileranweisung davor kommt.
außerdem arbeiten ja bestimmte trojaner oder viren (so genau kenn ich mich damit nicht aus) mit overflows. und da ist so etwas sicher gewollt.
ob die das nun mit so einer schleife machen sei dahin gestellt. jedenfalls kann es durchaus sein dass das ganze gewollt ist.
denn ich hab meine glaskugel leider verloren. ich kann nicht wissen was gewollt ist. selbst bei der ersten kann es gewollt sein. da hätte man definieren müssen was das programm leisten soll. wobei das bei den codes die irgendwie eh keinen praktischen nutzen haben ziemlich schwer geworden wäre...
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 13.12.05 13:07
Amateur hat folgendes geschrieben: | ja aber es war ja auch nur die schleife dargestellt. kann ja gut sein dass die compileranweisung davor kommt.
außerdem arbeiten ja bestimmte trojaner oder viren (so genau kenn ich mich damit nicht aus) mit overflows. und da ist so etwas sicher gewollt. |
Alle, die das ausgewählt haben, wurden an das BKA gemeldet.
Vielleicht wurde bei dieser Frage auf den gesunden Menschenverstand gehofft?
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Di 13.12.05 14:48
Calyptus hat folgendes geschrieben: | Ich verstehe die erste Aufgabe (vom 12.) immernoch nicht.... habt ihr dazu eine Erklärung? |
Der erste Ausschnitt soll augenscheinlich 6 mal durchlaufen bis val <= -1 ist. Weil Variablen vom Typ Word aber niemals negativ werden gibt es eine Endlosschleife.
Der zweite Ausschnitt soll hingegen den Wert in val 40 mal verdoppeln. Der erzeugte Wert wird jedoch 0 weil das Ergebnis für einen Integer zu groß wird, einen Überlauf erzeugt.
//Edit: gibt man den Code so ein, erhält man die Fehlermeldungen vom Compiler:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var val: Word; val2: Integer; begin for val := 5 downto -1 do begin ShowMessage('Jippi'); end;
val2 := 123*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2; end; |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 14.12.05 01:17
Hallo!
Es ist schon wieder ein paar Tage her als wir das letzte Mal eine Frage raus genommen haben. Also:  Bei dem letzten Gewinnspiel (13.12) habe ich die zweite Frage (Alignment) aus der Auswertung genommen da doch wohl zwei Antworten richtig waren.
Gruß
Tino
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mi 14.12.05 01:20
Und, wie Tino mir in der SB mitteilte, die verbliebene Frage wurde leicht modifiziert (Punkt f herausgenommen). Betroffen waren 10 Personen denen kein Nachteil entstand.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mi 14.12.05 01:32
Hallo,
Ergebnis nicht in Fettschrift, aber doch richtig
Zitat: |
Die grün dargestellten Antworten sind die richtigen Antworten
Die fett dargestellten Antworten sind Deine Antworten.
Antworten:
Diese Frage hast Du richtig beantwortet. |
??
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 14.12.05 07:50
Lannes hat folgendes geschrieben: | Hallo,
Ergebnis nicht in Fettschrift, aber doch richtig
Zitat: |
Die grün dargestellten Antworten sind die richtigen Antworten
Die fett dargestellten Antworten sind Deine Antworten.
Antworten:
Diese Frage hast Du richtig beantwortet. |
?? |
Die AW stimmt schon. Hin und wieder kommt es schon vor, dass richtige Antworten nicht fett markiert werden (bei diesem Gewinnspiel zwar erst das Erste mal so weit ich mich erinnern kann, aber bei älteren Gewinnspieln ist es auch schon so).
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 14.12.05 11:40
Hallo!
Ob du eine Frage korrekt beantwortet hast wird in der Tipp-Tabelle in der Datenbank abgelegt und dieser Eintrag ist entscheident dafür ob "Diese Frage hast Du richtig beantwortet." angezeigt wird oder nicht. Das die Antwort nicht in fett dargestellt wird hängt damit zusammen, dass das Eingabefeld beim Antworten ein Editfeld war. Müsste ich bei Gelegenheit noch mal ändern.
Gruß
Tino
|
|
JayK
      
Beiträge: 1013
|
Verfasst: Mi 14.12.05 15:46
Hallo,
bei der heutigen 2. Frage (mit dem TQuery)
Zitat: | ...TQuery ein Ergebnis zurückliefert, in dem auch Änderungen zulässig sind? |
Änderungen durch den Benutzer oder einfach nur im Quelltext?
Grüße
JayK
|
|