Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?
Mostrando postagens com marcador Função. Mostrar todas as postagens
Mostrando postagens com marcador Função. Mostrar todas as postagens

Apostila de C - Função (Lista 6)

Neste tutorial de nossa Apostila C Progressivo, vamos propor as questões do Curso de C da UFMG sobre o assunto Função, em seguida iremos comentar e resolver cada um dos exercícios.

A função realloc(): realocando memória dinamicamente e a calloc()

Neste tutorial de nossa apostila de C, iremos aprender o que é a função realloc(), para que serve o realocamento de memória, vamos ver como fazer isso através de exemplos de códigos comentados, alar sobre a função calloc(), além de dar mais dicas sobre alocação dinâmica de memória.

Esta função completa nosso estudo sobre a alocação dinâmica, junto com os artigos sobre a função malloc() e sobre a liberação de memória com a função free().

A função free() - Liberar e evitar vazamento de memória

No artigo passado de nossa apostila de C, ensinamos o como alocar memória de uma maneira dinâmica, através da função malloc() da biblioteca stdlib.h

Agora vamos ensinar como liberar essa memória que foi previamente alocada, que é um bom hábito que evita um famoso problema, o vazamento de memória. E ao término do tutorial, vamos resolver um exercício que foi proposto no artigo passado, onde iremos mostrar o uso das funções malloc() e free().

Passando structs por referência para funções - O operador ->

Antes de mais nada, vamos deixar bem claro que, à rigor, não existe passagem por referência em linguagem C.
Mas por que vemos tanto falarem sobre isso, se não existe?

Na verdade, o que existe é uma espécie de 'truque', que é passar o endereço de memória, através de ponteiros, para funções, simulando uma passagem por referência.

Então não há problema em falar de passagem por referência em C, apenas use seu bom senso.

Como enviar uma struct para uma função

Conforme você estudou pelos tutoriais sobre funções em C, sabe que para passar uma variável ou vetor para uma função, devemos declarar a função com o tipo de dado esperado.
Algumas semelhanças continuam, conforme veremos nesse artigo.

Código comentado sobre como criar o Jogo da Velha em C


No artigo passado de nosso curso de programação, mostramos o código-fonte do Jogo da Velha em C, além de explicar a razão pela qual você deve tentar fazer, de qualquer jeito, uma versão totalmente sua do jogo.

Agora vamos explicar, passo a passo, a lógica da programação do jogo bem como cada detalhe do código.

Como programar o Jogo da Velha em C

Jogo da Velha em CAgora que já ensinamos os conceitos básicos da linguagem C, os testes condicionais e loopings, Funções e Vetores (matrizes), vamos colocar em prática nossos conhecimentos para criar algo interessante:
O Famoso Jogo da Velha

Nesse tutorial vamos ensinar as regras como se jogar em nosso aplicativo, bem como a lógica do jogo.
É importante você tentar fazer o seu, pois só assim você irá aprender.

Não tenha medo, a primeira vez que tentamos, o código fica gigantesco e confuso.
Mas o começo é assim mesmo.

No próximo artigo, vamos comentar cada parte do código aqui mostrado, ensinando passo-a-passo como se cria o jogo.

Exercícios propostos sobre Strings

Usando os conceitos ensinados aqui em nossa apostila de C, especificamente sobre Strings em C, crie funções que façam as seguintes tarefas:

Como implementar as funções da biblioteca string.h

Nós falamos, aqui em nossa apostila de C, no tutorial sobre as funções da biblioteca string.h, das principais funções e como usá-las.

Porém, é um excelente exercício tentar implementá-las!
Isso mesmo, tente criar sua própria biblioteca em C, que trata strings.
Fazendo isso, garantimos que você terá total domínio sobre as tão 'temidas' strings, em C.

strcpy - Como copiar uma string em C

  • strcpy: char *strcpy( char *dest, char *orig );
Fornecemos a string de origem e ela é copiada e armazenada na string de destino, não importando como era a string de destino anteriormente.


strlen - Como calcular o número de caracteres em uma string

  • strlen: int strlen( char *str );
A função strlen() retorna o número de caracteres contidos na string str, sem contar com o caractere delimitador \0.

memcmp - Saber se uma string é menor, maior ou igual a outra

  • memcmp: int memcmp( char *str1, char *str2, int n );
Vamos aprender como implementar a função memcmp(), que recebe duas strings e compara seus 'n' primeiros elementos, de forma lexicográfica.

Se a string 1 for menor que a string 2, retorna -1.
Se a string 1 for maior que a string 2, retorna 1.
Se as strings forem iguais, retorna 0.

memcpy - Copiando caracteres de uma string para outra

  • memcpy: char* memcpy( char *dest, char *src, int n );

Copia os 'count' primeiros caracteres da string 'src' e coloca nas primeiras 'count' da string 'dest'.

Lendo e Escrevendo Strings em C

Que 99,99% dos aplicativos em C, ou de qualquer outra linguagem, usam strings e caracteres para mostrar textos, nós já convencemos você.

Mas só mostrar não adianta muita coisa, geralmente é preciso receber strings do usuário.
Afinal, quem nunca forneceu o nome pra ficar no ranking daquele jogo, data e local de nascimento, nome dos pais e outros tipos de texto?

Nesse tutorial sobre strings em C, vamos ensinar como receber textos do usuário.

Variáveis apontadas - A Passagem por Referência em C

Já vimos como declarar e inicializar ponteiros em C, bem como estudamos a teoria por trás dos endereços de memória e blocos de memórias, vamos mostrar agora em nossa apostila a maior utilidade dos ponteiros, que é trabalhar com os valores das variáveis para qual eles apontam, e alterar seu valor.

A função sizeof() e os blocos vizinhos de memória

No artigo introdutório desta seção sobre ponteiros nossa apostila de C, demos uma ideia sobre o que são ponteiros em C, além de falarmos sobre os endereços de memória.

Agora, nesse artigo, vamos entrar mais a fundo no estudo da memória e ver, de fato, onde as variáveis estão sendo declaradas e um importante relação entre ponteiros e variáveis que ocupam vários bytes. 

Passagem por Referência - Como copiar vetor e matriz em C

Se você tiver notado bem nosso tutorial passado, sobre como passar vetores(arrays) e matrizes(vetores multidimensionais) em linguagemC, nós passamos vetores para funções, e essas alteravam os valores contidos nesses vetores.

Em um tutorial da seção sobre Funções em C, sobre variáveis locais, também dissemos que quando passamos variáveis para funções, seus valores não são alterados, pois as funções trabalhavam em cima de uma cópia da variável, e não na variável em sim, e dissemos que isso era chamado de passagem por valor.

Agora, em nossa apostila de C, vamos aprender um pouco sobre passagem por referência, em C, que é um tipo especial de passagem.

Como passar vetores, ou arrays, e Matrizes (vetores multidimensionais) para funções em C

Agora que você já domina bem o uso das funções e dos vetores em C, vamos unir esses dois conhecimentos e ensinar você como passar vetores (unidimensionais, multidimensionais, matriz), ou arrays, para funções.

Como o curso C Progressivo vai mostrar, para programar em C é bem comum passar vetores, e outras estruturas de dados, para funções.

Como você viu nos exemplos passados de nossa apostila de C, dá um certo trabalhinho lidar com vetores.
E para o código não ficar confuso e grande na main(), costumamos colocar os códigos que operam vetores em funções.

Exercícios resolvidos sobre funções em C

Vamos agora resolver as questões propostas e comentar, em detalhes, os códigos das questões sobre funções que propomos no artigo passado em nosso curso online de C.