• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Anfänger sucht Lösung bezügltich Globe und statischen Variablen...

titus123

Gloster
Registriert
04.10.07
Beiträge
63
Hallo,
derzeit arbeite ich das Buch "Objekt-C Der Einstieg" durch...

Da ich neu in der Materie bin, muss ich gestehen, dass mir manches sehr schwer fällt.
Nun bin ich dran eine Aufgabe die mir das Buch gestellt hat und ich scheitere.

Es geht um folgendes:

Die Innenwinkel eines Dreiecks müssen zusammen 180 Grad ergeben.

Erstellen Sie ein neues C Command Line Tool namens Triangle.
Schreiben Sie in main.c eine Funktion, die die ersten beiden Winkel
annimmt und den dritten zurückgibt. So wird sie aussehen, wenn Sie sie
aufrufen:

#include <stdio.h>
// Fügen Sie die neue Funktion hier ein


int main(int argc, const char * argv[])

{
float angleA = 30.0;
float angleB = 60.0;
float angleC = remainingAngle(angleA, angleB);
printf("The third angle is %.2f\n", angleC);
return 0;
}

Der Output sollte so lauten:


The third angle is 90.00


Mein Problem ist das ich bisher immer ganz durch dieses Buch durchgekommen bin und seit gestern an dieser Aufgabe hänge und auch nicht vorher weiter machen möchte...

Im Prinzip muss ich eine neue Variable deklinieren:

Variable X = 180 und dann (Variable X - (angleA+angleB))
Und dann das ausgeben in der printf()



Ich habe schon solche Sachen ausprobiert:


float remainingAngle (float allIN){ //Ich komme hier noch nicht weiter !!!

float angleC = allIN - (angleA + angleB);
return angleC;
}

Wenn mir jemand zeigen wie es richtig aussehen muss wäre ich sehr dankbar!

Gruss Titus
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Bei der Aufgabe geht es weder um globale noch um statische Variablen. Es geht um Übergabe von Parametern an Funktionen und um die Rückgabe von Werten durch Funktionen. In der main-Funktion ist ja der Aufruf der Funktion vorgegeben:

Code:
float angleC = remainingAngle(angleA, angleB);
Es wird eine Funktion aufgerufen, die zwei Parameter übergeben bekommt und der Rückgabewert wird der Variablen angleC zugewiesen. Der Datentyp für die Parameter und Rückgabewert ist auch durch die main-Funktion vorgegeben. Also musst Du eine Funktion schreiben, die zwei Parameter entgegen nimmt, den fehlenden Winkel aus den übergebenen Parametern berechnet und das Ergebnis dann zurück gibt. Ich könnte Dir die Funktion jetzt hier hin schreiben, aber dann lernst Du ja nichts. ;) Also versuche Dich noch mal daran. Es ist wirklich nicht schwer.

MacApple
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.574
Die Funktion remainingAngle() soll zwei Floats als Eingabewerte haben und einen Float als Ausgabe liefern. Die richtige Deklaration muss also lauten:

float remainingAngle(float a, float b);

Statt a und b kann man natürlich auch beliebige andere Namen wählen.

Eine mögliche Lösung ist deshalb zum Beispiel:

Code:
float remainingAngle(float a, float b)
{
     float result;

     result = 180.0 - (a + b);
     return result;
}

Man dürfte aber auch ganz kurz schreiben:

Code:
float remainingAngle(float a, float b)
{
     return 180.0 - (a + b);
}
 

titus123

Gloster
Registriert
04.10.07
Beiträge
63
Hallo,
erst einmal möchte ich mich sehr herzlich bedanken. Durch eure Hilfe hat es nun geklappt.
Mein Problem ist häufig, das ich die Logik dahinter verstehe (zugegeben in diesem Bsp. auf sehr leicht), aber die korrekten Zeilen Setzung nicht beherrsche. In dem Moment wenn ich selber eine Funktion schreibe bin ich noch sehr verunsichert...

