Kombinatorik problemleri. Çözüm örnekleri

    Klavyeden girilen iki tam sayıyı karşılaştıran bir program yazınız. Program hangi sayının daha büyük olduğunu belirtmeli veya sayılar eşitse ilgili mesajı göstermelidir.

    İki tam sayı girin ve Enter tuşuna basın.
    -> 34 67
    34 67'den az

    Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; ana prosedür A, B'dir: Tamsayı; begin Put_Line("Bir satıra iki tam sayı girin ve Enter tuşuna basın."); Put("-> "); Al(A); Get(B); --Eğer A > B ise 2 sayı girin, ardından Put(Item =>; A, Width =>; 1); Daha fazla ekle "); Put(Item => B, Genişlik => 1); Elsif A< B then Put(Item =>A, Genişlik => 1); Put("küçükten"); Put(Item => B, Genişlik => 1); else Put("Girilen sayılar eşittir!"); eğer biterse; ana sonu;

    Üç tam sayı veriliyor. Bunlardan en büyüğünü bulun (program tam olarak bir tamsayı yazdırmalıdır). Bu problemde en büyüğü diğerlerinden daha az olmayan bir sayıdır.


  • -> 1 2 3
    Maksimum üç sayı: 3
  • Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; ana prosedür A, B, C'dir: Tamsayı; maksimum: Tamsayı; Put_Line'a başla( "Bir satıra üç tam sayı yazın ve Enter'a basın.") ); Put("-> ") ; Al(A); Get(B) ; Get(C) ; --Üç tamsayı girin maksimum:= A; --varsayılan A sayısının maksimum olduğunu varsayıyoruz eğer B > maksimum ise o zaman --Eğer B maksimumdan büyükse, o zaman maksimum:=B; --maksimum sayı B'dir eğer biterse; eğer C>maks ise o zaman --Eğer C maksimumdan büyükse, o zaman maksimum:= C; --maksimum sayı C'dir eğer biterse; Koymak( "En fazla üç sayı:"& Tamsayı"image(max) ); end main;

    Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; ana prosedür A, B, C'dir: Tamsayı; maksimum: Tamsayı; begin Put_Line("Bir satıra üç tamsayı girin ve Enter tuşuna basın."); Put("-> "); Al(A); Get(B); Get(C); --En fazla üç tamsayı girin:= A; --varsayılan olarak, eğer B > max ise A sayısının maksimum olduğunu varsayarız --Eğer B maksimumdan büyükse, max:= B; --maksimum sayı B sonudur if; eğer C > max ise --Eğer C maksimumdan büyükse, max:= C; --maksimum sayı C sonu ise; Put("En fazla üç sayı:" & Tamsayı"image(max)); end main;

    Verilen üç doğal sayılar A, B, C. Bu kenarları olan bir üçgen olup olmadığını belirleyin. Üçgen mevcutsa, bu kenarları olan bir üçgenin var olduğunu belirten bir mesaj yazdırın, aksi takdirde üçgenin mevcut olmadığını yazdırın.

  • Üçgenin üç kenarını yazın ve Enter tuşuna basın.
    -> 3 4 5
    Kenarları 3, 4, 5 olan bir üçgen vardır.
  • Üçgen aynı doğru üzerinde yer almayan üç noktadır. Bir üçgen ancak herhangi iki kenarının toplamı üçüncü kenardan büyük olduğunda var olur.

  • Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; --Tam sayıları okumak için Ada.Text_IO ile; Ada.Text_IO'yu kullanın; --Dizelerin çıktısını almak için ana prosedür a, b, c'dir: Tamsayı; Put_Line'a başla( "Üçgenin üç kenarını yazın ve Enter.Enter tuşuna basın.") ); Put("-> ") ; Al(a) ; Get(b) ; Get(c); --Üçgenin kenarlarını okuyun a + b > c ve sonra b + c > a ve sonra c + a > b ise o zaman --Tüm koşulları tek satırda test edin Koymak( "Kenarları olan üçgen"& Tamsayı"görüntü(a) & `` & Tamsayı"görüntü(b) & `` & Tamsayı"görüntü(c) & " mevcut" ) ; else Put( "Kenarları olan üçgen"& Tamsayı"görüntü(a) & `` & Tamsayı"görüntü(b) & `` & Tamsayı"görüntü(c) & " mevcut değil" ) ; end if ; end main;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; --Ada.Text_IO ile tamsayıları okumak için; Ada.Text_IO'yu kullanın; --Dizeleri görüntülemek için ana prosedür a, b, c: Tamsayı; begin Put_Line("Üçgenin üç kenarını girin ve Enter'a basın."); Put("-> "); Al(a); Al(b); Get(c); --Üçgenin kenarlarını okuyun eğer a + b > c ve sonra b + c > a ve sonra c + a > b sonra --Tüm koşulları tek satırda kontrol edin Put("Kenarları olan üçgen" & Tamsayı"image(a) ) & " ," & Tamsayı"görüntü(b) & "," & Tamsayı"görüntü(c) & " mevcut"); else Put("Kenarları olan üçgen" & Tamsayı"görüntü(a) & "," & Tamsayı "resim(b) & "," & Tamsayı"resim(c) & " mevcut değil"); eğer biterse; ana sonu;

    Üç tam sayı veriliyor. Kaç tanesinin eşleştiğini belirleyin. Program sayılardan birinin çıktısını vermelidir: 3 (eğer tüm sayılar aynıysa), 2 (eğer ikisi aynıysa) veya 0 (eğer tüm sayılar farklıysa).

  • Üç tam sayı girin ve Enter tuşuna basın.
    -> 1 2 3
    0
  • Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; prosedür Ana A, B, C: Tamsayı; Put_Line'a başla( "Üç tamsayı yazın ve Enter'a basın.") ); Put("-> ") ; Al(A); Get(B) ; Get(C) ; eğer A = B ve sonra A = C ise o zaman --Üç sayının tümü eşleşirse Put(Item => 3 , Genişlik => 1 ) ; elsif A = B veya A = C veya B = C o zaman --İki sayı eşleşirse Put(Item => 2 , Genişlik => 1 ) ; başka --Eğer aynı sayılar HAYIR Put(Item => 0 , Genişlik => 1 ) ; eğer biterse; Ana sonu;

    Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; prosedür Ana A, B, C: Tamsayı; begin Put_Line("Üç tamsayı girin ve Enter'a basın."); Put("-> "); Al(A); Get(B); Get(C); eğer A = B ve sonra A = C ise --Eğer üç sayının tümü eşleşiyorsa Put(Item => 3, Width => 1); elsif A = B veya A = C veya B = C o zaman --İki sayı eşleşirse Put(Item => 2, Width => 1); else --Eğer özdeş sayılar yoksa Put(Item => 0, Width => 1); eğer biterse; Ana sonu;

    Satranç kalesi yatay veya dikey olarak hareket eder. Bir satranç tahtasının iki farklı karesi verildiğinde, kalenin birinci kareden ikinci kareye tek hamlede geçip geçemeyeceğini belirleyin. Program, giriş olarak her biri 1'den 8'e kadar dört sayı alır; bu sayı, önce ilk hücre için, ardından ikinci hücre için sütun numarasını ve satır numarasını belirtir. Kalenin ilk hücreden hareketi ikinci hücreye ulaşabiliyorsa program "EVET", aksi takdirde "HAYIR" sonucunu vermelidir.


  • 4 4
    5 5
    HAYIR
  • ) ); Koymak() ; Al(A); Get(B) ; Koymak() ; Get(C) ; Almak d) ; eğer A = C veya B = D ise Put("YES" ) ; else Put("HAYIR" ); eğer biterse; Ana sonu;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana alt türdür kontrol Tahtası Tamsayı aralığı 1..8'dir; A, B, C, D: Kontrol Tahtası; begin Put_Line("İki hücre için sütun ve satır numaralarını girin:"); Put("İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Al(A); Get(B); Put("İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Get(C); Almak d); eğer A = C veya B = D ise Put("YES"); else Put("HAYIR"); eğer biterse; Ana sonu;

    Satranç şahı yatay, dikey ve çapraz olarak hareket eder, ancak yalnızca 1 kare hareket eder. Bir satranç tahtasının iki farklı karesi verildiğinde şahın birinci kareden ikinci kareye tek hamlede geçip geçemeyeceğini belirleyin. Program, giriş olarak her biri 1'den 8'e kadar dört sayı alır; bu sayı, önce ilk hücre için, ardından ikinci hücre için sütun numarasını ve satır numarasını belirtir. Eğer şahın ilk hücreden hareketi ikinci hücreye ulaşabiliyorsa program "EVET", aksi takdirde "HAYIR" çıktısı vermelidir.

  • İki hücrenin sütun ve satır numaralarını girin:
    İlk hücrenin sütun ve satır numaralarını girin ve şu tuşa basın: 4 4
    İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: 5 5
    EVET
  • "İki hücrenin sütun ve satır numaralarını girin:") ); Koymak( "İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Al(A); Get(B) ; Koymak( "İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Get(C) ; Almak d) ; eğer abs (A - C)<= 1 and then abs (B - D) <= 1 then -- abs() komutu mutlak değeri döndürür --sayının değeri (modülü) Put("EVET"); else Put("HAYIR" ); eğer biterse; ana sonu;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür ana alt türdür checkBoard Tamsayı aralığı 1..8'dir; A, B, C, D: Kontrol Tahtası; begin Put_Line("İki hücre için sütun ve satır numaralarını girin:"); Put("İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Al(A); Get(B); Put("İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Get(C); Almak d); eğer abs(A - C)<= 1 and then abs(B - D) <= 1 then -- команда abs() возвращает абсолютное --значение (модуль) числа Put("ДА"); else Put("НЕТ"); end if; end main;

    Satranç fili çapraz olarak hareket eder. Bir satranç tahtasının iki farklı karesi verildiğinde, filin birinci kareden ikinci kareye tek hamlede geçip geçemeyeceğini belirleyin. Program, giriş olarak her biri 1'den 8'e kadar dört sayı alır; bu sayı, önce ilk hücre için, ardından ikinci hücre için sütun numarasını ve satır numarasını belirtir. Filin ilk hücreden hareketi ikinci hücreye ulaşabiliyorsa program "EVET", aksi halde "Hayır" sonucunu vermelidir.

  • İki hücrenin sütun ve satır numaralarını girin:
    İlk hücrenin sütun ve satır numaralarını girin ve şu tuşa basın: 4 4
    İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: 5 5
    EVET
  • Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür ana alt tiptir checkBoard Tamsayı aralığı 1 ..8 ; A, B, C, D: Kontrol Tahtası; Put_Line'a başla( "İki hücrenin sütun ve satır numaralarını girin:") ); Koymak( "İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Al(A); Get(B) ; Koymak( "İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Get(C) ; Almak d) ; eğer abs (a - c) = abs (b - d) ise Put("YES" ) ; else Put("HAYIR" ); eğer biterse; ana sonu;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür ana alt türdür checkBoard Tamsayı aralığı 1..8'dir; A, B, C, D: Kontrol Tahtası; begin Put_Line("İki hücre için sütun ve satır numaralarını girin:"); Put("İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Al(A); Get(B); Put("İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Get(C); Almak d); eğer abs(a - c) = abs(b - d) ise Put("YES"); else Put("HAYIR"); eğer biterse; ana sonu;

    Satranç veziri çapraz, yatay veya dikey olarak hareket eder. Bir satranç tahtasının iki farklı karesi verildiğinde vezirin birinci kareden ikinci kareye tek hamlede geçip geçemeyeceğini belirleyin.

    Giriş formatı:
    Program, giriş olarak her biri 1'den 8'e kadar dört sayı alır; bu sayı, önce ilk hücre için, ardından ikinci hücre için sütun numarasını ve satır numarasını belirtir.
    Çıkış biçimi:
    Program, kraliçeyi ikinciye taşıyarak ilk hücreden almanın mümkün olması durumunda EVET, aksi halde HAYIR çıktısını vermelidir.

    Örnek 1:
    İki hücrenin sütun ve satır numaralarını girin:
    İlk hücrenin sütun ve satır numaralarını girin ve şu tuşa basın: 1 1
    İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: 2 2
    EVET

    Örnek 2:
    İki hücrenin sütun ve satır numaralarını girin:
    İlk hücrenin sütun ve satır numaralarını girin ve şu tuşa basın: 1 1
    İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: 2 3
    HAYIR

  • Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana alt tiptir kontrol Tahtası Tamsayı aralığı 1 ..8 ; A, B, C, D: Kontrol Tahtası; Put_Line'a başla( "İki hücrenin sütun ve satır numaralarını girin:") ); Koymak( "İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Al(A); Get(B) ; Koymak( "İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Get(C) ; Almak d) ; abs (A - C) = abs (B - D) veya A = D veya B = C ise Put("YES" ) ; else Put("HAYIR" ); eğer biterse; Ana sonu;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana alt türdür kontrol Tahtası Tamsayı aralığı 1..8'dir; A, B, C, D: Kontrol Tahtası; begin Put_Line("İki hücre için sütun ve satır numaralarını girin:"); Put("İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Al(A); Get(B); Put("İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Get(C); Almak d); abs(A - C) = abs(B - D) veya A = D veya B = C ise Put("YES"); else Put("HAYIR"); eğer biterse; Ana sonu;

    Bir satranç atı "G" harfiyle hareket eder - herhangi bir yönde dikey olarak iki kare ve yatay olarak bir kare veya tam tersi. Bir satranç tahtasının iki farklı karesi verildiğinde atın birinci kareden ikinci kareye tek hamlede geçip geçemeyeceğini belirleyin. Program, giriş olarak her biri 1'den 8'e kadar dört sayı alır; bu sayı, önce ilk hücre için, ardından ikinci hücre için sütun numarasını ve satır numarasını belirtir. Atın ilk hücreden hareketi ikinci hücreye ulaşabiliyorsa program EVET çıktısını vermelidir, aksi halde HAYIR çıktısını vermelidir.

    Örnek 1:
    İki hücrenin sütun ve satır numaralarını girin:
    İlk hücrenin sütun ve satır numaralarını girin ve şu tuşa basın: 1 1
    İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: 1 4
    HAYIR

    Örnek 2:
    İki hücrenin sütun ve satır numaralarını girin:
    İlk hücrenin sütun ve satır numaralarını girin ve şu tuşa basın: 1 1
    İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: 8 8
    HAYIR

  • Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; prosedür ana alt tiptir checkBoard Tamsayı aralığı 1 ..8 ; A, B, C, D: Tamsayı; Put_Line'a başla( "İki hücrenin sütun ve satır numaralarını girin:") ); Koymak( "İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Al(A); Get(B) ; Koymak( "İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: ") ); Get(C) ; Almak d) ; eğer abs (A - C) = 2 ve sonra abs (B - D) = 1 ise Put("YES" ) ; elsif abs (A - C) = 1 ve ardından abs (B - D) = 2 ve ardından Put("YES" ) ; else Put("HAYIR" ); eğer biterse; ana sonu;

    Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; prosedür ana alt türdür checkBoard Tamsayı aralığı 1..8'dir; A, B, C, D: Tamsayı; begin Put_Line("İki hücre için sütun ve satır numaralarını girin:"); Put("İlk hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Al(A); Get(B); Put("İkinci hücrenin sütun ve satır numaralarını girin ve tıklayın: "); Get(C); Almak d); eğer abs(A - C) = 2 ve ardından abs(B - D) = 1 ise Put("YES"); elsif abs(A - C) = 1 ve sonra abs(B - D) = 2 ve ardından Put("YES"); else Put("HAYIR"); eğer biterse; ana sonu;

    Çikolata N×M dilimlere bölünmüş bir dikdörtgen şeklindedir. Çikolata düz bir çizgide bir kez iki parçaya bölünebilir. Bu şekilde bir çikolatadan tam olarak K adet dilim ayırmanın mümkün olup olmadığını belirleyin. Program giriş olarak üç sayı alır: N, M, K. Programın çıktısı iki kelimeden biri olmalıdır: "EVET" veya "Hayır".

    Örnek 1:
    4
    2
    6
    EVET

    Örnek 2:
    Yatay dilim sayısı: 2
    Dikey dilim sayısı: 10
    Kaç dilimin ayrılması gerekiyor: 7
    HAYIR

  • Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; prosedür Ana N, M, K'dir: Tamsayı; Koymaya başla( "Yatay dilim sayısı: ") ); Get(N) ; Koymak( "Dikey olarak dilim sayısı: ") ); M almak); Koymak( "Kaç dilimin ayrılması gerekiyor: ") ); Get(K) ; eğer K > M * N ise o zaman --Sizden çikolatanın kendisinden daha fazlasını bir çikolata barından ayırmanız istenirse Put("HAYIR"); elsif K rem N = 0 ve sonra K >= N sonra --Yatay olarak kırın Put("EVET"); elsif K rem M = 0 ve sonra K >= M sonra -- Dikey olarak kırın Put("EVET"); else Put("HAYIR" ); eğer biterse; Ana sonu;

    Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; prosedür Ana N, M, K'dir: Tamsayı; begin Put("Yatay dilim sayısı: "); Get(N); Put("Dikey dilim sayısı: "); M almak); Put("Kaç dilime ayrılması gerekiyor: "); Get(K); eğer K > M * N ise --Eğer bir çikolatanın kendisinden daha fazla kırılması istenirse Put("NO"); elsif K rem N = 0 ve sonra K >= N sonra --Break off yatay Put("YES"); elsif K rem M = 0 ve sonra K >= M sonra --Dikey olarak kırın Put("YES"); else Put("HAYIR"); eğer biterse; Ana sonu;

    Yasha N×M metrelik bir havuzda yüzüyordu ve yoruldu. Bu anda uzun kenarlardan birinden X metre (en yakın olandan olması şart değil) ve kısa kenarlardan birinden Y metre uzaklıkta olduğunu keşfetti. Havuzdan yan tarafa çıkmak için Yasha'nın yüzmesi gereken minimum mesafe nedir? Program girdi olarak N, M, X, Y sayılarını alır. Program, Yasha'nın yana doğru yüzmesi için ihtiyaç duyduğu metre sayısını çıkarmalıdır.

  • Havuz genişliği: 23
    Havuz uzunluğu: 52
    Yasha'dan uzun tarafa olan mesafe: 8
    Yasha'dan kısa tarafa olan mesafe: 43
    Havuzdan çıkmak için minimum düzeyde yüzmeniz gerekir: 8
  • Sorunu çözmek için 2 değişkeni değiştirmeniz gerekebilir. Bu algoritma şuna benzer:

    a, b, tmp: Tamsayı; --Değişkenlerin beyanı. İki ana ve bir yardımcı a:= 3; --Değişkeni başlat a b:= 5; --b değişkeninin başlatılması --Algoritmanın kendisi: tmp:= a; --Şimdi tmp = 3 ve a = 3 a:= b; --Şimdi a = 5 ve b = 5; b:=tmp; --Şimdi b = 3

  • Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; prosedür Ana N, M, X, Y'dir: Tamsayı; -- N - kısa kenar, M - uzun kenar: -- X - Uzun kenarlardan birine olan mesafe -- Y - Kısa kenarlardan birine olan mesafe Tmp: Tamsayı; Koymaya başla( "Havuz genişliği: ") ); Get(N) ; Koymak( "Havuz uzunluğu: ") ); M almak); Koymak( "Yasha'dan uzun tarafa olan mesafe: ") ); Get(X); Koymak( "Yasha'dan kısa tarafa olan mesafe: ") ); Get(Y); eğer N > M ise o zaman --Girişte kenarlar karışırsa değiştirin: Tmp:= M; --M uzunluğunu geçici bir değişkene kaydedin M:= N; --M değişkenine yeni bir değer atayın N:= Tmp; --M uzunluğunu N değişkenine geri yükleyin eğer biterse; Tmp:=X; --Minimum mesafenin X olduğunu varsayalım eğer abs (N - X)< X then --İkinci uzun kenara olan mesafe X'ten küçükse, o zaman Tmp:= N - X; --minimum mesafe ikinci uzun kenara olan mesafeye eşittir eğer biterse; eğer Y< Tmp then --Kısa kenara olan mesafe yukarıda bulunandan daha az ise --minimum, o zaman Tmp:=Y; --Minimum mesafe Y'dir eğer biterse; abs (M - Y) ise< Tmp then --İkinci kısa kenara doğru yüzerseniz, o zaman Tmp:= abs (M - Y) ; --minimum mesafe ikinci kısa kenara olan mesafeye eşittir eğer biterse; Koymak( "Havuzdan çıkmak için minimum düzeyde yüzmeniz gerekiyor:") ); Put(Item => Tmp, Width => 1 ) ; Ana sonu;

    Ada.Text_IO ile; Ada.Text_IO'yu kullanın; Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; prosedür Ana N, M, X, Y'dir: Tamsayı; -- N - kısa kenar, M - uzun kenar: -- X - Uzun kenarlardan birine olan mesafe -- Y - Kısa kenarlardan birine olan mesafe Tmp: Tamsayı; begin Put("Havuz genişliği: "); Get(N); Put("Havuz uzunluğu:"); M almak); Put("Yasha'dan uzun kenara olan mesafe: "); Get(X); Put("Yasha'dan kısa kenara olan mesafe: "); Get(Y); eğer N > M ise --Girişte kenarlar karışıyorsa yer değiştirin: Tmp:= M; --M uzunluğunu geçici bir M değişkenine kaydedin:= N; --M değişkenine yeni bir N değeri atayın:= Tmp; --Eğer M uzunluğunu N ucundaki değişkene geri yükleyin, eğer; Tmp:=X; --Abs(N - X) ise minimum mesafenin X olduğunu varsayalım< X then --Если до второго длинного бортика расстояние меньше X, то Tmp:= N - X; --минимальное расстояние равно расстоянию до второго длинного бортика end if; if Y < Tmp then --Если до короткого бортика расстояние меньше найденного выше --минимального, то Tmp:= Y; --Минимальное расстояние равно Y end if; if abs(M - Y) < Tmp then --Если до второго короткого бортика плыть ближе, то Tmp:= abs(M - Y); --минимальное расстояние равно расстоянию до второго короткого бортика end if; Put("Нужно проплыть минимум, чтобы выбраться из бассейна: "); Put(Item =>Tmp, Genişlik => 1); Ana sonu;

    Elektronik saatler zamanı h:dd:ss (0:00:00'dan 23:59:59'a kadar) formatında gösterir, yani önce saat sayısı kaydedilir, ardından iki basamaklı dakika sayısı gerekir, ardından iki basamaklı bir saniye sayısı gereklidir. Gerekirse dakika ve saniye sayısı sıfırlarla iki basamaklı bir sayıya eklenir. Günün başlangıcından bu yana N saniye geçti. Saatin ne göstereceğini yazdırın. Girdiye 10 7'yi (10000000) aşmayan bir N doğal sayısı verilir. Sorunun cevabını yazdırın.

    Giriş örneği 1:
    3602
    Örnek çıktı 1:
    1:00:02

    Giriş örneği 2:
    129700
    Örnek çıktı 2:
    12:01:40

  • Ada.Long_Integer_Text_IO ile; Ada.Long_Integer_Text_IO kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana alt türdür Sub_LI Long_Integer aralığıdır 1 ..10000000 ; N: Alt_LI; h, m, s: Uzun_Tamsayı; beginGet(N) ; h:= N / 3600; --Saati alıyoruz. Bölmenin geri kalanı atılır N:= N - h * 3600; --Kalan saniyeleri alın (saat eksi) eğer h > 24 ise o zaman --Saat >24'ü gösteremeyeceği için her şeyi okunabilir bir forma koyuyoruz h:= h rem 24; --24'e bölümün geri kalanı tam saat sayısını verecektir elsif h = 24 o zaman h:= 0 ; eğer biterse; m:= N / 60; --Dakika alınıyor s:= N rem 60; --Saniyeler alınıyor Put(Item => h, Width => 1 ) ; Koymak(":" ) ; --Saatlerin çıktısı ve ":" eğer m< 10 then --Dakika sayısı 10'dan azsa, çıkış 0'dan önce gelir Put(Item => 0 , Genişlik => 1 ) ; eğer biterse; Put(Item => m, Genişlik => 1 ) ; Koymak(":" ) ; --Dakika ve ":" çıktısı eğer öyleyse< 10 then --Saniye sayısı 10'dan azsa, çıkış 0'dan önce gelir Put(Item => 0 , Genişlik => 1 ) ; eğer biterse; Put(Item => s, Genişlik => 1 ) ; --Çıkış saniyeleri Ana sonu;

    Ada.Long_Integer_Text_IO ile; Ada.Long_Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana alt türdür Sub_LI, Long_Integer aralığı 1..10000000'dir; N: Alt_LI; h, m, s: Uzun_Tamsayı; beginGet(N); h:= N / 3600; --Saati alıyoruz. Bölmenin geri kalanı atılır N:= N - h * 3600; --Kalan saniyeleri alın (saat eksi) eğer h > 24 ise --Saat > 24 gösteremediği için her şeyi okunabilir bir forma koyarız h:= h rem 24; --24'e bölümün geri kalanı tam saat sayısını verecektir, elsif h = 24 sonra h:= 0; eğer biterse; m:= N / 60; --Dakika alın s:= N rem 60; --Saniyeleri alın Put(Item => h, Width => 1); Koymak(":"); --Saatin çıktısını alın ve m ise ":"< 10 then --Если количество минут меньше 10, выводим ведущий 0 Put(Item =>0, Genişlik => 1); eğer biterse; Put(Item => m, Genişlik => 1); Koymak(":"); --Dakika çıktısı ve ":" eğer s< 10 then --Если количество секунд меньше 10, выводим ведущий 0 Put(Item =>0, Genişlik => 1); eğer biterse; Put(Item => s, Genişlik => 1); --Çıkış saniyeleri Ana sonu;

  • Üç sayı veriliyor. Bunları artan sırada düzenleyin.
  • Örnek giriş:
    1 2 1
    Örnek çıktı:
    1 1 2
  • Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana A, B, C: Tamsayı; min, orta, maks: Tamsayı; beginGet(A) ; Get(B) ; Get(C) ; --Arıyorum Minimum değer dk:= A; eğer B< min then min:= B; end if ; if C < min then min:= C; end if ; --Maksimum değeri aramak maksimum:= A; eğer B > maksimum ise maksimum:= B; eğer biterse; eğer C > maksimum ise maksimum:= C; eğer biterse; --Ortalama değer aranıyor orta:= A; eğer B > min ve B ise< max then mid:= B; end if ; if C >dk ve C< max then mid:= C; end if ; Put(Item =>min, Genişlik => 1 ) ; Koymak(" "); Put(Item => orta, genişlik => 1 ) ; Koymak(" "); Put(Item => max, Width => 1 ) ; Ana sonu;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana A, B, C: Tamsayı; min, orta, maks: Tamsayı; beginGet(A); Get(B); Get(C); --Minimum değer aranıyor:= A; eğer B< min then min:= B; end if; if C < min then min:= C; end if; --Ищем максимальное значение max:= A; if B >maksimum sonra maksimum:= B; eğer biterse; eğer C > maksimum ise maksimum:= C; eğer biterse; --Ortalama değer aranıyor mid:= A; eğer B > min ve B ise< max then mid:= B; end if; if C >dk ve C< max then mid:= C; end if; Put(Item =>min, Genişlik => 1); Koymak(" "); Put(Item => orta, genişlik => 1); Koymak(" "); Put(Item => max, Width => 1); Ana sonu;

    İki kutu var, birincisi A1xB1xC1 boyutunda, ikincisi A2xB2xC2 boyutunda. Kutuların kenarları etrafında yalnızca 90 derece döndürülebilmesi koşuluyla, bu kutulardan birinin diğerinin içine yerleştirilip yerleştirilemeyeceğini belirleyin. Program giriş olarak A1, B1, C1, A2, B2, C2 sayılarını alır. Program aşağıdaki satırlardan birinin çıktısını almalıdır:
    - Kutular aynı ise “Kutular eşittir”,
    - Birinci kutu ikinciye yerleştirilebiliyorsa “Birinci kutu ikinciden küçüktür”,
    - "İlk kutu ikinciden daha fazla", eğer ikinci kutu birinciye yerleştirilebilirse.

    Örnek 1:
    İlk kutunun boyutları: 1 2 3
    İkinci kutunun boyutları: 3 2 1
    Kutular eşittir

    Örnek 2:
    İlk kutunun boyutları: 2 2 3
    İkinci kutunun boyutları: 3 2 1
    İlk kutu ikincisinden daha büyük

  • Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; ana prosedür A1, B1, C1, A2, B2, C2'dir: Tamsayı; min, maks, orta, tmp: Tamsayı; beginGet(A1) ; Get(B1) ; Get(C1) ; Al(A2) ; Get(B2) ; Get(C2) ; --Yüzleri A1 => A2, B1 => B2, C1 => C2 uzunluğunda denkleştiriyoruz: --A1 ve A2 en uzun, C1 ve C2 en kısadır -- İlk kutuyu “Döndürün”: dk:= A1; orta:= B1; maks:= C1; eğer B1< min then mid:= min; min:= B1; end if ; if C1 < min then max:= min; min:= C1; end if ; if mid >maksimum sonra tmp:= orta; orta:=maks; maksimum:=tmp; eğer biterse; A1:=dak; B1:=orta; C1:= maksimum; -- İkinci kutuyu “Döndürün”: en az:= A2; orta:= B2; maks:= C2; eğer B2< min then mid:= min; min:= B2; end if ; if C2 < min then max:= min; min:= C2; end if ; if mid >maksimum sonra tmp:= orta; orta:=maks; maksimum:=tmp; eğer biterse; A2:=dak; B2:=orta; C2:= maksimum; --Kutuların yazışmalarının kontrol edilmesi ve sonucun görüntülenmesi: eğer A1 = A2 ve sonra B1 = B2 ve sonra C1 = C2 ise Put_Line("Kutular eşittir" ) ; elsif A1 >= A2 ve sonra B1 >= B2 ve sonra C1 >= C2 sonra Put_Line( "İlk kutu ikincisinden daha büyük") ); Elsif A1<= A2 and then B1 <= B2 and then C1 <= C2 then Put_Line("İlk kutu ikinciden daha küçük") ); eğer biterse; ana sonu;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; ana prosedür A1, B1, C1, A2, B2, C2'dir: Tamsayı; min, maks, orta, tmp: Tamsayı; beginGet(A1); Get(B1); Get(C1); Al(A2); Al(B2); Al(C2); --Kenarları uzunluk olarak denkleştiriyoruz A1 => A2, B1 => B2, C1 => C2: --A1 ve A2 en uzun, C1 ve C2 en kısa -- İlk kutuyu "Bükün": min := A1; orta:= B1; maks:= C1; eğer B1< min then mid:= min; min:= B1; end if; if C1 < min then max:= min; min:= C1; end if; if mid >maksimum sonra tmp:= orta; orta:=maks; maksimum:=tmp; eğer biterse; A1:=dak; B1:=orta; C1:= maksimum; -- İkinci kutuyu "Döndürün": min:= A2; orta:= B2; maks:= C2; eğer B2< min then mid:= min; min:= B2; end if; if C2 < min then max:= min; min:= C2; end if; if mid >maksimum sonra tmp:= orta; orta:= maksimum; maksimum:=tmp; eğer biterse; A2:=dak; B2:=orta; C2:= maksimum; --Kutuların yazışmalarının kontrol edilmesi ve sonucun görüntülenmesi: eğer A1 = A2 ve sonra B1 = B2 ve sonra C1 = C2 ise Put_Line("Kutular eşittir"); elsif A1 >= A2 ve sonra B1 >= B2 ve sonra C1 >= C2 sonra Put_Line("Birinci kutu ikinciden daha büyük"); Elsif A1<= A2 and then B1 <= B2 and then C1 <= C2 then Put_Line("Первая коробка меньше второй"); end if; end main;

    Şehirlerarası telefon görüşmesinin maliyetini hesaplayan bir program yazınız (bir dakikanın ücreti abonenin bulunduğu şehre olan mesafeye göre belirlenir). Programın giriş verileri alan kodu ve çağrı süresidir. Bazı şehirlerin kodları ve program çalışırken önerilen ekran görüntüleri aşağıdadır:

  • Bir telefon görüşmesinin maliyetini hesaplamak.
    Başlangıç ​​verilerini girin:
    Alan kodu -> 423
    Süre (dakikaların tamsayı sayısı) -> 3
    Vladivostok şehri
    Dakika başına fiyat: 4 ruble.
    Arama ücreti: 12 ruble.
  • Ada.Integer_Text_IO ile; Ada.Integer_Text_IO kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana dır-dir Kod, Len: Tamsayı; başlamak Put_Line ("Bir telefon görüşmesinin maliyetini hesaplamak.") ; Put_Line ("Başlangıç ​​verilerini girin:") ; Koymak ("Alan kodu ->") ; Elde etmek ( Kod ) ; Koymak ("Süre (dakikaların tamsayı sayısı) -> ") ; Elde etmek ( uzun ) ; dava Kod dır-dir Ne zaman 423 => Put_Line ("Vladivostok şehri") ; Put_Line ("Dakika başına fiyat: 4 ruble.") ; Koymak ("Arama ücreti: ") ; Koymak (Öğe => len * 4 , Genişlik => 1 ) ; Put_Line ("ovmak.") ; Ne zaman 095 => Put_Line ("Moskova şehri") ; Put_Line ("Dakika başına fiyat: 2 ruble.") ; Koymak ("Arama ücreti: ") ; Koymak (Öğe => len * 2 , Genişlik => 1 ) ; Put_Line ("ovmak.") ; Ne zaman 815 => Put_Line ("Şehir: Murmansk") ; Put_Line ("Dakika başına fiyat: 3 ruble.") ; Koymak ("Arama ücreti: ") ; Koymak (Öğe => len * 3 , Genişlik => 1 ) ; Put_Line ("ovmak.") ; Ne zaman 846 => Put_Line ("Samara şehri") ; Put_Line ("Dakika başına fiyat: 1 ovmak.") ; Koymak ("Arama ücreti: ") ; Koymak (Öğe => uzunluk, Genişlik => 1 ) ; Put_Line ("ovmak.") ; Ne zaman diğerleri=> Koy ("Veritabanında bu kodun bulunduğu şehir yok! Tekrar deneyin.") ; son dava; son Ana;

    Ada.Integer_Text_IO ile; Ada.Integer_Text_IO'yu kullanın; Ada.Text_IO ile; Ada.Text_IO'yu kullanın; prosedür Ana Kod, Len: Tamsayı; begin Put_Line("Bir telefon görüşmesinin ücreti hesaplanıyor."); Put_Line("Başlangıç ​​verilerini girin:"); Put("Alan kodu -> "); Get(Kod); Put("Süre (dakikaların tamsayı sayısı) -> "); Get(len); durum Kodu şu zaman 423 => Put_Line("Şehir: Vladivostok"); Put_Line("Dakikalık fiyat: 4 ruble."); Put("Çağrı ücreti: "); Put(Item => len * 4, Genişlik => 1); Put_Line("ovmak."); ne zaman 095 => Put_Line("Şehir: Moskova"); Put_Line("Dakikalık fiyat: 2 ruble."); Put("Çağrı ücreti: "); Put(Item => len * 2, Genişlik => 1); Put_Line("ovmak."); ne zaman 815 => Put_Line("Şehir: Murmansk"); Put_Line("Dakikalık fiyat: 3 rub."); Put("Çağrı ücreti: "); Put(Item => len * 3, Genişlik => 1); Put_Line("ovmak."); When 846 => Put_Line("Şehir: Samara"); Put_Line("Dakikalık fiyat: 1 rub."); Put("Çağrı ücreti: "); Put(Item => len, Width => 1); Put_Line("ovmak."); when diğerleri => Put("Veritabanında bu koda sahip şehir yok! Tekrar deneyin."); son durum; Ana sonu;

Bu bölümde operatörler kısaca açıklanmaktadır eğer Ve dava, işlev abs() ve değişkenleri değiştirmek için bir algoritma.

İş türü: 8
Tema: Prizma

Durum

ABCA_1B_1C_1 düzgün üçgen prizmasında tabanın kenarları 4'tür ve yan kaburga 10'a eşittir. AB, AC, A_1B_1 ve A_1C_1 kenarlarının orta noktalarından geçen düzleme göre prizmanın kesit alanını bulun.

Çözümü göster

Çözüm

Aşağıdaki şekli düşünün.

MN segmenti A_1B_1C_1 üçgeninin orta çizgisidir, dolayısıyla MN = \frac12 B_1C_1=2. Aynı şekilde, KL=\frac12BC=2. Ayrıca MK = NL = 10. Buradan MNLK dörtgeninin bir paralelkenar olduğu sonucu çıkar. MK\paralel AA_1 olduğundan, MK\perp ABC ve MK\perp KL olur. Bu nedenle MNLK dörtgeni bir dikdörtgendir. S_(MNLK) = MK\cdot KL = 10\cdot 2 = 20.

Cevap

İş türü: 8
Tema: Prizma

Durum

ABCDA_1B_1C_1D_1 düzgün dörtgen prizmasının hacmi 24'tür. K noktası CC_1 kenarının ortasıdır. KBCD piramidinin hacmini bulun.

