Trang chủ Tin Học Lớp 9 Nêu các sử dùng các hàm có sẵn trong và hàm tự tạo (void, int ,bool, ...) của c++ trong...
Câu hỏi :

Nêu các sử dùng các hàm có sẵn trong và hàm tự tạo (void, int ,bool, ...) của c++ trong chương trình python * viết lý thuyết + code mẫu (tạo hàm kiểm tra số nguyên tố)

Lời giải 1 :

Trước khi vào thì nói một chút về ưu điểm và nhược điểm nhé :v

Ưu điểm: Ừ thì tất nhiên là tốc độ rồi, việc gọi hàm C++ trong Python không ảnh hưởng đến tốc độ thực thi của hàm. Ví dụ ở dưới, hàm kiểm tra nguyên tố kiểm tra một giá trị `> 10^15` trong chưa đầy `1s`, một việc mà Python thường không thể làm được.

Nhược điểm: C++ có nhược điểm gì thì cứ lôi hết ra nha :)) Nhược điểm lớn nhất là không thể tận dụng được số lớn của Python.

Lưu ý: Đây là ưu và nhược điểm của phương pháp trong câu trả lời này, dùng phương pháp khác có thể dẫn đến ưu và nhược điểm khác.

$\\$

$\\$

$\\$

Để sử dụng hàm trong C++ bằng Python, ta cần biên dịch mã nguồn C++ thành một thư viện liên kết động và đọc nó bằng Python.

$\\$

Ví dụ:

prime.c / prime.cpp

bool prime(long long val) {
    if (val < 2) return false;
    for (long long i=2; i*i<=val; ++i) {
        if ( val % i == 0 ) return false;
    }
    return true;
}

// Đoạn dưới đây chỉ cần thiết nếu là C++, C thì bỏ qua.
extern "C" {
    bool is_prime(long long val) {return prime(val);};
}

$\\$

Biên dịch

Nếu là file .cpp, sử dụng g++ để biên dịch

g++ prime.cpp -shared -o prime.so -fPIC

Nếu là file .c, nên sử dụng gcc để biên dịch

gcc prime.c -shared -o prime.so -fPIC

Nhìn không khác nhiều đúng không :)) Ừ thì chỉ khác là g++ là trình biên dịch của C++ còn gcc là trình biên dịch của C thôi. Mà thật ra vẫn ổn nếu biên dịch C bằng g++ do nó tương thích ngược mà :))

Sau khi biên dịch, một thư viện liên kết động prime.so sẽ được tạo.

$\\$

$\\$

$\\$

Trong Python, ta có thể sử dụng thư viện chuẩn ctypes (thật ra còn nhiều thư viện khác nma cứ dùng lib chuẩn cho khỏe :D) để đọc các thư viện liên kết động .so của C++.

main.py

from ctypes import *
cprime = CDLL('./prime.so')

print(bool(cprime.is_prime(c_longlong(1746860020068409))))

$\\$
$\\$
\begin{array}{c|c|c}\color{#ffd710}{\texttt{\{}} \color{#8655d6}{\texttt{\{}}\ \ \color{#8cdcda}{\text{Daoanhviet96}}\ \ \color{#8655d6}{\texttt{\}}} \color{#ffd710}{\texttt{\}}}\end{array}

image

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK