[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