Çözümü göster

Çözüm

Koşula göre KC, KBCD piramidinin yüksekliğidir. CC_1, ABCDA_1B_1C_1D_1 prizmasının yüksekliğidir.

K, CC_1'in orta noktası olduğundan, o zaman KC=\frac12CC_1. CC_1=H olsun, o zaman KC=\frac12H. Şunu da unutmayın S_(BCD)=\frac12S_(ABCD). Daha sonra, V_(KBCD)= \frac13S_(BCD)\cdot\frac(H)(2)= \frac13\cdot\frac12S_(ABCD)\cdot\frac(H)(2)= \frac(1)(12)\cdot S_(ABCD)\cdot H= \frac(1)(12)V_(ABCDA_1B_1C_1D_1). Buradan, V_(KBCD)=\frac(1)(12)\cdot24=2.

Cevap

Kaynak: “Matematik. Birleşik Devlet Sınavı 2017'ye hazırlık. Profil düzeyi" Ed. F. F. Lysenko, S. Yu.Kulabukhova.

İş türü: 8
Tema: Prizma

Durum

Taban kenarı 6, yüksekliği 8 olan düzgün altıgen prizmanın yan yüzey alanını bulun.

Çözümü göster

Çözüm

Prizmanın yan yüzeyinin alanı S formülü ile bulunur. = P temel · h = 6a\cdot h, burada P temel. ve h sırasıyla tabanın çevresi ve prizmanın yüksekliğidir, 8'e eşittir ve a, 6'ya eşit bir düzgün altıgenin kenarıdır. Bu nedenle S tarafı. = 6\cdot 6\cdot 8 = 288.

