Ir ao conteúdo

Ansi C

Membro Pleno
  • Posts

    3.284
  • Cadastrado em

  • Última visita

Tudo que Ansi C postou

  1. Olá ! Ache o núcleo do problema e reduza-o esmiuçando o problema principal em varias partes, "e cada parte do problema é um problema à parte". Por exemplo Quadro geral: (0)*Escrever um Programa em C que lê um número não determinado de valores para M todos inteiros e positivos, um de cada vez: (1)-Verificar se o valor M é par ou ímpar, escrevendo a mensagemcorrespondente. (2)-Contar¹ o número de valores ímpares lidos e (3)-Calcular a soma² dos valores pares. (4)-No final; Escrever o contador¹ e a soma² calculados. Quadro acima e um pouco ingênuo, mas [Programação Imperativa] você perceberá que no final há apenas duas variáveis importantes: contador e soma com números.
  2. Já vi isso antes, e aqui mesmo no fórum faz pouco tempo.
  3. Realmente é uma pena, pois é muito legal! E não é difícil de entender; no caso foram 3 char [1 byte cada] enviados para 1 int [4 bytes cada]. Bacana ! Que vai gerar números pouco a nada de sequenciais, vi comentário de que essa é a forma mais ingênua de se usar Switch. Switch é muito melado, clausula IF é muito melhor. Se não quiser usar deslocamento de bits, colocar o código valor das três letras direto no Label case é outro caminho que leva mesmo lugar. Use o programinha abaixo para visualizar o inteiro que resulta da combinação: #include <stdio.h> int main() { char str[4]; // Tem a mesma quantidade de bytes de int scanf("%s", str); printf("CODIGO -> NUMERO\n"); printf("%s -> %d: ", str, *(int*)str); switch(*(int*)str) { case 7171940: printf("Domingo\n"); } return 0; } ~~ / ~~ Boa Sorte
  4. @marcos12345 Desculpa-me, é que estou sem tempo para fazer uma demostração com bons códigos, e não quero postar nada ruim de se ver. Quanto disponível vou tentar escrever um programa suficientemente modulado: De código reaproveitável com funções como manda o figurino, pois gostei bastante desse problema e não esquecerei Boa Sorte!
  5. Olá ... Gostei muito dessa ideia ... e vou logo dizendo que sem definir o sinal na estrutura "não é possível" consolidar sua(s) operação(ões) de maneira fácil. fragmento: Post #1 ... char n1[1000],n2[1000]; ... Assim: Acredito ser mais fácil [0,...,'+', '1','2','3'] ou ['1','2','3','+', ...,0] Ou seja, é importante saber o sinal. Primeiro antes de qualquer operação se investiga o sinal; Saberá-se-a o tamanho do número, operação de sinais; Introduz algo inerente a operação; E não mais haverá necessidade de contar os caracteres com strlen (...); Operação se dar pela direita para esquerda. A partir disso, você faz as conversões ou operar em cima dos caracteres, simplesmente destacando o sinal. Exemplo: De multiplicação: 123 x 5 M[0, ...,0] = A[0,...,'+','5'] X B[0,...,'+', '1','2','3'] Ao escanear pelo sinal: A tem a no máximo 1 dígito(s), B tem b no máximo 3 dígito(s). A[999] * B[999]: '5' * '3', que convertido é igual a 3 * 5 M[999] = 15 % 10 + '0' = '5' e carry¹ = 15 / 10 = 1 A[999] * B[998]: '5' * '2', que convertido é igual a 5 * 2 M[998] = (10 + carry¹) % 10 + '0' = '1' e carry¹ = (10 + carry¹)/10 = 1 ... # O número de somas é igual ao número de casa decimais no multiplicador # O número de zeros no final de M no início de cada multiplicação é igual a valor da casa decimal no multiplicador, assim por exemplo se a = 0, então M[999] tem por unidade o resultada da primeira multiplicação, porém se a = 1, então M[999] = 0, se a = 2 então M[998...999] = 0, se a = 3 então M[997...999] = 0 ..., o primeiro resultado da multiplicação consequente é imediatamente o próximo M[ X ] depois dos zeros da direita para esquerda. Parece complicado, alguém deve ter uma ideia melhor que essa, contudo essa é a minha. Espero ter ajudado, boa sorte.
  6. Assim se excluiu o flag
  7. Então é apenas isso mesmo: Testar se é quadrada: A(M x M), n = m e depois testar para i até n se todo j até m tem A(ij) == A(ji): Se negativo é porque assimétrica. Basta para tanto usar loop: for, while, ou goto >.< facin
  8. E o que eu quero, é que também não sejam todos iguais a zero. Obrigado.
  9. Exatamente, o pragmatismo me tomou, e foquei apenas no aspecto estrutural. Quando na verdade os elementos são importantes, e diferentes de todos iguais a 0. O que faz do problema objeto de meu maior interesse. E pela amor de Deus, concerta esse enunciado @Guilherme Cesila . Para que não seja os elementos todos nulos. Será que alguém, consegue resolver ???? Aguardo ansioso pela solução. ~~ / ~~
  10. Sim, porque a estrutura da matriz é apenas uma das partes do problema, diria a mais simples delas. De fato, eu apenas foquei no aspecto estrutural da matriz, e juro por deus, não vi o scanf Realmente eu não vi, ainda se for todos 0, o que acontece? Simétrico ou antissimétrico @isrnick é diferente disso: Nessa caso, ingenuamente foquei apenas no aspecto estrutural de n x m e errei no conceito quando na verdade existe mais interesses [partes do problema].
  11. Correto, essa é uma das partes. Concordo plenamente com @isrnick , Diferente de @Simon Viegas , que não completa a condição para que um matriz seja definitivamente simétrica.
  12. adicionado 3 minutos depois Se todos os elementos da matriz é iguais a 0, ela é simétrica, porém não sei quais elementos há lá e se vai ser solicitado valores <<diferentes de todos iguais a 0>>, presumo pelo problema que não tem importância os elementos, também o enunciado não me deu muitas escolhas.
  13. Veja, para um matriz ser simétrica ela precisa ser quadrada, porém nem toda matriz quadrada é simétrica porque existe a correspondência de valores na matriz. Contudo não existe menção a essa questão no problema. Basta para tanto verificar se m = n. Foi isso que eu disse quando falei: Se essa opção lhe agrada mais, ou é por você considerada mais lógica, obrigado por sua colaboração nesse aspecto. adicionado 3 minutos depois Por um instante pensei que, matrizes não quadradas poderia ser simétricas, daí você para mim teria sido mais útil exemplificar um caso desses, mais ao que parece não há, ou será que sim?@Simon Viegas
  14. Que coisa, você simplesmente acrescenta NÃO. Isso concerta alguma coisa? Qual o seu problema? Que resulta na mesma afirmação? Uma matriz para ser simétrica ainda precisa ser quadrada! Eu por um breve instante achei o contrário, até questionei a possibilidade de haver matriz simétrica não quadrada.
  15. @Simon Viegas Ah! Entendo agora o que você tentou me dizer! Com relação ao valores da matriz aij == aji que lhe configura a simetria dos elementos.
  16. Engraçada, estou com certeza de que é isso mesmo. @Simon Viegas Uma matriz quadrada não é simétrica? Então não sei o que é um matriz simétrica ou quadrada. Explica-me? adicionado 2 minutos depois Se não for pedir muito caso em que a matriz é simétrica sem ser quadrada, para ilustração
  17. Olá! Matriz Simétrica Conceito de matriz simétrica é relacionado com seu número de linhas e colunas, caso sejam iguais, ela é simétrica. https://mundoeducacao.bol.uol.com.br/matematica/matriz-simetrica.htm ~~ / ~~ Código para Teste: Matriz Simétrica Com isso, se testa a simetria de matriz simplesmente fazendo teste condicional de igualdade. Se o número de linhas é igual o número de colunas então é quadrada [M x M]. teste_simetria /* Teste de Simetria para Matriz */ /* Se o número de linhas[n] é igual ao de colunas[m]: é simétrica */ if (n == m) { printf ("Matriz simétrica") } /*Se não então: é assimétrica */ else { printf ("Matriz assimétrica") }
  18. #include <stdio.h> #define N 10 //Onde abaixo exitir N será trocado por 10 int main(void) { int valores[N] = {0}; int index = 0; while (index < N) { scanf(" %d", &valores[index]); index++; } // pegar os N valores int maior = 0; int procurar = 0; while (procurar < N) { if (valores[maior] < valores[procurar]) { maior = procurar; } procurar++; } // buscar o índice do maior dentre os valores printf("%s%d\n%s%d\n", "Maior Valor eh: ", valores[maior], "Na posicao: ", maior); // mostra o maior valor e seu índice. return 0; }
  19. É que cada case suporta um letra! Minha recomendação é criar um menu para os eletrodomésticos. Assim fica mais fácil, para isso use a primeira letra do alfabeto ou outro sinal de tua preferência Exemp_Menu: ... printf( "Insira o eletrodoméstico ou aparelho que deseja calcular o " "a- Geradeira\n" "b- Micro-ondas\n" "c- Lava-louca\n" "consumo, quantos aparelhos iguais a este possui em sua " "residência e o tempo médio diário em que fica ligado: "); ... switch (apar) { case 'a': printf("O consumo médio é de %gkW por mês", consumo * 200.0); break; ... } Caso não gostei assim, vai ter que usar a biblioteca string.h [pesquisa na internet] por meio da função strcmp localizar dentro de um vetor, escaneando nome a nome de eletrodoméstico..., só então daí alimentar com índice se localizado a proposição Switch(apar) adicionado 6 minutos depois Essa é uma boa dica! Pense como o usuário vai ter certeza se o seu eletrodoméstico existe na lista? Tem que ter uma lista de opções para se localizar.
  20. Importando a biblioteca conio.h https://cercal.io/instalacao-e-configuração-conio2/
  21. Certo se eu entendo, parte do problema é o procedimento pow. será que é isso que buscas. adicionado 4 minutos depois Ah não! Agora entendo melhor, . Fica pelo menos como outra forma de presentar o procedimento.
  22. void como parâmetro da função main; Isso porque estamos sinalizando negativo para qualquer tentativa de chamar a função com argumentos. A função main é a primeira de todos os programas escritos em C, tem diversos protótipos [forma de se apresentar], main(void) é a formato que comunica ao sistema operacional que ignore qualquer argumento no arranco do programa. Isso é perfeitamente válido, já que não faz uso de argumento. O mesmo para todas as funções declaradas sem parâmetros desta forma o programa fica tecnicamente consistente. Contudo, dentro do contexto tanto faz e resta apenas a lição. int a função precisa comunicar ao sistema operativo como foi realizada o processo do programa retornando um sinal de status, então int main(){ ... return 0;} retorna 0 se tudo ocorreu bem a assim contribuirmos com muitas objetos inerentes ao sistema, alguns compiladores irão força o main a retorna um valor, 0 é sinal de tudo ocorreu bem. Outros valores podem ser atribuídos, entretanto isso não tem importância por enquanto. Essa é prática que remonta os primeiros códigos antes do C inclusive. É mais um metida de segurança, prática que tem por objetivo não envolver valores antigos em operações novas. C opera diretamente cm células de memória, logo pode reutiliza-las o tempo inteiro reiniciar essas células impede o programa de acabar envolvendo valores inúteis [errantes] na lógica. Por exemplo: #include <stdio.h> int my_potencia(); int main(void) { printf("%d", my_potencia("Estranho aceito argumento!? Por quê?", 123.0, 'B', 1)); return 0; } int my_potencia(){ float potencia; for(float step = 0;step < 10e2; step++){ potencia = step + potencia; } return potencia; } a variável potencia pode assumir o valor 0, ou qualquer outro dependendo da sorte. Se assumir qualquer outro não representa mais a soma desejada, se assumir 0 sim. Daí temos que garantir a nulidade de todas as variáveis com tempo torna-se ato-reflexo [faz sem perceber] e útil. %hd Boa pergunta! Não percebi que tinha feito [ato-reflexo], está presente nos programas e livros mais antigos, inclusive eu errei são dois h's e não 1. %hhd, porque a variável tem 1 byte e não 2. A variável char tem largura de 8 bits quando pequemos dados por meio do scanf todos os parâmetros nos argumentos são de um tipo só ponteiro, portanto devemos comunicar o largura que queremos para que a função não extravase a memória reservada, daí usamos as mascaras adequadas para cada tipo, assim quando quiser o tipo char [1 byte] em inteiro use: %hhd ou %hhu. Exemplo: #include <stdio.h> int main(void) { char byte_char; printf("%s\n%s", "Pegar inteiros de 8 bits[0-255]",": "); scanf("%hhd", &byte_char); printf("Digitou 1byte com sinal d: %hhd\n", byte_char); printf("Digitou 1byte sem sinal u: %hhu\n", byte_char); printf("Digitou 4bytes com sinal d: %d\n", byte_char); printf("Digitou 4bytes sem sinal u: %u\n", byte_char); return 0; } Teste para todos valores dentro e fora e igual ao limite [0,255]... Comece por digitando: 255 %g é mais inteligente, porque suprime os 0 quando não significativos e também para números muito grandes ou muito pequenas exibe em notação científica, sua principal vantagem e supressão de 0. Daí para o tipo de programa científico é muito mais adequando, entretanto pode não ser o caso, porém fica a lição. Aprenda mais aqui neste atalho sobre isso e outras coisa a respeito da scanf: http://www.cplusplus.com/reference/cstdio/scanf/
  23. Olá! ### Vamos ver do código abaixo o que mudou no teu. #include <locale.h> #include <stdio.h> int main(void) { float quant = 0, consumo = 0, tempo = 0, pot = 0; char op = 0, apar = 0; setlocale(LC_ALL, "Portuguese_Brazil"); printf("\t\tEfficiEnergy+ \n" "\tEscolha uma das opções:\n " "\t1.Calculadora de consumo mensal\n" "\t2.Dicas de economia\n" "\t3.Analisador em tempo real\n\t4.Sair\n\t: "); scanf("%hd", &op); if (op == 1){ printf("Insira o eletrodoméstico ou aparelho que deseja calcular o " "consumo, quantos aparelhos iguais a este possui em sua " "residência e o tempo médio diário em que fica ligado: "); scanf(" %c %f %f", &apar, &quant, &tempo); consumo = (quant * tempo * (30.0 / 1000.0)); switch (apar){ case 'l': printf("O consumo médio é de %gkW por mês", consumo * 200.0); break; default: puts("Erro!"); } } return 0; } pergunte o que desejar. adicionado 1 minuto depois formatação é meio louca assim, por conta de incompatibilidades entre IDE online e <> code do fórum.
  24. Como ficou o programa?

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!