auf Tabelle zugreifen

Gast #3360633
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"
Gast #3360765
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.
#3361613
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... :-(
Gast #3361990
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.
#3362001
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".
Gast #3362174
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.
#3362210
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.
Gast #3363734
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?
#3363780
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren