WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   QuellCode, ich hasse, dass ich C/C++ oder die Logik noch nicht gut durchschaue! (http://www.wcm.at/forum/showthread.php?t=48610)

coolbininet 05.03.2002 15:13

QuellCode, ich hasse, dass ich C/C++ oder die Logik noch nicht gut durchschaue!
 
@all

Kann mir bitte jemand helfen, habe folgendes Programm zusammen gebastelt, es soll umbedingt mit if und else gelöst werden (kein Case oder andere Hilfsmittel) ich habe das Struktogramm gemacht, da schien es mit einem Schreibtischtest zu funken, aber als ich dann das C/C++ Programm dazu tippselte, funkt es nicht!

Zur Erklärung: Es sollen drei Zahlen eigelesen werden und dann die größte ausgegben werden. Die größte kann jetzt sein, die erste, die zweite, die dritte aber es können auch gleichgrosse vorkommen oder alle drei gleich gross sein: Der Source der im C/C++ nicht aber lt. Schreibtischtest und Struktogramm funkt! Ich glaube, ich habe mich mit den If's und Else's vertan brauche diese aber unbedingt:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

void main ()
{
int a,b,c;

printf ("(A)Erste Zahl eingben: ");
scanf ("%d",&a);
printf ("(B)Zweite Zahl eingben: ");
scanf ("%d",&b);
printf ("(C)Dritte Zahl eingben: ");
scanf ("%d",&c);
if (a=b=c)
printf ("Die erste Zahl %d und die zweite Zahl %d und die dritte Zahl %d sind gleich gross!",a,b,c);
else
if (a>b);
if (a>c);
printf ("Die Zahl %d ist die groesste Zahl",a);
else
if (a=c);
printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,c);
else
printf ("Die Zahl %d ist die groesste",c);
else
if (a=b);
printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,b);
else
if (c>b)
printf ("Die Zahl %d ist die groesste Zahl",c);
else
if (c=b)
printf ("Die Zahl %d und die Zahl %d sind gleich groß",b,c);
else
printf ("Die Zahl %d ist die groesste Zahl",b);

}

Brauche das noch heute am Abend für das Kolleg Spengergasse und bin wirklich im Zeitstress!

Mit freundlichen Grüßen

Coolbininet

batigol1860 05.03.2002 15:23

Der Vergleichsoperator ist "==" nicht "=" !!!

Du machst hier keinen Vergleich der Variablen, du weist hier etwas zu.
Ach ja, und der Strichpunkt hinter jedem if gehört dort auch nicht hin, wie es ausschaut.

Viel Erfolg,
Batigol

coolbininet 05.03.2002 15:30

Frage konkretisiert!
 
@batigol1860

Aber die Logik, kann die wenigstens stimmen?

mfg

Coolbininet

wizo 05.03.2002 15:57

das mit den 2 if anweisungen ist auch net richtig glaub ich
solltest durch ein and verbinden
und warum verwendest nicht elseif?
das macht das ganze übersichtlicher und kürzer

Stingerr 05.03.2002 16:00

jaja...
 
hinter if den strichpunkt weg!
schreib %i statt %d -> Integer

kikakater 05.03.2002 16:18

Re: QuellCode, ich hasse, dass ich C/C++ oder die Logik noch nicht gut durchschaue!
 
Zitat:

Original geschrieben von COOLBININET
@all

Kann mir bitte jemand helfen, habe folgendes Programm zusammen gebastelt, es soll umbedingt mit if und else gelöst werden (kein Case oder andere Hilfsmittel) ich habe das Struktogramm gemacht, da schien es mit einem Schreibtischtest zu funken, aber als ich dann das C/C++ Programm dazu tippselte, funkt es nicht!

Zur Erklärung: Es sollen drei Zahlen eigelesen werden und dann die größte ausgegben werden. Die größte kann jetzt sein, die erste, die zweite, die dritte aber es können auch gleichgrosse vorkommen oder alle drei gleich gross sein: Der Source der im C/C++ nicht aber lt. Schreibtischtest und Struktogramm funkt! Ich glaube, ich habe mich mit den If's und Else's vertan brauche diese aber unbedingt:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

void main ()
{
int a,b,c;

printf ("(A)Erste Zahl eingEben: ");
scanf ("%d",&a);
printf ("(B)Zweite Zahl eingEben: ");
scanf ("%d",&b);
printf ("(C)Dritte Zahl eingEben: ");
scanf ("%d",&c);

// falsch, richtig ist: if(a==b && b==c)

if (a=b=c)
printf ("Die erste Zahl %d und die zweite Zahl %d und die dritte Zahl %d sind gleich gross!",a,b,c);
else
if (a>b);
if (a>c);
printf ("Die Zahl %d ist die groesste Zahl",a);
else
if (a=c); // ohne ; if(a==c)
printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,c);
else
printf ("Die Zahl %d ist die groesste",c);
else

// falsch, richtig ist: if(a==b) ! und ohne ; überall sonst bei if(bedingung) auch (=EBENSO) ohne ;

if (a=b); // detto ; ==
printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,b);
else
if (c>b)
printf ("Die Zahl %d ist die groesste Zahl",c);
else
if (c=b) // usw.
printf ("Die Zahl %d und die Zahl %d sind gleich groß",b,c);
else
printf ("Die Zahl %d ist die groesste Zahl",b);

}

