Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kleines Prob

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.03.2004, 21:45 Uhr
KaraHead



Hi,
komm bei meinem Prog nicht weiter. Es soll dynamisch Werte aufnehmen und dann das Max ausgeben...
Es lässt sich kompilieren aber max ist immer o


C++:
#pragma hdrstop
#include <iostream>
#include <stdlib>

//---------------------------------------------------------------------------

#pragma argsused

using namespace std;

float nmax(float**,int);

int main(int argc, char* argv[])
{
    static int n=0,a;
    cout<<"Gib die Anzahl der Werte ein (1-100): ";
    cin>>n;
    float* f=(float*) malloc(n);

    for(a=0;a<n;++a){
        cout<<"Wert "<<a+1<<": ";
        cin>>(f[a]);
    };
    cout<<"Max: "<<nmax(&f,n)<<endl;
    system("PAUSE");
    return 0;
}
//---------------------------------------------------------------------------
float nmax(float** ff,int n)
{
    float max=0.0;
    while(!n){
        if((*ff[n])>(*ff[n-1]))
            max=(*ff[n]);
        else max=(*ff[n-1]);
        --n;
    };
    return max;
};



Wenn man den Code verbessern kann, dann bitte alle Verbesserungsvorschläge posten.

thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.03.2004, 23:52 Uhr
~(un)wissender
Gast


Zum deinem Code: mach mal das float** zu float* und den Adressoperator bei f weg (Übergabe).
Du hantierst da nur mit Adressen, willst aber deren Inhalt.

So geht es auch:


C++:
#include <iostream>
#include <vector>
#include <iterator>
#include <string>

int main()
{
    std::vector<float> vec;
    float temp;
    
    std::cout << "Buchstaben zum Beenden eingeben!\n";
    
    //Einlesen
    while(std::cin) {
        std::cin >> temp;
        vec.push_back(temp);
    }
    
    //Stream aufräumen
    std::cin.clear();  
    std::string garbage;
    std::getline(std::cin, garbage);
    
    //Ausgabe
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<float>(std::cout, " "));
    
    //Maximales Element
    std::cout << "\nMAX: " << *std::max_element(vec.begin(), vec.end()) << std::endl;
    
    //Warten auf Userinput
    getchar();
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.03.2004, 23:55 Uhr
~(un)wissender
Gast


hm, eigentlich fehlt noch ein include <algorithm>...funzt aber auch so, binden wohl andere Header mit ein, zumindest beim g++.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.03.2004, 11:42 Uhr
~(un)wissender
Gast


Ich habe deins mal überarbeitet:


C++:
#include <iostream>
#include <cstdlib>
using namespace std;

float nmax(float*,int);

int main()
{
    int n=0;
    
    do {
        cout << "Bitte 1-100 eingeben!" << endl;
        cin>>n;
        //Wenn bspw. ein Buchstabe eingegen wurde ist das nötig!
        if(cin.fail()) {
            cin.clear();
            string garbage;
            getline(cin, garbage);
        }
    }while(n < 1 || n > 100);
    
    //Wir nutzen C++
    float* f= new float[n];

    for(int a = 0; a < n; ++a) {
        bool ok;
        do {
            ok = true;
            cout << "Wert " << a + 1<< ": ";
            cin >> f[a];
            if(cin.fail()) {
                cin.clear();
                string garbage;
                getline(cin, garbage);
                ok = false;
            }            
        } while(!ok);
        cout << endl;
    }
    
    cout << "Max: " << nmax(f,n) << endl;
    
    //Immer gut seinen Speicher auch wieder freizugeben.
    delete [] f;
    
    //Besser als System...
    getchar();
    
    return 0;
}

float nmax(float* f,int n)
{
    float max= 0.0f;
    for(int i = 0; i < n; ++i) {
        float temp = f[i];
        if(temp > max) {
            max = temp;
        }
    }    
    return max;
};



Und meins auch *räusper*, denn da waren noch zwei Fehler drin...


C++:
#include <iostream>
#include <vector>
#include <iterator>
#include <string>
#include <algorithm>

int main()
{
    std::vector<float> vec;
    float temp;
    
    std::cout << "Buchstaben zum Beenden eingeben!\n";
    
    //Einlesen
    while(true) {
        std::cin >> temp;
        if(std::cin)
            vec.push_back(temp);
        else
            break;
    }
    
    //Stream aufräumen
    std::cin.clear();  
    std::string garbage;
    std::getline(std::cin, garbage);
    
    //Ausgabe
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<float>(std::cout, " "));
    
    //Maximales Element
    if(vec.size() >= 1)
        std::cout << "\nMAX: " << *std::max_element(vec.begin(), vec.end()) << std::endl;
    else
        std::cout << "No input!" << std::endl;
    
    //Warten auf Userinput
    getchar();
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.03.2004, 12:17 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Das Maximum muss das Erste Element sein. Hier eine C Lösung (hoffentlich net so viele Fehler :wink

C++:
#include <stdio.h>
#include <stdlib.h>

float nmax(float *array, int anzahl);

int main()
{
    int anzahl;
    scanf("%i",&anzahl);

    float *p;
    p = (float*)malloc(anzahl*sizeof(float));

    int i; float input;
    for(i=0; i < anzahl; i++)
    {
        scanf("%f",&input);
        p[i] = input;
    }
    
    printf("Max %f",nmax(p,anzahl));

    return 0;
}

float nmax(float *array, int anzahl)
{
    int i;
    float max = array[0]; /*Erstes Element*/

    for(i=0; i < anzahl; i++)
        if(max < array[i])
            max = array[i];

    return max;
}



mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.03.2004, 00:04 Uhr
KaraHead



Danke leutz, hab es zwar ein bischen anders gelöst aber eure Ansätze/Lösungen haben Wunder bewirkt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: