Ada 火花中的平方和

Ada 火花中的平方和,ada,spark-ada,Ada,Spark Ada,对于一个学校项目,我必须写一篇关于SPARK编程语言的论文,我写了,但是其中的一部分是写一个简短的程序,它接受一个整数n并输出从1到n的平方和。在C++中,程序看起来像这样: #include <iostream> using namespace std; int main() { int n; cin >> n; if (n < 0) return 1; int sum = 0; int i = 0; while

对于一个学校项目,我必须写一篇关于SPARK编程语言的论文,我写了,但是其中的一部分是写一个简短的程序,它接受一个整数n并输出从1到n的平方和。在C++中,程序看起来像这样:

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    if (n < 0) return 1;
    int sum = 0;
    int i = 0;
    while (i <= n) sum += i*i;
    cout << sum;
    return 0;
} 
#包括
使用名称空间std;
int main()
{
int n;
cin>>n;
如果(n<0)返回1;
整数和=0;
int i=0;

而(i我假设您使用GNAT SPARK 2014作为示例程序。您的示例程序已经是有效的SPARK程序

您可以将
Sum\u Of_Squares
函数更改为下面的代码,以计算在控制台上读取的任意整数的和。无需使用数组进行循环。我将
integer
更改为
Natural
,因为我假设您只对大于或等于的数字的平方感兴趣1比0

with Ada.Text_IO;  use Ada.Text_IO;

procedure Main is
   package Nat_IO is new Integer_IO(Natural); use Nat_IO;

   function Sum_Of_Squares (X : in Natural) return Natural is
      Sum : Natural := 0;
   begin
      for I in 1 .. X loop
         Sum := Sum + I ** 2;
      end loop;
      return Sum;
   end Sum_Of_Squares;

   Input : Natural := 0;
begin
   Nat_IO.Get(Input);
   Put_Line (Positive'Image (Sum_Of_Squares (Input)));
end Main;
然而,SPARK的优点之一是添加一些额外的信息,以允许自动证明程序的已定义属性

希望这有帮助

with Ada.Text_IO;  use Ada.Text_IO;

procedure Main is
   package Nat_IO is new Integer_IO(Natural); use Nat_IO;

   function Sum_Of_Squares (X : in Natural) return Natural is
      Sum : Natural := 0;
   begin
      for I in 1 .. X loop
         Sum := Sum + I ** 2;
      end loop;
      return Sum;
   end Sum_Of_Squares;

   Input : Natural := 0;
begin
   Nat_IO.Get(Input);
   Put_Line (Positive'Image (Sum_Of_Squares (Input)));
end Main;