Hilfe bei einer C Aufgabe ;)

11/11/2006 11:18 lugh#1
Ich habe auch noch ein kleines Problem bei einer C Aufgabe

Es sollen 3 Zahlen eingelesen werden und dann überprüft werden ob das Dreieck
- rechtwinklig
- gleichzeitig
- gleichschenklig

oder ob 2 der oben genannten sachen zutreffen

Ich hatte mir überlegt das ich es so schreibe

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

int main(int argc, char *argv[])
{	
	float a, b, c; /* deklaration */
    
	do
	
	/* eingabe der zahlen, einlesen und ueberpruefung ob <= 0 */
	{
	printf("Bitte geben Sie die laenge der ersten Seite ein\n"); 
	scanf("%f", &a);
	if(a<=0)
	printf("Bitte geben Sie eine positive Zahl ein\n");
	
	}
	while(a<=0);
	do
	{
	printf("Bitte geben Sie die laenge der zweiten Seite ein\n");
	scanf("%f", &b);
	if(b<=0)
	printf("Biitte geben Sie eine positive Zahl ein\n");
	}
	while(b<=0);
	do
	{
	printf("Bitte geben sie die laenge der dritten Seite ein\n");
	scanf("%f", &c);
	if(c<=0)
	printf("Bitte geben sie eine positive Zahl ein\n");
	}
	while(c<=0);

/*In der folgenden anweisung wird berechnet was das Dreieck fuer eine Art ist*/


if(fabs(a-b)<0.0001 || fabs(a-c)<0.0001 || fabs(b-c)<0.0001)
printf("Das Dreieck ist gleichschenklig!\n");

else if (fabs(a-b)<0,0001 && fabs(a-c)<0.0001 && fabs(b-c)<0.0001)
printf("Das Dreieck ist gleichseitig!\n");


float aqua, bqua, cqua;
aqua = a*a;
bqua = b*b;
cqua = c*c;


else ((fabs(aqua+bqua)-cqua)<0.0001 || (fabs(aqua+cqua)-bqua)<0.0001 || (fabs(cqua+bqua)-aqua)<0.0001)
printf("Das Dreieck ist rechtwinklig!\n");



return 0;
}
und dann in der Ausgabe erscheint was es ist, wenn mehrere zutreffen das prog 2 sachen ausgibt z.b.

Das Dreieck ist Gleichseitig
Das Dreieck ist Gleichwinklig

Aber es gibt immer alle 3 Dinge aus egal was man eingibt ;(

Weiß vielleicht jemand Rat? Wäre sehr dankbar ;) :D
11/11/2006 12:04 rEdoX#2
Aus dem bauch raus wuerde ich es so machen:

Code:
if (a == b && a ==c || b == c && b == a || c == a && c == b){
 printf("Das Dreieck ist gleichseitig!\n");}
else if (a == b || b == c || c == a ){
 printf("Das Dreieck ist gleichschenklig!\n");}
if (a*a + b*b == c*c){
 printf("Das Dreieck ist rechtwinklig!\n");}

grueße redox
11/11/2006 12:52 mr.rattlz#3
Quote:
Originally posted by rEdoX@Nov 11 2006, 12:04
Aus dem bauch raus wuerde ich es so machen:

Code:
if (a == b && a ==c || b == c && b == a || c == a && c == b){
 printf("Das Dreieck ist gleichseitig!\n");}
else if (a == b || b == c *|| c == a ){
 printf("Das Dreieck ist gleichschenklig!\n");}
if (a*a + b*b == c*c){
 printf("Das Dreieck ist rechtwinklig!\n");}

grueße redox
Die Mitte ist gut, oben prüfst du unnötig viel und unten zu wenig ;D
11/11/2006 13:56 lugh#4
Quote:
Originally posted by mr.rattlz+Nov 11 2006, 12:52--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (mr.rattlz @ Nov 11 2006, 12:52)</td></tr><tr><td id='QUOTE'> <!--QuoteBegin--rEdoX@Nov 11 2006, 12:04
Aus dem bauch raus wuerde ich es so machen:

