Forum: Compiler & IDEs auf Tabelle zugreifen


von Peter Z. (Gast)


Lesenswert?

Hallo,
wie kann ich das am besten in C schreiben?
1
  float P;
2
  unsigned char S1,S2,S3,S4;
3
  // Schalter S1-4 einlesen
4
5
6
  P = [S1]{1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8};
7
  P *= [S2]{0.01,0.1,1.0,10.0,100.0,1000.0,10000.0,-0.01,-0.1};
leider bekomme ich Error #29 "expected an expression"

von Dr. Sommer (Gast)


Lesenswert?

C-Buch nehmen und Abschnitt über Arrays lesen.

von Daniel V. (danvet)


Lesenswert?

?????
Was möchtest du machen???

von Hans M. (hansilein)


Lesenswert?

so vielleicht?

 float P;
  unsigned char S1,S2,S3,S4;
  // Schalter S1-4 einlesen

char[] prescaler = {0.01,0.1,1.0,10.0,100.0,1000.0,10000.0,-0.01,-0.1};
char[] num ={1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8};

  P = num[s1]*prescaler[S2];

von Stefan E. (sternst)


Lesenswert?

1
  P =  (float[]){1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8}[S1];
2
  P *= (float[]){0.01,0.1,1.0,10.0,100.0,1000.0,10000.0,-0.01,-0.1}[S2];

von Daniel V. (danvet)


Lesenswert?

???
Ich verstehe leider immer noch nur Bahnhof.

von Dr. Sommer (Gast)


Lesenswert?

Daniel V. schrieb:
> Ich verstehe leider immer noch nur Bahnhof.
Er möchte auf ein Array zugreifen. Hat aber keine Ahnung von C und lässt 
daher das Forum die "Arbeit" machen, anstelle es selber lernen zu 
wollen.

von Daniel V. (danvet)


Lesenswert?

Dr. Sommer schrieb:
> Daniel V. schrieb:
>> Ich verstehe leider immer noch nur Bahnhof.
> Er möchte auf ein Array zugreifen. Hat aber keine Ahnung von C und lässt
> daher das Forum die "Arbeit" machen, anstelle es selber lernen zu
> wollen.

Nun ja. Aber die gebotenen Lösungsvorschläge verstehe ich leider auch 
nicht.

von Dr. Sommer (Gast)


Lesenswert?

Daniel V. schrieb:
> Nun ja. Aber die gebotenen Lösungsvorschläge verstehe ich leider auch
> nicht.
Man legt ein Array an und greift mit den Indices S1/S2 drauf zu. Du bist 
auch ein Kandidat für ein C-Buch...

