Struct und ausgelagerte Fkt.
-
Heyho,
schönen ersten Mai erstmal. Ich probiere mich grade an einem struct und der ausgelagerten Fkt. Das einziege was nicht geht ist die Rückgabe der spur und ich verstehe grade nicht warum.
Das prinzip eines struct denke ich hab ich verstanden. Es ist halt ein Typ wie int oderso aber man kann sich diesen selber definieren.
Wäre toll wenn jmd mal rübergucken könnte, Danke schonmal.
hier mein Programm:
#include <stdio.h> #include <stdlib.h> #include <string.h> //Erstellen der Structur typedef struct{ int werte[4][4]; int spur; int dim; int summe[10]; } matrix; matrix spurberechnen(matrix z1); matrix main (matrix z1) { int x=0,y=0, c=0; int u=0; int i,j; //Eingabeaufforderung printf("Bitte geben Sie die Dimension der Matrix ein\n"); scanf("%d",&z1.dim); printf("Die Dimension ist %d ein\n",z1.dim); for(i=1;i<=z1.dim;i++){ for(j=1;j<=z1.dim;j++){ printf("Bitte geben Sie die [%d][%d] ein\n",i,j); scanf("%d",&x); z1.werte[i][j]=x; } } z1.summe=spurberechnen(z1); printf("Die Spur der Matrix ist %d \n",z1.spur); system("PAUSE"); } matrix spurberechnen(matrix z1){ int i=0; //Spur berechnen for(i=1;i<=z1.dim;i++){ z1.spur+=z1.werte[i][i]; } return z1; }
lg Zermy
-
Alles falsch. Kompletter Müll. Compiliert das bei dir überhaupt? Bei mir nicht und das ist auch gut so, denn es ist falsch.
Ich weiß nicht, wo ich mit konstruktiver Kritik anfangen soll. Es ist zu viel falsch. Mein Tipp: Nochmal hinsetzen, Grundlagen von Funktionen und variablen lernen. Grundlagen von structs lernen. Darüber nachdenken, was dein matrix-struct darstellen soll, was es können soll, was es dafür braucht und was nicht. Nochmal nachdenken, was deine Funktionen tun sollen, was sie zurückgeben sollen, was sie brauchen, was sie selber machen. Alles was du bisher gemacht hast löschen. Komplett neu schreiben!
P.S.: Und nenn uns mal dein Lehrbuch, dann kommt das auf die Giftliste, wenn es nicht schon drauf ist. Falls du kein Lehrbuch hast: Da ist das Problem.
-
c von a bis z ist aber schon druf!
ja ok ich setzt mich nochmal ran ich seh grade das ich so eigentlich auf das struct verziehten könnte....
lg Zermy
-
Zermy schrieb:
c von a bis z
Selbst da steht so was:
matrix main (matrix z1)
nicht drin!
-
Zermy schrieb:
c von a bis z ist aber schon druf!
Und da wunderst du dich? Das ist nicht zum Scherz so verrufen. Mit K&R wäre das nicht passiert.
-
typedef struct{
int werte[4][4];
int spur;
int dim;
} matrix;Laut Aufgabe soll die Struktur diese Variablen enthalten...
also kann ich damit doch weiter arbeiten oder?
lg Zermy
-
Bist du sicher? Das ist eines der dümmsten Structdesigns, die ich je gesehen habe.
-
Beseitige erstmal alle Fehler und Warnungen vom Compiler.
Alle!
Unbedingt auch die Warnungen.Du musst z.Zt. eine Menge davon haben.
-
Zermy schrieb:
hier mein Programm (...)
So kompiliert und läuft es wenigstens:
#include <stdio.h> #include <stdlib.h> //Erstellen der Structur typedef struct { int werte[4][4]; int spur; int dim; int summe[10]; } matrix; int spurberechnen(matrix z1); int main (void) { int x=0; int i,j; matrix z1; //Eingabeaufforderung printf("Bitte geben Sie die Dimension der Matrix ein\n"); scanf("%d",&z1.dim); printf("Die Dimension ist %d ein\n",z1.dim); for(i=1;i<=z1.dim;i++) { for(j=1;j<=z1.dim;j++) { printf("Bitte geben Sie die [%d][%d] ein\n",i,j); scanf("%d",&x); z1.werte[i][j]=x; } } z1.spur = spurberechnen(z1); printf("Die Spur der Matrix ist %d \n",z1.spur); system("PAUSE"); return 0; } int spurberechnen(matrix z1) { int i = 0; int sp = 0; //Spur berechnen for(i=1;i<=z1.dim;i++) { sp += z1.werte[i][i]; } return sp; }
Bitte vergleiche dieses Programm und Dein Programm Zeile für Zeile und frage Dich, was ich da etwas verändert habe - und warum.
viele grüße
ralph
-
Indizes bei Arrays fangen in C immer bei 0 an.
Und sie gehen bis Länge_des_Arrays-1.
-
Hey danke für die Antworten,
sry ja das mit der main war meine schuld ich hab da rumprobier und den fehler net gefunden da hab ich das mal so ausprobiert.
matrix z1; das ist natürlich richtig ich brauche in der main ne variable vom typen matirx -.- da hab ich nicht richtig nachgedacht...
Ich hab mir das Programm nun nochmal neu geschrieben und auch gleich übersichtlicher gemacht und die Funktion in einem extra File gespeichert so das ich nun funktion.c funktion.h aufgabe.c und aufgabe.h habe.
das hilft mir den überblick zu behalten.
Danke nochmal für eure Hilfe!!!!
lg Zermy
-
Naja, bei deinen 3 Funktionen bringt das Auslagern wohl eher für dich als Einsteiger eher mehr Unübersichtlichkeit mit sich, das macht man normalerweise bei größerem Umfang.
Du solltest dich auf die C-Grundlagen konzentrieren, Module zu separieren ist zwar sehr nett, sollte für dich aber erstmal nicht primär sein.
-
Ne, stimmt. Für mich sollte es nochmal bei Hallo Welt anfangen -.- aber ich muss halt gewisse sachen bringen... hoffe so wird das in der Klausur gut gehen, ich wiederhole schon relativ viel aber es kommen halt immer neue Themen dazu ...
Aber Danke für eure tatkräftige Hilfe...
lg Zermy