Cevap

Kaynak: “Matematik. Birleşik Devlet Sınavı 2017'ye hazırlık. Profil seviyesi." Ed. F. F. Lysenko, S. Yu.Kulabukhova.

İş türü: 8
Tema: Prizma

Durum

Düzenli bir şekle sahip bir kapta üçgen prizma, su döktü. Su seviyesi 40 cm'ye ulaşır Taban tarafı birincinin iki katı büyüklüğünde olan aynı şekle sahip başka bir kaba dökülürse su seviyesi ne kadar yükseklikte olur? Cevabınızı santimetre cinsinden ifade edin.

Çözümü göster

Çözüm

A, birinci kabın taban tarafı olsun, o zaman 2 a, ikinci kabın tabanının yanı olsun. Koşul gereği, birinci ve ikinci kaplardaki sıvı V'nin hacmi aynıdır. İkinci kaptaki sıvının yükseldiği seviyeyi H ile gösterelim. Daha sonra v= \frac12\cdot a^2\cdot\sin60^(\circ)\cdot40= \frac(a^2\sqrt3)(4)\cdot40, Ve, V=\frac((2a)^2\sqrt3)(4)\cdot H. Buradan \frac(a^2\sqrt3)(4)\cdot40=\frac((2a)^2\sqrt3)(4)\cdot H, 40=4H, H=10.

