Övrig

Mac C++-matriser och slumptal

iBookG4user

Originalaffisch
27 juni 2006
Seattle, WA
  • 20 september 2009
De sätter lärarna för C++ vid de mest obekväma tiderna på min högskola... Hur som helst, instruktören postade följande instruktioner:

'Skriv en funktion som kommer att fylla en array med 25 slumptal mellan 1 och 10. Skriv sedan en funktion som kommer att skriva ut arrayen. Skriv lite kod i main för att testa dina funktioner. Ibland kallas denna testkod en *drivrutin

Använd inte globala variabler här. Skicka arrayen till funktionen genom parameterlistan'

Min nuvarande kod resulterar inte i några fel i debuggern, men den matar inte ut arrayen. Och jag vet inte vad han menar med att skriva föraren, vad ska jag testa? Ni har alla visat sig vara oerhört hjälpsamma tidigare och jag är säker på att ni kommer att hjälpa mig att peka i rätt riktning den här gången

Kod: |_+_|

lee1210

10 januari 2005


Dallas, TX
  • 20 september 2009
Några saker: Din array bör vara av typen int[], inte double[]. Du måste acceptera en int-array för att producera och skriva ut. Du måste deklarera en int[] i main, skicka den för att producera, fylla i den där och sedan skicka den till utskrift. De<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Dessutom, och jag är säker på att det är ett ärligt misstag, är jag säker på att din professor menade pseudo- slumpmässig.

Dessutom deklarerar du i huvudsak nya double()s, utan åberopar produktion och tryck. Ta bort dubbeln där, och skicka in ett argument som diskuterats ovan, och ändra returtypen för båda dessa till void.

-Läsa

gnasher729

Upphängd
25 november 2005
  • 20 september 2009
Hur skulle du skriva en funktionsprototyp för funktionen 'producera'?
Och hur skulle du skriva ett anrop till funktionen 'producera'?

Och inuti din 'huvudfunktion', vilken av de två har du skrivit, en funktionsprototyp eller ett funktionsanrop?

iBookG4user

Originalaffisch
27 juni 2006
Seattle, WA
  • 20 september 2009
lee1210 sa: Några saker: Din array ska vara av typen int[], inte dubbel[]. Du måste acceptera en int-array för att producera och skriva ut. Du måste deklarera en int[] i main, skicka den för att producera, fylla i den där och sedan skicka den till utskrift. De<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Dessutom, och jag är säker på att det är ett ärligt misstag, är jag säker på att din professor menade pseudo- slumpmässig.

Dessutom deklarerar du i huvudsak nya double()s, utan åberopar produktion och tryck. Ta bort dubbeln där, och skicka in ett argument som diskuterats ovan, och ändra returtypen för båda dessa till void.

-Läsa

Ok, jag gjorde ändringarna som du föreslog och koden ser mer logisk ut. Fast nu får jag tre fel i for-slingorna.

Kod: |_+_|

Bilagor

  • Skärmdump 2009-09-20 kl. 17.42.31.png Skärmdump 2009-09-20 kl. 17.42.31.png'file-meta'> 178,1 KB · Visningar: 1 941

lee1210

10 januari 2005
Dallas, TX
  • 20 september 2009
Ändra argumenttypen för producera till int[] eller int *. Just nu är det bara int, så du kan inte använda [], etc. Detsamma gäller tryck. Dessutom behöver du inte returnera något från produktion eller tryck. Ändra deras returtyp till ogiltig.

Jag tror att avsikten är att du ska ringa print tillbaka i main, vilket borde vara bra.

Dessutom, när du skickar array för att producera, använd bara array inte *array.

-Läsa

iBookG4user

Originalaffisch
27 juni 2006
Seattle, WA
  • 20 september 2009
lee1210 sa: Ändra argumenttypen för producera till int[] eller int *. Just nu är det bara int, så du kan inte använda [], etc. Detsamma gäller tryck. Dessutom behöver du inte returnera något från produktion eller tryck. Ändra deras returtyp till ogiltig.

Jag tror att avsikten är att du ska ringa print tillbaka i main, vilket borde vara bra.

Dessutom, när du skickar array för att producera, använd bara array inte *array.

-Läsa

Det fungerade
Vet du vad han menade med att skriva koden för att testa funktionerna? Vad menar han med det? Och tack så mycket för din hjälp så här långt!

Kod: |_+_|

chown33

Moderator
Anställd
9 augusti 2009
det avgrundsdjupa planet
  • 20 september 2009
iBookG4user sa: Vet du vad han menade med att skriva koden för att testa funktionerna? Vad menar han med det?

Specifikationen sa att siffrorna i arrayen skulle vara mellan 1 och 10. Du kan skriva ett test som bekräftar det.

Det stod också att siffrorna skulle vara slumpmässiga. Även om slumpmässighet kan vara svårare att testa än det verkar, kan enkel icke-slumpmässighet vara lätt att testa. Det enklaste är att bekräfta att alla siffror inte har samma värde. Mer komplexa tester av slumpmässighet använder statistiska analyser.

Ett annat test du kan skriva är att bekräfta att funktionen produce() returnerar olika värden varje gång den anropas. Detta är en enkel form av statistisk analys, det vill säga att säkerställa att på varandra följande anrop har oberoende resultat.

Du bör också överväga att initiera arrayen med kända ogiltiga värden, såsom -1 eller 0, innan du anropar produce(). Annars kan en oinitierad lokal array redan innehålla oförutsägbara värden, som ett test kan tolka som slumpmässigt även om produce() inte gör något alls.

Som en specifikation är arbetsbeskrivningen något vag. För det första anger den inte vilka tester den måste klara. Tro mig, om du överlåter till de flesta programmerare att välja kvalifikationstester är det ett stort misstag. Koden kanske bara fungerar i ett fall, vilket var fallet som programmeraren använde för att utveckla koden. Om det verkar galet kan jag försäkra dig om att det har hänt.

iBookG4user

Originalaffisch
27 juni 2006
Seattle, WA
  • 20 september 2009
Det var enkelt nog, tack!
Detta fungerade en njutning:
Kod: |_+_| S

Sander

till
24 april 2008
  • 21 september 2009
iBookG4user sa: Det var enkelt nog, tack!
Detta fungerade en njutning:

Försök att sätta ett 'ogiltigt' nummer i din array (säg 11) och se om den här funktionen upptäcker det.

iBookG4user

Originalaffisch
27 juni 2006
Seattle, WA
  • 21 september 2009
Sander sa: Försök att sätta ett 'ogiltigt' nummer i din array (säg 11) och se om den här funktionen upptäcker det.

Jag ställde tillfälligt in arrayen för att tillåta nummer större än 10 och den upptäckte det, tack S

Sander

till
24 april 2008
  • 22 september 2009
iBookG4user sa: Jag ställde tillfälligt in arrayen för att tillåta nummer större än 10 och den upptäckte det, tack

Även om det inte är det första elementet i arrayen..?

Anledningen till att jag frågar är att din print()-funktion (åtminstone den senaste versionen som visas i den här tråden) endast returnerar det första elementet i arrayen (konverterat till en dubbel).