You are not logged in.

  • Login

anfänger++

Unregistered

1

Friday, December 17th 2010, 8:44pm

ANSI C Übungsaufgabe array von strukuren

Hallo,

ich habe heute schon einige Zeit damit verbracht eine Lösung für mein Problem zu finden. Und zwar habe ich eine Struktur in der Messwerte gespeichert sind. Welches wieder in einem Array liegt. Ist es möglich die Aufsummierung der Werte mit nur einem Unterprogramm zu machen? Ich hab schon viel ausprobiert aber ich kann dem Unterprogramm bis jetzt nur die ganze STruktur übergeben. Eigentlich scheitert es nur an dem Funktionsaufruf...

C/C++ Quellcode

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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct struktur{
    	float spg;
    	float strom;
    	float frequenz;
    	float temp;
    	}messreihe;
 
void summe (???????);
 
main()
{
 
  	printf("(1) Summe der Spannungen");
  	printf("(2) Summe der Stroeme");
  	printf("(3) Summe der Frequenz");
  	printf("(4) Summe der Temperaturen");
 
 
  	switch
  	{
  	case '1':
       	summe(????)
  	break;
  	case '2':
       	summe(????)
  	break;
  	case '3':
       	summe(????)
  	break;
  	case '4':
       	summe(????)
  	break;
 
  	}
 
}
 
void summe (?????)
{
 	int i=0;
 	float sum;
 
 	for (i=0; i<10; i++)
 	{
     	sum=sum+*????[i];
 	}
 
 	printf("Die Summe betraegt: %.2f\n", sum);
}


Vielleicht hat hier ja jemande ne Idee wie das funktionieren könnte. Das das Programm viele Fehler enthält weis ich. Es soll nur dazu dienen mein Problem etwas genauer dazustellen, da mir die Formulierung etwas schwer fällt. Falls diese Frage hier schonmal beantwortet wurde tut mir meine Unwissenheit leid, aber ich weis niocht wie wo und nach was ich noch suchen soll^^ bin da noch ziemlicher Anfänger^^
Vielen dank schonmal für die mühen die sich der ein oder andere vielleicht macht.

2

Friday, December 17th 2010, 11:09pm

Parameter wirst du nicht benötigen, da eigentlich alle nötigen Variablen global sind.
Zur for-Schleife: initialisiere die Variable i, in diesem Fall, in der Schleife. Das führt oft zum error wenn du es nicht tust. Ich weiß nicht wieso, aber ich durfte diese Erfahrung auch schon machen..... :D
Zum Array: WO ist das bitte? Das Array wurde doch noch gar nicht initialisiert, oder?

Was willst du, mal so nebenbei, auch mit diesem Code bezwecken? Ich sehe hier keine Bestimmungen für die Werte der Variablen oder ähnliches. ?(

3

Friday, December 17th 2010, 11:33pm

ach verdammt das hab ich vergessen...

C/C++ Quellcode

1
2
3
4
5
#define MAX 200
...
...
...
messreihe mess_tbl[MAX]


so sieht das dann aus. das ganze wird dann mit zufallszahlen befüllt. Einen praktischen nutzen hat das ganze Programm nicht. Reine Übung. Es geht jetzt nur darum wie ich im Unterprogramm an die ganzen daten eines typs rankomm. ich will mit dem switch eigentlich nur sagen was das unterprog aufsummieren soll und am besten soll es dem unterprogramm möglich sein jenachdem was es geliefert bekommt alle Werte zu summieren. also das ich dem z.b. sage ich will die summe aller spannungen oder die summe aller temperaturen.

ich muss noch einige andere funktionalitäten hier einbauen, die unterprogramme sparen mir somit einige zeilen code weil ich andere funktionalitäten 3mal oder sogar öfter im quellcode habe. ich hoffe man kappiert ungefähr was ich eigentlich will weil ich beschäftige mich noch nicht allzulange mit dieser materie...

4

Friday, December 17th 2010, 11:51pm

Soweit ich das jetzt von dir verstehe willst du wissen welchen Parameter bzw. wie man einen Parameter zuteilt.
Wenn es doch was andres ist bitte drauf hinweisen.....
Also:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
struct xyz{
bool hallo
bool tschüss};
xyz zxy;
//Prototyp
void beispielfunktion (int xyz);
int main(){
int xyz=99;
cout << "Hallo!" << endl;
void beispielfunktion (xyz);
}
void beispielfunktion (int xyz){
if(xyz=99){
cout << "\n\aEs hat funktioniert." << endl;
}
else{
cout << "\n\a\aFEHLER" << endl;
}
}
}


