Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Was bedeutet diese Zeile in C++? (https://www.delphipraxis.net/18684-bedeutet-diese-zeile-c.html)

Virchov 23. Mär 2004 09:49


Was bedeutet diese Zeile in C++?
 
Moin, Allerseits!
Kleene Frage:

Was bedeutet in c++ folgende Zeile?
Wird es hier ein Array definiert und dessen variable einen Wert 0 zugschhrieben?

int Histogram[LENBYTE]={0};


Vielen Dank!

Jörn 23. Mär 2004 09:52

Re: Was bedeutet diese Zeile in C++?
 
Bin mir absolut nicht sicher weil ich kein C++ kann, aber ich denke das der Code die Variable LENBYTE durch abschneiden der Nachkommastellen in eine Ganzzahl/Integer umwandelt, wenn die Anweisung fehlschlägt ist das Ergebnis null

EDIT was sabbel ich hier für nen Stuss... kann gar nicht passen, wer lesen kann ist klar im Vorteil... keine Ahnung, was es nun genau macht, aber das mit Ganzzahlumwandlung passt auf jeden Fall!

Tyrael Y. 23. Mär 2004 09:55

Re: Was bedeutet diese Zeile in C++?
 
Ja,
es wird ein Array of int deklariert und dem Feld mit dem Index LENBYTE(wird ne Konstante sein, da Konstanten überlicherweise in c++ groß geschrieben werden) die Zahl 0 zugewiesen.

Da es gerade deklariert wird, wird wahrscheinlich LENBYTE 0 sein.


@Jörn :wiejetzt: :gruebel:

Jörn 23. Mär 2004 09:56

Re: Was bedeutet diese Zeile in C++?
 
Na gut *gg*
Sollte mich aus so was raushalten, wenn ich nix davon verstehe... :duck:

Virchov 23. Mär 2004 09:57

Re: Was bedeutet diese Zeile in C++?
 
Danke, aber ich glaube doch, es machht was ganz anderes. Na jut. :)

Virchov 23. Mär 2004 10:01

Re: Was bedeutet diese Zeile in C++?
 
Danke Tyrael!

Könntest du mir einen Tip geben, wie das in D auszusehen hat?

Also ich hab folgendes gemacht:

Delphi-Quellcode:

var LENBYTE: integer;
 Histogram: array of integer; //= {0};           //Brightness Histogram for this   frame
  Histogram[LENBYTE]:=0;
geht aber nicht... :(

NicoDE 23. Mär 2004 10:08

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Virchov
Was bedeutet in c++ folgende Zeile?
Wird es hier ein Array definiert und dessen variable einen Wert 0 zugschhrieben?

int Histogram[LENBYTE]={0};

Dort wird ein Array mit LENBYTE Elementen aus Integern deklariert und das erste Element mit 0 initialisiert.
Delphi-Quellcode:
var
  Histogram: array [0..LENBYTE - 1] of Integer;
begin
  Histogram[0] := 0;

Tyrael Y. 23. Mär 2004 10:13

Re: Was bedeutet diese Zeile in C++?
 
Es handelt sich höchstwahrscheinlcih um ein dynamisches Array, da ein Array mit einem Feld und dem Wert 0 in diesem Feld ziemlich wenig Sinn hätte...

also...

Delphi-Quellcode:
const LENBYTE = 0;

...

var
 Histogram : array of Integer;
begin
  SetLength(Histogram, 1);
  Histogram[LENBYTE] := 0;

...
end;
im weiterem Programmablauf musst du entsprechend dem c++ Code das Array mit SetLength vergrößern.

Virchov 23. Mär 2004 10:21

Re: Was bedeutet diese Zeile in C++?
 
vielen Dank! :lol:

Dannyboy 23. Mär 2004 10:22

Re: Was bedeutet diese Zeile in C++?
 
Moin, ich ärgere mich mit beiden Sprachen rum und übersetze das so:
Delphi-Quellcode:
CONST LENBYTE = <irgend ein integer wert>;
Histogram : Array[0..LENBYTE-1] of Integer; // Die Arrays in C++ fangen bei 0 (Null) an!
begin
  Histogram[LENBYTE]:=0; // Definition in Delphi so
end.
Nachtrag:
An Deinen Codeschnippseln ist NICHTS dynamisch. Es ist ein statisches Array, ergo
nix mit SetLength, etc.

GRUSS

DANNYBOY

NicoDE 23. Mär 2004 10:27

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Dannyboy
Moin, ich ärgere mich mit beiden Sprachen rum

Index out of bounds...
Code:
Histogram : Array[0..[color=red]LENBYTE-1[/color]] of Integer; // Die Arrays in C++ fangen bei 0 (Null) an!
begin
  Histogram[[color=red]LENBYTE[/color]]:=0; // Definition in Delphi so
end.

Tyrael Y. 23. Mär 2004 10:28

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Nachtrag:
An Deinen Codeschnippseln ist NICHTS dynamisch. Es ist ein statisches Array, ergo
nix mit SetLength, etc.
ähm, was soll ein Array bringen mit einem Feld un dem Wert 0 in diesem Feld?

...also wird es im weiterm Prorammablauf höchtwahrscheinlich vergrößert und neue Werte werden zugewiesen

der Codeschnipsel diente wahrscheinlcih zur Initialisierung des Arrays, also wahrscheinlcih doch dynamisch

NicoDE 23. Mär 2004 10:32

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Tyrael Y.
was soll ein Array bringen mit einem Feld

Es hat LENBYTE Felder
Zitat:

Zitat von Tyrael Y.
un dem Wert 0 in diesem Feld?

Nur das erste Feld wird mit 0 initialisiert.
Zitat:

Zitat von Tyrael Y.
also wird es im weiterm Prorammablauf höchtwahrscheinlich vergrößert

Eher unwahrscheinlich, da in C/C++ Konstanten üblicherweise groß geschrieben werden.
Zitat:

Zitat von Tyrael Y.
der Codeschnipsel diente wahrscheinlcih zur Initialisierung des Arrays

...des ersten Elements, s.o.

Nichts für ungut.

Tyrael Y. 23. Mär 2004 10:36

Re: Was bedeutet diese Zeile in C++?
 
Virchov wird ja wissen was im weiterem Programmablauf noch mit dem Array passiert und ich gehe mal davon aus, ich habe Recht ;)