Cevap

Kaynak: “Matematik. Birleşik Devlet Sınavı 2017'ye hazırlık. Profil seviyesi." Ed. F. F. Lysenko, S. Yu.Kulabukhova.

İş türü: 8
Tema: Prizma

Durum

Normal bir altıgen prizmada ABCDEFA_1B_1C_1D_1E_1F_1 tüm kenarlar 2'ye eşittir. A ve E_1 noktaları arasındaki mesafeyi bulun.

Çözümü göster

Çözüm

AEE_1 üçgeni dikdörtgendir, EE_1 kenarı prizmanın taban düzlemine dik olduğundan, AEE_1 açısı dik açı olacaktır.

O zaman Pisagor teoremine göre AE_1^2 = AE^2 + EE_1^2. Kosinüs teoremini kullanarak AFE üçgeninden AE'yi bulalım. Düzgün altıgenin her bir iç açısı 120^(\circ)'dir. Daha sonra AE^2= AF^2+FE^2-2\cdot AF\cdot FE\cdot\cos120^(\circ)= 2^2+2^2-2\cdot2\cdot2\cdot\left (-\frac12 \right).

Dolayısıyla AE^2=4+4+4=12,

AE_1^2=12+4=16,

AE_1=4.

Cevap

Kaynak: “Matematik. Birleşik Devlet Sınavı 2017'ye hazırlık. Profil seviyesi." Ed. F. F. Lysenko, S. Yu.Kulabukhova.

İş türü: 8
Tema: Prizma

Durum

Tabanında köşegenleri eşit olan bir eşkenar dörtgen bulunan düz bir prizmanın yan yüzey alanını bulun. 4\sqrt5 ve 8 ve bir yan kenar 5'e eşittir.

Çözümü göster

Çözüm

Düz bir prizmanın yan yüzeyinin alanı S tarafı formülü ile bulunur. = P temel · h = 4a\cdot h, burada P temel. ve h, sırasıyla tabanın çevresi ve prizmanın yüksekliği, 5'e eşittir ve a, eşkenar dörtgenin kenarıdır. ABCD eşkenar dörtgeninin köşegenlerinin karşılıklı olarak dik ve kesişme noktası tarafından ikiye bölündüğü gerçeğini kullanarak eşkenar dörtgenin kenarını bulalım.

Habrahabr okuyucularına DataGenetics web sitesinde bulduğum “100 Mahkum Kaçış Bulmacası” adlı yayının çevirisini sunuyorum. Lütfen bu makaleyle ilgili hataları özel mesajla gönderin.

Soruna göre cezaevinde 100 mahkûm var ve bunların her biri Personel sayısı 1'den 100'e kadar. Gardiyan, mahkumlara serbest bırakılma şansı vermeye karar verir ve kendi icat ettiği bir testten geçmeyi teklif eder. Eğer mahkumların hepsi başarılı olursa özgür olacaklar, en azından biri başarısız olursa hepsi ölecek.

Görev

Gardiyan gizli odaya gider ve kapaklı 100 kutu hazırlar. Her kutunun üzerine 1'den 100'e kadar numaralandırılmış sayılar koyuyor. Daha sonra mahkum sayısına göre 100 adet kağıt tablet getiriyor ve bu tabletleri 1'den 100'e kadar numaralandırıyor. Daha sonra 100 tableti karıştırıp her kutuya birer tablet koyuyor. kapağı kapatmak. Mahkumlar, gardiyanın tüm bu eylemleri gerçekleştirdiğini görmezler.

Yarışma başlar, gardiyan her mahkumu teker teker kutuların bulunduğu bir odaya götürür ve mahkumlara, içinde mahkumun numarasının yazılı olduğu bir işaret bulunan bir kutu bulmaları gerektiğini söyler. Mahkumlar kutuları açarak plakalarını bulmaya çalışıyor. Her kişinin en fazla 50 kutu açmasına izin verilir; mahkumlardan her biri numarasını bulursa mahkumlar serbest bırakılacak, en az biri 50 denemede numarasını bulamazsa tüm mahkumlar ölecek.

Mahkumların serbest bırakılabilmesi için TÜM mahkumların testi geçmesi gerekiyor.

Peki mahkumların affedilme şansı nedir?

  • Sandık mahkûm tarafından açılıp tabelayı kontrol edildikten sonra tekrar kutuya konulur ve kapağı tekrar kapatılır;
  • Plakalar yer yer değiştirilemez;
  • Test başladıktan sonra mahkumlar birbirlerine ipucu bırakamaz veya birbirleriyle hiçbir şekilde etkileşime giremez;
  • Test başlamadan önce mahkumların stratejiyi tartışmasına izin veriliyor.

Mahkumlar için en uygun strateji nedir?

Ek soru:
Eğer bir mahkum arkadaşı (teste katılmayan) testin başlamasından önce gizli odaya girme fırsatına sahipse, tüm kutulardaki tüm işaretleri inceleyin ve (isteğe bağlı, ancak gerekli değildir) iki kutudaki iki işareti değiştirin ( bu durumda arkadaşının - eylemlerinin sonucu hakkında mahkumları bilgilendirme fırsatı olmayacaktır), mahkumların kurtuluş şansını artırmak için nasıl bir strateji izlemesi gerekir?

Çözüm olası değil mi?

İlk bakışta bu görev neredeyse umutsuz görünüyor. Her mahkumun kendi işaretini bulma şansının mikroskobik derecede küçük olduğu görülüyor. Ayrıca mahkumlar test sırasında birbirleriyle bilgi alışverişinde bulunamıyor.

Bir mahkumun şansı 50:50'dir. Toplamda 100 kutu var ve burcunu bulmak için 50'ye kadar kutu açabiliyor. Kutuları rastgele açıp kutuların yarısını açarsa kutuların açık olan yarısında kendi işaretini bulacak veya kapalı 50 kutunun içinde işareti kalacaktır. Başarı şansı ½'dir.

İki mahkum alalım. Her ikisi de kutuları rastgele seçerse, her birinin şansı ½ ve her ikisinin de şansı ½x½=¼ olacaktır.
(iki mahkum için başarı dört vakadan birinde olacaktır).

Üç mahkum için oran ½ × ½ × ½ = ⅛ olacaktır.

100 mahkum için oranlar şöyledir: ½ × ½ × … ½ × ½ (100 ile çarpılır).

Bu eşittir

Pr ≈ 0,00000000000000000000000000000008

Yani bu çok küçük bir ihtimal. Bu durumda büyük olasılıkla tüm mahkumlar ölecek.

İnanılmaz cevap

Her mahkum kutuları rastgele açsaydı, testi geçmeleri pek mümkün olmayacaktı. Mahkumların %30'dan fazla başarı bekleyebileceği bir strateji var. Bu şaşırtıcı derecede inanılmaz bir sonuçtur (eğer bu matematik problemini daha önce duymadıysanız).

100 mahkumun tamamı için %30'dan fazla! Evet, kutuları rastgele açmaları şartıyla bu, iki mahkumun şansından bile daha iyi. Ama bu nasıl mümkün olabilir?

Her mahkum için bir şansın %50'den fazla olamayacağı açıktır (sonuçta mahkumlar arasında iletişim kurmanın bir yolu yoktur). Ancak bilgilerin kutuların içindeki plakaların dizilişinde saklandığını unutmayın. Hiç kimse mahkumların odaya bireysel ziyaretleri arasında tabelaları karıştırmaz, böylece bu bilgiyi kullanabiliriz.

Çözüm

Önce size çözümü anlatacağım, sonra neden işe yaradığını açıklayacağım.

Strateji son derece kolaydır. İlk mahkum, kıyafetlerinin üzerinde yazılı olan numaranın bulunduğu kutuyu açar. Örneğin 78 numaralı mahkum, 78 numaralı kutuyu açıyor. Eğer numarasını kutunun içindeki bir tabelada bulursa harika! Değilse “kendi” kutusundaki plakadaki numaraya bakar ve bu numaranın bulunduğu bir sonraki kutuyu açar. İkinci kutuyu açtıktan sonra bu kutunun içindeki plakanın numarasına bakar ve bu numaranın bulunduğu üçüncü kutuyu açar. Daha sonra bu stratejiyi kalan kutulara aktarıyoruz. Netlik sağlamak için resme bakın:

Sonunda mahkum ya numarasını bulacak ya da 50 kutu sınırına ulaşacaktır. İlk bakışta bu, rastgele bir kutu seçmekle karşılaştırıldığında anlamsız görünebilir (ve tek bir mahkum için öyledir), ancak 100 mahkumun tümü aynı kutu setini kullanacağından mantıklıdır.

Bu matematik probleminin güzelliği sadece sonucu bilmek değil, aynı zamanda anlamaktır. Neden bu strateji işe yarıyor.

Peki strateji neden işe yarıyor?

Her kutuda bir işaret bulunur ve bu işaret benzersizdir. Bu, plakanın aynı numaraya sahip bir kutuda olduğu veya farklı bir kutuya işaret ettiği anlamına gelir. Tüm işaretler benzersiz olduğundan, her kutu için onu gösteren yalnızca bir işaret vardır (ve o kutuya ulaşmanın yalnızca tek bir yolu vardır).

