Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Huhu Leute :)

so ich hab ma wieder ein Problemchen...

mein Prof möchte ein Programm

haben, dass:

a) eine Zahlenfolge liest (Anzahl soll vorher abgefragt werden)

B) von der Zahlenfolge den Mittelwert bildet

c) das minimum der eingegebenen zahlen ausgibt

so bei c) hänge ich fest... irgendwie liest der den Wert den ich ins array tippe nicht bzw ich hab noch nicht viel Erfahrung mit array's vielleicht hab ich ja sonst noch en groben Fehler gemacht oda so, keine ahnung... komme jedenfalls nicht weiter, wäre nett wenn ma einer drüber schaut.

Bitte aber triviale Lösungsansätze/Vorschläge...

hab bissel gegooglet und was von "pointer" und "vector" gelesen aber sowas haben wir noch nicht gemacht

lg eryx (1 Semester Informatik)


#include <iostream>


#include <conio.h>

using namespace std;




double mittelwert(double x[],int anzahl) // Array x erstellen 



{

    int i;                                //feldgröße

    double m = 0.0;                        

    for(i=0;i<anzahl;i++)                //Feldgröße erhöhen bis an Eingabe angepasst 

    {

        m=m+x[i];    }                // Summe bilden


    m=m/anzahl;        // Mittelwert berechnen


    return m;                        

}


int main(void)

{

    double werte[1000];

    double min =0;

    int anzahl,i;

    double max = 0;


    cout<<endl<<"Anzahl der einzulesenden Werte: ";            // Anzahl der werte

    cin>>anzahl;




    for(i=0;i<anzahl;i++)

    {

        cout<<endl<<"Wert Nr."<<(i+1)<<": ";

        cin>>werte[i];




        if (min > werte[i])

        { 

            werte[i] = max;

        }




    }


    cout<<"Der Mittelwert der eingegeben Zahlen ist: "<<mittelwert(werte,anzahl);

    cout<<"\n\n"<<"Das Minimum lautet: "<< max;



    getch();

    return 0;

Geschrieben

Der Programmteil mit der if-Abfrage (und die Ausgabe des Ergebnisses) verursacht die Probleme.

Den Mittelwert und die kleinste eingegeben Zahl kann man auch ohne Verwendung eines Arrays ermitteln.

Falls die eingegebenen Zahlen noch aus einem anderen Grund in einem Array abgelegt werden sollen, muss man darauf achten, dessen Grenzen nie zu überschreiten.

Geschrieben

Okay, das oben geschrieben vergiss einfach mal!

Der Fehler ist viel einfacher :D, stell dir vor jemand gibt 7 9 6 3 8 4 in dein Programm ein.

Jetzt kommen wir zwar zu deinem:

        

if (min > werte[i])

        { 

            werte[i] = max;

        }

Dabei hasst du garnicht falsch früher ja min als:
    

double min =0;

eingeführt:

Wie sieht jetzt der Vergleich aus:

0 > 7, 0 > 9, 0 > 6, 0 > 3, 0 > 8, 0 > 4

kann davon irgendwas zu treffen, okay, negative Zahlen können kleiner als 0 sein ;).

Jetzt kannst du folgendes machen:

a) min einem max. Startwert geben, was jedoch fehlschlägt wenn du den maximalwert eingibst.

B) min mit dem ersten wert aus deinem array vorbelegen.

Geschrieben

ja möglichkeit b hab ich auch schon dran gedacht... aber da scheiterts an den Grundlagen ^^

weiß net wie ich das korrekt schreibe....



                min = werte[1];


		if (min > werte[i])

		{ 

			werte[i] = max;

		}

Funktioniert schonma irgendwie net... ^^

Geschrieben
ja möglichkeit b hab ich auch schon dran gedacht... aber da scheiterts an den Grundlagen ^^

weiß net wie ich das korrekt schreibe....



                min = werte[1];


		if (min > werte[i])

		{ 

			werte[i] = max;

		}

Funktioniert schonma irgendwie net... ^^
Hmm... hast du dir mal überlegt was du da schreibst ;) min = werte; -> sprich in min ist der gleiche Wert wie in werte und dann machst du ein if(min > werte) -> also ein if(werte > werte).... was gibt das wohl...



    double werte[1000];

    double min =0;

    int anzahl,i;

    double max = 0;


    cout<<endl<<"Anzahl der einzulesenden Werte: ";            // Anzahl der werte

    cin>>anzahl;




    for(i=0;i<anzahl;i++)

    {

        cout<<endl<<"Wert Nr."<<(i+1)<<": ";

        cin>>werte[i];


        [COLOR="Red"]

        // nicht schön, aber möglich


        // erster durchlauf der schleife, setze min und max auf aktuellen wert

        if(i == 0) {

          min = werte[i];

          max = werte[i];

        }

        else {

          // werte[i] ist kleiner als unsere aktuelles min und wird daher das neue min

          if(werte[i] < min) {

            min = werte[i];

          }

          // werte[i] ist größer als uneres aktuelles max und wird daher das neue max

          if(werte[i] > max) {

            max = werte[i];

          }

        }

        [/COLOR]          


    }

Btw. wenn du wirklich was cooles schreiben willst machst lieber ein: max = werte > max ? werte : max;


else {

          // werte[i] ist kleiner als unsere aktuelles min und wird daher das neue min

          min = werte[i] < min ? werte[i] : min;

          // werte[i] ist größer als uneres aktuelles max und wird daher das neue max

          max = werte[i] > max ? werte[i] : max;

        }

Geschrieben

aufen ersten blick hab ich aber noch ne frage ;)


min = werte[i] < min ? werte[i] : min;

was bedeutet das "?" ?

ja meine grundgedanke war ja dass werte der aktuelle wert is den ich beim ersten cin eingebe und der dann wieder überschrieben wird und ich dannach wieder vergleiche... aber dem is wohl nicht so... ^^

mh okay werd ich mir heud abend ma in ruhe anschauen, hab jetzt en termin... schonma vielen dank für die mühe.... !

Geschrieben

Soweit ich weiß macht diese tolle Syntax

wert = bedingung ? wenn wahr dann x : sonst y

vielleicht ist das ja einfacher

min = zahl < min ? zahl : min

Dabei wird der Ausdruck zahl < min ausgewertet, ist die Bedingung wahr, wird min = zahl, ist die Bedingung nicht wahr dann min = min, sprich es ändert sich nix.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...