Dua kotak diberikan. Operator bersyarat. Memecahkan masalah tematik. Kombinasi dengan pengulangan

    Tulis program yang membandingkan dua bilangan bulat yang dimasukkan dari keyboard. Program harus menunjukkan angka mana yang lebih besar, atau, jika angkanya sama, menampilkan pesan terkait.

    Masukkan dua bilangan bulat dan tekan Enter.
    -> 34 67
    34 kurang dari 67

    dengan Ada.Text_IO; gunakan Ada.Text_IO; dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; prosedur utama adalah A, B: Integer; mulai Put_Line("Masukkan dua bilangan bulat pada satu baris dan tekan Enter."); Taruh("-> "); Mendapatkan); Dapatkan(B); --Masukkan 2 angka jika A > B lalu Put(Item =>; A, Lebar =>; 1); Taruh("lebih"); Masukan(Item => B, Lebar => 1); Elsif A< B then Put(Item =>A, Lebar => 1); Taruh("kurang dari"); Masukan(Item => B, Lebar => 1); else Put("Angka yang dimasukkan adalah sama!"); berakhir jika; akhir utama;

    Tiga bilangan bulat diberikan. Temukan yang terbesar (program harus mencetak tepat satu bilangan bulat). Dalam soal ini, bilangan terbesar adalah bilangan yang tidak lebih kecil dari bilangan lainnya.


  • -> 1 2 3
    Maksimal tiga angka: 3
  • dengan Ada.Text_IO ; gunakan Ada.Text_IO ; dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; prosedur utama adalah A, B, C: Integer; maks: Bilangan bulat; mulai Put_Line( "Ketik tiga bilangan bulat dalam satu baris dan tekan Enter.") ; Taruh("-> " ) ; Mendapatkan); Dapatkan(B) ; Dapatkan(C) ; --Masukkan tiga bilangan bulat maks:= A; --bawaan Kita asumsikan angka A adalah maksimum jika B > maks maka --Jika B lebih besar dari maksimum, maka maks:=B; --angka maksimum adalah B berakhir jika ; jika C > maks maka--Jika C lebih besar dari maksimum, maka maks:= C;--angka maksimum adalah C berakhir jika ; Meletakkan(

    "Maksimal tiga angka:"

    Tiga bilangan bulat diberikan. Tentukan berapa banyak dari mereka yang cocok. Program harus mengeluarkan salah satu angka: 3 (jika semua angka sama), 2 (jika dua angka sama) atau 0 (jika semua angka berbeda).

  • Masukkan tiga bilangan bulat dan tekan Enter.
    -> 1 2 3
    0
  • dengan Ada.Text_IO ; gunakan Ada.Text_IO ; dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; prosedur Utama adalah A, B, C: Integer; mulai Put_Line( "Ketik tiga bilangan bulat dan tekan Enter.") ; Taruh("-> " ) ; Mendapatkan); Dapatkan(B) ; Dapatkan(C) ; jika A = B dan kemudian A = C maka --Jika ketiga angka cocok Masukan(Item => 3 , Lebar => 1 ) ; elsif A = B atau A = C atau B = C maka --Jika dua angka cocok Masukan(Item => 2 , Lebar => 1 ) ; kalau tidak --Jika nomor yang identik TIDAK Masukan(Item => 0 , Lebar => 1 ) ; berakhir jika ; akhir Utama;

    dengan Ada.Text_IO; gunakan Ada.Text_IO; dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; prosedur Utama adalah A, B, C: Integer; mulai Put_Line("Masukkan tiga bilangan bulat dan tekan Enter."); Taruh("-> "); Mendapatkan); Dapatkan(B); Dapatkan (C); jika A = B lalu A = C maka --Jika ketiga angka tersebut cocok Put(Item => 3, Lebar => 1); elsif A = B atau A = C atau B = C maka --Jika dua angka cocok Put(Item => 2, Lebar => 1); else --Jika tidak ada angka yang sama Put(Item => 0, Lebar => 1); berakhir jika; akhir Utama;

    Benteng catur bergerak secara horizontal atau vertikal. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah benteng dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan. Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika pergerakan benteng dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak.


  • 4 4
    5 5
    TIDAK
  • ) ; Meletakkan() ;

    Mendapatkan); Dapatkan(B) ; Meletakkan() ;

    Dapatkan(C) ; Dapatkan(D) ; jika A = C atau B = D maka Put("YA" ) ; lain Taruh("TIDAK" ) ; berakhir jika ; akhir Utama; dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; procedure Main adalah subtipe checkBoard adalah rentang Integer 1..8; A, B, C, D: papan centang; mulai Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put("Masukkan nomor kolom dan baris untuk sel pertama dan klik: "); Mendapatkan); Dapatkan(B); Put("Masukkan nomor kolom dan baris untuk sel kedua dan klik: "); Dapatkan (C); Dapatkan(D); jika A = C atau B = D maka Put("YA"); else Taruh("TIDAK"); berakhir jika; akhir Utama;

  • Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika perpindahan raja dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak. 4 4
    Masukkan nomor kolom dan baris untuk kedua sel: 5 5
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan:
  • Masukkan nomor kolom dan baris untuk sel kedua dan klik: YA "Masukkan nomor kolom dan baris untuk kedua sel:") ; Meletakkan( "Masukkan nomor kolom dan baris untuk sel pertama dan klik: ") ; Dapatkan(C) ; Dapatkan(D) ; jika perut (A - C)<= 1 and then abs (B - D) <= 1 then -- perintah abs() mengembalikan absolut --nilai (modulus) dari nomor tersebut Taruh("YA" ) ; lain Taruh("TIDAK" ) ; berakhir jika ; akhir utama;

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur utama adalah subtipe checkBoard adalah rentang Integer 1..8; A, B, C, D: papan centang; mulai Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put("Masukkan nomor kolom dan baris untuk sel pertama dan klik: "); Mendapatkan); Dapatkan(B); Put("Masukkan nomor kolom dan baris untuk sel kedua dan klik: "); Dapatkan (C); Dapatkan(D); jika abs(A - C)<= 1 and then abs(B - D) <= 1 then -- команда abs() возвращает абсолютное --значение (модуль) числа Put("ДА"); else Put("НЕТ"); end if; end main;

    Uskup catur bergerak secara diagonal. Diberikan dua kotak berbeda pada papan catur, tentukan apakah uskup dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan. Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus mengeluarkan "YA" jika perpindahan uskup dari sel pertama bisa sampai ke sel kedua, atau "Tidak" sebaliknya.

  • Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika perpindahan raja dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak. 4 4
    Masukkan nomor kolom dan baris untuk kedua sel: 5 5
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan:
  • dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; dengan Ada.Text_IO ; gunakan Ada.Text_IO ; procedure main adalah subtipe checkBoard adalah Integer range 1 ..8 ; A, B, C, D: papan centang; mulai Put_Line( Masukkan nomor kolom dan baris untuk sel kedua dan klik: YA "Masukkan nomor kolom dan baris untuk kedua sel:") ; Meletakkan( "Masukkan nomor kolom dan baris untuk sel pertama dan klik: ") ; Dapatkan(C) ; Dapatkan(D) ; jika abs (a - c) = abs (b - d) maka Put("YA" ) ; lain Taruh("TIDAK" ) ; berakhir jika ; akhir utama;

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur utama adalah subtipe checkBoard adalah rentang Integer 1..8; A, B, C, D: papan centang; mulai Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put("Masukkan nomor kolom dan baris untuk sel pertama dan klik: "); Mendapatkan); Dapatkan(B); Put("Masukkan nomor kolom dan baris untuk sel kedua dan klik: "); Dapatkan (C); Dapatkan(D); jika abs(a - c) = abs(b - d) maka Put("YA"); else Taruh("TIDAK"); berakhir jika; akhir utama;

    Ratu catur bergerak secara diagonal, horizontal, atau vertikal. Diberikan dua kotak berbeda pada papan catur, tentukan apakah ratu dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.

    Masukkan format:
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua.
    Format output:
    Program harus menampilkan YES jika memungkinkan untuk berpindah dari sel pertama dengan memindahkan ratu ke sel kedua, atau TIDAK sebaliknya.

    Contoh 1:
    Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika perpindahan raja dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak. 1 1
    Masukkan nomor kolom dan baris untuk kedua sel: 2 2
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan:

    Contoh 2:
    Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika perpindahan raja dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak. 1 1
    Masukkan nomor kolom dan baris untuk kedua sel: 2 3
    TIDAK

  • dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; dengan Ada.Text_IO ; gunakan Ada.Text_IO ; procedure Main adalah subtipe checkBoard adalah Integer range 1 ..8 ; A, B, C, D: papan centang; mulai Put_Line( Masukkan nomor kolom dan baris untuk sel kedua dan klik: YA "Masukkan nomor kolom dan baris untuk kedua sel:") ; Meletakkan( "Masukkan nomor kolom dan baris untuk sel pertama dan klik: ") ; Dapatkan(C) ; Dapatkan(D) ; jika abs (A - C) = abs (B - D) atau A = D atau B = C maka Put("YES" ) ; lain Taruh("TIDAK" ) ; berakhir jika ; akhir Utama;

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; procedure Main adalah subtipe checkBoard adalah rentang Integer 1..8; A, B, C, D: papan centang; mulai Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put("Masukkan nomor kolom dan baris untuk sel pertama dan klik: "); Mendapatkan); Dapatkan(B); Put("Masukkan nomor kolom dan baris untuk sel kedua dan klik: "); Dapatkan (C); Dapatkan(D); jika abs(A - C) = abs(B - D) atau A = D atau B = C maka Put("YES"); else Taruh("TIDAK"); berakhir jika; akhir Utama;

    Seorang ksatria catur bergerak dengan huruf "G" - dua kotak secara vertikal ke segala arah dan satu kotak secara horizontal, atau sebaliknya. Diberikan dua kotak berbeda pada papan catur, tentukan apakah ksatria dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan. Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menghasilkan output YA jika gerakan ksatria dari sel pertama dapat mencapai sel kedua, atau TIDAK jika sebaliknya.

    Contoh 1:
    Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika perpindahan raja dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak. 1 1
    Masukkan nomor kolom dan baris untuk kedua sel: 1 4
    TIDAK

    Contoh 2:
    Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak yang berbeda pada sebuah papan catur, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu gerakan.
    Program menerima masukan empat angka masing-masing dari 1 hingga 8, menentukan nomor kolom dan nomor baris terlebih dahulu untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika perpindahan raja dari sel pertama dapat mencapai sel kedua, atau "TIDAK" jika tidak. 1 1
    Masukkan nomor kolom dan baris untuk kedua sel: 8 8
    TIDAK

  • dengan Ada.Text_IO ; gunakan Ada.Text_IO ; dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; procedure main adalah subtipe checkBoard adalah Integer range 1 ..8 ; A, B, C, D: Bilangan Bulat; mulai Put_Line( Masukkan nomor kolom dan baris untuk sel kedua dan klik: YA "Masukkan nomor kolom dan baris untuk kedua sel:") ; Meletakkan( "Masukkan nomor kolom dan baris untuk sel pertama dan klik: ") ; Dapatkan(C) ; Dapatkan(D) ; jika abs (A - C) = 2 lalu abs (B - D) = 1 maka Put("YES" ) ; elsif abs (A - C) = 1 lalu abs (B - D) = 2 lalu Put("YES" ) ; lain Taruh("TIDAK" ) ; berakhir jika ; akhir utama;

    dengan Ada.Text_IO; gunakan Ada.Text_IO; dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; prosedur utama adalah subtipe checkBoard adalah rentang Integer 1..8; A, B, C, D: Bilangan Bulat; mulai Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put("Masukkan nomor kolom dan baris untuk sel pertama dan klik: "); Mendapatkan); Dapatkan(B); Put("Masukkan nomor kolom dan baris untuk sel kedua dan klik: "); Dapatkan (C); Dapatkan(D); jika abs(A - C) = 2 lalu abs(B - D) = 1 maka Put("YES"); elsif abs(A - C) = 1 lalu abs(B - D) = 2 lalu Put("YES"); else Taruh("TIDAK"); berakhir jika; akhir utama;

    Cokelatnya berbentuk persegi panjang yang dibagi menjadi irisan N×M. Cokelat tersebut dapat dipecah satu garis lurus menjadi dua bagian. Tentukan apakah mungkin untuk mematahkan irisan K dari sebatang coklat dengan cara ini. Program menerima tiga angka sebagai masukan: N, M, K. Program harus mengeluarkan salah satu dari dua kata: “YA” atau “Tidak”.

    Contoh 1:
    4
    2
    6
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan:

    Contoh 2:
    Jumlah irisan secara horizontal: 2
    Jumlah irisan secara vertikal: 10
    Berapa banyak irisan yang perlu dipisahkan: 7
    TIDAK

  • dengan Ada.Text_IO ; gunakan Ada.Text_IO ; dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; prosedur Utama adalah N, M, K: Integer; mulai Taruh( "Jumlah irisan secara horizontal:") ; Dapatkan(N) ; Meletakkan( "Jumlah irisan vertikal:") ; Dapatkan(M); Meletakkan( "Berapa banyak irisan yang perlu dipisahkan:") ; Dapatkan(K) ; jika K > M * N maka --Jika Anda diminta untuk memecah lebih banyak batang coklat daripada coklat itu sendiri Taruh("TIDAK" ); elsif K rem N = 0 lalu K >= N lalu --Putus secara horizontal Taruh("YA" ) ; elsif K rem M = 0 lalu K >= M lalu --Putus secara vertikal Taruh("YA" ) ; lain Taruh("TIDAK" ) ; berakhir jika ; akhir Utama;

    dengan Ada.Text_IO; gunakan Ada.Text_IO; dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; prosedur Utama adalah N, M, K: Integer; mulai Put("Jumlah irisan secara horizontal : "); Dapatkan(N); Put("Jumlah irisan vertikal : "); Dapatkan(M); Put("Berapa banyak irisan yang harus dipisahkan : "); Dapatkan(K); jika K > M * N maka --Jika sebatang coklat diminta untuk patah lebih banyak dari pada batang coklat itu sendiri Put("NO"); elsif K rem N = 0 lalu K >= N lalu --Putus secara horizontal Put("YES"); elsif K rem M = 0 lalu K >= M lalu --Putus secara vertikal Put("YES"); else Taruh("TIDAK"); berakhir jika; akhir Utama;

    Yasha sedang berenang di kolam berukuran N×M meter dan merasa lelah. Pada saat ini, ia menemukan bahwa ia berada pada jarak X meter dari salah satu sisi yang panjang (tidak harus dari sisi yang terdekat) dan Y meter dari salah satu sisi yang pendek. Berapa jarak minimal yang harus Yasha berenang agar bisa keluar dari kolam ke samping? Program menerima input angka N, M, X, Y. Program harus menampilkan jumlah meter yang dibutuhkan Yasha untuk berenang ke samping.

  • Lebar kolam: 23
    Panjang kolam: 52
    Jarak dari Yasha ke sisi panjang: 8
    Jarak dari Yasha ke sisi pendek: 43
    Anda perlu berenang minimal untuk keluar dari kolam: 8
  • Ada kemungkinan bahwa untuk menyelesaikan masalah Anda perlu menukar 2 variabel. Algoritma ini terlihat seperti ini:

    a, b, tmp: Bilangan bulat; --Deklarasi variabel. Dua utama dan satu tambahan a:= 3; --Inisialisasi variabel a b:= 5; --Inisialisasi variabel b --Algoritma itu sendiri: tmp:= a; --Sekarang tmp = 3 dan a = 3 a:= b; --Sekarang a = 5 dan b = 5; b:=tmp; --Sekarang b = 3

  • dengan Ada.Text_IO ; gunakan Ada.Text_IO ; dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; prosedur Utama adalah N, M, X, Y: Integer; -- N - sisi pendek, M - sisi panjang: -- X - Jarak ke salah satu sisi panjang -- Y - Jarak ke salah satu sisi pendek Tmp: Bilangan Bulat; mulai Taruh( "Lebar kolam:") ; Dapatkan(N) ; Meletakkan( "Panjang kolam:") ; Dapatkan(M); Meletakkan( "Jarak dari Yasha ke sisi panjang: ") ; Dapatkan(X); Meletakkan( "Jarak dari Yasha ke sisi pendek: ") ; Dapatkan(Y); jika N > M maka --Jika sisi-sisinya tercampur saat masuk, maka tukarlah: Tmp:=M; --Simpan panjang M ke dalam variabel sementara M:= N; --Tetapkan variabel M nilai baru N:= Tmp; --Kembalikan panjang M dalam variabel N berakhir jika ; Tmp:=X;--Asumsikan jarak minimum adalah X< X then jika abs (N - X)--Jika jarak ke sisi panjang kedua kurang dari X, maka Tmp:= N - X;--jarak minimum sama dengan jarak ke sisi panjang kedua< Tmp then berakhir jika ; jika Y--Jika jarak ke sisi pendek kurang dari jarak yang ditemukan di atas --minimal, kalau begitu Tmp:=Y;< Tmp then --Jarak minimum adalah Y berakhir jika ; jika perut (M - Y)--angka maksimum adalah C --Jika kamu berenang mendekati sisi pendek kedua, maka Tmp:= perut (M - Y) ;

    --jarak minimum sama dengan jarak ke sisi pendek kedua< 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 =>"Kamu harus berenang minimal untuk keluar dari kolam:"

    Jam elektronik menunjukkan waktu dalam format h:mm:ss (dari 0:00:00 hingga 23:59:59), yaitu, pertama-tama jumlah jam dicatat, kemudian diperlukan dua digit jumlah menit, kemudian diperlukan dua digit jumlah detik. Jumlah menit dan detik ditambahkan jika perlu angka dua digit angka nol. N detik telah berlalu sejak awal hari. Cetak apa yang akan ditampilkan jam. Inputnya diberi bilangan asli N, tidak melebihi 10 7 (10000000). Cetak jawaban dari soal tersebut.

    Contoh masukan 1:
    3602
    Contoh keluaran 1:
    1:00:02

    Contoh masukan 2:
    129700
    Contoh keluaran 2:
    12:01:40

  • dengan Ada.Long_Integer_Text_IO ; gunakan Ada.Long_Integer_Text_IO ; dengan Ada.Text_IO ; gunakan Ada.Text_IO ; procedure Main adalah subtipe Sub_LI adalah Long_Integer range 1 ..10000000 ; N: Sub_LI; h, m, s: Bilangan Bulat Panjang; mulaiGet(N) ; jam:= T / 3600 ; --Kami mendapatkan arlojinya. Sisa pembagiannya dibuang N:= N - jam * 3600 ; --Dapatkan sisa detik (dikurangi jam) jika jam > 24 maka --Karena jam tidak dapat menunjukkan > 24, kami meletakkan semuanya dalam bentuk yang dapat dibaca jam:= jam rem 24 ; --Sisa pembagian dengan 24 menghasilkan jumlah yang tepat jam elsif h = 24 maka h:= 0 ; berakhir jika ; m:= T / 60 ;--Mendapatkan menit s:= N rem 60 ;--Mendapatkan detik Masukan(Item => h, Lebar => 1 ) ; Meletakkan(":" ) ;--Output jam dan ":"< 10 then jika m--Jika jumlah menit kurang dari 10, keluaran di depan 0 Masukan(Item => 0 , Lebar => 1 ) ; berakhir jika ; Masukan(Item => m, Lebar => 1 ) ; Meletakkan(":" ) ;< 10 then --Menit keluaran dan ":" jika s

    --Jika jumlah detik kurang dari 10, keluaran di depan 0< 10 then --Если количество минут меньше 10, выводим ведущий 0 Put(Item =>Masukan(Item => 0 , Lebar => 1 ) ; berakhir jika ;< 10 then --Если количество секунд меньше 10, выводим ведущий 0 Put(Item =>Masukan(Item => s, Lebar => 1 ) ; --Output detik berakhir Utama;

  • dengan Ada.Long_Integer_Text_IO; gunakan Ada.Long_Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; procedure Main adalah subtipe Sub_LI adalah Long_Integer range 1..10000000; N: Sub_LI; h, m, s: Bilangan Bulat Panjang; mulaiDapatkan(N); jam:= T / 3600; --Kami mendapatkan arlojinya. Sisa pembagiannya dibuang N:= N - h * 3600; --Dapatkan sisa detik (dikurangi jam) jika h > 24 maka --Karena jam tidak dapat menunjukkan > 24, kita letakkan semuanya dalam bentuk yang dapat dibaca h:= h rem 24; --Sisa pembagian dengan 24 akan menghasilkan jumlah jam yang tepat elsif h = 24 maka h:= 0; berakhir jika;
  • m:= T/60; --Dapatkan menit s:= N rem 60; --Dapatkan detiknya Put(Item => h, Lebar => 1); Meletakkan(":"); --Output jam dan ":" jika m
    1 2 1
    0, Lebar => 1); berakhir jika;
    1 1 2
  • dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; dengan Ada.Text_IO ; gunakan Ada.Text_IO ; prosedur Utama adalah A, B, C: Integer; min, pertengahan, maks: Integer; mulaiGet(A) ; Dapatkan(B) ; Dapatkan(C) ; --Mencari nilai minimum menit:= A; jika B< min then min:= B; end if ; if C < min then min:= C; end if ; --Mencari nilai maksimum maks:= A; jika B > maks maka maks:= B; berakhir jika ; jika C > maks maka maks:= C; berakhir jika ;--Mencari nilai rata-rata< max then mid:= B; end if ; if C >tengah:= A; jika B > min dan B< max then mid:= C; end if ; Put(Item =>menit dan C

    min, Lebar => 1 ) ; Meletakkan(" ");< min then min:= B; end if; if C < min then min:= C; end if; --Ищем максимальное значение max:= A; if B >Put(Item => tengah, lebar => 1 ) ; Meletakkan(" ");< max then mid:= B; end if; if C >Masukan(Item => maks, Lebar => 1 ) ; akhir Utama;< max then mid:= C; end if; Put(Item =>dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur Utama adalah A, B, C: Integer; min, pertengahan, maks: Integer; mulaiDapatkan(A); Dapatkan(B); Dapatkan (C); --Mencari nilai minimum min:= A; jika B

    maks lalu maks:= B; berakhir jika;
    jika C > maks maka maks:= C; berakhir jika;
    --Mencari nilai rata-rata pertengahan := A; jika B > min dan B menit dan C min, Lebar => 1); Meletakkan(" ");
    --Mencari nilai rata-rata pertengahan := A; jika B > min dan B Put(Item => tengah, lebar => 1); Meletakkan(" "); Masukan(Item => maks, Lebar => 1); akhir Utama;

    Contoh 1:
    Kotaknya ada dua, yang pertama ukuran A1xB1xC1, yang kedua ukuran A2xB2xC2. Tentukan apakah salah satu kotak ini dapat ditempatkan di dalam kotak lainnya, asalkan kotak tersebut hanya dapat diputar 90 derajat pada bagian tepinya. Program menerima angka A1, B1, C1, A2, B2, C2 sebagai input. Program ini akan menampilkan salah satu baris berikut: 1 2 3
    - “Kotaknya sama”, jika kotaknya sama, 3 2 1
    - "Kotak pertama

    Contoh 2:
    Kotaknya ada dua, yang pertama ukuran A1xB1xC1, yang kedua ukuran A2xB2xC2. Tentukan apakah salah satu kotak ini dapat ditempatkan di dalam kotak lainnya, asalkan kotak tersebut hanya dapat diputar 90 derajat pada bagian tepinya. Program menerima angka A1, B1, C1, A2, B2, C2 sebagai input. Program ini akan menampilkan salah satu baris berikut: 2 2 3
    - “Kotaknya sama”, jika kotaknya sama, 3 2 1
    kurang dari yang kedua

  • "Jika kotak pertama dapat ditempatkan di kotak kedua, lebih dari yang kedua ", kalau kotak kedua bisa ditaruh di kotak pertama. Dimensi kotak pertama: Dimensi kotak kedua:< min then mid:= min; min:= B1; end if ; if C1 < min then max:= min; min:= C1; end if ; if mid >Kotaknya sama Kotak pertama lebih besar dari kotak kedua dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; dengan Ada.Text_IO ; gunakan Ada.Text_IO ; prosedur utama adalah A1, B1, C1, A2, B2, C2: Integer; min, maks, pertengahan, tmp: Integer; mulaiGet(A1) ; Dapatkan(B1) ; Dapatkan(C1) ; Dapatkan(A2) ; Dapatkan(B2) ; Dapatkan(C2) ;< min then mid:= min; min:= B2; end if ; if C2 < min then max:= min; min:= C2; end if ; if mid >--Kita satukan muka-mukanya sesuai dengan panjang A1 => A2, B1 => B2, C1 => C2: --A1 dan A2 adalah yang terpanjang, C1 dan C2 adalah yang terpendek jika A1 = A2 lalu B1 = B2 lalu C1 = C2 maka Put_Line("Kotak-kotak itu sama" ) ; elsif A1 >= A2 lalu B1 >= B2 lalu C1 >= C2 lalu Put_Line( "Kotak pertama lebih besar dari kotak kedua") ; elsif A1<= A2 and then B1 <= B2 and then C1 <= C2 then Put_Line("Kotak pertama lebih kecil dari kotak kedua") ; berakhir jika ; akhir utama;

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur utama adalah A1, B1, C1, A2, B2, C2: Integer; min, maks, pertengahan, tmp: Integer; mulaiDapatkan(A1); Dapatkan(B1); Dapatkan (C1); Dapatkan (A2); Dapatkan (B2); Dapatkan (C2); --Kita jadikan rusuk-rusuknya bersesuaian dengan panjang A1 => A2, B1 => B2, C1 => C2: --A1 dan A2 terpanjang, C1 dan C2 terpendek -- "Putar" kotak pertama: min := A1 ; pertengahan:= B1; maks:= C1; jika B1< min then mid:= min; min:= B1; end if; if C1 < min then max:= min; min:= C1; end if; if mid >maks lalu tmp:= pertengahan; pertengahan:= maks; maks:=tmp; berakhir jika;< min then mid:= min; min:= B2; end if; if C2 < min then max:= min; min:= C2; end if; if mid >A1:=menit; B1:=pertengahan; C1:= maks; -- "Putar" kotak kedua: min:= A2; pertengahan:= B2; maks:= C2; jika B2<= A2 and then B1 <= B2 and then C1 <= C2 then Put_Line("Первая коробка меньше второй"); end if; end main;

    maks lalu tmp:= pertengahan; pertengahan:= maks; maks:=tmp; berakhir jika;

  • A2:=menit; B2:=pertengahan; C2:= maks; --Memeriksa korespondensi kotak dan menampilkan hasilnya: jika A1 = A2 dan kemudian B1 = B2 dan kemudian C1 = C2 maka Put_Line("Kotak-kotak itu sama"); elsif A1 >= A2 lalu B1 >= B2 lalu C1 >= C2 lalu Put_Line("Kotak pertama lebih besar dari kotak kedua"); elsif A1
    Tulislah program yang menghitung biaya panggilan telepon jarak jauh (harga satu menit ditentukan oleh jarak ke kota tempat pelanggan berada). Data masukan untuk program ini adalah kode area dan durasi panggilan. Di bawah ini adalah kode beberapa kota dan tampilan layar yang direkomendasikan saat program sedang berjalan:
    Menghitung biaya percakapan telepon. 423
    Masukkan data awal: 3
    Kode Area ->
    Durasi (bilangan bulat menit) ->
    kota Vladivostok
  • Harga per menit: 4 rubel. Biaya panggilan: 12 rubel. dengan Ada.Integer_Text_IO ; gunakan Ada.Integer_Text_IO ; dengan Ada.Text_IO ; gunakan Ada.Text_IO ; prosedur Utama adalah Kode, Len: Integer; (mulai) Put_Line ("Menghitung biaya percakapan telepon.") ; Put_Line ("Masukkan data awal:") ; Meletakkan ("Kode Area ->" ) ; Put_Line (; Mendapatkan) ; Meletakkan ( Kode ) ; "Durasi (bilangan bulat menit) -> " len Biaya panggilan: 12 rubel. kasus 423 Kode (Kapan) Put_Line (=> Put_Line) ; Put_Line ("Kota Vladivostok") ; Put_Line ("Harga per menit: 4 rubel." 4 "Biaya panggilan:" 1 ) Barang => len * (, Lebar =>) ; kasus; Put_Line ("gosok.") Put_Line (095 => Put_Line) ; Put_Line ("Kota Vladivostok") ; Put_Line ("Harga per menit: 4 rubel." 2 "Biaya panggilan:" 1 ) Barang => len * (, Lebar =>) ; kasus 815 Kode ("Kota Moskow") Put_Line ("Harga per menit: 2 rubel.") ; Put_Line ("Kota Vladivostok") ; Put_Line ("Harga per menit: 4 rubel." 3 "Biaya panggilan:" 1 ) Barang => len * (, Lebar =>) ; kasus 846 Kode ("Kota: Murmansk") Put_Line ("Harga per menit: 3 rubel.") ; Put_Line ("Kota Vladivostok") ; Put_Line ("Kota Samara" 1 ) Barang => len * (, Lebar =>) ; kasus "Harga per menit: 1 gosok." Barang => len, Lebar => (yang lain) ; => Taruh "Durasi (bilangan bulat menit) -> "; => Taruh"Tidak ada kota dengan kode ini di database! Coba lagi."

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur Utama adalah Kode, Len: Integer; mulai Put_Line("Menghitung biaya percakapan telepon."); Put_Line("Masukkan data awal :"); Masukan("Kode Area -> "); Ambil kode);

