Problem beim Programmieren in der Sprache C
-
Hallo,
ich habe aus der Uni eine Hausaufgabe bekommen, bei welcher ich nicht mehr weiter komme.
Die Hausaufgabe lautet:
Erzeugen Sie eine Kreisscheibe auf dem Bildschirm.
Der Kreis soll einen Durchmesser von 20 Zeilen haben. Innerhalb des Kreises sollen # gedruckt werden,
außerhalb Blanks. Nutzen Sie die Kreisgleichung
x^2 + y^2 = r^2
f¨ur einen im Achsenkreuz zentrierten Kreis mit Radius r.
Durch die unterschiedliche H¨ohe und Breite der Zeichen wird die Scheibe verzerrt sein. Versuchen Sie
ein m¨oglichst gutes Bild zu bekommen, in dem Sie die Elipsengleichung
f¨ur geeignete a und b nutzen (a und b bitte experimentell ermitteln).
Siehe auch:
Kreisgleichung http://de.wikipedia.org/wiki/Kreisgleichung#Gleichungen
Elipsengleichung: http://de.wikipedia.org/wiki/EllipseSo ich habe mir überlegt das ganze mit 2 for - Schleifen zu machen (eine für die Spalte und eine für die Zeile).
Bis zur Zahl 3 funktioniert das ganze auch, aber danach gibt mir das Programm Formen aus, welche ich nicht ganz verstehe.
Also würde ich euch gern Fragen wie ihr das angehen würdet.
Falls ihr meinen Quelltext braucht, lade ich ihn gern hoch.Lg. Der verzweifelte Toastaa
-
Ohne Code wird dir hier grundsätzlich nicht geholfen.
-
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?!