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 dir a/b rechnest, ist das eine Integerdivision.
    Schreibst du aber 1.0*a/b wird es eine Fließkommadivision.


  • Mod

    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?!


Anmelden zum Antworten