Você está aqui: C ::: Dicas & Truques ::: Struct (Estruturas, Registros) |
Passando uma estrutura (struct) para uma função (com e sem o uso de ponteiros)Quantidade de visualizações: 14955 vezes |
Muitas vezes precisamos fornecer uma estrutura para uma função. Isso pode ser feito de várias formas, cada uma possuindo características particulares. No trecho de código abaixo nós temos uma função exibir_dados() que recebe uma estrutura e exibe os valores de seus membros. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> // define a estrutura Livro struct Livro{ char *titulo; int codigo; int paginas; }; // método que exibe os dados da estrutura Livro void exibir_dados(struct Livro livro){ // exibe os dados do livro printf("Titulo: %s\nCodigo: %d\nPaginas: %d\n", livro.titulo, livro.codigo, livro.paginas); } int main(int argc, char *argv[]){ // cria uma instância da estrutura Livro Livro a; // preenche os dados do Livro a.titulo = "Programando em Java"; a.codigo = 342; a.paginas = 230; // passa a estrutura Livro para um método exibir_dados exibir_dados(a); puts("\n\n"); system("PAUSE"); return 0; } Este código, embora funcional, possui duas desvantagens. A primeira é que a estrutura inteira está sendo passada para a função, e isso pode prejudicar o desempenho do programa, devido ao uso desnecessário de recursos. A segunda é que qualquer modificação que fizermos, dentro da função, nos valores dos membros da estrutura não terão qualquer efeito na estrutura original. E isso é compreensível, visto que estamos passando uma cópia da estrutura. Qual a solução? Uso de ponteiros. Veja uma nova versão do código: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdlib.h> #include <string.h> // define a estrutura Livro struct Livro{ char *titulo; int codigo; int paginas; }; // método que exibe os dados da estrutura Livro void exibir_dados(struct Livro *livro){ // exibe os dados do livro printf("Titulo: %s\nCodigo: %d\nPaginas: %d\n", livro->titulo, livro->codigo, livro->paginas); } int main(int argc, char *argv[]){ // cria uma instância da estrutura Livro Livro a; // preenche os dados do Livro a.titulo = "Programando em Java"; a.codigo = 342; a.paginas = 230; // passa a estrutura Livro para um método exibir_dados exibir_dados(&a); puts("\n\n"); system("PAUSE"); return 0; } Agora sim. Em vez de passarmos uma cópia da estrutura nós estamos passando apenas seu endereço de memória para a função que exibe os dados. E o melhor, se qualquer alteração nos valores do membros da estrutura for efetuada dentro da função, o resultado será imediatamente visto na estrutura original. Mas, existe uma forma de passar o endereço da estrutura mas evitar que os valores de seus membros sejam alterados dentro da função? Claro que sim! Basta usarmos o modificador const na assinatura da função (antes do nome da variável ponteiro). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // método que exibe os dados da estrutura Livro void exibir_dados(struct Livro const *livro){ // exibe os dados do livro printf("Titulo: %s\nCodigo: %d\nPaginas: %d\n", livro->titulo, livro->codigo, livro->paginas); } Se tentarmos alterar o valor de alguns dos membros da estrutura dentro da função teremos uma mensagem de erro de compilação. No Dev-C++ (usando MingW) esta mensagem é: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- assignment of data-member `Livro::titulo` in read-only structure Lembre-se que aqui nós temos um PONTEIRO PARA UMA CONSTANTE: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Livro const *livro Isso quer dizer que o ponteiro pode apontar para outro local mas o objeto para o qual ele aponta no momento não poderá sofrer modificações. |
![]() |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como criar sua própria função substring() para obter uma substring a partir de uma string em CQuantidade de visualizações: 16846 vezes |
Em algumas situações precisamos obter uma substring a partir de uma string. A linguagem C já fornece algumas funções que tornam isso possível. No entanto, nenhuma destas funções permite especificar o índice inicial da substring. Sendo assim, o trecho de código abaixo mostra como escrever uma função substring() que permite informar a string de origem, o índice inicial e a quantidade de caracteres que serão obtidos. O retorno da função será um ponteiro para a substring obtida:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> char *substring(char *origem, int inicio, int quant){ char *res = origem; int i = 0; // posição inicial menor que 0 ou // posição inicial muito exagerada? if((inicio < 0) || (inicio > strlen(origem))) inicio = 0; // quantidade de caracteres muito exagerada? if(quant > inicio + strlen(origem)) quant = strlen(origem) - inicio; // obtem os caracteres desejados for(i = 0; i <= quant - 1; i++){ res[i] = origem[inicio + i]; } // marca o fim da string res[i] = '\0'; return res; } int main(int argc, char *argv[]) { char texto[] = "Gosto muito de C e C++"; // não podemos bagunçar a string original char sub_temp[128]; strcpy(sub_temp, texto); // 10 caracteres começando // no índice 6 char *res = substring(sub_temp, 6, 10); // exibe o resultado puts(res); // exibe a string original puts(texto); system("pause"); return 0; } Ao executar este código nós teremos o seguinte resultado: muito de C Gosto muito de C e C++ |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular porcentagem em C - Como efetuar cálculos de porcentagem em CQuantidade de visualizações: 28476 vezes |
Cálculos de porcentagens estão presentes em boa parte das aplicações que desenvolvemos. Porém, há momentos em que a mente trava e não conseguimos lembrar com clareza como estes cálculos são feitos, principalmente em C. Esta anotação tem o objetivo de ser uma fonte de pesquisa para os momentos em que suas habilidades matemáticas insistirem em continuar ocultas. Ex: 1 - Suponhamos que um produto que custe R$ 178,00 sofra um acréscimo de 15%. Qual o valor final do produto? Veja o código em C: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Algoritmo que calcula porcentagem em C #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // variáveis usadas na resolução do problema float valor, percentual, valor_final; valor = 178.00; // valor original percentual = 15.0 / 100.0; // 15% valor_final = valor + (percentual * valor); // mostra o resultado printf("O valor final do produto é: %f", valor_final); // O resultado será 204,70 printf("\n\n"); system("PAUSE"); return 0; } Ex: 2 - Um produto, cujo valor original era de R$ 250,00, teve um desconto de 8%. Qual foi seu valor final? Veja o código em C: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Algoritmo que calcula porcentagem em C #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // variáveis usadas na resolução do problema float valor, percentual, valor_final; valor = 250.00; // valor original percentual = 8.0 / 100.0; // 8% valor_final = valor - (percentual * valor); // mostra o resultado printf("O valor final do produto é: %f", valor_final); // O resultado será 230,00 printf("\n\n"); system("PAUSE"); return 0; } Ex: 3 - Em um concurso de perguntas e respostas, um jovem acertou 72 das 90 perguntas apresentadas. Qual foi a porcentagem de acertos? E a porcentagem de erros? Veja o código em C: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Algoritmo que calcula porcentagem em C #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // variáveis usadas na resolução do problema float perguntas, acertos; perguntas = 90.0; acertos = 72.0; // mostra a porcentagem de acertos printf("Porcentagem de acertos: %f%%", ((acertos / perguntas) * 100)); // mostra a porcentagem de erros printf("\nPorcentagem de erros: %f%%", ((perguntas - acertos) / perguntas) * 100); // Os resultados serão 80% e 20% printf("\n\n"); system("PAUSE"); return 0; } Ex: 4 - Um aparelho de CD foi adquirido por R$ 300,00 e revendido por R$ 340,00. Qual foi a porcentagem de lucro na transação? Veja o código em C: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Algoritmo que calcula porcentagem em C #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // variáveis usadas na resolução do problema float valor_anterior, novo_valor, porcentagem_lucro; valor_anterior = 300.0; // valor anterior novo_valor = 340.0; // valor novo // calcula a porcentagem de lucro // efetua o cálculo porcentagem_lucro = ((novo_valor * 100) / valor_anterior) - 100; printf("A porcentagem de lucro foi de: %f%%", porcentagem_lucro); // O resultado será 13,33 printf("\n\n"); system("PAUSE"); return 0; } Ex: 5 - Uma loja repassa 5% do lucro a seus vendedores. Se um produto custa R$ 70,00, qual o valor em reais repassado a um determinado vendedor? Veja o código em C: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // Algoritmo que calcula porcentagem em C #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // variáveis usadas na resolução do problema float valor, percentual, comissao; valor = 70.0; // valor do produto percentual = 5.0 / 100.0; // 5% // calcula a comissão comissao = percentual * valor; // mostra o resultado printf("O valor repassado ao vendedor é: %f", comissao); // O resultado será 3,5 printf("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir arquivos em C usando a função remove()Quantidade de visualizações: 19177 vezes |
A função remove(), disponível no header stdio.h, pode ser usada para excluir arquivos. Veja sua assinatura:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int remove(const char *filename); Veja que esta função recebe o caminho e nome do arquivo a ser excluído e retorna um valor inteiro. Se o arquivo for excluído com sucesso, o valor 0 será retornado. Veja um exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // nome do arquivo a ser excluído char *arquivo = "c:\\testes.txt"; // vamos excluir if(remove(arquivo) == 0) printf("Arquivo foi excluido com sucesso."); else printf("Nao foi possivel excluir o arquivo."); printf("\n\n"); system("PAUSE"); return 0; } |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
GNU Octave - Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em GNU Octave Java - Java Swing - Como criar sua primeira JTree usando um vetor de nomes de linguagens de programação |
Códigos Fonte |
![]() 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 |
![]() 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 |