MAX und MIN Wert ermitteln

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

  • MAX und MIN Wert ermitteln

    Hallo Boardies!

    Ich versuche es schon seit ein paar Stunden eine Lösung zu finden, aber kommen nicht drauf, wie ich es lösen könnte :(
    Bitte um Hilfe!!!

    Ich möchte die maximale und minimale Frequenz ermitteln. Besten Dank!

    Quellcode

    1. #include "stdafx.h"
    2. #include "iostream"
    3. #include "cmath"
    4. #include "fstream"
    5. using namespace std;
    6. #include "math.h"
    7. int main(int argc, char* argv[])
    8. {
    9. double ampl=0; //Variablen
    10. double freq=0;
    11. double welle=0;
    12. double freqmin;
    13. double freqmax;
    14. double teiler1;
    15. double periode;
    16. int i=0;
    17. int wellenanzahl = 0;
    18. const double PI = acos(0.0)*2;
    19. cout << "Wie viele Wellen möchten Sie haben?";
    20. cin >> wellenanzahl;
    21. i = wellenanzahl;
    22. while(wellenanzahl>0){
    23. //system("cls");
    24. wellenanzahl --;
    25. cout << "Geben Sie die Werte für die " << wellenanzahl << ". Kurve ein:\n\n";
    26. cout<<"Amplitude der " << i << ". Kurve: "; //Eingabe
    27. cin>>ampl;
    28. cout<<"Frequenz der " << i <<". Kurve: ";
    29. cin>>freq;
    30. }
    31. teiler1 = freqmin * 2;
    32. periode = (1/freqmin);
    33. //for(int i=0; i<3; i++)
    34. ofstream output;
    35. output.open("Ergebnis.txt",ios_base::trunc); //Ergebnis in Textdatei speichern
    36. /* do
    37. {
    38. i=i+1; // (periode/teiler1); alt !!
    39. welle1=ampl1*sin(PI*i*(freq/freqmax)/freq);
    40. // Addition drei wellen
    41. welleSum = welle1 + 1; //Summe von drei Kurven
    42. output<<i << ";"<< welle1<<";"<<welle2<<";"<<welle3<<";"<<welleSum<<endl;
    43. }
    44. while (i <= teiler1/1);
    45. */
    46. output.close();
    47. cout<<"Datei im Zielverzeichnis ausgegeben: Ergebnis.txt"<<endl<<endl<<endl<<endl<<endl;
    48. return 0;
    49. }
    Alles anzeigen


    lg
  • Hi, warum nicht während der Eingabe?

    Quellcode

    1. int main(int argc, char* argv[]) {
    2. double freq=0;
    3. double freqmax=0;
    4. double freqmin=INFINITY;
    5. int wellenanzahl=5;
    6. while(wellenanzahl-- >0) {
    7. cout<<"Frequenz der " << i <<". Kurve: ";
    8. cin>>freq;
    9. if(freq>freqmax) {
    10. freqmax=freq;
    11. }
    12. if(freq<freqmin) {
    13. freqmin=freq;
    14. }
    15. }
    16. return 0;
    17. }
    Alles anzeigen


    BTW: Was machst du mit den eingegebenen Einzelwerten eigentlich?
  • Hi!

    Was das Programm machen soll beschreibe ich nun hier:

    1. User darf die Anzahl der Sinuswellen wählen.
    2. Die Daten werden im Ergebnis.txt gespeichert.
    3. Ergebnis.txt wird im Excel geöffnet.
    4. Daten markieren und ein Diagramm zeichnen lassen.

    Was macht INFINITY ? Ich bekomme eine Fehlermeldung.

    error C2065: 'INFINITY' : nichtdeklarierter Bezeichner

    Für 3 Wellen habe ich schon eine Lösung:

    Quellcode

    1. #include "stdafx.h"
    2. #include "iostream"
    3. #include "cmath"
    4. #include "fstream"
    5. using namespace std;
    6. #include "math.h"
    7. int main(int argc, char* argv[])
    8. {
    9. double ampl1=0; //Variablen
    10. double freq1=0;
    11. double welle1=0;
    12. double ampl2=0;
    13. double freq2=0;
    14. double welle2=0;
    15. // 3. frequenz
    16. double ampl3=0;
    17. double freq3=0;
    18. double welle3=0;
    19. //double atr; // atr Abtastrate
    20. //double minf;
    21. //double min;
    22. double freqmin;
    23. //double max;
    24. int i=0;
    25. double zaehler1=1;
    26. double teiler1;
    27. //double schrittweite; // Schrittweite von T (Periode)
    28. double periode; // Periode T
    29. double freqMulti=0;
    30. double welleSum=0;
    31. const double PI = acos(0.0)*2;
    32. do{
    33. system("cls");
    34. cout << "Gib die Werte für die Frequenzen nach der größten Frequenz: \n\n";
    35. cout<<"---------Kurve mit der größten Frequenz--------"<<endl;
    36. cout<<"Amplitude der 1. Kurve: "; //Eingabe
    37. cin>>ampl1;
    38. cout<<"Frequenz der 1. Kurve: ";
    39. cin>>freq1;
    40. cout<<"---------Kurve mit der zweitgrößten Frequenz--"<<endl;
    41. cout<<"Amplitude der 2. Kurve: ";
    42. cin>>ampl2;
    43. cout<<"Frequenz der 2. Kurve: ";
    44. cin>>freq2;
    45. // 3. Frequenz
    46. cout<<"----------Kurve mit der kleinsten Frequenz----"<<endl;
    47. cout<<"Amplitude der 3. Kurve: ";
    48. cin>>ampl3;
    49. cout<<"Frequenz der 3. Kurve: ";
    50. cin>>freq3;
    51. }while(freq1 <= freq2 || freq2 <= freq3 || freq1 < freq3);
    52. // Maximum frequenz
    53. //maxf(freq1,freq2,freq3,max);
    54. teiler1 = freq1 * 2;
    55. /*cout << "\n\nSortiere Frequenzen";
    56. if (freq1 >= freq2)
    57. if (freq2 >= freq3)
    58. {
    59. cout << "\nfreq1 = " << freq1 ;
    60. cout << "\nfreq2 = " << freq2 ;
    61. cout << "\nfreq3 = " << freq3 ;
    62. }
    63. else
    64. {
    65. cout << "\nFrequenzen falsch herum eingegeben";
    66. cout << "\nBitte geben sie zu erst die GROESSTE Frequenz ein, dann die zweit\n";
    67. cout << "kleinste und die kleinste Frequenz eingeben";
    68. }*/
    69. // Minimum frequenz
    70. //minf(freq1,freq2,freq3,min);
    71. freqmin = freq3;
    72. // cout <<"Stop";
    73. // T rechnen (Periode)
    74. // T = 1/f
    75. periode = (1/freqmin);
    76. //for(int i=0; i<3; i++)
    77. ofstream output;
    78. output.open("Ergebnis.txt",ios_base::trunc); //Ergebnis in Textdatei speichern
    79. // freqMulti = 1; //Frequenz multi ist gleich 1
    80. // freqMulti=freq2/freq1; //Frequenz Multiplikator
    81. // for (int i=0; i<=teiler1; i=i+(periode/teiler1))
    82. // Neuer Teil !!!
    83. do
    84. {
    85. i=i+1; // (periode/teiler1); alt !!
    86. welle1=ampl1*sin(PI*i*(freq1/freq3)/freq1);
    87. welle2=ampl2*sin(PI*i*(freq2/freq3)/freq1);
    88. welle3=ampl3*sin(PI*i*(freq3/freq3)/freq1);
    89. //welle2=ampl2*sin(2*PI*freq2*(freq1/(freq1*freq3)));
    90. //welle3=ampl3*sin(2*PI*freq3*(freq1/(freq1*freq3)));
    91. // Addition drei wellen
    92. welleSum=welle1+welle2+welle3; //Summe von drei Kurven
    93. output<<i << ";"<< welle1<<";"<<welle2<<";"<<welle3<<";"<<welleSum<<endl;
    94. }
    95. while (i <= teiler1/1);
    96. /*for(int i=0; i<teiler1; i++)
    97. {
    98. zaehler1=i;
    99. if (freqMulti>1.0) //Wenn Multiplikator größer als 1 dann..
    100. {
    101. welle1=ampl1*sin(2*PI*zaehler1/teiler1); //Formel wenn erste Frequenz größer
    102. welle2=ampl2*sin(2*PI*zaehler1*freqMulti/teiler1);
    103. }
    104. else //oder..
    105. {
    106. welle1=ampl1*sin(2*PI*zaehler1/freqMulti/teiler1); //Formel wenn erste Freuquenz kleiner
    107. welle2=ampl2*sin(2*PI*zaehler1/teiler1);
    108. }
    109. // Addition drei wellen
    110. welleSum=welle1+welle2+welle3; //Summe von drei Kurven
    111. output<<welle1<<";"<<welle2<<";"<<welle 3<<";"<<welleSum<<endl;
    112. }
    113. */
    114. output.close();
    115. cout<<"Datei im Zielverzeichnis ausgegeben: Ergebnis.txt"<<endl<<endl<<endl<<endl<<endl;
    116. return 0;
    117. }
    Alles anzeigen


    lg
  • "Composer" schrieb:

    Was macht INFINITY ? Ich bekomme eine Fehlermeldung.

    Komisch, ich dachte die Konstante gäbs in math.h - Dann setze einfach eine hohe Zahl stattdessen ein.

    Desweiteren musst du, wenn du neben den min/max Werten jede Eingabe speichern willst, diese entweder direk in die Datei schreiben oder in ein Array zwischenspeichern und nach beendeter Eingabe in die Datei schreiben.
  • Hi,

    durch einen anderen Forum bzw. viel probieren bin ich einbisschen weitergekommen, aber hänge noch immer. Vielleicht hast du eine Idee dazu.

    Sinuswellen können nun eingegeben werden. Max. und Min-Wert zeigt er auch an, aber die Summe aller Frequenzen zeigt er gar nicht richtig an bzw. es werden immer nur 2 Sinuswellen abgespeichert, wobei die Werte auch nicht wirklich stimmen. Besten Dank!

    Quellcode

    1. #include "stdafx.h"
    2. #include <iostream>
    3. #include <cmath>
    4. #include <fstream>
    5. using namespace std;
    6. int main(int argc, char* argv[])
    7. {
    8. double freqmin;
    9. double freqmax;
    10. double freqsum;
    11. double teiler1;
    12. double periode;
    13. double welle1;
    14. double welleSum;
    15. double freqe[50000];
    16. double ampli[50000];
    17. double r=0;
    18. int welle;
    19. int s;
    20. const double PI = acos(0.0)*2;
    21. cout << "Wie viele Sinuswellen moechten Sie es haben?" << endl;
    22. cin >> welle;
    23. cout << endl;
    24. if ( ! cin.good() ) // Wenn Fehler in der Eingabe
    25. {
    26. cout << "Fehler bei der Eingabe. Programm wird beendet!!" << endl << endl;
    27. return 0;
    28. }
    29. for (s = 0; s < welle; s++)
    30. {
    31. cout << "Bitte geben Sie ein Wert fuer die " << s+1 << ". Frequenz ein: ";
    32. cin >> freqe[s];
    33. if ( ! cin.good() ) // Wenn Fehler in der Eingabe
    34. {
    35. cout << "Fehler bei der Eingabe. Programm wird beendet!!" << endl;
    36. return 0;
    37. }
    38. cout << "Bitte geben Sie ein Wert fuer die " << s+1 << ". Amplitude ein: ";
    39. cin >> ampli[s];
    40. if ( ! cin.good() ) // Wenn Fehler in der Eingabe
    41. {
    42. cout << "Fehler bei der Eingabe. Programm wird beendet!!" << endl << endl;
    43. return 0;
    44. }
    45. }
    46. for (s = 0; s < welle; s++)
    47. {
    48. cout << s+1 << ". Frequenz betraegt: " << freqe[s] << endl;
    49. cout << s+1 << ". Amplitude betraegt: " << ampli[s] << endl << endl;
    50. }
    51. freqmax = freqe[0];
    52. freqmin = freqe[0];
    53. for(int i = 0; i < welle; i++)
    54. {
    55. if(freqe[i] > freqmax)
    56. {
    57. freqmax = freqe[i];
    58. }
    59. else if(freqe[i] < freqmin)
    60. {
    61. freqmin = freqe[i];
    62. }
    63. }
    64. for (s = 0; s < welle; s++)
    65. {
    66. freqsum = freqsum + freqe[s];
    67. }
    68. cout << "Max. Freq.: " << freqmax <<endl;
    69. cout << "Min. Freq.: " << freqmin <<endl;
    70. cout << "Summe aller Frequenzen: " << freqsum << endl << endl;
    71. //freqmin = 20;
    72. //freqmax = 100;
    73. teiler1 = freqmin * 2;
    74. periode = (1/freqmin);
    75. ofstream output;
    76. output.open("Ergebnis.txt",ios_base::trunc); //Ergebnis in Textdatei speichern
    77. do
    78. {
    79. r=r+1;
    80. for(s = 0; s < welle; s++)
    81. {
    82. welle1=ampli[s]*sin(PI*r*(freqe[s]/freqmin)/freqmax);
    83. // Addition drei wellen
    84. welleSum = welle1 + welleSum; //Summe von drei Kurven
    85. output<<r << ";"<< welle1<<";" <<welleSum <<endl;
    86. }
    87. }
    88. while (r <= teiler1/1);
    89. output.close();
    90. cout<<"Datei im Zielverzeichnis ausgegeben: Ergebnis.txt"<<endl<<endl<<endl<<endl<<endl;
    91. return 0;
    92. }
    Alles anzeigen


    lg
  • Du musst zugeben, dass die vielen Schleifen ziemlich hässlich sind.
    Ein Durchlauf sollte doch für Eingabe, Min-Max-Bestimmung, Summe und auch fürs Speichern vollkommen ausreichen.

    Wenn die Summe falsch ist, versuch mal sie mit 0 zu initialisieren.

    Wenn zu wenige Sinuswerte gespeichert werden gib mir mal den Wert von teiler1/1.
    Die entsprechende Formel für die Welle habe ich mir nicht angeschaut.