Zeiger auf Funktionen
-
Hey Leute, ich bin noch neu im Programmiergeschäft und habe auch eine Frage...
Ích soll ein Programm schreiben, was das Volumen und Oberfläche eines Zylinders ausgibt. Radius und höhe sind selbst einzutragen. Von der Main funktion soll jeweils ein Pointer auf die seperate Rechenfunktion für Höhe bzw. Oberfläche zeigen.
Mein Problem ist: Wie bewerkstelliuge ich es, dass der Pointer auch gleich das ergebnis der Rechenfunktion an die Main zurückgibt und diese es dann mit Printf ausgeben kann? zudem habe ich noch arge Probleme die Datentypen bei den Pointern zu deklarieren. Außerdem gibt mir Visual studio an, das "Pi" was ich in der header definiert habe und die "^2" in der Formel keinen Datentyp besitzen? Wie löse ich das?
Hier mal das, was ich bisher geschrieben habe...
#include "Aufgabe10.h" double radius; double hoehe; void main() { printf("Geben sie den Radius der Grundfläche ein:\n"); scanf("%f", radius); printf("Geben sie die Höhe des Zylinders ein:\n"); scanf("%f", hoehe); double (*zylvolumen)(); double (*zyloberflaeche)(); system("pause"); } void zylvolumen() { double Volumen; Volumen = radius^2*hoehe*Pi; } void zyloberflaeche() { double Oberflaeche; Oberflaeche = 2*Pi*radius*hoehe; }
Header:
#include <stdio.h> #include <stdlib.h> #include <math.h> #define Pi 3.1415926536
-
ValueH schrieb:
Von der Main funktion soll jeweils ein Pointer auf die seperate Rechenfunktion für Höhe bzw. Oberfläche zeigen.
Sicher, dass das die Aufgabe ist? Das ist eher was für Fortgeschrittene, wozu du nach deinem Code und dem Rest der Frage zu urteilen noch nicht gehörst.
-
#define PI 3.1415926536 double cylinder_volume(double radius, double height) { return PI * radius * radius * height; } double cylinder_surface(double radius, double height) { return 2 * PI * radius * height; } int main(void) // void main() gibt es im Standard nicht. { double volume, surface, radius = 5.6, height = 7.4; volume = cylinder_volume(radius, height); surface = cylinder_surface(radius, height); printf("Radius: %f\tHeight: %f\n", radius, height); printf("Volume: %f\tSurface: %f\n", volume, surface); return 0; }
Edit:
Bashar schrieb:
ValueH schrieb:
Von der Main funktion soll jeweils ein Pointer auf die seperate Rechenfunktion für Höhe bzw. Oberfläche zeigen.
Sicher, dass das die Aufgabe ist? Das ist eher was für Fortgeschrittene, wozu du nach deinem Code und dem Rest der Frage zu urteilen noch nicht gehörst.
Die Aufgabe macht auch wenig Sinn mit Funktionszeigern.
-
So ist unser dozent halt...oft machen die aufgaben nicht wirklich sinn, bzw. sind viel einfacher zu lösen. Und nein wir hatten erst paar vorlesungen info, deswegen entschuldigt
-
Bashar schrieb:
ValueH schrieb:
Von der Main funktion soll jeweils ein Pointer auf die seperate Rechenfunktion für Höhe bzw. Oberfläche zeigen.
Sicher, dass das die Aufgabe ist? Das ist eher was für Fortgeschrittene, wozu du nach deinem Code und dem Rest der Frage zu urteilen noch nicht gehörst.
ein Programm schreiben, was das Volumen
undoder die Oberfläche eines Zylinders ausgibtwürde mit Funktionszeigern eher Sinn machen.
-
Nö. Warum sollte es dadurch plötzlich Sinn machen?
-
cooky451 schrieb:
Nö. Warum sollte es dadurch plötzlich Sinn machen?
Weil man dann, je nachdem was gefragt ist, die eine oder andere Funktion per Zeiger aufrufen könnte.
Soll ja wohl ne Übung sein.
-
EOP schrieb:
cooky451 schrieb:
Nö. Warum sollte es dadurch plötzlich Sinn machen?
Weil man dann, je nachdem was gefragt ist, die eine oder andere Funktion per Zeiger aufrufen könnte.
Du kannst auch so entweder die eine, oder die andere Funktion aufrufen. :p
Die einzigen Situationen in denen Funktionszeiger Sinn machen, sind Parameter (s. qsort()), oder wenn man sich Polymorphie nach C zaubern möchte.