Ir ao conteúdo
  • Cadastre-se

arfneto

Membro Pleno
  • Posts

    6.252
  • Cadastrado em

  • Última visita

Tudo que arfneto postou

  1. Em geral os números são as primeiras palavras a serem programadas nas bibliotecas de speech rec. E "sim", "não", "OK" e CANCELA ... Então talvez fosse mais simples usar os números mesmo... Não entendo que ligação possa ter entre o modo como um comando é reconhecido e a implementação. No final tudo vai acabar em [posicao]. Se estiver livre ocupa. Se venceu acabou. E a cor é a cor da vez. Ou não?
  2. Está um pouco longe de funcionar ainda. O compilador não entende contexto. Você precisa repetir a condição completa em cada teste com @devair1010 mostrou acima. Recomendo sempre usar parenteses e não confiar na memória da precedência de operadores. Mais seguro e mais claro. Para testar as combinações de vitória com um jogo assim simples, talvez você mais fácil você simplesmente salvar as combinações vencedoras. O grupo todo. E testar de uma vez. Nem sei como fazer isso. Qualquer estrutura serve. Imagine uma string com letras e 'R' para vermelho, 'G' para verde e '.' para livre e um vetor de strings com as combinações vendedoras, por exemplo. Como tanto faz qual a cor para alguém vencer, coisas como combinações de vitória led 123 /456 /789 /147/ 258 podem ser expressas por const char endGame[5][10] = { // combinacoes de fim de jogo " XXX......", " ...XXX...", " ......XXX", " X..X..X..", " .X..X..X.", }; Dois vetores para o jogo é talvez exagero. Talvez algo associado à representação acima fosse mais fácil de entender e por consequência programar...
  3. if (idade<=10) printf ("O %s devera pagar R$30,00",nome); else if ((idade>10) && (idade<=29)) printf ("O %s devera pagar R$60,00",nome); else if ((idade>29) && (idade<=45)) printf ("O %s devera pagar R$120,00",nome); No trecho acima você vê que está propagando uma redundância em todos os testes. Qual chance de uma idade que não é <- 29 ser > 29? Total. Ela não tem opção. Não precisava testar 2 duas condições a cada vez. O limite inferior já foi testado. E fica difícil, mesmo num programa tão pequeno, descobrir que ele tem 6 pontos de saída. Essa não é uma boa prática. main() é uma função, e ao retornar encerra seu programa. O normal. Então você podia ter escrito algo assim if (idade < 10) { printf("O %s devera pagar R$30,00", nome); return; }; if (idade <= 29) { printf("O %s devera pagar R$60,00", nome); return; }; if (idade <= 45) { printf("O %s devera pagar R$120,00", nome); return; }; if (idade <= 59) { printf("O %s devera pagar R$150,00", nome); return; } if (idade <= 65) { printf("O %s devera pagar R$250,00", nome); return; }; printf("O %s devera pagar R$400,00", nome); return; Que talvez concorde que é muito mais legível. Ao encontrar o fim de uma função retorne explicitamente. É mais simples e seguro. E nesse caso nem teria tido o problema com o teste de <10 que te custou umas horas. Outro ponto: essas { } que ficaram a mais no meio do programa às vezes não são assim inofensivas. Em C++ por exemplo elas encerram o tempo de vida (scope) de todas as variáveis que estejam declaradas dentro do bloco { } e isso se você não fez de propósito pode ser desastroso em seu programa
  4. sao duas partes bem distintas. consegue escrever a segunda ou a primeira apenas? Como por exemplo apenas criar o arquivo com umas linhas a toa?
  5. mas qual seria o problema? adicionado 0 minutos depois o problema que esta tendo para resolver isso... tem um programa que crie os vetores? consegue escrever um que cria um arquivo?
  6. algum detalhe sobre qual o problema?
  7. sao servicos eletronicos, bibliotecas virtuais que a escola assina e da acesso aos alunos. voce tambem pode assinar por sua conta. servicos como esse https://www.oreilly.com/ que é o melhor do mundo talvez. pode assinar um trial de graca eu acho
  8. apenas troque o 13 por default não tem acesso a um, manual? um site? Seu curso não tem (assina) uma biblioteca virtual? Muitas escolas tem isso case 11 : mes=11; printf ("O mes selecionado foi Novembro"); break; case 12 : mes=12; printf ("O mes selecionado foi Dezembro"); break; case 13 : printf ("O mes selecionado nao existe"); break; default: // outros casos break; // so isso em https://www.tutorialspoint.com/cprogramming/switch_statement_in_c.htm por exemplo
  9. não há um ponteiro para o endereço 35. veja a planilha acima no caso em 35 ESTÁ um ponteiro. Veja a coluna C da planilha acima e vai ter um exemplo
  10. certamente. E porque não escrever claramente o que é o que no desenho? Espaço havia. Não é preciso abreviar tanto. O cara podia ser mais caprichoso no enunciado. Legendas por exemplo adicionado 1 minuto depois E não faz diferença se está em hexadecimal, octal ou binário ou qualquer outra base para a questão adicionado 9 minutos depois Algo assim serviria: p é um ponteiro para int, está alocado em 0x150 e o conteúdo é 0x800 e lá está 0x1500
  11. Se o enunciado esteja correto Então a resposta (errada) tem que ser A ou C porque são mutuamente exclusivas. A julgar pelo desenho, que não é assim muito formal: não tem legendas claras sobre o que é o que estar dentro de um retângulo ou fora dele não 'assim uma definição terminar por H não é assim uma definição... Mas sugere que no endereço 35H está um ponteiro p o valor de p é 150H ou seja p aponta para 150H em 150H está o valor 1500 que é o valor apontado por p e assim A está errada
  12. O operador de comparação é '==' e não '='. Esse último é reservado para atribuição...
  13. Não entendi o que quer dizer. Seu curso tem um livro-texto? uma apostila? Um manual? O comando em questão, switch() tem uma cláusula default: com esse propósito. Apenas troque o 13: por default:
  14. ajudaria se tivesse mostrado o programa...
  15. Mas o exemplo que mostrou apenas identifica um ponto no espaço. Mas pode usar o exemplo que te mostrei. Não estou certo do que seja um vetor assim. Do modo como escreveu (x1,y1,z1) é um ponto e (x2,y2,z2) outro ponto e definem um segmento no espaço 3D
  16. Entendeu o que eu expliquei? Não perguntou nadinha...
  17. Seu programa não está bom. Você tem um livro? Um manual? Talvez deva ler a definição de scanf() com cuidado ou usar outra função. Quando você diz "ler e buscar" um cadastro está considerando que toda vez vai digitar tudo de novo ou vai ler de um arquivo? Entenda que vai precisar de algum lugar para guardar esse cadastro na memória. O mais comum é agrupar os campos do cadastro em uma struct{} e declarar um vetor delas. Sabe o que são essas coisas?
  18. Um pouco confuso isso que descreveu. Tem um enunciado mais preciso? Seu programa está um pouco confuso e difícil de ler e acho que não atende ao lance dos vetores e struct. Não sei o que são "vetores em struct" ao certo Se você não tem nada mais específico, veja como pode ser mais simples: struct origem { int n; int vetor1[100]; int vetor2[100]; }; struct destino { int resultado[100]; }; int produto_escalar(int N, int* vetor1, int* vetor2, int* resultado); Na struct origem tem os vetores vetor1 e vetor2 de tamanho n. E você vai calcular o produto escalar e gravar no destino na struct destino usando a função produto_escalar. Claro que só vai usar um n e aparentemente igual a 3 fixo no seu caso Entenda que você pode declarar os vetores assim: struct origem de = { 3, { 2,4,6 }, { 3,6,9 } }; struct destino para; E já testar sua função, antes de perder seu tempo digitando coisas para testar. Seu enunciado diz que tem que ler do teclado? Não acha mais simples? São vetores, estão dentro de structs, estão inicializados e pode chamar sua função diretamente: int v = produto_escalar(3, de.vetor1, de.vetor2, para.resultado); E a função recebe os ponteiros e faz as contas. Claro que os 3 vetores tem a mesma dimensão e N não passando de 100 assim vai estar bem.
  19. Porque criou um novo tópico para o mesmo problema? do{ Node* lista=NULL; printf("Escolha a opção\n"); printf("0. Sair\n"); printf("1. Apagar todos o ... Com esse primeiro comando no loop fica difícil para seu programa... A primeira coisa que ele faz antes de mostrar o menu é..... APAGAR A LISTA. Node* inserir_fim(Node * Lista, int dia, int mes, const* string); Não se costuma escrever assim para inserir. O mais produtivo é Lista* inserir_fim(Node* Lista, Lista* Lista); // ou no seu caso Node* inserir_fim(Node* evento, Node* Lista); O que você quer fazer é inserir um node na lista. E devolver o novo endereço de início porque ele pode ter mudado. E você não quer ter que alterar inserir() para cada lista que você escreve, certo? O processo é o mesmo então só está arrumando problemas ao vincular inserir() ao layout do nó. Ainda sobre inserir, se você só insere no fim o novo nó sempre vai apontar para NULL... if(Lista==NULL) { novo->prox=NULL; Lista=novo; } else { Node* aux = Lista; while(aux->prox!=NULL) { aux = aux->prox; } novo->prox=NULL; aux->prox=novo; } Como vê com seu código mais alinhadinho, tem o mesmo comando no if nas duas condições... Se você só insere no fim, porque não salva esse endereço afinal? É o seu programa. A sua lista. As suas funções. Você pode fazer o que quiser. Faça o simples: Crie uma estrutura Agenda com uma lista de eventos, um contador atualizado, um ponteiro para o inicio e um ponteiro para o fim. Tudo fica mais fácil. Assim poderia inserir um item na lista escrevendo o simples: Agenda* = inserir_fim(Node* evento, Agenda* agenda); E até pra ler fica mais fácil. Nunca escreva na tela dentro dessas rotinas que manipulam a lista. E muito menos leia valores. Apenas retorne status indicativo assim sabe que não vai mexer nisso. Por exemplo ao remover retorne algo para indicar que não achou o item. Só isso. Não escreva na tela.
  20. Você abriu outro tópico com o mesmo problema. Entenda que se quer a união de A e B só para imprimir não precisar colocar em A... for(int i = 0; i < nelementosB; i++){ uniao[i + cont] = conjuntoB[i]; cont++; } Mas se vai colocar provavelmente não vai querer colocar na união elementos duplicados então deve fazer como faria no papel: para cada elemento de B compara com todos de A e se não estiver lá, e apenas nesse caso, coloca na união. Entenda que se vai só imprimir pode imprimir assim que descobrir cada elemento que faz parte da união. Ainda mais que como declarou um vetor de união --- que não está usando na verdade --- dentro da função, assim que você retornar de uniao() esse vetor vai sumir para sempre. Então pra que gravar afinal ? E se vai usar retorne o endereço dele e o total, mudando os argumentos da função. Com esse número de elementos não perca seu tempo colocando em ordem. Pra valer a pena hoje em dia teria que ter ao menos uns 1000 int em cada vetor. Os processadores de hoje em dia são muito muito rápidos em comparar int em vetores na memória então chamar funções e ficar trocando e comparando não faz sentido. Muito menos se vai usar um printf() para cada item depois.
  21. faça pequenos programas para você se acostumar com essas coisas Pensando de novo no seu programa, entendi que a eleição não é uma simulação de verdade. O valor da margem de A não é uma probabilidade como numa eleição. É um número fixo e isso simplifica umas coisas. Por outro lado devo te lembrar que os valores são baseados em números aleatórios então não vai ter um valor igual aos do enunciado. Ao achar o ponto limite usando a tal bissecta() por outro lado pode conferir usando a mesma função prob_erro() e ver se o valor retornado por bissecta() é mesmo um ponto limite em relação à tolerância...
  22. Crie um classe e compile para uma biblioteca. Use um include com o header para compilar e o arquivo .a que contem a biblioteca na hora de gerar os programas
  23. porque esse é só um trecho de código para mostrar o loop de simulações e o de votos. A mecânica da coisa, como está escrito lá. Não é algo sério. Trata-se de uma constante para ver se você de fato ao menos leu programa. E você leu! Você rodou o programa? Aí temos um problema mesmo. Essa é precisamente a raiz da solução Se Então o tal f da função de sorteio, que é um número entre 0 e 1 também, será menor que esse que veio de sorteia_real() com a probabilidade f. Ou não? E você pode escrever int sorteia_voto_com_falha(double f) { return (sorteia_real() < f); }; porque como eu te expliquei em C ZERO é falso. Te mostrei exemplos também. Então essa função vai retornar zero se sorteia_real() for maior que f. Assim ficaria mais fácil de entender? int sorteia_voto_com_falha2(double f) { int i = rand() % 100; int j = (int)(f * 100); if (i < j) return 1; else return 0; }; adicionado 24 minutos depois faça pequenos programas para você se acostumar com essas coisas for (int v = 0; v < N; v += 1) { // cada voto if (sorteia_real() < a) { // voto em A if (!sorteia_voto_com_falha(f)) votos_em_A += 1; } else { // voto em B if (sorteia_voto_com_falha(f)) votos_em_A += 1; }; // if() }; // for() fim da eleicao Esse loop seria uma eleição computando os votos de acordo com os parâmetros. Pense nisso. Ao final se você tem votos_em_A maior que a metade dos votos, N/2, quer dizer que deu erro
  24. no caso de f = 1 dentro de uma certa tolerância tol número estimado de falhas, não número real. E não é uma indução, é o objetivo: calcular a possibilidade de uma eleição ter o resultado invertido por excesso de erros da urna. Você poderia calcular com o perdedor. Tanto faz. O que importa é se o resultado foi invertido em relação às margens ou não. Em C não. Isso se chama polimorfismo e existe em outras linguagens como java e C++ Sua dificuldade eu não entendi. Pode tentar explicar de outro modo? Isso é a simples busca binária por um valor no intervalo. Você rodou o programa que te mostrei? Entendeu o código? Não tem nenhuma dúvida?

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!