Ir ao conteúdo
  • Cadastre-se

kampa896

Membro Pleno
  • Posts

    77
  • Cadastrado em

  • Última visita

Tudo que kampa896 postou

  1. @arfneto entendi, meu amigo. Agora a recursão ficou mais clara e consegui rodar o código. Vou procurar esse conteúdo de CSV que mencionou. Vai me ajudar demais a aprender a trabalhar com arquivos e arquivo CSV em linguagem C. Obrigado pela atenção de sempre.
  2. @arfneto, @codigo rápido obrigado, pessoal. Estou no primeiro ano de faculdade e tenho várias dúvidas. Como a faculdade é EAD, o fórum aqui muitas vezes me ajuda mais rápido e com explicações mais claras que a tutoria. Fora a atenção que recebo dos senhores. Desculpa se as vezes a pergunta é simples demais, mas estou me esforçando. Mais um vez, agradeço. Vou terminar de entender essa parte de recursão e entrar em manipulação de arquivos, utilização de arquivos CSV em C e qualquer dúvida posto aqui no fórum. Obrigado!
  3. @codigo rápido agora sim, meu amigo. Ficou claro porque a função recurso funciona sem outras variáveis. A função vai utilizando as informações que ela mesma produz. Se o último processo chamado é o primeiro a terminar, faz sentido ela utilizar os return dos demais. Vou pesquisar pilhas também. Obrigado mais uma vez!
  4. @codigo rápido agora sim eu entendi. Quando eu comentei a chamada da função, funcionou da mesma forma. Então era o 'while' que estava calculando. Pelo que eu percebi, as funções recursivas colocam as variáveis tipo em pilha, é isso? Pra chegar no resultado final. Estou tendo essa dificuldade de entender o processo da recursividade.
  5. Obrigado a todos. Entendi a ideia, mais ou menos. Vou continuar praticando. Meu código ficou dessa forma, utilizando as ideias gerais que me passaram, principalmente do retorno que a função deve ter. #include <stdio.h> int multiplica(int valor, int base, int cont, int exp); int main(){ int base, expoente, resultado; printf("Digite a base: "); scanf("%d", &base); printf("Digite o expoente: "); scanf("%d", &expoente); resultado = multiplica(base, base, 2, expoente); printf("%d", resultado); return 0; } int multiplica(int valor, int base, int cont, int exp){ if(exp == 0){ return 1; } if(exp == 1){ return base; } if(exp == 2){ return base * base; } while(cont <= exp){ if(cont == 2){ valor = base * base; cont++; multiplica(valor, base, cont, exp); } else{ valor = valor * base; cont++; multiplica(valor, base, cont, exp); } } return valor; }
  6. @arfneto como sempre, muito obrigado pelas orientações!
  7. Pessoal, boa tarde. Estou iniciando meus estudos em C, e estou com algumas questões pra praticar, juntamente com questões propostas pela faculdade. Eles deram o seguinte problema: "Faça, em linguagem C, uma função recursiva para o cálculo potenciação. Sabe-se que o cálculo pode ser feito através de multiplicações sucessivas. Para demonstrar o funcionamento utilize o primeiro digito do seu RU como base e o último digito como expoente." Fiz um código aqui, mas não estou entendendo a saída dele. #include <stdio.h> void multiplica(int base, int cont, int exp); int main(){ int base, expoente; printf("Digite a base: "); scanf("%d", &base); printf("Digite o expoente: "); scanf("%d", &expoente); multiplica(base, 2, expoente); #include <stdio.h> void multiplica(int base, int cont, int exp); int main(){ int base, expoente; printf("Digite a base: "); scanf("%d", &base); printf("Digite o expoente: "); scanf("%d", &expoente); multiplica(base, 2, expoente); return 0; } void multiplica(int base, int cont, int exp){ int aux; if(exp == 0){ aux = 1; } if(exp == 1){ aux = base; } if(exp == 2){ aux = base * base; } while(exp > 2 && cont <= exp){ if(cont == 2){ aux = base * base; cont++; multiplica(aux, cont, exp); } else{ aux = aux * base; cont++; multiplica(aux, cont, exp); } } printf("%d", aux); } return 0; } void multiplica(int base, int cont, int exp){ int aux; if(exp == 0){ aux = 1; } if(exp == 1){ aux = base; } if(exp == 2){ aux = base * base; } while(exp > 2 && cont <= exp){ if(cont == 2){ aux = base * base; cont++; multiplica(aux, cont, exp); } else{ aux = aux * base; cont++; multiplica(aux, cont, exp); } } printf("%d", aux); } Ele está apresentando a seguinte saída, anexada na postagem. Alguém poderia me dar um auxílio?
  8. Esclareceu as minhas dúvidas, meu amigo @.if, muito obrigado!
  9. Boa tarde, pessoal. Estou com uma dúvida sobre impressão de texto na tela em negrito, e não achei material na internet. No livro "C Completo e Total" do Herbert Schildt também não consegui informação a respeito. Achei em um blog o seguinte código, mas não consegui entender a lógica que ele utilizou. Se alguém puder me ajudar, agradeço. #include <stdio.h> void bold(int status) { static const char *seq[] = {"\x1b[0m", "\x1b[1m"}; printf("%s", seq[!!status]); } int main(void) { printf("one "); bold(1); printf("two "); bold(0); printf("three\n"); return 0; }
  10. Mais uma vez, obrigado pelas dicas, meu amigo @arfneto! Vou continuar estudando a linguagem C e algoritmos e qualquer dúvida continuo contando com o apoio de todos.
  11. @arfneto caramba, que explicação top. Obrigado, meu amigo. Abriu minha mente para esses tópicos.
  12. Bom dia, pessoal. Estou com um problema em uma questão em C. Este exercício faz parte de um site de desafios de programação. Eu fiquei um tempo sem estudar por causa do serviço e estou voltando agora. A questão é a seguinte: Tio Patinhas era um milionário que vivia em sua mansão, e tinha três sobrinhos: Huguinho, Zezinho e Luisinho. Ele se confundia facilmente entre os três sobrinhos, pois eram bem parecidos, apesar de terem idades diferentes. Um dia, os três fizeram uma aposta com o tio: se ele acertasse quem era o sobrinho do meio, ou seja, nem o mais novo, nem o mais velho, eles dariam uma moeda de ouro para ele, e se ele errasse, teria que dar uma moeda de ouro para cada um. Assim, o tio pede a tua ajuda para que ele possa ganhar essa aposta. Entrada A entrada consiste em vários casos de teste. Cada caso contém três valores inteiros H, Z e L, que representam as idades de Huguinho, Zezinho e Luisinho, respectivamente. Saída Para cada caso de teste imprima o nome do sobrinho do meio, com letras minúsculas. 5 6 7 zezinho 7 5 6 luisinho 6 7 5 huguinho #include <stdio.h> int main() { int H, Z, L; char h[] = "huguinho", z[] = "zezinho" , l[] = "luisinho", enter; while(scanf("%d %d %d%c", &H, &Z, &L, &enter) != EOF){ if(H < Z && Z < L){ printf("%s\n", z); } else if(Z < L && L < H){ printf("%s\n", l); } else{ printf("%s\n", h); } } return 0; } De acordo com o site dos desafios, meu código apresenta 15% de erro do código correto. Alguém poderia me dar uma ajuda? Realizando alguns testes, a resposta sempre bate com a correta.
  13. @Midoriobrigado pelas explicações, estou no mesmo trabalho que o amigo aí em cima. Porém só não entendi uma parte do código. c_chave = ord(chave[i % len(chave)]) Poderia explicar porque o "[i % len(chave)]? Não entendi porque a iteração tem que ser módulo len(chave).
  14. Boa noite, pessoal. Estou começando a aprender linguagem Python por causa da faculdade, especificamente, pelas ferramentas matemáticas que o Python fornece. Instalei a versão 3.9 do Python no Linux, Ubuntu 20.04. E criei dois ambientes virtuais. Um pra aprender o básico do Python, e outro pra usar na faculdade. Como a matéria necessita das ferramentas matemáticas, precisei instalar a biblioteca SymPy. Instalei utilizando o comando "pip install sympy". Porém, após a instalação, o terminal acusou que não está no PATH do sistema. Por ser uma biblioteca, também necessita configurar o PATH? E outra dúvida, como eu crio os ambientes virtuais distintos, apesar da biblioteca estar no sistema operacional, preciso instalar separadamente no ambiente virtual? Utilizo o comando virtualenv para definir os ambientes virtuais. Desde já agradeço a atenção dos senhores.
  15. @KXSY obrigado pelas dicas, meu amigo. Já salvei aqui pra ler com calma depois. Mas a minha dúvida é outra. Eu utilizei a formatação de limite de campos para a impressão do printf. Porém, o mesmo código manteve o alinhamento no sistema Windows, como mostrou nosso amigo @devair1010. Já no Linux, a impressão que envolvia a palavra "Água", não manteve o alinhamento, como nas demais linhas. Sobre a impressão correta dos caracteres, eu entendi como faz. A minha dúvida é se o carácter especial, por exemplo aqueles que levam acento, são ocupados de maneira diferente na string. E acabei de ver aqui pelo debug do Eclipse que o que eu suspeitava é isso mesmo. A palavra "Água" ocupa 5 espaços. Mas de qualquer forma, este artigo da USP me será muito útil. Obrigado pela atenção. O outro assunto que você me encaminhou acho que ainda é muito avançado. Obrigado mesmo assim!
  16. @devair1010 obrigado pela atenção, meu amigo. Vou testar em outro IDE. Estou usando o Eclipse no Linux. E antes de rodar em outro IDE, irei testar pelo terminal, bem lembrado. Obrigado! @devair1010 creio que seja no sistema Linux. A execução pelo terminal também apresenta o mesmo problema.
  17. Boa noite, amigos do Fórum. De antemão, gostaria de agradecer todo o suporte que vocês tem me dado durante meu aprendizado na linguagem C. Estou conforme vou avançando nos assuntos, acompanhando pelos livros indicados, e resolvendo alguns exercícios para fixação. E agora me surgiu um, sobre a utilização de alguns detalhes da função printf. Estou usando o recurso de largura mínima de impressão do campo, para questões estéticas no momento de impressão, como se fosse uma tabulação, para alinhar a impressão. Porém, ao utilizar um carácter com acento, esta é a única linha que sai do padrão. Isso implica alguma explicação da forma que a linguagem interpreta esses caracteres especiais? #include <stdio.h> int main(){ //Declarando as variáveis do programa int item, codigo; char produto[16]; float preco; /* Imprimindo as tabelas com item, produto, código e preço com formatação de largura mínima de campo para tabulação */ printf("%6s %-16s %-10s %-6s\n", "ITEM", "PRODUTO", "CÓDIGO", "PREÇO"); printf("%6s %-16s %-10s %-6s\n", "1", "Cachorro-quente", "100", "5,00"); printf("%6s %-16s %-10s %-6s\n", "2", "X-salada", "101", "8,79"); printf("%6s %-16s %-10s %-6s\n", "3", "X-bacon", "102", "9,99"); printf("%6s %-16s %-10s %-6s\n", "4", "Misto", "103", "6,89"); printf("%6s %-16s %-10s %-6s\n", "5", "Salada", "104", "4,80"); printf("%6s %-16s %-10s %-6s\n", "6", "Água", "105", "3,49"); printf("%6s %-16s %-10s %-6s\n", "7", "Refrigerante", "106", "4,99"); return 0; } Como os colegas podem ver na imagem em anexo, a única linha que sai do alinhamento da impressão é a linha que contém o carácter especial de acento da palavra "Água". Alguém poderia me ajudar? Eu poderia incluir um espaçamento no comando de impressão, mas gostaria de entender o porquê isso aconteceu somente nesta linha.
  18. @mauro_b o entendimento do exercício é exatamente o que o nosso colega citou aqui em cima, não entendi sua pergunta. A conversa toda é explicação do problema, a resposta não está apenas em uma mensagem, leia tudo que entenderá o assunto.
  19. Boa tarde, @mauro_b. Como assim duas falhas como uma? Eu não tinha entendido o porque o EOF não retornava ao inserir uma variável de tipo diferente da declarada. Mas os companheiros aqui já me explicaram e estão me ajudando muito no estudo da linguagem C.
  20. Tem razão, desculpa o outro amigo aí, @V1OL4DOR, era para marcar o outro companheiro @V!OLADOR.
  21. Caramba, pessoal. Muito obrigado. Entendi perfeitamente agora o que seria um EOF. E sim, algumas coisas eu ainda não entendi, mas tenho certeza que no momento certo as dúvidas surgirão e qualquer coisa recorro a vocês novamente. Mais uma vez, muito obrigado pelo tempo e atenção de vocês, @V1OL4DOR e @arfneto!
  22. Como sempre, vocês salvando a minha pele. Obrigado @V1OL4DOR e @arfneto. Entendi as colocações de vocês e cada dia mais ampliando meu entendimento em linguagem C. Só uma última dúvida. Se eu instanciei uma variável com unsigned short int, e a leitura pela teclado foi de um outro valor, que não é compatível, tipo um inteiro muito grande ou um inteiro negativo, já não tinha que ter erro de leitura e o programa parar? Ou é apenas o erro de leitura realmente, como o @V1OL4DOR explicou? Que é raro de acontecer. Apesar de ter lido uma variável incompatível com o tipo criado, o stdin leu, apenas não armazenou. E por isso não retornaria EOF. É isso?
  23. Pessoal, boa noite. Estou com uma dúvida sobre a utilização do EOF durante leitura com scanf. O sistema é Linux, Ubuntu 20.04. Graças ao pessoal do Fórum, adquiri uns livros sobre linguagem C e estou iniciando meus estudos. Já entendi que o C deixa grande parte dos erros cometidos pelo programador e roda a aplicação mesmo assim. Companheiros aqui do fórum me ensinaram a melhorar o desempenho do compilador, com um comando de otimização, para localizar os erros que possam ocorrer. Porém mesmo assim, o problema roda normalmente. Estou com dificuldade para entender o macro EOF após uma tentativa de leitura com scanf. O scanf retorna o número de itens que ele conseguiu ler e atribuir com êxito, a um valor. Caso ocorra algum problema na leitura, retorna EOF. Porém, um exemplo de código abaixo, ele não registra o erro e apesar do loop com condição falsa, roda normalmente. Alguém poderia me ajudar? #include <stdio.h> int main() { unsigned short int reclamar; while(scanf("%hd", &reclamar) != EOF){ if(reclamar == 0){ printf("vai ter copa!\n"); } else{ printf("vai ter duas!\n"); } } return 0; }
  24. Ah sim, @arfneto, desculpa não ter entendido o que você quis dizer, muitos termos que não fizeram sentido pra mim, mas nessa segunda explicação, ficou claro o seu comentário. Obrigado pelo apoio e tempo gasto pra analisar meu tópico e contribuir. Não é à toa que o Clube do Hardware se destaca até hoje, mesmo sendo tão antigo.
  25. @arfneto desculpa, meu amigo, mas sou iniciante demais pra entender o que você quis dizer. Isso foi uma crítica ou um elogia a linguagem C?

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!