Hilfe:(
-
Hallo ihr,
ich habe ein großes Problem mit einem recht einfachen Programm aber ich komme leider nicht weiter. Ich weiß auch nicht ob ich hier richtig bin aber ich hoffe das mir hier jemand weiterhelfen kann.
Aufgabenstellung
-Schreiben Sie eine Funktion berechne_kugeldaten (), die die Oberfläche und das Volumen einer Kugel berechnet.
-Die Funktion enthält 3 Übergabeparameter: den Radius und zwei Zeiger auf double Variablen, in welche die Funktion berechne-kugeldaten () die Oberfläche und das Volumen nach ihrer Berechnung zurück schreibt.
-Schreiben Sie ein Programm, welches die Funktionen berechne-kugeldaten() aufruft und mit Hilfe der Standard-Funktion scanf() für verschiedene Radien testet.So sieht das aus, was ich bis jetzt hinbekommen habe. Ich hoffe mir kann schnell geholfen werden, da ich am Mittwoch schon die Informatik Klausur schreibe und hier am verzweifeln bin.
/* kugeldaten */
#include <stdio.h>
#define pi 3.14void berechne_kugeldaten (float r, int *o, int *v); /* prototyp */
int main (void)
{
int *o;
int *v;
float r = 0;printf ("Geben Sie einen Wert f\x81r den Radius ein:\n");
berechne_kugeldaten(r, &o, &v);
scanf (" %f ", &r);printf ("Radius = %f/n Oberfl. = %f/n Vol. = %f/n", r, *o, *v);
return 0;
}void berechne_kugeldaten (float r, int *o, int *v)
{
float oo;
float vv;oo = 4. * pi * r * r;
vv = 1.333 * pi * r * r * r;
*o = &oo;
*v = &vv;return 0;
}Wir arbeiten in der FH mit dem Microsoft Visual Express 2010.
Wir öffnen dann da immer ein leeres Projekt und fügen dann bei der Quelldatei ein ich glaube c++ Datei ein und nennen die dann aber z.B. test.c also mit der Endung .c. (Vielleicht ist ja auch hier irgendwo mein Fehler, dass ich die Falsche datei zum hinzufügen auswähle)Ich bedanke mich jetzt schon einmal für eure Bemühungen.
Gruß Celia
-
Das ist C, kein C++. Du solltest einen aussagekräftigeren Titel und Codetags verwenden.

Ich bin zwar kein C Kenner, aber das
float oo; float vv; oo = 4. * pi * r * r; vv = 1.333 * pi * r * r * r; *o = &oo; *v = &vv;sollte denke ich so aussehen.
*o = 4. * pi * r * r; *v = 1.333 * pi * r * r * r;Oh und das return 0 in der Funktion ist da falsch. Void Funktionen geben nichts zurück. Außerdem sollten da double Zeiger sein.
-
Lies nochmal die Aufgabenstellung, da steht doch dass es
1. der Radius und
2. zwei Zeiger auf double
als Parameter sind.
D.h. die Signatur von berechne_kugeldaten() ist schon falsch.Dann legst Du in main zwei double an und übergibst deren Adresse an Deine Funktion.
Axo: den Radius musst Du - ganz klar eigentlich - einlesen _bevor_ du Deine Funktion zur Berechnung aufrufst....
-
Nymer schrieb:
Das ist C, kein C++. Du solltest einen aussagekräftigeren Titel und Codetags verwenden.

Ich bin das Erste mal in einem Forum unterwegs deswegen bin ich für jeden Tip dankbar.
Ich habe jetzt das Programm soweit, dass mir keine Fehler mehr angezeigt werden, jedoch wenn ich das Programm starte und in der Konsole den Wert für den Radius eingebe passiert gar nichts. Der Courser spring immer nur eine Zeile weiter runter.
Ich finde den Fehler einfach nicht:(
#include <stdio.h>
void berechne_kugeldaten (double r, double *o, double *v);
#define pi 3.14
int main (void)
{
double r, o, v;
printf ("Radius eingeben: \n");
scanf (" %lf ", &r);berechne_kugeldaten (r, &o, &v);
printf ("\nRadius: %.2lf \nOberflaeche: %.2lf \nVolumen: %.2lf \n", r, o, v);
return 0;
}void berechne_kugeldaten (double r, double *o, double *v)
{
*o = r*r*pi*4.;
*v = r*r*r*pi*1.33;
}
-
[Edit] Sorry hatte float statt double gelesen.
gruß
syntax
-
Du musst die Leerschlaege im Formatierungsstring weglassen:
scanf ("%lf", &r);
-
Nö,
%lfist fürdoublerichtig.
EDIT: Bezog sich auf Syntax' Beitrag.Warum das nicht geht ist mir aber auch suspekt. Ist das der Quellcode 1:1 übernommen? Und gibst du die Komma-Zahlen auch mit . statt , ein?
-
Selbst wenn scanf nichts einliest, hat Radius irgendein Wert.
Irgendein Ergebnis muss ausgegeben werden.Bleibt das Konsolenfenster denn offen?
-
Ja, das Konsolenfenster bleibt offen. Mit dem Enter zur Bestätigung von scanf () wird immer eine Zeile weiter gesprungen, ohne das sonst etwas passiert.
-
Hast Du icarus' Rat befolgt?
-
Oh, das hab ich überlesen. Jetzt funktioniert es :-).
Vielen vielen Dank!
-
Ich hätte da noch ein kleines Problem....
Aufgabe ist es den Mittelwert m und die Varianz v einer Messreihe, messung [], zu berechnen und per Zeiger zurück zu geben.
Ich bekomme das Programm nicht zum laufen.
Wäre super, wenn mir nochmal jemand helfen könnte...#include <stdio.h>
void berechne_m_v (double messung [N], double *m, double *v);
#define N 5
int main (void)
{
double messung [N] = {1.1, 1.5, 1.3, 1.4, 1.7};
double m, v;berechne_m_v (messung,&m, &v);
printf ("Messwerte: %lf %lf %lf %lf %lf /nAnzahl: %d /nMittelwert: %lf Varianz: %lf"
, messung [0], messung [1], messung [2], messung [3], messung [4], N, m, v);return 0;
}void berechne_m_v (double messung [N], double *m, double *v)
{
int i = 1;while (i < 2)
{
i = i + 1;*m = (messung [0] + messung [1] + messung [2] + messung [3] + messung [4])/N;
}while ( i < 3)
{
i = i + 1;*v = ((messung [0] - *m)+(messung [1]-*m)+(messung [2]-*m)+(messung [3]-*m)+(messung [4]-*m))/(N-1);
}
}
-
Bitte verwende cpp-Tags, sonst kann man deinen Code nicht lesen.
Fuer die Korrektur siehe den Kommentar im Code.#include <stdio.h> #define N 5 void berechne_m_v (double messung [N], double *m, double *v); // Muss nach der Definition von 'N' kommen, da sonst der Compiler nicht weiss, was 'N' ist. int main (void) { double messung [N] = {1.1, 1.5, 1.3, 1.4, 1.7}; double m, v; berechne_m_v (messung,&m, &v); printf ("Messwerte: %lf %lf %lf %lf %lf /nAnzahl: %d /nMittelwert: %lf Varianz: %lf" , messung [0], messung [1], messung [2], messung [3], messung [4], N, m, v); return 0; } void berechne_m_v (double messung [N], double *m, double *v) { int i = 1; while (i < 2) { i = i + 1; *m = (messung [0] + messung [1] + messung [2] + messung [3] + messung [4])/N; } while ( i < 3) { i = i + 1; *v = ((messung [0] - *m)+(messung [1]-*m)+(messung [2]-*m)+(messung [3]-*m)+(messung [4]-*m))/(N-1); } }So sollte es zumindest kompilieren.
-
const unsigned int N = 5U; // oder anderen integralen typenist in der Regel besser als
#define N 5
-
Tim06TR schrieb:
const unsigned int N = 5U; // oder anderen integralen typenist in der Regel besser als
#define N 5Begründung? (Für den TE
)
-
Sorry, ich habe keine Ahnung was cpp-Tags sind. Bin ein absoluter Neuling in Sachen Programmierung.
Dein Tip war aber echt gut, vielen Dank
-
Celia schrieb:
Sorry, ich habe keine Ahnung was cpp-Tags sind. Bin ein absoluter Neuling in Sachen Programmierung.
Dein Tip war aber echt gut, vielen Dank
Du findest die cpp Tags unter den Smileys. Alternativ kannst du sie auch von Hand tippen
[cpp*]
// Hier dein Code
[/cpp*]
und dabei einfach das * weglassen.
-
Du hast da diese merkwürdigen while-Schleifen. Haben die einen Zweck?
-
Hacker schrieb:
Tim06TR schrieb:
const unsigned int N = 5U; // oder anderen integralen typenist in der Regel besser als
#define N 5Begründung? (Für den TE
)Defines werden Konstanten vielleicht bei der Mikroprozessorprogrammierung vorgezogen, weil man dort wenig Speicher hat und somit erfreut darüber ist, dass man sich Speicher für eine Variable spart, in dem es direkt im Code ersetzt wird. Aber selbst dort, sollte man versuchen es mit Konstanten zu lösen.
Außerdem und somit viel wichtiger, ist der Scope. Während defines einen global file scope haben, haben Konstanten den Scope, in dem sie definiert werden.
-
Hallo,
ich möchte den Wert pmax mit hilfe von return an main () zurück geben, das funktioniert aber nicht. Mir wird immer der Fehler: Run-Time Check Failure #3 - The variable 'wmax' is being used without being initialized. angezeigt.
Was habe ich falsch gemacht?#include <stdio.h>
int maximale_leistung (int drehzahl [19], double drehmoment [19], double *pmax);
int main (void)
{
int drehzahl [19] = {1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000};
double drehmoment [19] = {6., 16., 32., 40., 43., 44., 45., 47., 48., 51., 53.8, 50.1, 48.6, 45.3, 43.9, 38., 29., 21., 17.};
double pmax;
int wmax;maximale_leistung (drehzahl, drehmoment, &pmax);
printf ("Maximale Leistung pmax= %.2lf kW\ndazugehoerige Drehzahl wmax: %d U/min\n", pmax, wmax);
return 0;
}int maximale_leistung (int drehzahl [19], double drehmoment [19], double *pmax)
{
double p [19];
int i;
int wmax = 0;for ( i = 0; i < 19; i++)
{
p [i] = (drehzahl [i] * drehmoment [i]) / 1000;if ( p [i] > p [i-1] )
{
*pmax = p [i];
wmax = drehzahl [i];
}
}
return wmax;
}