Tạo một tệp văn bản mỗi dòng chứa 2 số thực

27 8 0
Tạo một tệp văn bản mỗi dòng chứa 2 số thực

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Báo cáo thực tập LỜI MỞ ĐẦU Ngày nay, công nghệ thông tin ngày phát triển tỏ rõ tầm quan trọng tất lĩnh vực, nói cơng nghệ thơng tin trở thành thước đo để đánh giá phát triển xã hội đại – nơi mà người dần thoát khỏi cách làm việc thủ công, thô sơ dần tiến đến tin học hóa tất lĩnh vực để cơng việc có hiệu hơn, tiết kiệm thời gian nhân lực Việc nghiên cứu lập trình phần mềm, ứng dụng điều hướng tới sinh viên theo học công nghệ thơng tin.Bản báo cáo trình bày kết việc lập trình tốn liên quan đến tệp mảng đề tài thực tập sở Trong trình thực em nhận giúp đỡ nhiệt tình từ giảng viên khoa công nghệ thông tin Nhân dịp này, em xin gửi lời cảm ơn chân thành tới thầy, cô trường Đại Học Vinh, đặc biệt thầy cô khoa Công Nghệ Thông Tin – người trực tiếp giảng dạy, giúp đỡ em thời gian học trường Cảm ơn nhà trường khoa Công Nghệ Thông Tin tạo điều kiện cho em thực tập sở chuẩn bị tốt cho công việc học tập rèn luyện kỹ cần thiết khi trở thành kỹ sư CNTT thực thụ Đặc biệt em xin gửi lời cảm ơn đến giảng viên Ths.Lê Quốc Anh quan tâm góp ý cho làm thực tập sở sẵn sàng trả lời thắc mắc cần thiết giúp em hoàn thành tốt làm Mặc dù có nhiều cố gắng kiến thức hạn chế với kinh nghiệm chưa có nên khơng tránh khỏi thiếu sót.Vì em mong nhận ý kiến đóng góp bổ sung thầy giáo bạn để làm thực tập sở em hoàn thiện Page Báo cáo thực tập MỤC LỤC LỜI MỞ ĐẦU……………………………………………………………page1 PHẦN 1: mã đề nội dung toán……………………………………….page3 PHẦN 2: Giải toán ………………………………………… page4 A : Bài 1………………………………………………………………… page4 I: Nội dung toán…………………………………………………… page4 1: Đề bài……………………………………………………………page4 2: Lựa chọn ngôn ngữ lập trình……………………………………page4 3: Xác định tốn ……………………………………………….page4 II: Thuật tốn…………………………………………………………….page4 1: Thuật tốn kiểm tra liệu…………………………………… page4 1.a: Mơ tả thuật toán……………………………………………….page4 B1: Xây dựng cấu trúc số phức……………………………page4 B2: Xây dựng công thức ………………………………….page5 B3: Xây dựng hàm hiển thị……………………………… page5 B4: Đọc liệu từ tệp…………………………………… page6 B5: Xây dựng hàm tính tổng………………………………page9 B6: Xây dựng hàm main………………………………… page10 2: Chương trình chính…………………………………………….page10 Bộ test …………………………………………………………page14 Bộ test …………………………………………………………page15 Kết luận ………………………………………………………….page16 B : Bài 2………………………………………………………………….page16 I: Nội dung toán…………………………………………………….page16 1: Đề bài………………………………………………………… page16 2: Lựa chọn ngơn ngữ lập trình………………………………… page16 3: Xác định toán …………………………………………… page17 II: Thuật toán………………………………………………………… page17 1: Cơ sở thuật toán Rabin_Miller…………………………………page17 Page Báo cáo thực tập 2: Thuật toán…………………………………………………… page17 3: Sơ đồ giải thuật……………………………………………… page18 4: Mơ tả thuật tốn……………………………………………… page19 B1: Tạo class Rabin……………………………………….page19 B2: Kiểm tra số nhập vào…………………………………page19 B3: Xây dựng hàm modpow………………………………page20 B4: Xây dựng hàm mulmod………………………………page20 B5: Xây dựng hàm main………………………………… page21 5: Chương trình chính…………………………………………….page22 Bộ test 1………………………………………………………… page26 Bộ test 2………………………………………………………… page26 Bộ test với số có 10 chữ số…………………………………….page26 Kết luận………………………………………………………… page26 PHẦN 1: Mã đề 90 Bài 1: Tạo tệp văn dòng chứa s ố thực Xây dựng ki ểu c ấu trúc s ố ph ức gồm thành phần phần thực phần ảo Viết chương trình tạo danh sách LIFO gồm số phức có phần thực phần ảo đọc từ tệp Tính thơng báo hình tổng số phức có mặt danh sách FIFO Bài 2: Viết chương trình cài đặt thuật tốn kiểm tra số ngun tố với Input đầu vào số bé 2000000000 Áp dụng thuật toán Rabin-Miller để tăng tốc độ xử lý, không s dụng phương pháp vét cạn để kiểm tra Page Báo cáo thực tập PHẦN 2: GIẢI QUYẾT BÀI TOÁN A: Bài I: nội dung toán 1:Đề Tạo tệp văn dòng chứa số thực Xây dựng ki ểu cấu trúc s ố phức gồm thành phần phần thực phần ảo Viết chương trình tạo danh sách LIFO gồm số phức có phần thực phần ảo đọc từ t ệp Tính thơng báo hình tổng số phức có mặt danh sách FIFO 2: Lựa chọn ngơn ngữ lập trình +Sử dụng ngơn ngữ lập trình c với hỗ trợ phần mềm devc++ 3: Xác định toán -Xác định đầu vào đầu toán: +Input: -Tệp văn input.txt tệp đầu vào chứa số nguyên -Mỗi số cách dấu cách trống dấu xuống dịng +Output: -In hình kết sau xóa phần tử có giá trị x II: Thuật tốn 1: Thuật tốn kiểm tra liệu 1.a: Mơ tả thuật toán B1: Xây dựng cấu trúc số phức Tạo struct sophuc: để khai báo cấu trúc số phúc gồm phần thực ph ần ảo struct SoPhuc { Page Báo cáo thực tập float pthuc; float pao; }; B2: Xây dựng công thúc cộng số phức trả kết s SoPhuc CongSoPhuc(SoPhuc a,SoPhuc b) { SoPhuc s; s.pthuc = a.pthuc+b.pthuc; s.pao = a.pao + b.pao; return s; } B3: Xây dựng hàm hiển thị số phức + Nếu a pao>=0 - Với a.pao #0 a.pthuc#0 => số phức có dạng “a.pthuc + a.pao*i” - a.pthuc=0 => số phức có dạng “a.pao *i” + Nếu a.pao = => số phức có dạng “a.pthuc” + Nếu a.pao số phức có dạng “a.pthuc – a.pao*i” Với a.pthuc =0 => số phức có dạng “-a.pao *i” Cấu trúc lệnh: void inSoPhuc(SoPhuc a) { if(a.pao >= 0) { Page Báo cáo thực tập if ((a.pao != 0) && (a.pthuc != 0)) printf("%.2f + %.2fi",a.pthuc,a.pao); else if(a.pthuc==0) printf("%.2fi",a.pao); else if(a.pao==0) printf("%.2f",a.pthuc); } else if (a.pthuc != 0) printf("%.2f - %.2fi",a.pthuc,-a.pao); else printf("%.2f",a.pao); } B4: Xây dựng node sau đọc liệu từ tệp a Các bước đọc liệu từ tệp: Bước 1: Đọc cácdữ liệutừ tệp input.txt Bước 2: Kiểm tra liệu: Nếu đọc liệu thành công chuyển sang bước Ngược lại chuyển sang bước Bước 3: Đưa liệu Quay lại bước Bước 4: Kết thúc Page Báo cáo thực tập b Lưu đồ thuật toán đọc từ tệp Bắt đầu i=0 Sai Tệp != eof Đúng Đưa liệu để tính tốn Kết thúc Cấu trúc lệnh struct node { SoPhuc info; struct node * link;// trỏ đến cấu trúc node Page Báo cáo thực tập }; node *nhap(node *f, node *l) { FILE *tep; tep=fopen("inputsophuc.txt","rt"); node *p; while(!feof(tep)) { p=new(node); fscanf(tep,"%f %f",&p->info.pthuc,&p->info.pao); p->link = NULL; if(f==NULL) { f=p;l=p; } else { l->link=p; l=p; } } fclose(tep); Page Báo cáo thực tập return f; } B5: xây dựng hàm tinhtong() Bước 1: Tạo node f để duyệt theo danh sách p; Bước 2: Gán giá trị tổng số phức giá trị “s”; Bước 3: dung vòng lặp while duyệt danh sách p - Với p khác giá trị rỗng gán liệu s cho nút sau g ọi Cú pháp: hàm CongSoPhuc() Trỏ đến giá trị p tiếp theo; { } SoPhuc s; s.pao=0;s.pthuc=0; node *p; p=f; while(p!=NULL) { s= CongSoPhuc(s,p->info); p=p->link; } Bước 4: hiển thị “Tong Cac So Phuc Co Trong Tep:” gọi đến hàm inSoPhuc() với giá trị hiển thị s printf("\nTong Cac So Phuc Co Trong Tep: "); inSoPhuc(s); Cấu trúc lệnh : void tinhtong(node *f) { SoPhuc s; s.pao=0;s.pthuc=0; node *p; p=f; while(p!=NULL) { s= CongSoPhuc(s,p->info); p=p->link; } Page Báo cáo thực tập } printf("\nTong Cac So Phuc Co Trong Tep: "); inSoPhuc(s); B6: Xây dựng hàm main() Gọi tệp hàm “f=nhap(f,l)”; Hiển thị tệp hàm “xem(f)”; Tính tổng số phức có tệp hàm “tinhtong(f)”; Dừng chương trình xem kết hàm “getch()” Cấu trúc lệnh: int main() { node *f=NULL, *l=NULL; int n, x; f = nhap(f,l); xem(f); tinhtong(f); getch(); } 2: Chương trình Tạo tệp văn dịng chứa số thực Xây dựng ki ểu cấu trúc số phức gồm thành phần phần thực phần ảo Viết chương trình tạo danh sách LIFO gồm số phức có phần thực phần ảo đọc từ tệp Tính thơng báo hình tổng số phức có mặt danh sách FIFO Page 10 Báo cáo thực tập } else { l->link=p; l=p; } } fclose(tep); return f; } void xem(node *f) { SoPhuc Tong; node *p; p=f; while(p!=NULL) { printf("\n"); inSoPhuc(p->info); p=p->link; } } void tinhtong(node *f) { SoPhuc s; s.pao=0;s.pthuc=0; node *p; p=f; while(p!=NULL) Page 13 Báo cáo thực tập { s= CongSoPhuc(s,p->info); p=p->link; } printf("\nTong Cac So Phuc Co Trong Tep: "); inSoPhuc(s); } int main() { node *f=NULL, *l=NULL; int n, x; f = nhap(f,l); xem(f); tinhtong(f); getch(); } Bộ test Với đầu vào tệp inputsophuc.txt Page 14 Báo cáo thực tập Thực chạy chương trình ta có kết sau Bộ test Với đầu vào tệp inputsophuc.txt Page 15 Báo cáo thực tập Thực chạy chương trình ta có kết sau Kết luận : - Chương trình chạy nhanh, kết yêu cầu - Chương trình báo lỗi trường hợp liệu vào: + Sử dụng dấu cách trống dấu xuống dịng khơng nhập số + Có chứa kí hiệu đặc biệt, chữ + File đầu vào không tồn B: Bài I: Nội dung tốn 1:Đề Viết chương trình cài đặt thuật toán kiểm tra số nguyên tố với Input đầu vào số bé 2000000000 Áp dụng thuật toán Rabin-Miller để tăng tốc độ xử lý, không s dụng phương pháp vét cạn để kiểm tra Page 16 Báo cáo thực tập Lựa chọn ngôn ngữ lập trình + sử dụng ngôn ngữ lập trình java với hỗ trợ phần mềm lập trình java eclipse Xác định tốn -Xác định toán: +Input: - Là số nguyên n >3 số lần kiểm tra an toàn k(số lần kiểm tra) - Sử dụng thuật toán Rabin-Miller để kiểm tra +Output: -In hình kết n số nguyên tố hợp số II: Thuật toán 1:Cơ sở thuật toán Rabin-Miller Thuật toán dựa định lý quan trọng sau: “ N ếu n s ố nguyên tố (n-1)! ≡ (n-1) mod n” “Với số nguyên n, Ф(n) số số nguyên tố v ới n mà nh ỏ h ơn n Khi đó, với x, x > 0, xФ(n) ≡ mod n ” 2: thuật tốn Bước 1: Thực tính (n-1) = 2k.m n: số nguyên cần kiểm tra s: số nguyên m: số nguyên lẻ Bước : Chọn số ngẫu nhiên a với 1< a < n-1 Bước 3: tính b ≡ am mod n If ( b≡ mod n) return “ n số nguyên tố” Else Page 17 Báo cáo thực tập For (i=0; i n hợp số Bước 2: gán s = n-1 có kiểu liệu “long” s chia hết cho Tang giá trị s Tạo số nguyên a = random() Bước 3: khai báo r với kiểu liệu long hàm lấy giá tr ị ệt đối long r = Math.abs(rand.nextLong()); a= r % (n - 1) + 1, gán temp = s; tạo biến mod = a temp % n Bước 4: Sử dụng vòng lặp while Page 19 Báo cáo thực tập Với (temp # n – 1) && (mod # 1) && (mod # n – 1) Giá trị mod= ((mod) multiply ( mod)) % n Giá trị temp *= 2; Nếu (mod # n - && temp % == 0) Trả n hợp số Ngược lại n số nguyên tố Cấu trúc lệnh: if (n % == 0) return false; long s = n - 1; while (s % == 0) s /= 2; Random rand = new Random(); for (int i = 0; i < lap; i++) { long r = Math.abs(rand.nextLong()); long a = r % (n - 1) + 1, temp = s; long mod = modPower(a, temp, n); while (temp != n - && mod != && mod != n - 1) { mod = mulModul(mod, mod, n); temp *= 2; } if (mod != n - && temp % == 0) return false; } return true; } B3: Xây dựng hàm modpower public long modPower(long a, long b, long c) { long res = 1; for (int i = 0; i < b; i++) { res *= a; res %= c; } return res % c; } Page 20 Báo cáo thực tập B4: Xây dựng hàm mulmod public long mulMod(long a, long b, long mod) { return BigInteger.valueOf(a).multiply(BigInteger.valueOf(b)).mod(BigInteger.valueOf(mo d)).longValue(); } B5: Xây dựng hàm main + lấy liệu từ hệ thống + hiển thị dòng “Rabin_Miller kiem tra” +hiển thị dòng “nhap so” + hiển thị nhập “so lan lap” +kiểm tra nguyên tố sau chấp nhận số kiểm tra số lần lặp Nếu n số nguyên tố hiển thị hình “ n số nguyên tố” Ngược lại “n hợp số” Cấu trúc lệnh: public static void main (String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Rabin_Miller kiem tra\n"); MillerRabin pr = new MillerRabin(); System.out.println("nhap so\n"); long num = scan.nextLong(); System.out.println("\n so lan lap"); int k = scan.nextInt(); boolean prime = pr.testNguyenTo(num, k); if (prime) System.out.println("\n"+ num +" la so nguyen to"); else System.out.println("\n"+ num +" la hop so"); Page 21 Báo cáo thực tập } } 5: Chương trình Viết chương trình cài đặt thuật tốn kiểm tra số ngun tố với Input đầu vào số bé 2000000000 Áp dụng thuật toán Rabin-Miller để tăng tốc độ xử lý, không s dụng phương pháp vét cạn để kiểm tra import java.util.Scanner; import java.util.Random; import java.math.BigInteger; /** Class MillerRabin **/ public class MillerRabin { /** chuc ktra xem có phai nguyen to hay khong **/ public boolean testNguyenTo(long n, int lap) { /** xét trường hợp đơn giản nhất**/ if (n == || n == 1) return false; /** xét trường hợp vói n=2 **/ if (n == 2) return true; Page 22 Báo cáo thực tập /** kiểm tra hợp số**/ if (n % == 0) return false; long s = n - 1; while (s % == 0) s /= 2; Random rand = new Random(); for (int i = 0; i < lap; i++) { long r = Math.abs(rand.nextLong()); long a = r % (n - 1) + 1, temp = s; long mod = modPower(a, temp, n); while (temp != n - && mod != && mod != n - 1) { mod = mulModul(mod, mod, n); temp *= 2; } if (mod != n - && temp % == 0) return false; } return true; Page 23 Báo cáo thực tập } /** công thức (a ^ b) % c **/ public long modPower(long a, long b, long c) { long res = 1; for (int i = 0; i < b; i++) { res *= a; res %= c; } return res % c; } /** công thức (a * b) % c **/ public long mulModul(long a, long b, long mod) { return BigInteger.valueOf(a).multiply(BigInteger.valueOf(b)).mod(BigInteger.valueOf(m od)).longValue(); } /** hàm main **/ public static void main (String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Rabin_Miller kiem tra\n"); Page 24 Báo cáo thực tập /** lớp đối tượng rabin miller **/ MillerRabin pr = new MillerRabin(); /** chấp nhận số **/ System.out.println("nhap so\n"); long num = scan.nextLong(); /** chấp nhận số lần lặp **/ System.out.println("\n so lan lap"); int k = scan.nextInt(); /** kiểm tra nguyên tố **/ boolean prime = pr.testNguyenTo(num, k); if (prime) System.out.println("\n"+ num +" la so nguyen to"); else System.out.println("\n"+ num +" la hop so"); } } Page 25 Báo cáo thực tập Bộ test 1: Bộ test 2: Bộ test test với số có 10 chữ số: Kết luận: + chương trình chạy nhanh yêu cầu + test với số lớn xác Page 26 Báo cáo thực tập + xác suất tính sai thuật toán (1/4)k Page 27 ... } 2: Chương trình Tạo tệp văn dòng chứa số thực Xây dựng ki ểu cấu trúc số phức gồm thành phần phần thực phần ảo Viết chương trình tạo danh sách LIFO gồm số phức có phần thực phần ảo đọc từ tệp. .. Báo cáo thực tập PHẦN 2: GIẢI QUYẾT BÀI TOÁN A: Bài I: nội dung toán 1:Đề Tạo tệp văn dòng chứa số thực Xây dựng ki ểu cấu trúc s ố phức gồm thành phần phần thực phần ảo Viết chương trình tạo danh... Bài 1: Tạo tệp văn dòng chứa s ố thực Xây dựng ki ểu c ấu trúc s ố ph ức gồm thành phần phần thực phần ảo Viết chương trình tạo danh sách LIFO gồm số phức có phần thực phần ảo đọc từ tệp Tính

Ngày đăng: 29/08/2021, 19:57

Tài liệu cùng người dùng

Tài liệu liên quan