Ir ao conteúdo
  • Cadastre-se

Lucca Rodrigues

Membro Pleno
  • Posts

    1.065
  • Cadastrado em

  • Última visita

Tudo que Lucca Rodrigues postou

  1. @Jean Fernandes '=' é atribuição, '==' é comparação ("igual a"), então está errado. Você não declarou nenhuma variável C, você tem que atribuir a operação entre A e B em questão à ela e depois imprimir, então esqueça isso daqui: A operação de soma só vai ser realizada se a = b, e a de multiplicação, caso contrário. Você usou o especificador de inteiros, só faltou dizer qual variável que deve ser impressa. Veja o protótipo de printf(): int printf( const char* format, ... ); Onde '…' são outros argumentos adicionais especificando os dados a serem impressos.
  2. @Trainn Imagine o usuário lendo isso: E não sabendo do que se trata... Peça para o usuário inserir o coeficiente do x², o coeficiente do x e a constante em vez de a, b e c, respectivamente. Daí o que resta é aplicar a fórmula: E delta pode ser > 0, = 0 ou < 0, dai você vai ter raízes reais e diferentes, raízes reais e iguais e raízes complexas, respectivamente. Então você vai ter que avaliar o delta antes de aplicar Bhaskara.
  3. @Igor Soares da Paixão fopen() tem vários modos de acesso ao arquivo, você teria que usar o modo read para ler. Você pode usar fgets() pra ler cada linha enquanto a função não retorna nulo.
  4. @cpusam Bem... A autora do tópico mostrou-se empenhada o suficiente pra me motivar a ajudá-la. Acredito que não dei a solução pronta, mas expliquei os erros e mostrei o código da autora com algumas modificações para que ficasse como o enunciado sugere, e acho que ela entendeu o que eu expliquei
  5. @Igor Soares da Paixão Um exemplo de como salvar: #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { FILE *fp; double pi = 3.1415; setlocale(LC_ALL,"Portuguese"); fp = fopen("pi.txt", "w"); fprintf(fp, "Eu sou o PI\n%0.4lf\n", pi); fclose(fp); return 0; } Da uma olhada na função fopen() aqui, leia todos os modos de acesso ao arquivo, tem uma tabela lá. Depois que conseguir salvar o que você quer em um arquivo txt, daí você começa a pensar em como ler o que tem lá...
  6. @Alan Andrade Não achei o else naquele seu trecho de código. Sempre que tiver dúvidas com algo que não funciona em seu programa, mostre o programa todo, incluindo a parte que não funciona, assim fica mais fácil para testarmos e descobrirmos o motivo de não funcionar. Bom, se você colocar um else ou else if, você está dizendo que ambas condições não podem ser verdadeiras simultaneamente, o que não é verdade, porque se eu inserir 25:90:23, ambas as horas e os minutos passaram dos limites, então você precisa de 3 condições separadas, e nem adianta incrementar, por exemplo, as horas, caso os minutos passem de 59, porque você não sabe quantos minutos a mais que o usuário inseriu, se ele inserir 180 minutos, e você incrementar as horas em 1 hora, vai estar errado, não? Apenas diga ao usuário que o que ele inseriu está incorreto, e zere o que precisar: #include <stdio.h> struct a { int horas ; int minutos ; int segundos; } timer2,soma2; int main() { printf("Informe o segundo horario (hora:minuto:segundo): "); scanf("%d:%d:%d", &timer2.horas, &timer2.minutos, &timer2.segundos); soma2 = timer2; if (soma2.segundos > 59) { soma2.segundos = 0; printf("\nAtingiu o limite para os segundos!\n"); } if (soma2.minutos > 59) { soma2.minutos = 0; printf("\nAtingiu o limite para os minutos!\n"); } if (soma2.horas > 23) { soma2.horas = 0; printf("\nAtingiu o limite para as horas!\n"); } printf("\n%d:%d:%d", soma2.horas, soma2.minutos, soma2.segundos); return 0; }
  7. @Alan Andrade Exemplo: Diferença entre 12:56:48 e 14:34:23. (12*3600)+(56*60)+48 = 46608 segundos (14*3600)+(34*60)+23 = 52463 segundos Subtração: 52463 - 46608 = 5855 segundos Convertendo de volta: 5855 / 3600 = 1 hora (considerando resultado inteiro) (5855 - (1 hora * 3600)) / 60 = 37 minutos (considerando resultado inteiro) 5855 % 60 = 35 segundos A diferença é de 01:37:35
  8. @Alan Andrade Se a menor unidade for o segundo, converta horas e minutos para segundos, some tudo, faça as operações que desejar e converta de volta.
  9. @Julia_Lucia Não são 5 notas? Por que então os vetores de float surf1, surf2 e surf3 tem espaço para 4 notas somente? A constante MAX deveria ser 5. E por que o vetor das médias tem espaço para 2 médias somente? Acho que você não entendeu muito bem como funcionam vetores: O primeiro elemento do vetor tem índice 0, o segundo, índice 1, e assim por diante, digamos algo como: int notas[5]; Logo, o comprimento desse vetor é 5, começando pelo índice 0 e indo até 4. O argumento é o vetor de 5 notas, nada mais. Você já sabe que o comprimento é 5, então você não precisa que o comprimento seja argumento da função. Daí, bastam 2 loops: 1 para obter a maior e a menor nota, outro para efetuar a soma das médias. O argumento desta outra função é um vetor com as 3 médias, então nada de colocar o tamanho do vetor como argumento de novo. Você não precisa dessas variáveis m1, m2 e m3, em vez disso, faça algo como: float medias[3]; medias[0] = media(surf1); printf("Média do surfista 1: %.2f\n", medias[0]); medias[1] = media(surf2); printf("Média do surfista 2: %.2f\n", medias[1]); medias[2] = media(surf3); printf("Média do surfista 3: %.2f\n", medias[2]); vencedor(medias); Têm algumas coisas desnecessárias nesse seu programa, como mais da metade das bibliotecas (que não estão em uso), e também aquela função srand() dentro da main(), ela não tem uso nesse programa. Para fazer a função vencedor(), você pode usar essa árvore de possibilidades: Onde 'a' corresponde à medias[0], 'b' corresponde à medias[1] e 'c' corresponde à medias[3]. Por fim, sua função vencedor() deve ser do tipo void(), já que ela não tem retorno. Teste isso: #include <stdio.h> #include <locale.h> #define MAX 5 // Calcula a média float media (float notas[MAX]) { int maior = 0, menor = 10, i; float media = 0; // Obter maior e menor nota for(i = 0; i < MAX; i++) { if (menor > notas[i]) { /* Se a variável menor for maior que a nota em questão, novo valor é atribuído */ menor = notas[i]; } /* Note que são 2 condições separadas, uma não depende da outra, então nada de if e else */ if (maior < notas[i]) { /* Se a variável maior for menor que a nota em questão, novo valor é atribuído */ maior = notas[i]; } } // Obter a soma for(i = 0; i < MAX; i++) { if(notas[i] != menor && notas[i] != maior){ /* Se a nota for diferente da menor e da maior nota, efetuar a soma */ media += notas[i]; } } media /= 3; return media; } // Calcula o vencedor e imprime na tela o ranking void vencedor (float medias[3]) { // Árvore de possibilidades if (medias[0] > medias[1]){ if(medias[1] > medias[2]){ printf("\n1º lugar = surfista 1 com média %.2f", medias[0]); printf("\n2º lugar = surfista 2 com média %.2f", medias[1]); printf("\n3º lugar = surfista 3 com média %.2f\n", medias[2]); } else if(medias[0] > medias[2]){ printf("\n1º lugar = surfista 1 com média %.2f", medias[0]); printf("\n2º lugar = surfista 2 com média %.2f", medias[2]); printf("\n3º lugar = surfista 3 com média %.2f\n", medias[1]); } else{ printf("\n1º lugar = surfista 1 com média %.2f", medias[2]); printf("\n2º lugar = surfista 2 com média %.2f", medias[0]); printf("\n3º lugar = surfista 3 com média %.2f\n", medias[1]); } } else if (medias[1] > medias[2]){ if(medias[2] > medias[0]){ printf("\n1º lugar = surfista 1 com média %.2f", medias[1]); printf("\n2º lugar = surfista 2 com média %.2f", medias[2]); printf("\n3º lugar = surfista 3 com média %.2f\n", medias[0]); } else{ printf("\n1º lugar = surfista 1 com média %.2f", medias[1]); printf("\n2º lugar = surfista 2 com média %.2f", medias[0]); printf("\n3º lugar = surfista 3 com média %.2f\n", medias[2]); } } else{ printf("\n1º lugar = surfista 1 com média %.2f", medias[2]); printf("\n2º lugar = surfista 2 com média %.2f", medias[1]); printf("\n3º lugar = surfista 3 com média %.2f\n", medias[0]); } } int main(){ setlocale(LC_ALL, "Portuguese"); int i; float surf1[MAX], surf2[MAX], surf3[MAX], medias[3]; // Lê as notas for(i = 0; i < MAX; i++) { printf("Digite a %dº nota do surfista 1: ", i+1); scanf("%f" , &surf1[i]); } printf("\n"); for(i = 0; i < MAX; i++) { printf("Digite a %dº nota do surfista 2: ", i+1); scanf("%f" , &surf2[i]); } printf("\n"); for(i = 0; i < MAX; i++) { printf("Digite a %dº nota do surfista 3: ", i+1); scanf("%f" , &surf3[i]); } // Envia as notas para a função e armazena as médias em um vetor medias[0] = media(surf1); printf("Média do surfista 1: %.2f\n", medias[0]); medias[1] = media(surf2); printf("Média do surfista 2: %.2f\n", medias[1]); medias[2] = media(surf3); printf("Média do surfista 3: %.2f\n", medias[2]); vencedor(medias); return 0; }
  10. @Renato.88 Esse valor não aparece como próximo estado. Eu tinha visto esse exemplo de um contador síncrono crescente de MOD 11: Eu me baseei nele...
  11. @Renato.88 Bom... Acho que o que eu tentei fazer é exatamente isso: No final da tabela verdade para quando a contagem era crescente, quando atingia 11110, o próximo estágio era 00000, ou seja, está zerando quando chega em 11110, e quando atingia 11111, daí o próximo estado não importa, porque isso não faz parte da contagem: E no começo da tabela verdade para quando a contagem era decrescente, quando a contagem estava em 00000, o próximo estágio era 11110, ou seja, está começando em 11110: A única coisa que acho que está errado aqui (acabei de perceber) é que no fim da tabela verdade para quando a contagem era decrescente, eu fiz isso: E acho que deveria ser don't care de novo, já que não tem 11111 na contagem, então não tem próximo estágio. De qualquer forma, o resultado continua o mesmo, já fiz essa alteração, e o único circuito que mudou foi o de Tb: Ta, Tb, Tc, Td, Te. Até então acho que fiz tudo como você disse... Se errei, por favor, me corrija. @MOR Tenho que fazer tudo baseado na tabela verdade
  12. @.if Um exemplo que eu tinha visto (de 3 bits): Pelo o que eu entendi, como a contagem no meu caso é de 0 a 30, então são 5 bits, por isso 5 flip-flops do tipo T e 5 saídas Q, tanto que na tabela tem lá de Qa à Qe. A tabela em vermelho é a contagem normal, a tabela em azul é o próximo estágio da contagem, por exemplo, se estiver configurado para contar em ordem crescente, e o estágio atual for 00000, o próximo estágio é 00001, e se estiver configurado para contar em ordem decrescente, seria 11110. Pelo menos eu acho que é isso... Paras as entradas Ta à Te, eu só fiz a operação de XOR da correspondente saída Q, por exemplo, Te = Qe XOR Qe+ Vai mais atrapalhar do que ajudar... Se a tabela não está certa, o circuito também não. Pra resumir, eu peguei as expressões lógicas a partir da tabela verdade que montei neste site, pra poupar tempo de fazer na mão e não dar certo no final (que foi o que aconteceu). Nesses circuitos abaixo, F é a entrada que muda o circuito ser crescente ou decrescente (aquele bit up/down da tabela de antes): E são esses os links de cada circuito, se quiser ver o mapa de Karnaugh e tabela verdade, além do que a imagem acima já mostra: Te, Td, Tc, Tb, Ta. Fora isso, nada de mais: E logo abaixo foram conectados aqueles 5 circuitos de antes, então não preciso mostrar de novo. O gráfico quando o bit up/down é 0: E quando é 1:
  13. Edit: Acho que a tabela com os números em azul, que representa o próximo estado, agora está certa, mas não tenho certeza... E o circuito ainda não funciona. No final do estado 0 de up/down, o próximo estado de 30 é 0, porque é um contador de 0 a 30 e de 30 a 0, e depois de 0 eu coloquei don't care. E no começo do estado 1 de up/down, o estado anterior de 0 é 30, e assim vai... Contador.xlsx Alguém poderia dar uma ajuda?
  14. Boa tarde! Estou travado na tabela verdade de um contador síncrono crescente/decrescente de MOD 31, ou seja, irá contar de 00000 à 11110 quando for crescente, e de 11110 à 00000 quando for decrescente. Estou usando flip-flop's do tipo T, podem me dizer o que estou fazendo errado? Quando a contagem chegava em 31 na tabela com números em azul, eu coloquei 0 em tudo, e o que viesse depois não importava, então coloquei x. Na segunda parte da tabela verdade fiz isso também, porque era pra começar em 11111, então coloquei 00000, e a partir daí fui incrementando. Vou anexar também a planilha do Excel, para caso não consigam ver bem na imagem. Contador.xlsx Agradeço desde já!
  15. @L3ozao O código é seu, você que sabe o que vai fazer, só não podem haver redeclarações da main.
  16. @L3ozao Porque há duas main no seu programa...
  17. @alexandre.mbm Pelo visto o padrão de representação é o IEEE 754, estou estudando esse método, parece que não é nada muito complexo.
  18. @Thiago Miotto Sim, quando apertamos uma tecla da calculadora, o codificador transforma o sinal em binário. Só queria saber o que é feito quando é introduzida uma operação entre dois pontos flutuantes.
  19. Boa noite! Alguma alma bondosa saberia dizer como calculadoras realizam operações aritméticas com pontos flutuantes? Sei que a princípio não é nada sintetizável, eu tinha lido algo sobre aritmética com números representados em ponto fixo, mas não está muito claro ainda na minha cabeça, e nem sei se é isso que se usa de fato... Obrigado desde já!
  20. @Mariana Fernandes Pra calcular a média dos salários das mulheres, você tem que ter a quantidade de mulheres... É matemática básica.
  21. @Mariana Fernandes 78 - 110 no caso é 'N' - 'n', e da no mesmo de 'A' - 'a' ou qualquer outra letra maiúscula - sua correspondente minúscula, 32 é o padrão. b) O maior e o menor salário por sexo Para o maior salário: Crie duas variáveis do tipo float (chamarei de MR_masc e MR_fem) e logo após declarar, inicialize ambas com 0. Avalie qual o sexo e em seguida, verifique com uma condicional if se o novo salário inserido é maior do que o valor da própria variável MR em questão, e caso seja, atribua este salário à variável MR, e adicionalmente, atribua a idade recém inserida à uma variável do tipo int (chamarei de maior_idd_masc para sexo masculino e maior_idd_fem para sexo feminino). Este é o maior salário. Para o menor salário: Crie duas variáveis do tipo float (chamarei de MN_masc e MN_fem) e atribua o primeiro salário inserido à elas (pode ser com uma condicional if, imagino que para fazer a questão (a), você teve que incrementar dois contadores para calcular a média de ambos os sexos no final, então se contador_masc == 0 e o sexo for masculino, MN_masc = primeiro salário inserido para o sexo masculino, e se contador_fem == 0 e o sexo for feminino, MN_fem = primeiro salário inserido para o sexo feminino). Avalie qual o sexo e em seguida, verifique com uma condicional if se o novo salário inserido é menor do que o valor da própria variável MN em questão, e caso seja, atribua este salário à variável MN, e adicionalmente, atribua a idade recém inserida à uma variável do tipo int (chamarei de menor_idd_masc para sexo masculino e menor_idd_fem para sexo feminino). Este é o menor salário. d) A quantidade de mulheres na região Se você fez a questão (a), então a (d) está feita, pois é só incrementar um contador caso o sexo seja feminino. e) A idade e o sexo da pessoa que possui o maior e o menor salário. Para o maior salário: Caso MR_masc > MR_fem, então MR_masc representa o maior salário, logo, o sexo é masculino e a idade é a maior_idd_masc, caso contrário, então MR_fem é que representa o maior salário, o sexo é feminino e a idade é a maior_idd_fem. Para o menor salário: Caso MN_masc < MN_fem, então MN_masc representa o menor salário, logo, o sexo é masculino e a idade é a menor_idd_masc, caso contrário, então MN_fem é que representa, o sexo é feminino e a idade é a menor_idd_fem.
  22. @Mariana Fernandes Basicamente verifique se a letra é minúscula, e caso seja, converta-a para maiúscula. Da uma olhada aqui:
  23. @Mariana Fernandes Você entendeu para que servem aquelas coisas? Devem existir umas 20 formas diferentes de limpar o buffer... Você pode usar o seguinte: scanf("%*c"); Note que o especificador usado é o de caracteres, porém, o mesmo conta com o subespecificador *, que faz com que os dados sejam lidos do fluxo, mas ignorados. Quanto à função toupper(), ela é bem simples, e tudo o que você precisa fazer é verificar se o caractere é uma letra minúscula, ou seja, se está entre a e z (considerando a tabela ASCII), e caso esteja, subtrair 32 do valor decimal da letra em questão, pois a diferença entre letras maiúsculas e minúsculas em decimal na tabela ASCII é 32, veja: E quanto à getch(), tudo o que ela faz é retornar o caractere digitado, você pode até usar scanf() no lugar, é só perguntar ao usuário se ele quer continuar a inserir mais dados e ler algo com scanf().
  24. @Mariana Fernandes fgetc() lê o caractere presente na posição atual do fluxo interno. Após a leitura, a posição atual é avançada para o próximo caractere, e isso ocorre enquanto a condição do while for verdadeira: Isso é só para limpar o buffer, então fgetc() lê algum caractere que entrou no buffer, no caso o '\n' ao se dar um ENTER (as variáveis lidas anteriormente são do tipo inteiro e ponto flutuante, e o '\n' não interessa na leitura e acaba ficando no buffer), e assim o buffer é limpo. toupper() converte letras minúsculas para maiúsculas, e isso aí é a condição de um do/while: Então o loop persistirá enquanto a tecla que getch() retorna (em caixa alta) for diferente de um N maiúsculo. Precisa da conio para usar getch() e precisa da ctype para usar toupper().
  25. @Mariana Fernandes Mostre o que tentou fazer e diga quais são suas dúvidas.

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!