-
Posts
6.526 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que arfneto postou
-
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
resposta é char[20] letra é char... resposta é... char[20] Quando corrigir o erro e colocar o índice em resposta vai aparecer o outro erro, já que resposta[] só vai até 19... Leu o programa que eu postei? Acompanhou a discussão nos dois tópicos? -
C Alguem pode me ajudar nesse exercício de arvore binaria
arfneto respondeu ao tópico de henrique Souza850 em C/C#/C++
Entendo. Os resultados que faltam vem meio que no atutomático, na verdade: uma BT completa --- cheia --- tem quantos nós? Você sabe quanto tem porque qualquer percurso vai te dizer isso. 2^N-1 nós certo? Onde N é o número de níveis. Mas em cada caso basta contar e ao final do percurso eles estão lá. Ou apenas marque na raiz. É a sua implementação afinal. Mesmo caso dos níveis. Durante o percurso pode usar uma pilha de níveis e a cada vez que "desce" empilha algo. Ao final do percurso o maior tamanho da pilha será o número de níveis. Todos os nós à esquerda da raiz são menores que a raiz e você sabe o valor dela, mesmo caso dos maiores se ela não for completa falta algum nó então não terá 2^N - 1 nós... -
C Alguem pode me ajudar nesse exercício de arvore binaria
arfneto respondeu ao tópico de henrique Souza850 em C/C#/C++
typedef struct no{ int conteudo; struct no * esq, *dir; }No; typedef struct{ No *raiz; }ArvBinaria; Essa estrutura para a árvore não ajuda muito. Compare com essa e ignore o campo saldo --- é para o caso de balancear, como árvores AVL typedef struct _carga _Carga; struct _folha { _Carga* dados; char saldo; struct _folha* L; struct _folha* R; }; typedef struct _folha _Folha; struct _arvore { _Folha* raiz; int niveis; char* nome; }; typedef struct _arvore _Arvore; Como te disse, em geral é mais fácil usar recursão do que pilhas para as árvores., mas estará bem com as pilhas. Se preocupe antes em como consumir os dados naquele formato da entrada, com os grupos de ( e ) e algum método de percurso para saber se a estrutura está ok. E depois percorrer a árvore de algum jeito só pra ver se está tudo certo. Não conheço essa nomenclatura. O que é uma árvore degenerada e que d1@b0 é uma árvore cheia? -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
Que significa? Você corrigiu o programa? Tentou o código que eu postei? Leu o programa todo? Leu o tópico #16? adicionado 2 minutos depois Imagino que entenda a ideia do jogo de forca. Não achou meio bobinho o tal jogador 1 digitar a palavra e ela aparecer na tela? Não acha que podiam aparecer as letras da palavra conforme o jogo anda, e as letras já tentadas? Tipo, digamos, o jogo de forca? São coisas assim -
Que tal esse curso de 30 horas que começa hoje, direto da fonte e de graça? https://learn.unity.com/course/create-with-code-live-summer-2020?elqTrackId=b27217f8bb6945639800aecbae5760a0&elqaid=2767&elqat=2&_ga=2.63379567.1576675400.1594658408-1404831981.1594658408 Viu o material em https://unity.com/learn ?
-
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
essa é a parte 2 do exercício. Talvez seja de propósito, certo? Todos os erros e o teste da mesma condição 2x e a interface pobre -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
Não é para alterar o programa nesse execício, apenas preencher as lacunas e corrigir os erros. De todo modo lembro que é recomendado há muitos anos não declarar mais de uma variável por linha. A razão é simples: é mais legível, facilita inicializar as coisas e diminui o tempo de manutenção de um programa que você não escreveu ontem ou que você não escreveu. É muito chato procurar em declarações de 40 linhas uma variáveis em particular, ver se tem um valor, achar o tipo dela... Pense nisso. Está até no guia oficial de C++ por exemplo. Mas pode experimentar isso na prática em seus programas... adicionado 0 minutos depois Está lendo o que eu escrevo? adicionado 1 minuto depois Não é um "bug terrivel" e não é o "programa dele". É apenas pra consertar... -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
De novo postou um anexo? Não entende que é muito chato pra quem quer te ajudar num programa de 40 linhas ter que sair do forum e fazer um download? Ao menos rodou o programa que te mostrei? Comparou ? conhece um programa chamado DiffMerge, grátis? Ele compara dois programas... Mas esse é tão pequeno que talvez você mesmo pudesse ter visto.... resposta é char[20]. O que acha que vai acontecer quando tentar escrever resposta = ' '; para i = 20? Não sabe usar um debugger? Mesmo o do Code::Blocks? Não pode colocar mensagens no programa e ver até onde ele está indo? -
C++ Obter informações do sistema utilizando o VB 2017!
arfneto respondeu ao tópico de Anderson LTI em C/C#/C++
Muita coisa retorna a partir de GetSystemMetrics() mas acho que para o quer pode usar WMI e ir chamando as classes corretas., EM VB ou C# é mais simples que EM C ou C++, Veja a documentação em torno de https://docs.microsoft.com/en-us/windows/win32/wmisdk/retrieving-a-class?redirectedfrom=MSDN e sobre WMI em geral -
Não parece um enunciado muito bom... Faltam detalhes ou sobra liberdade. De todo modo vou recomendar o de sempre: escreva seu programa em torno dos dados: pessoas, horarios e a passagem do tempo. Crie um formulario de horarios e um quadro de reservas e escreva o programa em torno disso
-
C Alguem pode me ajudar nesse exercício de arvore binaria
arfneto respondeu ao tópico de henrique Souza850 em C/C#/C++
Muito bem. A parte do botão CODE No editor tem esse botão e está explicado nos tópicos permanentes, que server para abri um formula;rio onde você cola seu código e tem um formatador e ele fica separado do texto. Quando você deixa misturado como fez, além de ficar mais difícil de separar o código se alguém quer ajudar e por exemplo testar em um compilador, muitas vezes na cópia vem caracteres de controle do próprio post e o código não compila e é preciso ficar procurando onde eles estão. A parte do anexo Você postou um anexo, um documento do tipo docx, supostamente para abrir em um programa como o Word, da Microsoft, e que nada tem a ver com o forum e nada tem a ver com C ou C# ou C++. Para te ajudar eu preciso clicar no botão, salvar isso em meu computador, abrir outro programa para processar texto --- Word é para isso --- só que eu não vou processar, só quero ler. E aí leio o texto, fecho o Word, abro o tópico no forum e tento recortar seu programa. Ajude os outros a ajudarem você... Meu palpite. EXEMPLO 1 Veja como fica seu programa ao importar para um compilador: espaço duplo. A toa. Só complica. Poste o programa completo e com os #include. Se eu tiver que completar o seu programa para rodar pode ser que ele fique muito diferente e não vai adiantar nada para você ou para mim. #include... int getIdx ( char * str, int si, int ei) { if (si> ei){ retorno - 1 ; Pilha * s = pilha_cria (); for ( int i = si; i <= ei; i ++) { if (str == ' ( ' ) pilha_push (s, str ); if else (str == ' ) ' ) { if ( pilha_top (s) == ' ( ' ) { pilha_pop (s); if ( pilha_vazia (s)) { pilha_libera (s); return i; } } } } pilha_libera (s); return - 1 ; } EXEMPLO 2 Não acha que seria mais fácil se tivesse simplesmente postado isso? Foi o que eu quiz dizer da primeira vez. Acho que não me expressei bem. Poderia dizer o que está "empacando" você? A teoria? A implementação? O que pretende fazer com essa pilha e esses parenteses? Em geral com árvores é mais simples usar recursão. -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
Eu já disse qual o maior problema do programa... Leu os dois tópicos? -
C Alguem pode me ajudar nesse exercício de arvore binaria
arfneto respondeu ao tópico de henrique Souza850 em C/C#/C++
Um anexo? E preciso ter um programa específico instalado no computador e então sair do forum, fazer um download, abrir outro programa, ler o enunciado, voltar aqui e tentar recortar o programa no meio do post? Porque não coloca aqui seja lá o que tenha no documento, e coloca seu programa dentro do <> code lá pra que seja mais fácil de ler e copiar sem trazer junto caracteres de controle ou partes do texto? -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
@Danilo Anderson preste atenção ao código. Cada linha tem uma razão de estar lá. Ou deveria ao menos. Que acha que é clear||cls ? -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
de novo um anexo? sério? leu o que eu postei a menos? testou? tem o programa inteiro lá E não é o seu código ou o meu código. Trata-se apenas de completar o código (ruim) do enunciado -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
Vocês notaram que eu postei o código com as soluções numeradas, além de repetir aqui as razões? adicionado 1 minuto depois Ou será falta de confiança? -
Escreva seu programa em torno dos dados. Sempre. Pense bem: Condição 1: Se algum Você tem 3 perguntas. E se o cara apresentar algum dos sintomas vai recomendar que procure um posto de saúde. Se o cara tem o primeiro sintoma qual o propósito de perguntar também se ele tem tosse para depois dar a mesma resposta? O cara já está com febre e preocupado. Pra que testar a paciência dele perguntando mais 2 coisas? Ou uma se ele tem tosse seca? Você parte dos sintomas mais graves e ao primeiro sim você dá a única resposta, poupando o paciente e a paciência do paciente que já está com febre e também o computador. Condição 2: Se todos Não há razão pra ficar contando: ao menos 1 é o que basta. E na verdade não precisa perguntar nada porque as hipóteses se referem à mesma pergunta... EXEMPLO char resp[30]; printf("Está com Febre? (S) SIM (N) NÃO: "); // 1 scanf("%s", resp); if ((resp[0] == 'S') || (resp[0] == 's')) { printf("Recomendamos procurar uma Unidade de Saude %d\n"); break; }; printf("Tens dificuldade de respirar? (S) SIM (N) NÃO: "); // 2 scanf("%s", resp); if ((resp[0] == 'S') || (resp[0] == 's')) { printf("Recomendamos procurar uma Unidade de Saude %d\n"); break; } printf("Está com tosse seca? (S) SIM (N) NÃO: "); // 3 scanf("%s", resp); if ((resp[0] == 'S') || (resp[0] == 's')) { printf("Recomendamos procurar uma Unidade de Saude!\n"); break; } printf("Resultado negativo\n"); break; Este trecho funciona e é muito mais simples de ler use %s em scanf() e leia uma string, assim se o cara bater o dedo em outra tecla e digitar sss não vai zoar seu programa mas teste apenas pela primeira letra, resp[0] declare a variável aí mesmo porque só está usando para isso mesmo quando você já tem uma resposta mostre a recomendação e termine se chegou até o fim o cara não tem sintomas. Não precisa contar nada qualquer break tem o mesmo efeito, já que estão dentro do mesmo case... É só um exemplo.
-
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
Eu postei um exemplo ontem... Completo, até com as lacunas numeradas. Depois de ter mostrado outras vezes o que estava errado no programa original e em algumas soluções propostas, que envolviam reescrever o código original, o que eu acho que vai dar m#$d@ na nota Trata-se do jogo de forca, @Gustavos27 você sai do while quando estoura o limite, que está lá no programa, erros = 6 ou quando você ganha, acertos = max que é o número de letras... Nada a ver com C porque só pode usar o que já está escrito lá... É a mesma coisa. Não era pra testar duas vezes se o programa original não fosse tão ruim... -
Será? Essa seria para o forum de lógica. A igualdade é reflexiva, simétrica e transitiva. Duas coisas iguais a uma terceira são iguais entre si. Ou vendo de outro modo uma coisa sempre é diferente de duas coisas diferentes... então sua condição não é o que você queria que fosse... Essa condição é sempre verdadeira. Escreva uma tabela. voce queria usar AND
-
C Segue o código base para a questão 1 com lacunas indicando trechos de código fal
arfneto respondeu ao tópico de Tiago Mendes Fernandes em C/C#/C++
Não, não fez. E eu listei num primeiro momento os erros do programa original e onde tinha que mudar E recentemente os erros nesse novo programa E disse onde mudar o programa original para ele rodar. São só 4 pontos se bem me lembro: as 3 lacunas e a parte da decisão... Não postou o seu código onde "fez tudo que eu expliquei"... Compare com esse que tem ate os // __X__ // #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <locale.h> // __1__ // ---------- Aqui falta a biblioteca necessária para idioma - 0.1 ponto #include <locale.h> // __1__ int main() { char resposta[20]; int erros; int acertos; char letra; int i, j; int max; //__2__ // --------- Aqui falta a definiçao de idioma - 0.1 ponto setlocale(LC_ALL, "C"); printf("************ Jogo da Forca ************\n"); printf("************** Jogador 1 **************\n\n"); printf("Utilize apenas letras minúsculas.\n"); printf("Máximo de 20 letras\n\n"); letra = ' '; max = 1; for (i = 0; i < 20; i++) { resposta[i] = ' '; } erros = 0; acertos = 0; printf("Digite a palavra secreta: "); scanf(" %s", resposta); max = strlen(resposta); //system("clear||cls"); printf("************ Jogo da Forca ************\n"); printf("************** Jogador 2 **************\n\n"); printf("Utilize apenas letras minúsculas.\n"); printf("Limite de 6 erros. Palavra de até 20 letras\n\n"); // __ 3 __ // Aqui falta a condição de parada do laço - 0,3 ponto while ((erros < 6) && (acertos<max)) { printf("Digite uma letra: "); scanf(" %c", &letra); j = 0; for (i = 0; i <= max; i++) { if (resposta[i] == letra) { acertos++; j++; printf("\nAcertos: %d - Erros: %d\n", acertos, erros); }; // if() }; // for() if (j <= 0) erros++; // nao tinha essa letra /* ----- Aqui falta a parte responsavel pela verificação de vitoria ou derrota -------------------- */ if (erros >= 6) printf("Derrota com %d erros\n", erros); else if (acertos >= max) printf("Vitoria com %d erros\n", erros); /* --------------------------------------Final da Verificação ---------------------------------------------------------------- */ */ }; // while() return (0); } -
C++ ao converter setbit em long- ERRO: a expressão deve possuir tipo de classe
arfneto respondeu ao tópico de kleberaugus em C/C#/C++
não. você pode ter um bitset de milhares de bits. É uma abstração. Só que tem que ser alocado em alguma unidade e a menor é bit e assim um bitset<9> é algo raro de se ver Eu nunca tinha visto. E você não precisa disso. Mais um bonus: esse programa abre um arquivo que você passa na linha de comando. Se o programa em sua maquina for x.c você usa x teste.txt e ele procura e abre na pasta um arquivo "teste.txt" le em um unsigned char[] mostra cada byte dele em uma linha, em decimal hexa e em texto cria o bitset<8> dele a partir de cada byte unsigned char. mostra quantos bits estão "set" converte os bits pra string e mostra na tela Até o fim do arquivo Para o arquivo teste.txt com uma linha só Vai mostrar isso RODE esse programa e vai entender melhor isso. Entenda que com C++ e essa classe bitset você já pode ler seu arquivo inteiro direto em bits, sem intermediários. Ou em blocos de bitset<X> com X bem grande. C++ praticamente não tem comparação em termos de facilidade para criar abstrações, o que o criador da linguagem sempre classifica como "abstrações de custo zero". #define _CRT_SECURE_NO_WARNINGS #include <bitset> #include <ctype.h> #include <fstream> #include <iomanip> #include <iostream> using namespace std; int main(int argc, char** argv) { if (argc < 2) return -1; ifstream en{ argv[1] }; if( !en )return -1; unsigned char buffer[256]; do { en.read((char*)buffer, 1); if (en.gcount() == 1) { cout << "\nValor lido em hex " << hex << (int) buffer[0] << " em decimal " << dec << (int) buffer[0]; if (isprint(buffer[0])) cout << " = '" << buffer[0] << "'" << endl; else cout << endl; bitset<8> oito_bits(buffer[0]); cout << "\t==> tem " << oito_bits.count() << " bits '1'. Bit a bit: ["; cout << oito_bits.to_string() << "]" << endl; }; } while (!en.fail()); en.close(); return 0; }; Acho que assim vai entender que está errado nessa lance de read() aceitar ou não algo, como te expliquei DUAS vezes já -
C++ ao converter setbit em long- ERRO: a expressão deve possuir tipo de classe
arfneto respondeu ao tópico de kleberaugus em C/C#/C++
Pois é. Eu te mostrei a tela do IDE com a mensagem. Isso é irrelevante. É um ponteiro. Aceita qualquer coisa. Não insista. Leia a documentação e entenda que é só um endereço. Rodou o programa que te mostrei? -
C++ ao converter setbit em long- ERRO: a expressão deve possuir tipo de classe
arfneto respondeu ao tópico de kleberaugus em C/C#/C++
Eu sei. Apenas entenda que o espaço é alocado sempre em múltiplos de 8 então ver um bitset<9> não é normal. Ainda que vá usar só nove, em geral se declara 16 ou 32 que é um int afinal. Mais eficiente e talvez vá alocar de todo modo os 32. MAs ao menos 16... Foi você que concluiu isso, mas não é verdade. Eu até te mostrei a tela com o protótipo de read(). É só um endereço. Aceita qualquer coisa. Qualquer coisa. Use unsigned. E pesquise o que quer fazer porque pode te ajudar. Se quer usar algo em termos de sequencias de bits deveria ler sobre os algoritmos RLE. Claro que você pode chegar a algo similar ou melhor, mas não vai te fazer mal ver ANTES o que se usa desde os anos 70... adicionado 0 minutos depois rode o programa que te enviei e vai entender o que está errado em seu código original -
C desenvolvimento de código (atividade de algoritmos e lógica de programação)
arfneto respondeu ao tópico de Danilo Anderson em C/C#/C++
postei esse trem que tem a ver com esse tema -
C Segue o código base para a questão 1 com lacunas indicando trechos de código fal
arfneto respondeu ao tópico de Tiago Mendes Fernandes em C/C#/C++
@Tiago Mendes Fernandes @Danilo Anderson Vocês estão indo no caminho errado. Talvez não tenha lido o que eu escrevi neste e no outro tópico: Nesse tipo de exercício você não pode criar novas variáveis e ir escrevendo um novo programa. Tem que usar soluções com a lógica E AS VARIÁVEIS que estão lá. É como aqueles exercícios dos livros de introdução a idiomas. Você não pode criar uma nova variável chances e colocar na no while... Seria muita esperança isso estar certo. Pra que teria então o lance de lacunas então e aquela frescura de __________________ e tal? E qual o propósito de mudar char resposta[20]; para char forca[20]; e inicializar com '_' ao invés de espaço se não vai sequer mostrar na tela? E eu praticamente escrevi o que está faltando há pouco. No loop e no trecho de código a ser inserido entre os comentários, que é praticamente o mesmo como eu também descrevi. Dificilmente. Code::blocks sequer inclui um compilador. E o compilador que está usando não deveria ter dificuldade com esse trecho de código. É um programa simples. O problema está no código mesmo. Acompanhe. Porque não postou o erro específico? Uma coisa já está clara: por alguma razão o autor mudou até o nome da variável do enunciado, de char resposta[20]; // para char forca[20]; Mas não corrigiu o erro no programa original, que eu havia até listado aqui Onde está o índice do char[20] para usar no loop? Que tal trocar por forca? Ainda sobre esse programa: start() chama trimEnd() que não está declarada. Que tal usar protótipos e deixar main() como a primeira função do programa, ficando mais de acordo com os bons costumes e facilitando a sua vida e de quem vai ler seu programa? jogo() chama __fpurge() e não está declarado. Pra que isso? Não era preciso, mas se queria mesmo esvaziar o buffer do teclado poderia usar um loop. Ou apenas no windows o simples e recomendado em uma linha só, direto de windows.h: int c = FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); for (i=0; i<letras; i++) { printf("\n%c ", forca); } Aqui abaixo tem o mesmo erro do programa original, que eu também já listei aqui mesmo. forca é um char[20]. Cade o índice? Sim, era o ' i ' if (palavra == tentativa) Mais do mesmo erro: palavra é char[20], tentativa é um char. Não dá pra comparar Ainda sobre trimEnd() void trimEnd(char *str) { //Tira o \n que o fgets lê junto com a variavel pra ir para a ultima linha char *end = str + strlen(str) - 1; while (end > str && isspace(*end)) end--; end++; *end = 0; } Porque o nome em inglês? Você está fazendo um loop pela str inteira para achar o '\n'. Só que se leu com fgets() sabe que o '\n' é o último caracter do vetor porque foi ele que marcou o fim pra gets() ou porque o arquivo terminou e fgets() fez a gentileza de colocar um newline no fim pra você. Então escreva o simples str[ strlen(str) -1] = 0; // fgets() GARANTE que str termina com um '\n' sem loop e sem função. É só isso. Só uma posição que quer mudar, Sempre a última. De volta ao exercício Afinal como eu sei que acertou a palavra, a vitória? acertos >= max Afinal como eu sei se o usuário "se enforcou", a derrota erros < 6 Afinal até quando fica no loop while ((erros < 6) && (acertos<max)) claro. Afinal como eu sei se teve vitória ou derrota if (erros >= 6) printf("Derrota com %d erros\n", erros); else if (acertos >= max) printf("Vitoria com %d erros\n", erros); E assim podem concluir o código original, só com o que está lá e corrigindo os erros do original, os 2 que mostrei no início
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