Jiný

Mac C++ pole a náhodná čísla

iBookG4user

Původní plakát
27. června 2006
Seattle, WA
  • 20. září 2009
Učitele C++ mi na koleji dali na ty nejnevhodnější časy... Každopádně, instruktor zveřejnil následující pokyny:

'Napište funkci, která vyplní pole 25 náhodnými čísly mezi 1 a 10. Poté napište funkci, která pole vytiskne. Napište nějaký kód do main, abyste otestovali své funkce. Někdy se tento testovací kód nazývá *ovladač

Nepoužívejte zde globální proměnné. Předejte pole funkci prostřednictvím seznamu parametrů'

Můj aktuální kód nezpůsobuje žádné chyby v ladicím programu, ale nevydává pole. A nevím, co myslí tím, že píše ovladač, co mám testovat? Všichni jste se v minulosti ukázali jako nesmírně užiteční a jsem si jistý, že mi tentokrát pomůžete nasměrovat správný směr

Kód: |_+_|

lee1210

10. ledna 2005


Dallas, TX
  • 20. září 2009
Několik věcí: Vaše pole by mělo být typu int[], nikoli double[]. Chcete-li vytvořit a vytisknout, musíte přijmout pole int. Musíte deklarovat int[] v main, předat jej k produkci, tam vyplnit a poté předat k tisku. The<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Také, a jsem si jistý, že je to upřímná chyba, jsem si jistý, že to myslel váš profesor pseudo- náhodný.

V podstatě také deklarujete nové double()s, nikoli vyvoláte produkci a tisk. Vezměte tam dvojku a předejte argument, jak je uvedeno výše, a změňte návratový typ obou na neplatný.

-Číst

gnasher729

Pozastaveno
25. listopadu 2005
  • 20. září 2009
Jak byste napsali prototyp funkce pro funkci „produkovat“?
A jak byste napsali volání funkce 'produkovat'?

A ve vaší „hlavní“ funkci, kterou z těchto dvou jste napsali, prototyp funkce nebo volání funkce?

iBookG4user

Původní plakát
27. června 2006
Seattle, WA
  • 20. září 2009
lee1210 řekl: Pár věcí: Vaše pole by mělo být typu int[], ne double[]. Chcete-li vytvořit a vytisknout, musíte přijmout pole int. Musíte deklarovat int[] v main, předat jej k produkci, tam vyplnit a poté předat k tisku. The<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Také, a jsem si jistý, že je to upřímná chyba, jsem si jistý, že to myslel váš profesor pseudo- náhodný.

V podstatě také deklarujete nové double()s, nikoli vyvoláte produkci a tisk. Vezměte tam dvojku a předejte argument, jak je uvedeno výše, a změňte návratový typ obou na neplatný.

-Číst

Dobře, provedl jsem změny, které jste navrhl, a kód vypadá logičtěji. I když teď dostávám tři chyby v cyklech for.

Kód: |_+_|

Přílohy

  • Snímek obrazovky 20.09.2009 v 17:42:31.png Snímek obrazovky 20.09.2009 v 17:42.31.png'file-meta'> 178,1 kB · Zobrazení: 1 941

lee1210

10. ledna 2005
Dallas, TX
  • 20. září 2009
Změňte typ argumentu produkce na int[] nebo int *. Právě teď je to jen int, takže nemůžete použít [] atd. Totéž platí pro tisk. Také nemusíte nic vracet z výroby nebo tisku. Změňte jejich návratový typ na neplatný.

Myslím, že záměrem je zavolat print zpět v main, což by mělo být v pořádku.

Také, když předáte pole k produkci, použijte pole, nikoli *array.

-Číst

iBookG4user

Původní plakát
27. června 2006
Seattle, WA
  • 20. září 2009
lee1210 řekl: Změňte typ argumentu produkce na int[] nebo int *. Právě teď je to jen int, takže nemůžete použít [] atd. Totéž platí pro tisk. Také nemusíte nic vracet z výroby nebo tisku. Změňte jejich návratový typ na neplatný.

Myslím, že záměrem je zavolat print zpět v main, což by mělo být v pořádku.

Také, když předáte pole k produkci, použijte pole, nikoli *array.

-Číst

Fungovalo to
Víte, co myslel tím, že napsal kód pro testování funkcí? co tím myslí? A moc děkuji za vaši dosavadní pomoc!

Kód: |_+_|

chown33

Moderátor
Zaměstnanec
9. srpna 2009
Propastná rovina
  • 20. září 2009
iBookG4user řekl: Víte, co myslel tím, že napsal kód pro testování funkcí? co tím myslí?

Specifikace říkala, že čísla v poli by měla být mezi 1 a 10. Můžete napsat test, který to potvrdí.

Také řekl, že čísla by měla být náhodná. Zatímco náhodnost může být obtížnější, než se zdá, jednoduchá nenáhodnost může být snadno testovatelná. Nejjednodušší je potvrdit, že všechna čísla nemají stejnou hodnotu. Složitější testy náhodnosti využívají statistické analýzy.

Dalším testem, který můžete napsat, je potvrdit, že funkce production() vrací různé hodnoty pokaždé, když je zavolána. Jedná se o jednoduchou formu statistické analýzy, tedy zajištění toho, že po sobě jdoucí vyvolání mají nezávislé výsledky.

Před voláním metody production() byste také měli zvážit inicializaci pole se známými neplatnými hodnotami, jako je -1 nebo 0. V opačném případě může neinicializované lokální pole již obsahovat nepředvídatelné hodnoty, které by test mohl interpretovat jako náhodné, i když production() nedělá vůbec nic.

Jako specifikace je prohlášení o práci poněkud vágní. Jednak nespecifikuje, jakými testy musí projít. Věřte, že pokud necháte výběr kvalifikačních testů na většině programátorů, je to velká chyba. Kód mohl fungovat pouze v jednom případě, což byl případ, který programátor použil k vývoji kódu. Pokud se vám to zdá šílené, mohu vás ujistit, že se to stalo.

iBookG4user

Původní plakát
27. června 2006
Seattle, WA
  • 20. září 2009
To bylo dost jednoduché, díky!
Tohle se povedlo:
Kód: |_+_| S

Sander

na
24. dubna 2008
  • 21. září 2009
iBookG4user řekl: To bylo dost jednoduché, díky!
Tohle se povedlo:

Zkuste do pole vložit „neplatné“ číslo (řekněme 11) a zjistěte, zda to tato funkce detekuje.

iBookG4user

Původní plakát
27. června 2006
Seattle, WA
  • 21. září 2009
Sander řekl: Zkuste do pole vložit 'neplatné' číslo (řekněme 11) a zjistěte, zda to tato funkce detekuje.

Dočasně jsem pole nastavil tak, aby umožňovalo čísla větší než 10 a detekovalo to, díky S

Sander

na
24. dubna 2008
  • 22. září 2009
iBookG4user řekl: Dočasně jsem nastavil pole tak, aby umožňovalo čísla větší než 10 a detekovalo to, díky

I když to není první prvek v poli..?

Důvod, proč se ptám, je ten, že vaše funkce print() (alespoň poslední verze uvedená v tomto vláknu) vrací pouze první prvek pole (převedený na double).