Liste abarbeiten, wie am elegantesten?
Verfasst: Mi Jan 04, 2012 5:03 pm
Hallo zusammen,
ich habe folgenden Code geschrieben:
Mir geht es jetzt hauptsächlich darum, wie ich die Liste mit der homologen Reihe der Alkane am besten aufrufen kann. Ist es möglich, die Namen der einzelnen Alkane in eine Art Tabelle zu erfassen, und dann mit nem Pointer aufzurufen?
Beim AVR Assembler ist dies so in der Art möglich:
Dabei wird immer ein Byte aufgerufen, ins Register geladen und der Pointer um 1 erhöht. Ist so etwas auch in C möglich?
ich habe folgenden Code geschrieben:
Code: Alles auswählen
#include <stdio.h>
int main(void)
{
int c, h, atom;
char text[]="**********************************";
printf("\nWieviel C-Atome?");
scanf("%i",&c);
h=c*2+2;
atom = c + h;
printf("\nDas Atom bestitz %i C-Atome und %i H-Atome, insgesamt %i Atome.\n", c, h, atom);
printf("\nSummenformel: C%iH%i\n\n",c,h);
switch (c)
{
case 1: printf("\nMethan");break;
case 2: printf("\nEthan");break;
case 3: printf("\nPropan");break;
case 4: printf("\nButan");break;
case 5: printf("\nPentan");break;
case 6: printf("\nHexan");break;
case 7: printf("\nHeptan");break;
case 8: printf("\nOktan");break;
case 9: printf("\nNonan");break;
case 10: printf("\nDecan");break;
}
printf("\n\n%s\n\n",text);
return 0;
}
Beim AVR Assembler ist dies so in der Art möglich:
Code: Alles auswählen
.include "m8def.inc"
ldi R17, 40 ; Anzahl der Werte
ldi R16, 0xFF
out DDRB, R16 ; Port B: Ausgang
ldi ZL, LOW(daten*2) ; Low-Byte der Adresse in Z-Pointer
ldi ZH, HIGH(daten*2) ; High-Byte der Adresse in Z-Pointer
loop:
lpm R0, Z+ ; durch Z-Pointer adressiertes Byte
; in R0 laden und Z erhöhen
out PORTB, R0 ; an PORTB ausgeben
dec R17 ; Zähler -1
brne loop
ende:
rjmp ende ; Endlosschleife
daten:
.db 0b11111111
.db 0b10101010
.db 0b01010101
...