Ir ao conteúdo
  • Cadastre-se

RPGStreamer

Membro Pleno
  • Posts

    54
  • Cadastrado em

  • Última visita

  1. Acho que a solução tá em dividir o vetor em pedaços iguais a k (passando k como n às funcões de menor soma e maior soma), e ir atualizando a menor e maior soma conforme caminha pelo vetor (indo de 0 a k, depois de 1 a k + 1, depois de 2 a k + 2, etc, até k + x == n. k não pode ser maior que o tamanho do vetor, e não pode ser menor que 2.
  2. Também não entendi. É pra ordenar os vetores? O terceiro vetor vai ter o mesmo tamanho do primeiro e segundo, ou o dobro do tamanho? Não tá claro pra mim o exercício.
  3. Eu acho que pra ficar mais seguro, seria algo assim int n = 0; for(size_t i = 0; cadeia[i] != '\0'; ++i) { if(cadeia[i] == '+' || cadeia[i] == '-' || cadeia[i] == '*' || cadeia[i] == '/') { ++n; } } Isso se voce tiver certeza que a funcao nunca vai ser mal usada (ou seja, sempre vão mandar um ponteiro pra char com o caractere nulo '\0' no final, chamado de uma "c-string")
  4. Acho que você tem que incluir "peca.h" em tabuleiro.cpp, senao essa classe não existe pra aquele arquivo.
  5. Ele está acessando memória além do array. Seu while tem que parar antes de acabar a string. @Pedroernesto64 Aliás, gets está deprecated. Está fora do standard e não precisa ser implementada mais. use fgets (com stdin como o handle do arquivo, pra ler do console).
  6. esse constructo: friend class Peca::posAtual(v2); Não tem sentido. friend aparece na declaração das classes, nunca em outro lugar. Dentro do corpo de uma função então...
  7. Se trabalhar com C é realmente o alvo, e os programas são apenas treinamento pro que você vai aprender no futuro, então tem certas boas práticas as quais você deve se ater, pra evitar problemas do seu código compilar de um jeito pra um sistema e de outro em outro sistema, inserindo bugs bem difíceis de achar. Por exemplo garantir que os tipos tenham sempre um certo tamanho é uma boa. Isso é feito usando a stdint.h. Outra coisa é os caracteres internacionais. Esse assunto você resolve com a uchar.h. Isso aí tudo vai ser explicado no futuro pelo seu professor, com certeza.
  8. @Pepse Qualquer dica pra melhorar a refrigeracao eh muito bem vinda. O lugar fica quente mesmo no verao. Eh no sotao.
  9. @Pepse Puxa, agora ja comprei! Na Kabum: Gabinete Gamer Corsair Carbide Series Spec Delta, Mid-Tower, RGB, Lateral em Vidro Temperado, Preto, CC-9011166-WW. Eh bom?
  10. É C ou C++, gente? Acho que deveriam ser tags diferentes. C é uma baita linguagem, muito importante pra implementação de microsistemas e plataformas tipo Lua, Python, etc, logo, estudar C não é inválido, apenas tem um mercado restrito. Já pra realmente fazer algo pro usuário final, C não é conveniente e C++ é bem superior.
  11. #include<iostream> #include<array> #include<string> #include<vector> #include<cctype> #include<algorithm> //IMPORTANTE: ja que voce nunca usa new ou malloc, não precisa de delete ou free. Esses objetos sabem se auto-destruir quando //saem de escopo //ao invés de importar o namespace inteiro, melhor importar apenas os tipos e objetos que mais vamos usar using std::cout; using std::cin; using std::endl; using std::string; using std::vector; const size_t code_size = 11u; //por uma peculiaridade da funcao std::cin.get, que introduz o caractere nulo \0 ao final do array //um apelido pro tipo std::array<char, 11> que usamos como identificador do produto using id_prod = std::array<char, code_size>; //aqui sua estrutura produto. Isso poderia ser feito com classes, e as funcoes transformadas em metodos. //Mas vamos aderir ao seu design struct produto { string nome{}; string tipo{}; double valor{};//dinheiro e melhor representado por um inteiro em centavos. Quando precisar exibir, apenas divida por 100. string local_estoque{}; id_prod identificador_produto{}; long quantidade_estoque{}; }; /// <summary> /// Recebe uma referencia a um double como parametro. Espera o usuario digitar uma linha no console. /// Se o que o usuario digitou puder ser convertido para um double, a funcao armazena o valor convertido na referencia e retorna /// true. Se o que o usuario digitou não puder ser convertido em um double, a funcao retorna false. /// </summary> /// <param name="out">O parametro de saida, onde sera armazenado o valor que o usuario digitar</param> /// <returns>true, se o usuario digitar um valor valido, false caso contrario</returns> bool readDouble (double& out) { static string rawInput; std::getline (cin, rawInput); bool success{}; try { out = std::stod (rawInput, nullptr); success = true; } catch (std::exception e) { success = false; } return success; } /// <summary> /// Recebe uma referencia a um id_prod como parametro. Espera o usuario digitar uma linha no console. /// Se o que o usuario digitou puder ser convertido para um id_prod (ou seja, apenas letras e numeros), /// a funcao armazena o id_prod na referencia e retorna true. /// Se o que o usuario digitou caracteres invalidos, a funcao retorna false /// </summary> /// <param name="out">O parametro de saida, onde sera armazenado o valor que o usuario digitar</param> /// <returns>true, se o usuario digitar um valor valido, false caso contrario</returns> bool readCode (id_prod& out) { id_prod result{}; cin.get (result.data (), result.size ()); for (char c : result) { //aqui eu assumo que letras maiusculas, minusculas e digitos sao validos no codigo, outros caracteres não. if (!std::isalnum (c)) { return false; } } return true; } void criar_produto (produto& out) { cout << "NOME DO PRODUTO:" << endl; cin >> out.nome; cout << "TIPO DE PRODUTO:" << endl; cin >> out.tipo; //permanece em loop enquanto o usuario falhar em digitar um valor valido while (!readDouble (out.valor)) { cout << "O valor digitado não pode ser convertido a um numero!" << endl; } cout << "LOCAL DISPONIVEL NO ESTOQUE:" << endl; cin >> out.local_estoque; cout << "CODIGO DO PRODUTO:" << endl; //permanece em loop enquanto o usuario falhar em digitar um valor valido while (!readCode (out.identificador_produto)) { cout << "O codigo de produto deve conter apenas letras e numeros" << endl; } } //Mesmo sem necessidade de alterar o argumento, essa funcao aceita uma referencia (declarada como const, ja que não sera modificada //Isso evita a copia da estrutura inteira, passando apenas uma referencia da estrutura void mostrar_produto (const produto& prod) { cout << "Nome: " << prod.nome << endl << "Tipo: " << prod.tipo << endl << "Valor: " << prod.valor << endl << "Local: " << prod.local_estoque << "ID: " << prod.identificador_produto.data () << "Em estoque: " << prod.quantidade_estoque << endl; } size_t cadastrar_produtos (vector<produto>& catalogo) { char reply{}; size_t counter{}; do { produto novo_produto; cout << "-> Adicao de Produtos ao Estoque\n" << endl; criar_produto (novo_produto); cout << "Produto criado:\n" << endl; mostrar_produto (novo_produto); cout << "Deseja adicionar o produto ao cadastro (s para cadastrar)?"; cin >> reply; if (reply == 's') { catalogo.push_back (novo_produto); counter++; } cout << "Deseja cadastrar outro produto? (s para continuar, outro caractere para sair." << endl; cin >> reply; } while (std::tolower (reply) == 's'); return counter; } /// <summary> /// Precisamos dessa funcao pra usar sort. Essa funcao determina quando um produto e "menor" que outro. /// Em ordem alfabetica por nome, isso e decidido pelo campo nome. Essa funcao leva em consideracao maiusculas e minusculas /// (todas as maiusculas sao menores que todas as minusculas). /// a funcao std::tolower que eu usei acima troca um caractere pra minuscula (se ja for minuscula, não faz nada). /// Uma boa primeira mexida seria se livrar desse defeitinho no codigo. /// </summary> /// <param name="p1"></param> /// <param name="p2"></param> /// <returns></returns> bool order_alfa (const produto& p1, const produto& p2) { return p1.nome < p2.nome; } void ordenar_catalogo (vector<produto>& catalogo) { //o nome dessa variavel e predic. A declaracao dela e bem bizarra! Mas não precisamos dela. //bool (*predic)(const produto&, const produto&)(order_alfa); //a funcao std::sort, definida no header algorithm ordena coisas que tem um iterador de acesso aleatorio. //Os containers da STL tem iteradores, mas nem todos tem acesso aleatorio. vector, o que estamos usando, tem. //begin e end sao funcoes que retornam "iteradores" do inicio e fim de um container. //std::sort tem uma versão pra tipos que tem o operador < definido, por ex., strings, ints, etc. Nessa versão, não precisa //passar uma outra funcao pra ela saber como ordenar std::sort (catalogo.begin (), catalogo.end (), order_alfa);//veja que basta o nome da funcao pra passa-la a outra } //Como acima, recebe uma referencia. Se na funcao anterior evitamos copiar uma estrutura produto, aqui evitamos copiar um vetor //inteiro delas. size_t listar_catalogo (const vector<produto>& catalogo) { size_t counter{}; for (const produto& prod : catalogo) { cout << "\nProduto n" << counter++ << " no catalogo" << endl;//uma ilustracao do operador pos-incremento mostrar_produto (prod); } return catalogo.size (); return counter;//deve ser igual a catalogo.size() } //void do_tests (); int main () { vector<produto> catalogo; //do_tests (); //creio que usando as poucas funcoes que eu usei, voce possa construir o resto das funcoes que faltam e //fazer seu programa inteiro funcionar. Qualquer duvida, pode perguntar. Talvez tenha um erro logico em algum lugar. //não tive tempo de testar. //Um problema que prevejo e o enter ficando "empacado" no stream de entrada (o std::cin) e isso dando problema nos getlines. //Se isso acontecer, coloque cin.ignore (); antes da linha que ele estiver pulando, pra "dar descarga" no enter return 0; } Pra não dizer que so reclamo , aqui vai um exemplo dum codigo um pouco mais moderno. Ainda não se encaixa bem no seu exemplo especifico, e não resolve o problema todo, mas da pra ter uma ideia do que falta você estudar Uma pena que o tamanho do post (pelo menos aqui em casa) ficou estreito demais, e não da pra ver as linhas inteiras. Acho que no seu IDE deve ficar melhor, copie e cole la.
  12. Eu to tentando achar um com boa refrigeracao que caiba esse cooler, e que seja na Kabum.
  13. @Gabriel Rinaldi Perdao, placa-mãe! Eu disse placa-de-vídeo. Era placa-mãe. Isso e so uma abertura normal que tem nos gabinetes pras placas-mae exporem suas entradas, etc, certo?
  14. Esse monte de portas USB e etc mencionadas na placa de vídeo, o gabinete não tem nada a ver com isso, tem?
  15. @Gabriel Rinaldi Essa parte de cima que tem que ser compativel ne?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!