question

c + + programacao ajuda com correcao de fonte?

Eu fiz um programa como abaixo, mas alguns resultados são não o que eu quero.
Eu preciso fiz um programa que conta a maior quantidade de dias que continuou Cotações crescentes e decrescentes.
Entrar o número de dias, e depois entro o preço das ações por dia no programa.
Por exemplo se eu entrar 9(days) 20 40 60 10 5 30 55 60 60 40 (os preços das ações), o resultado seria 4 (crescentes dias) e 3 (diminuindo os dias)

# incluem<iostream>
usando o namespace std;

int main)
{
int i, j;
int numofDays = 0;
int incrDays_Max = 1;
int decrDays_Max = 1;
bool aumentada = false;
bool diminuída = false;

CIN >> numofDays;

int estoque = novo int [numofDays];

para (i = 0; i<numofDays;i++)></numofDays;i++)>
{
CIN >> estoque [i];
}

para (i = 0; i<numofDays-1;i++)></numofDays-1;i++)>
{
para (j = i + 1; j<numofDays;j++)></numofDays;j++)>
{
se (estoque [i]<Stock[j])></Stock[j])>
{
if(decreased) {
quebrar;
}
aumento = true;


}
outra coisa if(Stock[i]>Stock[j])
{
If(increased)
{
quebrar;
}

diminuição = true;

}

//Stock[i]==Stock{j outra coisa]
quebrar;
}

j;


If(increased)
{
se (incrDays_Max<j-i+1)></j-i+1)>
incrDays_Max = j-i + 1;
}

If(Decreased)
{
se (decrDays_Max<j-i+1)></j-i+1)>
decrDays_Max = j-i + 1;
}




diminuição = false;
aumento = false;
}


cout< "increased="" days:="">< incrdays_max=""><endl;></endl;>
cout< "decreased="" days:="">< decrdays_max=""><endl;></endl;>

Delete [] estoque;

retorno 0;
}</iostream>

resposta Resposta

O erro de lógica principal aqui é que as comparações não estão olhando para elementos consecutivos da matriz. Você está comparando cada elemento da matriz com todos os elementos depois dela até que se tornem menos/maiores do que o que você está comparando com. Seus resultados (5 e 5) são perfeitamente corretos, que eles apenas estão respondendo a uma pergunta diferente:

decrDays_Max torna-se 5, depois que você verificar estoque [2] = 60: ele é seguido por 5 valores menor ou igual a 60, que são ações [3] = 10, estoque [4] = 5, estoque [5] = 30, estoque [6] = 55 e finalmente no estoque [7] = 60, seus innerloop quebras pela terceira condição (stock[j]==stock[i])

incrDays_Max torna-se 5, depois que você verificar ações [4] (o que é 5 em seu exemplo), que se você comparar com estoque [5] = 30 (aumento), com estoque [6] = 55 (aumento), com estoque [7] = 60 (aumento), com estoque [8] = 60 ("aumentar" porque você está comparando com 5!): nesse ponto você sair do loop, porque você alcançou o fim de tudo e relatam um aumento de cinco dias.



Outro problema que vejo é que se trata de um programa C. É cheia de conceitos C (como padrão-construindo objetos fora de seu escopo) e não está usando C++ com exceção de saída, e mesmo pelos padrões de C, isto é código pobre porque seu loop mais interno tem três maneiras de quebrar e duas maneiras de continuar. Um programador de C teria envolvido a lógica em funções separadas de testáveis bem documentadas. Um programador de C++ seria aplicáveis as transformações de dados o vetor, ou mesmo o fluxo de entrada própria, (mas não matriz!) dos preços que teriam dado o resultado

Ah, e você entra 10 inteiros no seu exemplo, depois de entrar o "número de dias" como 9, então você está ignorando o último preço.


Aqui está uma representação rápida e suja em C++. Há algumas maneiras para apertá-lo ainda, pelo menos, eliminando loops e duplicação de código

# incluem<iostream>
# incluem<vector>
# incluem<map>
# incluem<iterator>
# incluem<algorithm>
modelo<typename iter,="" typename="" binop="">
size_t adjacent_count (Iter implorar, final do Iter, f Binop)
{/ / realmente deve ser um count_if sobre transformação, chegou a pensar nisso
ITER eu = mendigar;
enquanto (i! = fim && i + 1! = fim && f ( i, (i+1))) + + i;
eu retorno - implorar + 1;
}
modelo<typename iter="">
void output_run (const Iter & eu, const std:: String linha)
{
std:: cout < "longest="" run="" "=""> </> < line=""> </> < "="" was="" "=""> </> < i-=""> </>primeiro< "="" days="" long:="" ";="">
std::Copy (eu-> segundo, eu-> segundo + eu em primeiro lugar,-> std::ostream_iterator<int>(std:: cout, ""));
std:: cout< '\n';="">
}
int main)
{
std:: cout< "enter="" prices="" as="" integers,="" end="" input="" with="" ctrl-d(unix)="" or="" ctrl-z(windows):="" ";="">
std::istream_iterator<int> eof;
std:: vector<int> Stock (std::istream_iterator<int>(stdio), eof);
/ / calcular os comprimentos das pistas consistentes e mapeá-los contra preços
std:: map<size_t,></size_t,><int>:: iterador > upruns;
para (std:: vector<int>:: iterador eu = Stock.begin(); i!=Stock.end(); + + i)
upruns [adjacent_count (std::less i, Stock.end(),<int>())] = i;
std:: map<size_t,></size_t,><int>:: iterador > downruns;
para (std:: vector<int>:: iterador eu = Stock.begin(); i!=Stock.end(); + + i)
downruns [adjacent_count (std::greater i, Stock.end(),<int>())] = i;
/ / saída de resultados
If(!upruns.Empty()) output_run(upruns.rbegin(), "até");
If(!downruns.Empty()) output_run(downruns.rbegin(), "para baixo");
}

execução de teste:
$ g + +-Wall - Wextra-pedante - ansi -o teste test.cc
$. / teste
Digite os preços como inteiros (entrada final com Ctrl-D no Unix ou Ctrl-Z no Windows): 20 40 60 10 5 30 55 60 60 40
Maior sequência acima foi 4 dias de duração: 5 30 55 60
Corrida mais longa para baixo foi 3 dias de duração: 60 10 5

(note que eu usei o seu conceito do que constitui aumento "4 dias". Na vida real, foi um dia 3 aumentar: o estoque estava acontecendo o dia tornou-se 30, o dia tornou-se 55 e o dia passa a 60)</int></int></int></int></int></int></int></int></int></int></typename></typename></algorithm></iterator></map></vector></iostream>

resposta Não é a resposta que você estava procurando?
Adicionar um comentário ou resposta a esta pergunta

Pesquisar uma resposta melhor..
Ou, fazer uma pergunta..
Comentários
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta


Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2021
All rights reserved