2010-12-11 24 views
1

Ich habe für eine Weile an dieser Hausaufgabe gearbeitet und kann nicht herausfinden, was ich falsch mache. Wie mein Programm ist wohl arbeiten:
Benutzer so viele positive Zahlen, wie sie geht es wünschen, sind
Zahlen in einer verknüpften Liste,
Zahlen eingegeben hinzugefügt werden sollte,
Dividieren durch die Menge von Zahlen eingegeben,
Ergebnis im Durchschnitt,
Allerdings funktioniert es nicht so, wie ich es beabsichtigt hatte und ich spiele jetzt seit über 3 Stunden damit. Ich würde meinen Lehrer kontaktieren, aber sie hat immer noch nicht auf meine letzte Nachricht geantwortet und ich brauche sofort Hilfe. Danke im Voraus.Wie Add-In-Zeigerwerte in einer verknüpften Liste in C++?

Hinweis: Ich muss die Liste durchqueren, um alle eingegebenen Zahlen aufzählen und die Anzahl der Knoten zählen.

#include <iostream> 
using namespace std; 

int num, total, num_entries = 1; 

struct number_node 
{ 
int number; 
number_node *next; 
}; 

number_node *head_ptr; 
number_node *current_ptr; 

int get_number_data(int &number); 
void add_node(int &number); 
void move_current_to_end(); 
void display_avg(); 
void delete_list(); 

int main() 
{ 
if(get_number_data(num)) 
{ 
    head_ptr = new number_node; 
    head_ptr->number = num; 
    head_ptr->next = NULL; 

    while(get_number_data(num)) 
    { 
    add_node(num); 
    } 
    display_avg(); 
    delete_list(); 
} 

system("pause"); 
return 0; 
} 

int get_number_data(int &number) 
{ 
int keep_data = 1; 

cout << "Enter a positive number (Enter a negative number to stop): "; 
cin >> num; 
if(num < 0) 
{ 
    keep_data = 0; 
} 

return(keep_data); 
} 

void add_node(int &number) 
{ 
number_node *new_rec_ptr; 

new_rec_ptr = new number_node; 

new_rec_ptr->number = num; 
new_rec_ptr->next = NULL; 

move_current_to_end(); 
current_ptr->next = new_rec_ptr; 
} 

void move_current_to_end() 
{ 
current_ptr = head_ptr; 
num_entries++; 

while(current_ptr->next != NULL) 
{ 
    current_ptr = current_ptr->next; 
    total = current_ptr->number + total; 
} 
} 

void display_avg() 
{ 
current_ptr = head_ptr; 
cout << "Average = " << total/num_entries << endl; 
} 

void delete_list() 
{ 
number_node *temp_ptr; 

current_ptr = head_ptr; 

do 
{ 
    temp_ptr = current_ptr->next; 

    delete current_ptr; 

    current_ptr = temp_ptr; 
} 
while(temp_ptr != NULL); 
} 
+0

Sie sollten eine geben.? bessere Beschreibung der Probleme als "es funktioniert nicht". Was funktioniert nicht? Was erwarten Sie und was passiert stattdessen? Wo haben Sie Probleme? – sth

Antwort

3

Gerade jetzt sind Sie Ihre Datenstruktur (verkettete Liste) Mischen mit dem, was Sie beabsichtigen, es zu verwenden. Ziehen Sie in Betracht, Ihre Logik aufzuteilen:

  • Ihr E/A-Code.
  • Die Implementierung der verknüpften Liste.
  • Eine Funktion, die eine verkettete Liste übernimmt und den Durchschnitt berechnet.
+0

Ich bin ein wenig unsicher, was Sie meinen, indem Sie die Logik aufteilen ... – Brandon

+0

Wenn Sie jetzt einen Knoten hinzufügen, fügen Sie auch den Wert dieses Knotens zur Gesamtzahl hinzu (in 'move_current_to_end' durch den Proxy von' add_node'). Stattdessen sollte 'add_node' nur den Knoten zur Liste hinzufügen - Die tatsächliche Gesamt-/Längenberechnung sollte durchgeführt werden, nachdem alles der Liste hinzugefügt wurde (siehe Jonathan's Antwort auf acco) den letzten Teil. – Paul

+0

hm ... Ich kann in dieser Aufgabe aber keine for-Schleife verwenden ... Ich muss mit dem arbeiten, was ich da habe ... EDIT: habe nicht gemerkt, dass "submitted" eingereicht wurde, wie auch immer, ich muss Die Sache berechnet die Summe und die Anzahl der Knoten, während sie sich bewegen. – Brandon

0

Sie haben dort eine Menge anderer Sachen bekommen und Sie nicht sagen, was Ihr Code tut, aber ich würde so etwas wie diese (nicht getestet) tut: wissen

int count = 0; 
int total = 0; 

for (ptr = head_ptr; ptr != NULL; ptr = ptr->next) 
{ 
    total += ptr->number; 
    count++; 
} 
+0

Ich habe vergessen zu erwähnen, dass ich die Liste "durchlaufen" muss, um die eingegebenen Zahlen zu summieren und die Anzahl der Knoten in der Liste zu zählen. Also, mein großes Dilemma ... – Brandon

+1

verstehe ich nicht. Mein Code durchläuft die Liste, zählt die Anzahl der Knoten und addiert auch die Summe - ??? –

+0

aber ich kann keine For-Schleife verwenden, ich muss verwenden, was ich habe – Brandon

0

ich diesen gewonnen ‚t Sie mit den Hausaufgaben helfen, aber hier ist ein C++ STL-Programm, das Ihre Anforderungen erfüllt:

  • wie viele Eingänge, wie der Benutzer es wünscht
  • Nummern gespeichert sind, in einer verknüpften Liste
  • Zahlen aufaddiert
  • Errechnet und zeigt durchschnittliche

Viel Glück mit Ihrer Klasse.

#include <list> 
#include <iterator> 
#include <iostream> 
#include <algorithm> 
#include <numeric> 

int main() 
{ 
    std::list<double> l; 

    std::copy(std::istream_iterator<double>(std::cin), 
    std::istream_iterator<double>(), 
    std::insert_iterator<std::list<double> >(l, l.begin())); 

    size_t size = l.size(); 
    if(size) 
    std::cout << std::accumulate(l.begin(), l.end(), 0.0)/l.size() 
     << std::endl; 
} 

~

0

Apologies: würde einen Kommentar haben angebracht diese einleitende Frage zu stellen. Aber anscheinend brauchst du einen höheren Ruf als ich es momentan tun muss.

@Brandon.Kann ich Ihnen klar zu sagen, dass es diese Funktionen ist:

int get_number_data (int & Nummer)

Leere add_node (int & Nummer)

Leere move_current_to_end()

Leere display_avg ()

und nur diese, die Sie verwenden dürfen? (Ich zitiere Sie: „Ich muss nur haben es die Gesamt und und # Knoten herauszufinden, diese Funktionen mit“

Wenn ja, warum haben sie von Ihrem Dozent angegeben

Verwandte Themen