[linux-l] Re: Programmiersprachen - Lösung in Python (kurze Version)

Oliver Bandel oliver at first.in-berlin.de
Fr Sep 15 21:13:19 CEST 2006


On Mon, Sep 11, 2006 at 06:55:57AM +0000, Rocco Rutte wrote:
> Hi,
> 
> * Oliver Bandel [06-09-11 00:33:21 +0200] wrote:
> >Ich merke immer mehr, daß ich das Deklarations-Gewusel
> >abschreckend finde, wenn man also viel tippen muß,
> >um ein bischen Funktionalität zu erreichen.
> 
> Als Anhang mal eine sehr übersichtliche Variante für C, die im Grunde 
> das gleiche tut wie die von Axel, nur eben ohne die ganze Tipperei... 
> ;-)

Nett, süß geradezu :)

[...]
> #include <math.h>
> #include <stdio.h>
> 
> #define EPS     0.00001
> #define CNT     64
> #define STEP    0.1
> #define DIFF(Y,X)       (Y(X+EPS)-Y(X))/EPS
> 
> static double x2(double x) { return x*x; }
> static double x3(double x) { return x*x*x; }
> 
> int main(int argc, char** argv) {
>   struct {
>     double (*func)(double);
>     const char* name;
>   } Funcs[] = { { x2,"x^2" }, { x3,"x^3" }, { sin,"sin" }, 
>                 { cos,"cos" }, { 0,0 } };
>   unsigned short i,j;
>   double x;
> 
>   for (i=0; Funcs[i].name; i++)
>     for (j=0; j<CNT; j++, x=j*STEP)
>       printf("%s(%f)' = %f\n",Funcs[i].name,x,DIFF(Funcs[i].func,x));
> }


Und nun nehmen wir ann, daß die Datenstruktur mit den Funktionen
herum ge-pass-t wird,und auch verändert wird, und man hat verbogene
Pointer, oder einen sauber auf NULL gesetzten Pointer, also sinngemäß
sowas hier:


#include <math.h>                                                                                             
#include <stdio.h>                                                                                            

#define EPS     0.00001                                                                                       
#define CNT     64                                                                                            
#define STEP    0.1                                                                                           
#define DIFF(Y,X)       (Y(X+EPS)-Y(X))/EPS                                                                   

static double x2(double x) { return x*x; }
static double x3(double x) { return x*x*x; }

int main(int argc, char** argv) {
  struct {
    double (*func)(double);
    const char* name;
  } Funcs[] = { { x2,"x^2" }, { x3,"x^3" }, { sin,"sin" },                                                    
                { NULL,"cos" }, { 0,0 } };
  unsigned short i,j;
  double x;
   
  for (i=0; Funcs[i].name; i++)
    for (j=0; j<CNT; j++, x=j*STEP)
      printf("%s(%f)' = %f\n",Funcs[i].name,x,DIFF(Funcs[i].func,x));
}


Und dann hat man seinen BUS-ERROR....


Ciao,
 Oliver



Mehr Informationen über die Mailingliste linux-l