..wird sich ja zeigen, wenn Virchov weiteres postet

NicoDE 23. Mär 2004 10:45

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Tyrael Y.
und ich gehe mal davon aus, ich habe Recht ;)

Mit welchem Deiner zwei Beiträge ?-)

Virchov 23. Mär 2004 10:58

Re: Was bedeutet diese Zeile in C++?
 
Ich bestätige, das ist ein DYNAMISCHES Array, mit dessen Größe weiter in der Routine rumgespielt wird!

Tyrael Y. 23. Mär 2004 10:58

Re: Was bedeutet diese Zeile in C++?
 
nennt mich Prophet :twisted:

Robert Marquardt 23. Mär 2004 11:01

Re: Was bedeutet diese Zeile in C++?
 
int Histogram[LENBYTE]={0};

Es wird ein array von Integern namens Histogram der Laenge LENBYTE deklariert und das erste Element
aka Histogram[0] mit 0 initialisiert.
Der Name LENBYTE laesst auf eine Benutzung in der Art von Delphi ShortString schliessen.

LENBYTE ist vermutlich irgendwo anders als
#define LENBYTE 256
definiert. (256 hab ich mir gerade ausgedacht).

Es werden wie bei Delphi eigentlich alle Werte des arrays mit 0 initialisiert, aber initialisierte Variablen
landen in einem anderen Programmsegment als uninitialisierte.

Delphiaequivalent:
Delphi-Quellcode:
const
  LENBYTE = 256;

var
  Histogram: array [0..LENBYTE-1] of Integer;

Dannyboy 23. Mär 2004 11:06

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von NicoDE
Index out of bounds...

Sorry, war mein Fehler. :wall:
Es sollte eigentlich so sein:
Delphi-Quellcode:
CONST LENBYTE = <irgend ein integer wert>;
Histogram : Array[0..LENBYTE-1] of Integer; // Die Arrays in C++ fangen bei 0 (Null) an! 
begin
  Histogram[0]:=0; // Definition in Delphi so und diesmal richtig. :-)
end.
Zitat:

Zitat von Tyrael Y.
ähm, was soll ein Array bringen mit einem Feld un dem Wert 0 in diesem Feld?

...also wird es im weiterm Prorammablauf höchtwahrscheinlich vergrößert und neue Werte werden zugewiesen

der Codeschnipsel diente wahrscheinlcih zur Initialisierung des Arrays, also wahrscheinlcih doch dynamisch