Aber in deinem Beispielcode ist alles global, also alle Funktionen dürfen darauf zugreifen. (auf die Variablen)
Du musst es halt nur noch an die Struktur anpassen.

Oder möchtest du, dass bei jedem Aufruf der for-Schleife was anderes berechnet wird? Ist für mich etwas 2deutig dein Text..... Sorry!

5

Saturday, December 18th 2010, 1:01am

hmm eigentlich will ich glaub nur nen zeiger machen der auf alle spannungswerte zeigt bzw strom etc...

6

Saturday, December 18th 2010, 7:04pm

Zeiger oder Referenz?
Klingt mehr nach Referenz als nach Zeiger.....

7

Saturday, December 18th 2010, 11:39pm

sorry für meine unwissenheit,was ist eine referenz?

9

Sunday, December 19th 2010, 5:14pm

Der Beitragsersteller zeigt einen C-Quelltext und der Tippgeber antwortet mit C++.

Der Beitragsersteller sollte versuchen sein Problem an komplett nachvollziehbaren kurzen Beispielen darzustellen.
Mit unvollkommenen Codesnipseln ist den Beteiligten selten geholfen.

Also versuche ich mal mit ungesundem Halbwissen eine Antwort :D

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int summe (Messwert)
{
 	int i=0;
 	float sum;
 
        switch(Messwert)
        {
        case 'U': 
 	for (i=0; i<10; i++)
 	{
     	sum=sum+stru...?[Messwert][i]; // eventuell statt Messwert hier schon eine Spalten- oder Zeilenzahl - 
 	}
        // hier kannst du ein paar passende Zeilen ergänzen
 	printf("Die Summe betraegt: %.2f\n", sum[Messwert]); // Das würde ich in der aufrufenden Funktion zu Übungszwecken unterbringen
        return sum[Messwert];
}


Meine Syntax kann fehlerhaft sein. Aber das solltest du auf Grund deiner Unterlagen schon gebacken bekommen ;)
Auf jeden Fall fehlt da noch etwas im Quelltext - aber das solltest du schon hin bekommen
Ich könnte das zwar fertig basteln, aber du willst/sollst ja etwas lernen ;)

MfG bcc-fan

This post has been edited 2 times, last edit by "bcc-fan" (Dec 19th 2010, 5:51pm) with the following reason: Versuch den Text besser verständlich zu präsentieren ;)


10

Sunday, December 19th 2010, 10:33pm

also dann mal raus mit dem code :)

C/C++ Quellcode

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string.h>
#include <windows.h>
 
#define N_MAX 10
 
typedef struct
{
	float spg;
	float strom;
	float fq;
	float temp;
	float cos_phi;
	char bem[160+1];
}Einzel_Mess_Typ;
 
void summespg (Einzel_Mess_Typ *sum_spg);
void summestrom (Einzel_Mess_Typ *sum_strom);
void maxspg (Einzel_Mess_Typ *max_spg);
void maxstrom (Einzel_Mess_Typ *max_strom);
 
