Neulingsfrage... ;) (Arrays)

Dieses Thema im Forum "C/C++" wurde erstellt von GeekGirl, 25.06.2004.

  1. #1 GeekGirl, 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW
    Hi Ihr Lieben,

    habe mich gestern entschieden, doch endlich C++ zu lernen... das erste Buch habe ich nach etlichen Stunden schon halb durch (es macht tatsächlich süchtig) :) Nun stehe ich aber vor einem Problem:

    Ich möchte die Größe eines Arrays zur Laufzeit festlegen. Das geht anscheinend nicht. Das Programm errechnet einen Mittelwert von einzugebenden Zahlen. Im Quelltext ist die Anzahl der einzugebenden Zahlen, die als Grundlage zur Berechnung dienen, festgelegt. Wie kann ich den User bestimmen lassen, von wievielen Zahlen er den Mittelwert berechnen will? Geht das überhaupt mit Arrays, muß ich da Pointer nehmen oder gibts da ne bessere Möglichkeit?

    Hat es einen Sinn, mich näher mit Zeigern/Pointern zu diesem Thema zu befassen, oder ist es dafür noch zu früh?

    Hier mal der Code (bitte nicht über meine drolligen Kommentare lachen...) :D :

    <code>

    //Mittelwert berechnen
    #include <iostream>

    using namespace std;

    int main()
    {
    double werte[10]; // Definition des Arrays mit 10 double-Werten
    double mittelwert = 0;
    int loop; //Schleifenvariable, wird unten festgelegt

    for(loop = 0; loop < 10; loop++)
    {
    cout << " Gib einen Wert ein: ";
    cin >> werte[loop]; /* um automatisch mit jedem neuen Schl.durchgang
    auf das naechste Arrayelement zuzugreifen, uebergibt man die
    Schleifenvariable als Index (wobei Index= 1. Zahl im Array)*/

    mittelwert += werte[loop]; /* Array-Werte werden in der Variablen
    mittelwert addiert */
    }
    cout << "\n Mittelwert: " << mittelwert/10 << endl;

    return 0;
    }
    </code>

    Danke & Gruss,
    GeekGirl
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 atomical, 25.06.2004
    atomical

    atomical castor transporteur

    Dabei seit:
    11.11.2003
    Beiträge:
    133
    Zustimmungen:
    0
    Ich würd sagen malloc und realloc sind das Stichwort - ganz ohne Pointer wird es bei dynamischen Feldern nicht gehen.

    Sowas ähnliches (auch mit Schleife, in der Werte in ein Feld eingefügt wurden) hab ich mal als Info Beleg schreiben müssen ...

    hier nur kurz was zusammenkopiert ...
    Code:
    struct run_info
    { ... }
    
    typedef struct run_info RUN_INFO;
    
    (...)
    
    
    RUN_INFO *work_table = NULL;// Zeiger auf dynamisches Feld
    
    work_table = (RUN_INFO *)malloc(*array_size*sizeof(RUN_INFO); // Feld anlegen
    
    *array_size = dev_count + dyn_array_oversize; // neue groesse berechnen
    work_table=(RUN_INFO *)realloc(work_table, *array_size*sizeof(RUN_INFO)); // mehr Speicher anfordern
    
    Das Feld würde ich aber nicht mit jeder hinzugefügten Variable um 1 vergrößern - das ist imho ineffizient.

    Im Anhang zum Nachvollziehen das Programm mit auszuwertender Datei - sollte eigentlich funktionieren.
     

    Anhänge:

  4. #3 RlDdLeR, 25.06.2004
    RlDdLeR

    RlDdLeR BENUTZT GOOGLE - VERDAMMT

    Dabei seit:
    04.04.2003
    Beiträge:
    702
    Zustimmungen:
    0
    Nur mal eine kleine Anmerkung, sie wollte C++-Code, und da gehört nie und nimmer malloc und realloc rein, dass kannst du in jedem guten C++ lesen, so z.B. auch in Effektiv C++ programmieren. Nimm lieber new und delete, viel Speicherschonender und sicherer.
     
  5. #4 atomical, 25.06.2004
    atomical

    atomical castor transporteur

    Dabei seit:
    11.11.2003
    Beiträge:
    133
    Zustimmungen:
    0
    8o - so sehr vertieft haben wir das als AT'ler nicht.
     
  6. #5 sphreak, 25.06.2004
    sphreak

    sphreak Kommentarvernachlässiger

    Dabei seit:
    25.04.2003
    Beiträge:
    148
    Zustimmungen:
    0
  7. #6 RlDdLeR, 25.06.2004
    RlDdLeR

    RlDdLeR BENUTZT GOOGLE - VERDAMMT

    Dabei seit:
    04.04.2003
    Beiträge:
    702
    Zustimmungen:
    0
  8. #7 nikster77, 25.06.2004
    nikster77

    nikster77 Routinier

    Dabei seit:
    15.03.2004
    Beiträge:
    307
    Zustimmungen:
    0
    Hi Geek,
    ich schreibe nur sehr selten C-Code und habe das hier auch nicht getestet, es ist ein Vorschlag:

    <code>

    //Mittelwert berechnen
    #include <iostream>

    using namespace std;

    int main()
    {
    double werte; // Definition des Arrays mit 10 double-Werten
    double mittelwert = 0;
    int loop; //Schleifenvariable, wird unten festgelegt

    cout >> "Gib die Grösse des Arrays ein:";
    cin << groesse;

    for(loop = 0; loop < groesse; loop++)
    {
    cout << " Gib einen Wert ein: ";
    cin >> werte[loop]; /* um automatisch mit jedem neuen Schl.durchgang
    auf das naechste Arrayelement zuzugreifen, uebergibt man die
    Schleifenvariable als Index (wobei Index= 1. Zahl im Array)*/

    mittelwert += werte[loop]; /* Array-Werte werden in der Variablen
    mittelwert addiert */
    }
    cout << "\n Mittelwert: " << mittelwert/groesse << endl;

    return 0;
    }
    </code>

    so ungefähr vielleicht....

    Niels
     
  9. #8 foobarflu, 25.06.2004
    foobarflu

    foobarflu Foren As

    Dabei seit:
    21.12.2003
    Beiträge:
    79
    Zustimmungen:
    0
    Wieso gehst Du das Problem überhaupt so an?
    Eingabe in ein temporäre Variable, zur Summe hinzuaddieren, am Ende durch die Zahl der eingegebenen Werte teilen.
     
  10. #9 GeekGirl, 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW
    danke erstmal... funzt trotzdem noch nicht so ganz... ;(

    bash-2.05b$ g++ mittelwertneu.cpp -o mittelwertneu
    mittelwertneu.cpp: In function `int main()':
    mittelwertneu.cpp:12: error: no match for 'operator>>' in 'std::cout >> "Gib
    die Gr\37777777703\37777777666sse des Arrays ein:"'
    mittelwertneu.cpp:13: error: `groesse' undeclared (first use this function)
    mittelwertneu.cpp:13: error: (Each undeclared identifier is reported only once
    for each function it appears in.)
    mittelwertneu.cpp:18: error: invalid types `double[int]' for array subscript
    mittelwertneu.cpp:22: error: invalid types `double[int]' for array subscript
    bash-2.05b$
     
  11. #10 GeekGirl, 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW

    wobei ich soweit noch gar nicht bin, malloc oder realloc zu kennen... ich guck mir trotzdem mal die Files an ;)
     
  12. #11 GeekGirl, 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW
    danke, aber dank Volkards C++-Kurs hat sich mein Anfang mit C++ um einen guten Monat verzögert... ich habs damals schon mal versucht, und bin gleich initial über veraltete Programmaufrufe gestolpert, weshalb ich das ganze vertagt hatte, bis ich relativ gute Buchlektüre für mich gefunden hab :)
     
  13. #12 GeekGirl, 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW
    Beispiel? das ganze sitzt noch nicht so fest (nach den paar Stunden seit gestern), daß ich das auf Anhieb einordnen könnte ;)
     
  14. #13 GeekGirl, 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW
    woher kommt denn malloc und realloc, wenns kein C++ ist? *neugierig ist* :bounce:
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 GeekGirl, 25.06.2004
    Zuletzt bearbeitet: 25.06.2004
    GeekGirl

    GeekGirl voll das krasse Bunny

    Dabei seit:
    30.04.2003
    Beiträge:
    241
    Zustimmungen:
    0
    Ort:
    NRW
    Jippiiiieee

    ich hab des Rätsels Lösung gefunden (per dummen Zufall, aber egal) :)

    eigentlich hab ich nur ganz doof weggekürzt, eher versuchsweise, aber komischerweise funzt es *freu* kann mir jemand sagen, ob das jetzt schlampiger Code ist (abgesehen von den Comments)?

    edit: ich glaube, jetzt isses auch gar kein Array mehr, oder?

    //Mittelwert berechnen
    #include <iostream>

    using namespace std;

    int main()
    {
    double werte;
    double mittelwert = 0;
    int loop; //Schleifenvariable, wird unten festgelegt

    double groesse;
    cout << "Gib die Grösse des Arrays ein:";
    cin >> groesse;

    for(loop = 0; loop < groesse; loop++)
    {
    cout << " Gib einen Wert ein: ";
    cin >> werte;

    mittelwert += werte;
    }
    cout << "\n Mittelwert: " << mittelwert/groesse << endl;

    return 0;
    }
     
  17. #15 RlDdLeR, 25.06.2004
    Zuletzt bearbeitet: 25.06.2004
    RlDdLeR

    RlDdLeR BENUTZT GOOGLE - VERDAMMT

    Dabei seit:
    04.04.2003
    Beiträge:
    702
    Zustimmungen:
    0
    kommt von C, C++ ist ja die Obermenge von C, aber es hat halt Neuerungen etc.

    Btw: Grats zu deinem Erfolg, was lange währt wird ewig gut sagt man doch oder? :)

    /edit: Der Code ist ganz gut geschrieben, gerade das du im ANSI-Standard (einfach eine Klausel wie COde auszusehen hat) gefällt mir gut. Du kannst aber auch beim Kompilieren die Option -Wall mit einbinden (g++ -Wall bla.cpp -o blaprog), dann zeigt er dir jedesmal Formverstösse an, die aber nicht unbedingt falsch sein müssen, geht halt nur um schöneren Code.
     
Thema:

Neulingsfrage... ;) (Arrays)