
RandyK
Mitglieder-
Gesamte Inhalte
17 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von RandyK
-
woa vielen vielen Dank für die Lösung! Die Abgabe ist seit heute vorbei und irgendwie war bis vor kurzem der Server down :upps aber jetzt hab ich wenigstens mal kapiert, wie das funktioniert... mein Ansatz war tatsächlich nicht so schlecht wie ich dachte. War wirklich wichtig, weil ich schreib nächste woche Klausur also danke nochmal Gruß Randy
-
Hallo, Klotzkopp Danke für die Antwort! Also das mit sizeof und strlen war mir neu... gut zu wissen! nur komme ich mit der anwendung irgendwie nicht ganz klar. ich hab den code jetzt mal umgeschrieben, er funktioniert aber leider immernoch nicht. pointer machen mich langsam verrückt :eek kannst du mir vllt genauer erklären, was ich falsch mache? #include <stdio.h> #include <stdlib.h> char *cat(char *string[], int anzahl){ int i, length = 0; char*res; for(i=0;i<anzahl;i++) length = length + strlen(**string++); res = malloc(length*sizeof(char)); if(res == NULL) return NULL; for(i=2;i<length;i++) *res = strcat(**string,**string++); res = string; return res; } main(int argc, char *argv[]) { int anzahl = argc-1; printf("%s",*cat(argv,anzahl)); getchar(); } irgendwo muss ich ja nen grundlegenden denkfehler haben... ich komm auf zeiger irgendwie noch nicht ganz klar. Danke im Vorraus! Grüße Randy
-
Hi leute, hab folgendes Problem: Schreiben Sie ein Programm, dem Sie zwei oder mehr Zeichenketten als Kommandozeilenparameter übergeben können, und das diese dann aneinandergehängt ausgibt. Führen Sie eine Kontrolle der Anzahl der übergebenen Kommandozeilenparameter durch. Das Aneinanderhängen von zwei oder mehr Zeichenketten realisieren Sie durch eine Funktion mit dem Prototypen char * cat(char * string[], int anzahl), der Sie bei Aufruf ein Feld string von Zeichenketten der Länge anzahl übergeben. Diese Funktion soll einen Zeiger auf die Ergebniszeichenkette, welche sich aus allen Komponenten von string zusammensetzt, zurückgeben. Dazu müssen Sie im Funktionsrumpf dynamisch ausreichend Speicherplatz reservieren. Vergessen Sie die Speicherfreigabe am Ende des Programms nicht. Sie dürfen die Bibliotheksfunktionen strlen und strcat verwenden. Und ich check nix davon.... ich kann mit den verfluchten Pointern einfach ums verrecken nicht umgehen und hab nich die geringste ahnung, wie ich das anstellen soll... hier meine kläglichen bisherigen versuche: #include <stdio.h> #include <stdlib.h> char * cat(char * string[], int anzahl){ char *ergebnis; int i; ergebnis = malloc(sizeof(string)); for(i=1;i<anzahl;i++){ strcat(string[0],string[i]); } *ergebnis = string; return ergebnis; } main(int argc, char* argv[]) { int anzahl = argc-1; printf("%s", *cat(argv,anzahl)); } wobei sich das ding nichmal kompilieren lässt... weiß echt überhaupt nich weiter... :confused: ich hoff mir kann iwer helfen. Grüße Randy
-
Danke für die Antworten... wie kann man denn bei c eine zufallszahl aus einem intervall wählen lassen? mfg Randy
-
ok, sorry jetz bin ichs nochmal... hätt ich fast vergessen: hat von euch einer ne ahnung, wie ich die jetzt noch nichtdeterministisch machen kann? Wär für jeden ratschlag dankbar. ach ja, oben muss an die funktion als re a/2 übergeben werden und nicht a.... sonst funktionierts iwie nich... grüße Randy
-
ok, danke jetz hab ichs... #include <stdio.h> double wurzel(double li,double re,int a) { double y; y = (li+re)/2; if(li>=re-0.000001) {return y;} if(y*y<a) {return wurzel(y,re,a);} if(y*y>a) {return wurzel(li,y,a);} } int main() { int a; double b; printf("bitte positive ganze zahl eingeben:\n"); scanf("%i",&a); b = wurzel(1,a,a); printf("%.4f",; return 0; }[/code] Also, vielen Dank an alle Beteiligten und bis bald! Grüße Randy
-
stimmt ja, da hast du recht..... hab allerdings festestellt, dass wenn ich li nicht mit 1 initialisiere, funktioniert der code zwar soweit, aber nich für quadrate von 16 und vielfachen, also 256, 1024, etc... keine ahnung warum.... also eigentlich hatte ich bisher keine probleme bei rekursion (Euklid, Fakultät, etc), allerdings ist ja diesmal der prototyp int wurzel(int a). Und ich hab keine ahnung wie ich die funktion mit manipuliertem li und re aufrufen kann... danke im voraus Randy
-
Okay ne, der Code von vorhin war viel zu ineffizient.... so ist es besser: double wurzel(int a) { double li, re = a, y; while(li<re-0.000001) { y = (li+re)/2; if(y*y<a) {li=y;} if(y*y>a) {re=y;} } return y; } meine frage ist aber immernoch die gleiche grüße Randy
-
Hallo Leute, Wir haben die Aufgabe bekommen, eine kleine Funktion in C zu implementieren, die mittels Intervall-Schachtelung die Wurzel einer ganzen positiven Zahl berechnet. Dies soll in 4 Versionen geschehen: eine rekursiv deterministisch, eine rekursiv nichtdeterministisch, eine iterativ deterministisch und eine iterativ nichtdeterministisch. Die iterativ deterministische ist kein Problem, allerdings hab ich nich die geringste vorstellung, wie ich die Funktion nichtdeterministisch und vor allem rekursiv darstellenn soll. Mein bisheriger Code sieht so aus: double wurzel(int a) { double li = 1.0, re = a, y; while(li<re) { y = (li+re)/2; if(y*y<a) {li=li+0.0001;} if(y*y>a) {re=re-0.0001;} } return y; } Ich würde mich freuen, wenn mir jemand helfen könnte! Liebe Grüße Randy
-
okay, vielen Dank für die Tipps, ich glaub jetz hab ichs hingekriegt... deine Tipps, waren Gold wert, sonst hätt ich ja alles falsch gemacht^^ wieder einiges gelernt! Auch danke an ale anderen #include <stdio.h> main() { char c,d='0'; double value=0,value2=0,e,result; int i=0,j,k=1; c=getchar(); if(c=='\n') { printf("Keine Eingabe!\n"); return 0; } if(c=='+') { d='+'; c=getchar(); } if(c=='-') { d='-'; c=getchar(); } if(c<48||c>57) { printf("Ungueltige Eingabe!\n"); return 0; } if(c=='0') { c=getchar(); if(c>'0'&&c<='9') { printf("die Erste Ziffer darf keine Null sein!\n"); return 0; } } while(c>47&&c<58) { value=value*10+(c-'0'); c=getchar(); } if(c=='.') { c=getchar(); while(c>47&&c<58) { value2=value2*10+(c-'0'); c=getchar(); i++; } } for(j=0;j<i;j++) {k=k*10;} value2=value2/k; result=value+value2; printf("%lf",result); return 0; } EDIT: Ach ja, aber was if-else-Kaskaden sind, würde mich trotzdem interessieren... Gruß Randy
-
okay, also dass ich nicht auf return komme ist schon komisch^^ , oder? aber was meinst du mit if-else-kaskaden? tjo und wie lässt sich das mit dem nachkommateil bewerkstelligen?
-
jo, richtig, einen int für die vorkommastellen, einen für die danach... ausgabe is dann "%i.%i" also einfach mit punkt zwischen den integern. Funktioniert einwandfrei. Wieso ist die schleife überflüssig, gibts noch eine andere möglichkeit bei if-abfragen das programm zu beenden, als den break befehl in ner endlosschleife?
-
danke für den Tipp!!! Code is jetz fertig... #include <stdio.h> main() { char c,d='0'; int value=0,value2=0,e; while(1) { c=getchar(); if(c=='\n') { printf("Keine Eingabe!\n"); break; } if(c=='+') { d='+'; c=getchar(); } if(c=='-') { d='-'; c=getchar(); } if(c<48||c>57) { printf("Ungueltige Eingabe!\n"); break; } if(c=='0') { c=getchar(); if(c>'0'&&c<='9') { printf("die Erste Zahl darf keine Null sein!\n"); break; } } while(1) { while(c>47&&c<58) { value=value*10+(c-'0'); c=getchar(); } if(c=='.') { c=getchar(); while(c>47&&c<58) { value2=value2*10+(c-'0'); c=getchar(); } } break; } if(d!='0') {printf("%c%i.%i\n",d,value,value2);} else {printf("%i.%i\n",value,value2);} break; } } bis bald Randy
-
ja, schon klar... mein Hauptproblem war ja überhaupt zeichenketten mit getchar() einzulesen... habs jetz hinbekommen. Der Code sieht so aus: #include <stdio.h> main() { char c,d='0'; int value=0,value2=0,e=1; while(1) { c=getchar(); if(c=='\n') { printf("Keine Eingabe!\n"); break; } if(c=='+') { d='+'; c=getchar(); } if(c=='-') { d='-'; c=getchar(); } if(c<48||c>57) { printf("Ungueltige Eingabe!\n"); break; } while(1) { while(c>47&&c<58) { value=value*10+(c-'0'); c=getchar(); } if(c=='.') { c=getchar(); while(c>47&&c<58) { value2=value2*10+(c-'0'); c=getchar(); } } break; } if(d!='0'){printf("%c%i.%i\n",d,value,value2);} else {printf("%i.%i\n",value,value2);} break; } } allerdings krieg ich die Abfrage ob die erste Stelle ne null is nich hin... wenn man nur eine Null eingibt, soll es 0.0 ausgeben. Wenn aber nach der Null noch eine andere Zahl kommt, solls eine Fehlermeldung ausspucken. Aber das is das einzige, was dann noch fehlt... Beispiel: Eingabe:0, Ausgabe:0.0, Eingabe:01.9, Ausgabe:Fehlermeldung Gruß Randy
-
ok, sorry.... habs grad hinbekommen. #include <stdio.h> main() { char c; int value=0; while(1) { c=getchar(); if(c!='\n') { value=value*10+(c-'0'); } else {break;} } printf("%i",value); }
-
Hey Leute, kann mir wirklich keiner helfen? Abgabe is zwar schon vorbei, aber mich würde die Lösung immernoch brennend interessieren, ich schreib in ner Woche Klausur..... so sieht der Code bisher aus, funktioniert aber iwie nich: #include <stdio.h> main() { char c; int value=0; while(1) { if((c=getchar())!='\n') {value=value*10+(c-'0');} else {break;} } printf("%i",value); } } wär toll, wenn mir jemand helfen könnte. Grüße Randy
-
Hey Leute, hab mich grad erst angemeldet, weil ich von der uni ne happige Programmieraufgabe gestellt bekommen habe, bei der ich einfach nicht weiter weiß. eigentlich hab ich mit dem anfängerzeug überhaupt keine probleme, aber da ich getchar() mangels nutzen noch nie verwendet hab hab ich einfach keine ahnung was ich hier machen soll. also die aufgabe ist zusammengefasst das nachprogrammieren der scanf() funktion für eine double variable. die genaue aufgabenstellung lautet wie folgt: Schreiben Sie ein C-Programm, das den Benutzer zur Eingabe einer Fließkommazahl auffordert und dann ein möglichst langes Anfangsstück der Benutzereingabe als Fließkommazahl in Festpunktdarstellung interpretiert und in einer double-Variable abspeichert, deren Wert am Ende ausgegeben wird. Benutzen Sie für den Einlesevorgang nur die Bibliotheksfunktion getchar. Fangen Sie ungültige Eingaben (z.B. Eingaben, die mit einem Buchstaben beginnen) ab und berücksichtigen Sie auch negative Zahlen. Auch die Zahl 0 soll erkannt werden, beachten Sie aber, dass keine Zahlen mit mehr als einer Stelle mit der Ziffer 0 beginnen. Sie dürfen nur den bisherigen Vorlesungsstoff verwenden, als z.B. insbesondere keine Felder (Arrays)! mit array wär das ganze ja kein problem, aber das darf man ja nicht verwenden.... ich muss also irgendwie in einer schleife mit getchar zeichen für zeichen einlesen und aus den bisher eingelesenen zeichen die zahl berechnen. die funktion wäre dabei z.b. für c=getchar(), d=variable zum zwischenspeichern des zeichens und die zählvariable i in einer schleife if(i>1) {d=10*d+c;} soweit so gut. allerdings hab ich keine ahnung wie man getchar in einer schleife verwendet und das eingegebene zeichen zwischenspeichert. ich habe alles erdenkliche versucht und gegoogelt ohne ende, finde aber nix dazu. ich hoffe jemand, der sich etwas damit auskennt kann mir weiterhelfen. grüße Randy