Düşündüğünüzde kutular kapalı dairesel bir zincir oluşturuyor. Bir kutu yalnızca bir zincirin parçası olabilir, çünkü bir kutunun içinde diğerine giden yalnızca bir işaretçi vardır ve buna göre önceki kutuda belirli bir kutuya yalnızca bir işaretçi vardır (programcılar bağlantılı listelerle analojiyi görebilir) .

Eğer kutu kendisine bakmıyorsa (kutunun numarası içindeki plakanın numarasına eşitse) o zaman zincirde olacaktır. Bazı zincirler iki kutudan oluşabilir, bazıları ise daha uzundur.

Tüm mahkumlar kıyafetleriyle aynı numaraya sahip bir kutuyla başladıkları için tanım gereği kendi işaretlerini içeren bir zincire yerleştirilirler (bu kutuyu işaret eden tek bir işaret vardır).

Bu zincir boyunca daire şeklinde kutuları keşfederek sonunda işaretlerini bulmaları garanti edilir.

Geriye tek soru 50 hamlede işaretlerini bulup bulmayacakları kalıyor.

Zincir uzunluğu

Tüm mahkumların testi geçebilmesi için maksimum zincir uzunluğunun 50 kutudan az olması gerekiyor. Zincir 50 kutudan uzunsa, bu zincirlerden numara alan mahkumlar testi geçemeyecek ve tüm mahkumlar ölmüş olacak.

En uzun zincirin maksimum uzunluğu 50 kutudan azsa tüm mahkumlar testi geçecektir!

Bir saniyeliğine bunu düşün. Plakaların herhangi bir düzeninde 50 kutudan uzun yalnızca bir zincir olabileceği ortaya çıktı (yalnızca 100 kutumuz var, yani eğer bir zincir 50'den uzunsa, geri kalanlar sonunda 50'den kısa olacaktır) .

Uzun zincirli bir düzen şansı

Başarılı olmak için maksimum zincir uzunluğunun 50'den küçük veya ona eşit olması gerektiğine ve herhangi bir sette yalnızca bir uzun zincir olabileceğine kendinizi ikna ettikten sonra testi geçme olasılığını hesaplayabiliriz:

Biraz daha matematik

Peki uzun bir zincirin var olma olasılığını bulmak için neye ihtiyacımız var?

Uzunluğu l olan bir zincir için kutuların bu zincirin dışında olma olasılığı şuna eşittir:

Bu sayı koleksiyonunda (l-1) var! işaretleri yerleştirmenin yolları.

