Veja nesse artigo qual a diferença entre Procedure e Function em C++.

Na programação é muito comum em qualquer tipo de linguagem se depararmos com Functions (Função) e Procedure(Procedimento).

É comum devido a praticidade de se utilizar na programação onde se encapsula comandos ou métodos dentro e podendo chamar quando precisar.

Function (Função)

Toda função que é criada por obrigação tem que ter um retorno.

Utilizamos funções geralmente quando precisamos calcular algo, retornar algum valor verdadeiro, ou retornar algum teste.

No caso do C++ utilizamos quando realmente precisamos retornar valores, assim o código fica mais limpo.

Sintaxe
Operador nome_funcao(parametros)
{
		Condição;
		Return = nome_variavel;
}	

Procedure (Procedimento)

É quase igual a uma função, mas não precisa necessariamente ter retorno algum.

Geralmente utilizamos procedimentos quando precisamos utilizar alguns códigos que vamos ter que ficar repetindo direto, sendo assim uma procedure concentra nossos códigos e podemos a qualquer momento chama-los.

No caso do C++ é a mesma coisa que todas as programações.

Sintaxe
Operador  nome_procedimento()
{
		Método;
}	

Abaixo uma demonstração de procedimento e função com calculo de média.

#include<stdio.h>
#include<conio.h>

float fmedia(float n1, float n2)//Função
{
      float m = 0;
      m = (n1 + n2)/2;
      return m;
}

float pmedia()//Procedimento
{
      float n1 = 0, n2 = 0, m = 0;

      printf("Digite a nota 1 do aluno: ");
      scanf("%f", &n1);
      printf("Digite a nota 2 do aluno: ");
      scanf("%f", &n2);
      
      m = (n1 + n2)/2;
      printf("\n\nA media do aluno foi %6.2f", m);

           
}

main()
{
      float num1 = 0, num2 = 0;
      int op = 0;
      
    
      printf("Escolha uma das duas opcoes abaixo\n");
      printf("\n=========================================\n");
      printf("\nExibir media por Function? Digite 1");
      printf("\nExibir media por Procedure? Digite 2\n");   
      scanf("%d", &op);
         
      switch (op)
      {
       
       case 1:
            {
                 printf("Digite a nota 1 do aluno: ");
                 scanf("%f", &num1);
                 printf("Digite a nota 2 do aluno: ");
                 scanf("%f", &num2);

                 printf("\n\nA media do aluno foi %6.2f", fmedia(num1, num2));
                 
                 break;      
             }    
           
       case 2:
            {
                 pmedia();
                 break;        
            }     
       }

getch();
}

Conclusão

Sendo assim podemos concluir que, para muitas operações que utilizamos poderíamos concentrar mais os códigos tornando mais fácil a compreensão, e mostrei que não é difícil trabalhar com procedimento e funções, o que tem que saber é como utilizar e a hora que pode utilizar.

Espero que tenham gostado.

Até a próxima.