首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Eiffel编程语言中交换数值?

如何在Eiffel编程语言中交换数值?
EN

Stack Overflow用户
提问于 2019-11-17 18:56:17
回答 1查看 132关注 0票数 0

我在eiffel中这样定义,以交换值。我们不能使用我们在c++中定义的方式。

代码语言:javascript
复制
 swap(x,y):INTEGER
         do
            x;y := y;x
       end

如何在Eiffel中定义函数?我想定义堆排序,但它显示了一些错误,有人能帮我消除对函数的疑惑吗?

代码语言:javascript
复制
 heapsort(array,N):INTEGER  -- heap_sort
            do
                heap_size : INTEGER
                heap_size := N

                build(array,N)

                from i := N until i >=2 loop

                    swap(array(1), array(i))
                    heap_size := heap_size-1
                    heapify(array,1,heap_size-1)

                end
            end
EN

回答 1

Stack Overflow用户

发布于 2019-11-17 22:31:44

Eiffel中的所有变量都是通过值传递的,因此无法传递两个变量或表达式并交换它们的值。因此,swap应该如下所示

代码语言:javascript
复制
swap (i, j: INTEGER; data: ARRAY [...]) -- Here and below `...` stands for the type of elements.
        -- Swap items of `data` at indexes `i` and `j`.
    require
        valid_i: data.valid_index (i)
        valid_j: data.valid_index (j)
    local
        value: ...
    do
        value := data [i]
        data [i] := data [j]
        data [j] := value
    ensure
        new_at_i: data [i] = old data [j]
        new_at_j: data [j] = old data [i]
    end

然后,在示例中对此过程的调用将如下所示

代码语言:javascript
复制
swap (1, i, array)

附注。

  1. 不清楚为什么功能heap_sort会返回整数。此外,它还应指定参数类型,如

heap_sort ( ARRAY : ARRAY...;N: INTEGER)

  • 你真的需要N吗?可以使用array.lowerarray.upper.

  • Code检索数组的下界和上界,并且Eiffel中的声明是分开的,因此您可以编写

local heap_side: INTEGER do heap_size := N

  • until之后的表达式指定循环应该终止的条件。使用当前条件i >= 2,循环将永远不会执行,因为i >= 2从一开始就是true。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58899762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档