Você está aqui: C++ ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir um diretório em C++ usando a função rmdir()Quantidade de visualizações: 8400 vezes |
Em algumas situações nossos códigos C++ precisam excluir diretórios. Isso pode ser feito com o auxílio da função _rmdir() ou rmdir(), disponível no header direct.h (trazido da linguagem C). Veja a assinatura desta função:int _rmdir(const char *pathname); a) ENOTEMPTY - Directory not empty - O diretório não está vazio e portanto não pode ser excluído; b) ENOENT - No such file or directory - O caminho do diretório é inválido; c) EACCESS - Acesso negado - Algum outro programa está usando este diretório e mantém controle sobre o mesmo. Veja um trecho de código C++ no qual excluímos um diretório: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <direct.h> using namespace std; int main(int argc, char *argv[]){ // vamos excluir este diretório char diretorio[] = "C:\\Dev-Cpp\\estudos"; // vamos testar se houve erro na exclusão do diretório if(rmdir(diretorio) == -1){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório excluído com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } É possível usar a versão Unicode de _rmdir(), ou rmdir(). O método _wrmdir(), também presente em direct.h é útil quando precisamos internacionalizar nossas aplicações. Veja o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <direct.h> using namespace std; int main(int argc, char *argv[]){ // vamos excluir este diretório wchar_t diretorio[] = L"C:\\Dev-Cpp\\estudos"; // vamos testar se houve erro na exclusão do diretório if(_wrmdir(diretorio) == -1){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório excluído com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
Link para compartilhar na Internet ou com seus amigos: |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercício Resolvido de C++ - Um método recursivo que conta de 0 até 10Quantidade de visualizações: 843 vezes |
Pergunta/Tarefa: Escreva um método recursivo que conta e exibe os valores de 0 até 10. Seu método deverá possuir a seguinte assinatura: void contar_recursivamente(int n){ // sua implementação aqui } Sua saída deverá ser parecida com: 0 1 2 3 4 5 6 7 8 9 10 Veja a resolução comentada deste exercício usando C++: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <cstdlib> using namespace std; // método recursivo que conta de 0 até 10; void contar_recursivamente(int n){ // vamos exibir o número atual cout << n << " "; // devemos prosseguir com a recursividade? if(n < 10){ // incrementa o valor de n n++; contar_recursivamente(n); // e faz uma nova chamada recursiva } } // função principal do programa int main(int argc, char *argv[]){ // efetua uma chamada ao método recursivo fornecendo o primeiro valor contar_recursivamente(0); cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
C++ ::: STL (Standard Template Library) ::: unordered_map |
Como contar as frequências de palavras em uma frase ou texto em C++ usando um unordered_mapQuantidade de visualizações: 632 vezes |
Nesta dica mostrarei como podemos usar o mapa não ordenado (unordered_map) da linguagem C++ para contar as frequências das palavras individuais de uma palavra ou texto. O exemplo mostrado aqui serve como base para a criação de aplicações muito interessantes. Veja o código C++ completo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> #include <unordered_map> #include <bits/stdc++.h> using namespace std; // protótipo da função que exibe a frequência de palavras em uma // frase ou texto void exibir_frequencias(const string &frase); int main(int argc, char *argv[]){ // vamos declarar uma frase // retirei acentos e pontuações de propósito string frase = "Gosto de Java e Python pois quero aprender Java"; // mostramos a frase cout << "A frase é: " << frase << endl; // chamamos a função que exibe as frequencias cout << "\nA frequência das palavras é:\n" << endl; exibir_frequencias(frase); cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } // função que exibe a frequência de palavras em uma // frase ou texto void exibir_frequencias(const string &frase){ // vamos declarar um mapa que terá como chave uma string // e como valor um int unordered_map<string, int> frequencias; // agora convertemos a frase recebido como argumento // em um objeto stringstream stringstream ss(frase); // e percorremos as palavras individualmente string palavra; while (ss >> palavra){ // essa palavra já existe no mapa? if (frequencias.find(palavra) == frequencias.end()){ // adiciona esta palavra ao mapa frequencias[palavra] = 1; } else{ // já existe. Vamos incrementar esta frequência frequencias[palavra] = frequencias[palavra] + 1; } } // agora percorremos o mapa não ordenado, acessando // cada chave e mostrando a frequencia de cada palavra unordered_map<string, int>:: iterator p; for (p = frequencias.begin(); p != frequencias.end(); p++){ cout << "(" << p->first << ", " << p->second << ")\n"; } } Ao executar este código C++ nós teremos o seguinte resultado: A frase é: Gosto de Java e Python pois quero aprender Java A frequência das palavras é: (aprender, 1) (quero, 1) (pois, 1) (Gosto, 1) (Java, 2) (e, 1) (de, 1) (Python, 1) |
C++ ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como usar ponteiros em C++ - Apostila de C++ para iniciantesQuantidade de visualizações: 7965 vezes |
Antes de pensarmos em ponteiros, é importante nos lembrarmos de alguns aspectos referentes à variáveis. Dependendo do seu conhecimento de programação, você deve saber que variáveis possuem nomes que as identificam durante a execução do programa. Você deve saber também que uma variável armazena um valor (que pode ser fixo, no caso de uma constante, ou pode mudar durante a execução de seus códigos). O que poucos programadores se lembram é que uma variável possui um endereço, e que o nome da variável não é nada mais que um apelido para a localização deste endereço. Desta forma, um ponteiro não é nada mais que um tipo especial de variável que armazena o endereço de outra. Veja um exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]){ // variável do tipo int int valor = 10; // ponteiro para uma variável do tipo int int *p = &valor; // exibe o valor da variável "valor", apontada // pelo ponteiro p cout << *p << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Neste código nós temos a declaração e definição de duas variáveis: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int valor = 10; int *p = &valor; A primeira variável é uma variável do tipo int e a segunda é um ponteiro para uma variável do tipo int. Veja que devemos sempre usar "*" antes do nome de um ponteiro em sua declaração. O símbolo "&" serve para indicar que estamos acessando o endereço de uma variável e não o seu conteúdo. O resultado destas duas linhas é que agora temos um ponteiro que nos permite acessar e manipular a variável valor. Observe a linha: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- cout << *p << endl; Aqui nós estamos acessando o valor da variável apontada por p. Veja o uso do símbolo "*" para acessar o valor da variável. Isso é chamado de desreferenciamento de ponteiros. Pareceu complicado? Veja uma linha de código que altera indiretamente o valor da variável valor para 30: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- *p = 30; Ponteiros são ferramentas muito importantes na programação em C++. No entanto, é preciso ter muito cuidado ao lidar com eles. A primeira coisa a ter em mente é que um ponteiro não está apontando para nenhum lugar até que atribuimos a ele o endereço de uma outra variável. E é aí que mora o perigo. Um programa entra em colapso absoluto se tentarmos acessar um ponteiro que aponta para um local de memória que já foi liberado novamente ao sistema. No caso menos grave, estaremos tentando acessar locais de memória inválidos ou reservados a outros programas ou tarefas do sistema operacional. Isso me lembra os velhos tempos da tela azul de morte. |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Número de Reynolds O parâmetro que determina se o regime de escoamento de um fluido é laminar ou turbulento recebe o nome de "número de Reynolds". Nesse contexto, analise as seguintes afirmativas com (V) para as verdadeiras e (F) para as falsas. ( ) I. Quando Re ≤ Re,Crítico , o escoamento é considerado turbulento. ( ) II. O escoamento turbulento é caracterizado por camadas paralelas. ( ) III. O escoamento turbulento é aquele em que as partículas do fluido se misturam rapidamente enquanto se movimentam. ( ) IV. O número de Reynolds pode ser calculado pela equação: Re = γ × g × V. ( ) V. Para tubos com paredes lisas, Re,Crítico = 40.000. Marque a alternativa com a ordem correta. A) V, F, F, V, F. B) V, F, V, F, F. C) F, F, V, F, V. D) F, V, F, V, V. E) V, V, V, F, F. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Ética Empresarial e Profissional: Noções Gerais Para Cortella (2007), a ética é um grupo de princípios e valores que usamos para optar entre três situações significativas da nossa existência. Elas estão presentes em nosso cotidiano e, por essa razão, é necessário estar preparado para efetuar a escolha da melhor forma possível. Assinale a alternativa que contém as três grandes situações que nos afligem e requerem decisão. A) Quero; devo; é verdadeiro. B) É falso; posso; quero. C) Quero; devo; posso. D) Posso; moral; certeza. E) Posso; devo; religiosidade. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira |
Perfil em aço Alguns materiais fazem parte do processo de produção do aço ou até são resultantes de suas variações. Eles apresentam características que diferem entre si. Um desses materiais contém de 3 a 4% de carbono em sua composição. Assinale a alternativa que indica corretamente qual é esse material. A) Aço. B) Aço macio. C) Ferro fundido. D) Ferro forjado. E) Aço de médio carbono. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Domínios de Deformações Vigas de concreto armado, com seções submetidas a um momento fletor e a um esforço cortante, são dimensionadas de tal forma que se determine uma armadura longitudinal para resistir ao momento fletor e uma armadura transversal para resistir ao esforço cortante. Analise as informações a seguir, a respeito da solicitação normal do tipo momento fletor: I) Solicitação de flexão simples ocorre quando a única solicitação atuante é o momento fletor. II) Solicitação de flexão composta ocorre quando, além do momento fletor, há uma força normal atuante. III) Solicitação de flexão oblíqua ocorre quando o plano de flexão compreende um eixo de simetria da seção transversal. Assinale a alternativa correta: A) Somente a afirmação I está correta. B) Somente as afirmações I e II estão corretas. C) Somente a afirmação II está correta. D) Somente a afirmação III está correta. E) Somente as afirmações II e III estão corretas. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Ética, Legislação e Entidades que regulamentam a profissão Você estudou sobre a aplicação do método de solução de problemas de engenharia para fins de análise e solução de dilemas éticos na profissão. Com base nessa ferramenta, as alternativas abaixo apresentam etapas de análise e solução de problemas éticos, exceto: A) Definição do problema e determinação dos objetivos. B) Identificação de soluções alternativas e de restrições. C) Escolha de uma solução e testes de potenciais impactos da solução. D) Negociação e aprovação da solução pelo ente envolvido, a fim de evitar atritos. E) Documentação e comunicação da solução. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |