Liste abarbeiten, wie am elegantesten?

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Liste abarbeiten, wie am elegantesten?

Beitrag von DANrulz81 » Mi Jan 04, 2012 5:03 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Liste abarbeiten, wie am elegantesten?

Beitrag von Xin » Mi Jan 04, 2012 6:03 pm

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] );
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Liste abarbeiten, wie am elegantesten?

Beitrag von DANrulz81 » Mi Jan 04, 2012 6:55 pm

Super, Danke.

Antworten