Put("Durasi (bilangan bulat menit) -> "); Dapatkan(len); Kode kasus adalah ketika 423 => Put_Line("Kota: Vladivostok"); Put_Line("Harga per menit: 4 rubel."); Put("Biaya panggilan : "); Put(Item => len * 4, Lebar => 1); Put_Line("gosok."); kapan 095 => Put_Line("Kota: Moskow"); Put_Line("Harga per menit: 2 rubel."); Put("Biaya panggilan : "); Put(Item => len * 2, Lebar => 1); Put_Line("gosok."); kapan 815 => Put_Line("Kota: Murmansk"); Put_Line("Harga per menit: 3 gosok."); Put("Biaya panggilan : "); Put(Item => len * 3, Lebar => 1); Put_Line("gosok."); kapan 846 => Put_Line("Kota: Samara"); Put_Line("Harga per menit: 1 gosok."); Put("Biaya panggilan : "); Put(Item => len, Lebar => 1); Put_Line("gosok."); ketika yang lain => Put("Tidak ada kota dengan kode ini di database! Coba lagi."); kasus akhir; akhir Utama; Bagian ini menjelaskan secara singkat tentang operator jika "Durasi (bilangan bulat menit) -> " Dan , fungsi perut()

dan algoritma untuk menukar variabel.

