chriss-330
Goto Top

variablen Inkrementieren

hallo,

ich hab das problem das ich innerhalb einer do-while einen wert einlesen muss und diesen dann an eine variable übergeben muss. jetzt weis ich nicht, wie ich das machen kann, das sich bei jedem durlauf der do-while der variablen name ändert. weil sonst wird ja immer die variable aus dem vorherigen durchgang überschrieben.

danke für die hilfe

Content-ID: 28866

Url: https://administrator.de/contentid/28866

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

soa2ii
soa2ii 24.03.2006 um 07:49:25 Uhr
Goto Top
gar nicht... also meines wissen zumindest nach nicht...

entweder du schreibst eine methode und übergibts die jeweils neue zu ändernde variable als parameter oder du packst vorher alle variablen in ein array...

wobei mir letzteres glaub ich lieber wäre...

korrigiert mich wenn ich mist rede ;)

mfg
soa2ii
cykes
cykes 24.03.2006 um 07:50:55 Uhr
Goto Top
Hi,

es ist zwar schon eine Weile her, daß ich programmiert habe,
aber wenn Du wirklich alle berechneten oder erstellten Werte,
nachdem die Schleife durchgelaufen ist, zur Weiterverabeitung benötigst,
dann solltest Du die Werte in einem Array bzw. in einer Liste speichern,
diese kannst Du dann in einer weiteren Schelife problemlos wieder
auslesen.

Gruß

cykes
chriss-330
chriss-330 24.03.2006 um 08:03:31 Uhr
Goto Top
danke, das problem ist blos das ich von arrays leider keine ahnung habe wie ich die speicher, weder wieder auslesen kann face-sad

danke trotzdem !
fachinformatiker
fachinformatiker 24.03.2006 um 08:12:17 Uhr
Goto Top
Initialisierung:
dim array[9] as float

Jetzt hast array ibs array[9] als normale float-Variablen wenn es so sehen willst.
Nur als Beispiel
gabrielgn
gabrielgn 24.03.2006 um 08:48:54 Uhr
Goto Top
Ich weiss jetzt nicht wie es in deinem Fall aussieht, weil ich kein Experte in C bzw. C++ bin, aber in Java gibt es so was wie "List". Da braucht man nicht das Objekt mit einem gewissen Initialwert, wie es bei Arrays der Fall ist, zu initialisieren sondern durch die Methode add() kann man einen Wert in der Liste des Objekts hinzufügen.
fachinformatiker
fachinformatiker 24.03.2006 um 08:52:23 Uhr
Goto Top
In Perl kann man an Arrays auch immer mehr anhängen oder wieder welche entfernen.

