Seite 1 von 1

Liste abarbeiten, wie am elegantesten?

Verfasst: Mi Jan 04, 2012 5:03 pm
von DANrulz81
Hallo zusammen,

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;
}
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:

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
    ...
Dabei wird immer ein Byte aufgerufen, ins Register geladen und der Pointer um 1 erhöht. Ist so etwas auch in C möglich?

Re: Liste abarbeiten, wie am elegantesten?

Verfasst: Mi Jan 04, 2012 6:03 pm
von Xin
Wo ist denn der Rest der Leute, die Frage ist doch gut zu beantworten? ^^


Probiere das statt dem Switch:

Code: Alles auswählen

  char * alkane[] = { "nix", "Methan", "Ethan", ... };

  if( c > 0 && c <= 10 )
    printf( "\n%s", alkane[c] );

Re: Liste abarbeiten, wie am elegantesten?

Verfasst: Mi Jan 04, 2012 6:55 pm
von DANrulz81
Super, Danke.