Sahte kodda: ne anlama geliyor?


25

Algoritmik Uygulama başlıklı bölüm aşağıdaki koda sahiptir:

// Return RC low-pass filter output samples, given input samples,
 // time interval dt, and time constant RC
 function lowpass(real[0..n] x, real dt, real RC)
   var real[0..n] y
   var real α := dt / (RC + dt)
   y[0] := x[0]
   for i from 1 to n
       y[i] := α * x[i] + (1-α) * y[i-1]
   return y

ne demek: = ne demek?


2
Bunun felsefe ve mantık gösterimi olduğunu öğrendim, onu ": = =" olarak tanımladı, yani x: = 1, x 1 olarak tanımlandı
Patrick Hughes

3
1990 yılında AP bilgisayar bilimi aldığımda Pascal'ı öğrenme dilimiz olarak kullandık. Ben her zaman :="eşittir" olarak ertelendi . Ben aslında bunu tercih ediyorum =ve =="=" doğal dilde bir karşılaştırma operatörü (veya en azından doğruluk beyanı).
TecBrat

Yanıtlar:


59

: = tek eşittir işareti eşitlik testi kullanan diller için atama işleci. Bu dillerden en bilinenleri Pascal'dır. C'nin etkisiyle çoğu dil, atama için = ve sınama için == olarak değiştirildi. Bu tarz stillerde eğitilmiş bazı eski metinler ve yazarlar şunları kullanır: = sözde kod için. Bazen atamalar için <- oklarını da görürsünüz .

Makaleden:

input: an array a of length n with array elements numbered 0 to n − 1

inc ← round(n/2)
while inc > 0 do:
    for i = inc .. n − 1 do:
        temp ← a[i]
        j ← i
        while j ≥ inc and a[j − inc] > temp do:
            a[j] ← a[j − inc]
            j ← j − inc
        a[j] ← temp
    inc ← round(inc / 2.2)

Bazı modern diller atama için okları kullanır; en önemlisi , yerel atama için tek eşittir (=) kullanılırken küresel atama için kullanılan R.

Sebesta'nın Programlama Dilleri Kavramlarından ve Dr. KN King'in ders notlarından, ödev standartlarının C veya Pascal'dan çok daha ileri gittiğini öğreniyoruz. 1958'de Algol tasarlanırken, şunları kullanmaya karar verilmiştir: = atama için. Komite Amerikan ve Avrupa temsilcilerinden oluşuyordu. Komitedeki Almanların bir kısmı Konrad Zuse'nin Plankalkul dilini (II. Dünya Savaşı sırasında hazırlanmış ancak 1972 yılına kadar yayınlanmamış ve 2005 yılına kadar uygulanmamıştır) tanıdıktı ve bu dilin önerilen atama yöntemini takip etmesini istedi.b+c => aburada b + c a'ya atanır. Komite bunu = olarak değiştirdi: programa bir tuş vuruşu adı verilen zamanda program girme yönteminin kullanmak için ">" bulunmadığı gerekçesiyle. Böylece eşittir kolonundan ödün verdiler. Bununla birlikte, Amerikalılar FORTRAN'a aşina olmak (1990'a kadar küçük bir davaya sahip değildi), FORTRAN'ın yaptığı şekilde sola doğru çalışmasını istedi.

Böylece değiştirmeyi başardılar: = bunun yerine atama, FORTRAN (bilinen bir uygulamalı dil) yerine Plankalkul (Almanya dışında neredeyse bilinmeyen bir dil) yerine, sağa değil de sola doğru ilerlesinlerdi. . Algol 60, Pascal ve C de dahil olmak üzere sonraki bütün zorunlu emir dillerini güçlü bir şekilde etkilemiştir.

ALGOL matematiksel notalara okunması kolay ve yakın olacak şekilde tasarlanmıştır. Gelecek 20+ yıl boyunca dergilerde algoritmalar yazmak için de facto (ve temelde de jure) standardıydı. Bu nedenle, 1960'tan 1980'e kadar eğitim almış olan eğitmenler ve bilgisayar bilimcileri bu tip bir gösterime aşina olmuş olacaklardı.

IBM 029 Keypunch'ın 1964'te piyasaya sürülmesi, > ve <karakterlere izin verdi, böylece diğerlerine C'ye dahil olmalarını sağladı.


1
Eksik noktalı virgüllerin ve işlev dönüş türlerinin yanı sıra bu kod yine de PASCAL, MODULA veya başka bir Wirth dili gibi görünür.
Ingo

7
çoğu sahte kod :=atama için kullanılır . matematiksel geçmişi olan insanlar da bunu destekleyecektir.
oenone

3
Sadece PL / SQL'de pratikte hala kullanıldığını eklemek için.
Jalayn

