ANSI C Übungsaufgabe array von strukuren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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...

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. typedef struct struktur{
    4. float spg;
    5. float strom;
    6. float frequenz;
    7. float temp;
    8. }messreihe;
    9. void summe (???????);
    10. main()
    11. {
    12. printf("(1) Summe der Spannungen");
    13. printf("(2) Summe der Stroeme");
    14. printf("(3) Summe der Frequenz");
    15. printf("(4) Summe der Temperaturen");
    16. switch
    17. {
    18. case '1':
    19. summe(????)
    20. break;
    21. case '2':
    22. summe(????)
    23. break;
    24. case '3':
    25. summe(????)
    26. break;
    27. case '4':
    28. summe(????)
    29. break;
    30. }
    31. }
    32. void summe (?????)
    33. {
    34. int i=0;
    35. float sum;
    36. for (i=0; i<10; i++)
    37. {
    38. sum=sum+*????[i];
    39. }
    40. printf("Die Summe betraegt: %.2f\n", sum);
    41. }
    Alles anzeigen


    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.
  • 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. ?(
  • ach verdammt das hab ich vergessen...

    Quellcode

    1. #define MAX 200
    2. ...
    3. ...
    4. ...
    5. 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...
  • 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:

    Quellcode

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


    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!
  • 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

    Quellcode

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


    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

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von bcc-fan () aus folgendem Grund: Versuch den Text besser verständlich zu präsentieren ;)

  • also dann mal raus mit dem code :)

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <conio.h>
    4. #include <time.h>
    5. #include <string.h>
    6. #include <windows.h>
    7. #define N_MAX 10
    8. typedef struct
    9. {
    10. float spg;
    11. float strom;
    12. float fq;
    13. float temp;
    14. float cos_phi;
    15. char bem[160+1];
    16. }Einzel_Mess_Typ;
    17. void summespg (Einzel_Mess_Typ *sum_spg);
    18. void summestrom (Einzel_Mess_Typ *sum_strom);
    19. void maxspg (Einzel_Mess_Typ *max_spg);
    20. void maxstrom (Einzel_Mess_Typ *max_strom);
    21. main()
    22. {
    23. Einzel_Mess_Typ messung[N_MAX];
    24. int i;
    25. char c1;
    26. srand(time(0));
    27. for (i=0; i<N_MAX; i++) {
    28. messung[i].spg = (rand() %23000/100.0-115);
    29. messung[i].strom = (rand() %1600/100.0-8);
    30. messung[i].fq = (rand() %5000/100.0-25);
    31. messung[i].temp = (rand() %2000/100.0-10);
    32. messung[i].cos_phi = (rand() %100/100.0);
    33. strcpy(messung[i].bem, "Messung bei Schnnesturm");
    34. }
    35. printf("Bitte waehlen Sie:\n\n");
    36. printf("(1) Summe der Spannungen berechnen\n");
    37. printf("(2) Summe der Stroeme berechnen\n");
    38. printf("(3) Maximalwert der Spannung berechnen\n");
    39. printf("(4) Maximalwert des Stromes berechnen\n");
    40. c1 = getch();
    41. switch (c1)
    42. {
    43. case '1':
    44. system("cls");
    45. summespg (messung);
    46. break;
    47. case '2':
    48. system("cls");
    49. summestrom (messung);
    50. break;
    51. case '3':
    52. system("cls");
    53. maxspg (messung);
    54. break;
    55. case '4':
    56. system("cls");
    57. maxstrom (messung);
    58. break;
    59. default:
    60. printf("Falsche eingabe.");
    61. Sleep(200);
    62. system("cls");
    63. ;
    64. }
    65. system("PAUSE");
    66. return 0;
    67. }
    68. void summespg (Einzel_Mess_Typ *sum_spg)
    69. {
    70. int i;
    71. float summe=0.0;
    72. for (i=0; i<N_MAX; i++)
    73. {
    74. summe = summe + sum_spg[i].spg;
    75. }
    76. printf("Summe: %.2f\n", summe);
    77. system("PAUSE");
    78. }
    79. void summestrom (Einzel_Mess_Typ *sum_strom)
    80. {
    81. int i;
    82. float summe=0.0;
    83. for (i=0; i<N_MAX; i++)
    84. {
    85. summe = summe + sum_strom[i].strom;
    86. }
    87. printf("Summe: %.2f\n", summe);
    88. system("PAUSE");
    89. }
    90. void maxspg (Einzel_Mess_Typ *max_spg)
    91. {
    92. int i;
    93. int index;
    94. float max=-1000.0;
    95. for (i=0; i<N_MAX; i++)
    96. {
    97. if (max_spg[i].spg > max)
    98. {
    99. max = max_spg[i].spg;
    100. index = i;
    101. }
    102. }
    103. printf("Maximum an der Stelle %d, mit einem Wert von: %.2f\n", index, max);
    104. system("PAUSE");
    105. }
    106. void maxstrom (Einzel_Mess_Typ *max_strom)
    107. {
    108. int i;
    109. int index;
    110. float max=-1000.0;
    111. for (i=0; i<N_MAX; i++)
    112. {
    113. if (max_strom[i].strom > max)
    114. {
    115. max = max_strom[i].strom;
    116. index = i;
    117. }
    118. }
    119. printf("Maximum an der Stelle %d, mit einem Wert von: %.2f\n", index, max);
    120. system("PAUSE");
    121. }
    Alles anzeigen


    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.
  • 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 :)
  • 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...