myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Wo ist der Fehler?

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 10.09.10, 23:33   #1
CJ3
Newbie
 
Registriert seit: Feb 2010
Beiträge: 66
Bedankt: 34
CJ3 gewöhnt sich langsam dran | 36 Respekt Punkte
Standard Wo ist der Fehler?



Dieses Programm hab ich für ein paar Freunde geschrieben, aber leider funst es nich so, wie es soll
Ich hab in Kommentaren geschrieben, was los ist.

Kann mir bitte, bitte, bitte jemand sagen, wo der Fehler liegt? Ich hab keine Ahnung...
CJ3 ist offline   Mit Zitat antworten
Ungelesen 10.09.10, 23:37   #2
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

ist ja ne super beschissene formatierung!
ich fang' mal damit an.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
	char responseab, responseac, responsebc, responseah, responsebh, responsech;
	float a, a2, b, b2, c, c2, h, p, q;
	printf("Dreiecksberechner Ich rechne fuer sie die Seiten im rechtwinkligen Dreieck aus ^-^\nNote: a^2=c*p\n\n\n");
	printf("Wissen sie a und b? (j)a,(n)ein:");
	fflush(stdout);
	scanf("%c%*c",&responseab);
	if (responseab == 'j')

	{
		printf("\na:");
		scanf("%f",&a);
		printf("\nb:");
		scanf("%f",&b);
		fflush(stdin);
		c2=(a*a + b*b);
		c= sqrt(c2);
		p=(a*a)/c;
		q=c-p;
		h=p*q;
		printf("\nc:%f\np:%f\nq:%f\nh:%f\n",c,p,q,h);
	}
	if (responseab == 'n')
	{
		fflush(stdin);
		printf("\nWissen sie a und c? (j)a/(n)ein:");
		scanf("%c",&responseac);
		if (responseac == 'j')
		{
			printf("\na:");
			scanf("%f",&a);
			printf("\nc:");
			scanf("%f",&c);
			fflush(stdin);
			b2= c*c - a*a;
			b= sqrt(b2);
			p=(a*a)/c;
			q=c-p;
			h=p*q;
			printf("\nb:%f\np:%f\nq:%f\nh:%f \n",b,p,q,h);
		}

		if (responseac == 'n')
		{
			fflush(stdin);
			printf("\nWissen sie b und c? (j)a/(n)ein:");
			scanf("%c",&responsebc);
			if (responsebc == 'j')
			{
				printf("\nb:");
				scanf("%f",&b);
				printf("\nc:");
				scanf("%f",&c);
				fflush(stdin);
				a2= c*c - b*b;
				a= sqrt(a2);
				p=(a*a)/c;
				q=c-p;
				h=p*q;
				printf("\na:%f\np:%f\nq:%f\nh:%f \n",a,p,q,h);
				fflush(stdin);
			}
			if (responsebc == 'n')
			{
				fflush(stdin);
				printf("\nWissen sie a und h? (j)a/(n)ein:");
				scanf("%c",&responseah);
				if (responseah == 'j') /*Ab hier wird nicht mehr das Ergebnis angezeigt*/
				{
					printf("\na:");
					scanf("%f",&a);
					printf("\nh:");
					scanf("%f",&h);
					fflush(stdin);
					p= sqrt(a*a - h*h);
					fflush(stdin);
					c= (a*a)/p;
					fflush(stdin);
					q=c-p;
					fflush(stdin);
					b= sqrt(c*c - a*a);
					printf("\nb:%f\np:%f\nq:%f\nc:%f \n",b,p,q,c);
					fflush(stdin);
					goto ENDE;

				}
				if (responseah == 'n');
				{
					fflush(stdin);
					printf("\nWissen sie b und h? (j)a/(n)ein:");
					scanf("%c",&responsebh);
					if (responsebh == 'j'); /* Hier ist es egal, was ich nehme.
																	 *Ob 'j' oder 'n' es wird nach b und h gefragt
																	 *und dann setzt der goto-befehl ein
																	 *den ich gemacht habe, weil sonst die Frage nach c und h kommt*/
					{
						printf("\nb:");
						scanf("%f",&b);
						printf("\nh:");
						scanf("%f",&h);
						fflush(stdin);
						q= sqrt(b*b - h*h);
						fflush(stdin);
						c= (b*b)/q;
						fflush(stdin);
						p=c-q;
						fflush(stdin);
						a= sqrt(c*c - b*b);
						printf("\na:%f\np:%f\nq:%f\nc:%f \n",a,p,q,c);
						goto ENDE;

					}
					if (responsebh == 'n');
					{
						fflush(stdin);
						printf("\nWissen sie c und h? (j)a/(n)ein:");
						scanf("%c",&responsech);
						if (responsech == 'j')
						{
							printf("\nc:");
							scanf("%f",&c);
							printf("\nh:");
							scanf("%f",&h);
							fflush(stdin);
							q= c-(h/q);
							fflush(stdin);
							p= c-q;
							fflush(stdin);
							a= sqrt(c*p);
							fflush(stdin);
							b= sqrt(c*c - a*a);
							printf("\nb:%f\np:%f\nq:%f\na:%f \n",b,p,q,a);
							goto ENDE;
						}
						if (responsech == 'n')
						{
							printf("\nEs tut mir auserordentlich Leid\nIch weiß noch nicht, wie ich mit Winkeln umzugehen habe.\n");
						}
					}
				}
			}
		}
	}