Brauche das noch heute am Abend für das Kolleg Spengergasse und bin wirklich im Zeitstress!

Mit freundlichen Grüßen

Coolbininet

Es gibt kein elseif, es gibt nur ein else + if(bedingung) anweisung;

Sonic 05.03.2002 16:27

Dein Programm ist auch logisch nicht ganz richtig!

Die Zeilen

if (a=b);
printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,b);

gehören vor dem letzen else! Sonst gibt er zb bei der eingabe von a=1, b=1, c=2 "Die Zahl 1 und die Zahl 1 sind gleich groß" aus.

Korrigierte Version:

Code:

if (a==b && a==c)
 printf ("Die erste Zahl %d und die zweite Zahl %d und die dritte Zahl %d sind gleich gross!",a,b,c);
else
 if (a>b)
  if (a>c)
  printf ("Die Zahl %d ist die groesste Zahl",a);
  else if (a==c)
    printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,c);
  else
    printf ("Die Zahl %d ist die groesste",c);
 else if (a==b)
  printf ("Die Zahl %d und die Zahl %d sind gleich groß",a,b);
 else if (c>b)
  printf ("Die Zahl %d ist die groesste Zahl",c);
 else if (c==b)
  printf ("Die Zahl %d und die Zahl %d sind gleich groß",b,c);
 else
  printf ("Die Zahl %d ist die groesste Zahl",b);

"Schönere" und ausgebesserte version
Code:

  if (a==b && a==c)
  printf ("Die erste Zahl %i und die zweite Zahl %i und die dritte Zahl %i sind gleich gross!\n",a,b,c);
  else
  {
  if(a>=b)
  {
    if (a>c)
    printf("Die Zahl %i ist die größte Zahl\n", a);
    else if(a<c)
    printf("Die Zahl %i ist die größte Zahl\n", c);
    else
    printf("Die zahl %i und die zahl %i sind gleich groß\n", a,b);
  }
  else
  {
    if (b>c)
    printf("Die Zahl %i ist die größte Zahl\n", b);
    else if(b<c)
    printf("Die Zahl %i ist die größte Zahl\n", c);
    else
    printf("Die zahl %i und die zahl %i sind gleich groß\n", a,c);
  }
  }


_m3 05.03.2002 17:18

Tipp 1: Benutz Klammern und Einrückungen, auch wenn es nur um einen Befehl nach dem IF handelt - das ganze wird überscihttlicher und fuer Dich leichter les- und debugbar. Dann schnallst Du auch die if/else-Konstruktionen.

Tipp 2: Schalt dei Kompilerwarning auf die höchste Stufe. Damit findest Du Zuweisungen wie "(a=b)" in IF-Bedungungen, wenn es eigentlich ein Verglecih sein sollte.

kikakater 05.03.2002 17:40

Code:

/* 3vgl.c */

#include <stdio.h>

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

 int a,b,c,r1,r2,r3;

 printf("\n----------------------------------------------------------------------\n"
        "Programm Zahlenvergleich 3VGL: Bitte geben sie drei Zahlen (a,b,c) ein\n"
                "----------------------------------------------------------------------\n\n");


 printf("Eingabe von a .. "); scanf("%d",&a);
 printf("Eingabe von b .. "); scanf("%d",&b);
 printf("Eingabe von c .. "); scanf("%d",&c);

 printf("\n\n----------------------------------------------------------------------\n"
        "Ergebnis:\n"
                "----------------------------------------------------------------------\n\n");

 r1=a-b; r2=a-c; r3=b-c;

 if(r1>0 && r2>0) {
  printf("a ist die größte Zahl\n");
  if(r3) printf("%c ist die mittlere Zahl und %c die kleinste\n", (r3>0) ? 'b' : 'c', (r3>0) ? 'c' : 'b' );
  else printf("b und c sind gleich groß und kleiner als a\n");
 }

 else

  if(r1<0 && r3>0) {
  printf("b ist die größte Zahl\n");
  if(r2) printf("%c ist die mittlere Zahl und %c die kleinste\n", (r2>0) ? 'a' : 'c', (r2>0) ? 'c' : 'a' );
  else printf("a und c sind gleich groß und kleiner als b\n");
  }

  else

  if(r2<0 && r3<0) {
    printf("c ist die größte Zahl\n");
    if(r1) printf("%c ist die mittlere Zahl und %c die kleinste\n", (r1>0) ? 'a' : 'b', (r1>0) ? 'b' : 'a' );
    else printf("a und b sind gleich groß und kleiner als c\n");
  }

  else

    if(!r1 && r2) printf("a und b sind gleich groß und größer als c\n");

    else

    if(!r2 && r3) printf("a und c sind gleich groß und größer als b\n");

    else

      if(!r3 && r1) printf("b und c sind gleich groß und größer als a\n");

      else

      printf("a, b und c sind gleich groß\n");


 printf("\na = %d\nb = %d\nc = %d\n",a,b,c);

 return 0;
}


wizo 05.03.2002 18:24

tschuldigung wegen dem elseif
gibts in c nicht aber wo anders ;)
@kikakater
was bedeutet zb if(!r3 ...??


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag