DNA Aufgabe in Englisch!
-
Ok super! Es lag an einem Schreibfehler! Danke...
-
Waldschrat schrieb:
Nettes Lob von CJosef. Das baut mich auf.
Ohh!
-
Hi, ich habe jetzt das folgende Programm geschrieben. Bei der Auswahl 3.Count im switch case bekomme ich nun die Berechnung heraus. Leider nur für das letzte character. Habe die if-Abfrage in die Methode count() integriert.
1. Ich möchte, dass alle Prozentangaben ausgegeben werden
2. Nur Großbuchstaben als Eingabe gültig sindKann mir jemand helfen? Danke im voraus.
#include<stdio.h> #include<stdlib.h> //Structure declaration for the node struct node { char info; struct node *link; }*start; //This function will create a new linked list void Create_List(char data){ struct node *q, *tmp; //Dynamic memory is been allocated for a node tmp= (struct node*)malloc(sizeof(struct node)); tmp->info=data; tmp->link=NULL; if(start==NULL) /*If list is empty*/ start=tmp; else{ /*Element inserted at the end*/ q=start; while(q->link!=NULL) q=q->link; q->link=tmp; } } //This function will display all the element(s) in the linked list void Display() { struct node *q; if(start == NULL) { printf ("\n\nList is empty"); return;}q=start; printf("\n\nList is : "); while(q!=NULL) { printf ("%c", q->info); q=q->link; } printf ("\n"); }/*End of display() */ void Count(int inputMax, char comp) { struct node *q; q = start; int cnt=0; int A = 0, G =0, T =0, C = 0; while(cnt<inputMax) { if(comp=='A'){A++;} if(comp=='G'){G++;} if(comp=='T'){T++;} if(comp=='C'){C++;} q=q->link; cnt++; } printf("\nA: %lf", (float)(A/inputMax)*100); printf("\nG: %lf", (float)(G/inputMax)*100); printf("\nT: %lf", (float)(T/inputMax)*100); printf("\nC: %lf", (float)(C/inputMax)*100); }/*End of count()*/ int main() { int choice,n,i; char m; do { printf("\n 1. Create List\n"); printf("\n 2. Display \n"); printf("\n 3. Count\n"); printf("\nEnter your choice (0 to 3)\n"); scanf("%d",&choice); switch (choice) { case 1: printf ("\n\nHow many nodes you want:"); scanf ("%d",&n); getchar(); for(i = 0;i<n;i++){ printf ("\nEnter the element:"); scanf ("%c",&m); getchar(); Create_List(m); } break; case 2: Display(); break; case 3: Count(n, m); break; default: printf ("\n\n----WRONG CHOICE----\n"); } } while (choice !=0); return 0 ; }
-
machupicchu schrieb:
Hi, ich habe jetzt das folgende Programm geschrieben. Bei der Auswahl 3.Count im switch case bekomme ich nun die Berechnung heraus. Leider nur für das letzte character.
Du benutzt ja auch nur das letzte Zeichen.
Habe die if-Abfrage in die Methode count() integriert.
1. Ich möchte, dass alle Prozentangaben ausgegeben werdenKlar möchtest du das, es ist schließlich deine Hausaufgabe.
2. Nur Großbuchstaben als Eingabe gültig sind
http://www.cplusplus.com/reference/cctype/isupper/
Aber warum? Es gibt doch bloß 4 gültige Buchstaben. Prüf doch auf die.P.S.: Ich will dich ja nicht fertig machen, aber: Kann es sein, dass du die letzten anderthalb Wochen absolut gar nichts gemacht hast und gerade Panik schiebst, weil bald Abgabe ist? Sei mal ehrlich: Kannst du den Stoff? Hast du irgendetwas dafür getan? Verdienst du die Punkte?
-
Hi, also ich habe etwas gemacht. Da ich das Thema nicht so ganz verstanden hatte, habe ich es erneut versucht und mein vorriges Programm nochmal geändert. Verstanden habe ich natürlich nicht alles, deshalb bin ich ja hier.
Du benutzt ja auch nur das letzte Zeichen.
Ich gebe ja über printf alle Ausgaben aus, wo siehst Du, dass nur das letzte Zeichen ausgebe?
http://www.cplusplus.com/reference/cctype/isupper/
Aber warum? Es gibt doch bloß 4 gültige Buchstaben.Ja eben, ich könnte es ja auch mit der asci tabbelle machen. Zum Beispiel:
if(inputMax>='A' && inputMax <='Z') inputMax = inputMax -32;
An welcher Stelle kann ich dies integrieren? Habe jetzt einiges ausprobiert, aber mit wenig erfolg.
-
machupicchu schrieb:
Du benutzt ja auch nur das letzte Zeichen.
Ich gebe ja über printf alle Ausgaben aus, wo siehst Du, dass nur das letzte Zeichen ausgebe?
Du fragst doch auch nicht nach Ausgabe, sondern danach, dass dein Zähler bloß das letzte Zeichen zählt.
Aber warum? Es gibt doch bloß 4 gültige Buchstaben.
Ja eben, ich könnte es ja auch mit der asci tabbelle machen. Zum Beispiel:
Wieso jetzt ASCII? Was soll das damit zu tun haben? Und wieso nicht stattdessen das portable isupper, welches ich dir vorgeschlagen habe?
if(inputMax>='A' && inputMax <='Z') inputMax = inputMax -32;
An welcher Stelle kann ich dies integrieren? Habe jetzt einiges ausprobiert, aber mit wenig erfolg.
Was soll das überhaupt machen? Wieso nicht
if (m != 'A' || m != 'G' ...)
?
-
Du fragst doch auch nicht nach Ausgabe, sondern danach, dass dein Zähler bloß das letzte Zeichen zählt.
Ich habe ja mein inkrement cnt++ danach wird die while schleife beendet. anschließend soll alles ausgegeben werden. :xmas2:
Möchte ja alles ausgeben:printf("\nA: %lf", (float)(A/inputMax)*100); printf("\nG: %lf", (float)(G/inputMax)*100); printf("\nT: %lf", (float)(T/inputMax)*100); printf("\nC: %lf", (float)(C/inputMax)*100);
Wie kann ich das ändern, dass er mir nicht nur das letzte, sondern alles ausgibt?
Was soll das überhaupt machen? Wieso nicht if (m != 'A' || m != 'G' ...)?
Wenn es in der count methode sein soll, dann
void Count(int inputMax, char comp) { struct node *q; q = start; int cnt=0; int A = 0, G =0, T =0, C = 0; while(cnt<inputMax) { if(comp !='A'|| comp !='G'|| comp !='T'|| comp !='C') { printf("Falsche Eingabe"); } else { if(comp=='A'){A++;} if(comp=='G'){G++;} if(comp=='T'){T++;} if(comp=='C'){C++;} q=q->link; cnt++; } printf("\nA: %lf", (float)(A/inputMax)*100); printf("\nG: %lf", (float)(G/inputMax)*100); printf("\nT: %lf", (float)(T/inputMax)*100); printf("\nC: %lf", (float)(C/inputMax)*100); }/*End of count()*/
m wird ja von meiner eingabe in die methode überladen. d.h. mein comp bekommt m übergeben. Count(n,m) in der switch case abfrage.
-
Count im switch case bekomme ich nun die Berechnung heraus. Leider nur für das letzte character
Ich gebe ja über printf alle Ausgaben aus, wo siehst Du, dass nur das letzte Zeichen ausgebe?
Wo siehst du, dass es nur den letzten zähler zählt? Ich habe ja mein inkrement cnt++ danach wird die while schleife beendet. anschließend soll alles ausgegeben werden.
Ich habe keine Ahnung mehr, was du überhaupt wissen möchtest. Weißt du es eigentlich selber? Du springst wild hin und her. Verstehst du überhaupt deinen eigenen Code oder alles bloß abgeschrieben?
Tut mir leid, so kann ich dir nicht helfen. Das wird andern Lesern genau so gehen. Siehe die Sticky-Threads hier im Forum und die Links in meiner Signatur.
-
du solltest die zeichen direkt bei der eingabe auf gültigkeit prüfen.
warum nimmst du nicht erstmal einen string,char* s = "ATATCGATCGATCG"
der eine eingabe simuliert um mal in die gänge zu kommen?
(die eingabe wird wohl in der praxis kaum vom benutzer gemacht werden, sondern kommt aus irgendwelchen dateien.)
die zeichen kannst du ebenfalls direkt bei der eingabe zählen, z.b. während der gültigkeitsprüfung.
die liste passt sich dann selbständig der anzahl an, man braucht nicht im voraus zu wissen, wie viele zeichen kommen.How many nodes you want
kannst du dir also schenken.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int A=0, G=0, T=0, C=0; // evtl in struktur einbetten int add_element(char e) { // if malloc == NULL return 0 else printf("%c", e); return 1; //ok } int check_element(char e) { int ok = 0;// invalid element e=toupper(e); if ('A' == e) A++, ok=1; else if ('G'==e) G++, ok=1; else if ('T'==e) T++, ok=1; else if ('C'==e) C++, ok=1; if (!ok) printf("\ninvalid element: %c\n", e); return ok; } int main(void) { char* atgc = "ATATCGATCGATCGX", *p; for (p=atgc; *p!=0; p++) { if (!check_element(*p)) /*free list and then*/return 1; else if(!add_element(*p)) /*free list and then*/return 1; } return 0; }
du hast schon 2 fast komplette lösungen bekommen, die eine liste erzeugen aber statt diese zu nutzen, daraus zu lernen und für dich zu verwerdten irrst du weiter im dickicht der unwissenheit und des herumprobierens.
-
Danke Leute! Ich werde mal die Abfrage versuchen in mein Programm zu integrieren. Meine Dozentin will schon, dass ich es einlese. Ich habe mein Programm nicht einfach kopiert und hier gepostet. Ich möchte nun mal mit Methoden arbeiten, um eine bessere struktur zu haben, statt alles in die main methode zu klatschen.
Sepj, ich habe dich schon verstanden. Ich wollte nur wissen, wie ich meine zähler ändern muss, dass er mir alle Prozentangaben ausgibt???