Mit C++-Arrays geht das nicht.
chriss-330
chriss-330 24.03.2006 um 09:05:21 Uhr
Goto Top
ah, ok - und wie muss ich das dann in meine do-while rein schreiben, das der dann immer automatisch das nächste array nimmt? also das er beim ersten durchgang dann den wert in array reinschreibt, und beim 2. durchgang dann den wert in array[1] reinschreibt?
fachinformatiker
fachinformatiker 24.03.2006 um 09:07:41 Uhr
Goto Top
Entweder du nimmst eine Variable, die du am Ende von der Schleife um eins hochzählst:
do
{array[$i]=$variable;
$i++; 0
while(sonstwas)
oder du nimmst gleich eine for-Schleife
for ($i=0;$i<=$wert;$i++)
{
array[$i]=$variable;
}
chriss-330
chriss-330 24.03.2006 um 09:16:44 Uhr
Goto Top
besten dank an alle !

werd ich gleich mal ausprobieren
Metzger-MCP
Metzger-MCP 24.03.2006 um 10:32:59 Uhr
Goto Top
Moin Leutz

Ich weis zwar nicht ob ich die Frage richtig verstehe!
Aber ich versuche es mal.

Du hast also eine DO WHILE Schleife, die in irgendeiner Weise ein Wert "W" produziert.
Dieser Wert W soll jetzt aber gegen überschreiben gesichert werden, so das du also eine Chronik des Wertes W bekommst oder?

Wenn das so ist, brauchst du

  • ein/(zwei) Positionsvariable P/(Q) P ist Position x-ter Chronik Wert,
  • Array A[x] mit der Anzahl x Speicherstellen.
  • eine Wertevariable W

Hinweis zu Bereichen / Variablen

Jede normale Variable ist ein Bereich mit nur einem Wert
Ein Bereich kann aber eine Variable mit mehreren Werten haben

(int P) ist eigentlich das gleiche wie int P face-smile


im groben sollte das dann wie folgt aussehen

Variablen deklarieren ( nur Beispiele )

P als Datentyp definieren und mit 0 deklarieren. ( int P=0 )
Q als Datentyp definieren und mit 0 deklarieren. ( int Q=0 )
W als Datentyp definieren ( int W=0 )
A[x] als Datentyp definieren. ( int A[99] ) hier können nun 100 Werte gespeichert werden


Program Begin

Do

W = berechneter Wert hier wird W mit dem Berechteten Wert belegt
Q = P
Q wird mit P belegt.
A[P] = W hier wird die Chronologische Position P im Array A mit Wert W belegt

P++
hier wird die Chronologische Position P um 1 erhöht
While

ausgabe wert = A[Q] // hier wird die Chronologische Position Q im Array A abgefragt

Program Ende

Q ist eigentlich P. Ich denke aber P solltest du zur eigenen Sicherheit nur vom Programm ändern lassen. Dann kannst du dir nicht ausversehen deine " Werte Chronik " überschreiben.
Arbeite lieber mit Q zum auslesen und mit P zum schreiben. Wenn du mit Q falsche Werte liest ist das nicht so schlimm als würdest du mit P, falsche Stellen überschreiben. &#61514;

Mfg Metzger
chriss-330
chriss-330 24.03.2006 um 11:15:49 Uhr
Goto Top
do
{
printf ("Bitte Nummer des einzulesenden Digitaleingangs angeben z.b. für 2^1 geben Sie 1 ein:")
scanf ("%s", &w);
array[p]=w;
clrscr();
printf ("Wollen Sie noch einen Digitalen Eingang einlesen? j/n")
scanf ("%c", &janein);
p++;
}
while (janein = j);

so währe das dann in meinem falle.

ist das so richtig ?

und ich kann dann auf die daten im array wieder zugreifen wie folgt?

if (array= 1)
{
...
}
fachinformatiker
fachinformatiker 24.03.2006 um 11:39:32 Uhr
Goto Top
----------------------------------------------------------------------------------------------------------------
do
{
printf ("Bitte Nummer des
einzulesenden Digitaleingangs angeben z.b.
für 2^1 geben Sie 1 ein:")
scanf ("%s", &w);
array[p]=w;
clrscr();
printf ("Wollen Sie noch einen
Digitalen Eingang einlesen? j/n")
scanf ("%c", &janein);
p++;
}
while (janein = j);

so währe das dann in meinem falle.

ist das so richtig ?

und ich kann dann auf die daten im array
wieder zugreifen wie folgt?

if (array= 1)
{
...
}
Syntaxfehler, du meintest wohl eher:
if (array==1)
{
...
}
Und bei dem while würde es auch mehr Sinn machen, das 2. Gleichheitszeichen zu setzen. Kennst du den Unterschied ?
Hast wohl noch nicht viel mit C++ gemacht ?
Und du musst den Array vorher initialisieren und p einen Startwert(0) geben, sonst müsste es funktionieren. Hast es noch nicht getestet ?
Metzger-MCP
Metzger-MCP 24.03.2006 um 13:15:41 Uhr
Goto Top
Ich denke, er hatte sich nur auf den Wesentlichen Teil ( do while ) bezogen face-smile hast aber mit den == und = recht, blöd wenn man beim überprüfen werde setzt face-smile

Mfg Metzger
chriss-330
chriss-330 01.04.2006 um 16:10:13 Uhr
Goto Top
hallo,

so, ich hab das jetzt mal soweit alles. jetzt hab ich blos das problem, das wenn ich das programm laufen lasse, und er dann den text ausgibt, das er bei dem bereich wo es darum geht ob eines der arrays 8 ist, egal ob eines 8 ist oder nicht er die zeile ausgibt, das es 8 ist. das gleiche problem hab ich bei der 0.
Hier mal der code:
do
{
printf ("Bitte Nummer des einzulesenden Digitaleingangs angeben - z.b. für 2^1 geben Sie 1 ein: \n");
scanf ("%d", &w);
array[p]=w;
printf ("Wollen Sie noch einen Digitalen Eingang einlesen? ja = 1 / nein = 2: ");
scanf ("%d", &janein);
p++;
}
while (janein == 1);
array[1] == 0 array[2] == 0 array[3] == 0 array[4] == 0 array[5] == 0 array[6] == 0 array[7] == 0 array[8] == 0 array[9] == 0 array[10] == 0 array[11] == 0 array[12] == 0 array[13] == 0 array[14] == 0
{
printf ("CheckVolt(SKS_DA_3.00, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.00, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 1 array[2] == 1 array[3] == 1 array[4] == 1 array[5] == 1 array[6] == 1 array[7] == 1 array[8] == 1 array[9] == 1 array[10] == 1 array[11] == 1 array[12] == 1 array[13] == 1 array[14] == 1
{
printf ("CheckVolt(SKS_DA_3.01, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.01, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 2 array[2] == 2 array[3] == 2 array[4] == 2 array[5] == 2 array[6] == 2 array[7] == 2 array[8] == 2 array[9] == 2 array[10] == 2 array[11] == 2 array[12] == 2 array[13] == 2 array[14] == 2
{
printf ("CheckVolt(SKS_DA_3.02, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.02, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 3 array[2] == 3 array[3] == 3 array[4] == 3 array[5] == 3 array[6] == 3 array[7] == 3 array[8] == 3 array[9] == 3 array[10] == 3 array[11] == 3 array[12] == 3 array[13] == 3 array[14] == 3
{
printf ("CheckVolt(SKS_DA_3.03, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.03, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 4 array[2] == 4 array[3] == 4 array[4] == 4 array[5] == 4 array[6] == 4 array[7] == 4 array[8] == 4 array[9] == 4 array[10] == 4 array[11] == 4 array[12] == 4 array[13] == 4 array[14] == 4
{
printf ("CheckVolt(SKS_DA_3.04, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.04, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 5 array[2] == 5 array[3] == 5 array[4] == 5 array[5] == 5 array[6] == 5 array[7] == 5 array[8] == 5 array[9] == 5 array[10] == 5 array[11] == 5 array[12] == 5 array[13] == 5 array[14] == 5
{
printf ("CheckVolt(SKS_DA_3.05, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.05, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 6 array[2] == 6 array[3] == 6 array[4] == 6 array[5] == 6 array[6] == 6 array[7] == 6 array[8] == 6 array[9] == 6 array[10] == 6 array[11] == 6 array[12] == 6 array[13] == 6 array[14] == 6
{
printf ("CheckVolt(SKS_DA_3.06, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.06, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 7 array[2] == 7 array[3] == 7 array[4] == 7 array[5] == 7 array[6] == 7 array[7] == 7 array[8] == 7 array[9] == 7 array[10] == 7 array[11] == 7 array[12] == 7 array[13] == 7 array[14] == 7
{
printf ("CheckVolt(SKS_DA_3.07, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.07, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 8 array[2] == 8 array[3] == 8 array[4] == 8 array[5] == 8 array[6] == 8 array[7] == 8 array[8] == 8 array[9] == 8 array[10] == 8 array[11] == 8 array[12] == 8 array[13] == 8 array[14] == 8
{
printf ("CheckVolt(SKS_DA_3.08, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.08, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 9 array[2] == 9 array[3] == 9 array[4] == 9 array[5] == 9 array[6] == 9 array[7] == 9 array[8] == 9 array[9] == 9 array[10] == 9 array[11] == 9 array[12] == 19 array[13] == 9 array[14] == 9
{
printf ("CheckVolt(SKS_DA_3.09, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.09, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 10 array[2] == 10 array[3] == 10 array[4] == 10 array[5] == 10 array[6] == 10 array[7] == 10 array[8] == 10 array[9] == 10 array[10] == 10 array[11] == 10 array[12] == 10 array[13] == 10 array[14] == 10
{
printf ("CheckVolt(SKS_DA_3.10, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.10, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 11 array[2] == 11 array[3] == 11 array[4] == 11 array[5] == 1 array[6] == 11 array[7] == 11 array[8] == 11 array[9] == 11 array[10] == 11 array[11] == 11 array[12] == 11 array[13] == 11 array[14] == 11
{
printf ("CheckVolt(SKS_DA_3.11, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.11, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 12 array[2] == 12 array[3] == 12 array[4] == 12 array[5] == 12 array[6] == 12 array[7] == 12 array[8] == 12 array[9] == 12 array[10] == 12 array[11] == 12 array[12] == 12 array[13] == 12 array[14] == 12
{
printf ("CheckVolt(SKS_DA_3.12, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.12, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 13 array[2] == 13 array[3] == 13 array[4] == 13 array[5] == 13 array[6] == 13 array[7] == 13 array[8] == 13 array[9] == 13 array[10] == 13 array[11] == 13 array[12] == 13 array[13] == 13 array[14] == 13
{
printf ("CheckVolt(SKS_DA_3.13, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.13, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 14 array[2] == 14 array[3] == 14 array[4] == 14 array[5] == 14 array[6] == 14 array[7] == 14 array[8] == 14 array[9] == 14 array[10] == 14 array[11] == 14 array[12] == 14 array[13] == 14 array[14] == 14
{
printf ("CheckVolt(SKS_DA_3.14, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.14, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}
array[1] == 15 array[2] == 15 array[3] == 15 array[4] == 15 array[5] == 15 array[6] == 15 array[7] == 15 array[8] == 15 array[9] == 15 array[10] == 15 array[11] == 15 array[12] == 15 array[13] == 15 array[14] == 15
{
printf ("CheckVolt(SKS_DA_3.15, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);\n");
}
else
{
printf ("CheckVolt(SKS_DA_3.15, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);\n");
}

vielleicht kann mir ja einer helfen und sagen warum er immer bei 8 und 0 die zeile ausgibt die in der if steht, auch wenn er eigendlich die zeile ausgeben müsste die in der else steht.
Biber
Biber 02.04.2006 um 15:00:24 Uhr
Goto Top
Moin chriss-330,
das wird vermutlich daran liegen, dass Du den Array-Elementen keinen Anfangswert zugewiesen hast und da eben Zufallszahlen drinstehen.

Wie hast Du denn die Variable "array" definiert? Mit "int array[16];"?

Wenn ich Deinen (geringfügig angepassten) Schnipsel nur mit einer "int array[16];"-Initalisierung und ohne Wertzuweisung laufen lasse und mir die 16 Arraywerte anzeigen lasse, nachdem ich nur 3 tatsächlich eingegeben habe, kommt bei mir so etwas raus:
Bitte Nummer des einzulesenden Digitaleingangs angeben -
 z.b. fuer 2^1 geben Sie 1 ein:
Geben Sie 99 zum Starten  / keinen weiteren Eingang ein.
Digitaleingang # 1:... 5
Digitaleingang # 2:... 6
Digitaleingang # 3:... 7
Digitaleingang # 4:... 99
--
Eingegebene Werte :  3
--
wert von array[ 0] ist  5
wert von array[ 1] ist  6
wert von array[ 2] ist  7
wert von array[ 3] ist 2013314410
wert von array[ 4] ist 2293728
wert von array[ 5] ist 2013314410
wert von array[ 6] ist 2013471312
wert von array[ 7] ist -1
wert von array[ 8] ist 2293624
wert von array[ 9] ist 2293728
wert von array[10] ist 2013314410
wert von array[11] ist 2013471392
wert von array[12] ist -1
wert von array[13] ist 2293624
wert von array[14] ist 2013300854
wert von array[15] ist 4274392
! 0 CheckVolt(SKS_DA_3.00, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 1 CheckVolt(SKS_DA_3.01, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 2 CheckVolt(SKS_DA_3.02, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 3 CheckVolt(SKS_DA_3.03, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 4 CheckVolt(SKS_DA_3.04, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
= 5 CheckVolt(SKS_DA_3.05, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);
= 6 CheckVolt(SKS_DA_3.06, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);
= 7 CheckVolt(SKS_DA_3.07, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);
! 8 CheckVolt(SKS_DA_3.08, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
...
( Die Prefixe "! 4 CheckVolt(..." oder "= 5 CheckVolt(..." habe ich mir nur anzeigen lassen, um zu sehen, ob er die "richtigen" if..else..Zweige ansteuert.)

Oben kannst Du sehen, dass in den Array-Elementen 3 bis 15, denen ich nichts zugewiesen habe, halt irgendeine Grütze drinsteht.

Wenn du am Anfang zum Beispiel alle array-Werte mit "-1" oder "4711" initialisierst, kann da nichts schiefgehen.

Bsp:
#define MAXLEN_MYARRAY 16
// bool ascan( int a, int toScan4);
// bool ascan( int a, int toScan4, bool withprintf);
int main (){
int w=0, p=0, pmax=-1, array[MAXLEN_MYARRAY];
<b>for (p=0; p<MAXLEN_MYARRAY; p++) array[p]=-1;</b>  // <--------- Initialisieren mit -1 (oder sonst einem Wert)
printf ("Bitte Nummer des einzulesenden Digitaleingangs angeben - \n z.b. fuer 2^1 geben Sie 1 ein: \n");  
printf ("Geben Sie 99 zum Starten  / keinen weiteren Eingang ein. \n");  
for (p=0;p<MAXLEN_MYARRAY;p++){
printf( "Digitaleingang #%2d:... ", p+1); scanf ( "%d", &w);  
if ( w<0 || (w >= MAXLEN_MYARRAY -1 && w !=99)) {
     printf(">>Fehleingabe! Wertebereich  0...15\n");  p--; continue;  
}     
if (w == 99) break;
// if (ascan( array, w, false)) {
//     printf(">>Den Wert %2d hatten wir schon..try again..\n", w);  
//     p--; continue;
// }   
array[p]=w;
pmax++;
}
....
Gruß Biber