Kenn jemand von euch eventuell ein Buch mit Übungsaufgaben + Lösung ? Also wo diverse Aufgaben bezüglich Funktion drin stehen die man Durcharbeiten kann und somit trainieren kann (Schön wären auch Lösungsansätze dabei)?
Ich finde es bisslang noch sehr schwierig mit selber Aufgaben zu stellen da ich noch am Anfang bin...



Vielen vielen Dank
 

titus123

Gloster
Registriert
04.10.07
Beiträge
63
Also weil ich anfangs "globale und statische Variablen" erwähnte, poste ich hier einen Auszug aus dem Buch:

5.8 Globale und statische Variablen
In diesem Kapitel haben wir über lokale Variablen gesprochen, die
nur während der Ausführung einer Funktion existieren. Es gibt auch
Variablen, auf die man jederzeit von einer beliebigen Funktion aus
zugreifen kann. Diese werden als globale Variablen bezeichnet. Damit
eine Variable global wird, deklarieren Sie sie außerhalb einer bestimmten
Funktion. Sie könnten z. B. eine Variable lastTemperature
einfügen, die die Temperatur enthält, die aus Celsius umgerechnet wurde.
Fügen Sie dem Programm eine globale Variable hinzu:

#include <stdio.h>
#include <stdlib.h>

// Globale Variable deklarieren

float lastTemperature;
float fahrenheitFromCelsius(float cel)
{
lastTemperature = cel;
float fahr = cel * 1.8 + 32.0;
printf("%f Celsius is %f Fahrenheit\n", cel, fahr);
return fahr;
}
int main(int argc, const char * argv[])
{
float freezeInC = 0;
float freezeInF = fahrenheitFromCelsius(freezeInC);
printf("Water freezes at %f degrees Fahrenheit\n",freezeInF);
printf("The last temperature converted was %f\n",lastTemperature);
return EXIT_SUCCESS;
}

Jedes komplexe Programm wird Dutzende Dateien mit den
verschiedensten Funktionen enthalten. In all diesen Dateien stehen dem
Code globale Variablen zur Verfügung. Manchmal wollen Sie, dass eine
Variable zwischen verschiedenen Dateien weitergegeben wird. Aber wie
Sie sich vorstellen können, kann es auch sehr verwirrend wirken, wenn
man es mit einer Variablen zu tun hat, auf die man mit mehreren
Funktionen zugreifen kann. Um das zu bewerkstelligen, gibt es statische
Variablen. Eine statische Variable ist insofern wie eine globale, weil sie
außerhalb einer Funktion deklariert wird. Doch auf eine statische Variable
kann man nur von dem Code der Datei zugreifen, in der sie deklariert
wurde. Also bekommen Sie den nicht standortbezogenen „Existiert
außerhalb einer Funktion“-Vorteil und vermeiden gleichzeitig das „Du
hast an meiner Variablen herumgefummelt!“-Problem.
Sie können eine globale Variable zu einer statischen machen, aber
weil Sie nur eine Datei haben (main.c), wird das keine Auswirkungen
haben.

// Eine statische Variable deklarieren
static float lastTemperature;



Sowohl statische als auch globale Variablen können bei der
Erstellung einen Anfangswert bekommen:


// lastTemperature mit 50 Grad initialisieren
static float lastTemperature = 50.0;



Wenn Sie keinen Anfangswert vergeben, werden die Variablen
automatisch mit null initialisiert.
In diesem Kapitel haben Sie Funktionen kennengelernt. Wenn wir in
Teil III zu Objective-C kommen, werden Sie den Begriff Methode hören –
eine Methode ist einer Funktion sehr ähnlich.
 

Scotch

Bittenfelder Apfel
Registriert
02.12.08
Beiträge
8.055
Und das ist wirklich aus einem Buch über Objective-C? Ich frage nur, weil das, was du hier postest reines C ist - mit Objective-C hat das nichts zu tun.