1
neden bilmiyorum, ama görev olarak sol ok sadece beni deli ediyor 9
shabunc

2
Pascal (ve "Wirth dillerinin" geri kalanı) onu matematiksel gösterimlerden alan ALGOL'den aldı.
Mason Wheeler

18

Sadece hızlı ve bilgiçlikli bir not. Sahte kod oldukça gayrı resmidir , yani ": =" yalnızca ne demek istediğinizi belirtir. Diğerlerinin de dediği gibi, Pascal gibi belirli diller eşitlik için "=" ile karışıklığı önlemek için atama için ": =" kullanırken, diğer diller aynı amaç için "=" ve "==" kombinasyonunu kullanır.

Gerçek Sahte kod söz konusu olduğunda, "=", "==", "eşittir", ",", ":" = = "," "", "alır" veya teknenizi ne kayarsa kullanabilirsiniz. Tutarlı olduğunuz sürece ve kullanım ve içerik sözde kodunuzda olduğu sürece açıktır.


6

Sanırım onun ataması (Delphi'deki atama operatörü olduğunu düşünüyorum), bu nedenle y [0]: = x [0] 'da x [0]' a y [0] 'a atarsınız.

Fakat AFAIK standart bir sahte kod diye bir şey yoktur , bu yüzden teoride her şey olabilir: =).


8
@loudsight: Çünkü = zaten bir var çok farklı eşitliği: anlamı. Farklı bir şey için zaten iyi anlaşılmış bir anlama sahip bir operatör kullanmak son derece aptalca olurdu.
Jörg W Mittag

1
@ Jörg W Mittag Peki, hedef kitlenin kim olduğuna bağlı. Çoğu geliştirici için hayal ediyorum (Java, C / C ++, vb ..) = atama anlamına gelir.

5
@loudsight: Çoğu geliştirici, ilk sözde kodu yazıldığı zaman bile doğmamıştı. O zamanlar, çoğunlukla yapar algoritmaları yazdım güçlü bir matematik, insanlar oldu :=matematiksel gösterim nedeniyle, doğal seçim x := varacı "let xolmak vyerine" x = v"hangi araçlar, xeşittir v" ve bu nedenle olur karışıklık sebebi.
back2dos

8
Standart bir sahte kod olsaydı, birçok sahte sahte kod görecektik.

2
@ back2dos vb Bugün bile =ödev için kullanmak kafa karıştırıcıdır. Programlamayı ilk öğrendiğim zaman, ne kadar kafa karıştırıcı olduğunu hala hatırlıyorum x = x + 1. Bir kere temel lise matematiğini inceledikten sonra, x = x + 1imkansız çelişkili anlamsızca görünüyorsun. Daha sonra ödev vermek için kullanılan genel okuyucu için bilgisayar bilimi üzerine mükemmel bir kitap okudum ( bence bu idi ) <-. x <- x + 1anlaşılması çok daha kolay.
MarkJ

-1

Genellikle matematikte aynı anlama gelir: atama.


6
Bilgime matematikte "atama" diye bir şey yoktur.
Ingo

7
matematikte, :=genellikle "tanımlanmış" veya "tanım ile aynı" anlamına gelir.
oenone

3
@Ingo: "x ifadesinin değeri için bit desenini y isimli bir bellek konumuna yazın" programlama dillerindeki bir atamadan tamamen farklıdır. Tanımladığınız şey, atama ifadelerinin yürütülmesinin olası bir uygulamasıdır.
back2dos

3
@Ingo: Ben katılmıyorum. Nitekim, özellikler söz konusu olduğunda, bir ödev çağrısı verir ve kodun büyük bir bölümünün sanal makinelerde veya tercümanlar tarafından doğrudan "geçerli mimari" üzerinde değil, hatta değişkenlere bile atanmış olması optimizasyon nedeniyle böyle bir işlemle sonuçlanmasına gerek yoktur. Birkaç istisna dışında, bir dilin özelliklerine göre kullanılması ve uygulanmasına ilişkin bazı varsayımlara dayanmaması gerekir. Değişkenlere yapılan atamalar hakkında söyleyebileceğiniz tek şey, y isimli değişkenin x ifadesinin değerine göre yükselmesidir.
back2dos

3
@Ingo: Hayır, saçmalık değil. Derleme x := 1; y := 2; if (x = 1) y := 3sadece sanki y := 3(x varsayarak sonra kullanılmaz) makul bir iyileştirmedir. 3 ödevden 2'si statik analiz ile gerçekleştirilir. Görevlendirmelerin "tanımınız" bir battaniye ifadesidir, basitçe sayısız varsayım olmadan, bu terimin tanımına bağlı kalmak zorunda kalmaması gerekir.
back2dos,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.