Sampai saat ini, mobil dengan transmisi manual yang disingkat transmisi manual merupakan mayoritas mutlak di antara kendaraan lain dengan berbagai tipe.

Selain itu, gearbox manual (manual) tetap menjadi perangkat yang cukup umum saat ini untuk mengubah dan mentransmisikan torsi mesin. Selanjutnya, kita akan berbicara tentang bagaimana “mekanik” disusun dan bekerja, seperti apa desain gearbox jenis ini, serta apa kelebihan dan kekurangan yang dimiliki solusi ini.

Baca di artikel ini

Diagram dan fitur transmisi manual

Mari kita mulai dengan fakta bahwa girboks jenis ini disebut mekanis karena unit semacam itu melibatkan perpindahan gigi secara manual. Dengan kata lain, pada mobil bertransmisi manual, pengemudi sendiri yang memindahkan persneling.

Mari kita lanjutkan. Transmisi manualnya bertahap, yaitu torsi berubah secara bertahap. Banyak pecinta mobil yang mengetahui bahwa gearbox sebenarnya memiliki roda gigi dan poros, namun tidak semua orang memahami cara kerja unit tersebut.

Rasio roda gigi adalah perbandingan antara jumlah gigi pada roda gigi yang digerakkan dengan jumlah gigi pada roda gigi penggerak. Dalam hal ini, tahapan gearbox yang berbeda menerima rasio roda gigi yang berbeda. Tahap terendah (low gear) memiliki rasio roda gigi tertinggi, dan tahap tertinggi (high gear) memiliki rasio roda gigi terkecil.