Code:
if &#40;a == b && a ==c || b == c && b == a || c == a && c == b&#41;{
 printf&#40;&#34;Das Dreieck ist gleichseitig!&#092;n&#34;&#41;;}
else if &#40;a == b || b == c || c == a &#41;{
 printf&#40;&#34;Das Dreieck ist gleichschenklig!&#092;n&#34;&#41;;}
if &#40;a*a + b*b == c*c&#41;{
 printf&#40;&#34;Das Dreieck ist rechtwinklig!&#092;n&#34;&#41;;}

grueße redox
Die Mitte ist gut, oben prüfst du unnötig viel und unten zu wenig ;D [/b][/quote]
wie denn dann? ;)

und ja irgendwie hab ich noch meine probs bei if anweisungen, leider :cry:
11/11/2006 14:25 mr.rattlz#5
Quote:
Originally posted by lugh+Nov 11 2006, 13:56--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (lugh @ Nov 11 2006, 13:56)</td></tr><tr><td id='QUOTE'>
Quote:
Originally posted by -mr.rattlz@Nov 11 2006, 12:52
<!--QuoteBegin--rEdoX
Quote:
@Nov 11 2006, 12:04
Aus dem bauch raus wuerde ich es so machen:

Code:
if &#40;a == b && a ==c || b == c && b == a || c == a && c == b&#41;{
 printf&#40;&#34;Das Dreieck ist gleichseitig!&#092;n&#34;&#41;;}
else if &#40;a == b || b == c *|| c == a &#41;{
 printf&#40;&#34;Das Dreieck ist gleichschenklig!&#092;n&#34;&#41;;}
if &#40;a*a + b*b == c*c&#41;{
 printf&#40;&#34;Das Dreieck ist rechtwinklig!&#092;n&#34;&#41;;}

grueße redox

Die Mitte ist gut, oben prüfst du unnötig viel und unten zu wenig ;D
wie denn dann? ;)

und ja irgendwie hab ich noch meine probs bei if anweisungen, leider :cry: [/b][/quote]
Code:
if &#40;a == b && a ==c || b == c && b == a || c == a && c == b&#41;
Ist vollkommen unnötig solang, weil
Code:
if &#40;a == b && a ==c&#41;
total ausreichend wäre: Wenn a=b ist und a=c dann ist auch c=b und somit alle Seiten gleichlang ;)

Code:
if &#40;a*a + b*b == c*c&#41;
Das geht davon aus, dass c die längste Seite ist, was aber nicht unbedingt so sein muss oder ?
An der Stelle muss der Code also länger sein, wenn man von der Möglichkeit ausgeht, dass jede der Seiten die längste sein könnte:
Code:
if &#40;a*a + b*b == c*c||a*a+c*c==b*b||b*b+c*c==a*a&#41;
11/11/2006 15:23 lugh#6
aber wir müssen es mit einer fabs anweisung machen ;(
11/11/2006 17:09 rEdoX#7
das faellt dir ja frueh ein ;)
11/11/2006 17:14 lugh#8
sry ;)

aber deswegen hat ich es auch mit einer fabs gemacht, bin jetzt soweit gekommen


Code:
#include &#60;stdio.h>
#include &#60;stdlib.h>
#include &#60;math.h>

