bibliothek prob



  • Hallo allerseits

    irgendwie lässt sich das untenstehende Prog nicht compilieren. Denk mal es liegt an der <math.h> bibliothek, aber ganz sicher bin ich mir nicht.
    Habt ihr nen Tip?

    Gruß Jürgen

    #include <stdio.h>
    #include <curses.h>
    #include <math.h>
    #include <ctype.h>
    
    #define SCHALL 330.0                 /* Schallgeschwindigkeit 330 m/s. */
    #define ERDBESCHL 9.81               /* Erdbeschleunigung 9.81 m/(s^2).*/
    #define ABWEICHUNG 0.001             /* zugel. Abweichung bei Iteration*/
    #define BIL clear();                 /* Bildschirm loeschen             */
    #define ROW 4                        /* erste Ausgabezeile             */
    #define COL 10                       /* Ausgabespalte                  */
    #define RETURN 13
    
    void wait(void);
    
    void main(void)
    {
      char kennbuchst;
      double zeit,zeit2;          /* Gesamtzeit in Sekunden.               */
      double tiefe,tiefe1,tiefe2; /* Tiefe des Brunnens in Meter.          */
      double diff, x, y;          /* Hilfsvariablen                        */
      int i;
      char str[100];
      initscr();                        /* Initialisiert das Terminal      */
      cbreak();                         /* Zeichen sofort weiterreichen    */
      nonl();                           /* Keine neue Zeile bei Return     */
      intrflush(stdscr, FALSE);
      keypad(stdscr, TRUE);             /* Ziffernblock aktivieren.        */
      clear();                          /* Bildschirm loeschen             */
    
      do                          /* Beginn der do-while-Schleife          */
      {
        BIL;
        mvaddstr(ROW,COL," L  Berechnen der Tiefe mit der Loesungsformel");
    
        mvaddstr(ROW+2,COL," I  Berechnen der Tiefe mittels Iteration");
    
        mvaddstr(ROW+4,COL," T  Ausgeben einer Tabelle ");
    
        mvaddstr(ROW+6,COL," x  Programm beenden");
    
        mvaddstr(ROW+8,COL,"    Programmfortsetzung:       ");
        kennbuchst = getch();
        BIL;
        switch(kennbuchst)
        {
          case 'l':                 /* Berechnen der Tiefe nach Eingabe   */
          case 'L':                 /* der gemessenen Zeit                */
            addstr("\n\n\n\t\t Zeit vom Loslassen des Steins bis zum ");
            addstr("\n\t\t Eintreffen des Schalls in Sekunden :  ");
            addstr("\n\t\t ");
             getstr(str);
            sscanf(str,"%lf",&zeit);
            x = zeit/SCHALL + 1.0/ERDBESCHL;
            y = zeit/SCHALL;
            tiefe = (double)(SCHALL * SCHALL * ( x - sqrt(x * x - y * y )));
    
            sprintf(str,"\n\n\t\t Der Schacht ist %5.1f Meter tief",tiefe);
    				addstr(str);
            wait();
            break;
    
          case 'i':                  /* Berechnen der Tiefe nach Eingabe   */
          case 'I':                  /* der gemessenen Zeit                */
            addstr("\n\n\n\t\t Zeit vom Loslassen des Steines bis zum ");
            addstr("\n\t\t Eintreffen des Schalls in Sekunden : ");
            addstr("\n\t\t ");
             getstr(str);
            sscanf(str,"%lf",&zeit);
    
            tiefe1 = zeit * zeit * ERDBESCHL / 2;    /* Berechnung der     */
            zeit2  = tiefe1/SCHALL;                  /* beiden Grenzwerte  */
            tiefe2 = (zeit - zeit2) * (zeit - zeit2) /* 'tiefe1' u.'tiefe2'*/
                     * ERDBESCHL / 2;
    
            sprintf(str,"\n\n\t\t Oberer Grenzwert:  = %lf Meter" ,tiefe1);
    				addstr(str);
            sprintf(str,"\n\t\t Unterer Grenzwert: = %lf Meter\n\n" ,tiefe2);
    				addstr(str);
            i = 0;
            do  
            {
              i++;
              tiefe = .5 * (tiefe1+tiefe2);   /* Mitte zw. tiefe1 u. tiefe2*/
              diff = sqrt(2*tiefe/ERDBESCHL)  /* Abweichung der berechneten*/
                     +tiefe/SCHALL - zeit;    /* von der gemessenen Zeit.  */
    
              if (diff   >= 0.0)             /* Das Intervall wird neu    */
                tiefe1 =  tiefe;             /* festgelegt.               */
              else
                tiefe2 = tiefe;
    
              sprintf(str,"\n\t\t %1d .Berechnungslauf: %5.2f Meter",i,tiefe);
    					addstr(str);
            } while (fabs(diff) > ABWEICHUNG);/* solange bis die Zeit nur  */
                                              /* noch um die festgelegte   */
                             /* Abweichung von der gemessenen entfernt ist */
            wait();
            break;
    
          case 't':                /* Ausgeben einer Tabelle fuer Zeiten  */
          case 'T':                /* zwischen 1 und 10 Sekunden         */
            addstr("\n\n\n\n\t\t Tabelle fuer gemessene Zeiten ");
            addstr("\n\t\t von 1 bis 10 Sekunden:");
            addstr("\n\n\t\t Sekunden  Meter");
            for( zeit = 1.0; zeit <= 10.0 ; zeit++)
            {
              x = (double)(zeit/SCHALL + 1/ERDBESCHL);
              y = (double)(zeit/SCHALL);
              tiefe = (double)( SCHALL *  SCHALL * ( x - sqrt(x * x - y * y )));
              sprintf(str,"\n\t\t   %4.1f    %5.1f ",zeit,tiefe);
              addstr(str);
            }
            wait();
            break;
          case 'x':
            mvaddstr(23,COL,"Programmende");
            break;
    
          default:                                  /* Anweisungsblock des */
            mvaddstr(23,COL,"Falscher Kennbuchstabe");/* Fehlerfalles      */
            wait();
            break;
        }
      }while(kennbuchst != 'x');         /* Ende der do - while-Schleife   */
      endwin();
    }
    /***********************************************************************/
    /*   Die Funktion 'wait' gibt einen Text aus und wartet auf 'RETURN'   */
    /***********************************************************************/
    void wait(void)
    {
     mvaddstr(24,1,"Bitte die Taste RETURN druecken!");
     while( getch() != RETURN );
    }
    /************************************************************************/
    


  • c:\Dokumente und Einstellungen\admin\Desktop\helloworld.c(63): fatal error C1083: Include-Datei kann nicht geöffnet werden: 'curses.h': No such file or directory

    🙄



  • Sieht so aus, als ob das Programm fuer Linux geschrieben waere. Ggf. musst Du Dir die curses-Bibliothek fuer Deine Plattform besorgen.



  • Vertexwahn schrieb:

    c:\Dokumente und Einstellungen\admin\Desktop\helloworld.c(63): fatal error C1083: Include-Datei kann nicht geöffnet werden: 'curses.h': No such file or directory

    🙄

    lach

    ich würds einfach mal unter linux probieren 😉



  • und ich dacht wir wären hier im ANSI C Forum 😉



  • tja, nicht alle wissen das 😉



  • problem gelöst, hab ohne -lm compiliert 😃



  • das nächste mal einfach in linux posten 😉



  • okay beim nächsten mal, war nicht ganz bei der sache 🙂


Anmelden zum Antworten