Menjadi jelas bahwa jumlah langkah sama dengan jumlah roda gigi pada girboks tertentu (girboks empat kecepatan, lima kecepatan, dll.) Perhatikan bahwa sebagian besar mobil saat ini dilengkapi dengan girboks lima kecepatan, manual transmisi dengan 6 langkah atau lebih kurang umum, dan sebelumnya cukup umum 4 kecepatan kotak mekanis roda gigi secara bertahap memudar ke latar belakang.

Perangkat transmisi mekanis

Jadi, meskipun mungkin ada banyak desain kotak seperti itu dengan ciri-ciri tertentu, namun, tahap awal Ada dua tipe utama:

  • gearbox tiga poros;
  • kotak poros ganda;

Mobil berpenggerak roda belakang biasanya dilengkapi dengan transmisi manual tiga poros, sedangkan girboks dua poros dipasang pada mobil penumpang berpenggerak roda depan. Dalam hal ini, desain transmisi manual tipe pertama dan kedua mungkin sangat berbeda.

Mari kita mulai dengan transmisi manual tiga poros. Kotak ini terdiri dari:

  • poros penggerak, yang juga disebut poros primer;
  • poros perantara gearbox;
  • poros yang digerakkan (sekunder);

Roda gigi dengan sinkronisasi dipasang pada poros. Pada perangkat girboks juga disertakan mekanisme perpindahan gigi. Ditentukan elemen penyusunnya terletak di rumah girboks, yang disebut juga rumah girboks.

Tugas poros penggerak adalah membuat sambungan dengan kopling. Poros penggerak memiliki spline untuk cakram yang digerakkan oleh kopling. Sedangkan untuk torsi, momen tertentu dari poros penggerak disalurkan melalui roda gigi, yang terhubung erat dengannya.

Mengenai pengoperasian poros perantara, poros ini terletak sejajar dengan poros input gearbox, dan sekelompok roda gigi dipasang di atasnya, yang berada dalam jaring kaku. Pada gilirannya, poros penggerak dipasang pada sumbu yang sama dengan poros penggerak.

Pemasangan ini dilakukan dengan menggunakan bantalan ujung pada poros penggerak. Bantalan ini termasuk poros yang digerakkan. Kelompok roda gigi (gear block) pada poros yang digerakkan tidak mempunyai ikatan yang kaku dengan poros itu sendiri sehingga berputar bebas pada poros tersebut. Dalam hal ini, kelompok roda gigi dari poros perantara, poros penggerak, dan roda gigi poros penggerak berada dalam kesatuan yang konstan.

Sinkronisasi (synchronizer clutches) dipasang di antara roda gigi poros yang digerakkan. Tugas mereka adalah menyelaraskan kecepatan sudut roda gigi poros yang digerakkan dengan kecepatan sudut poros itu sendiri melalui gesekan.

Sinkronisasi terikat secara kaku dengan poros yang digerakkan, dan juga memiliki kemampuan untuk bergerak sepanjang poros dalam arah memanjang karena adanya sambungan spline. Gearbox modern memiliki kopling sinkronisasi di semua gigi.

Jika kita memperhatikan mekanisme perpindahan gigi pada girboks tiga poros, maka mekanisme ini sering dipasang pada rumah unit. Desainnya mencakup tuas kontrol, penggeser, dan garpu.

Badan kotak (crankcase) terbuat dari paduan aluminium atau magnesium dan diperlukan untuk memasang poros dengan roda gigi dan mekanisme, serta sejumlah bagian lainnya. Rumah girboks juga berisi oli transmisi (oli girboks).

  • Untuk memahami cara kerja gearbox mekanis (manual) tipe tiga poros, mari garis besar umum Mari kita lihat prinsip pengoperasiannya. Saat tuas perpindahan gigi dalam posisi netral, tidak ada torsi yang disalurkan dari mesin ke roda penggerak kendaraan.

Setelah pengemudi menggerakkan tuas, garpu menggerakkan kopling sinkronisasi gigi tertentu. Sinkronisasi kemudian akan menyelaraskan kecepatan sudut gigi yang diinginkan dan poros yang digerakkan. Roda gigi cincin kopling kemudian akan terhubung dengan cincin roda gigi serupa, mengunci roda gigi pada poros yang digerakkan.

