-
Posts
172 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que Edmorte postou
-
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;}
-
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.
-
Linq, lambda e delegates.
-
programa em C# que lê 10 valores e conta quanto são negativos
Edmorte respondeu ao tópico de felipeaugusto209 em C/C#/C++
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); -
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
-
NUNCA, MAS NUNCA, FAÇA ISSO. JAMAIS! PÉSSIMO, HORROR, AAAAAARGH. MORRI.
-
Você declarou as strings como char. Declare uma em cada linha. Boa sorte.
-
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.
-
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.
-
Cara, 100000 era um exemplo...
-
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.
-
int main(){}
-
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.
-
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.
-
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.
-
Pode deixar, to fazendo aqui... Aguarde.
-
@arsenium Foi mal cara, falei o nome da função errada. Abaixo um pequeno código para te mostrar como funciona. Pouco complexo, precisa entender de memória. É apenas um exemplo, use strcpy pra copiar a memória para onde você precisar, não use dessa forma. #include <stdio.h>#include <string.h>using namespace std;// Texto que você está dando parsechar phrase[] = "Aqui mora <boom>xpto</boom> master";void print_tag_content(char* open_tag, char* close_tag){ /* Aqui nós encontramos o começo da tag e deslocamos para o começo do conteúdo. ponteiro value é usado para manter a posição inicial do conteúdo, pois vamos mover open_tag */ char* value = open_tag = strstr (phrase, open_tag) + strlen(open_tag); /* Precisamos saber qual a posição de close_tag na memória! Senão o loop abaixo falha. */ close_tag = strstr (phrase, close_tag); /* Move-se open_tag até que ele chegue no close_tag, ficamos com o tamanho do conteúdo dentro de i */ // Otimização int i = close_tag - open_tag; //int i = 0; //while(open_tag++ != close_tag) ++i; //Sabendo o tamanho do conteúdo, finalizamos com fim de string e matamos o resto da string. value[i] = '\0'; printf(value);}int main() { // Tag de abertura e fim do elemento a ser procurado char open_tag[] = "<boom>"; char close_tag[] = "</boom>"; print_tag_content(open_tag, close_tag); // Perceba que alteramos o conteúdo original printf("\n"); printf(phrase); return 0;}
-
Tenho que terminar com '!' porque se o que eu estiver procurando não estiver procurando Olha essa frase, como uma pessoa pode entender algo que afirma e depois nega?
-
Cara acho melhor você separar os comandos do seu parser em uma LISTA e deixar a PILHA apenas para entrada. Esse estado também me parece gambiarra, tem lógica melhor. Se você separar as coisas a lógica aparece. A questão do !, que é o seu pedido de ajuda. Não tem muito o que fazer champ, você vai ter que escrever uma função que analisa cada entrada procurando por ele, isso claro sem perder o comando. O que você fez está incompleto, por isso não está funcionando. STRCMP não faz milagre, alias C é o mais difícil de se usar, vai fazer muito trabalho manual ainda. E mais, não tem como te ajudar, porque você documentou muito mal o que quer fazer, tenha mais atenção ao descrever seu programa, eu mal consegui entender o que você escreveu.
-
Cara, o simbolo '\0' é um char, só se aplica a cadeia de chars. Guardar o CPF como int seria algo meio sinistro não? Acho que nem caberia em 32bits. Seria o maior desperdício de memória.
-
Algoritmos e programação II - Criptografia
Edmorte respondeu ao tópico de Felipeduarte13 em C/C#/C++
Estava quase certo, então eu dei uma corrigida. Faça um teste de mesa que você vai entender. Você esqueceu de colocar o fim de string na nova string que você estava montando e esqueceu de tratar o espaço em branco. No mais foi um erro no loop, o primeiro loop anda 1 posição da palavra original, e para cada iteração dessa ele testa todas as outras do array alfabeto. O break otimiza o laço, terminando o laço interno, para prosseguir mais rápido. Afinal já encontramos o item, não há porque continuar procurando. #include <stdio.h>#include <stdlib.h>#include <string.h>int main() { char vetor_alfabeto[27]="abcdefghijklmnopqrstuvwxyz"; char vetor_matriz [27]="jdjnvjnjfgkfmldmknkbnkmvkk"; char vetor_analise[31]="meu nome completo"; char vetor_resultado[31]; int i, k; int tamanho = strlen(vetor_analise); for (k = 0; k < tamanho; k++) { for (i = 0; i < 27; i++) { if(vetor_analise[k] == vetor_alfabeto[i]) { vetor_resultado[k] = vetor_matriz[i]; break; } else if (vetor_analise[k] == ' ') { vetor_resultado[k] = ' '; break; } } } vetor_resultado[tamanho] = '\0'; printf("Resultado: %s\n", vetor_resultado); } -
Não man. Você coloca seu programa em um loop que só termina quando o usuário diz opção "sair". Você sabe o que fazer, mas não sabe como chegar lá. Existem 2 pontos no seu programa. 1° Operar matematicamente sobre o array. 2° Oferecer um menu para o usuário escolher o que quer fazer, e continuar assim até que ele queira sair. Você só alcançou o número 1. Existem vários posts por aí com esse menu, só procurar que você vai entender.
-
Cara, não sei como falar de outra forma, então vou ter que ser curto e grosso. Você não entendeu o problema. Está errado a sua compreensão sobre como os dados são inseridos. Se o usuário quiser colocar os 50 números, ele vai escolher a opção inserir 50x. É assim que aplicações console funcionam, por isso que ninguém usa isso profissionalmente. Você pode otimizar esse processo, mas aí vai inserir uma complexidade desnecessária em algo puramente didático.
-
Não você está fazendo uma leitura incorreta do problema. A operação de inserir, insere APENAS 1 POR VEZ no final da FILA (já até identificaram o tipo de estrutura para você). Ou seja, Primeiro a entrar, primeiro a sair. Sempre insere os novos no final.
-
O exercício é bem simples, ler, armazenar e calcular. Esse negócio de ler vazio é coisa da sua mente. A sua dúvida pode vir a ser, como sei qual a quantidade de itens do array se ele tem tamanho fixo 50 na memória, simples controle a quantidade de itens dele com um contador. O usuário digita um item por vez. Esse programa é uma simples implementação de fila, nem precisa alocar memória, pois o exercício já diz que o tamanho máximo é 50. O usuário não é obrigado a preencher tudo.
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