Masalah kombinatorial. Contoh solusi

    Buatlah program yang membandingkan dua bilangan bulat yang dimasukkan dari keyboard. Program harus menunjukkan angka mana yang lebih besar, atau, jika angkanya sama, mencetak pesan yang sesuai.

    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."); Masukan ("->"); Mendapatkan); Dapatkan (B); - Masukkan 2 angka jika A > B lalu Put (Item =>; A, Width =>; 1); Masukan ("lebih"); Masukan (Item => B, Lebar => 1); elif A< B then Put(Item =>A, Lebar => 1); Masukan ("kurang"); Masukan (Item => B, Lebar => 1); else Put("Angka yang dimasukkan sama!"); berakhir jika; akhir utama;

    Tiga bilangan bulat diberikan. Temukan yang terbesar (program harus mencetak tepat satu bilangan bulat). Angka terbesar dalam masalah ini dipahami sebagai angka yang tidak kurang dari yang lain.


  • -> 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 ( "Masukkan tiga bilangan bulat pada satu baris dan tekan Enter."); Masukan ("->"); Mendapatkan); Dapatkan (B); Dapatkan (C); - Masukkan tiga bilangan bulat maks: = A; --bawaan kita asumsikan bahwa angka A adalah maksimum jika B> maks maka --Jika B lebih besar dari maksimum, maka maks: = B; --jumlah maksimum adalah B berakhir jika; jika C > maks maka --Jika C lebih besar dari maksimum, maka maks: = C; --jumlah maksimum adalah C berakhir jika; Taruh ( "Maksimum tiga angka:"& Integer "gambar (maks)); 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; maks: Bilangan bulat; mulai Put_Line ("Masukkan tiga bilangan bulat pada satu baris dan tekan Enter."); Masukan ("->"); Mendapatkan); Dapatkan (B); Dapatkan (C); - Masukkan tiga bilangan bulat maks: = A; - secara default, kami menganggap bahwa angka A adalah maksimum jika B> max maka - Jika B lebih besar dari maksimum, maka max: = B; - jumlah maksimum adalah B end jika; jika C> max maka --Jika C lebih besar dari maksimum, maka max: = C; - jumlah maksimum adalah C end jika; Put ("Maksimum tiga angka:" & Integer "gambar (maks)); akhir utama;

    Diberikan tiga bilangan asli A, B, C. Tentukan apakah ada segitiga dengan sisi-sisi tersebut. Jika segitiga itu ada, keluarkan pesan bahwa segitiga dengan sisi seperti itu ada, jika tidak, keluarkan bahwa segitiga itu tidak ada.

  • Masukkan tiga sisi segitiga dan tekan Enter.
    -> 3 4 5
    Sebuah segitiga dengan sisi 3, 4, 5 ada.
  • Segitiga adalah tiga titik yang tidak terletak pada satu garis lurus. Segitiga hanya ada ketika jumlah dari dua sisinya lebih besar dari yang ketiga.

  • dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; --Untuk membaca bilangan bulat dengan Ada.Text_IO; gunakan Ada.Text_IO; --Untuk mengeluarkan string prosedur utama adalah a, b, c: Integer; mulai Put_Line ( "Masukkan tiga sisi segitiga dan tekan Enter.Enter."); Masukan ("->"); Mendapatkan); Dapatkan (b); Dapatkan (c); --Menghitung sisi segitiga jika a + b> c dan kemudian b + c> a dan kemudian c + a> b maka --Memeriksa semua kondisi dalam satu baris Taruh ( "Segitiga dengan sisi"& Integer "gambar (a) &", "& Integer" gambar (b) & "," & Integer "gambar (c) &" ada "); else Put ( "Segitiga dengan sisi"& Integer "gambar (a) &", "& Integer" gambar (b) & "," & Integer "gambar (c) &" tidak ada "); end if; end main;

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; --Untuk membaca bilangan bulat dengan Ada.Text_IO; gunakan Ada.Text_IO; --Untuk jalur keluaran prosedur utama adalah a, b, c: Integer; begin Put_Line("Masukkan ketiga sisi segitiga dan tekan Enter.Enter."); Masukan ("->"); Mendapatkan); Dapatkan (b); Dapatkan (c); --Menghitung sisi-sisi segitiga jika a + b> c lalu b + c> a lalu c + a> b maka --Memeriksa semua kondisi dalam satu baris Put ("Segitiga dengan sisi" & Integer "gambar (a ) &" , "& Integer" image (b) & "," & Integer "image (c) &" ada "); else Put (" Segitiga dengan sisi "& Integer" gambar (a) & "," & Integer "gambar ( b) & "," & Integer "gambar (c) &" tidak ada "); berakhir jika; akhir utama;

    Tiga bilangan bulat diberikan. Tentukan berapa banyak dari mereka yang sama. Program harus menampilkan salah satu angka: 3 (jika semuanya cocok), 2 (jika dua cocok), 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 ( "Masukkan tiga bilangan bulat dan tekan Enter."); Masukan ("->"); Mendapatkan); Dapatkan (B); Dapatkan (C); jika A = B dan kemudian A = C maka --Jika ketiga nomor 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); lain --Jika nomor 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."); Masukan ("->"); Mendapatkan); Dapatkan (B); Dapatkan (C); jika A = B dan kemudian A = C maka --Jika ketiga angka cocok dengan Put (Item => 3, Lebar => 1); elsif A = B atau A = C atau B = C maka --Jika dua angka cocok dengan Put (Item => 2, Width => 1); else --Jika tidak ada angka yang sama Put (Item => 0, Width => 1); berakhir jika; akhir Utama;

    Benteng catur bergerak secara horizontal atau vertikal. Diberikan dua kotak papan catur yang berbeda, tentukan apakah benteng dapat berpindah dari kotak pertama ke kotak kedua dalam satu langkah. Program menerima sebagai masukan empat angka dari 1 sampai 8 masing-masing, menentukan nomor kolom dan nomor baris, pertama untuk sel pertama, kemudian untuk sel kedua. Program harus mencetak "YA" jika dari sel pertama dengan memindahkan benteng dimungkinkan untuk masuk ke sel kedua atau "TIDAK" sebaliknya.


  • 4 4
    5 5
    TIDAK
  • ); Taruh (); Mendapatkan); Dapatkan (B); Taruh (); Dapatkan (C); Dapatkan (D); jika A = C atau B = D maka Masukan ("YA"); else Masukan ("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 subtype checkBoard adalah Integer range 1.8; A, B, C, D: papan centang; begin Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put ("Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Put ("Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika A = C atau B = D maka Masukan ("YA"); else Masukan ("TIDAK"); berakhir jika; akhir Utama;

    Raja catur bergerak secara horizontal, vertikal dan diagonal, tetapi hanya 1 kotak. Diberikan dua kotak papan catur yang berbeda, tentukan apakah raja dapat berpindah dari kotak pertama ke kotak kedua dalam satu langkah. Program menerima sebagai masukan empat angka dari 1 hingga 8 masing-masing, menentukan nomor kolom dan nomor baris, pertama untuk sel pertama, kemudian untuk sel kedua. Program harus mencetak "YA" jika Anda dapat mencapai kotak kedua dari kotak pertama dengan langkah raja atau "TIDAK" sebaliknya.

  • Masukkan nomor kolom dan baris untuk dua sel:
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan: 4 4
    Masukkan nomor kolom dan baris untuk sel kedua dan tekan: 5 5
    YA
  • "Masukkan nomor kolom dan baris untuk dua sel:"); Taruh ( "Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Taruh ( "Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (A - C)<= 1 and then abs (B - D) <= 1 then - perintah abs () mengembalikan yang absolut --nilai (modulus) dari suatu bilangan Masukan ("YA"); else Masukan ("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 Integer range 1.8; A, B, C, D: papan centang; begin Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put ("Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Put ("Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); 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 papan catur yang berbeda, tentukan apakah uskup dapat berpindah dari kotak pertama ke kotak kedua dalam satu langkah. Program menerima sebagai masukan empat angka dari 1 sampai 8 masing-masing, menentukan nomor kolom dan nomor baris, pertama untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan "YA" jika dari sel pertama dengan gerakan uskup dimungkinkan untuk sampai ke sel kedua atau "Tidak" sebaliknya.

  • Masukkan nomor kolom dan baris untuk dua sel:
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan: 4 4
    Masukkan nomor kolom dan baris untuk sel kedua dan tekan: 5 5
    YA
  • dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur utama adalah subtipe checkBoard adalah Integer range 1 ..8; A, B, C, D: papan centang; mulai Put_Line ( "Masukkan nomor kolom dan baris untuk dua sel:"); Taruh ( "Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Taruh ( "Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (a - c) = abs (b - d) maka Put ("YA"); else Masukan ("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 Integer range 1.8; A, B, C, D: papan centang; begin Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put ("Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Put ("Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (a - c) = abs (b - d) maka Put ("YA"); else Masukan ("TIDAK"); berakhir jika; akhir utama;

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

    Format data masukan:
    Program menerima sebagai masukan empat angka dari 1 hingga 8 masing-masing, menentukan nomor kolom dan nomor baris, pertama untuk sel pertama, kemudian untuk sel kedua.
    Format data keluaran:
    Program harus menampilkan YA jika memungkinkan untuk sampai ke sel kedua dari sel pertama dengan langkah ratu, atau TIDAK sebaliknya.

    Contoh 1:
    Masukkan nomor kolom dan baris untuk dua sel:
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan: 1 1
    Masukkan nomor kolom dan baris untuk sel kedua dan tekan: 2 2
    YA

    Contoh 2:
    Masukkan nomor kolom dan baris untuk dua sel:
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan: 1 1
    Masukkan nomor kolom dan baris untuk sel kedua dan tekan: 2 3
    TIDAK

  • dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; procedure Main adalah subtype checkBoard adalah Integer range 1 ..8; A, B, C, D: papan centang; mulai Put_Line ( "Masukkan nomor kolom dan baris untuk dua sel:"); Taruh ( "Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Taruh ( "Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (A - C) = abs (B - D) atau A = D atau B = C maka Put ("YA"); else Masukan ("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 subtype checkBoard adalah Integer range 1.8; A, B, C, D: papan centang; begin Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put ("Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Put ("Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (A - C) = abs (B - D) atau A = D atau B = C maka Put ("YA"); else Masukan ("TIDAK"); berakhir jika; akhir Utama;

    Ksatria catur bergerak dengan huruf "G" - dua kotak secara vertikal ke segala arah dan satu kotak secara horizontal, atau sebaliknya. Diberikan dua kotak papan catur yang berbeda, tentukan apakah ksatria dapat berpindah dari kotak pertama ke kotak kedua dalam satu langkah. Program menerima sebagai masukan empat angka dari 1 hingga 8 masing-masing, menentukan nomor kolom dan nomor baris, pertama untuk sel pertama, kemudian untuk sel kedua. Program harus menampilkan YA jika memungkinkan untuk mencapai sel kedua dengan langkah ksatria dari sel pertama, atau TIDAK jika tidak.

    Contoh 1:
    Masukkan nomor kolom dan baris untuk dua sel:
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan: 1 1
    Masukkan nomor kolom dan baris untuk sel kedua dan tekan: 1 4
    TIDAK

    Contoh 2:
    Masukkan nomor kolom dan baris untuk dua sel:
    Masukkan nomor kolom dan baris untuk sel pertama dan tekan: 1 1
    Masukkan nomor kolom dan baris untuk sel kedua dan tekan: 8 8
    TIDAK

  • dengan Ada.Text_IO; gunakan Ada.Text_IO; dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; procedure main adalah subtype checkBoard adalah Integer range 1 ..8; A, B, C, D: Bilangan Bulat; mulai Put_Line ( "Masukkan nomor kolom dan baris untuk dua sel:"); Taruh ( "Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Taruh ( "Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (A - C) = 2 lalu abs (B - D) = 1 maka Put ("YA"); elsif abs (A - C) = 1 lalu abs (B - D) = 2 lalu Put ("YA"); else Masukan ("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 Integer range 1.8; A, B, C, D: Bilangan Bulat; begin Put_Line("Masukkan nomor kolom dan baris untuk kedua sel:"); Put ("Masukkan nomor kolom dan baris untuk sel pertama dan tekan:"); Mendapatkan); Dapatkan (B); Put ("Masukkan nomor kolom dan baris untuk sel kedua dan tekan:"); Dapatkan (C); Dapatkan (D); jika abs (A - C) = 2 lalu abs (B - D) = 1 maka Put ("YA"); elsif abs (A - C) = 1 lalu abs (B - D) = 2 lalu Put ("YA"); else Masukan ("TIDAK"); berakhir jika; akhir utama;

    Cokelat berbentuk persegi panjang yang dibagi menjadi irisan N × M. Cokelat dapat dipecah menjadi dua bagian sekaligus dalam garis lurus. Tentukan apakah tepat K irisan dapat dipatahkan dari cokelat 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
    YA

    Contoh 2:
    Jumlah irisan horizontal: 2
    Jumlah irisan vertikal: 10
    Berapa banyak lobulus 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 Pasang ( "Jumlah irisan horizontal:"); Dapatkan (N); Taruh ( "Jumlah irisan vertikal:"); Dapatkan (M); Taruh ( "Berapa banyak lobulus yang perlu dipisahkan:"); Dapatkan (K); jika K > M * N maka --Jika cokelat diminta untuk memecahkan lebih dari cokelat itu sendiri Masukan ("TIDAK"); elsif K rem N = 0 lalu K> = N maka - Putus secara horizontal Masukan ("YA"); elsif K rem M = 0 lalu K> = M maka --Putuskan secara vertikal Masukan ("YA"); else Masukan ("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; begin Put("Jumlah irisan horizontal:"); Dapatkan (N); Put("Jumlah irisan vertikal:"); Dapatkan (M); Put("Berapa banyak irisan yang harus dipisahkan:"); Dapatkan (K); jika K > M * N maka --Jika coklat diminta untuk dipecah lebih banyak dari pada coklat itu sendiri Put ("TIDAK"); elsif K rem N = 0 lalu K> = N lalu - Putus secara horizontal Put ("YA"); elsif K rem M = 0 lalu K> = M lalu - Putus secara vertikal Put ("YA"); else Masukan ("TIDAK"); berakhir jika; akhir Utama;

    Yasha sedang berenang di kolam berukuran N×M meter dan merasa lelah. Pada saat itu, ia menemukan bahwa ia berada pada jarak X meter dari salah satu sisi panjang (tidak harus dari yang terdekat) dan Y meter dari salah satu sisi pendek. Berapa jarak minimum yang harus Yasha berenang untuk keluar dari kolam ke samping? Program menerima masukan angka N, M, X, Y. Program akan 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 setidaknya 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; --Menginisialisasi variabel b --Langsung 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 Pasang ( "Lebar kolam:"); Dapatkan (N); Taruh ( "Panjang kolam:"); Dapatkan (M); Taruh ( "Jarak dari Yasha ke sisi panjang:"); Dapatkan (X); Taruh ( "Jarak dari Yasha ke sisi pendek:"); Dapatkan (Y); jika N > M maka --Jika sisi-sisinya bingung saat masuk, maka kami mengubah tempatnya: Tmp: = M; --Simpan panjang M ke variabel sementara M: = N; - Tetapkan nilai baru ke variabel M N: = Tmp; --Memulihkan panjang M dalam variabel N berakhir jika; Tmp: = X; --Misalkan jarak minimum adalah X jika abs (N - X)< X then --Jika jarak ke rusuk panjang kedua kurang dari X, maka Tmp: = N - X; - jarak minimum sama dengan jarak ke sisi panjang kedua berakhir jika; jika kamu< Tmp then --Jika jarak ke sisi terpendek kurang dari yang ditemukan di atas --minimal, maka Tmp: = Y; --Jarak minimum adalah Y berakhir jika; jika abs (M - Y)< Tmp then --Jika Anda berenang lebih dekat ke sisi pendek kedua, maka Tmp: = perut (M - Y); - jarak minimum sama dengan jarak ke sisi terpendek kedua berakhir jika; Taruh ( "Kamu harus berenang setidaknya untuk keluar dari kolam:"); Masukan (Item => Tmp, Lebar => 1); 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, X, Y: Integer; - N - sisi pendek, M - sisi panjang: - X - Jarak ke salah satu sisi panjang - Y - Jarak ke salah satu sisi pendek Tmp: Integer; mulai Put("Lebar kolam:"); Dapatkan (N); Put("Panjang kolam:"); Dapatkan (M); Put ("Jarak dari Yasha ke sisi panjang:"); Dapatkan (X); Put ("Jarak dari Yasha ke sisi pendek:"); Dapatkan (Y); jika N> M maka --Jika sisi-sisinya bingung saat masuk, maka kita tukarkan: Tmp: = M; --Simpan panjang M ke dalam variabel sementara M: = N; - Tetapkan ke variabel M nilai baru N: = Tmp; --Memulihkan panjang M di akhir variabel N jika; Tmp: = X; --Misalkan jarak minimum adalah X jika abs (N - X)< 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, Lebar => 1); akhir Utama;

    Jam elektronik menunjukkan waktu dalam format h: mm: ss (dari 0:00:00 hingga 23:59:59), yaitu, pertama jumlah jam dicatat, kemudian dua digit jumlah menit adalah wajib , maka jumlah detik dua digit adalah wajib. Jumlah menit dan detik diisi dengan nol ke angka dua digit, jika perlu. N detik telah berlalu sejak awal hari. Cetak apa yang akan ditampilkan jam. Input diberikan bilangan asli N tidak melebihi 10 7 (10000000). Cetak jawaban dari masalah.

    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: Long_Integer; mulai Dapatkan (N); j: = N / 3600; - Kami mendapatkan arloji. Sisa pembagian dibuang N: = N - j * 3600; - Dapatkan detik yang tersisa (dikurangi jam) jika h > 24 maka - Karena jam tidak dapat menunjukkan> 24, kami membawa semuanya ke dalam bentuk yang dapat dibaca h: = h rem 24; - Sisa pembagian dengan 24 akan memberikan jumlah jam yang tepat elsif h = 24 maka h: = 0; berakhir jika; m: = N / 60; --Mendapatkan menit s: = N rem 60; --Mendapatkan detik Masukan (Item => h, Lebar => 1); Taruh (":"); --Jam keluaran dan ":" jika saya< 10 then --Jika jumlah menit kurang dari 10, tampilkan 0 di depan Masukan (Item => 0, Lebar => 1); berakhir jika; Masukan (Item => m, Lebar => 1); Taruh (":"); --Tampilan menit dan ":" jika s< 10 then --Jika jumlah detik kurang dari 10, tampilkan 0 di depan Masukan (Item => 0, Lebar => 1); berakhir jika; Masukan (Item => s, Lebar => 1); --Tampilan detik akhir Utama;

    dengan Ada.Long_Integer_Text_IO; gunakan Ada.Long_Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; procedure Main adalah subtype Sub_LI adalah Long_Integer range 1..10000000; N: Sub_LI; h, m, s: Long_Integer; mulai Dapatkan (N); j: = N / 3600; - Kami mendapatkan arloji. Sisa pembagian dibuang N: = N - h * 3600; - Kami mendapatkan detik yang tersisa (dikurangi jam) jika h> 24 maka - Karena jam tidak dapat menunjukkan> 24, kami membawa semuanya ke dalam bentuk yang dapat dibaca h: = h rem 24; - Sisa pembagian dengan 24 akan memberikan jumlah jam yang tepat jika h = 24 maka h: = 0; berakhir jika; m: = N / 60; - Kami mendapatkan menit s: = N rem 60; --Dapatkan detik Put (Item => h, Lebar => 1); Taruh (":"); --Output jam dan ":" jika m< 10 then --Если количество минут меньше 10, выводим ведущий 0 Put(Item =>0, Lebar => 1); berakhir jika; Masukan (Item => m, Lebar => 1); Taruh (":"); --Menampilkan menit dan ":" jika s< 10 then --Если количество секунд меньше 10, выводим ведущий 0 Put(Item =>0, Lebar => 1); berakhir jika; Masukan (Item => s, Lebar => 1); --Tampilan detik akhir Utama;

  • Tiga nomor diberikan. Atur mereka dalam urutan menaik.
  • Contoh masukan:
    1 2 1
    Contoh keluaran:
    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, tengah, maks: Integer; mulai Dapatkan (A); Dapatkan (B); Dapatkan (C); --Mencari nilai minimum min: = 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 rata-rata tengah: = A; jika B> min dan B< max then mid:= B; end if ; if C >menit dan C< max then mid:= C; end if ; Put(Item =>min, Lebar => 1); Taruh (""); Masukan (Item => tengah, lebar => 1); Taruh (""); Masukan (Item => maks, Lebar => 1); akhir Utama;

    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, tengah, maks: Integer; mulai Dapatkan (A); Dapatkan (B); Dapatkan (C); - Kami mencari nilai minimum min: = A; jika B< min then min:= B; end if; if C < min then min:= C; end if; --Ищем максимальное значение max:= A; if B >maks lalu maks: = B; berakhir jika; jika C> max maka max: = C; berakhir jika; --Pelajari nilai rata-rata pertengahan: = A; jika B> min dan B< max then mid:= B; end if; if C >menit dan C< max then mid:= C; end if; Put(Item =>min, Lebar => 1); Taruh (""); Masukan (Item => tengah, lebar => 1); Taruh (""); Masukan (Item => maks, Lebar => 1); akhir Utama;

    Ada dua kotak, yang pertama adalah A1 × B1 × C1, yang kedua adalah A2 × B2 × C2. Tentukan apakah salah satu dari kotak-kotak ini dapat ditempatkan di dalam kotak yang lain, asalkan kotak-kotak itu hanya dapat diputar 90 derajat di sekitar tepinya. Program menerima angka A1, B1, C1, A2, B2, C2 sebagai input. Program harus menampilkan salah satu baris berikut:
    - "Kotaknya sama", jika kotaknya sama,
    - "Kotak pertama lebih kecil dari yang kedua", jika kotak pertama dapat dimasukkan ke dalam yang kedua,
    - "Kotak pertama lebih dari yang kedua"Jika kotak kedua bisa dimasukkan ke dalam kotak pertama.

    Contoh 1:
    Dimensi kotak pertama: 1 2 3
    Dimensi kotak kedua: 3 2 1
    Kotak-kotak itu sama

    Contoh 2:
    Dimensi kotak pertama: 2 2 3
    Dimensi kotak kedua: 3 2 1
    Kotak pertama lebih besar dari yang 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, tengah, tmp: Integer; mulai Dapatkan (A1); Dapatkan (B1); Dapatkan (C1); Dapatkan (A2); Dapatkan (B2); Dapatkan (C2); --Kami membawa wajah sejajar dengan panjang A1 => A2, B1 => B2, C1 => C2: - A1 dan A2 terpanjang, C1 dan C2 terpendek - "Putar" kotak pertama: min: = A1; tengah: = 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: = tengah; tengah: = maks; maks: = tmp; berakhir jika; A1: = menit; B1: = tengah; C1: = maks; - "Putar" kotak kedua: min: = A2; tengah: = B2; maks: = C2; jika B2< min then mid:= min; min:= B2; end if ; if C2 < min then max:= min; min:= C2; end if ; if mid >maks lalu tmp: = tengah; tengah: = maks; maks: = tmp; berakhir jika; A2: = menit; B2: = tengah; C2: = maks; --Memeriksa korespondensi kotak dan menampilkan hasilnya: jika A1 = A2 dan kemudian B1 = B2 dan kemudian C1 = C2 maka Put_Line ("Kotak-kotaknya sama"); elsif A1> = A2 lalu B1> = B2 lalu C1> = C2 lalu Put_Line ( "Kotak pertama lebih besar dari yang kedua"); elif A1<= A2 and then B1 <= B2 and then C1 <= C2 then Put_Line("Kotak pertama lebih kecil dari yang 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, tengah, tmp: Integer; mulai Dapatkan (A1); Dapatkan (B1); Dapatkan (C1); Dapatkan (A2); Dapatkan (B2); Dapatkan (C2); --Bawa wajah sejajar dengan panjang A1 => A2, B1 => B2, C1 => C2: --A1 dan A2 - terpanjang, C1 dan C2 - terpendek - "Putar" kotak pertama: min: = A1 ; tengah: = 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: = tengah; tengah: = maks; maks: = tmp; berakhir jika; A1: = menit; B1: = tengah; C1: = maks; - "Putar" kotak kedua: min: = A2; tengah: = B2; maks: = C2; jika B2< min then mid:= min; min:= B2; end if; if C2 < min then max:= min; min:= C2; end if; if mid >maks lalu tmp: = tengah; tengah: = maks; maks: = tmp; berakhir jika; A2: = menit; B2: = tengah; C2: = maks; --Memeriksa korespondensi kotak dan menampilkan hasilnya: jika A1 = A2 dan kemudian B1 = B2 dan kemudian C1 = C2 maka Put_Line ("Kotak sama"); elsif A1> = A2 lalu B1> = B2 lalu C1> = C2 lalu Put_Line ("Kotak pertama lebih besar dari kotak kedua"); elif A1<= A2 and then B1 <= B2 and then C1 <= C2 then Put_Line("Первая коробка меньше второй"); end if; end main;

    Tulis program yang menghitung biaya percakapan telepon jarak jauh (harga satu menit ditentukan oleh jarak ke kota tempat pelanggan berada). Data awal program adalah kode area dan durasi panggilan. Di bawah ini adalah kode beberapa kota dan tata letak layar yang disarankan saat program berjalan:

  • Perhitungan biaya panggilan telepon.
    Masukkan data awal:
    Kode Area -> 423
    Durasi (seluruh jumlah menit) -> 3
    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: Bilangan Bulat; mulai Put_Line ("Menghitung biaya panggilan telepon.") ; Put_Line ("Masukkan data awal:") ; Taruh ("Kode area ->") ; Mendapatkan ( Kode ) ; Taruh ("Durasi (seluruh jumlah menit) ->") ; Mendapatkan ( len ) ; kasus Kode adalah Kapan 423 => Put_Line ("Kota Vladivostok") ; Put_Line ("Harga per menit: 4 rubel.") ; Taruh ("Biaya panggilan:") ; Taruh ( Barang => len * 4 , Lebar => 1 ) ; Put_Line ("gosok.") ; Kapan 095 => Put_Line ("kota Moskow") ; Put_Line ("Harga per menit: 2 rubel.") ; Taruh ("Biaya panggilan:") ; Taruh ( Barang => len * 2 , Lebar => 1 ) ; Put_Line ("gosok.") ; Kapan 815 => Put_Line ("Kota: Murmansk") ; Put_Line ("Harga per menit: 3 rubel.") ; Taruh ("Biaya panggilan:") ; Taruh ( Barang => len * 3 , Lebar => 1 ) ; Put_Line ("gosok.") ; Kapan 846 => Put_Line ("Kota Samara") ; Put_Line ("Harga per menit: 1 gosok.") ; Taruh ("Biaya panggilan:") ; Taruh ( Item => len, Lebar => 1 ) ; Put_Line ("gosok.") ; Kapan yang lain=> Letakkan ("Tidak ada kota dengan kode seperti itu di database! Coba lagi.") ; akhir kasus; akhir Utama;

    dengan Ada.Integer_Text_IO; gunakan Ada.Integer_Text_IO; dengan Ada.Text_IO; gunakan Ada.Text_IO; prosedur Utama adalah Kode, Len: Integer; begin Put_Line("Menghitung biaya panggilan."); Put_Line("Masukkan data awal :"); Put("Kode kota ->"); Ambil kode); Put ("Durasi (seluruh jumlah menit) ->"); Dapatkan (len); Kode kasus adalah ketika 423 => Put_Line ("Kota: Vladivostok"); Put_Line("Harga per menit: 4 rubel"); Put("Biaya panggilan:"); Masukan (Item => len * 4, Lebar => 1); Put_Line("gosok."); ketika 095 => Put_Line ("Kota: Moskow"); Put_Line("Harga per menit: 2 rubel"); Put("Biaya panggilan:"); Masukan (Item => len * 2, Lebar => 1); Put_Line("gosok."); ketika 815 => Put_Line ("Kota: Murmansk"); Put_Line("Harga per menit: 3 rubel."); Put ("Biaya panggilan:"); Masukan (Item => len * 3, Lebar => 1); Put_Line("gosok."); ketika 846 => Put_Line("Kota: Samara"); Put_Line("Harga per menit: 1 gosok."); Put("Biaya panggilan:"); Masukan (Item => len, Lebar => 1); Put_Line("gosok."); when others => Put ("Tidak ada kota dengan kode seperti itu di database! Coba lagi."); kasus akhir; akhir Utama;

Bagian ini menjelaskan secara singkat operator jika dan kasus, fungsi perut () dan algoritma untuk menukar variabel.

Jenis pekerjaan: 8
Tema: Prisma

Kondisi

Dalam prisma segitiga beraturan ABCA_1B_1C_1, sisi alasnya sama dengan 4, dan rusuk samping sama dengan 10. Cari luas prisma dengan bidang yang melalui titik tengah rusuk AB, AC, A_1B_1 dan A_1C_1.

Tunjukkan solusi

Larutan

Perhatikan gambar berikut.

Segmen MN adalah garis tengah segitiga A_1B_1C_1, oleh karena itu MN = \frac12 B_1C_1 = 2. Demikian pula, KL = \frac12BC = 2. Selain itu, MK = NL = 10. Ini menyiratkan bahwa MNLK segi empat adalah jajar genjang. Karena MK\parallel AA_1, maka MK\perp ABC dan MK\perp KL. Oleh karena itu, MNLK segi empat adalah persegi panjang. S_ (MNLK) = MK \ cdot KL = 10 \ cdot 2 = 20.

Menjawab

Jenis pekerjaan: 8
Tema: Prisma

Kondisi

Volume prisma segi empat beraturan ABCDA_1B_1C_1D_1 adalah 24. Titik K adalah titik tengah tepi CC_1. Temukan volume piramida KBCD.

Tunjukkan solusi

Larutan

Berdasarkan syarat, KC adalah tinggi dari piramida KBCD. CC_1 adalah tinggi prisma ABCDA_1B_1C_1D_1.

Karena K adalah tengah CC_1, maka KC = \frac12CC_1. Misal CC_1 = H, maka KC = \frac12H... Perhatikan juga bahwa S_ (BCD) = \ frac12S_ (ABCD). Kemudian, 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). Karenanya, V_ (KBCD) = \ frac (1) (12) \ cdot24 = 2.

Menjawab

Sumber: “Matematika. Persiapan ujian-2017. Tingkat profil". Ed. FF Lysenko, S. Yu. Kulabukhova.

Jenis pekerjaan: 8
Tema: Prisma

Kondisi

Hitunglah luas permukaan sisi prisma segi enam beraturan dengan sisi alas 6 dan tinggi 8.

Tunjukkan solusi

Larutan

Luas permukaan lateral prisma ditemukan dengan rumus sisi S. = P utama. · h = 6a \ cdot h, dimana P utama. dan h adalah keliling alas dan tinggi prisma, berturut-turut sama dengan 8, dan a adalah sisi segi enam beraturan sama dengan 6. Oleh karena itu, S adalah sisi. = 6 \ cdot 6 \ cdot 8 = 288.

Menjawab

Sumber: “Matematika. Persiapan ujian-2017. Tingkat profil ". Ed. FF Lysenko, S. Yu. Kulabukhova.

Jenis pekerjaan: 8
Tema: Prisma

Kondisi

Ke dalam wadah dengan bentuk yang benar prisma segitiga, menuangkan air. Ketinggian air mencapai 40 cm. Pada ketinggian berapakah ketinggian air jika dituangkan ke dalam bejana lain yang bentuknya sama, yang sisi alasnya dua kali lebih besar dari yang pertama? Nyatakan jawaban Anda dalam sentimeter.

Tunjukkan solusi

Larutan

Misalkan a adalah sisi alas bejana pertama, maka 2 a adalah sisi alas bejana kedua. Dengan syarat, volume cairan V dalam bejana pertama dan kedua adalah sama. Mari kita tunjukkan dengan H tingkat di mana cairan di bejana kedua telah naik. Kemudian V = \ frac12 \ cdot a ^ 2 \ cdot \ sin60 ^ (\ circ) \ cdot40 = \ frac (a ^ 2 \ sqrt3) (4) \ cdot40, dan, V = \ frac ((2a) ^ 2 \ sqrt3) (4) \ cdot H. Dari sini \ frac (a ^ 2 \ sqrt3) (4) \ cdot40 = \ frac ((2a) ^ 2 \ sqrt3) (4) \ cdot H, 40 = 4H, H = 10.

Menjawab

Sumber: “Matematika. Persiapan ujian-2017. Tingkat profil ". Ed. FF Lysenko, S. Yu. Kulabukhova.

Jenis pekerjaan: 8
Tema: Prisma

Kondisi

Dalam prisma heksagonal biasa ABCDEFA_1B_1C_1D_1E_1F_1, semua tepinya adalah 2. Tentukan jarak antara titik A dan E_1.

Tunjukkan solusi

Larutan

Segitiga AEE_1 adalah persegi panjang, karena tepi EE_1 tegak lurus dengan bidang alas prisma, sudut AEE_1 akan menjadi sudut siku-siku.

Kemudian, dengan teorema Pythagoras, AE_1 ^ 2 = AE ^ 2 + EE_1 ^ 2. Temukan AE dari segitiga AFE dengan teorema kosinus. Setiap sudut dalam segi enam biasa adalah 120 ^ (\ circ). Kemudian AE^2 = AF ^ 2 + FE ^ 2-2 \ cdot AF \ cdot FE \ cdot \ cos120 ^ (\ circ) = 2 ^ 2 + 2 ^ 2-2 \ cdot2 \ cdot2 \ cdot \ kiri (- \ frac12 \ kanan).

Jadi, AE^2 = 4 + 4 + 4 = 12,

AE_1 ^ 2 = 12 + 4 = 16,

AE_1 = 4.

Menjawab

Sumber: “Matematika. Persiapan ujian-2017. Tingkat profil ". Ed. FF Lysenko, S. Yu. Kulabukhova.

Jenis pekerjaan: 8
Tema: Prisma

Kondisi

Temukan luas permukaan lateral prisma lurus, yang alasnya terletak belah ketupat dengan diagonal sama dengan 4 \ sqrt5 dan 8, dan sisi samping sama dengan 5.

Tunjukkan solusi

Larutan

Luas permukaan lateral prisma lurus ditemukan dengan rumus sisi S. = P utama. · h = 4a \ cdot h, dimana P utama. dan h adalah keliling alas dan tinggi prisma, berturut-turut sama dengan 5, dan a adalah sisi belah ketupat. Temukan sisi belah ketupat menggunakan fakta bahwa diagonal belah ketupat ABCD saling tegak lurus dan titik potongnya dibagi dua.

Saya menawarkan kepada pembaca "Habrahabr" terjemahan dari publikasi "100 Prisoners Escape Puzzle", yang saya temukan di situs web perusahaan DataGenetics. Silakan kirim semua kesalahan yang terkait dengan artikel ini dalam pesan pribadi.

Menurut kondisi tugas, ada 100 tahanan di penjara, yang masing-masing memiliki nomor pribadi dari 1 sampai 100. Sipir memutuskan untuk memberi para tahanan kesempatan untuk dibebaskan dan menawarkan untuk lulus ujian yang dia ciptakan. Jika semua tahanan berhasil melewatinya, maka mereka bebas, jika satu saja gagal, semua orang akan mati.

Tugas

Sipir pergi ke ruang rahasia dan menyiapkan 100 kotak dengan tutup. Pada setiap kotak, dia meletakkan nomor dari 1 sampai 100. Kemudian dia membawa 100 piring kertas, sesuai dengan jumlah tahanan, dan memberi nomor piring-piring ini dari 1 sampai 100. Setelah itu, dia mengocok 100 piring dan menempatkan satu piring di setiap kotak. , tutup tutupnya... Para tahanan tidak melihat bagaimana sipir melakukan semua tindakan ini.

Kompetisi dimulai, sipir membawa setiap tahanan satu per satu ke sebuah ruangan dengan kotak-kotak dan memberi tahu para tahanan bahwa mereka harus menemukan sebuah kotak yang akan berisi piring dengan nomor tahanan. Narapidana mencoba menemukan plat nomor mereka dengan membuka kotak. Masing-masing diizinkan untuk membuka hingga 50 kotak; jika masing-masing tahanan menemukan nomornya, maka tahanan akan dibebaskan; jika setidaknya salah satu dari mereka tidak menemukan nomornya dalam 50 upaya, maka semua tahanan akan mati.

Agar tahanan dibebaskan, SEMUA tahanan harus lulus ujian dengan sukses.

Jadi berapa peluang para tahanan itu akan diampuni?

  • Setelah kotak dibuka untuk narapidana dan memeriksa labelnya, kotak itu dimasukkan kembali ke dalam kotak dan tutupnya ditutup kembali;
  • Piring tidak dapat diganti di beberapa tempat;
  • Narapidana tidak boleh meninggalkan petunjuk satu sama lain atau berinteraksi satu sama lain dengan cara apa pun setelah tes dimulai;
  • Para narapidana diperbolehkan untuk mendiskusikan strategi sebelum dimulainya persidangan.

Apa strategi optimal untuk narapidana?

Pertanyaan tambahan:
Jika sesama narapidana (bukan peserta sidang) dapat memasuki ruang rahasia sebelum sidang dimulai, periksa semua pelat di semua kotak dan (opsional, tetapi tidak harus) menukar dua pelat dari dua kotak ( dalam hal ini, kamerad tidak akan dapat memberi tahu tahanan tentang hasil tindakannya), strategi apa yang harus dia ambil untuk meningkatkan peluang tahanan untuk melarikan diri?

Apakah solusinya tidak mungkin?

Sepintas, tugas ini tampaknya hampir tanpa harapan. Tampaknya peluang masing-masing tahanan untuk menemukan tablet mereka secara mikroskopis kecil. Selain itu, narapidana tidak dapat saling bertukar informasi selama persidangan.

Peluang satu tahanan adalah 50:50. Hanya ada 100 kotak dan dia bisa membuka hingga 50 kotak untuk mencari papan namanya. Jika dia membuka kotak secara acak dan membuka setengah dari semua kotak, dia akan menemukan piringnya di setengah kotak yang terbuka, atau piringnya akan tetap berada di 50 kotak yang tertutup. Peluang suksesnya adalah .

Mari kita ambil dua tahanan. Jika keduanya memilih kotak secara acak, peluangnya adalah untuk masing-masing kotak, dan x½ = untuk dua kotak.
(untuk dua tahanan, keberhasilan akan terjadi dalam satu dari empat kasus).

Untuk tiga tahanan, peluangnya adalah × × = .

Untuk 100 tahanan, peluangnya adalah × ×… × (dikalikan 100 kali).

Ini sama dengan

Pr 0,000000000000000000000000000000008

Artinya, ini adalah peluang yang sangat kecil. Dalam situasi ini, kemungkinan besar, semua tahanan akan mati.

Jawaban yang luar biasa

Jika setiap tahanan membuka kotak secara acak, mereka tidak mungkin lulus ujian. Ada strategi di mana narapidana dapat berharap untuk berhasil lebih dari 30% dari waktu. Ini adalah hasil yang luar biasa luar biasa (jika Anda belum pernah mendengar soal matematika ini sebelumnya).

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

Jelas bahwa satu untuk setiap tahanan, kemungkinannya tidak boleh lebih tinggi dari 50% (bagaimanapun, tidak ada cara untuk komunikasi antar tahanan). Tapi jangan lupa bahwa informasi disimpan di lokasi piring di dalam kotak. Tidak ada yang mengocok tablet di antara kunjungan ke ruangan oleh masing-masing tahanan, jadi kami dapat menggunakan informasi ini.

Larutan

Pertama, saya akan menjelaskan solusinya, lalu saya akan menjelaskan mengapa itu berhasil.

Strateginya sangat mudah. Tahanan pertama membuka kotak dengan nomor yang tertulis di pakaiannya. Misalnya, tahanan nomor 78 membuka kotak nomor 78. Jika dia menemukan nomornya di piring di dalam kotak, itu bagus! Jika tidak, maka dia melihat nomor di piring di kotak “miliknya” dan kemudian membuka kotak berikutnya dengan nomor ini. Membuka kotak kedua, dia melihat nomor pelat di dalam kotak ini dan membuka kotak ketiga dengan nomor ini. Selanjutnya, kami hanya mentransfer strategi ini ke kotak yang tersisa. Untuk jelasnya lihat gambar :

Pada akhirnya, tahanan akan menemukan nomornya atau pergi ke batas 50 kotak. Sepintas, ini terlihat tidak ada gunanya dibandingkan dengan hanya memilih kotak secara acak (dan untuk satu narapidana memang demikian), tetapi karena semua 100 narapidana akan menggunakan kotak yang sama, itu masuk akal.

Indahnya soal matematika ini bukan hanya mengetahui hasilnya, tetapi juga memahaminya mengapa strategi ini berhasil.

Jadi mengapa strategi itu berhasil?

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

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

Jika kotak tidak menunjuk ke dirinya sendiri (nomor kotak sama dengan nomor pelat di dalamnya), maka kotak itu akan berada di rantai. Beberapa rantai mungkin memiliki dua kotak, beberapa lebih panjang.

Karena semua tahanan mulai dengan sebuah kotak dengan nomor yang sama seperti pada pakaian mereka, mereka, menurut definisi, berakhir di rantai yang berisi piring mereka (hanya ada satu piring yang menunjuk ke kotak ini).

Dengan memeriksa kotak-kotak di sepanjang rantai ini dalam lingkaran, mereka dijamin akhirnya menemukan piringnya.

Satu-satunya pertanyaan tetap apakah mereka akan menemukan tablet mereka dalam 50 langkah.

Panjang rantai

Agar semua tahanan lulus tes, panjang rantai maksimum harus kurang dari 50 kotak. Jika rantai lebih panjang dari 50 kotak, tahanan yang diberi nomor dari rantai tersebut akan gagal dalam ujian - dan semua tahanan akan mati.

Jika panjang maksimum rantai terpanjang kurang dari 50 kotak, maka semua tahanan akan lulus ujian!

Pikirkan tentang ini sebentar. Ternyata hanya ada satu rantai yang lebih panjang dari 50 kotak untuk setiap tata letak pelat (kami hanya memiliki 100 kotak, jadi jika satu rantai lebih panjang dari 50, maka sisanya akan lebih pendek dari 50 pada akhirnya) .

Peluang kesepakatan rantai panjang

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

Sedikit lagi matematika

Jadi apa yang kita butuhkan untuk mengetahui kemungkinan rantai panjang?

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

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

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

Dengan mengingat hal ini, jumlah permutasi yang mengandung rantai panjang yang tepat l: (> 50)

Ternyata ada 100 (!) Cara meletakkan pelat, jadi peluang adanya rantai dengan panjang l adalah 1 / l. Omong-omong, hasil ini tidak tergantung pada jumlah kotak.

Seperti yang sudah kita ketahui, hanya ada satu opsi, di mana ada rantai dengan panjang> 50, sehingga probabilitas keberhasilan dihitung menggunakan rumus ini:

Hasil

31,18% - probabilitas bahwa ukuran rantai terpanjang akan kurang dari 50 dan masing-masing tahanan akan dapat menemukan tabletnya sendiri, dengan batas 50 upaya.

Probabilitas semua narapidana akan menemukan tablet mereka dan lulus tes adalah 31,18%

Di bawah ini adalah grafik yang menunjukkan probabilitas (pada ordinat) untuk semua rantai dengan panjang l (pada absis). Merah berarti semua "kegagalan" (kurva ini di sini hanya plot 1 / l). Warna hijau berarti "berhasil" (perhitungannya sedikit lebih sulit untuk bagian grafik ini, karena ada beberapa cara untuk menentukan panjang maksimum <50). Общая вероятность складывается из зеленых столбцов в 31.18% шанс на спасение.

Nomor harmonik (bagian artikel ini untuk geeks)

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

Mari kita hitung batasnya jika alih-alih 100a kotak kita memiliki sewenang-wenang sejumlah besar kotak (mari kita asumsikan bahwa kita memiliki total 2n kotak).

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

Dengan bertambahnya jumlah narapidana, asalkan pengawas mengizinkan narapidana untuk membuka setengah dari semua kotak, maka peluang keselamatan cenderung pada jumlah 30,685%

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

Pertanyaan tambahan

Apakah ada orang lain yang ingat pertanyaan lanjutannya? Apa yang dapat dilakukan rekan kita yang membantu untuk meningkatkan peluang 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 dia tidak perlu mengubah tanda sama sekali, atau mengubahnya sehingga rantai terpanjang tidak menjadi lebih dari 50. Namun, jika dia menemukan rantai yang lebih panjang dari 50 kotak, yang harus dia lakukan hanyalah menukar isi dua kotak dari rantai itu untuk memutuskan rantai itu menjadi dua rantai yang lebih pendek.

Sebagai hasil dari strategi ini, tidak akan ada rantai panjang dan semua tahanan dijamin menemukan tanda dan keselamatan mereka. Jadi, dengan menukar dua tanda, kita mengurangi peluang keselamatan hingga 100%!

Pertanyaan: Tentukan apakah satu kotak akan muat di dalam kotak lainnya


Kondisi: Dimensi dua kotak diberikan. Tentukan apakah satu kotak muat di dalam kotak lain?!

Menjawab:

pesan dari Sukacita

maksimum 13 perantara

Tidak, bukan 13 ... Tepatnya, yaitu, kira-kira 12,7279 ... Menempatkan persegi panjang pada persegi panjang adalah tugas yang sederhana ... Tapi menempelkan parallelepiped yang lebih kecil kira-kira sepanjang diagonal terbesar dari parallelepiped yang lebih besar . .. Ya ... Di sana, pencarian sudut rotasi yang diperlukan dari sebuah kotak kecil keluar ...

Pertanyaan: Dapatkah salah satu kotak ditempatkan di dalam kotak yang lain?


Mengapa tidak bekerja dengan benar, membantu !!!
ini syaratnya: Ada dua kotak, yang pertama adalah A1 × B1 × C1, yang kedua adalah A2 × B2 × C2. Tentukan apakah salah satu dari kotak-kotak ini dapat ditempatkan di dalam kotak yang lain, asalkan kotak-kotak itu hanya dapat diputar 90 derajat di sekitar tepinya.
Format data masukan
Program menerima angka A1, B1, C1, A2, B2, C2 sebagai input.
Format data keluaran
Program harus menampilkan salah satu baris berikut:
Kotak sama jika kotaknya sama,
Kotak pertama lebih kecil dari kotak kedua, jika kotak pertama dapat dimasukkan ke dalam kotak kedua,
Kotak pertama lebih besar dari kotak kedua, jika kotak kedua dapat dimasukkan ke dalam kotak pertama,
Kotak tidak ada bandingannya dalam semua kasus lainnya.
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" menggunakan namespace std; 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;) lain (jika ((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 (jika ((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 (jika ((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 (jika ((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<< "Kotak pertama lebih besar dari yang kedua"; ) lain (jika ((m< z) && (n < x) && (k < c) ) { cout << "Kotak pertama lebih kecil dari yang kedua"; ) lain (cout<< "Boxes are incomparable" ; } } } system ("pause" ) ; return 0 ; }

Menjawab: Dimensi, Algoritma untuk menyelesaikan, pertama kita mengurutkan panjang sisi kotak, kemudian membandingkannya, tetapi! Saya perlu melakukan semua ini melalui pernyataan if, saya akan sangat berterima kasih jika setidaknya menulis algoritme, saya sendiri entah bagaimana melakukan kode =)

Pertanyaan: Buka satu formulir di dalam formulir lainnya


Selamat siang, semuanya. Saya melihat satu program dan saya tidak tahu cara membuka Form2 di Form1 pada setengah dari formulir di dalamnya, dll. Ketika Anda mengklik tombol di MenuStrip1 seperti pada tangkapan layar.

Tangkapan layar:

Ada kode:

vb.net
1 2 3 4 Private Sub Command1_Click () Form2. Terlihat = True Form1. Terlihat = Salah End Sub

Tapi dia membuka formulir program terpisah, dan saya perlu Form2, Form3 dan seterusnya di Form1 itu sendiri (bukan di seluruh formulir) untuk dibuka.

Menjawab: Terima kasih banyak, itu berhasil.

Sekarang saya akan menulis pengisian program.

Ditambahkan setelah 22 jam 49 menit
Saya menghadapi masalah seperti itu kemarin (sepanjang malam saya mencoba menyelesaikannya sendiri, tetapi tidak berhasil), kodenya berfungsi, semuanya baik-baik saja. Tapi apa masalahnya, bukan pesulap untuk beralih antara Form2 Form3 dan seterusnya (dalam urutan terbalik) apa yang dapat ditambahkan ke kode ini?

vb.net
1 2 3 4 5 6 7 8 9 10 Sub Form1_Load Pribadi (Pengirim ByVal Sebagai Objek Sistem, ByVal e Sebagai Sistem. EventArgs) Menangani MyBase. Muat Aku. IsMdiContainer = True End Sub Private Sub ArmorToolStripMenuItem_Click (pengirim Sebagai Objek, e Sebagai EventArgs) Menangani ArmorToolStripMenuItem. Klik Formulir2. MdiParent = Saya Form2. Tunjukkan () Formulir2. Lokasi = Titik Baru ((0) - (0), 0) Form2. ControlBox = False End Sub

Artinya, saya perlu beralih antara Armor, Power armor, dll. (layar proyek di atas)

Terima kasih sebelumnya.

Ditambahkan setelah 32 menit
Semua menemukan solusi

Anda hanya perlu menambahkan baris.

vb.net
1 Formulir3. Terlihat = Salah

Pertanyaan: Melewati posisi yang dipilih dalam datagrid dari satu bentuk ke bentuk lainnya


Selamat siang.
Saya tertarik pada kemungkinan mentransfer posisi yang dipilih saat ini ke datagrid (+ BindingSource digunakan, pada kenyataannya, semua data terletak di tabel dalam database MSSQL) yang terletak di satu formulir di datagrid lain dari bentuk lain.

Apa gunanya, ada datagrid di form utama, misalkan dengan daftar nama lengkap. Kami memilih, misalnya, nama keluarga kedua. Kemudian, pada formulir pembukaan tambahan, di datagrid lain, semua hal yang dimiliki oleh nama lengkap ini harus dibuka. Oleh karena itu, jika kita memilih nama keluarga ketiga dalam daftar, maka dalam formulir tambahan dengan datagrid kita, sudah ada data untuk nama ini.
Di dalam satu formulir, dimungkinkan untuk mengimplementasikan ini dengan tautan (dataSet.Relations.Add), tetapi saat membuat formulir tambahan, formulir kedua tidak mengetahui posisi mana yang dipilih dalam datagrid pada formulir pertama.
Terima kasih.

Menjawab:

pesan dari gmaksim

Pada form pertama, kita masukkan setelah InitializeComponent(); barang ini:

Dan kenapa dia disana???

pesan dari gmaksim

PILIH "+ id +" DARI Tabel2

Permintaan seperti itu pasti tidak akan berhasil.

pesan dari gmaksim

Saya telah memberitahu Anda bagaimana melakukan ini sepanjang hari!

pesan dari dacend

Jika Anda malas / tidak punya waktu / tidak mau, Anda dapat melihat Cara mentransfer data dari satu formulir ke formulir lainnya

Sejak ini semua dimulai!!! Di antara opsi ini, tidak ada yang cocok !!!

Pertanyaan: Bagaimana cara membuka satu formulir di dalam yang lain, sehingga anak tidak melampaui orang tua?


Saya coba ini (saya membacanya di forum ini), "Formulir yang ditentukan sebagai MdiParent untuk formulir ini bukan MdiContainer."

Bisakah Anda memberi tahu saya bagaimana melakukan ini?

Ditambahkan setelah 1 jam 4 menit
Di sini saya mengerti caranya, perlu untuk menetapkan true ke properti isMDIContainer dari formulir induk.
Sekarang masalah lain, menulis bahwa Anda tidak dapat membuat formulir modal di dalam wadah ini, tetapi saya hanya perlu formulir modal

Menjawab: Namun, bagaimana jika Anda membutuhkan formulir modal anak?
Itu. apakah Anda perlu, di satu sisi, formulir untuk ditempatkan di dalam induk (jendela utama aplikasi), dan di sisi lain, sehingga seluruh aplikasi "hang" hingga akhir bekerja dengannya?

Pertanyaan: Untuk dua kata yang diberikan, tentukan apakah mungkin untuk membuat kata lain dari huruf-huruf satu kata


untuk dua kata yang diberikan, menentukan apakah mungkin untuk membuat kata lain dari huruf-huruf satu kata

Menjawab: Pernyataan masalah mengatakan. Apakah mungkin dari huruf satu
kata-kata untuk menyusun yang lain. Tapi tidak ada yang dikatakan tentang
bahwa kata-kata harus sama panjang. Dengan kata lain
tugas tersebut dapat diartikan sebagai berikut. Apakah mungkin?
dari huruf-huruf satu kata menjadi kata lain Any Length
jika saja ada cukup surat.
Ada permainan seperti itu dari satu kata yang panjang untuk dibuat
sekelompok yang lebih kecil. (pro. diperiksa)
kata pertama adalah hal utama. Yang kedua dibangun darinya ...

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 AS STRING INPUT "SLOVO_1 ="; s1 MASUKAN "SLOVO_2 ="; s2 UNTUK i = 1 UNTUK LEN (s1) s = MID $ (s2, i, 1) k = INSTR (s1, s) JIKA k MAKA MID $ (s1, k, 1) = "" ELSE PRINT "TIDAK": AKHIR AKHIR JIKA BERIKUTNYA saya CETAK "YA" SELESAI

Pertanyaan: Lewati penunjuk fungsi dari satu kelas ke kelas lainnya


Selamat siang. Saya mencari-cari untuk waktu yang lama di forum dan di internet secara umum, tetapi saya masih tidak menemukan jawaban untuk pertanyaan: bagaimana cara mentransfer pointer ke suatu fungsi dari satu kelas ke kelas lainnya. Intinya adalah ini:

Ada "Class1", ia memiliki metode "Metode"
Ada "Kelas2", objek yang dibuat di kelas "Kelas1"

Intinya adalah bahwa "Kelas2" harus dapat memanggil "Metode". Menurut saya cara termudah untuk melakukan ini adalah dengan meneruskan pointer ke "Metode" ke "Kelas2". Tapi ternyata tidak sesederhana itu. Bisakah Anda menunjukkan bagaimana ini bisa dilakukan. Nah, atau mungkin ada cara yang lebih mudah untuk memanggil "Metode" yang tertulis di "Kelas1" dari "Kelas2".

Menjawab: Hmm. Semuanya akan lebih mudah jika metode kelas harus dipanggil di main, dan karena ini adalah kelas yang berbeda, semuanya menjadi sangat buruk. Pada prinsipnya, sejak awal, saya mengasumsikan hasil seperti itu, tetapi saya pikir itu bisa lebih mudah. Oke, terima kasih untuk itu)

Ditambahkan setelah 18 jam 1 menit
Saya menemukan, berkat Stack Overflow (), metode yang lebih sederhana dan tidak rumit untuk meneruskan pointer dari satu kelas ke kelas lainnya:

C++
1 2 3 4 pesawat udara; boer boer; Boer.setSomeFun ([&] (int v) (Aircraft.source_forSomeFun (v);));

Menjawab: 1. Menggunakan pola MVVM, Anda dapat merujuk ke ViewModel of the View dari mana kami ingin menerima data (singkatnya, poin 3, MVVM hanya nyaman untuk dibuat di WPF, dilihat dari pernyataannya).
2. Hmm... Kelas statis, metode, variabel, properti. Mentransfer data dari satu bentuk ke bentuk lain melalui kelas statis.
3. Hasilnya, saya melihat solusi dalam memisahkan tampilan dari model (secara umum). Menggunakan satu atau lebih dari ini dapat memecahkan masalah Anda.

Mobil dengan transmisi manual, yang disingkat transmisi manual, sampai saat ini merupakan mayoritas mutlak di antara kendaraan lain yang berbeda.

Selain itu, kotak mekanis (manual) dan saat ini tetap menjadi perangkat yang cukup umum untuk mengubah dan mentransmisikan torsi mesin. Selanjutnya, kita akan berbicara tentang bagaimana "mekanik" diatur dan bekerja, seperti apa skema pos pemeriksaan jenis ini, serta apa kelebihan dan kekurangan dari solusi ini.

Baca di artikel ini

Diagram dan fitur transmisi manual

Pertama-tama, jenis gearbox ini disebut mekanis karena fakta bahwa unit semacam itu melibatkan pemindahan gigi manual. Dengan kata lain, pada mobil dengan transmisi manual, pengemudi sendiri yang mengganti persneling.

Mari kita pergi lebih jauh. Kotak "mekanik" diinjak, yaitu torsi berubah dalam langkah. Banyak penggemar mobil tahu bahwa gearbox sebenarnya memiliki roda gigi dan poros, tetapi tidak semua orang mengerti cara kerja unit.

Jadi, panggung (alias transmisi) adalah sepasang roda gigi (penggerak dan roda gigi yang digerakkan) yang berinteraksi satu sama lain. Setiap tahap tersebut memberikan rotasi dengan satu atau lain kecepatan sudut, yaitu, ia memiliki rasio roda gigi sendiri.

Rasio roda gigi harus dipahami sebagai rasio jumlah gigi roda gigi yang digerakkan dengan jumlah gigi pada roda gigi penggerak. Dalam hal ini, tahapan gearbox yang berbeda menerima rasio roda gigi yang berbeda. Roda gigi terendah (low gear) memiliki rasio roda gigi tertinggi, dan roda gigi tertinggi (gigi tinggi) memiliki rasio roda gigi terendah.

Menjadi jelas bahwa jumlah langkah sama dengan jumlah roda gigi pada gearbox tertentu (gearbox empat kecepatan, gearbox lima kecepatan, dll.) Perhatikan bahwa sebagian besar mobil saat ini memiliki gearbox lima kecepatan, lebih jarang ada transmisi manual dengan 6 langkah atau lebih, dan sebelumnya cukup umum, transmisi manual 4 kecepatan secara bertahap surut ke latar belakang.

Perangkat transmisi mekanis

Jadi, meskipun ada banyak desain kotak seperti itu dengan fitur-fitur tertentu, namun, pada tahap awal, dua jenis utama dapat dibedakan:

  • gearbox tiga poros;
  • kotak dua poros;

Pada mobil dengan penggerak roda belakang, biasanya dipasang transmisi manual tiga poros, sedangkan girboks dua poros dipasang pada mobil berpenggerak roda depan. Pada saat yang sama, perangkat gearbox mekanis dari tipe pertama dan kedua bisa sangat berbeda.

Mari kita mulai dengan gearbox manual tiga poros. Kotak seperti itu terdiri dari:

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

Poros dilengkapi dengan roda gigi dengan sinkronisasi. Juga termasuk dalam perangkat gearbox adalah mekanisme perpindahan gigi. Komponen-komponen ini terletak di rumah gearbox, yang juga disebut rumah gearbox.

Tugas poros penggerak adalah membuat sambungan kopling. Poros penggerak memiliki slot untuk cakram kopling yang digerakkan. Berkenaan dengan torsi, torsi yang ditentukan dari poros penggerak ditransmisikan melalui roda gigi, yang terikat erat dengannya.

Mempengaruhi kerja poros perantara, poros ini terletak sejajar dengan poros input gearbox, sekelompok roda gigi dipasang di atasnya, yang berada dalam ikatan yang kaku. Pada gilirannya, poros penggerak dipasang pada sumbu yang sama dengan poros penggerak.

Instalasi ini diwujudkan dengan bantalan ujung pada poros penggerak. Bantalan ini berisi poros yang digerakkan. Grup roda gigi (gear blok) pada poros yang digerakkan tidak memiliki ikatan yang kaku dengan poros itu sendiri dan oleh karena itu berputar bebas di atasnya. Dalam hal ini, kelompok roda gigi poros perantara, poros penggerak dan roda gigi poros penggerak berada dalam jaring konstan.

Sinkronisasi (kopling sinkronisasi) 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 gaya gesekan.

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

Jika kita mempertimbangkan mekanisme perpindahan gigi pada gearbox tiga poros, mekanisme ini sering dipasang di badan unit. Desainnya mencakup tuas kontrol, penggeser, dan garpu.

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

  • Untuk memahami cara kerja transmisi mekanis (manual) tiga poros, mari kita lihat sekilas cara kerjanya. Ketika tuas persneling dalam posisi netral, tidak ada torsi yang ditransmisikan dari mesin ke roda penggerak kendaraan.

Setelah pengemudi menggerakkan tuas, garpu akan menggerakkan kopling sinkronisasi gigi tertentu. Kemudian sinkronisasi akan menyamakan kecepatan sudut gigi yang diinginkan dan poros yang digerakkan. Kemudian ring gear kopling akan menyatu dengan ring pinion yang serupa, yang akan memastikan pinion terkunci pada poros yang digerakkan.

Kami juga menambahkan bahwa gigi mundur mobil disediakan oleh gigi mundur gearbox. Dalam hal ini, gigi pemalas mundur, dipasang pada poros terpisah, memungkinkan arah putaran dibalik.

Transmisi mekanis dua poros: perangkat dan prinsip operasi

Setelah berurusan dengan apa yang terdiri dari gearbox tiga poros, mari beralih ke gearbox poros ganda. Jenis gearbox ini memiliki dua poros di perangkatnya: primer dan sekunder. Poros input adalah poros penggerak, poros penggerak sekunder. Roda gigi dan sinkronisasi dipasang pada poros. Juga di bak mesin adalah roda gigi utama dan diferensial.

Poros penggerak bertanggung jawab untuk koneksi dengan kopling, dan pada poros ada blok roda gigi yang terikat erat dengan poros. Poros yang digerakkan terletak sejajar dengan poros penggerak, sedangkan roda gigi poros yang digerakkan berada dalam jala konstan dengan roda gigi poros penggerak, dan juga berputar bebas pada poros itu sendiri.

Juga, roda gigi penggerak roda gigi utama dipasang secara kaku pada poros yang digerakkan, dan kopling sinkronisasi terletak di antara roda gigi poros yang digerakkan. Kami menambahkan, untuk mengurangi ukuran gearbox, serta meningkatkan jumlah roda gigi, dalam kotak modern, alih-alih satu poros yang digerakkan, 2 atau bahkan 3 poros sering dapat dipasang.

Pada setiap poros tersebut, roda gigi dari roda gigi utama dipasang secara kaku, sedangkan roda roda gigi tersebut memiliki ikatan yang kaku dengan roda gigi yang digerakkan. Ternyata desainnya benar-benar mengimplementasikan 3 roda gigi utama.

Roda gigi utama itu sendiri, serta diferensial pada perangkat gearbox, mengirimkan torsi dari poros sekunder ke roda penggerak. Pada saat yang sama, diferensial juga dapat memberikan rotasi roda seperti itu ketika roda penggerak berputar pada kecepatan sudut yang berbeda.

Adapun mekanisme perpindahan gigi, pada gearbox dua poros, ditempatkan secara terpisah, yaitu di luar bodi. Kotak terhubung ke mekanisme switching dengan kabel atau batang khusus. Koneksi dengan kabel lebih umum.

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

  • Jika kita berbicara tentang prinsip pengoperasian transmisi manual dua poros, itu mirip dengan prinsip gearbox tiga poros. Perbedaannya terletak pada cara kerja mekanisme perpindahan gigi. Singkatnya, tuas dapat melakukan gerakan memanjang dan melintang relatif terhadap sumbu kendaraan. Selama gerakan lateral, pemilihan gigi terjadi, karena gaya diterapkan pada kabel pemilih gigi, yang bekerja pada tuas pemilih gigi.

Selanjutnya, tuas bergerak memanjang, dan gaya sudah masuk ke kabel pemindah gigi. Tuas yang sesuai secara horizontal menggerakkan batang dengan garpu, garpu pada batang menggantikan sinkronisasi, yang mengarah ke pemblokiran roda gigi poros yang digerakkan.

Akhirnya, kami mencatat bahwa gearbox mekanis dari berbagai jenis juga memiliki perangkat pengunci tambahan yang mencegah masuknya dua roda gigi pada saat yang sama atau penghentian roda gigi yang tidak terduga.

Baca juga

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

  • Alasan sulitnya memasang gigi pada mesin yang sedang berjalan. Oli transmisi dan level di gearbox, keausan sinkronisasi dan roda gigi gearbox, kopling.


  • Tampilan