Kalan işaretler bulunabilir (100-l)! yollar (zincir uzunluğunun 50'yi geçmediğini unutmayın).

Bu göz önüne alındığında, zinciri içeren permütasyonların sayısı tam uzunluk ben: (>50)

İşaretleri düzenlemenin 100(!) yolu olduğu ortaya çıktı, yani l uzunluğunda bir zincirin var olma olasılığı 1/l'ye eşittir. Bu arada bu sonuç kutu sayısına bağlı değil.

Zaten bildiğimiz gibi, zincirin uzunluğunun 50'den büyük olduğu tek bir seçenek olabilir, dolayısıyla başarı olasılığı şu formül kullanılarak hesaplanır:

Sonuç

%31,18 - 50 deneme sınırı göz önüne alındığında, en uzun zincirin boyutunun 50'den az olması ve mahkumların her birinin işaretini bulabilmesi olasılığı.

Tüm mahkumların işaretlerini bulup testi geçme olasılığı %31,18

Aşağıda l uzunluğundaki tüm zincirler için (x ekseninde) olasılıkları (y ekseninde) gösteren bir grafik bulunmaktadır. Kırmızı renk tüm “arızaları” temsil eder (burada verilen eğri sadece 1/l'lik bir grafiktir). Yeşil renk"başarı" anlamına gelir (grafiğin bu kısmı için hesaplama biraz daha karmaşıktır, çünkü bunu belirlemenin birkaç yolu vardır) maksimum uzunluk <50). Общая вероятность складывается из зеленых столбцов в 31.18% шанс на спасение.

Harmonik numarası (makalenin bu kısmı meraklılar içindir)

Matematikte n'inci harmonik sayı, doğal serideki ilk n ardışık sayının karşılıklılarının toplamıdır.

100a kutu yerine keyfi bir kutumuz varsa limiti hesaplayalım çok sayıda kutular (toplamda 2n kutumuz olduğunu varsayalım).

Euler-Mascheroni sabiti, bir harmonik serinin kısmi toplamı ile bir sayının doğal logaritması arasındaki farkın limiti olarak tanımlanan bir sabittir.

Mahkum sayısı arttıkça, gardiyan mahkumların kutuların yarısını açmasına izin verirse kurtuluş şansı %30,685'e çıkıyor

(Mahkumların kutuları rastgele tahmin ettiği bir karar verdiyseniz, mahkum sayısı arttıkça kurtuluş olasılığı sıfıra düşer!)

Ek soru

Devam sorusunu hatırlayan var mı? Yardımsever dostumuz hayatta kalma şansımızı artırmak için ne yapabilir?

Artık çözümü zaten biliyoruz, dolayısıyla buradaki strateji basit: tüm işaretleri incelemeli ve en uzun kutu zincirini bulmalı. En uzun zincir 50'den azsa, plakaları değiştirmesine veya en uzun zincirin 50'den uzun olmaması için değiştirmesine gerek yoktur. Ancak 50 kutudan daha uzun bir zincir bulursa yapması gereken tek şey, zinciri iki kısa zincire bölmek için bu zincirdeki iki kutunun içeriğini değiştirmektir.

Bu strateji sonucunda uzun zincirler olmayacak ve tüm mahkumların işaretlerini ve kurtuluşlarını bulmaları garanti altına alınacaktır. Yani iki burcun yerini değiştirerek kurtuluş olasılığını %100'e düşürüyoruz!

Soru: Bir kutunun diğerine sığıp sığmayacağını belirleyin


Durumu: İki kutunun ölçüleri verilmiştir. Bir kutunun diğerinin içine sığıp sığmadığını mı belirleyeceksiniz?

Cevap:

Mesaj gönderen: Neşe

maksimum 13 uyum

Hayır, 13 değil... Kesin olmak gerekirse, yaklaşık 12,7279... Dikdörtgenin üzerine bir dikdörtgen koymak basit bir iştir... Ancak daha büyük bir paralel yüzün yaklaşık olarak en büyük köşegeni boyunca daha küçük bir paralel yüzlü yapıştırmak... Evet . Küçük bir kutu için gerekli dönüş açıları da aranıyor...

Soru: Kutulardan biri diğerinin içine yerleştirilebilir mi?


Bazı nedenlerden dolayı düzgün çalışmıyor, yardım edin!!!
koşul şu: İki kutu var, birincisi A1×B1×C1 boyutunda, ikincisi A2×B2×C2 boyutunda. Kutuların kenarları etrafında yalnızca 90 derece döndürülebilmesi koşuluyla, bu kutulardan birinin diğerinin içine yerleştirilip yerleştirilemeyeceğini belirleyin.
Giriş formatı
Program giriş olarak A1, B1, C1, A2, B2, C2 sayılarını alır.
Çıkış biçimi
Program aşağıdaki satırlardan birinin çıktısını almalıdır:
Kutular aynı ise kutular eşittir
Birinci kutu ikinciye yerleştirilebiliyorsa, birinci kutu ikinciden daha küçüktür,
Birinci kutu ikinciden daha büyüktür, eğer ikinci kutu birincinin içine konulabilirse,
Kutular diğer tüm durumlarda karşılaştırılamaz.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 #include "iostream" ad alanı std'sini kullanarak; int main() ( int a1, a2, b1, b2, c1, c2, m, n, k, z, x, c; cin >> a1; cin >> b1; cin >> c1; cin >> a2; cin >> b2; cin >> c2; if ((a1 >= b1) && (a1 >= c1) && (b1 >= c1) ) ( m == a1; n == b1; k == c1; ) else ( if ((a1 >= b1) && (a1 >= c1) && (b1<= c1) ) { m = a1; n = c1; k = b1; } } if ((b1 >= a1) && (b1 >= c1) && (a1 >= c1) ) ( m = b1; n = a1; k = c1; ) else ( if ((b1 >= a1) && (b1 >= c1) && (c1 >= a1) ) ( m = b1; n = c1; k = a1; ) ) if ((c1 >= a1) && (c1 >= b1) && (b1 >= a1) ) ( m = c1; n = b1; k = a1; ) else ( if ((c1 >= a1) && (c1 >= b1) && (a1 >= b1) ) ( m = c1; n = a1; k = b1; ) ) if ((a2 >= b2) && (a2 >= c2) && (b2 >= c2) ) ( z = a2; x = b2; c = c2; ) else ( if ((a2 >= b2) && (a2 > = c2) && (b2<= c2) ) { z = a2; x = c2; c = b2; } } if ((b2 >= a2) && (b2 >= c2) && (a2 >= c2) ) ( z = b2; x = a2; c = c2; ) else ( if ((b2 >= a2) && (b2 >= c2) && (c2 >= a2) ) ( z = b2; x = c2; c = a2; ) ) if ((c2 >= a2) && (c2 >= b2) && (b2 >= a2) ) ( z = c2; x = b2; c = a2; ) else ( if ((c2 >= a2) && (c2 >= b2) && (a2 >= b2) ) ( z = c2; x = a2; c = b2; ) ) if ((m = z) && (n = x) && (k = c) ) ( cout<< "Boxes are equal" ; } else { if ((m >z) && (n > x) && (k > c) ) ( cout<< "İlk kutu ikincisinden daha büyük"; ) else ( if ((m< z) && (n < x) && (k < c) ) { cout << "İlk kutu ikincisinden daha küçük"; ) başka ( cout<< "Boxes are incomparable" ; } } } system ("pause" ) ; return 0 ; }

Cevap: Boyut, Çözüm algoritması, önce kutuların kenar uzunluklarını sıralıyoruz ki daha sonra karşılaştırabilelim, ama! Bütün bunları if ifadesi üzerinden yapmam gerekiyor, en azından bir algoritma yazarsanız çok minnettar olurum, kendim kodlayabilirim =)

Soru: Bir formu diğerinin içinde açın


Herkese iyi günler. Bir program kullanıyorum ve ekran görüntüsündeki gibi MenuStrip1'deki butona tıkladığınızda Form2'yi Form1'de, formun yarısında vb. nasıl açacağımı anlayamıyorum.

Ekran görüntüsü:

Bir kod var:

vb.net
1 2 3 4 Özel Alt Komut1_Click() Form2. Görünür = TrueForm1. Görünür = Yanlış Son Alt

Ancak programın ayrı bir formunu açıyor ve Form2, Form3 vb. pencerelerin Form1'in kendisinde açılmasına ihtiyacım var (formun tamamında değil).

Cevap:Çok teşekkür ederim, işe yaradı

Şimdi programın dolgusunu yazacağım.

22 saat 49 dakika sonra eklendi
Dün aynı sorunla karşılaştım (bütün akşam kendim çözmeye çalıştım ama olmadı) kod çalışıyor, her şey yolunda. Ama sorun şu, Form2 Form3 vs. arasında (ters sırada) geçiş yapamıyorum, bu koda ne ekleyebilirim?

vb.net
1 2 3 4 5 6 7 8 9 10 Private Sub Form1_Load(ByVal sender As System.Object , ByVal e As System.EventArgs ) MyBase'i yönetir. Beni Yükle. IsMdiContainer = True End Sub Private Sub ArmorToolStripMenuItem_Click(sender As Object, e As EventArgs) ArmorToolStripMenuItem'i yönetir. Form2'yi tıklayın. MdiParent = Me Form2. Show() Form2. Konum = Yeni Nokta((0 ) - (0 ), 0 ) Form2. ControlBox = Yanlış Son Alt

Yani Zırh, Güç zırhı vb. arasında geçiş yapmam gerekiyor (yukarıdaki proje ekranı)

Şimdiden teşekkür ederim.

32 dakika sonra eklendi
Bir çözüm buldum

Sadece bir satır eklemeniz yeterli.

vb.net
1 Form3. Görünür = Yanlış

Soru: Datagrid'de seçilen konumun bir formdan diğerine aktarılması


Tünaydın.
Mevcut seçili konumu, bir formda başka bir formdaki başka bir veri kılavuzunda bulunan bir veri kılavuzuna (+ BindingSource kullanılır, aslında tüm veriler MSSQL veritabanındaki tablolarda bulunur) aktarma olasılığıyla ilgileniyorum.

Ne anlamı var, ana formda tam adların listesini içeren bir veri kılavuzu var. Örneğin ikinci bir soyadı seçiyoruz. Daha sonra ek olarak açılan bir formda, başka bir datagrid'de bu tam adın sahip olduğu her şey açılmalıdır. Bu nedenle, listeden üçüncü adı seçersek, kendi veri kılavuzuna sahip ek formda bu tam ad için veriler zaten bulunacaktır.
Bir formun içinde bu, bağlantılar (dataSet.Relations.Add) kullanılarak uygulanabilir, ancak ek bir form oluştururken ikinci form, birinci formdaki datagrid'de hangi konumun seçildiğini bilmez.
Teşekkür ederim.

Cevap:

Mesaj gönderen: gmaksim

İlk formda, InitializeComponent()'tan sonra ekliyoruz; bu ürün:

Peki o neden orada???

Mesaj gönderen: gmaksim

Tablolar2'DEN " + id + " SEÇİN

Bu istek kesinlikle işe yaramayacak.

Mesaj gönderen: gmaksim

Bütün gün sana bunu nasıl yapacağını anlattım!

Mesaj gönderen: Datsend

Tembelseniz/zamanınız yoksa/istemiyorsanız, Verilerin bir formdan diğerine nasıl aktarılacağına göz atabilirsiniz.

Her şey başladığından beri!!! Bu seçenekler arasında uygun seçenek yoktu!!!

Soru: Çocuğun ebeveynin ötesine geçmemesi için bir form diğerinin içinde nasıl açılır?


Bunu denediğimde (bu forumda okudum) ve "Bu form için MdiParent olarak belirtilen form bir MdiContainer değil" diyor.

Lütfen bana bunu nasıl yapacağımı söyle?

1 saat 4 dakika sonra eklendi
Burada nasıl olduğunu anladım, isMDIContainer özelliğini ana forma true olarak atamam gerekiyordu.
Şimdi başka bir sorun daha var, bu konteynerin içinde kalıcı bir form oluşturmanın imkansız olduğunu söylüyor, ancak sadece kalıcı bir forma ihtiyacım var

Cevap: Peki yine de bir alt modal forma ihtiyacınız varsa ne yapmalısınız?
Onlar. Bir yandan formun ana uygulamaya (ana uygulama penceresi) yerleştirilmesine, diğer yandan da siz onunla çalışmayı bitirene kadar tüm uygulamanın "dondurulmasına" mı ihtiyacınız var?

Soru: Verilen iki kelimeden birinin harflerinden başka bir kelime oluşturmanın mümkün olup olmadığını belirleyin.


verilen iki kelime, bir kelimenin harflerinden başka bir kelime oluşturmanın mümkün olup olmadığını belirler

Cevap: Sorun bildirimi şunu söylüyor: Birinin harflerinden mümkün mü
bir başkasını oluşturacak kelimeler. Ama hakkında hiçbir şey söylenmiyor
kelimelerin eşit uzunlukta olması gerekir. Başka bir deyişle
görev şu şekilde yorumlanabilir. mümkün mü
bir kelimenin harflerinden herhangi bir uzunlukta başka bir harfe kadar
Keşke yeterli sayıda mektup olsaydı.
Uzun bir kelime uyduracak bir oyun var
bir sürü küçük olan. (pro. doğrulandı)
ilk kelime önemli. Ondan ikincisi inşa edildi...

QBasic/QuickBASIC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CLS DIM s1 AS STRING DIM s2 AS STRING DIM s STRING GİRİŞİ olarak "SLOVO_1 = "; s1 GİRİŞ "SLOVO_2 = "; s2 FOR i = 1 TO LEN (s1) s = MID$ (s2, i, 1 ) k = INSTR (s1, s) IF k THEN MID$ (s1, k, 1 ) = " " ELSE PRINT "NO" : SON SON İSE SONRAKİ "EVET" YAZDIRIN SON

Soru: Bir işlev işaretçisini bir sınıftan diğerine geçirme


İyi günler. Forumu ve genel olarak interneti uzun süre araştırdım ancak hala şu sorunun cevabını bulamadım: Bir işleve yönelik işaretçinin bir sınıftan diğerine nasıl aktarılacağı. İşin özü şudur:

"Sınıf1" var, "Yöntem" yöntemi var
Nesneleri "Sınıf1" sınıfında oluşturulan "Sınıf2" vardır.

Sonuç olarak "Sınıf2"nin "Yöntem"i çağırabilmesi gerekir. Bana öyle geliyor ki bunu yapmanın en kolay yolu "Yöntem"e bir işaretçiyi "Sınıf2"ye geçirmektir. Ancak her şeyin o kadar basit olmadığı ortaya çıktı. Lütfen bunun nasıl yapılabileceğini gösterebilir misiniz? Peki, ya da belki “Sınıf1”de kayıtlı olan “Yöntem”i “Sınıf2”den çağırmanın daha kolay bir yolu vardır.

Cevap: Hımmm. Sınıf yönteminin ana olarak çağrılması gerekseydi her şey daha basit olurdu, ancak bu farklı bir sınıf olduğundan her şey çok kötü sonuç veriyor. Prensip olarak en başından beri bu sonucu varsaymıştım ama bunun daha basit olabileceğini düşündüm. Tamam, bunun için teşekkürler)

18 saat 1 dakika sonra eklendi
Sonunda Stack Overflow () sayesinde işaretçiyi bir sınıftan diğerine geçirmenin daha basit ve daha az hantal bir yöntemini buldum:

C++
1 2 3 4 uçak Uçak; BoerBoer; Boer.setSomeFun ([ & ] (int v) ( Aircraft.source_forSomeFun (v) ; ) ) ;

Cevap: 1. MVVM modelini kullanarak, veri elde etmek istediğimiz Görünümün ViewModel'ine erişebilirsiniz (kısacası, 3. nokta, ifadelere bakılırsa MVVM'nin WPF'de oluşturulması oldukça uygundur).
2. Hmm... Statik sınıf, yöntemler, değişkenler, özellikler. Statik bir sınıf aracılığıyla verileri bir formdan diğerine aktarın.
3. Sonuç olarak görünümü (genel olarak) modelden ayırmakta bir çözüm görüyorum. Bunlardan birini kullanmak sorununuzu çözebilir.

Yakın zamana kadar, manuel şanzıman olarak kısaltılan manuel şanzımanlı otomobiller, çeşitli tiplerdeki diğer araçlar arasında mutlak çoğunluğu oluşturuyordu.

Ayrıca, manuel (manuel) şanzıman, motor torkunu değiştirmek ve iletmek için günümüzde oldukça yaygın bir cihaz olmaya devam etmektedir. Daha sonra "mekaniğin" nasıl yapılandırıldığını ve çalıştığını, bu tip dişli kutusunun tasarımının nasıl göründüğünü ve bu çözümün ne gibi avantaj ve dezavantajlara sahip olduğunu konuşacağız.

Bu makalede okuyun

Manuel şanzıman şeması ve özellikleri

Bu tür bir dişli kutusunun mekanik olarak adlandırıldığı gerçeğiyle başlayalım çünkü böyle bir ünite manuel vites değişimini içerir. Başka bir deyişle, manuel şanzımanlı araçlarda vitesi sürücü kendisi değiştirir.

