Sonstiges

Mac C++ Arrays und Zufallszahlen

iBookG4Benutzer

Originalplakat
27. Juni 2006
Seattle, WA
  • 20. September 2009
Sie setzen die Tutoren für C++ zu den ungünstigsten Zeiten an meinem College ein ... Wie auch immer, der Dozent hat die folgenden Anweisungen gepostet:

'Schreiben Sie eine Funktion, die ein Array mit 25 Zufallszahlen zwischen 1 und 10 füllt. Schreiben Sie dann eine Funktion, die das Array ausgibt. Schreiben Sie etwas Code in main, um Ihre Funktionen zu testen. Manchmal wird dieser Testcode als *Treiber . bezeichnet

Verwenden Sie hier keine globalen Variablen. Übergeben Sie das Array über die Parameterliste an die Funktion.

Mein aktueller Code führt zu keinen Fehlern im Debugger, gibt aber das Array nicht aus. Und ich weiß nicht, was er damit meint, den Treiber zu schreiben, was soll ich denn testen? Ihr alle habt euch in der Vergangenheit als überaus hilfreich erwiesen und ich bin mir sicher, dass ihr mir diesmal dabei helfen werdet, mich in die richtige Richtung zu weisen

Code: |_+_|

lee1210

10. Januar 2005


Dallas, TX
  • 20. September 2009
Ein paar Dinge: Ihr Array sollte vom Typ int[] sein, nicht double[]. Sie müssen ein int-Array akzeptieren, um es zu produzieren und zu drucken. Sie müssen ein int[] in main deklarieren, es an produzieren übergeben, es dort ausfüllen und dann an print übergeben. Die<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Außerdem, und ich bin sicher, es ist ein ehrlicher Fehler, ich bin sicher, Ihr Professor hat das gemeint Pseudo- willkürlich.

Außerdem deklarieren Sie in der Hauptsache neue double()s und rufen nicht 'produzieren' und 'print' auf. Nehmen Sie dort das Double weg, übergeben Sie ein Argument wie oben beschrieben und ändern Sie den Rückgabetyp von beiden in void.

-Lesen

gnasher729

Ausgesetzt
25. November 2005
  • 20. September 2009
Wie würden Sie einen Funktionsprototyp für die Funktion 'produzieren' schreiben?
Und wie würden Sie einen Aufruf der Funktion 'produzieren' schreiben?

Und welche der beiden haben Sie in Ihrer Hauptfunktion geschrieben, einen Funktionsprototyp oder einen Funktionsaufruf?

iBookG4Benutzer

Originalplakat
27. Juni 2006
Seattle, WA
  • 20. September 2009
lee1210 sagte: Ein paar Dinge: Ihr Array sollte vom Typ int[] sein, nicht double[]. Sie müssen ein int-Array akzeptieren, um es zu produzieren und zu drucken. Sie müssen ein int[] in main deklarieren, es an produzieren übergeben, es dort ausfüllen und dann an print übergeben. Die<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Außerdem, und ich bin sicher, es ist ein ehrlicher Fehler, ich bin sicher, Ihr Professor hat das gemeint Pseudo- willkürlich.

Außerdem deklarieren Sie in der Hauptsache neue double()s und rufen nicht 'produzieren' und 'print' auf. Nehmen Sie dort das Double weg, übergeben Sie ein Argument wie oben beschrieben und ändern Sie den Rückgabetyp von beiden in void.

-Lesen

Ok, ich habe die von Ihnen vorgeschlagenen Änderungen vorgenommen und der Code sieht logischer aus. Obwohl ich jetzt drei Fehler in den for-Schleifen bekomme.

Code: |_+_|

Anhänge

  • Screenshot 2009-09-20 um 17.42.31 Uhr.png Screenshot 2009-09-20 um 5.42.31 Uhr.png'file-meta'> 178,1 KB · Aufrufe: 1.941

lee1210

10. Januar 2005
Dallas, TX
  • 20. September 2009
Ändern Sie den Argumenttyp von product in int[] oder int *. Im Moment ist es nur int, Sie können also nicht [] usw. verwenden. Gleiches gilt für den Druck. Außerdem müssen Sie nichts von Produkten oder Druckerzeugnissen zurückgeben. Ändern Sie den Rückgabetyp in void.

Ich denke, die Absicht besteht darin, print in main aufzurufen, was in Ordnung sein sollte.

