Tải bản đầy đủ (.pdf) (16 trang)

Buoi3-CSLT-HDThucHanh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (272.14 KB, 16 trang )

<span class='text_page_counter'>(1)</span>GỢI Ý BÀI THỰC HÀNH BUỔI SỐ 3 Bài 17 (TH-CSLT-01). Hãy viết chương trình nhập vào một dãy số đến khi gặp số 0 thì dừng, sau đó tách các số chẵn và số lẻ ra 02 mảng khác nhau. Tính trung bình cộng các số chẵn dương và trung bình cộng các số lẻ âm. HƯỚNG DẪN CHI TIẾT A. Input: so: float B. Output: tbcd, tbla: float (tbcd: trung bình chẵn dương; tbla: trung bình lẻ âm) C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình so, tbcd, tbla tongD, demD, tongA, demA, demC, demL tbCD, tbLA int mangchan[20],mangle[20] Bước 2: Nhập dữ liệu và xử lý yêu cầu - Khởi tạo tongD = 0; demD = 0; tongA = 0; demA = 0; demC=0, demL=0; - Thực hiện nhập số (so) cho đến khi gặp số 0 thì dừng (sử dụng do … while), mỗi khi nhập được so thực hiện thì kiểm tra nếu số chẵn thì đẩy vào mảng Mangchan (đồng thời tăng demC lên một đơn vị) nếu số lẻ thì đẩy vào mảng Mangle (đồng thời tăng demL lên một đơn vị). Trong đó: demC là tổng số phần tử Chẵn và demL là tổng số phần tử lẻ do { cout<<“Nhap so:”; cin>>so; if (so==0) break; if (so%2==0) { Mangchan[demC] = so; demC++; } else { Mangle[demL] = so; demL++; } }while (so!=0); - In các phần tử Mangchan - In các phần tử Mangle. 1.

<span class='text_page_counter'>(2)</span> - Duyệt trên mảng các phần tử chẵn (Mangchan, demC), kiểm tra nếu phần tử dương thì cộng vào tongD và tăng giá trị biến đếm demD for(i=0;i<demC;i++) if (Mangchan[i]>0) { tongD = tongD + so; demD = demD + 1; } - Duyệt trên mảng các phần tử lẻ (Mangle, demL), kiểm tra nếu phần tử âm thì cộng và đếm lại for(i=0;i<demL;i++) if (Mangle[i]<0) { tongA = tong A + so; demA = demA + 1; } - Tính giá trị trung bình chẵn dương: - Tính giá trị trung bình lẻ âm: Bước 4: In kết quả lên màn hình - In trung bình số chẵn dương: - In trung bình số lẻ âm:. tbCD = tongD/demD tbLA = tongA/demA. tbCD tbLA. D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Nhap so: 4 Nhap so: -5 Nhap so: -2 Nhap so: 6 Nhap so: -7 Nhap so: -9 Nhap so: 1 Nhap so: 3 Nhap so: 0 Kết quả in ra: Trung binh chan duong: 5 Trung binh le am: -7. 2.

