WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Bitte helft mir! (http://www.wcm.at/forum/showthread.php?t=52680)

pirate man 10.04.2002 07:15

ajo, hab dein programm gestern noch getestet
nachdem man die grenzen angegeben hat, schliesst sich das fenster

irrsinn 10.04.2002 07:20

folgendes ich geh jetzt auf die uni und mach eine prüfung. am abend hast eine funktionierende version

pong 10.04.2002 07:24

@irrsinn i hab ma erlaubt deine version abzuändern, ich hoff es geht ohne probs

Code:

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

#define obergrenze 100
#define untergrenze 0

int main()
{
        unsigned short usLower = untergrenze;
        unsigned short usUpper = obergrenze;
        unsigned short usQuery = 0;
        unsigned short usChar = 0;

/*        // Zu behandelndes Intervall abfragen
        printf("\nIntervall Untergrenze eingeben: ");
        scanf("%d", &usLower);
        printf("\nIntervall Obergrenze eingeben: ");
        scanf("%d", &usUpper);

        if (usLower == usUpper)
        {
                printf("\nUnter und Obergrenze sind gleich!");
                exit(0);
        } // if
*/
        // diese konstruktion ist nicht besonders elegant. aber für diese zwecke reichts alle mal
        for ( ; ; )
        {
                // ungefähre hälfte des intervalls ermitteln
                usQuery = usLower + (usUpper - usLower) / 2;

                printf("\nIst die Zahl größer (g), kleiner (k) oder gleich (e) %d", usQuery);
                usChar=getch();

                // ist die Zahl schon gefunden?
                if ((usUpper - usLower) == 2)
                {
                        printf("\nDie gesuchte Zahl ist %d", usQuery);
                        getch();
                        exit(0);
                } // if

                switch (usChar)
                {
                case 'g': // die Zahl ist größer
                        usLower = usQuery;
                        break;
                case 'k': // die Zahl ist kleiner
                        usUpper = usQuery;
                        break;
                case 'e': // die Zahl ist gefunden
                        printf("\nDie gesuchte Zahl ist %d", usQuery);
                        getch();

                        exit(0);
                        break;
                default:
                        printf("\nUngültige Eingabe. Programm wird beendet!");
                        exit(0);
                        break;
                } // switch
        } // for
} // main


pc.net 10.04.2002 07:37

hab auch erlaubt a bisserl rumzupfuschen ... (funktioniert jetzt auch bei einem doppelklick auf die .exe ;) )

Code:

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

int main()
{
  unsigned short usLower = 0;
  unsigned short usUpper = 0;
  unsigned short usQuery = 0;
  unsigned short usChar = 0;

  // Zu behandelndes Intervall abfragen
  printf("\nIntervall Untergrenze eingeben: ");
  scanf("%d", &usLower);
  printf("\nIntervall Obergrenze eingeben: ");
  scanf("%d", &usUpper);

  if (usLower == usUpper)
  {
    printf("\nUnter und Obergrenze sind gleich!");
    getch();
    return(0);
  } // if

  // diese konstruktion ist nicht besonders elegant. aber fuer diese zwecke reichts alle mal

  while (1)
  {
    // ungefaehre haelfte des intervalls ermitteln
    usQuery = usLower + (usUpper - usLower) / 2;

    printf("\nIst die Zahl groesser (g), kleiner (k) oder gleich (e) %d", usQuery);
    usChar = getch();

    // ist die Zahl schon gefunden?
    if ((usUpper - usLower) == 2)
    {
      printf("\nDie gesuchte Zahl ist %d", usQuery);
      break;
    } // if

    switch (usChar)
    {
      case 'g':    // die Zahl ist groesser
                    usLower = usQuery;
                    break;
      case 'k':    // die Zahl ist kleiner
                    usUpper = usQuery;
                    break;
      case 'e':    // die Zahl ist gefunden
                    printf("\nDie gesuchte Zahl ist %d", usQuery);
                    break;
      default:
                    printf("\nUngueltige Eingabe. Programm wird beendet!");
                    break;
    } // switch
  } // while
  getch();
  return(0);
} // main

gruß
pc.net

pirate man 10.04.2002 08:42

@ pong

deine version bzw. die von dir geänderte is fast so wies sein soll :)
die option g(leich) darf nicht zur verfügung stehen

das programm muss so fragen, dass zum schluss nur eine möglichkeit überbleibt

beipspiel (die zahl ist 34):

größer oder kleiner als 50?
k
größer oder kleiner als 25?
g
größer oder kleiner als 35?
k
größer oder kleiner als 30?
g
größer oder kleiner als 33?
g
die gesuchte zahl ist 34

ich hoff, du kriegst es so hin :)

irrsinn 10.04.2002 13:47

was soll dann passieren, wenn du dir sagen wir 50 "ausdenkst" und das programm fragt dich ob die gesuchte zahl größer oder kleiner als 50 ist? dann hast nämlich ein problem in der programmlogik.

pirate man 10.04.2002 14:21

gute frage
dann darf man sich halt nicht 50 ausdenken ;)

pong 10.04.2002 17:04

Code:

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

#define obergrenze 100
#define untergrenze 0

int main()
{
        unsigned short usLower = untergrenze;
        unsigned short usUpper = obergrenze;
        unsigned short usQuery = 0;
        unsigned short usChar = 0;

/*        // Zu behandelndes Intervall abfragen
        printf("\nIntervall Untergrenze eingeben: ");
        scanf("%d", &usLower);
        printf("\nIntervall Obergrenze eingeben: ");
        scanf("%d", &usUpper);

        if (usLower == usUpper)
        {
                printf("\nUnter und Obergrenze sind gleich!");
                exit(0);
        } // if
*/
        // diese konstruktion ist nicht besonders elegant. aber für diese zwecke reichts alle mal
        for ( ; ; )
        {
                // ungefähre hälfte des intervalls ermitteln
                usQuery = usLower + (usUpper - usLower) / 2;

                printf("\nIst die Zahl größer (g) oder kleiner (k) %d", usQuery);
                usChar=getch();

                // ist die Zahl schon gefunden?
                if (((usUpper - usLower) == 2) || ((usUpper - usLower) == 0))
                {
                        printf("\nDie gesuchte Zahl ist %d", usQuery);
                        getch();
                        exit(0);
                } // if

                switch (usChar)
                {
                case 'g': // die Zahl ist größer
                        usLower = usQuery;
                        break;
                case 'k': // die Zahl ist kleiner
                        usUpper = usQuery;
                        break;
/*                case 'e': // die Zahl ist gefunden
                        printf("\nDie gesuchte Zahl ist %d", usQuery);
                        getch();

                        exit(0);
                        break;
->mog a ned
*/
                default:
                        printf("\nUngültige Eingabe. Programm wird beendet!");
                        exit(0);
                        break;
                } // switch
        } // for
} // main


irrsinn 10.04.2002 17:08

und wenn dich das programm irgendwann im weiteren verlauf fragt ob die gesuchte zahl größer oder kleiner ist und dabei die gesuchte zahl ausgibt? solche situationen können unabhängig von der gesuchten zahl und unabhängig vom intervall auftreten.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:20 Uhr.

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