DNA Aufgabe in Englisch!



  • Hallo Leute, kann mir jemand bei der Aufgabe hier helfen. Muss es fuers Studium abgeben und habe echt kein Plan was ich hier anstellen soll. Hoffe, dass mir hier jemand helfen kann. Werde dafuer naemlich Punkte erhalten....!

    Tasks:
    Deoxyribonucleic acid (DNA) is a molecule describing the genetic information of an organism. It is made up of various combinations of four different smaller molecules: adenine, thymine, guanine, and cytosine. Because of this, DNA is frequently represented as a string of A, T, G, and C characters, corresponding to the four different molecules. For example, the human genome might be described as “ATATCGATCGATCG…” (continuing on for about 6 billion more characters).
    In this assignment, you will store a DNA sequence as a singly-linked list of strings of length one, implemented using a Node structure.

    1. Write a function percentage that inputs a linked list DNA sequence and a string of length 1
    (one of ‘A’,‘C’,‘G’, ‘T’) , and produces the percentage (as a floating point number between
    0 and 100) of times that character appears in the list, relative to the length of the list. Produce 0 for an empty DNA sequence.

    2. DNA sequences can be very long. One way to (potentially) conserve space is to group together
    sequences of common characters. For example, ‘AAAGTTTACACCT’ could be compressed as
    ‘A3G1T3A1C1A1C2T1’.
    Write a function compress that inputs a linked list DNA sequence, and produces a new linked
    list, in which the items in the Nodes are lists of length 2, [x,y], where x is one of the strings
    ‘A’,’C’,’G’,’T’, and y is the number of times that character appears in consecutive positions
    in the sequence.


  • Mod

    machupicchu schrieb:

    Werde dafuer naemlich Punkte erhalten....!

    Ich kann keinen Kaffeesatz am Boden meiner Tasse sehen. Dies ist ein eindeutiges Omen, dass du für diese Aufgabe keine Punkte bekommen wirst.



  • 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. 👍


Anmelden zum Antworten