Ir ao conteúdo
  • Cadastre-se

Edmorte

Membro Pleno
  • Posts

    172
  • Cadastrado em

  • Última visita

  1. Senhores, feliz ano novo a todos. Deixarei um presente para aqueles que sempre perguntam como fazer algo e a qualquer momento receber uma entrada do usuário informando que não quer mais ou qualquer outra coisa. O código é simples, mas requer um conhecimento de C++, aproveitando o C++11 e que venham o 14 e o 17 para fazermos coisas melhores. Aqui simulei um trabalho (sleep 10s) se o usuário digitar 0 e enter, o programa termina antes, senão ele termina após os 10s. Esse problema é normalmente perguntado por novatos em C que querem fazer coisas mais interativas, mas não conseguem porque entrada de dados é uma operação com bloqueio. Aproveitem para ver como o C++ é muito melhor de programar do que o C puro. O mesmo pode ser feito em C com threads, mas eu não irei fazer. Também é possível fazer o mesmo em C#, mas nem vale a pena, qualquer janela de Windows Forms já é superior. No mais evitem threads puras, foquem nas tasks e assincronias do C++/C#. #include <future>#include <iostream>#include <chrono>#include <thread>namespace ExemploAssincrono{ using namespace std; void LerEntrada() { int n; cin >> n; if (!n) { cout << "Terminando programa antecipadamente\n"; exit(EXIT_SUCCESS); } }}int main(){ std::async(std::launch::async, []{ ExemploAssincrono::LerEntrada(); }); std::cout << "Simulando trabalho por 10s\n"; std::this_thread::sleep_for(std::chrono::milliseconds(10000)); std::cout << "Terminado normalmente\n"; return 0;}
  2. Porque elas são referências. Esqueci que em C não tem referência, como eu disse quis simular um tail-call, o compilador do C não deve saber otimizar, mas quis passar o conceito. Acredito que substituindo por ponteiros e fazendo ajustes não deve trazer problemas. Corrigi para ficar 100% C: http://coliru.stacked-crooked.com/a/26733ec99659c056 Se estivessemos programando uma linguagem funcional resolveriamos usando TUPLA, mas no C melhor usar o argumento como retorno, por isso usei PONTEIRO/REFERENCIA.
  3. Fácil demais man, vai estudar né. Para dar emoção, usando Linq: int[] xpto = new int[] { -9, 8, -7, 6, -5, 4, -3, 2 };int qtde = xpto.Count(n => n < 0);
  4. Faz tempo que eu não entro no site, mas como recebi um email vim verificar, estava cansado de ninguém avaliar as respostas, mas curiosamente o usuário tinha voltado para agradecer, recebi um email e voltei. Também não resolvo programa para os outros, mas quando a complexidade é alta eu coloco um código para servir de plataforma para os iniciantes. Segue abaixo: #include <stdio.h>void minmaxrec(int* array, int length, int& min, int& max){ if(!length) return; if(array[length - 1] > max) max = array[length - 1]; if(array[length - 1] < min) min = array[length - 1]; minmaxrec(array, length - 1, min, max);}int main(int argc, char **argv) { int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int min = 100, max = 0; minmaxrec(array, 10, min, max); printf("min: %d, max: %d", min, max); return 0;} Eu não sei se eu alcancei a técnica TAIL recursion, mas tentei exemplificar ela. Rodando em: http://coliru.stacked-crooked.com/a/e092efe4501ad012
  5. Edmorte

    como fazer

    NUNCA, MAS NUNCA, FAÇA ISSO. JAMAIS! PÉSSIMO, HORROR, AAAAAARGH. MORRI.
  6. Você declarou as strings como char. Declare uma em cada linha. Boa sorte.
  7. a chamada de loop está sem ; você deixou um { sobrando no código. Um deles depois do void loop sem ; e o outro antes do digitalWrite (led, HIGH); //Ligar Tem um if no final sem condição. Bem sinistro esse código.
  8. fread(&B, sizeof(Banda), 1, banda);while (!feof(banda)){ if (strcmp(B.nome, nome)==0){ cod_banda = B.cod_banda; } fread(&B, sizeof(Banda), 1, banda);}// Alteradorewind(album);fread(&A, sizeof(Album), 1, album);while (!feof(album)){ if (A.cod_banda2==cod_banda){ cod_cd=A.cod_cd; // Para cada album da banda rewind(musica); fread(&M, sizeof(Musica), 1, musica); while(!feof(musica)){ if (M.cod_cd2==cod_cd){ printf ("\n\tCodigo da Musica: %d\n", M.cod_musica); printf ("\tCodigo do CD: %d\n", M.cod_cd2); printf ("\tMusica: %s", M.musica); printf ("\tDuracao: %d\n", M.duracao); printf ("\tClassicacao: %d\n", M.estrelas); } fread(&M, sizeof(Musica), 1, musica); } } fread(&A, sizeof(Album), 1, album);} Desculpa a formatação ruim, conflito de editores. Acho que esse ajuste deve funcionar, fiz de cabeça aqui. Para cada album da banda, devemos ler suas músicas e imprimi-las. Coloquei o código dentro do IF, se o album é da banda faça, repita para o próximo album. Se não funcionar, upa os bin carregados que eu testo.
  9. Veja bem, você pode aplicar uma visão simplista: - Subtraia apenas os dias; - Converta isso pra segundos; - Retire do total a quantidade de segundos (conversão) do primeiro dia; - Calcule quantos segundos (de novo converta) o quanto de horas não foram usados do dia fim (24h - hora especificada). Não se esqueça, trabalhe apenas com segundos. Esse tipo de abordagem não leva em conta datas que cruzam o mês. Agora, você precisa retirar as horas já gastas do 1º dia e as horas não usadas do 2º dia. Exemplo: 1° Dia começou as 10h, você subtrai 10 * 60 * 60 do total. Porque essas horas não foram usadas pelo dia da festa. 2º Dia terminou as 22h, você subtrau (24 - 22) * 60 * 60. Pois o resto do dia não foi usado pela festa. Depois do valor em segundos, recupere os valores usando resto (%) e divisão inteira (/). Exemplo de como desfazer: 100.000 segundos são: - 100000 / 24 * 60 * 60 = 1 dia - O resto (13600) conseguido com %, dividida por 60 * 60 = 3 horas. - O resto (40) / 60 = 0 minutos. - O resto do acima = 40 segundos. Acho que é o modelo mais fácil para iniciantes. Atente para o fato (Dia Final - Dia inicial) + 1 = quantidade de dias.
  10. Nesse caso aí, tem que estudar matemática... Quando você tiver o código posta aí que nois ajuda, mas sinceramente se você entender a matemática da coisa você resolve.
  11. 1° Dica, esquece esse papo de festa, é pura distração do problema real. 2° Tem que manjar de data, quem manja de data sabe que o computador tem uma representação numérica para data, se você quiser pode fazer manualmente, vai ficar ruim. Ou, leia esse link. http://www.cplusplus.com/reference/ctime/time/ E faça ez mode.
  12. Cara, //processamento Isso não é comentário, é perda de tempo. // Processa do indice 0 ao 4, insere caracteres aleatórios. Isso é um comentário. Agora, for (coluna = 'a'; coluna <= 'z'; coluna++) Não faz nenhum sentido, você está confundindo o que você QUER fazer, com o que você PODE fazer. Coluna só só pode ir de 0 a 4, foi o espaço que você reservou, se você acessar o espaço 5+, no caso do 'A' você está acessando o 49 (não lembro), é uma operação ilegal.

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...