Die Null (0) dient zum initialisieren (siehe NicoDE's Posting). Was "im weiteren Programmablauf" sonst noch so passiert,
weiss man nicht, denn das geht aus Deinem Code im Moment nicht hervor. Vor allem war Deine Frage
nur auf diese Zeile reduziert:
Zitat:

Was bedeutet in c++ folgende Zeile
Bisher ist Dein Array statisch (Konstanten in C sind GROSS), daher in Delphi ...
Delphi-Quellcode:
CONST LENBYTE = <irgend ein integer wert>;
...

Virchov 23. Mär 2004 11:12

Re: Was bedeutet diese Zeile in C++?
 
Tja, es wird dann später zB folgendes passieren:
Delphi-Quellcode:

 //Calculate probability from histogram
  for (t=0;t<LENBYTE;t++){
   p[t]=((double)Histogram[t]/(double)numPixels);
   mT += (t*p[t]);
  }

Luckie 23. Mär 2004 11:18

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Dannyboy
Delphi-Quellcode:
Histogram : Array[0..LENBYTE-1] of Integer; // Die Arrays in C++ fangen bei 0 (Null) an!

Öhm, in Delphi auch. Aber in beiden Sprachen kann man sie auch bei eins anfangen lassen, macht nur eigentlich niemand.

NicoDE 23. Mär 2004 11:19

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Virchov
Tja, es wird dann später zB folgendes passieren:
Delphi-Quellcode:

 //Calculate probability from histogram
  for (t=0;t<LENBYTE;t++){
   p[t]=((double)Histogram[t]/(double)numPixels);
   mT += (t*p[t]);
  }

Wegen Double(Integer) nur Pseudocode (das wilde Casten überlasse ich Dir :) )
Delphi-Quellcode:
for t := 0 to LENBYTE - 1 do
begin
  p[t] := Double(Histogram[t]) / Double(numPixels);
  Inc(mT, t * p[t]);
end;

NicoDE 23. Mär 2004 11:21

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Luckie
in beiden Sprachen kann man sie auch bei eins anfangen lassen

Wäre mir neu, dass das bei C/C++ geht...

Tyrael Y. 23. Mär 2004 11:23

Re: Was bedeutet diese Zeile in C++?
 
mir auch :roll:

da in Delphi Deklaration

Delphi-Quellcode:
meinArray: array[zahlAnfang..zahlEnde] of TeinTyp
und in C++

einTyp meinArray[LängeMeinesArrays];


..und wie soll man da sagen welcher Index am Anfang steht?

Dannyboy 23. Mär 2004 11:27

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Luckie
Aber in beiden Sprachen kann man sie auch bei eins anfangen lassen

Zugegeben, in C++ kenne ich das nicht. Wie geht das? :gruebel:
Zitat:

Zitat von Luckie
macht nur eigentlich niemand.

Doch, mein damaliger Informatik-Lehrer. :mrgreen:

NicoDE 23. Mär 2004 11:37

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Tyrael Y.
einTyp meinArray[LängeMeinesArrays];

..und wie soll man da sagen welcher Index am Anfang steht?

Indem man den []-Operator überschreibt ;)
(gilt dann aber für alle Arrays des Types - mit Templates könnte man es vielleicht so drehen, dass er nur für den deklarierten Fall gilt... aber das ist dann eher Overkill)

Tyrael Y. 23. Mär 2004 11:39

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Tyrael Y. hat folgendes geschrieben:
einTyp meinArray[LängeMeinesArrays];

..und wie soll man da sagen welcher Index am Anfang steht?

Indem man den []-Operator überschreibt
(gilt dann aber für alle Arrays des Types - mit Templates könnte man es vielleicht so drehen, dass er nur für den deklarierten Fall gilt... aber das ist dann eher Overkill)

löl, mit Biegen und Brechen geht alles (besonders in C++) :roll:

Dannyboy 23. Mär 2004 12:02

Re: Was bedeutet diese Zeile in C++?
 
Zitat:

Zitat von Tyrael Y.
löl, mit Biegen und Brechen geht alles (besonders in C++) :roll:

Und genau deshalb mag ich Delphi einfach lieber als C++. Warum Dinge so kompliziert
machen, wenn sie auch leichter zum selben Ziel führen? :gruebel:
Ich habe mir C++ lediglich angeeignet, weil ich dazu gezwungen war (beruflich). Ansonsten
hätte ich das gelassen.

Luckie 23. Mär 2004 12:10

Re: Was bedeutet diese Zeile in C++?
 
Oh sorry, mein Fehler. Mein damaliger Bauinformatik Prof, hat das Array immer um eins größer gemacht und dann in der Schleife mit eins angefangen zu zählen. Fragt mich aber bitte nicht warum. :roll:

glkgereon 31. Mär 2004 20:19

Re: Was bedeutet diese Zeile in C++?
 
also ich kann nur zustimmen (direkt in 2 sachen :-D ):
1) array sind in c von 0 bis zum angegebenen wert (lenbyte)
2) auch ich meine, das so statische arrays mit integern deklariert werden, und mit dem zusatz hinten histogram[0] auf 0 gesetzt wird


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 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