<span class='text_page_counter'>(3)</span> Bài 18 (TH-CSLT-07): Nhập vào từ bàn phím dãy số gồm n số nguyên (n>0) và thực hiện các yêu cầu sau đây a. Hiển thị dãy số ra màn hình b. Nhập vào từ bàn phím số nguyên x. Hãy cho biết x xuất hiện trong dãy số bao nhiêu lần và các vị trí xuất hiện của x c. Xoá các số có giá trị bằng 0 có trong dãy (Xoá phần tử đầu tiên) d. Sắp xếp đưa các số nguyên tố lên đầu dãy e. Tính trung bình cộng các số chia hết cho 3 có trong dãy HƯỚNG DẪN CHI TIẾT A. Input: - n, a[20] và -x B. Output: - a[20] - d: số lần giá trị x trong mảng, các vị trí xuất hiện tương ứng - In lại mảng đã xoá phần tử bằng 0 - Mảng đã sắp xếp -tb3: trung bình các số chia hết cho 3 C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình Bước 2: Nhập mảng Bước 3: In lại mảng Bước 4: Nhập số x và tìm kiếm -Nhập x -d = 0; -Duyệt qua tất cả các phần tử của mảng Kiểm tra nếu (a[i] == x) { d = d + 1; cout<<“vi tri xuat hien x:”<<i; //in vị trí xuất hiện của x trong mảng } -In giá trị của d //số lần xuất hiện x trong mảng Bước 5: Xoá phần tử có giá trị bằng 0 Nguyên tắc: duyệt lần lượt các phần tử của dãy, kiểm tra nếu là số 0 thì thực hiện chuyển các phần tử từ vị trí sau đó lùi về phía đầu dãy một vị trí for(i=0;i<n;i++) if (a[i]==0) { for(j=i;j<n;j++) a[j] = a[j+1]; n = n - 1; i = i – 1; } 3.

<span class='text_page_counter'>(4)</span> Bước 6: Sắp xếp đưa các số nguyên tố lên đầu dãy Nguyên tắc: duyệt lần lượt các phần tử của dãy, kiểm tra nếu là số nguyên tố (số nguyên tố là số không có ước ngoài nó và chính nó) thì thực hiện chuyển phần tử đó về vị trí đầu tiên (các phần tử còn lại dịch chuyển lùi về cuối một vị trí). for(i=0;i<n;i++) { //Kiểm tra a[i] là nguyên tố kt = 1; for(j=2;j<a[i];j++) if(a[i]%j==0) kt = 0; if (kt==1) { tg = a[i]; for(j=i;j>0;j--) a[j] = a[j-1]; a[0] = tg; } } Bước 7: Trung bình các số chia hết cho 3 Nguyên tắc: duyệt lần lượt các phần tử của dãy, kiểm tra nếu là số chia hết cho 0 thì cộng và đếm các phần tử đó. Cuối cùng để tính trung bình tong3=0; dem3=0; for(i=0;i<n;i++) if (a[i]%3==0) { tong3 = tong3 + a[i]; dem3 = dem3 + 1; } tbc3 = tong3/dem3; cout<<”\n TB cong cac so chia het cho 3:”<<tbc3<<endl;. 4.

<span class='text_page_counter'>(5)</span> D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Nhap so phan tu: 5 a[0]: 4 a[1]: 0 a[2]: 3 a[3]: 9 a[4]: 5 ð Kết quả thu được: Mang da nhạp: 4 3 0 9 5 Nhap so x: 3 So lan xuat hien x: 1 Vi tri tri xuat hien x: 2 Mang sau khi da xoa 0: 4 3 9 5 Mang sap xep: 3 4 5 9 TB cac so chia het cho 3: 6. 5.

<span class='text_page_counter'>(6)</span> Bài 19 (TH-CSLT-04): Số La Mã là một tập các ký hiệu: {‘I’,’V’,’X’,’L’,’C’,’D’,’M’} tương đương với các giá trị số ở chữ số Latin gồm: {1,5,10,50,100,500,1000}. Hãy viết chương trình nhập vào một số nguyên dương N (N<10000). Hiện ra màn hình dạng chữ số La Mã của số nguyên vừa nhập. HƯỚNG DẪN CHI TIẾT A. Input: B. Output: C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình Bước 2: Nhập dữ liệu Bước 3: Thực hiện xử lý yêu cầu Bước 4: In kết quả lên màn hình D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Lần lượt nhập với yêu cầu sau:. 6.

<span class='text_page_counter'>(7)</span> Bài 20 (TH-CSLT-05): Thực hiện lần lượt các yêu cầu sau -Nhập một dãy không quá 100 phần tử là các số thực cho đến khi gặp số 0 thì dừng. -Hiện dãy vừa nhập. -Hiện Tổng của các phần tử không âm trong mảng và Trung bình cộng các phần tử âm. -Sắp xếp các phần tử trong dãy theo trật tự giảm dần của giá trị. Hiện dãy sau khi sắp xếp. -Giảm giá trị các phần tử ở vị trí chẵn trong dãy đi 10%. Hiện dãy sau khi thực hiện giảm giá trị. -Xoá các phần tử ở vị trí lẻ trong dãy(VD: vị trí 1, 3, 5, …). Hiện dãy sau khi xoá. HƯỚNG DẪN CHI TIẾT A. Input: n, a[20] B. Output: - a[20] - td (tổng phần tử không ); tba (trung bình cộng các số âm) - a[20] – Mảng đã sắp xếp - a[20] – Các phần tử vị trí chẵn đã giảm đi 10% - a[20] – đã xoá các phần tử ở vị trí lẻ C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình Bước 2: Nhập dữ liệu (Nhập dãy không quá 100 phần tử, đến khi gặp 0 thì dừng) n = 0; do { cout<<”Nhap so:”; cin>>so; if (so==0) break; n++; a[n-1] = so; if (n==100) break; }while (so!=0); Bước 4: In lại mảng Bước 5: Tính tổng các phần tử không âm - td = 0; - Duyệt các phần tử mảng if (a[i]>0) td = td +. a[i];. - In giá trị td lên màn hình Bước 6: Tính trung bình cộng các phần tử âm - ta = 0; da = 0; - Duyệt các phần tử mảng if (a[i]<0) { ta = ta + da++; }. a[i];. 7.

<span class='text_page_counter'>(8)</span> - Tính tba = ta/da; - In giá trị tda lên màn hình Bước 7: Sắp xếp mảng theo thứ tự giảm dần - Sử dụng thuật toán Sắp xếp - Tham khảo: for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) { tg = a[i]; a[i] = a[j]; a[j] = tg; }. - In lại mảng đã được sắp xếp Bước 8: Giảm giá trị các phần tử vị trí chẵn đi 10% - Duyệt các phần tử mảng if (i%2==0) a[i] = a[i] * 0.9. - In lại mảng đã được sắp xếp Bước 9: Xoá các phần tử ở vị trí lẻ trong dãy(VD: vị trí 1, 3, 5, …) Nguyên tắc: duyệt qua các phần tử của mảng, nếu là vị trí lẻ thì thực hiện xoá tại vị trí đó tương ứng for(i=0;i<n;i++) if (i%2==1) { for(j=i;j<n;j++) a[j] = a[j+1]; n = n – 1; i = i - 1; }. 8.

<span class='text_page_counter'>(9)</span> D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Nhap so phan tu mang: 6 a[0]: 1 a[1]: 4 a[2]: -3 a[3]: 9 a[4]: -5 a[5]: -1 ð Kết quả in ra: Mang da nhap: 1 4 -3 9 -5 -1 Tong cac so khong am: 14 Trung binh cong cac so am: -3 Mang da sap xep giam dan: 9 4 1 -1 Cac phan tu vi tri chan giam 10%: 8.1 4 0.9 -1 -2.7 -5 Xoa cac phan tu le: 8.1 0.9 -2.7. -3. -5. 9.

<span class='text_page_counter'>(10)</span> Bài 21 (TH-CSLT-02): Viết chương trình nhập vào mảng hai chiều các số thực. Áp dụng: - In lại mảng 2 chiều các phần tử dưới dạng bảng - In các phần tử tại hàng thứ k của mảng hai chiều (k>=0) - Tính tổng các phần tử của cột thứ k của mảng hai chiều (k>=0) - Thực hiện tìm kiếm phần tử có giá trị là x, cho biết vị trí tìm thấy đầu tiên của phần tử trong trường hợp tìm thấy - Cho biết hàng nào có tổng các phần tử lớn nhất trong mảng hai chiều HƯỚNG DẪN CHI TIẾT A. Input: h, c, a[20][20] //h là số hàng và c là số cột - hk: hàng cần in các phần tử - ck: cột cần tính tổng - x: phần tử cần tim B. Output: - a[20][20] - các phần tử hàng thứ k - tổng của các phần tử tại cột thứ k - vth, vtc: vị trí của phần tử x tìm thấy (vth: thứ tự hàng – vtc: thứ tự cột) - hmax: chỉ số hàng có tổng phần tử lớn nhất C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình Bước 2: Nhập dữ liệu Bước 3: In lại mảng 2 chiều Bước 4: In các phần tử hàng thứ k - Nhập hàng k cần in - Duyệt các phần tử trên hàng k và in giá trị ra (các phần tử có cùng chỉ số hàng là k) for(j=0; j<c; j++) cout<<setw(7)<<a[k][j]; Bước 5: Tổng các phần tử tại cột thứ k - Nhập cột k cần tính tổng - S = 0; - Duyệt các phần tử trên cột k và cộng lại giá trị (các phần tử có cùng chỉ số cột là k) for(i=0; i<h; i++) S = S + a[i][k]; - In giá trị của k lên màn hình Bước 6: tìm kiếm phần tử x trong mảng - Nhập phần tử x cần tìm - Khởi tạo vth = -1 và vtc = -1; - Duyệt qua tất các phần tử của mảng hai chiều, so sánh giá trị từng phần tử so với x, nếu bằng thì lưu vị trí tìm thấy và dừng for( i = 0; i<h; i++) for( j=0; j<c; j++) if(a[i][j] == x) 10.

<span class='text_page_counter'>(11)</span> { vth = i; vtc = j; break; } - Kiểm tra nếu (vth != -1 và vtc != -1) thì Thông báo tìm thấy phần tử x tại vị trí vth và vtc Ngược lại Thông báo không tìm thấy phần tử Bước 7: Cho biết hàng có tổng lớn nhất - Tính tổng hàng 0 và giả sử hàng 0 có tổng lớn nhất hmax = 0; for(j=0; j<c; j++) s = s + a[0][j]; smax = s; - Duyệt qua các hàng khác, mỗi hàng tính tổng và so sánh với giá trị tổng max (smax) để xác định vị trí hàng có tổng lớn nhất for (i=0; i<h; i ++) { s = 0 ; for(j=0; j<c; j++) s = s + a[i][j]; if (s > smax) { smax = s; hmax = i; } } - Thông báo hàng có tổng lớn nhất là hàng hmax. 11.

<span class='text_page_counter'>(12)</span> D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Lần lượt nhập với yêu cầu sau: Nhap so hang: 3 Nhap so cot: 3 a[0][0]: 6 a[0][1]: 2 a[0][2]: 3 a[1][0]: 4 a[1][1]: 7 a[1][2]: 6 a[2][0]: 8 a[2][1]: 3 a[2][2]: 2 ð Kết qủa màn hình in ra: Mang hai chieu da nhap: 6 2 3 4 7 6 8 3 2 Nhap hang k: 1 Cac phan tu hang k: 4 7 6 Nhap cot k: 2 Tong cac phan tu cot k: 11 Nhap phan tu x: 6 Phan tu 6 xuat hien tai hang:1 và cot:2 Hang co tong lon nhat: 2. 12.

<span class='text_page_counter'>(13)</span> Bài 22 (TH-CSLT-04): Trò chơi cờ Ca rô được biểu diễn trên một Ma trận An*m ô ( 0 < n, m < 51), trong đó: Trò chơi kết thúc khi một người X hoặc O đạt được 5 ô liên tiếp giống nhau theo chiều ngang, chiều dọc hoặc đường chéo. Trạng thái hòa là trạng thái mà kết thúc toàn bộ bàn cờ mà không có người thắng cuộc. Yêu cầu: - Input: Cho ma trận thể hiện kết quả của cuộc thi đấu cờ Caro - Output: Trạng thái của ván đấu. (X thắng; O thắng; Hòa; Trận đấu chưa kết thúc) HƯỚNG DẪN CHI TIẾT A. Input: B. Output: C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình Bước 2: Nhập dữ liệu Bước 3: Thực hiện xử lý yêu cầu Bước 4: In kết quả lên màn hình D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Lần lượt nhập với yêu cầu sau:. 13.

<span class='text_page_counter'>(14)</span> Bài 23 (TH-CSLT-06): Viết chương trình thực hiện: a) Nhập ma trận vuông n hàng, n cột các số nguyên (n<=50), b) Hiện ma trận đó ra màn hình c) Tính tích hàng k, hàng k nhập từ bàn phím. d) Tìm hàng có tổng các phần tử nhỏ nhất. e) Cho biết có bao nhiêu phần tử âm. f) Sắp xếp các phần tử ma trận giảm dần theo từng cột và hiện ra màn hình ma trận mới. HƯỚNG DẪN CHI TIẾT A. Input: n, a[20][20] //n hàng, n cột - k: hàng cần tính tích B. Output: - a[20][20] - tk: tích các phần tử trên hàng thứ k - hmin: chỉ số hàng có tổng các phần tử nhỏ nhất - da: số phần tử âm có trong ma trận C. Process: //Các bước viết chương trình – hàm main Bước 1: Khai báo các biến chương trình Bước 2: Nhập dữ liệu Bước 3: In lại mảng 2 chiều Bước 4: Tính tích các phần tử tại hàng k - Nhập hàng k cần tính tích - tk = 1; - Duyệt các phần tử trên hàng k và lấy giá trị các phần nhân vào kết quả (các phần tử có cùng chỉ số hàng là k) for(j=0; j<n; j++) tk = tk * a[k][j]; - In giá trị kết quả, in tk Bước 5: Cho biết hàng có tổng nhỏ nhất - Tính tổng hàng 0 và giả sử hàng 0 có tổng nhỏ nhất hmin = 0; for(j=0; j<n; j++) s = s + a[0][j]; smin = s;. 14.