Mari kita tambahkan juga bahwa gigi mundur kendaraan disediakan oleh gigi mundur dari girboks. Dalam hal ini, gigi idler mundur, yang dipasang pada poros terpisah, memungkinkan Anda mengubah arah putaran.

Gearbox manual poros ganda: desain dan prinsip operasi

Setelah mengetahui apa itu girboks dengan tiga poros, mari beralih ke girboks dua poros. Tipe ini Gearbox memiliki dua poros: primer dan sekunder. Poros primer berfungsi sebagai penggerak, dan poros sekunder berfungsi sebagai penggerak. Roda gigi dan sinkronisasi dipasang pada poros. Juga di dalam kotak adalah gigi utama dan diferensial.

Poros penggerak bertanggung jawab untuk menghubungkan ke kopling, dan ada juga blok roda gigi pada poros yang terhubung secara kaku dengan poros. Poros yang digerakkan terletak sejajar dengan poros penggerak, sedangkan roda-roda dari poros yang digerakkan selalu menyatu dengan roda-roda poros penggerak, dan juga berputar bebas pada poros itu sendiri.

Selain itu, roda gigi penggerak dari roda gigi utama dipasang secara kaku pada poros yang digerakkan, dan kopling sinkronisasi terletak di antara roda gigi poros yang digerakkan itu sendiri. Mari kita tambahkan bahwa untuk memperkecil ukuran girboks, serta menambah jumlah gir, pada girboks modern, alih-alih satu poros penggerak, sering kali dapat dipasang 2 atau bahkan 3 poros.

Roda gigi utama dipasang secara kaku pada setiap poros tersebut, dan roda gigi tersebut dihubungkan secara kaku dengan roda gigi yang digerakkan. Ternyata desainnya sebenarnya menerapkan 3 roda gigi utama.

Roda gigi utama itu sendiri, serta diferensial pada kotak roda gigi, mentransmisikan torsi dari poros sekunder ke roda penggerak. Pada saat yang sama, diferensial juga dapat memberikan putaran roda ketika roda penggerak berputar pada kecepatan sudut yang berbeda.

Sedangkan untuk mekanisme perpindahan gigi, pada girboks poros ganda letaknya terpisah, yakni di luar housing. Kotak tersebut dihubungkan ke mekanisme switching dengan kabel atau batang khusus. Koneksi yang paling umum adalah menggunakan kabel.

Mekanisme perpindahan kotak 2 poros ini sendiri memiliki tuas yang dihubungkan dengan kabel ke tuas pilihan dan tuas pemindah gigi. Tuas ini terhubung ke batang pemindah gigi pusat, yang juga memiliki garpu.

  • Jika kita berbicara tentang prinsip pengoperasian girboks manual dua poros, maka mirip dengan prinsip girboks tiga poros. Perbedaannya terletak pada cara kerja mekanisme perpindahan gigi. Singkatnya, tuas dapat melakukan gerakan memanjang dan melintang relatif terhadap sumbu mobil. Selama gerakan lateral pemilihan gigi terjadi karena gaya menuju ke kabel pemilihan gigi, yang mempengaruhi tuas pemilihan gigi.

Selanjutnya, tuas bergerak secara longitudinal, dan gaya dialirkan ke kabel pemindah gigi. Tuas yang sesuai menggerakkan batang dengan garpu secara horizontal; garpu pada batang menggeser sinkronisasi, yang menyebabkan pemblokiran roda gigi poros yang digerakkan.

Terakhir, kami mencatat juga kotak mekanis jenis yang berbeda memiliki perangkat pengunci tambahan yang mencegah dua gigi diaktifkan secara bersamaan atau satu gigi dimatikan secara tidak terduga.

Baca juga

