Разница в синтаксисе. Конечно, в разных языках по разному оформляется. Но в среднем
процедура:
Код:
call matrix_input (A,1,n)
call matrix_input (B,1,n)
функция:
Код:
SP=scalar_prod(A,B)
Вопрос о возвращении результата чисто терминологический. Функция непосредственно возвращает результат, то есть переменной присваивается значение функции.
Процедура в процессе выполнения изменяет глобальные переменные, что может делать и функция, кстати.