Was ist da Falsche bei meinem Code? Da steht zu wenig Argumente im Funktionsabruf oder auch das Argument vom Typ Bruch ist mit dem int nicht kompatibel?

DonkeyShot  31.03.2022, 17:57

Bitte Problem genau beschreiben. Wenigstens die Programmiersprache nennen. Kommt ein Kompilierfehler? Kommt ein Laufzeitfehler? Wenn ja, welcher? Falsches Verhalten? Welches?

Uncovee 
Fragesteller
 31.03.2022, 18:00

Da steht zu wenig Argumente im Funktionsabruf oder auch das Argument vom Typ Bruch ist mit dem int nicht kompatibel?

2 Antworten

Bruchdivision erwartet Zähler und Nenner als seperate Integralwerte (2 Parameter), Du übergibst beim Aufruf ein struct aus zwei Integralwerten (1 Parameter).

int Bruchdivision(int zaehler, int nenner);
/* Falscher Prototyp gemäß Aufgabenstellung. */
float Bruchdivision(BRUCH fraction);
/*wäre wohl angemessener. */
Uncovee 
Fragesteller
 31.03.2022, 18:30
#include <stdio.h>
#include <stdlib.h>


/*
Aufgabe:
Gegeben sei eine Struktur „BRUCH“ bestehend aus Zähler und Nenner. Schreiben Sie
eine Funktion „BruchDivision“, die eine Struktur „BRUCH“ als Input bekommt und als
Output das Ergebnis der Division Zähler/Nenner zurückgibt. Wählen Sie die entsprechenden
Datentypen !
*/


typedef struct {
	int zaehler;
	int nenner;
} BRUCH;




int Bruchdivision(int zaehler, int nenner)
{
	return(zaehler / nenner);
}




int main()
{
	BRUCH b1;
	b1.zaehler = 4;
	b1.nenner = 5;
	float Bruchdivision(BRUCH fraction);
	printf("Ergebnis = %d \n", Bruchdivision);




	system("pause");




	return 0;
}
// Die console taucht auf aber da steht Dekleration inkopatibel
0
KarlRanseierIII  31.03.2022, 18:58
@Uncovee

Der Aufruf war gemäß Aufgabe, der Teil hier ist das eigentliche Prioblem:

int Bruchdivision(int zaehler, int nenner)
{
	return(zaehler / nenner);
}

float Bruchdivision(BRUCH f){ return f.zaehler/f.nenner;}
/* Dann Aufruf in main() mit 
   float z=Bruchdivision(b1);
   und die Anpassung des printf nicht vergessen */
1
Uncovee 
Fragesteller
 31.03.2022, 18:59
@KarlRanseierIII
#include <stdio.h>


/* Aufgabe:
Gegeben sei eine Struktur „BRUCH“ bestehend aus Zähler und Nenner. Schreiben Sie
eine Funktion „BruchDivision“, die eine Struktur „BRUCH“ als Input bekommt und als
Output das Ergebnis der Division Zähler/Nenner zurückgibt. Wählen Sie die entsprechenden
Datentypen !
*/


typedef struct {
	int zaehler;
	int nenner;
} BRUCH;




float Bruchdivision(BRUCH fraction)
{
	float zaehler = 100;
	int nenner = 2;
	return(zaehler / nenner);
}




int main()
{
	BRUCH b1;
	b1.zaehler = 4;
	b1.nenner = 5;
	float z = Bruchdivision(b1);
	printf("Ergebnis = %f \n", z);




	system("pause");




	return 0;
} 


0
Uncovee 
Fragesteller
 31.03.2022, 19:00
@Uncovee

das stimmt bei mir ja auch. ich bekomme auch so den richtigen wert raus

0
Uncovee 
Fragesteller
 31.03.2022, 19:02
@KarlRanseierIII

Und wieso bekomme ich wegen fraction bitte so viele nullstellen raus

0
Uncovee 
Fragesteller
 31.03.2022, 18:58

Was soll fraction bedeuten oder für was steht des da

0
KarlRanseierIII  31.03.2022, 19:08
@Uncovee
typedef struct {
        int zaehler;
        int nenner;
} BRUCH;


float Bruchdivision(BRUCH fraction)
{
        return (float)fraction.zaehler / fraction.nenner;
}

int main()
{
        BRUCH b1;
        b1.zaehler = 4;
        b1.nenner = 5;
        float z = Bruchdivision(b1);
        printf("Ergebnis = %f \n", z);
        return 0;
}

Mein Fehler, bei zwei ints findet eien Ganzzahldivision statt, daher muß mindestens einer der beiden gecastet werden.

1
Uncovee 
Fragesteller
 31.03.2022, 19:15
@KarlRanseierIII

Na das da oben von mir reicht mir eh aus aber was bedeutet FRACTION und wieso bekomme ich auf der Konsole die vielen unnötigen null weg

0
KarlRanseierIII  31.03.2022, 19:18
@Uncovee

Das ist der Name des Parameters, wie üblich.

printf("%.1f",....)

Siehe vollständige Doku zu printf.

1

Integer hat keine Nachkommastellen, falls du das meinst.

Uncovee 
Fragesteller
 31.03.2022, 17:59
? Da steht zu wenig Argumente im Funktionsabruf oder auch das Argument vom Typ Bruch ist mit dem int nicht kompatibel?
0
DonkeyShot  31.03.2022, 18:01
@Uncovee

Du übergibst ja nicht zwei int wie gefordert sondern einen struct. Entweder die Signatur der Funktion ändern, also einen struct erwarten, oder zwei int übergeben statt eines structs.

0
DonkeyShot  31.03.2022, 18:05
@Uncovee

Die Anzahl und der Typ der Parameter plus der Rückgabetyp der Funktion ist die Signatur. Also die Parameter änderst du von (int, int) in (BRUCH)

1