main()
{
	Einzel_Mess_Typ messung[N_MAX];
	int i;
	char c1;
 
	srand(time(0));
 
	for (i=0; i<N_MAX; i++) {
		messung[i].spg = (rand() %23000/100.0-115);
		messung[i].strom = (rand() %1600/100.0-8);
		messung[i].fq = (rand() %5000/100.0-25);
		messung[i].temp = (rand() %2000/100.0-10);
		messung[i].cos_phi = (rand() %100/100.0);
		strcpy(messung[i].bem, "Messung bei Schnnesturm");
	}
 
	printf("Bitte waehlen Sie:\n\n");
	printf("(1) Summe der Spannungen berechnen\n");
	printf("(2) Summe der Stroeme berechnen\n");
	printf("(3) Maximalwert der Spannung berechnen\n");
	printf("(4) Maximalwert des Stromes berechnen\n");
 
	c1 = getch();
 
	switch (c1)
	{
		case '1':
			system("cls");
			summespg (messung);
		break;
 
		case '2':
			system("cls");
			summestrom (messung);
		break;
 
		case '3':
			system("cls");
			maxspg (messung);
		break;
 
		case '4':
			system("cls");
			maxstrom (messung);
		break;
 
		default:
			printf("Falsche eingabe.");
			Sleep(200);
			system("cls");
			;
	}
 
 
	system("PAUSE");
	return 0;
}
void summespg (Einzel_Mess_Typ *sum_spg)
{
	int i;
	float summe=0.0;
 
	for (i=0; i<N_MAX; i++)
	{
		summe = summe + sum_spg[i].spg;
	}
 
	printf("Summe: %.2f\n", summe);
	system("PAUSE");
}
void summestrom (Einzel_Mess_Typ *sum_strom)
{
	int i;
	float summe=0.0;
 
	for (i=0; i<N_MAX; i++)
	{
		summe = summe + sum_strom[i].strom;
	}
 
	printf("Summe: %.2f\n", summe);
	system("PAUSE");
}
void maxspg (Einzel_Mess_Typ *max_spg)
{
	int i;
	int index;
	float max=-1000.0;
 
	for (i=0; i<N_MAX; i++)
	{
		if (max_spg[i].spg > max)
		{
			max = max_spg[i].spg;
			index = i;
		}
	}
 
	printf("Maximum an der Stelle %d, mit einem Wert von: %.2f\n", index, max);
	system("PAUSE");
}
void maxstrom (Einzel_Mess_Typ *max_strom)
{
	int i;
	int index;
	float max=-1000.0;
 
	for (i=0; i<N_MAX; i++)
	{
		if (max_strom[i].strom > max)
		{
			max = max_strom[i].strom;
			index = i;
		}
	}
 
	printf("Maximum an der Stelle %d, mit einem Wert von: %.2f\n", index, max);
	system("PAUSE");
 }


Das Programm läuft soweit. Aber wie man sieht machen die beiden Summen Unterprogramme und die beiden Maximalwert Unterprogramme genau das gleiche. Was ich jetzt wissen will ist eig nur ob es eine möglichkeit gibt nur ein Unterprogramm zu schreiben das diese Beiden Unterprogramme ersetzt, dass dann eben nicht nur das Array übergeben wird, sondern noch die "Info" ob die Spannung oder die Stromwerte aufaddiert werden sollen.

Honey

Unregistered

11

Monday, December 20th 2010, 11:10am

Hi,

probier mal folgendes als Funktionsaufruf :

Source code

1
summe(*messung.spg); 


Kanns hier leider grad nicht testen, sollte aber so oder so ähnlich funktionieren. (Bei der Syntax bin ich mir nicht ganz sicher ob mit oder ohne * bzw. ob der . stimmt)
Da du die Struktur und das Feld global definiert hast ist ein Funktionsaufruf mit dem Array als Parameter eigendlich nicht nötig. Es können ja schon alle Funktionen darauf zugreifen. Wenn du aber wills, dass nur ein bestimmter Teil in der Funktion verwendet wird sollte das helfen.


Lg Honey :)

12

Monday, December 20th 2010, 7:15pm

Quoted

Hi,

probier mal folgendes als Funktionsaufruf :


Quellcode

1



summe(*messung.spg);



Kanns hier leider grad nicht testen, sollte aber so oder so ähnlich funktionieren. (Bei der Syntax bin ich mir nicht ganz sicher ob mit oder ohne * bzw. ob der . stimmt)
Da du die Struktur und das Feld global definiert hast ist ein Funktionsaufruf mit dem Array als Parameter eigendlich nicht nötig. Es können ja schon alle Funktionen darauf zugreifen. Wenn du aber wills, dass nur ein bestimmter Teil in der Funktion verwendet wird sollte das helfen.

Lg Honey :)



das habe ich auch schon probiert. funktioniert aber nicht. irgendwie wird trotzem nur das array messung übergeben. zumindest wird genau die selbe speicheradresse übergeben... hab auch schon noch etliche andere möglichkeiten ausprobiert aber hat alles nichts gebracht...

Similar threads

Social bookmarks