iBookG4user
Pôster original- 27 de junho de 2006
- Seattle, WA
- 20 de setembro de 2009
'Escreva uma função que irá preencher um array com 25 números aleatórios entre 1 e 10. Em seguida, escreva uma função que irá imprimir o array. Escreva algum código em main para testar suas funções. Às vezes, esse código de teste é chamado de * driver
Não use variáveis globais aqui. Passe a matriz para a função por meio da lista de parâmetros '
Meu código atual não resulta em nenhum erro no depurador, mas não produz a matriz. E não sei o que ele quis dizer com escrever o driver, o que devo testar? Todos vocês se mostraram extremamente úteis no passado e tenho certeza de que vão me ajudar a apontar a direção certa desta vez
Código:
#include #include using namespace std; double print(double array); double produce(); int main() { double produce(); double print(); } double produce() { srand(time(0)); double array[25]; for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } return *array; } double print (int array) { cout << array << endl; }
lee1210
- 10 de janeiro de 2005
- Dallas, TX
- 20 de setembro de 2009
Além disso, e tenho certeza que é um erro honesto, tenho certeza que seu professor quis dizer pseudo- aleatória.
Além disso, em main, você está declarando new double () s, não invocando produzir e imprimir. Retire o duplo lá e passe um argumento conforme discutido acima e altere o tipo de retorno de ambos para nulo.
-Leitura
gnasher729
Suspenso
- 25 de novembro de 2005
- 20 de setembro de 2009
E como você escreveria uma chamada para a função 'produzir'?
E dentro de sua função 'principal', qual das duas você escreveu, um protótipo de função ou uma chamada de função?
iBookG4user
Pôster original- 27 de junho de 2006
- Seattle, WA
- 20 de setembro de 2009
lee1210 disse: Algumas coisas: Seu array deve ser do tipo int [], não double []. Você precisa aceitar uma matriz int para produzir e imprimir. Você precisa declarar um int [] no main, passá-lo para produzir, preenchê-lo lá e depois passá-lo para impressão. o<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.
Além disso, e tenho certeza que é um erro honesto, tenho certeza que seu professor quis dizer pseudo- aleatória.
Além disso, em main, você está declarando new double () s, não invocando produzir e imprimir. Retire o duplo lá e passe um argumento conforme discutido acima e altere o tipo de retorno de ambos para nulo.
-Leitura
Ok, fiz as alterações que você sugeriu e o código parece mais lógico. Embora agora eu esteja recebendo três erros nos loops for.
Código:
#include #include using namespace std; double print(int array); double produce(int array); int main() { int array[25]; produce(*array); } double produce(int array) { srand(time(0)); for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } print(array); } double print (int array) { for(int i=0; i<25; i++) { cout << array[i] << endl; } return array; }
Anexos
lee1210
- 10 de janeiro de 2005
- Dallas, TX
- 20 de setembro de 2009
Acho que a intenção é que você retorne a chamada de impressão no principal, o que deve funcionar.
Além disso, quando você passa array para produzir, apenas use array e não * array.
-Leitura
iBookG4user
Pôster original- 27 de junho de 2006
- Seattle, WA
- 20 de setembro de 2009
lee1210 disse: Altere o tipo de argumento de produto para int [] ou int *. No momento é apenas int, então você não pode usar [], etc. O mesmo vale para impressão. Além disso, você não precisa devolver nada do produto ou da impressão. Altere o tipo de retorno para nulo.
Acho que a intenção é que você retorne a chamada de impressão no principal, o que deve funcionar.
Além disso, quando você passa array para produzir, apenas use array e não * array.
-Leitura
Funcionou
Agora, você sabe o que ele quis dizer com escrever o código para testar as funções? O que ele quer dizer com isso? E muito obrigado por sua ajuda até agora!
Código:
#include #include using namespace std; double print(int *array); double produce(int *array); int main() { int array[25]; produce(array); print(array); } double produce(int *array) { srand(time(0)); for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } return *array; } double print (int *array) { for(int i=0; i<25; i++) { cout << array[i] << endl; } return *array; }
chown 33
Moderador
Membro da equipe- 9 de agosto de 2009
- o plano abismal
- 20 de setembro de 2009
iBookG4user disse: Agora, você sabe o que ele quis dizer com escrever o código para testar as funções? O que ele quer dizer com isso?
A especificação dizia que os números na matriz deveriam estar entre 1 e 10. Você poderia escrever um teste que confirme isso.
Ele também disse que os números deveriam ser aleatórios. Embora a aleatoriedade possa ser mais difícil de testar do que parece, a não aleatoriedade simples pode ser fácil de testar. O mais simples é confirmar que todos os números não têm o mesmo valor. Testes mais complexos de aleatoriedade usam análises estatísticas.
Outro teste que você pode escrever é confirmar se a função produz () retorna valores diferentes cada vez que é chamada. Esta é uma forma simples de análise estatística, ou seja, garantir que invocações consecutivas tenham resultados independentes.
Você também deve considerar a inicialização da matriz com valores inválidos conhecidos, como -1 ou 0, antes de chamar o produto (). Caso contrário, uma matriz local não inicializada pode já conter valores imprevisíveis, que um teste poderia interpretar como aleatórios mesmo se o produto () não fizer nada.
Como especificação, a descrição do trabalho é um tanto vaga. Por um lado, ele não especifica em quais testes ele deve passar. Acredite em mim, se você deixar para a maioria dos programadores a escolha dos testes de qualificação, é um grande erro. O código pode funcionar em apenas um caso, que foi o caso que o programador usou para desenvolver o código. Se isso parece loucura, posso garantir que aconteceu.
iBookG4user
Pôster original- 27 de junho de 2006
- Seattle, WA
- 20 de setembro de 2009
Isso funcionou muito bem:
Código:
if (print(array) 10) // driver { cout << 'Numbers are not between 1 and 10!' << endl; }
S Sander
para
- 24 de abril de 2008
- 21 de setembro de 2009
iBookG4user disse: Isso foi bastante simples, obrigado!
Isso funcionou muito bem:
Tente colocar um número 'inválido' em seu array (digamos, 11) e veja se esta função detecta isso.
iBookG4user
Pôster original- 27 de junho de 2006
- Seattle, WA
- 21 de setembro de 2009
Sander disse: Tente colocar um número 'inválido' em seu array (digamos, 11) e veja se esta função detecta isso.
Eu temporariamente configurei o array para permitir números maiores que 10 e ele o detectou, obrigado S
Sander
para
- 24 de abril de 2008
- 22 de setembro de 2009
iBookG4user disse: Eu configurei temporariamente o array para permitir números maiores que 10 e ele o detectou, obrigado
Mesmo que não seja o primeiro elemento da matriz ..?
Estou perguntando porque sua função print () (pelo menos a última versão mostrada neste tópico) retorna apenas o primeiro elemento da matriz (convertido em um duplo).
Publicações Populares