DNA Aufgabe in Englisch!



  • Wo sind deine Ansätze?
    Wenn es mit grundlegendem wie Ein- und Ausgabe von Variablen noch nicht hinhaut, so wie hier, http://www.c-plusplus.net/forum/311056 dann hats noch nicht allzu viel Sinn mit Themen wie verkettete Listen zu beginnen.



  • Ich würde mir zum Anfang eine echte Genomliste holen (z.B. der Fruchtfliege: http://hgdownload.cse.ucsc.edu/goldenPath/droEre2/bigZips/droEre2.fa.masked.gz 38 MB) und ein Programm entwerfen, das daraus eine "singly-linked list of strings of length one" (einfach verkettete Liste von Strings(!) mit der Länge 1) macht. Mich juckts ja schon, aber Du willst Dir Deine Punkte sicherlich redlich selbst verdienen ;).

    Wenn die Kette steht, wenn Du es also sicher handhaben kannst, sind die zwei Funktionen auch kein Problem mehr.

    viele grüße
    ralph



  • Einfache Ein und Ausgaben bekomme ich noch hin, aber bring mal alles in einen HUT zusammen, dass muss ich noch ueben.

    Hier meine darstellung.

    Linked list
    @->‘A’ -> ‘T’ -> ‘T’ ->’G’

    Linked list array??
    @->[‘A’,1] -> [‘T’,2] -> [‘T’, 3]->[’G’,4]

    1. Eingaben einlesen....
    2. Node insert solange eingabe evt while schleife
    3. string length von 1 "kein plan"
    4. pruefen ob leer, "if next -> node !=NULL"
    5. Ausgabe der node

    Fuer singly list habe ich hier schon etwas aufgestellt:

    struct node
    {
    int info;
    struct node *next;
    }*start

    //code code....

    Werde spaeter noch etwas dazu proggen...! Bin fuer jede Hilfe dankbar!



  • machupicchu schrieb:

    Werde spaeter noch etwas dazu proggen...!

    mach das.
    wir gucken später wieder rein.
    bis dann!



  • Habe jetzt hier etwas geschrieben. Zuerst die structur, der start pointer zeigt auf diese, dann meine methode percentage. Ich lese meine eingaben ein, danach prüfe ich ob die eingaben gleich null sind, wenn ja dann habe ich meinen header gefunden ansonsten next solange nicht null und neuen node generieren. Ich weiß, beim einlesen habe ich da einen fehler, verstehe das mit der structur nicht so ganz....!

    #include<stdio.h>

    //structure declaration for the node
    struct node{

    char string[1];
    struct node *next;
    }*start

    void percentage(){
    scanf("%s", &string);
    if(start == NULL)
    start = header;
    else
    while(start->next != NULL)
    {
    start = start->next;
    start->next = header;

    }

    int main(){
    percentage();

    return 0;
    }



  • Beim Einlesen ist gut ... das kompiliert ja nicht mal!



  • Immer nur am meckern hier! 😃
    Wenn ich es richtig machen würde, dann würde ich hier ja nicht fragen logisch oder??? Also, ich habe wirklich kein plan!



  • Deine Strukturmember haben 0 Speicher.
    Da musst du dir etwas mit malloc oder calloc einfallen lassen.
    Oder eben mal nachlesen, wie sowas geht.
    🙂



  • Hallo,

    ich habe jetzt mein code geschrieben und das ist auch jetzt ausfuehrbar. Wenn ich aber z.B. die Buchstabe a eingebe, dann bekomme ich glaube ich die speicheradresse heraus. Ich muss ja eine stringlaenge von 1 haben char string[1]? und dann anschliessend diese als prozent ausgeben! Kann mir da jemand weiter helfen???

    #include<stdio.h>
    #include<conio.h>
    #include<malloc.h>
    
    struct Node
    {  
     int Data;  
     struct Node *Next;
    }*Head;
    
    void addList(int num)
    {  
      struct Node *temp;  
    
      temp=(struct Node *)malloc(sizeof(struct Node));  
      temp->Data = num;  
    
      if (Head == NULL)  
      {  
         //List is Empty  
         Head=temp;
         Head->Next=NULL;
      }  
      else
      {  
         temp->Next=Head;  
         Head=temp;  
      }  
    }
    
    void display()
    {  
      struct Node *current;
    
      current=Head;
    
      if(current==NULL)
      {  
         printf("\nList is Empty");  
      }  
      else  
      {  
          printf("\nElements in the List: ");  
          //traverse the entire linked list  
          while(current!=NULL)
          {  
              printf(" -> %d ",current->Data);
              current=current->Next;  
          }  
          printf("\n");  
      }  
    }
    
    int main(int argc, char *argv[]){
    
              int num;
              printf(" \nEnter a Number to insert in the List: ");  
              scanf("%d",&num);  
              addList(num);
              display();  
    
      fflush(stdin);
      getch();
      return 0;
    
     }
    

  • Mod

    Drück dich mal präzise aus! Einmal kurz Korrekturlesen hilft auch ungemein, damit andere dich nicht gleich als Schlamper abstempeln. Wie willst du einem Computer mitteilen können, was du möchtest, wenn mitdenkende Menschen schon Schwierigkeiten haben, dich zu verstehen?

    machupicchu schrieb:

    Wenn ich aber z.B. die Buchstabe a eingebe, dann bekomme ich glaube ich die speicheradresse heraus.

    Was bekommst du wo heraus? Welche andere Ausgabe erwartest du, wenn du scanf("%d") einen Buchstaben vorsetzt?

    Ich muss ja eine stringlaenge von 1 haben char string[1]?

    char?

    und dann anschliessend diese als prozent ausgeben!

    Welches dieses? Ich weiß es, weil ich den Thread von Anfang an verfolgt habe, aber dieses "dieses" ist nirgendwo in deinem Beitrag. Stattdessen scheint sich "dieses" auf das char string[1] zu beziehen, was völlig irreführend ist.



  • Hi! Also, die Frage habe ich oben aufgeschrieben und die ist doch eigentlich eindeutig. 🙄

    Wenn ich das Code ausfuehre, dass ich hier gepostet habe. Dies wird voerst compiliert und dann ausgefuehrt. Anschliessend oeffnet sich die console und werde aufgefordert etwas einzugeben. Wenn ich z.B. klein a eingebe, dann bekomme ich als Ausgabe die Zahl 30759612 heraus. Wenn ich aber Zahlenwerte z.B. 123 eingebe, dann erhalte ich auch 123. Ich moechte aber bei der Eingabe Buchstaben als Ausgabe erhalten?????



  • machupicchu schrieb:

    Ich moechte aber bei der Eingabe Buchstaben als Ausgabe erhalten?????

    Du weißt es also nicht? 🤡
    Einerseits fragst du nach einer Zahl

    " \nEnter a Number to insert in the List: "

    Andererseits willst du nen Buchstaben als Ausgabe.
    Mild formuliert ist das eine recht eigenwillige Form der Eingabe 🤡 😃
    Vielleicht hilft dir ja eine brauchbare Referenz, damit du dir klar wirst, was du möchtest. Guck mal nach format specifier
    http://www.cplusplus.com/reference/cstdio/scanf/



  • machupicchu schrieb:

    ?????

    Du verzettelst Dich. Niemand fordert von Dir, Millionen von Genom-Moleküle per Hand einzugeben - und mit scanf, fflush(stdin) usw. zu kämpfen. Lass die Liste automatisch erstellen:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct GenomNode
    {
        char molecule[2];   // String braucht noch eine Abschlussnull
        struct GenomNode* next;
    } GenomNode;
    
    GenomNode* createGenomNodes (char genomstring[])
    {
        size_t i, len = strlen (genomstring);
        GenomNode* genomroot;
        GenomNode* genom;
    
        genomroot = (GenomNode*) calloc (1, sizeof(GenomNode));
        if (NULL == genomroot) return NULL;
    
        genom = genomroot;
        for (i=0; i<len; ++i)
        {
            genom->molecule[0] = genomstring[i]; // Abschlussnull brauchts nicht wg. calloc
            genom->next = (GenomNode*) calloc (1, sizeof(GenomNode));
            if (!genom->next) return NULL;
            genom = genom->next;
        }
    
        return genomroot;
    }
    
    void displayGenomNodes (GenomNode* genom)
    {
        puts ("  this   | m |   next");
        puts ("-----------------------");
        while (genom->next)
        {
            printf ("%08X | %s | %08X\n",genom,genom->molecule,genom->next);
            genom = genom->next;
        }
    }
    
    void freeGenomNodes (GenomNode* genom)
    {
        GenomNode* tmp;
        puts("");
        while (genom)
        {
            printf ("free (%08X)\n",genom);
            tmp = genom->next;
            free(genom);
            genom = tmp;
        }
    }
    
    int main (void)
    {
        GenomNode* genomroot = createGenomNodes ("ATATCGATCGATCG");
        if (NULL == genomroot)
        {
            puts ("Fehler bei createGenomeNodes()");
            freeGenomNodes(genomroot);
            return 1;
        }
    
        //Display
        displayGenomNodes (genomroot);
    
        // Free
        freeGenomNodes(genomroot);
    
        return 0;
    }
    

    Den weiteren von Dir zu erstellenden Funktionen übergibst Du dann genomroot - also den ersten Knoten der Liste - und klapperst die Liste wie in display() ab.

    viele grüße
    ralph



  • Memory leak @zeile 25
    :p



  • CJosef schrieb:

    Memory leak @zeile 25
    :p

    Ich lerne ja gern dazu: Wie denn?

    Edit: Ach, ich seh schon. So was Peinliches! 😡

    viele grüße
    ralph



  • Danke rkhb, aber leider ist das nicht was gefragt ist!

    Mal im ernst Leute, versteht irgendeiner von euch ueberhaupt die Frage oder soll ich es ins Deutsche uebersetzen?? Entweder ich kann es oder ich kann es nicht! Ich bin hier in einem Forum und nicht in einer Vorlesung. Ich erwarte Vorschlaege und Tipps in einem Forum. Die Frage ist gut gestellt und auch gut zu verstehen, auch mit Schulenglisch ;-).

    Ein Beispiel fuer die Leute die es noch extra erklaert bekommen haben moechten.

    Jemand moechte von mir wissen,,wie man in C ein halloworld Programm schreiben kann! Ich bin das Forum und sage zu ihm, du musst schon deine Frage praeziser stellen. Was ist HalloWorld oder guck doch mal in der Bibliothek nach. Da gibt es etwas ueber #Preprozessoren, aber vergiss den Editor nicht. Kaffee dazu waere auch noch gut und am besten noch eine pornozeitschrift, weil du keine zeit fuer eine freundin haben wirst. Am besten meldest du dich gleich in einem forum an und versoehnst dich mit anderen jungs. dann hast du das problem mit den frauen nicht mehr, weil du ja so oder so den ganzen tag im forum ueber pn deien sexuellen vorlieben mit den anderen austauschst.

    Zweites Beispiel:

    Ich moechte wissen, was 1kg birnen kosten und nicht 2kg aepfel.
    Verkaufer sagt daraufhin, ich habe bananen im angebot.

    I THINK IT MAKE THENSE OR?



  • machupicchu schrieb:

    I THINK IT MAKE THENSE OR?

    Also hier versagt mein Schulenglisch völlig. Ist das was Unanständiges? Ja bitte, übersetze doch mal den Text.

    viele grüße
    ralph



  • machupicchu schrieb:

    Danke rkhb, aber leider ist das nicht was gefragt ist!

    Mal im ernst Leute, versteht irgendeiner von euch ueberhaupt die Frage oder soll ich es ins Deutsche uebersetzen?? Entweder ich kann es oder ich kann es nicht! Ich bin hier in einem Forum und nicht in einer Vorlesung. Ich erwarte Vorschlaege und Tipps in einem Forum. Die Frage ist gut gestellt und auch gut zu verstehen, auch mit Schulenglisch ;-).

    Ein Beispiel fuer die Leute die es noch extra erklaert bekommen haben moechten.

    Jemand moechte von mir wissen,,wie man in C ein halloworld Programm schreiben kann! Ich bin das Forum und sage zu ihm, du musst schon deine Frage praeziser stellen. Was ist HalloWorld oder guck doch mal in der Bibliothek nach. Da gibt es etwas ueber #Preprozessoren, aber vergiss den Editor nicht. Kaffee dazu waere auch noch gut und am besten noch eine pornozeitschrift, weil du keine zeit fuer eine freundin haben wirst. Am besten meldest du dich gleich in einem forum an und versoehnst dich mit anderen jungs. dann hast du das problem mit den frauen nicht mehr, weil du ja so oder so den ganzen tag im forum ueber pn deien sexuellen vorlieben mit den anderen austauschst.

    Zweites Beispiel:

    Ich moechte wissen, was 1kg birnen kosten und nicht 2kg aepfel.
    Verkaufer sagt daraufhin, ich habe bananen im angebot.

    I THINK IT MAKE THENSE OR?

    Du bist echt putzig(ich muss mich schon sehr mäßigen, weil mir ein ganz anderes Wort auf der Zunge liegt :D).
    Würdest du das Programmieren lernen wollen, so würdest du dankbar den Code von rkhb studieren und du wüsstest wie man eine verkette Liste realisiert.
    Das was du willst ist jedoch eine Komplettlösung, ohne die eigene Grütze anstrengen und einen Finger krumm machen zu müssen.
    Nichts für ungut, das ist verständlich, du bekommst ja dafür Punkte.
    Und den Schein, aus dem hevorgeht, das du es kannst. 👍



  • Dann erklaer es doch mal! Dann werde ich es lernen! Die Loesung werde ich in ca. 2 Wochen erhalten, dann koennen wir ja vergleichen. Ich will ja nicht, dass Ihr meine Aufgaben macht, will ja auch etwas lernen. Ich habe das mittlerweile mit der Ausgabe geloest, musste nur die Integerwerte in char und %d mit %c ersetzen.

    Ich wollte hier niemanden angreifen, aber denkt mal nach. Man waere viel produktiver, wenn man mit Beispielen oder Tipps kommt. Warum das so ist und wie man es besser machen koennte. Alternativ ein Algorithmus oder ne kurze Anleitung.
    Dafuer ist doch das Forum gedacht. Ich programmiere jetzt mit C mittlerweile seit ca. 3 Wochen und muss die Aufgabe bis Anfang Dezember loesen und auch verstanden haben. Meint Ihr nicht???



  • Es erklären? Was ist "es"?
    Produktiver? Tipps?
    Das schwerste in dieser Aufgabe ist das Erzeugen einer verketteten Liste, das wurde dir bereits komplett abgenommen(der Rest der Aufgabe ist ein bisschen Zählen und Prozentrechnung, okay, vllt. findet das ja manch einer schwerer).
    Das ist dir nicht produktiv genug, nicht genug Tipps?
    Deine Arbeit wäre jetzt nur noch reines Nachvollziehen, wie die Liste funktioniert und den Code so zu erweitern, dass er die Aufgabe löst.
    Was außer deinen Punkten und einem regulär ungültigen Schein hättest du sonst davon, wenn dir die komplette Lösung auf dem silbernen Tablett präsentiert würde?


Anmelden zum Antworten