Hadi devam edelim. Manuel şanzıman kademelidir, yani tork kademeli olarak değişir. Pek çok otomobil tutkunu, vites kutusunun aslında dişlilere ve millere sahip olduğunu biliyor ancak herkes ünitenin nasıl çalıştığını anlamıyor.

Yani, bir aşama (diğer adıyla dişli), birbirleriyle etkileşime giren bir çift dişlidir (tahrik edilen ve tahrik edilen dişliler). Bu tür aşamaların her biri, belirli bir açısal hızda dönmeyi sağlar, yani kendi dişli oranına sahiptir.

Dişli oranı, tahrik dişlisindeki diş sayısının tahrik dişlisindeki diş sayısına oranıdır. Bu durumda, farklı dişli kutusu kademeleri farklı dişli oranları alır. En düşük kademe (düşük vites) en yüksek dişli oranına sahiptir ve en yüksek kademe (yüksek vites) en küçük dişli oranına sahiptir.

Adım sayısının belirli bir vites kutusundaki (dört vitesli şanzıman, beş vitesli vb.) vites sayısına eşit olduğu açıkça görülüyor. Günümüzde arabaların büyük çoğunluğunun beş vitesli, manuel şanzımanla donatıldığını unutmayın. 6 veya daha fazla kademeli şanzımanlar daha az yaygın ve oldukça yaygın. Daha önce 4 vitesli manuel şanzımanlar giderek arka planda kayboluyordu.

Mekanik iletim cihazı

Dolayısıyla, belirli özelliklere sahip böyle bir kutunun birçok tasarımı olsa da, ilk aşamada iki ana tip ayırt edilebilir:

  • üç şaftlı dişli kutuları;
  • çift ​​şaft kutuları;

Arkadan çekişli araçlar genellikle üç şaftlı bir manuel şanzımanla donatılırken, önden çekişli binek araçlara iki şaftlı bir şanzıman takılıdır. Bu durumda, hem birinci hem de ikinci tipteki manuel şanzımanların tasarımı önemli ölçüde farklılık gösterebilir.

Üç şaftlı manuel şanzımanla başlayalım. Bu kutu aşağıdakilerden oluşur:

  • aynı zamanda birincil mil olarak da adlandırılan tahrik mili;
  • şanzıman ara mili;
  • tahrik edilen mil (ikincil);

Şaftlara senkronizörlü dişliler monte edilmiştir. Şanzıman cihazına ayrıca bir vites değiştirme mekanizması da dahildir. Bu bileşenler, aynı zamanda dişli kutusu mahfazası olarak da adlandırılan dişli kutusu mahfazasında bulunur.

Tahrik milinin görevi debriyajla bağlantı oluşturmaktır. Tahrik milinde, debriyaj tahrikli disk için yivler bulunur. Torka gelince, tahrik milinden belirtilen moment, kendisiyle sert bir şekilde bağlantılı olan dişli aracılığıyla iletilir.

Ara milin çalışmasına gelince, bu mil dişli kutusunun giriş miline paralel olarak yerleştirilmiştir ve üzerine sert ağ şeklinde bir grup dişli monte edilmiştir. Buna karşılık tahrik edilen mil, tahrik mili ile aynı eksene monte edilir.

Bu kurulum, tahrik mili üzerindeki bir uç yatağı kullanılarak gerçekleştirilir. Bu yatak, tahrik edilen mili içerir. Tahrik edilen şaft üzerindeki dişli grubu (dişli bloğu), şaftın kendisi ile sıkı bir bağlantıya sahip değildir ve bu nedenle üzerinde serbestçe dönmektedir. Bu durumda ara mil, tahrik mili ve tahrik mili dişlisinden oluşan dişli grubu sabit bir iç içe geçmiş durumdadır.

Tahrik edilen mil dişlileri arasına senkronizatörler (senkronizör kavramaları) monte edilmiştir. Görevleri, tahrik edilen şaft dişlilerinin açısal hızlarını sürtünme yoluyla şaftın açısal hızıyla hizalamaktır.

Senkromeçler, tahrik edilen şaftla sıkı bir bağlantı halindedir ve aynı zamanda bir spline bağlantısının varlığı nedeniyle şaft boyunca uzunlamasına yönde hareket etme kabiliyetine sahiptir. Modern dişli kutularında tüm viteslerde senkromeç ​​kavramaları bulunur.

Üç şaftlı dişli kutularındaki vites değiştirme mekanizmasını düşünürsek, bu mekanizma genellikle ünite mahfazasına monte edilir. Tasarım bir kontrol kolu, kaydırıcılar ve çatallar içerir.

Kutu gövdesi (karter) alüminyum veya magnezyum alaşımlarından yapılmıştır ve dişliler ve mekanizmalarla birlikte millerin ve bir dizi başka parçanın montajı için gereklidir. Şanzıman mahfazası ayrıca şanzıman yağı (şanzıman yağı) içerir.

  • Üç şaftlı mekanik (manuel) dişli kutusunun nasıl çalıştığını anlamak için çalışma prensibine genel bir göz atalım. Vites kolu boştayken motordan aracın tahrik tekerleklerine tork iletilmez.

Sürücü kolu hareket ettirdikten sonra çatal, belirli bir vitesin senkromeç ​​kavramasını hareket ettirir. Senkronizatör daha sonra istenen dişlinin ve tahrik edilen milin açısal hızlarını eşitleyecektir. Debriyaj halkası dişlisi daha sonra benzer bir dişli halkasıyla birleşerek dişliyi tahrik edilen mile kilitleyecektir.

Aracın geri vitesinin vites kutusunun geri vitesi ile sağlandığını da ekleyelim. Bu durumda, ayrı bir aksa monte edilen geri avara dişlisi, dönüş yönünü değiştirmenize olanak sağlar.

Çift şaftlı manuel şanzıman: tasarım ve çalışma prensibi

Üç şaftlı bir dişli kutusunun nelerden oluştuğunu anladıktan sonra iki şaftlı dişli kutularına geçelim. Bu tip dişli kutusunun iki şaftı vardır: birincil ve ikincil. Birincil şaft tahrik edilir, ikincil şaft tahrik edilir. Şaftlara dişliler ve senkronizatörler bağlanmıştır. Ayrıca şanzıman mahfazasında ana dişli ve diferansiyel bulunur.

Tahrik mili, debriyaja bağlantıdan sorumludur ve ayrıca mil üzerinde, mil ile sıkı bir şekilde birleşen bir dişli bloğu da vardır. Tahrik edilen şaft, tahrik miline paralel olarak yerleştirilmiştir, tahrik edilen şaftın dişlileri, tahrik şaftının dişlileri ile sabit bir iç içe geçmiş durumdadır ve ayrıca şaftın kendisi üzerinde serbestçe dönmektedir.

Ayrıca, ana dişlinin tahrik dişlisi, tahrik edilen şaft üzerine sağlam bir şekilde sabitlenmiştir ve senkromeç ​​kaplinleri, tahrik edilen şaft dişlilerinin arasına yerleştirilmiştir. Şanzımanın boyutunu küçültmek ve vites sayısını artırmak için modern dişli kutularında tek tahrikli mil yerine sıklıkla 2 hatta 3 şaftın takılabileceğini de ekleyelim.

Bir ana dişli dişlisi bu tür şaftların her birine sıkı bir şekilde sabitlenmiştir ve böyle bir dişli, tahrik edilen dişliye sıkı bir şekilde bağlanmıştır. Tasarımın aslında 3 ana dişliyi uyguladığı ortaya çıktı.

Ana dişlinin kendisi ve dişli kutusundaki diferansiyel, torku ikincil milden tahrik tekerleklerine iletir. Aynı zamanda diferansiyel, tahrik tekerlekleri farklı açısal hızlarda döndüğünde de böyle bir tekerlek dönüşü sağlayabilir.

Vites değiştirme mekanizmasına gelince, çift şaftlı dişli kutularında ayrı olarak, yani mahfazanın dışında bulunur. Kutu, anahtarlama mekanizmasına kablolar veya özel çubuklarla bağlanır. En yaygın bağlantı kablo kullanmaktır.

2 şaftlı kutunun vites değiştirme mekanizmasının kendisi, kablolarla seçme koluna ve vites değiştirme koluna bağlanan bir kola sahiptir. Bu kollar, çatalları da bulunan merkezi vites değiştirme çubuğuna bağlanır.

  • İki şaftlı manuel şanzımanın çalışma prensibinden bahsedersek, üç şaftlı şanzımanın prensibine benzer. Farklılıklar vites değiştirme mekanizmasının nasıl çalıştığında yatmaktadır. Özetle kol, arabanın eksenine göre hem uzunlamasına hem de enine hareketleri gerçekleştirebilir. Yanal hareket sırasında, vites seçme koluna etki eden vites seçme kablosuna kuvvet uygulandığından bir vites seçilir.

Daha sonra kol uzunlamasına hareket eder ve kuvvet vites değiştirme kablosuna gider. İlgili kol, çubuğu çatallarla birlikte yatay olarak hareket ettirir; çubuk üzerindeki çatal, senkronizörün yerini değiştirerek tahrik edilen mil dişlisinin bloke olmasına yol açar.

Son olarak, çeşitli tipteki manuel şanzımanların, iki vitesin aynı anda devreye girmesini veya vitesin beklenmedik bir şekilde kapatılmasını önleyen ek kilitleme cihazlarına da sahip olduğunu not ediyoruz.

Ayrıca okuyun

Motoru çalıştırmadan önce debriyajı sıkmak: Debriyajı sıkmanız gerektiğinde ve hangi durumlarda bunu yapmanız önerilmez. Yararlı ipuçları ve püf noktaları.

  • Motor çalışırken vites değiştirme zorluğunun nedenleri. Şanzıman yağı ve şanzımandaki seviye, senkronizörlerin ve şanzıman dişlilerinin aşınması, debriyaj.


  • Görüntüleme