<span class='text_page_counter'>(15)</span> - Duyệt qua các hàng khác, mỗi hàng tính tổng và so sánh với giá trị tổng min (smin) để xác định vị trí hàng có tổng nhỏ nhất for (i=0; i<n; i ++) { s = 0 ; for(j=0; j<n; j++) s = s + a[i][j]; if (s < smin) { smin = s; hmin = i; } } - Thông báo hàng có tổng nhỏ nhất là hàng hmin Bước 6: Đếm số phần tử âm có trong mảng - da = 0; - Duyệt qua các phần tử có trong mảng, kiểm tra nếu giá trị <0 thì tăng biến đếm lên 1 đơn vị for(i=0;i<n;i++) for(j=0; j<n; j++) if (a[i][j]<0) da++; - In số phần tử âm, in giá trị của da D. Chạy thử với bộ dữ liệu Test sau: - Ví dụ 1: Lần lượt nhập với yêu cầu sau: Nhap n: 3 a[0][0]: -6 a[0][1]: -2 a[0][2]: -3 a[1][0]: 4 a[1][1]: 7 a[1][2]: 6 a[2][0]: 8 a[2][1]: 3 a[2][2]: 2 ð Kết qủa màn hình in ra: Ma tran da nhap: -6 -2 -3 4 7 6 8 3 2 Nhap hang k: 1 15.

<span class='text_page_counter'>(16)</span> Tich hang k: 168 Nhap cot k: 2 Hang co tong nho nhat: 0 So phan tu am: 3. 16.

<span class='text_page_counter'>(17)</span>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×