Problem beim Programmieren in der Sprache C
-
Du bist nicht ganz im richtigen Forum - wobei deine Aufgabe allerdings so allgemein ist, dass man sie dir hier auch beantworten kann.
Deinen Quellcode zu zeigen wäre keine schlechte Idee, dann kann man dir sagen, was du besser machen kannst - und du kannst lernen, es besser zu machen, statt einfach irgendeinen hingeschriebenen Code abzutippen
-
Also mein Quelltext lautet:
#include <stdio.h> #include <stdlib.h> //Bibliothek für 'abs' um den Betrag zu Bilden int main (void){ int a; int b; for (a=-3; a<=3; a++){ // for für Zeilen printf("\n"); printf("\t"); for (b=-3; b<=3; b++){ // for für Spalten if (abs(a*b)>=3) {printf(" ");} else {printf("#");} } } return 0; }
Es ist bei diesem Quelltext zwar eher noch eine Raute aber es geht schon in Richtung Kreis.
Ich muss ganz ehrlich sagen, dass ich es gut finde, dass ohne Quelltext nicht geholfen wird
Achso und in welchem Forum wäre ich denn richtig mit dieser Frage?LG
-
Toastaa schrieb:
Achso und in welchem Forum wäre ich denn richtig mit dieser Frage?
LG
Im C-Forum
-
Die Kreisgleichung ist aber nicht abs(a*b) >= r
Wenn (x*x+y*y) <= r*r ist, befindest du dich innerhalb des Kreises.
-
Okay danke für den Tipp.
Ich habe einfach meinen Denkfehler nicht gefunden.Jetzt schaut es so aus:
#include <stdio.h> #include <stdlib.h> //Bibliothek für 'abs' um den Betrag zu Bilden int main (void){ int a; int b; for (a=-20; a<=20; a++){ // for für Zeilen printf("\n"); printf("\t"); for (b=-20; b<=20; b++){ // for für Spalten if (((a*a)+(b*b))>400) {printf(" ");} else {printf("#");} } } return 0; }
Der Kreis ist zwar noch nicht Perfekt, aber mit ein wenig Feintuning wird das machbar sein denke ich
LG
-
Toastaa schrieb:
Der Kreis ist zwar noch nicht Perfekt, aber mit ein wenig Feintuning wird das machbar sein denke ich
Steht ja auch so in der Aufgabenstellung.
Ein Hinweis noch:
Wenn du bei dira/b
rechnest, ist das eine Integerdivision.
Schreibst du aber1.0*a/b
wird es eine Fließkommadivision.
-
Dein Kreis dürfte hier vor allem sehr elliptisch aussehen, da in einer normalen Konsole die Zeichen nicht quadratisch sind, sondern eher so ungefähr 1:2 (tendenziell eher 1:2.x, was genau kommt auf die Konsolenschriftart an). 1:2 sähe dann zum Beispiel so aus:
for (a=-10; a<=10; a++){ // for für Zeilen printf("\n"); printf("\t"); for (b=-20; b<=20; b++){ // for für Spalten if (((4*a*a)+(b*b))>400) {printf(" ");} else {printf("#");} } }
Bei mir ist das schon ein ziemlich guter Kreis.
Eleganter wäre es natürlich, das Seitenverhältnis nicht im ganzen Programm verteilt fest einzubauen, sondern flexibel (oder als eine einzelne Konstante am Programmanfang) zu machen. Ebenso den Radius. Das überlasse ich dir als Übung.
edit: Ach, das war schon die Aufgabenstellung. Hätte wohl den Eingangspost genauer lesen sollen. Naja, haste eben als verfrühtes Weihnachtsgeschenk deine Hausaufgaben bekommen :xmas1: .
-
Und noch ein kleiner Tipp für die Zukunft:
Nenne deine Variablen nicht a und b, um dann im Kommentar zu klären, daß a Zeile und b Spalte seien soll.
Benenne sie gleich richtig und lass den Kommentar weg.
-
Aber euer Kreis hat doch 21 Zeilen und nicht 20 oder?!
und wäre die Aufgabe so vollständig bearbeitet?
-
Also noch ist die Aufgabe noch nicht vollständig bearbeitet.
Ich werde jetzt so wie es auch die Aufgabenstellung sagt, die Kreisgleichung oder durch eine Elipsengleichung ersetzen.
Und theoretisch laut Quelltext müssten es 20 Zeilen sein. Ich muss aber ehrlich sagen dass ich da jetzt einfach mal auf die anderen und mich vertraut habe.
Kann es ja bei Gelegenheit mal durchzählen.LG der Toastaa
-
Er hat immerhin bis Sonntag noch Zeit zur Abgabe
Wenn du in der Übung ein wenig mehr aufpasst, dann erfährst du wie es geht, außerdem kannst du die Leute bei der Laborübung fragen.
Ich weiß wo du studierst xD
btw. Was an der Kreisgleichung ist so schwierig?!