int main&#40;int argc, char *argv&#91;&#93;&#41;
{  
  float a, b, c; /* deklaration */
  float aqua, bqua, cqua;  
  do
  
  /* eingabe der zahlen, einlesen und ueberpruefung ob &#60;= 0 */
  {
  printf&#40;&#34;Bitte geben Sie die laenge der ersten Seite ein&#092;n&#34;&#41;; 
  scanf&#40;&#34;%f&#34;, &a&#41;;
  if&#40;a&#60;=0&#41;
  printf&#40;&#34;Bitte geben Sie eine positive Zahl ein&#092;n&#34;&#41;;
  
  }
  while&#40;a&#60;=0&#41;;
  do
  {
  printf&#40;&#34;Bitte geben Sie die laenge der zweiten Seite ein&#092;n&#34;&#41;;
  scanf&#40;&#34;%f&#34;, &b&#41;;
  if&#40;b&#60;=0&#41;
  printf&#40;&#34;Biitte geben Sie eine positive Zahl ein&#092;n&#34;&#41;;
  }
  while&#40;b&#60;=0&#41;;
  do
  {
  printf&#40;&#34;Bitte geben sie die laenge der dritten Seite ein&#092;n&#34;&#41;;
  scanf&#40;&#34;%f&#34;, &c&#41;;
  if&#40;c&#60;=0&#41;
  printf&#40;&#34;Bitte geben sie eine positive Zahl ein&#092;n&#34;&#41;;
  }
  while&#40;c&#60;=0&#41;;

/*In der folgenden anweisung wird berechnet was das Dreieck fuer eine Art ist*/


if&#40;fabs&#40;a-b&#41;&#60;0.0001 || fabs&#40;a-c&#41;&#60;0.0001 || fabs&#40;b-c&#41;&#60;0.0001&#41;
printf&#40;&#34;Das Dreieck ist gleichschenklig!&#092;n&#34;&#41;;

else if &#40;fabs&#40;a-b&#41;&#60;0,0001 && fabs&#40;a-c&#41;&#60;0.0001 && fabs&#40;b-c&#41;&#60;0.0001&#41;
printf&#40;&#34;Das Dreieck ist gleichseitig!&#092;n&#34;&#41;;

   else {
aqua = a*a;
bqua = b*b;
cqua = c*c;

    if &#40;&#40;fabs&#40;aqua+bqua&#41;-cqua&#41;&#60;0.0001 || &#40;fabs&#40;aqua+cqua&#41;-bqua&#41;&#60;0.0001 || &#40;fabs&#40;cqua+bqua&#41;-aqua&#41;&#60;0.0001&#41;
printf&#40;&#34;Das Dreieck ist rechtwinklig!&#092;n&#34;&#41;;
}
return 0;
}
aber da ist noch irgendwo ein fehler da die ausgabe IMMER gleichschenklig ist ;(
11/11/2006 19:07 NoName#9
Code:
#include &#60;stdio.h>
#include &#60;stdlib.h>
#include &#60;math.h>


float getNumber&#40;char *number&#91;&#93;&#41;{
 float zahl;
 do {
 printf&#40;&#34;Bitte geben sie die laenge der %s Seite ein&#092;n&#34;,number&#41;;
	scanf&#40;&#34;%f&#34;, &zahl&#41;;
 }
 while&#40;zahl&#60;=0&#41;;

 return zahl;
}

int main&#40;int argc, char *argv&#91;&#93;&#41;
{  
  float a, b, c; /* deklaration */
  float aqua, bqua, cqua;  

  a = getNumber&#40;&#34;erste&#34;&#41;;
  b = getNumber&#40;&#34;zweite&#34;&#41;;
  c = getNumber&#40;&#34;dritte&#34;&#41;;


/*In der folgenden anweisung wird berechnet was das Dreieck fuer eine Art ist*/

if&#40;fabs&#40;a-b&#41;&#60;0.0001 || fabs&#40;a-c&#41;&#60;0.0001 || fabs&#40;b-c&#41;&#60;0.0001&#41;
	printf&#40;&#34;Das Dreieck ist gleichschenklig!&#092;n&#34;&#41;;

if &#40;fabs&#40;a-b&#41;&#60;0,0001 && fabs&#40;a-c&#41;&#60;0.0001 && fabs&#40;b-c&#41;&#60;0.0001&#41;
	printf&#40;&#34;Das Dreieck ist gleichseitig!&#092;n&#34;&#41;;

if &#40;&#40;fabs&#40;a*a+b*b&#41;-c*c&#41;&#60;0.0001 || &#40;fabs&#40;a*a+c*c&#41;-b*b&#41;&#60;0.0001 || &#40;fabs&#40;c*c+b*b&#41;-a*a&#41;&#60;0.0001&#41;
	printf&#40;&#34;Das Dreieck ist rechtwinklig!&#092;n&#34;&#41;;

return 0;
}
so evtl?

p.s. musste feststellen das der code tag die tabs kaputt macht und das deswegen nso schei**e anzeigt