• Alt program tanımı. Alt program nedir? II. Yeni materyal öğrenmek

    alt programlar kavramı prosedürler ve işlevler

    İÇİNDE TURBO PASCAL farkı prosedürler ve fonksiyonlar olmak üzere iki tür alt program vardır.. Bir prosedür ve bir işlev, adlandırılmış bir bildirimler ve ifadeler dizisidir. Ayrıca, önceden geliştirilmiş algoritmaların bazı parçalarını kullanmak mümkün olduğunda, prosedürlerin ve fonksiyonların kullanılması gereklidir. Ek olarak, programlamadaki modüler ilkeye uygun olarak büyük programları ayrı semantik parçalara bölmek için alt programlar kullanılır. prosedür- Bu, içinde tanımlanan bir dizi eylemi gerçekleştirmek için adıyla çağrılabilen, programın bağımsız bir adlandırılmış parçasıdır. Prosedürler, kendileri dışındaki program ortamını değiştirmeyi amaçlayan bir dizi eylem belirlemeye hizmet eder. PASCAL'de standart prosedürler vardır: oku, oku, yaz, yaz. Böylece, bir prosedür kavramı, PASCAL'deki bir operatör kavramını genişletir. İşlev açıklamasında belirtilen türün sonucunu döndürmesi bakımından bir prosedürden farklıdır. İşlev adının operatör olarak kullanıldığı bir ifadeden işlev çağrısı yapılabilir. Fonksiyonlar prosedürlerin özel bir durumudur ve sonucu zorunlu olarak bu fonksiyonun adının değeri olarak çağrı noktasına döndürürler. İşlevleri kullanırken, ifadelerdeki tür uyumluluğunu göz önünde bulundurmalısınız. PASCAL'de, herhangi bir program tarafından bilinen bir dizi standart işlev vardır: sin, cos, eof ve 3 numaralı tablodaki diğer işlevler. Böylece fonksiyon kavramı PASCAL dilinde ifade kavramını genişletir.

    Yerel ve Küresel Değişkenler

    Her modülün (prosedür, işlev, program) bir başlıktan oluştuğunu hatırlayın ( prosedür..., fonksiyon..., program...) ve engelle.

    p1 prosedürünün bir bloğu, içinde prosedür p2'yi içeriyorsa, p2'nin p1'e yuvalandığı söylenir.

    prosedür p1(x: gerçek; değişken y: gerçek);

    prosedür p2(varz: gerçek);

    …………………….

    …………………….

    Değişkenleri, sabitleri, türleri, prosedürleri tanımlamak için herhangi bir bloğun (prosedürler, işlevler) içine eklenen tüm tanımlayıcılara bu blok için yerel denir. İç içe geçmiş modülleriyle birlikte böyle bir bloğa bu yerel değişkenlerin, sabitlerin, türlerin ve prosedürlerin kapsamı denir.

    var y1, y2: gerçek;

    var a, b, c, d: gerçek;

    ( a, b, c, d değişkenleri sq1'de yereldir,

    kapsamları sq1 prosedürüdür)

    ……………………………………

    ( y1, y2 değişkenleri sq1 için yerel değildir,

    kapsamları t1 ve sq1 )

    Program bloğunda açıklanan sabitler, değişkenler, tipler denir. küresel. Hepsini programda tanımladıktan sonra, genel olarak yalnızca küresel değişkenlerle uğraşmak daha kolay görünüyor. Ancak yerel değişkenlerin kullanılması, sistemin programları daha iyi optimize etmesine, onları daha okunabilir hale getirmesine ve hata olasılığını azaltmasına olanak tanır.

    Alt programların atanması.

    Alt programlar, başlangıçta, kullanılan bellek miktarı açısından programları optimize etmenin bir yolu olarak ortaya çıktılar - programda aynı kod bloklarını tekrarlamayı değil, onları bir kez tanımlamayı ve gerektiğinde çağırmayı mümkün kıldılar. Bugüne kadar, alt programların bu işlevi yardımcı hale geldi, asıl amacı, programın anlaşılmasını ve sürdürülmesini kolaylaştırmak için programı yapılandırmaktı.

    • Bir dizi eylemi bir alt programa ayırmak ve onu gerektiği gibi çağırmak, tipik bir çözümü olan tümleşik bir alt görevi mantıksal olarak seçmenize olanak tanır. Böyle bir eylemin, aynı türden tekrarlanan eylemlere göre (bellek tasarrufuna ek olarak) bir avantajı daha vardır: alt programda yapılan herhangi bir değişiklik (hata düzeltme, optimizasyon, işlevsellik genişletme), tüm çağrılarına otomatik olarak yansıtılırken, çoğaltma sırasında her biri değişebilir kodun her geçtiği yerde değişiklik yapılmalıdır.
    • Tek seferlik bir dizi eylemin bir alt programa tahsis edildiği durumlarda bile, bu, programı oluşturan ayrılmaz kod bloklarının boyutunu azaltmanıza, yani programı daha anlaşılır hale getirmenize izin verdiği için haklı çıkar. görünür ...

    Alt programların mekanizması, açıklamaları ve çağrıları

    Aşağıdaki Pascal örneğinde, alt program ana programdan üç kez çağrılır:

    Program AltProg Örneği; prosedür alt programı; başlamak // alt program gövdesinin başlangıcı WriteLn("Güle güle" ); son ; // alt program gövdesinin sonu start WriteLn("Merhaba"); alt program; // alt programa 1. çağrı; // 2. çağrı alt programı; // 3. arama sonu .

    Böyle bir programın yürütülmesinin sonucu, "Merhaba" dizisinin ve "Bye" üç dizisinin çıktısı olacaktır.

    Bazı programlama dilleri (örneğin, Pascal, Ada, Modula-2) iç içe alt programlara izin verir, yani alt programları diğer alt programların içine yerleştirir. Bu tür yuvalanmış alt programlar, yalnızca içinde tanımlandıkları alt programda kullanılabilirler. Diğer durumlarda (örneğin, C dilinde), alt programların iç içe yerleştirilmesine izin verilmez. Alt programları iç içe yerleştirmek herhangi bir temel avantaj sağlamaz, ancak programın daha mantıklı bir şekilde yapılandırılması için uygun olabilir (bazı alt programlar yalnızca başka bir alt programda kullanılıyorsa, birincisini ikincisine yerleştirmek mantıklıdır).

    Alt program parametreleri

    Parametre atama

    Alt programlar genellikle farklı veriler üzerinde basmakalıp eylemleri tekrar tekrar gerçekleştirmek için kullanılır. Alt program genellikle ana programda açıklanan veri nesnelerine (en azından bazılarına) erişime sahiptir, bu nedenle işlenmiş verileri alt programa aktarmak için bunları örneğin genel değişkenlere atamak yeterlidir. Ancak bu yol özellikle uygun değildir ve hatalarla doludur.

    Parametrelerin alt programa kontrollü aktarımını ve alt programdan sonuçların döndürülmesini sağlamak için bir mekanizma kullanılır. parametreler. Parametreler, alt programın açıklamasında (başlığında) açıklanmıştır ve prosedür içinde, içinde açıklanan değişkenlerle aynı şekilde kullanılabilir. Bir prosedür çağrıldığında, çağıran komutta parametrelerin her birinin değerleri belirtilir (genellikle çağrılan alt programın adından sonra).

    Program AltProgÖrnek2; // Alt program alt programının açıklaması prosedür alt programı(Satır: Dizgi ) ; // Alt programın adını içeren başlık başlamak // alt program gövdesinin başlangıcı YazLn(Satır) ; son ; // alt program gövdesinin sonu start WriteLn("Merhaba"); subprog("Hoşçakalın" ) ; // 1. çağrı subprog("aşkım," ) ; // 2. çağrı subprog("güle güle!" ) ; // 3. arama sonu .

    Yukarıdaki örnekte, parametre astar rutinler alt program her aramada, aynı satırların değil, farklı satırların görüntülenmesi nedeniyle farklı bir değer alır.

    Resmi ve gerçek parametreler

    Bir alt programın başlığında ve gövdesinde açıklanan parametrelerini, alt program çağrıldığında belirtilen parametrelerden ayırt etmek için, ilki resmi parametreler, ikincisi gerçek parametreler olarak adlandırılır. Yani, son örnekte, parametre astar alt programın başlığında ve gövdesinde alt program resmi bir parametredir ve dize "Güle güle" Bu alt programa yapılan ilk çağrıda kullanılan gerçek parametredir. Bir alt program çağrıldığında, çağrı komutunda belirtilen gerçek parametreler, verilerin alt programa aktarılmasını sağlayan karşılık gelen resmi parametrelerin değerleri haline gelir.

    Bir alt programa parametreler nasıl iletilir

    Parametreleri bir alt programa geçirmenin birkaç yolu vardır.

    • Parametreleri değere göre geçirme. resmi parametre atanır Anlam gerçek parametre. Bu durumda, biçimsel parametre gerçek değerde bulunan değerin bir kopyasını içerecektir ve alt program içinde biçimsel parametreler üzerinde yapılan herhangi bir etki gerçek parametrelere yansımaz. Dolayısıyla, bir değişken gerçek parametre olarak kullanılırsa ve karşılık gelen resmi parametrenin değeri alt program içinde değiştirilirse, gerçek parametre değişmeden kalacaktır.

    int func1(int x) ( x=x+1; dönüş x; )

    • Parametreleri referans olarak geçirme. resmi parametre yerleştirilebilir kendim gerçek parametre (genellikle bu, resmi parametrede gerçek parametreye bir referans yerleştirilerek yapılır). Bu durumda, alt programdaki resmi parametredeki herhangi bir değişiklik gerçek parametreye yansıtılacaktır - alt programın çağrılması sırasında her iki parametre de aynıdır. Referans olarak geçirilen parametreler, yalnızca alt program içindeki parametrelerin iletilmesini değil, aynı zamanda hesaplanan değerleri çağrı noktasına döndürmeyi de mümkün kılar. Bunu yapmak için, alt program içindeki parametreye basitçe istenen değer atanır ve alt programdan dönüşte asıl parametre olarak kullanılan değişkene bu değer atanır.

    geçersiz işlev2(int &x) ( x=x+1; )

    • Parametreleri ada göre geçirme. Resmi bir parametreye isteğe bağlı bir ifade yerleştirilebilir. Bu durumda, bu ifadenin hesaplanması, değerinin gerekli olduğu anda alt program içinde gerçekleşecektir. Bu değer birkaç kez görünüyorsa, o zaman birkaç kez de hesaplanacaktır. İsme göre geçirilen parametreler, oldukça çok yönlü alt programlar yazmayı mümkün kılar. Bu parametre geçirme yöntemi, örneğin Algol veya Algol 68 dillerinde kullanılır.
    • Yığındaki parametreleri geçirme. Bu aslında “manuel sürüş ile” değeri geçen bir tür parametredir, bu durumda resmi ve gerçek parametre kavramı yoktur. Tüm parametreler yığında bulunur ve türleri, sayıları ve sıraları derleyici tarafından kontrol edilmez. Bu yaklaşım Forth dilinde uygulanmaktadır.

    Bir programlama dili, parametreleri alt programlara yalnızca değere göre (bu C dilinde yapılır) veya değere ve referansa göre (bu Pascal, Ada, C ++'da uygulanır) veya isme ve değer (bu, Algol ve Algol 68'de uygulanmaktadır). Son iki durumda, bir parametreyi iletme yollarını ayırt etmek için ayrı sözdizimsel yapılar kullanılır (Pascal'da bu bir anahtar sözcüktür). var parametreyi açıklarken). Aslında, dil bir bağlantı (işaretçi) kavramını içeriyorsa, o zaman referansa göre bir parametre iletmeden yapabilirsiniz ("referans" tipi bir parametreyi tanımlayarak her zaman modellenebilir), ancak bu özellik uygundur, çünkü resmi bir parametre referansıyla kayıtsız çalışmanıza izin verir ve ayrıca programın güvenilirliğini ve güvenliğini artırır.

    Başvuru yoluyla iletilen parametrelere doğal kısıtlamalar uygulanır: çağrıldığında böyle bir parametrenin yerine konulan gerçek parametre bir değişken olmalıdır (yani, bir adrese sahip olmalıdır) ve kesin olarak yazılan dillerde, aynı veri türüne de sahip olmalıdır.

    Alt program türleri

    Üst düzey programlama dillerinde kullanılan iki tür alt program vardır: prosedürler ve işlevler.

    • Bir işlev, parametreleri almanın, eylemleri gerçekleştirmenin ve çalışma sonuçlarını parametreler aracılığıyla iletmenin yanı sıra, bir özelliği daha olan özel türden bir alt programdır - dönüş sonucu. Bir işlev çağrısı, programlama dili açısından bir ifadedir; diğer ifadelerde veya bir atamanın sağ tarafı olarak kullanılabilir. Makalede daha fazlasını okuyun

    alt program - programın kendi adına sahip olan ve belirli eylemleri gerçekleştiren nispeten bağımsız bir parçası.

    Alt programlar, programların güvenilirliğini ve görünürlüğünü artırır, çünkü. programın her bloğunu bağımsız olarak (örneğin, farklı kişiler tarafından) geliştirmenize ve hata ayıklamanıza izin verir.

    Alt program yapısı tüm programın yapısını neredeyse tamamen tekrarlar ve aşağıdaki bölümlerden oluşur:

      alt program başlığı

      açıklama bölümü

      alt program gövdesi

    Pascal'da iki tür alt program vardır - prosedürler Ve fonksiyonlar. Amaç ve nasıl kullanıldıklarına göre farklılık gösterirler. prosedürler program ortamını değiştirmeyi amaçlayan belirli bir dizi eylemi gerçekleştirmeye hizmet eder (değişkenlerin değerlerini, veri giriş / çıkışını değiştirme vb.). Fonksiyonlar bir ifadenin değerini değerlendirmek için.

    5.1 Prosedürler

    prosedür <имя>(resmi parametrelerin listesi);

    <раздел описаний>;

    başlamak

    < prosedür organı>;

    Örnek 1: Bir sayının küpünü hesaplama ve görüntüleme prosedürü.

    prosedür cub(x: gerçek);

    Programda prosedürün adının belirtilmesi, prosedürün etkinleştirilmesine yol açar ve çağrılır. meydan okumak. Prosedürün etkinleştirilmesinden hemen sonra, içerdiği ifadeler yürütülmeye başlar. Prosedürün son ifadesinin yürütülmesinden sonra, kontrol ana programa aktarılır ve ardından prosedür çağrısını takip eden ifadeler yürütülür. Ana programda bir prosedür birden çok kez çağrılabilir.

    Örneğin:

    Ana program ile prosedür arasında bilgi alışverişi yapmak için prosedüre evrensellik veren parametreler kullanılır.

    Örnek 2: Aşağıdakileri görüntüleyen bir program:

    var a,b: tamsayı;

    prosedür Yıldızları; (seçenek yok)

    var i: tamsayı;

    i:=1'den 9'a kadar do write('*');

    a:=1 ila 4 yapmak için

    writeln('a=',a,'b=',b);

    yıldızlar; (Yıldız prosedürünü çağırın)

    Örnek3:

    var a,b: tamsayı;

    prosedür String(ch: char, n: integer);

    var i: tamsayı;

    i:=1'den n'ye do write(ch);

    dizi('+',4);

    a:=1 ila 3 yapmak için

    writeln('a=',a,'b=',b);

    dizi('*',8);

    Stroka('*',8) prosedür çağrısını inceleyelim: '*' ve 8 gerçek parametrelerdir (yani, çağrıldığında prosedür adından sonra parantez içinde belirtilenler), resmi çağrılırken atanırlar. parametreler ch ve n (t .yani, prosedürü açıklarken adından sonra parantez içinde belirtilenler).

    Yorum: Bir prosedür çağrılırken parametrelerin sayısı, sırası ve tipi, prosedür açıklanırken belirtilen parametrelerin sayısı, sırası ve tipi ile eşleşmelidir.

    Ekran sonucu:

    Belirli bir dizi eylemin açıklamasını içerir. Bir alt program birden çok kez olabilir neden oldu programın farklı bölümlerinden Programlama dillerinde, alt programların tasarımı ve kullanımı için özel sözdizimsel araçlar vardır.

    Alt programların amacı

    Alt programlar, başlangıçta, kullanılan bellek miktarı açısından programları optimize etmenin bir yolu olarak ortaya çıktılar - programda aynı kod bloklarını tekrarlamayı değil, onları bir kez tanımlamayı ve gerektiğinde çağırmayı mümkün kıldılar. Bugüne kadar, alt programların bu işlevi yardımcı hale geldi, asıl amacı, programın anlaşılmasını ve sürdürülmesini kolaylaştırmak için programı yapılandırmaktı.

    • Bir dizi eylemi bir alt programa ayırmak ve onu gerektiği gibi çağırmak, tipik bir çözümü olan tümleşik bir alt görevi mantıksal olarak seçmenize olanak tanır. Böyle bir eylemin, aynı türden tekrarlanan eylemlere göre (bellek tasarrufuna ek olarak) bir avantajı daha vardır: alt programda yapılan herhangi bir değişiklik (hata düzeltme, optimizasyon, işlevsellik genişletme), tüm çağrılarına otomatik olarak yansıtılırken, çoğaltma sırasında her biri değişebilir kodun her geçtiği yerde değişiklik yapılmalıdır.
    • Alt programa tek seferlik bir dizi eylemin tahsis edildiği durumlarda bile, bu, programı oluşturan entegre kod bloklarının boyutunu azaltmaya, yani programı daha anlaşılır hale getirmeye izin verdiği için haklı çıkar. ve görünür.

    Avantajlar

    Bir programı alt programlara ayırmanın faydaları şunları içerir:

    • Karmaşık bir programlama görevini basit adımlara ayrıştırma: Bu, yapılandırılmış programlama ve veri yapılarının iki ana aracından biridir.
    • Yinelenen kodu azaltma
    • Kodu diğer programlarda yeniden kullanabilme
    • Büyük bir programlama görevini farklı programcılar veya bir projenin farklı aşamaları arasında bölme
    • Uygulama Ayrıntılarını Alt Program Kullanıcılarından Gizleme
    • İzleme geliştirmeleri (çoğu dil, ilgili alt programların adlarını ve hatta dosya adları ve hat numaraları gibi daha fazla bilgiyi içeren bir arama izlemesi almanın bir yolunu sağlar). Kodu alt programlara ayırmadan hata ayıklama ciddi şekilde engellenir.

    Alt programların mekanizması, açıklamaları ve çağrıları

    Aşağıdaki Pascal örneğinde, alt program ana programdan üç kez çağrılır:

    Program AltProg Örneği; prosedür alt programı; başlamak // alt program gövdesinin başlangıcı WriteLn("Güle güle" ); son ; // alt program gövdesinin sonu start WriteLn("Merhaba"); alt program; // alt programa 1. çağrı ; // 2. çağrı alt programı ; // 3. arama sonu .

    Böyle bir programın yürütülmesinin sonucu, "Merhaba" dizisinin ve "Bye" üç dizisinin çıktısı olacaktır.

    Kullanılan makine kayıtlarındaki olası istenmeyen değişikliklerle ilişkili yan etkileri ortadan kaldırmak amacıyla, çağırma prosedürünün yürütme bağlamını kaydetmek ve geri yüklemek için, derleyici her prosedür için prosedürün önsözü ve sonsözü olarak adlandırılan özel komut dizileri üretir.

    Bazı programlama dilleri (örneğin, Pascal, Ada, Modula-2) iç içe alt programlara izin verir, yani alt programları diğer alt programların içine yerleştirir. Bu tür yuvalanmış alt programlar, yalnızca içinde tanımlandıkları alt programda kullanılabilirler. Diğer durumlarda (örneğin, C dilinde), alt programların iç içe yerleştirilmesine izin verilmez. Alt programları iç içe yerleştirmek herhangi bir temel avantaj sağlamaz, ancak programın daha mantıklı bir şekilde yapılandırılması için uygun olabilir (bazı alt programlar yalnızca başka bir alt programda kullanılıyorsa, birincisini ikincisine yerleştirmek mantıklıdır).

    Alt program parametreleri

    Parametre atama

    Alt programlar genellikle farklı veriler üzerinde basmakalıp eylemleri tekrar tekrar gerçekleştirmek için kullanılır. Alt program genellikle ana programda açıklanan veri nesnelerine (en azından bazılarına) erişime sahiptir, bu nedenle işlenmiş verileri alt programa aktarmak için bunları örneğin genel değişkenlere atamak yeterlidir. Ancak bu yol özellikle uygun değildir ve hatalarla doludur.

    Parametrelerin alt programa kontrollü aktarımını ve alt programdan sonuçların döndürülmesini sağlamak için bir mekanizma kullanılır. parametreler. Parametreler, alt programın açıklamasında (başlığında) açıklanmıştır ve prosedür içinde, içinde açıklanan değişkenlerle aynı şekilde kullanılabilir. Bir prosedür çağrıldığında, çağıran komutta parametrelerin her birinin değerleri belirtilir (genellikle çağrılan alt programın adından sonra).

    Program AltProgÖrnek2 ; // Alt program alt programının açıklaması prosedür alt programı (Satır: Dizgi) ; // Alt programın adını içeren başlık başlamak // alt program gövdesinin başlangıcı YazLn(Satır); son ; // alt program gövdesinin sonu start WriteLn("Merhaba"); subprog("Hoşçakalın," ) ; // subprog'a 1. çağrı ("aşkım" ) ; // subprog'a 2. çağrı ("güle güle!" ) ; // 3. arama sonu .

    Yukarıdaki örnekte, parametre astar rutinler alt program her aramada, aynı satırların değil, farklı satırların görüntülenmesi nedeniyle farklı bir değer alır.

    Resmi ve gerçek parametreler

    Bir alt programın başlığında ve gövdesinde açıklanan parametrelerini, alt program çağrıldığında belirtilen parametrelerden ayırt etmek için resmi ve gerçek parametreler kullanılır. Resmi parametreler, bir alt program bildirilirken veya tanımlanırken belirtilir ve gerçek parametreler, çağrıldığında doğrudan belirtilir. Yani, son örnekte, parametre astar alt programın başlığında ve gövdesinde alt program resmi bir parametredir ve dize "Güle güle" Bu alt programa yapılan ilk çağrıda kullanılan gerçek parametredir. Bir alt program çağrıldığında, çağrı komutunda belirtilen gerçek parametreler, verilerin alt programa aktarılmasını sağlayan karşılık gelen resmi parametrelerin değerleri haline gelir.

    Bir alt programa parametreler nasıl iletilir

    Parametreleri bir alt programa geçirmenin birkaç yolu vardır.

    • Parametreleri değere göre geçirme. resmi parametre atanır Anlam gerçek parametre. Bu durumda, biçimsel parametre gerçek değerde bulunan değerin bir kopyasını içerecektir ve alt program içinde biçimsel parametreler üzerinde yapılan herhangi bir etki gerçek parametrelere yansımaz. Dolayısıyla, bir değişken gerçek parametre olarak kullanılırsa ve karşılık gelen resmi parametrenin değeri alt program içinde değiştirilirse, gerçek parametre değişmeden kalacaktır.

    int işlev1(int x)

    ( x=x+2; dönüş x;

    • Parametreleri referans olarak geçirme. resmi parametre yerleştirilebilir kendim gerçek parametre (genellikle bu, resmi parametrede gerçek parametreye bir referans yerleştirilerek yapılır). Bu durumda, alt programdaki resmi parametredeki herhangi bir değişiklik gerçek parametreye yansıtılacaktır - alt programın çağrılması sırasında her iki parametre de aynıdır. Referans olarak geçirilen parametreler, yalnızca alt program içindeki parametrelerin iletilmesini değil, aynı zamanda hesaplanan değerleri çağrı noktasına döndürmeyi de mümkün kılar. Bunu yapmak için, alt program içindeki parametreye basitçe istenen değer atanır ve alt programdan dönüşte asıl parametre olarak kullanılan değişkene bu değer atanır.
    • Parametreleri ada göre geçirme. Resmi bir parametreye isteğe bağlı bir ifade yerleştirilebilir. Bu durumda, bu ifadenin hesaplanması, değerinin gerekli olduğu anda alt program içinde gerçekleşecektir. Bu değer birkaç kez görünüyorsa, o zaman birkaç kez de hesaplanacaktır. İsme göre geçirilen parametreler, oldukça çok yönlü alt programlar yazmayı mümkün kılar. Bu parametre geçirme yöntemi, örneğin Algol veya Algol 68 dillerinde kullanılır.
    • Yığındaki parametreleri geçirme. Bu aslında “manuel sürüş ile” değeri geçen bir tür parametredir, bu durumda resmi ve gerçek parametre kavramı yoktur. Tüm parametreler yığında bulunur ve türleri, sayıları ve sıraları derleyici tarafından kontrol edilmez. Bu yaklaşım Forth dilinde uygulanmaktadır.

    Bir programlama dili, parametreleri alt programlara yalnızca değere göre veya değere ve referansa göre veya ad ve değere göre geçirme yeteneği sağlayabilir. Son iki durumda, bir parametreyi iletme yollarını ayırt etmek için ayrı sözdizimsel yapılar kullanılır (Pascal'da bu bir anahtar sözcüktür). var parametreyi açıklarken). Aslında, dil bir bağlantı (işaretçi) kavramını içeriyorsa, o zaman referansa göre bir parametre iletmeden yapabilirsiniz ("referans" tipi bir parametreyi tanımlayarak her zaman modellenebilir), ancak bu özellik uygundur, çünkü resmi bir parametre referansıyla kayıtsız çalışmanıza izin verir ve ayrıca programın güvenilirliğini ve güvenliğini artırır.

    Bu, parametreleri almaya, eylemler gerçekleştirmeye ve çalışma sonuçlarını parametreler aracılığıyla iletmeye ek olarak, bir özelliği daha olan - her zaman bir sonuç döndürmesi gereken özel türden bir alt programdır. Bir işlev çağrısı, programlama dili açısından bir ifadedir; diğer ifadelerde veya bir atamanın sağ tarafı olarak kullanılabilir.

  • Bir yordam, bir programın, tek bir açıklamadan sonra, belirli eylemleri gerçekleştirmek için programın sonraki bölümlerinden isimle tekrar tekrar çağrılabilen bağımsız bir adlandırılmış parçasıdır.
  • Benzeri dillerde, bir alt program her zaman bir işlev olarak tanımlanır. Prosedür, tipin bir fonksiyonu olarak uygulanır geçersiz, yani "boş" bir türe sahip olmak ve buna göre herhangi bir değer döndürmemek.

    Nesne programlama dillerinde sınıfların parçası olan alt programlara genellikle yöntemler denir. Bu terim, hem işlevler hem de prosedürler olarak bir sınıfın herhangi bir üye alt programını ifade eder; açıklama istendiğinde, biri hakkında konuşulur yöntemler-prosedürler veya işlev yöntemleri.

    Yeni problemleri çözerken önceden yazılmış programları kullanmayı deneyebilirsiniz. Daha önce geliştirilen ve diğer algoritmaların bir parçası olarak tamamen kullanılan bir algoritmaya denir. ek. Yardımcı algoritmaların kullanılması, görevi parçalara ayırmanıza, yapılandırmanıza olanak tanır.

    Programın tamamı şartlı olarak iki kısma ayrılabilir: ana ve yardımcı. Ana bölümde, bilgilerin en basit şekilde işlenmesi gerçekleştirilir, çeşitli itirazlar yardımcı modüller (alt programlar).

    Bir yardımcı algoritma diğer yardımcı algoritmaları da çağırabilir, böyle bir çağrı zincirinin uzunluğu teorik olarak sınırsızdır. Burada ve aşağıda şu kelime çiftleri eşanlamlı olarak kullanılmıştır: algoritma ve program, yardımcı algoritma ve alt program, komut ve operatör, program ve modül. Yardımcı ve ana algoritmalar kendi içlerinde değil, birbirleriyle ilişkilidir.

    Yardımcı algoritmaları kullanırken, onlar için başlangıç ​​​​verilerinin değerlerini aktarmanın ve onlardan sonuç almanın yolunu dikkate almak gerekir. Yardımcı Argümanlar bunlar, karşılık gelen alt görevi çözmek için başlangıç ​​verilerinin yerleştirilmesi gereken değişkenlerdir. Yardımcı Algoritma Sonuçları bunlar aynı zamanda bu alt görevleri çözmenin sonuçlarını içeren değişkenlerdir ve sonuç, bilgisayarın alt programın eylemi altında gerçekleştirdiği belirli bir eylem de olabilir.

    Alt programlar iki tipte olabilir: parametresiz alt program ve parametreli alt program. Bir alt programa çağrı, ana programdaki herhangi bir yerden veya başka bir alt programdan herhangi bir sayıda organize edilebilir.

    Alt programlarla çalışırken kavramlar önemlidir resmi ve gerçek parametreler. Resmi parametreler rutin için giriş veri tanımlayıcılarıdır. Resmi parametreler belirli değerler alırsa, bunlar çağrılır. gerçek. Biçimsel parametreler, yalnızca verilen modül alt programının çağrıldığı programda belirli değerler alabilir. Tip Ve emir gerçek parametre girişleri, resmi parametre girişleriyle aynı olmalıdır. Aksi takdirde, programın sonucu tahmin edilemez olacaktır. Bundan, ana programdan alt programa erişirken gerçek parametrelerin kullanıldığı, biçimsel parametrelerin ise yalnızca modülün kendisinde kullanıldığı sonucu çıkar.

    Parametreli bir alt program, farklı başlangıç ​​verileriyle tekrarlanan tekrarlanan eylemleri kaydetmek için kullanılır.

    Alt programları parametrelerle derlerken aşağıdaki kurallara uyulmalıdır:

    1) her alt programın kendi adı ve resmi parametrelerin bir listesi vardır;

    2) ana programdaki prosedür, yürütücü komutunun çağrılmasından form olarak farklı olmayan call komutu tarafından çağrılır. Sonuç, resmi parametreler listesinde bulunan bir veya daha fazla değişkene atanır. Ancak sonuç elbette sadece değişkenlerin değerleri değil, bilgisayar tarafından gerçekleştirilen bazı eylemler olabilir.

    örnek 1 İki doğal sayının en büyük ortak bölenini bulmak için algoritmayı problemin çözümünde yardımcı olarak kullanıyoruz: kesirleri çıkarmak için bir program yazın ( A, B, C, D doğal sayılar). Sonucu adi indirgenemez bir kesir olarak ifade edin.

    alt program.

    1. M, N doğal sayılarını girin.
    2. M=N ise, 5. adıma gidin, aksi takdirde bir sonraki adıma geçin.
    3. M>N ise M:=M-N, aksi halde N:=N-M.
    4. 2. adıma gidin.
    5. M değerini ana programa iletin.
    6. Alt programın sonu.

    Ana program.

    1. A, B, C, D değerlerini girin.
    2. E:=A*D - B*C.
    3. F:= B*D.
    4. E=0 ise E'nin değerini yazdırın ve 9. adıma geçin, aksi takdirde bir sonraki adıma geçin.
    5. M:=|E|, N:=F, OBEB hesaplama alt programına gidin.
    6. G:=M.
    7. E ve F tamamen G'ye bölünür.
    8. E ve F değerlerini yazdırın.
    9. Programın sonu.

    Örnekten de görebileceğiniz gibi, alt program-fonksiyonun bildirimi, işlev prototip bildirimleri bölümünde ve ana işlevden sonraki uygulamadır. ana. Alt program başlığı, şartlı olarak giriş ve çıkış parametrelerine bölünebilen (bunlardan önce & gelir) türlerini gösteren resmi parametrelerin bir listesini içerir. Genel olarak, &'siz bir parametre listesine sahip bir işleve erişirken, işlev içinde parametrelerin kopyaları kullanılır ve bunlar yürütüldükten sonra silinir. & işareti, derleyiciye değişkenin bir kopyasını değil, kendisini kullanmasını söyler. Bir işlev çağrıldığında, adı ve gerçek parametrelerin listesi belirtilir. Resmi ve gerçek parametreler sayı ve tür olarak eşleşmelidir.

    C++'da bir fonksiyonun açıklaması şu şekildedir:

    dönüş_değer_türü();

    Örneğin,

    Void Nod(int e, int f, int &k); int f1(kayan nokta); uzun f2();

    İşlev her zaman tek bir değer döndürür. Örnek 1'den görebileceğiniz gibi, türü kullandık. geçersiz dönüş türü olarak. Onlar. derleyiciye fonksiyonumuzun herhangi bir değer döndürmediğini belirtti.

    Örnekteki alt programın, GCD değerinin kendisini döndüren bir işlev olarak yazıldığında (dönüş değişkenini kullanmadan) nasıl değiştiğini gösterelim.

    Int Nod(int m, int n) ( while (m!=n) if (m > n) m -=n; else n -= m; return (n); )

    Böylece, işlevin gövdesinde, işlevin değeri olarak hangi değerin döndürüleceğini gösteren dönüş komutu en az bir kez gerçekleşir.

    Ana işlev çağrısı şöyle olacaktır:

    G = Nod(fabs(e), f);

    Genel olarak, bir işlev çağrısı bir ifadede bulunabilir: bir atama operatörünün sağ tarafında, bir çıktı ifadesinde, başka bir alt program çağrısında gerçek bir parametre olarak vb.

    Problemleri çözerken, durumu analiz etmeniz, çözümü büyük bloklara yazmanız (bunlar C++ deyimleri değildir), blokların her birini detaylandırmanız (bloklar şeklinde yazma, belki de hala C++ deyimleri değil) vb. tavsiye edilir. ta ki blokların her biri dil operatörleri kullanılarak uygulanana kadar.

    Örnek 2 Doğal bir sayı verildiğinde N. Bu sayının ilk ve son hanelerini değiştirin.

    Burada, bir doğal sayının gösterimindeki basamak sayısını döndüren Number işlevini detaylandırmak gerekir (Impossible işlevi ona bir çağrı içerdiğinden, Number işlevi prototipler bölümünde ondan önce gelmelidir).

    Kendilerini çağıran alt programlar da mümkündür. Onlar aranmaktadır özyinelemeli. Bu tür alt programların oluşturulması güzel bir programlama tekniğidir, ancak aşırı bilgisayar belleği tüketimi nedeniyle her zaman tavsiye edilmez.

    Örnek 3 Belirli bir doğal sayıdaki maksimum basamağı bulun.

    Maximum fonksiyonu oluşturulurken, sayı bir basamaktan oluşuyorsa maksimumdur, aksi halde son basamak maksimum değilse sayının diğer basamakları arasında aranmalıdır. Özyinelemeli bir algoritma yazarken, özyinelemeli aramalar zinciri kırıldığında ve bunun tersine "çözülmesi" başladığında sınır koşuluna dikkat edilmelidir. Örneğimizde bu koşul N

    Özyineleme hakkında daha fazla ayrıntı aşağıdaki makalede ele alınmıştır.

    Kontrol soruları ve görevleri
    1. Hangi algoritmalara yardımcı denir?
    2. Ana algoritmada kaç yardımcı algoritma bulunabilir?
    3. Bu problemin çözümü için yazılan yardımcı algoritmalar, kullanımının uygun olacağı diğer problemlerin çözümünde kullanılabilir mi?
    4. Hangi parametreler resmi olarak adlandırılır? gerçek?
    5. Resmi ve gerçek parametreler arasında ne tür bir yazışma gözlemlenmelidir?
    6. Resmi olanlardan daha fazla gerçek prosedür (fonksiyon) parametresi olabilir mi? Peki ya daha az?
    7. Parametresiz alt programlar var mı?
    8. Alt program parametrelerinin sayısında sınırlamalar var mı? Değilse, bu sayı C++'da nasıl sınırlandırılır?
    9. C++'da hangi bölümde bildirilir ve hangi altyordamlar uygulanır?
    10. Ne tür bir işlev değeri olabilir?
    11. Bize programların geliştirilmesinde aşamalı detaylandırma yönteminden bahsedin.
    12. Hangi alt programlara özyinelemeli denir?
    13. Özyinelemeli bir alt program düzenlerken sınır koşulu nedir?