von Peter Z. (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Er möchte auf ein Array zugreifen.

Stimmt!

> Hat aber keine Ahnung von C und lässt
> daher das Forum die "Arbeit" machen, anstelle es selber lernen zu
> wollen.

Stimmt nicht wirklich.
Meine Lösung dazu:
1
  float P;
2
  unsigned char S1,S2,S3,S4;
3
  const float tab1[10] = {1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8};
4
  const float tab2[10] = {0.01,0.1,1.0,10.0,100.0,1000.0,10000.0,-0.01,-0.1};
5
6
  // Schalter S1-4 einlesen
7
8
  P = tab1[S1] * tab2[S2];
Ich wollte lediglich wissen, ob noch eine andere Syntax möglich ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter Zz schrieb:
> Ich wollte lediglich wissen, ob noch eine andere Syntax möglich ist.

Wozu?

von Dr. Sommer (Gast)


Lesenswert?

Peter Zz schrieb:
> Ich wollte lediglich wissen, ob noch eine andere Syntax möglich ist.
Wenn du deinen Ansatz gepostet hättest hätte man immerhin ersehen können 
was das überhaupt werden soll.

von Garden (Gast)


Lesenswert?


von Daniel V. (danvet)


Lesenswert?

Dr. Sommer schrieb:
> Daniel V. schrieb:
>> Nun ja. Aber die gebotenen Lösungsvorschläge verstehe ich leider auch
>> nicht.
> Man legt ein Array an und greift mit den Indices S1/S2 drauf zu. Du bist
> auch ein Kandidat für ein C-Buch...

Hmm.. wie man auf ein Array zugreift weiss ich.

Aber das hier...

Peter Zz schrieb:
> Hallo,
> wie kann ich das am besten in C schreiben?  float P;
>   unsigned char S1,S2,S3,S4;
>   // Schalter S1-4 einlesen
>
>   P = [S1]{1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8};
>   P *= [S2]{0.01,0.1,1.0,10.0,100.0,1000.0,10000.0,-0.01,-0.1};
> leider bekomme ich Error #29 "expected an expression"

... kann ich beim Besten Willen nicht verstehen. Ausserdem verwirrt der 
Kommentar "//Schalter S1-4 einlesen".
Woher soll man da wissen, dass S1, S2, S3, S4 Zahlen beinhalten? Liefert 
ein Schalter zahlen? Und dann kommt auch noch eine Fehlermeldung.

Und am Schluss kommt dieser Beitrag:

Peter Zz schrieb:
> Stimmt nicht wirklich.
> Meine Lösung dazu:  float P;
>   unsigned char S1,S2,S3,S4;
>   const float tab1[10] = {1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8};
>   const float tab2[10] =
> {0.01,0.1,1.0,10.0,100.0,1000.0,10000.0,-0.01,-0.1};
>
>   // Schalter S1-4 einlesen
>
>   P = tab1[S1] * tab2[S2];
> Ich wollte lediglich wissen, ob noch eine andere Syntax möglich ist.

Ich liebe es... :-(

von Dr. Sommer (Gast)


Lesenswert?

Daniel V. schrieb:
> ... kann ich beim Besten Willen nicht verstehen.
Da steht ja auch Unsinn, da gibts nix zu verstehen.
> Ausserdem verwirrt der
> Kommentar "//Schalter S1-4 einlesen".
Bester Programmierstil.
> Woher soll man da wissen, dass S1, S2, S3, S4 Zahlen beinhalten?
Weil da "unsigned char" steht. Das ist ein Integer-Datentyp.
> Liefert
> ein Schalter zahlen? Und dann kommt auch noch eine Fehlermeldung.
Keiner weiß es? Vielleicht sind das Bitmasken, d.h. ein Bit in der Zahl 
= ein Schalter.

Daniel V. schrieb:
> Ich liebe es... :-(
Das ist doch wirklich ganz einfach. Man legt zwei Arrays tab1 und tab2 
an und greift mit [] drauf zu.

von Daniel V. (danvet)


Lesenswert?

Dr. Sommer schrieb:
> Daniel V. schrieb:
>> ... kann ich beim Besten Willen nicht verstehen.
> Da steht ja auch Unsinn, da gibts nix zu verstehen.

Woher weisst du dann, was er will?
Du hast geraten?

Dr. Sommer schrieb:
> Daniel V. schrieb:
>> Ich liebe es... :-(
> Das ist doch wirklich ganz einfach. Man legt zwei Arrays tab1 und tab2
> an und greift mit [] drauf zu.

Naja, ich meinte "ich liebe es", wenn er dann am Ende vom Thread seine 
Lösung präsentiert, die er am Anfang hätte posten sollen mit der Frage: 
"Funktioniert das so".

von Dr. Sommer (Gast)


Lesenswert?

Daniel V. schrieb:
> Woher weisst du dann, was er will?
> Du hast geraten?
jup.

Daniel V. schrieb:
> Naja, ich meinte "ich liebe es", wenn er dann am Ende vom Thread seine
> Lösung präsentiert
Tja, so ist das im Internet...

von Daniel V. (danvet)


Lesenswert?

Dr. Sommer schrieb:
> Daniel V. schrieb:
>> Woher weisst du dann, was er will?
>> Du hast geraten?
> jup.
>
Also hast du auch nicht gewusst, was er will :-)

von Peter Z. (Gast)


Lesenswert?

Daniel V. schrieb:
> Also hast du auch nicht gewusst, was er will :-)

Wieso wisst ihr nicht, was ich will?
Ist eure Kristallkugel defekt? ;-)

Was ich im Anfangspost gepostet habe, ist ein C ähnlicher Pseudocode.
Ich frage dann, wie kann ich das in C programmieren.
Ich kenne natürlich die Syntax für Arrays, was mich untrieb war jedoch 
der Wunsch das Array, da es nur ein einziges Mal gebraucht wird, in der 
selben Zeile zu haben. Soetwas geht, aber anscheinend nur bei char.
1
// Schalter S1-4 einlesen
soll nur bedeuten: hier kommt der Code zum einlesen der Schalter S1-4 
hin, ich will hier nicht mit für den Thread unwichtigen Einzelheiten 
ablenken.

von Stefan E. (sternst)


Lesenswert?

Peter Zz schrieb:
> Soetwas geht, aber anscheinend nur bei char.

Hä? Ich hab dir doch die Lösung gepostet.

von Karl H. (kbuchegg)


Lesenswert?

Peter Zz schrieb:

> Ich kenne natürlich die Syntax für Arrays, was mich untrieb war jedoch
> der Wunsch das Array, da es nur ein einziges Mal gebraucht wird, in der
> selben Zeile zu haben. Soetwas geht, aber anscheinend nur bei char.

Seit C99 gibt es dafür eine Syntax.
Wurde von Stefan Ernst ja auch schon gepostet.

Bei C-Versionen davor gab es da nichts. Und wenn ich hinzufügen darf: 
Das hat auch nicht wirklich wer großartig vermisst.

Ja, String Literale waren immer schon ein wenig speziell.

von Peter Z. (Gast)


Lesenswert?

Stefan Ernst schrieb:
> Hä? Ich hab dir doch die Lösung gepostet.
1
P =  (float[]){1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8}[S1];
Ist eine sehr ungewöhnliche Syntax und
gab bei mir nur Fehlermeldungen,
da habe ich gedacht, du veräppelst mich...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter Zz schrieb:
> Ist eine sehr ungewöhnliche Syntax und gab bei mir nur Fehlermeldungen,

Diese Syntax wird vom GCC aber schon seit vielen Jahren unterstützt.
Entweder hast du eine uralte Compilerversion, oder der Rest von deinem
Programm ist fehlerhaft.

von Stefan E. (sternst)


Lesenswert?

Yalu X. schrieb:
> Entweder hast du eine uralte Compilerversion, oder der Rest von deinem
> Programm ist fehlerhaft.

Oder er hat seinem Compiler einen zu alten Standard aufgezwungen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Stefan Ernst schrieb:
> Oder er hat seinem Compiler einen zu alten Standard aufgezwungen.

Das ist dann aber schon mutwillig ,-)