ENDE : printf("\nIch hoffe ich habe ihnen geholfen und keine Fehler gemacht, wobei ich natuerlich NIE Fehler mache\n\nMit freundlichen Gruessen,\n Hans^-^\n");

			 system("PAUSE");
			 return 0;
}
ausserdem echt sehr bescheidener programmierstiel!
versuch' erstmal das programm in einzelnde funktionen zu zerlegen. da blickt ja keiner durch!

und, die ganzen fflush(stdin); kannst du dir komplett sparen. was wolltest du damit eigentlich erreichen?
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 10.09.10, 23:59   #3
CJ3
Newbie
 
Registriert seit: Feb 2010
Beiträge: 66
Bedankt: 34
CJ3 gewöhnt sich langsam dran | 36 Respekt Punkte
Standard

sorry aber
mir gehts nicht um den programmierstiel erstmal.

ich hab gelesen, wenn was mit den Eingaben nicht funst, soll man das schreiben. Dadurch hatte ich gehofft es klappt, danke für die info ... oh aso ja sorry
ich hatte bei dem befehl was anderes im kopf
CJ3 ist offline   Mit Zitat antworten
Ungelesen 11.09.10, 00:09   #4
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
mir gehts nicht um den programmierstiel erstmal.
aber der ist wichtig! bei dem krautsalat den du hier lieferst wird dir keiner helfen wollen/können.

fang doch einfach damit an:
Code:
void funcab() {
 ....
}
if (responseab == 'j')
  funcab();
....
und btw:

Code:
scanf("%c%*c",&responseab);
das scheint mir ziemlich falsch.
das sollte wohl eher scanf("%c",&responseab); heissen.
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 11.09.10, 13:29   #5
CJ3
Newbie
 
Registriert seit: Feb 2010
Beiträge: 66
Bedankt: 34
CJ3 gewöhnt sich langsam dran | 36 Respekt Punkte
Standard

Ich hab jetzt alles in Funktionen aufgeteilt und (hoffentlich) es damit übersichtlicher gemacht

Code:
#include <stdio.h>
#include <stdlib.h>

     char response, response2;
	 float a, a2, b, b2, c, c2, h, p, q;
	 
	void secside() {
         printf("Andere Seite:");
         scanf("%c",&response2);
}         
          
    void funcab() {
 printf("\na:");
		scanf("%f",&a);
		printf("\nb:");
		scanf("%f",&b);
		fflush(stdin);
		c2=(a*a + b*b);
		c= sqrt(c2);
		p=(a*a)/c;
		q=c-p;
		h=p*q;
		printf("\nc:%f\np:%f\nq:%f\nh:%f\n",c,p,q,h);
}

