Zechpreller
(Themenstarter)
Anmeldungsdatum: 27. Dezember 2012
Beiträge: 39
|
Hey Leute ich hab jetzt den Code fertig. Alles funktioniert problemlos ich bin auch sehr zufrieden mit der Stabilität mit der das Programm läuft. Ich wollt mich nur nochmal bei euch bedanken! In den letzten 3 Tagen hab ich viel gelernt und ihr wart mir ne riesengroße Hilfe dabei. Mal sehen wie gut meine Seminararbeit abschneidet am Ende ☺ Grüße Zechpreller
|
sanyo
Anmeldungsdatum: 3. Dezember 2014
Beiträge: Zähle...
|
Hallo Zechpreller, ich programmiere derzeit an einem Programm, in dem ich den Gauß-Algorithmus auch sehr gut gebrauchen kann. Es geht in meinem Programm um die Dreiecksanalyse im dreidimensionalen Raum.
Mein Problem liegt derzeit in der Bestimmung des Umkreismittelpunktes des Dreiecks, welcher zugleich auch der Schnittpunkt der Mittelsenkrechten ist. Ohne das Aufstellen und Gleichsetzen der Geradengleichungen von 2 Mittelsenkrechten des Dreiecks scheint das nicht möglich zu sein. Und dafür benötigt man den Gaus-Algorithmus. Ich wäre dir sehr dankbar, wenn ich dein Programm in abgewandelter Form als Unterfunktion in mein Programm übernehmen könnte!
Kannst du noch einmal den fertigen, in Windows lauffähigen Gaus-Algorithmus hochladen? Mit freundlichen Grüßen,
Sanyo ☺
|
Zechpreller
(Themenstarter)
Anmeldungsdatum: 27. Dezember 2012
Beiträge: 39
|
Hey Sanyo, klar kannst du den haben ☺, als Compiler habe ich wie gesagt den Mingw verwendet. ich bin leider erst wieder heute Nacht am heimischen Rechner deshalb kann ich dir das erst heute Abend oder morgen früh posten, alternativ kann ich dir die Dateien auch per Mail senden wenn du willst. Grüße Zechpreller
|
Zechpreller
(Themenstarter)
Anmeldungsdatum: 27. Dezember 2012
Beiträge: 39
|
Entschuldige für die späte Antwort main.c 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 | /*
* Gauß_Algorithmus.c
*
* Created on: Aug 12, 2014
* Author: zechpreller
*/
#include "gaus.h"
int main()
{
printf("\nSie haben das Programm zur Durchfuehrung des Gauss-Algorthmus gewaehlt.");
printf("\nDie Koeffizienten werden von links nach rechts eingelesen.");
printf("\nWobei die jeweilige Spalte die Variablennummer wiedergibt\n\n");
int i_hor = 0;
int i_ver = 0;
int length;
int col = 0;
int row = 0;
double result_array[length];
printf("\nBitte geben sie die Anzahl der zu berechnenden Variablen an\n");
fflush(stdout);
scanf("%d",&length);
double lin_var[length][length+1];
void array_out(int length)
{
for(int i = 0; i < length ; i++)
{
printf("\n");
for(int j = 0; j < length+1 ; j++)
{
printf("%f", lin_var[i][j]);
printf("\t");
}
}
}
void calculate_matrix(int length, double lin_var[][length+1])
{
double result_array[length];
int j = 0;
int i = 0;
for (; i < length ; i++)
{
result_array[i] = lin_var[i][length]/lin_var[i][i];
}
for(; j < length ; j++)
{
printf("Die %i. Variable ist",j+1);
printf(" %f", result_array[j]);
printf("\n");
}
}
//***********************************************************************************//
//Einlesen des Linearen Gleichungssystems
//***********************************************************************************//
read_lin_var(length, lin_var);
//***********************************************************************************//
//Erste Prüfung auf Lösbarkeit des Systems
//***********************************************************************************//
check_array_before_inverted (length, lin_var);
check_array_spalten (length, lin_var);
//***********************************************************************************//
//Einlesen der Koeffizienten beendet
//Beginn der Berechnung
//***********************************************************************************//
int i_cancel = 0;
int cancel = 0;
for (; i_cancel < length ; i_cancel++)
{
if (lin_var[i_cancel][i_cancel] == 0)
{
cancel = 1;
}
}
if (cancel == 0)
{
cancel = errase_downstairs(col, row, length, lin_var);
errase_upstairs(col, row, length, lin_var);
printf("\nDas umgeformte Array zur Berechnung der Variablen\n");
array_out(length);
printf("\n\nDas result_array \n\n");
int i_out_hor_result = 0;
int i_result_array = 0;
for (; i_result_array < length ; i_result_array++)
{
result_array[i_result_array] = lin_var[i_result_array][length]/lin_var[i_result_array][i_result_array];
}
for(; i_out_hor_result < length ; i_out_hor_result++)
{
printf("Die %i. Variable ist",i_out_hor_result+1);
printf(" %f", result_array[i_out_hor_result]);
printf("\n");
}
}
if (cancel == 1)
{
printf("\n\nGleichungssystem nicht loesbar!\n");
}
{
}
return(0);
}
|
Die Funktionen Deklarationen 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199 | #include "gaus.h"
double calc_mult_var(int col, int row,int length, double lin_var[][length+1])
{
double calc_mult_var = lin_var[row][col]/lin_var[col][col]*(-1);
return(calc_mult_var);
}
void calc_add_array(int col,int row,int length, double lin_var[][length+1])
{
double zw_sp[length+1];
double mult_var = 0;
mult_var = calc_mult_var(col,row, length, lin_var);
for (int i = 0; i < length+1; i++)
{
zw_sp[i] = mult_var*lin_var[col][i];
}
for (int j = 0; j < length+1; j++)
{
lin_var[row][j] = lin_var[row][j]+zw_sp[j];
}
}
void swap_lines(int row1, int row2,int length,double lin_var[][length+1])
{
double swap_matrix[length+1];
for(int i = 0; i < length+1; i++)
{
swap_matrix[i] = lin_var[row1][i];
lin_var[row1][i] = lin_var[row2][i];
lin_var[row2][i] = swap_matrix[i];
}
printf("\nDie %i. Zeile wurde mit der %i. Zeile getauscht.\n",row1+1, row2+1);
}
void swap_spalte(int col1, int col2, int length, double lin_var[][length+1])
{
double swap_matrix[length];
for (int i = 0; i < length; i++)
{
swap_matrix[i] = lin_var[i][col1];
lin_var[i][col1] = lin_var[i][col2];
lin_var[i][col2] = swap_matrix[i];
}
printf("\nDie %i. Spalte wurde mit der %i. Spalte getauscht.\n",col1+1,col2+1);
}
int check_array_spalten (int length, double lin_var[][length+1])
{
int j = 0;
int switched_spalte = 0;
for (int i = 0;i < length; i++)
{
if (lin_var[i][i] == 0)
{
j = i+1;
for (;j< length; j++)
{
if (lin_var[j][i] != 0 && lin_var[i][j] != 0 && lin_var[i][i] == 0 )
swap_spalte(i, j, length, lin_var);
{
switched_spalte = 1;
}
}
}
}
return (switched_spalte);
}
int check_array_before (int col,int row,int length, double lin_var[][length+1])
{
int j = 0;
int return_value = 0;
for (int i = row; i < length; i++)
{
if (lin_var[i][i] == 0)
{
j = i+1;
for (;j < length ; j++ )
{
if (lin_var[j][i] != 0 && lin_var[i][j])
{
swap_lines(i, j, length, lin_var);
return_value = 1;
}
}
}
}
return(return_value);
}
void check_array_before_inverted (int length, double lin_var[][length+1])
{
int j = 0;
for (int i = length; i > 0; i--)
{
if (lin_var[i][i] == 0)
{
j = i-1;
for (;j > 0 ; j-- )
{
if (lin_var[j][i] != 0 && lin_var[i][j])
{
swap_lines(i, j, length, lin_var);
}
}
}
else
{
}
}
}
int errase_downstairs (int col,int row,int length, double lin_var[][length+1])
{
int possible = 0;
int j = 0;
int switched_line = 0;
int switched_col = 0;
for (int i = 0;i < length-1 ; i++)
{
switched_line = check_array_before (0, 0, length, lin_var);
switched_col = check_array_spalten (length, lin_var);
col = i;
row = col;
j = col;
if (switched_line == 1 || switched_col == 1)
{
// i = 0;
// j = 0;
// row = 0;
// col = 0;
for (int k = 0; k < length; k++)
{
if (lin_var[k][k] == 0)
{
possible = 1;
}
}
}
else if (possible == 0)
{
for (;j < length ; j++)
{
row++;
calc_add_array(col, row, length, lin_var);
}
}
}
return(possible);
}
void errase_upstairs (int col,int row,int length,double lin_var[][length+1])
{
for (int i = 1;i < length ; i++)
{
col = i;
row = col;
for (int j = 0;j < col ; j++)
{
row = row-1;
calc_add_array(col, row, length, lin_var);
}
}
}
void read_lin_var(int length, double lin_var[][length+1])
{
for (int i = 0; i < length ; i++)
{
printf("\n\nSie befinden sich in der %i. Zeile\n\n\n",i+1);
for (int j = 0; j < length+1 ; j++)
{
printf("Bitte geben Sie den %i. Koeffizienten ein\t",j+1);
fflush(stdout);
scanf("%lf",&lin_var[i][j]);
}
}
}
|
Die Header 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #ifndef GAUS_H_INCLUDED
#define GAUS_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
double calc_mult_var(int col, int row,int length, double lin_var[][length+1]);
void calc_add_array(int col,int row,int length, double lin_var[][length+1]);
void swap_lines(int row1, int row2,int length,double lin_var[][length+1]);
void swap_spalte(int col1, int col2, int length, double lin_var[][length+1]);
int check_array_spalten (int length, double lin_var[][length+1]);
int check_array_before (int col,int row,int length, double lin_var[][length+1]);
void check_array_before_inverted (int length, double lin_var[][length+1]);
int errase_downstairs (int col,int row,int length, double lin_var[][length+1]);
void errase_upstairs (int col,int row,int length,double lin_var[][length+1]);
void read_lin_var(int length, double lin_var[][length+1]);
//void calculate_matrix(int length, double lin_var[][length+1]);
//void array_out(int length, double lin_var[][length+1]);
#endif // GAUS_H_INCLUDED
|
Ich hab schon ewig nicht mehr reingeschaut und du musst den auf jeden Fall überarbeiten. Mfg Zechpreller
|
Zechpreller
(Themenstarter)
Anmeldungsdatum: 27. Dezember 2012
Beiträge: 39
|
Hey Leute, dieser Thread ist zwar schon etwas älter, aber ich wollte nochmal kurz einen Nachtrag machen. Hab vor einigen Wochen die Bewertung auf die Arbeit bekommen und dabei mit 12 von 15 Punkten abgeschnitten.
Anscheinend war meine Gabe für das Formulieren der Beschreibungen nicht so prickelnd und die Programmablaufpläne waren wohl auch nicht so der Bringer. Aber ich finde dass es immernoch ein gute Bewertung ist und ohne euch hätte ich das wohl nicht gepackt!
Deshalb nochmal ein Danke an alle die mir hier geholfen haben ☺ Das bringt mir einen großen Vorteil für die Bewerbung an den Unis^^ Mfg Zechpreller
|