von Peter Z. (Gast)


Lesenswert?

Stefan Ernst schrieb:
> Oder er hat seinem Compiler einen zu alten Standard aufgezwungen.

Keine Ahnung, ich habe einfach Atmel Studio 6 instaliert.

Wo kann ich nachschauen, ob ich dem Compiler einen zu alten Standart 
aufgezwungen habe?

von Peter Z. (Gast)


Lesenswert?

Hurra, mit dem Atmel Studio 6 funktioniert das.
1
  P =  (float[]){1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8}[S1];

Bin schon ganz wuschig,
habe verschiedene Projekte am laufen und hatte versehentlich den
µVision3 / RealView ADuC7126 von Keil benutzt.

Hier kann mir wohl niemand sagen, wie ich dem µVision beibringe diese 
Syntax zu akzeptieren?

von Karl H. (kbuchegg)


Lesenswert?

Peter Zz schrieb:
> Hurra, mit dem Atmel Studio 6 funktioniert das.
>
1
>   P =  (float[]){1.0,1.25,1.6,2.0,2.5,3.15,4,5,6.3,8}[S1];
2
>
>
> Bin schon ganz wuschig,
> habe verschiedene Projekte am laufen und hatte versehentlich den
> µVision3 / RealView ADuC7126 von Keil benutzt.
>
> Hier kann mir wohl niemand sagen, wie ich dem µVision beibringe diese
> Syntax zu akzeptieren?

Gar nicht.
Entweder er kann C99 oder er kanns nicht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter Zz schrieb:
> Hier kann mir wohl niemand sagen, wie ich dem µVision beibringe diese
> Syntax zu akzeptieren?

Mit --c99, falls es sich bei dem Compiler um den hier beschriebenen
handelt:

  http://www.keil.com/support/man/docs/armccref/armccref_BCFJIIJJ.htm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.