void funcac() {
            printf("\na:");
			scanf("%f",&a);
			printf("\nc:");
			scanf("%f",&c);
			fflush(stdin);
			b2= c*c - a*a;
			b= sqrt(b2);
			p=(a*a)/c;
			q=c-p;
			h=p*q;
			printf("\nb:%f\np:%f\nq:%f\nh:%f \n",b,p,q,h);     
}

void funcbc() {
                printf("\nb:");
				scanf("%f",&b);
				printf("\nc:");
				scanf("%f",&c);
				fflush(stdin);
				a2= c*c - b*b;
				a= sqrt(a2);
				p=(a*a)/c;
				q=c-p;
				h=p*q;
				printf("\na:%f\np:%f\nq:%f\nh:%f \n",a,p,q,h);     
}     

void funcah() {
                    printf("\na:");
					scanf("%f",&a);
					printf("\nh:");
					scanf("%f",&h);
					fflush(stdin);
					p= sqrt(a*a - h*h);
					fflush(stdin);
					c= (a*a)/p;
					fflush(stdin);
					q=c-p;
					fflush(stdin);
					b= sqrt(c*c - a*a);
					printf("\nb:%f\np:%f\nq:%f\nc:%f \n",b,p,q,c);
					fflush(stdin);
}

void funcbh() {
						printf("\nb:");
						scanf("%f",&b);
						printf("\nh:");
						scanf("%f",&h);
						fflush(stdin);
						q= sqrt(b*b - h*h);
						fflush(stdin);
						c= (b*b)/q;
						fflush(stdin);
						p=c-q;
						fflush(stdin);
						a= sqrt(c*c - b*b);
						printf("\na:%f\np:%f\nq:%f\nc:%f \n",a,p,q,c);     
}

void funcch() {
							printf("\nc:");
							scanf("%f",&c);
							printf("\nh:");
							scanf("%f",&h);
							fflush(stdin);
							q= c-(h/q);
							fflush(stdin);
							p= c-q;
							fflush(stdin);
							a= sqrt(c*p);
							fflush(stdin);
							b= sqrt(c*c - a*a);
							printf("\nb:%f\np:%f\nq:%f\na:%f \n",b,p,q,a);     
} 


int main(int argc, char *argv[])
{    

	printf("Dreiecksberechner ;) Ich rechne fuer sie die Seiten im rechtwinkligen Dreieck aus ^-^\nNote: a^2=c*p\n\n\n");
	printf("Welche zwei Seiten wissen sie?\n");
	printf("Erste Seite:");
	scanf("%c",&response);
	switch(response)
	{
          case 'a' : secside();
          scanf("%c",&response2);
                     switch(response2)
                     {
                                       case 'b' :funcab();
                                       break;
                                       case 'c' :funcac();
                                       break;
                                       case 'h' :funcah();
                                       break;
                                       }
                     break;
                     
          case 'b' : secside();
          scanf("%c",&response2);
                     switch(response2)
                     {
                                      case 'a' :funcab();
                                      break;
                                      case 'c' :funcbc();
                                      break;
                                      case 'h' :funcbh();
                                      break;
                                      }
                     break;
                                      
          case 'c' : secside();
          scanf("%c",&response2);
                     switch(response2)
                     {
                                       case 'b' :funcbc();
                                       break;
                                       case 'a' :funcac();
                                       break;
                                       case 'h' :funcch();
                                       break;
                                       }
                     break;
                     
          case 'h' : secside();
          scanf("%c",&response2);
                     switch(response2)
                     {
                                       case 'a' :funcah();
                                       break;
                                       case 'b' :funcbh();
                                       break;
                                       case 'c' :funcch();
                                       break;
                                       }
                     break;
          
          
          }
    
      
  system("PAUSE");	
  return 0;
}
Jetzt weiß ich allerdings, wo der Fehler die ganze Zeit liegt, an den Formel.

Danke für deine Hilfe, jetzt weiß ich es besser^^
CJ3 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr.


Sitemap

().