Meremas kopling sebelum menghidupkan mesin: kapan Anda perlu menekan kopling dan dalam hal apa tidak disarankan untuk melakukannya. Kiat yang berguna dan rekomendasi.

  • Penyebab susah perpindahan gigi saat mesin hidup. Oli transmisi dan level di gearbox, keausan sinkronisasi dan roda gigi gearbox, kopling.



  • Ingatlah bahwa volumenya paralelepiped persegi panjang(atau kotak biasa) sama dengan produknya panjang, lebar dan tingginya. Jika kotak Anda berbentuk persegi panjang atau persegi, yang perlu Anda ketahui hanyalah panjang, lebar, dan tingginya. Untuk mendapatkan volumenya, perlu mengalikan hasil pengukurannya. Rumus perhitungan dalam bentuk singkatan sering disajikan sebagai berikut: V = L x W x H.
    Contoh soal: “Jika panjang sebuah kotak 10 cm, lebar 4 cm, dan tinggi 5 cm, berapa volumenya?”
    V = P x L x T
    V = 10 cm x 4 cm x 5 cm
    V = 200cm3
    "Ketinggian" sebuah kotak dapat disebut sebagai "kedalaman". Misalnya, soal dapat berisi informasi berikut: “Panjang kotak adalah 10 cm, lebarnya 4 cm, dan dalamnya 5 cm.”

    2
    Ukur panjang kotak. Jika dilihat dari atas, kotak itu akan tampak di depan mata Anda berbentuk persegi panjang. Panjang kotak akan menjadi sisi terpanjang dari persegi panjang tersebut. Catat hasil pengukuran sisi ini sebagai nilai parameter "panjang".
    Saat melakukan pengukuran, pastikan menggunakan satuan pengukuran yang seragam. Jika Anda mengukur satu sisi dalam sentimeter, maka sisi lainnya juga perlu diukur dalam sentimeter.

    3
    Ukur lebar kotak. Lebar kotak akan diwakili oleh sisi persegi panjang lainnya yang lebih pendek yang terlihat dari atas. Jika Anda menghubungkan sisi-sisi kotak yang diukur panjang dan lebarnya secara visual, maka akan tampak dalam bentuk huruf “L”. Catat pengukuran terakhir sebagai "lebar".
    Lebarnya selalu merupakan sisi terpendek kotak.

    4
    Ukur tinggi kotak. Ini adalah parameter terakhir yang belum Anda ukur. Ini mewakili jarak dari tepi atas kotak ke bawah. Catat pengukuran ini sebagai "tinggi".
    Tergantung pada sisi mana Anda meletakkan kotak, sisi tertentu yang Anda beri label "panjang", "lebar", atau "tinggi" mungkin berbeda. Namun hal tersebut tidak menjadi masalah, Anda hanya perlu pengukuran dari tiga sisi yang berbeda.

    5
    Lipat gandakan hasil ketiga pengukuran tersebut. Seperti yang sudah disebutkan, rumus menghitung volume adalah sebagai berikut: V = Panjang x Lebar x Tinggi; oleh karena itu, untuk mendapatkan volumenya, Anda cukup mengalikan ketiga sisinya. Pastikan untuk menunjukkan satuan pengukuran yang Anda gunakan dalam perhitungan agar Anda tidak lupa apa sebenarnya arti nilai yang diperoleh.

    6
    Saat menentukan satuan pengukuran volume, jangan lupa untuk menunjukkan pangkat ketiga "3". Volume yang dihitung memiliki ekspresi numerik, tetapi tanpa satuan pengukuran yang benar, penghitungan Anda tidak akan ada artinya. Untuk mencerminkan satuan volume dengan benar, satuan tersebut harus ditunjukkan dalam kubus. Misalnya, jika semua sisi diukur dalam sentimeter, maka satuan volume akan ditampilkan sebagai "cm3".
    Contoh soal: “Jika sebuah kotak berukuran panjang 2 m, lebar 1 m, dan tinggi 3 m, berapa volumenya?”
    V = P x L x T
    V = 2 mx 1 mx 4 m
    V = 8 m3
    Catatan: Catatan satuan kubik volume memungkinkan Anda memahami berapa banyak kubus yang dapat ditempatkan di dalam kotak. Jika kita mengacu pada contoh sebelumnya, berarti ada delapan meter kubik yang masuk ke dalam kotak.

    Perhitungan volume kotak bentuk lainnya

    Tentukan volume silinder tersebut. Silinder adalah tabung bundar dengan lingkaran di kedua ujungnya. Untuk menentukan volume silinder digunakan rumus: V = π x r 2 x h, dimana π = 3,14, r adalah jari-jari sisi bulat silinder, dan h adalah tingginya.
    Untuk menentukan volume kerucut, atau limas yang alasnya bulat, digunakan rumus yang sama, tetapi dikalikan 1/3. Artinya, volume kerucut dihitung dengan rumus: V = 1/3 (π x r 2 x h)

    2
    Tentukan volume piramida tersebut. Piramida adalah bangun datar yang alasnya datar dan sisi-sisinya menyatu di bagian atas pada satu titik. Untuk menentukan volume piramida, Anda perlu mengambil 1/3 hasil kali luas alas dan tingginya. Artinya, rumus perhitungannya adalah sebagai berikut: Volume limas = 1/3 (Luas alas x Tinggi).
    Dalam kebanyakan kasus, piramida berbentuk persegi atau alas persegi panjang. Dalam situasi seperti itu, luas alas dihitung dengan mengalikan panjang alas dengan lebarnya.

    Untuk menentukan volume sekotak bentuk kompleks, jumlahkan volume masing-masing bagiannya. Misalnya, Anda mungkin perlu mengukur volume kotak yang berbentuk huruf "L". Dalam hal ini, kotak itu akan ada lebih banyak sisi yang perlu diukur. Jika Anda membagi kotak ini menjadi dua bagian, Anda dapat mengukur volume kedua bagian tersebut dengan cara standar, lalu menjumlahkan nilai yang dihasilkan. Dalam kasus kotak berbentuk L, bagian yang lebih panjang dapat dianggap sebagai kotak persegi panjang yang terpisah, dan bagian yang lebih pendek dapat dianggap sebagai kotak persegi (atau hampir persegi) yang melekat padanya.
    Jika kotak Anda memiliki bentuk yang sangat rumit, ketahuilah bahwa ada banyak cara untuk menentukan volume benda dalam bentuk apa pun.

    Saya menawarkan kepada pembaca Habrahabr terjemahan dari publikasi “100 Prisoners Escape Puzzle”, yang saya temukan di situs DataGenetics. Silakan kirimkan kesalahan apa pun terkait artikel ini melalui pesan pribadi.

    Berdasarkan permasalahannya, terdapat 100 narapidana di penjara, yang masing-masing memiliki nomor pribadi dari 1 hingga 100. Kepala penjara memutuskan untuk memberikan kesempatan kepada narapidana untuk dibebaskan dan menawarkan untuk lulus ujian yang dia ciptakan. Jika semua tahanan berhasil, maka mereka bebas, jika setidaknya satu gagal, mereka semua akan mati.

    Tugas

    Penjaga penjara masuk ruang rahasia dan menyiapkan 100 kotak bertutup. Pada setiap kotak ia memberi nomor yang diberi nomor 1 sampai 100. Kemudian ia membawa 100 tablet kertas, sesuai dengan jumlah tahanan, dan memberi nomor pada tablet-tablet tersebut dari 1 sampai 100. Setelah itu, ia mencampur 100 tablet dan menempatkan satu tablet di setiap kotak, menutup tutupnya. Narapidana tidak melihat bagaimana sipir penjara melakukan semua tindakan ini.

    Kompetisi dimulai, sipir penjara membawa setiap narapidana satu per satu ke sebuah ruangan yang berisi kotak-kotak dan memberitahu para narapidana bahwa mereka harus menemukan sebuah kotak yang berisi tanda dengan nomor narapidana. Narapidana mencoba menemukan plat nomor mereka dengan membuka kotak. Setiap orang diperbolehkan membuka hingga 50 kotak; jika masing-masing narapidana menemukan nomornya, maka narapidana tersebut akan dibebaskan, jika setidaknya salah satu dari mereka tidak menemukan nomornya dalam 50 kali percobaan, maka semua narapidana akan mati.

    Agar narapidana bisa dibebaskan, SEMUA narapidana harus lulus ujian.

    Jadi seberapa besar kemungkinan para tahanan akan diampuni?

    • Setelah kotak dibuka oleh narapidana dan ia memeriksa tandanya, kotak itu dimasukkan kembali ke dalam kotak dan tutupnya ditutup kembali;
    • Piring tidak dapat ditukar;
    • Narapidana tidak boleh meninggalkan petunjuk satu sama lain atau berinteraksi satu sama lain dengan cara apa pun setelah ujian dimulai;
    • Narapidana diperbolehkan mendiskusikan strategi sebelum ujian dimulai.

    Apa strategi optimal bagi narapidana?

    Pertanyaan tambahan:
    Jika sesama narapidana (bukan peserta ujian) dapat memasuki ruang rahasia sebelum ujian dimulai, periksa semua tanda di semua kotak dan (opsional, tetapi tidak wajib) tukar dua tanda dari dua kotak (di dalam hal ini, teman tersebut tidak akan memiliki kesempatan untuk - memberi tahu para narapidana tentang akibat dari tindakannya), strategi apa yang harus dia ambil untuk meningkatkan peluang keselamatan para narapidana?

    Apakah solusinya tidak mungkin?

    Pada pandangan pertama, tugas ini tampaknya hampir tidak ada harapan. Tampaknya peluang setiap narapidana menemukan tabletnya kecil secara mikroskopis. Selain itu, narapidana tidak dapat bertukar informasi satu sama lain selama ujian berlangsung.

    Peluang satu narapidana adalah 50:50. Totalnya ada 100 kotak dan dia bisa membuka hingga 50 kotak untuk mencari tandanya. Jika dia membuka kotak-kotak itu secara acak dan membuka setengah dari seluruh kotak, dia akan menemukan tandanya di setengah kotak yang terbuka, atau tandanya akan tetap berada di 50 kotak yang tertutup. Peluang keberhasilannya adalah ½.

    Mari kita ambil dua tahanan. Jika keduanya memilih kotak secara acak, peluang masing-masing kotak adalah ½, dan keduanya ½x½=¼.
    (untuk dua narapidana, kesuksesan akan terjadi pada satu dari empat kasus).

    Untuk tiga tahanan peluangnya adalah ½ × ½ × ½ = ⅛.

    Untuk 100 narapidana, peluangnya adalah: ½ × ½ × … ½ × ½ (dikalikan 100 kali).

    Ini sama dengan

    Pr ≈ 0,00000000000000000000000000000008

    Artinya, peluangnya sangat kecil. Dalam situasi ini, kemungkinan besar semua tahanan akan mati.

    Jawaban yang luar biasa

    Jika setiap tahanan membuka kotak secara acak, kecil kemungkinannya mereka akan lulus ujian. Ada strategi di mana narapidana dapat mengharapkan keberhasilan lebih dari 30% dari keseluruhan waktu. Ini adalah hasil yang luar biasa luar biasa (jika Anda belum pernah mendengarnya masalah matematika sebelumnya).

    Lebih dari 30% untuk 100 tahanan! Ya, ini bahkan lebih baik daripada peluang dua tahanan, asalkan mereka membuka kotak secara acak. Tapi bagaimana ini mungkin?

    Jelas bahwa satu untuk setiap narapidana, kemungkinannya tidak boleh lebih dari 50% (bagaimanapun juga, tidak ada cara untuk komunikasi antar narapidana). Namun jangan lupa bahwa informasi tersebut disimpan dalam susunan piring di dalam kotak. Tidak ada seorang pun yang mengacak tanda-tanda di antara kunjungan individu narapidana ke ruangan tersebut, sehingga kami dapat menggunakan informasi ini.

    Larutan

    Pertama, saya akan memberi tahu Anda solusinya, lalu saya akan menjelaskan mengapa ini berhasil.

    Strateginya sangat mudah. Tahanan pertama membuka kotak dengan nomor yang tertulis di bajunya. Misalnya, narapidana bernomor 78 membuka sebuah kotak bernomor 78. Jika dia menemukan nomornya pada tanda di dalam kotak, baguslah! Jika tidak, dia melihat nomor pada pelat di kotak “miliknya” dan kemudian membuka kotak berikutnya dengan nomor tersebut. Setelah membuka kotak kedua, dia melihat nomor pelat di dalam kotak ini dan membuka kotak ketiga dengan nomor ini. Selanjutnya, kita cukup mentransfer strategi ini ke kotak yang tersisa. Agar lebih jelas, lihat gambar:

    Pada akhirnya, tahanan akan menemukan nomornya atau mencapai batas 50 kotak. Pada pandangan pertama, hal ini tampaknya tidak ada gunanya dibandingkan dengan sekadar memilih sebuah kotak secara acak (dan hal ini berlaku untuk satu tahanan), tetapi karena semua 100 tahanan akan menggunakan set kotak yang sama, hal ini masuk akal.

    Indahnya soal matematika ini tidak hanya mengetahui hasilnya, tetapi juga pemahamannya Mengapa strategi ini berhasil.

    Jadi mengapa strategi ini berhasil?

    Setiap kotak berisi satu tanda - dan tanda ini unik. Artinya pelat tersebut berada di dalam kotak dengan nomor yang sama, atau menunjuk ke kotak yang berbeda. Karena semua tanda bersifat unik, untuk setiap kotak hanya ada satu tanda yang menunjuk ke sana (dan hanya ada satu cara untuk sampai ke kotak itu).

    Kalau dipikir-pikir, kotak-kotak itu membentuk rantai melingkar yang tertutup. Satu kotak hanya dapat menjadi bagian dari satu rantai, karena di dalam kotak hanya ada satu penunjuk ke kotak berikutnya dan, oleh karena itu, di kotak sebelumnya hanya ada satu penunjuk ke kotak ini(pemrogram dapat melihat analogi dengan daftar tertaut).

    Jika kotak tidak mengarah ke dirinya sendiri (jumlah kotak sama dengan jumlah pelat di dalamnya), maka kotak tersebut berada dalam rantai. Beberapa rantai mungkin terdiri dari dua kotak, ada pula yang lebih panjang.

    Karena semua narapidana memulai dengan sebuah kotak dengan nomor yang sama dengan pakaian mereka, maka menurut definisi, mereka ditempatkan pada rantai yang berisi tanda mereka (hanya ada satu tanda yang menunjuk ke kotak itu).

    Dengan menjelajahi kotak-kotak dalam lingkaran di sepanjang rantai ini, mereka dijamin pada akhirnya akan menemukan tandanya.

    Satu-satunya pertanyaan yang tersisa adalah apakah mereka akan menemukan tandanya dalam 50 gerakan.

    Panjang rantai

    Agar semua narapidana lulus ujian, panjang rantai maksimal harus kurang dari 50 kotak. Jika rantainya lebih panjang dari 50 kotak, tahanan dengan nomor dari rantai ini akan gagal dalam ujian - dan semua tahanan akan mati.

    Jika panjang maksimal rantai terpanjang kurang dari 50 kotak, maka semua narapidana akan lulus ujian!

    Pikirkan tentang ini sejenak. Ternyata hanya ada satu rantai yang lebih panjang dari 50 kotak dalam setiap tata letak pelat (kita hanya punya 100 kotak, jadi jika satu rantai lebih panjang dari 50, maka sisanya akan lebih pendek dari 50 pada akhirnya) .

    Kemungkinan kesepakatan berantai panjang

    Setelah Anda meyakinkan diri sendiri bahwa agar berhasil, panjang rantai maksimum harus kurang dari atau sama dengan 50, dan hanya boleh ada satu rantai panjang dalam setiap rangkaian, kita dapat menghitung probabilitas untuk lulus ujian:

    Sedikit lagi matematika

    Jadi apa yang kita perlukan untuk mengetahui kemungkinan adanya rantai panjang?

    Untuk rantai dengan panjang l, peluang munculnya kotak-kotak di luar rantai adalah:

    Ada (l-1) dalam kumpulan angka ini! cara untuk menempatkan tanda.

    Tanda-tanda yang tersisa dapat ditemukan (100-l)! cara (jangan lupa panjang rantai tidak melebihi 50).

    Mengingat hal ini, jumlah permutasi yang mengandung rantai panjang yang tepat aku: (>50)

    Ternyata ada 100(!) cara menyusun tanda-tanda tersebut, sehingga peluang adanya rantai dengan panjang l sama dengan 1/l. Omong-omong, hasil ini tidak bergantung pada jumlah kotak.

    Seperti yang telah kita ketahui, hanya ada satu pilihan yang mempunyai panjang rantai > 50, sehingga peluang keberhasilan dihitung menggunakan rumus berikut:

    Hasil

    31,18% - probabilitas bahwa ukuran rantai terpanjang akan kurang dari 50 dan masing-masing tahanan akan dapat menemukan tandanya, mengingat batas 50 percobaan.

    Peluang semua narapidana menemukan tandanya dan lulus ujian adalah 31,18%

    Di bawah ini adalah grafik yang menunjukkan probabilitas (pada sumbu y) untuk semua rantai dengan panjang l (pada sumbu x). Warna merah mewakili semua “kegagalan” (kurva yang diberikan di sini hanyalah grafik 1/l). Warna hijau berarti "sukses" (perhitungannya sedikit lebih rumit untuk bagian grafik ini, karena ada beberapa cara untuk menentukan panjang maksimum<50). Общая вероятность складывается из зеленых столбцов в 31.18% шанс на спасение.

    Bilangan harmonik (bagian artikel ini ditujukan untuk para geek)

    Dalam matematika, bilangan harmonik ke-n adalah jumlah kebalikan dari n bilangan pertama yang berurutan dalam deret natural.

    Mari kita hitung batasnya jika alih-alih 100a kotak kita mempunyai sejumlah besar kotak yang berubah-ubah (mari kita asumsikan kita mempunyai total 2n kotak).

    Konstanta Euler-Mascheroni adalah konstanta yang didefinisikan sebagai batas selisih antara jumlah parsial suatu deret harmonik dan logaritma natural suatu bilangan.

    Dengan bertambahnya jumlah narapidana, jika sipir mengizinkan narapidana membuka setengah dari seluruh kotak, maka peluang keselamatan cenderung 30,685%

    (Jika Anda membuat keputusan di mana tahanan menebak kotak secara acak, maka seiring bertambahnya jumlah tahanan, kemungkinan keselamatan cenderung nol!)

    Pertanyaan tambahan

    Apakah ada orang lain yang ingat pertanyaan lanjutannya? Apa yang dapat dilakukan rekan kita yang suka membantu untuk meningkatkan peluang kita untuk bertahan hidup?

    Sekarang kita sudah tahu solusinya, jadi strateginya sederhana: dia harus mempelajari semua tanda dan menemukan rantai kotak terpanjang. Jika rantai terpanjang kurang dari 50, maka ia tidak perlu mengganti pelat sama sekali, atau menggantinya agar rantai terpanjang tidak menjadi lebih panjang dari 50. Namun, jika dia menemukan rantai yang panjangnya lebih dari 50 kotak, yang perlu dia lakukan hanyalah menukar isi dua kotak dari rantai tersebut untuk membagi rantai tersebut menjadi dua rantai yang lebih pendek.

    Akibat dari strategi ini, tidak akan ada rantai panjang dan semua narapidana dijamin mendapatkan tanda dan keselamatan. Jadi, dengan menukar kedua tanda tersebut, kita mengurangi kemungkinan keselamatan menjadi 100%!

    Yang saya temukan di situs DataGenetics. Silakan kirimkan kesalahan apa pun terkait artikel ini melalui pesan pribadi.

    Dalam soal ini, ada 100 tahanan di sebuah penjara, masing-masing diberi nomor dari 1 hingga 100. Kepala penjara memutuskan untuk memberikan kesempatan kepada para tahanan untuk dibebaskan, dia memberi tahu mereka syarat-syarat ujian, dan jika semua tahanan lulus ujian. tes, maka mereka akan dibebaskan. Jika salah satu dari mereka gagal dalam ujian, maka semua tahanan akan mati.

    Tugas

    Kepala penjara pergi ke ruang rahasia dan menyiapkan 100 kotak bertutup. Pada setiap kotak ia memberi nomor yang diberi nomor 1 sampai 100. Kemudian ia membawa 100 tablet kertas, sesuai dengan jumlah tahanan, dan memberi nomor pada tablet-tablet tersebut dari 1 sampai 100. Setelah itu, ia mencampur 100 tablet dan menempatkan satu tablet di setiap kotak, menutup tutupnya. Narapidana tidak melihat bagaimana sipir penjara melakukan semua tindakan ini.

    Kompetisi dimulai, sipir penjara membawa setiap narapidana satu per satu ke sebuah ruangan yang berisi kotak-kotak dan memberitahu para narapidana bahwa mereka harus menemukan sebuah kotak yang berisi tanda dengan nomor narapidana. Narapidana mencoba menemukan plat nomor mereka dengan membuka kotak. Setiap orang diperbolehkan membuka hingga 50 kotak; jika masing-masing narapidana menemukan nomornya, maka narapidana tersebut akan dibebaskan, jika setidaknya salah satu dari mereka tidak menemukan nomornya dalam 50 kali percobaan, maka semua narapidana akan mati.

    Agar narapidana bisa dibebaskan, SEMUA narapidana harus lulus ujian.

    Jadi seberapa besar kemungkinan para tahanan akan diampuni?

    • Setelah kotak dibuka oleh narapidana dan ia memeriksa tandanya, kotak itu dimasukkan kembali ke dalam kotak dan tutupnya ditutup kembali;
    • Piring tidak dapat ditukar;
    • Narapidana tidak boleh meninggalkan petunjuk satu sama lain atau berinteraksi satu sama lain dengan cara apa pun setelah ujian dimulai;
    • Narapidana diperbolehkan mendiskusikan strategi sebelum ujian dimulai.

    Apa strategi terbaik untuk narapidana?

    Pertanyaan tambahan:

    Jika sesama narapidana (bukan peserta ujian) dapat memasuki ruang rahasia sebelum ujian dimulai, periksa semua tanda di semua kotak dan (opsional, tetapi tidak wajib) tukar dua tanda dari dua kotak (di dalam hal ini, teman tersebut tidak akan memiliki kesempatan untuk - memberi tahu para narapidana tentang akibat dari tindakannya), strategi apa yang harus dia ambil untuk meningkatkan peluang keselamatan para narapidana?

    Apakah solusinya tidak mungkin?

    Pada pandangan pertama, tugas ini tampaknya hampir tidak ada harapan. Tampaknya peluang setiap narapidana menemukan tabletnya kecil secara mikroskopis. Selain itu, narapidana tidak dapat bertukar informasi satu sama lain selama ujian berlangsung.

    Peluang satu narapidana adalah 50:50. Totalnya ada 100 kotak dan dia bisa membuka hingga 50 kotak untuk mencari tandanya. Jika dia membuka kotak-kotak itu secara acak dan membuka setengah dari seluruh kotak, dia akan menemukan tandanya di setengah kotak yang terbuka, atau tandanya akan tetap berada di 50 kotak yang tertutup. Peluang keberhasilannya adalah ½.

    Mari kita ambil dua tahanan. Jika keduanya memilih kotak secara acak, peluang masing-masing kotak adalah ½, dan keduanya ½x½=¼.
    (untuk dua narapidana, kesuksesan akan terjadi pada satu dari empat kasus).

    Untuk tiga tahanan peluangnya adalah ½ × ½ × ½ = ⅛.

    Untuk 100 narapidana, peluangnya adalah: ½ × ½ × … ½ × ½ (dikalikan 100 kali).


    Ini sama dengan

    Pr ≈ 0,0000000000000000000000000000008

    Artinya, peluangnya sangat kecil. Dalam situasi ini, kemungkinan besar semua tahanan akan mati.

    Jawaban yang luar biasa

    Jika setiap tahanan membuka kotak secara acak, kecil kemungkinannya mereka akan lulus ujian. Ada strategi di mana narapidana dapat mengharapkan keberhasilan lebih dari 30% dari keseluruhan waktu. Ini adalah hasil yang luar biasa luar biasa (jika Anda belum pernah mendengar soal matematika ini sebelumnya).

    Lebih dari 30% untuk 100 tahanan! Ya, ini bahkan lebih baik daripada peluang dua tahanan, asalkan mereka membuka kotak secara acak. Tapi bagaimana ini mungkin?

    Jelas bahwa satu untuk setiap narapidana, kemungkinannya tidak boleh lebih dari 50% (bagaimanapun juga, tidak ada cara untuk komunikasi antar narapidana). Namun jangan lupa bahwa informasi tersebut disimpan dalam susunan piring di dalam kotak. Tidak ada seorang pun yang mengacak tanda-tanda di antara kunjungan individu narapidana ke ruangan tersebut, sehingga kami dapat menggunakan informasi ini.

    Larutan

    Pertama, saya akan memberi tahu Anda solusinya, lalu saya akan menjelaskan mengapa ini berhasil.

    Strateginya sangat mudah. Tahanan pertama membuka kotak dengan nomor yang tertulis di bajunya. Misalnya, narapidana bernomor 78 membuka sebuah kotak bernomor 78. Jika dia menemukan nomornya pada tanda di dalam kotak, baguslah! Jika tidak, dia melihat nomor pada pelat di kotak “miliknya” dan kemudian membuka kotak berikutnya dengan nomor tersebut. Setelah membuka kotak kedua, dia melihat nomor pelat di dalam kotak ini dan membuka kotak ketiga dengan nomor ini. Selanjutnya, kita cukup mentransfer strategi ini ke kotak yang tersisa. Agar lebih jelas, lihat gambar:


    Pada akhirnya, tahanan akan menemukan nomornya atau mencapai batas 50 kotak. Pada pandangan pertama, hal ini tampaknya tidak ada gunanya dibandingkan dengan sekadar memilih sebuah kotak secara acak (dan hal ini berlaku untuk satu tahanan), tetapi karena semua 100 tahanan akan menggunakan set kotak yang sama, hal ini masuk akal.

    Indahnya soal matematika ini tidak hanya mengetahui hasilnya, tetapi juga pemahamannya Mengapa strategi ini berhasil.

    Jadi mengapa strategi ini berhasil?

    Setiap kotak berisi satu tanda - dan tanda ini unik. Artinya pelat tersebut berada di dalam kotak dengan nomor yang sama, atau menunjuk ke kotak yang berbeda. Karena semua tanda bersifat unik, untuk setiap kotak hanya ada satu tanda yang menunjuk ke sana (dan hanya ada satu cara untuk sampai ke kotak itu).


    Kalau dipikir-pikir, kotak-kotak itu membentuk rantai melingkar yang tertutup. Satu kotak hanya dapat menjadi bagian dari satu rantai, karena di dalam kotak hanya ada satu penunjuk ke kotak berikutnya dan, oleh karena itu, di kotak sebelumnya hanya ada satu penunjuk ke kotak tertentu (pemrogram dapat melihat analogi dengan daftar tertaut) .

    Jika kotak tidak mengarah ke dirinya sendiri (jumlah kotak sama dengan jumlah pelat di dalamnya), maka kotak tersebut berada dalam rantai. Beberapa rantai mungkin terdiri dari dua kotak, ada pula yang lebih panjang.


    Karena semua narapidana memulai dengan sebuah kotak dengan nomor yang sama dengan pakaian mereka, maka menurut definisi, mereka ditempatkan pada rantai yang berisi tanda mereka (hanya ada satu tanda yang menunjuk ke kotak itu).

    Dengan menjelajahi kotak-kotak dalam lingkaran di sepanjang rantai ini, mereka dijamin pada akhirnya akan menemukan tandanya.

    Satu-satunya pertanyaan yang tersisa adalah apakah mereka akan menemukan tandanya dalam 50 gerakan.


    Panjang rantai

    Agar semua narapidana lulus ujian, panjang rantai maksimal harus kurang dari 50 kotak. Jika rantainya lebih panjang dari 50 kotak, tahanan dengan nomor dari rantai ini akan gagal dalam ujian - dan semua tahanan akan mati.

    Jika panjang maksimal rantai terpanjang kurang dari 50 kotak, maka semua narapidana akan lulus ujian!

    Pikirkan tentang ini sejenak. Ternyata hanya ada satu rantai yang lebih panjang dari 50 kotak dalam setiap tata letak pelat (kita hanya punya 100 kotak, jadi jika satu rantai lebih panjang dari 50, maka sisanya akan lebih pendek dari 50 pada akhirnya) .


    Kemungkinan kesepakatan berantai panjang

    Setelah Anda meyakinkan diri sendiri bahwa agar berhasil, panjang rantai maksimum harus kurang dari atau sama dengan 50, dan hanya boleh ada satu rantai panjang dalam setiap rangkaian, kita dapat menghitung probabilitas untuk lulus ujian:

    Sedikit lagi matematika

    Jadi apa yang kita perlukan untuk mengetahui kemungkinan adanya rantai panjang?

    Untuk rantai dengan panjang l, peluang munculnya kotak-kotak di luar rantai adalah:

    Ada (l-1) dalam kumpulan angka ini! cara untuk menempatkan tanda.

    Tanda-tanda yang tersisa dapat ditemukan (100-l)! cara (jangan lupa panjang rantai tidak melebihi 50).

    Mengingat hal ini, banyak permutasi yang mengandung rantai dengan panjang tepat l: (>50)


    Ternyata ada 100(!) cara menyusun tanda-tanda tersebut, sehingga peluang adanya rantai dengan panjang l sama dengan 1/l. Omong-omong, hasil ini tidak bergantung pada jumlah kotak.

    Seperti yang telah kita ketahui, hanya ada satu pilihan yang mempunyai panjang rantai > 50, sehingga peluang keberhasilan dihitung menggunakan rumus berikut:

    Hasil

    31,18% - probabilitas bahwa ukuran rantai terpanjang akan kurang dari 50 dan masing-masing tahanan akan dapat menemukan tandanya, mengingat batas 50 percobaan.

    Peluang semua narapidana menemukan tandanya dan lulus ujian adalah 31,18%

    Di bawah ini adalah grafik yang menunjukkan probabilitas (pada sumbu y) untuk semua rantai dengan panjang l (pada sumbu x). Warna merah mewakili semua “kegagalan” (kurva yang diberikan di sini hanyalah grafik 1/l). Hijau berarti "sukses" (perhitungan sedikit lebih rumit untuk bagian grafik ini karena ada beberapa cara untuk menentukan panjang maksimum<50). Общая вероятность складывается из зеленых столбцов в 31.18% шанс на спасение.


    Bilangan harmonik (bagian artikel ini ditujukan untuk para geek)

    Dalam matematika, bilangan harmonik ke-n adalah jumlah kebalikan dari n bilangan pertama yang berurutan dalam deret natural.


    Mari kita hitung batasnya jika alih-alih 100a kotak kita mempunyai sejumlah besar kotak yang berubah-ubah (mari kita asumsikan kita mempunyai total 2n kotak).


    Konstanta Euler-Mascheroni adalah konstanta yang didefinisikan sebagai batas selisih antara jumlah parsial suatu deret harmonik dan logaritma natural suatu bilangan.

    Dengan bertambahnya jumlah narapidana, jika sipir mengizinkan narapidana membuka setengah dari seluruh kotak, maka peluang keselamatan cenderung 30,685%

    (Jika Anda membuat keputusan di mana tahanan menebak kotak secara acak, maka seiring bertambahnya jumlah tahanan, kemungkinan keselamatan cenderung nol!)

    Pertanyaan tambahan

    Apakah ada orang lain yang ingat pertanyaan lanjutannya? Apa yang dapat dilakukan rekan kita yang suka membantu untuk meningkatkan peluang kita untuk bertahan hidup?

    Sekarang kita sudah tahu solusinya, jadi strateginya sederhana: dia harus mempelajari semua tanda dan menemukan rantai kotak terpanjang. Jika rantai terpanjang kurang dari 50, maka ia tidak perlu mengganti pelat sama sekali, atau menggantinya agar rantai terpanjang tidak menjadi lebih panjang dari 50. Namun, jika dia menemukan rantai yang panjangnya lebih dari 50 kotak, yang perlu dia lakukan hanyalah menukar isi dua kotak dari rantai tersebut untuk membagi rantai tersebut menjadi dua rantai yang lebih pendek.

    Akibat dari strategi ini, tidak akan ada rantai panjang dan semua narapidana dijamin mendapatkan tanda dan keselamatan. Jadi, dengan menukar kedua tanda tersebut, kita mengurangi kemungkinan keselamatan menjadi 100%!