Auch wenn Sie array an produzieren übergeben, verwenden Sie einfach array und nicht *array.

-Lesen

iBookG4Benutzer

Originalplakat
27. Juni 2006
Seattle, WA
  • 20. September 2009
lee1210 sagte: Ändere den Argumenttyp von produzieren in int[] oder int *. Im Moment ist es nur int, Sie können also nicht [] usw. verwenden. Gleiches gilt für den Druck. Außerdem müssen Sie nichts von Produkten oder Druckerzeugnissen zurückgeben. Ändern Sie den Rückgabetyp in void.

Ich denke, die Absicht besteht darin, print in main aufzurufen, was in Ordnung sein sollte.

Auch wenn Sie array an produzieren übergeben, verwenden Sie einfach array und nicht *array.

-Lesen

Es funktionierte
Wissen Sie, was er damit meinte, den Code zum Testen der Funktionen zu schreiben? Was meint er damit? Und vielen Dank für deine bisherige Hilfe!

Code: |_+_|

chown33

Moderator
Mitarbeiter
9. August 2009
die abgründige Ebene
  • 20. September 2009
iBookG4user sagte: Wissen Sie, was er damit meinte, den Code zum Testen der Funktionen zu schreiben? Was meint er damit?

Die Spezifikation besagt, dass die Zahlen im Array zwischen 1 und 10 liegen sollten. Sie könnten einen Test schreiben, der dies bestätigt.

Es sagte auch, dass die Zahlen zufällig sein sollten. Während Zufälligkeit schwieriger zu testen sein kann, als es den Anschein hat, kann einfache Nichtzufälligkeit leicht zu testen sein. Am einfachsten ist es, zu bestätigen, dass nicht alle Zahlen denselben Wert haben. Komplexere Zufälligkeitstests verwenden statistische Analysen.

Ein anderer Test, den Sie schreiben können, besteht darin, zu bestätigen, dass die Funktion produzieren() bei jedem Aufruf andere Werte zurückgibt. Dies ist eine einfache Form der statistischen Analyse, d. h. um sicherzustellen, dass aufeinanderfolgende Aufrufe unabhängige Ergebnisse haben.

Sie sollten auch erwägen, das Array mit bekannten ungültigen Werten wie -1 oder 0 zu initialisieren, bevor Sie produzieren() aufrufen. Andernfalls kann ein nicht initialisiertes lokales Array bereits unvorhersehbare Werte enthalten, die ein Test als zufällig interpretieren könnte, selbst wennproduce() überhaupt nichts tut.

Als Spezifikation ist die Leistungsbeschreibung etwas vage. Zum einen gibt es nicht an, welche Tests es bestehen muss. Glauben Sie mir, wenn Sie es den meisten Programmierern überlassen, die Qualifikationstests auszuwählen, ist das ein großer Fehler. Der Code funktioniert möglicherweise nur in einem Fall, in dem der Programmierer den Code entwickelt hat. Wenn das verrückt erscheint, kann ich Ihnen versichern, dass es passiert ist.

iBookG4Benutzer

Originalplakat
27. Juni 2006
Seattle, WA
  • 20. September 2009
Das war ganz einfach, danke!
Das hat super funktioniert:
Code: |_+_| S

Sander

zu
24. April 2008
  • 21.09.2009
iBookG4user sagte: Das war ganz einfach, danke!
Das hat super funktioniert:

Versuchen Sie, eine 'ungültige' Zahl in Ihr Array aufzunehmen (z. B. 11) und prüfen Sie, ob diese Funktion dies erkennt.

iBookG4Benutzer

Originalplakat
27. Juni 2006
Seattle, WA
  • 21.09.2009
Sander sagte: Versuchen Sie, eine 'ungültige' Zahl in Ihr Array einzufügen (z. B. 11) und sehen Sie, ob diese Funktion dies erkennt.

Ich habe das Array vorübergehend so eingestellt, dass es Zahlen größer als 10 zulässt, und es hat es erkannt, danke S

Sander

zu
24. April 2008
  • 22.09.2009
iBookG4user sagte: Ich habe das Array vorübergehend so eingestellt, dass Zahlen größer als 10 zugelassen werden, und es wurde erkannt, danke

Auch wenn es nicht das erste Element im Array ist..?

Der Grund, warum ich frage, ist, dass Ihre print()-Funktion (zumindest die letzte in diesem Thread gezeigte Version) nur das erste Element des Arrays zurückgibt (in ein Double umgewandelt).