Altro

Array Mac C++ e numeri casuali

iBookG4user

Manifesto originale
27 giugno 2006
Seattle, WA
  • 20 settembre 2009
Mettono i tutor per C++ nei momenti più scomodi al mio college... Ad ogni modo, l'istruttore ha pubblicato le seguenti indicazioni:

'Scrivi una funzione che riempia un array con 25 numeri casuali tra 1 e 10. Quindi scrivi una funzione che stamperà l'array. Scrivi del codice in main per testare le tue funzioni. A volte questo codice di prova è chiamato *driver

Non utilizzare le variabili globali qui. Passa l'array alla funzione tramite l'elenco dei parametri'

Il mio codice attuale non genera errori nel debugger, ma non restituisce l'array. E non so cosa intende scrivendo al conducente, cosa dovrei testare? Vi siete dimostrati tutti estremamente utili in passato e sono sicuro che questa volta mi aiuterete a indirizzarmi nella giusta direzione

Codice: |_+_|

lee1210

10 gennaio 2005


Dallas, TX
  • 20 settembre 2009
Alcune cose: il tuo array dovrebbe essere di tipo int[], non double[]. Devi accettare un array int per produrre e stampare. Devi dichiarare un int[] in main, passarlo a produrre, compilarlo lì, quindi passarlo alla stampa. Il<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Inoltre, e sono sicuro che sia un errore onesto, sono sicuro che il tuo professore intendesse pseudo- a caso.

Inoltre, in generale, stai dichiarando nuovi double(), non invocando la produzione e la stampa. Porta via il doppio lì e passa un argomento come discusso sopra e cambia il tipo di ritorno di entrambi in void.

-Leggi

gnasher729

Sospeso
25 novembre 2005
  • 20 settembre 2009
Come scriveresti un prototipo di funzione per la funzione 'produci'?
E come scriveresti una chiamata alla funzione 'produci'?

E all'interno della tua funzione 'principale', quale delle due hai scritto, un prototipo di funzione o una chiamata di funzione?

iBookG4user

Manifesto originale
27 giugno 2006
Seattle, WA
  • 20 settembre 2009
lee1210 ha detto: Alcune cose: il tuo array dovrebbe essere di tipo int[], non double[]. Devi accettare un array int per produrre e stampare. Devi dichiarare un int[] in main, passarlo a produrre, compilarlo lì, quindi passarlo alla stampa. Il<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Inoltre, e sono sicuro che sia un errore onesto, sono sicuro che il tuo professore intendesse pseudo- a caso.

Inoltre, in generale, stai dichiarando nuovi double(), non invocando la produzione e la stampa. Porta via il doppio lì e passa un argomento come discusso sopra e cambia il tipo di ritorno di entrambi in void.

-Leggi

Ok, ho apportato le modifiche che hai suggerito e il codice sembra più logico. Anche se ora sto ricevendo tre errori nei cicli for.

Codice: |_+_|

Allegati

  • Schermata 20-09-2009 alle 5.42.31 PM.png Schermata 20/09/2009 at 5.42.31 PM.png'file-meta'> 178,1 KB · Visualizzazioni: 1.941

lee1210

10 gennaio 2005
Dallas, TX
  • 20 settembre 2009
Cambia il tipo di argomento di produrre in int[] o int *. In questo momento è solo int, quindi non puoi usare [], ecc. Lo stesso vale per la stampa. Inoltre, non è necessario restituire nulla da prodotti o stampe. Cambia il loro tipo di reso in void.

Penso che l'intento sia di richiamare print in main, il che dovrebbe andare bene.

Inoltre, quando passi array da produrre, usa semplicemente array non *array.

-Leggi

iBookG4user

Manifesto originale
27 giugno 2006
Seattle, WA
  • 20 settembre 2009
lee1210 ha detto: Cambia il tipo di argomento di produrre in int[] o int *. In questo momento è solo int, quindi non puoi usare [], ecc. Lo stesso vale per la stampa. Inoltre, non è necessario restituire nulla da prodotti o stampe. Cambia il loro tipo di reso in void.

Penso che l'intento sia di richiamare print in main, il che dovrebbe andare bene.

Inoltre, quando passi array da produrre, usa semplicemente array non *array.

-Leggi

Ha funzionato
Ora, sai cosa intendeva scrivendo il codice per testare le funzioni? Cosa intende con quello? E grazie mille per il tuo aiuto finora!

Codice: |_+_|

chown33

Moderatore
Membro dello staff
9 agosto 2009
il Piano Abissale
  • 20 settembre 2009
iBookG4user ha detto: Ora, sai cosa intendeva scrivendo il codice per testare le funzioni? Cosa intende con quello?

La specifica diceva che i numeri nell'array dovrebbero essere compresi tra 1 e 10. Potresti scrivere un test che lo confermi.

Ha anche detto che i numeri dovrebbero essere casuali. Mentre la casualità può essere più difficile da testare di quanto sembri, la semplice non casualità può essere facile da testare. Il più semplice è confermare che tutti i numeri non hanno lo stesso valore. Test di casualità più complessi utilizzano analisi statistiche.

Un altro test che puoi scrivere è confermare che la funzione produce() restituisce valori diversi ogni volta che viene chiamata. Si tratta di una semplice forma di analisi statistica, ovvero garantire che le invocazioni consecutive abbiano risultati indipendenti.

Dovresti anche considerare di inizializzare l'array con valori non validi noti, come -1 o 0, prima di chiamare produce(). Altrimenti un array locale non inizializzato potrebbe già contenere valori imprevedibili, che un test potrebbe interpretare come casuali anche se produce() non fa nulla.

Come specificazione, la dichiarazione di lavoro è alquanto vaga. Per prima cosa, non specifica quali test deve superare. Credimi, se lasci alla maggior parte dei programmatori la scelta dei test di qualificazione, è un grosso errore. Il codice potrebbe funzionare solo in un caso, che era il caso utilizzato dal programmatore per sviluppare il codice. Se ti sembra una follia, ti posso assicurare che è successo.

iBookG4user

Manifesto originale
27 giugno 2006
Seattle, WA
  • 20 settembre 2009
Era abbastanza semplice, grazie!
Questo ha funzionato a meraviglia:
Codice: |_+_| S

Levigatrice

a
24 aprile 2008
  • 21 settembre 2009
iBookG4user ha detto: È stato abbastanza semplice, grazie!
Questo ha funzionato a meraviglia:

Prova a inserire un numero 'non valido' nel tuo array (diciamo 11) e verifica se questa funzione lo rileva.

iBookG4user

Manifesto originale
27 giugno 2006
Seattle, WA
  • 21 settembre 2009
Sander ha detto: prova a inserire un numero 'non valido' nel tuo array (diciamo 11) e verifica se questa funzione lo rileva.

Ho impostato temporaneamente l'array per consentire numeri maggiori di 10 e lo ha rilevato, grazie S

Levigatrice

a
24 aprile 2008
  • 22 settembre 2009
iBookG4user ha detto: ho impostato temporaneamente l'array per consentire numeri maggiori di 10 e lo ha rilevato, grazie

Anche se non è il primo elemento dell'array..?

Il motivo per cui lo sto chiedendo è perché la tua funzione print() (almeno l'ultima versione mostrata in questo thread) restituisce solo il primo elemento dell'array (convertito in doppio).