1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo thực hành kỹ thuật lập trình

52 750 3

Đ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

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 60,43 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

báo cáo thực hành kỹ thuật lập trình

Trang 1

BÁO CÁO THỰC HÀNH KĨ THUẬT LẬP TRÌNHSinh viên: Nguyễn Thị Dung

MSSV: 201092228

Lớp: CN-CNTT3

Phần 1: Thứ tự thực hiện các phép toán trong C,C++

1.1 Viết chương trình nhập các tham số tương ứng và tính giá trị các biểu thức:

Kết luận:

Trang 2

Sau khi gán d=10, trả về 10; c++trả về tham trị nên không thể gán giá trị 10 được Còn ++c trả

về một tham chiếu nên có thể gán giá trị mà không bị lỗi

1.2 Viết chương trình nhập các tham số tương ứng và tính giá trị các biểu thức

a++,a=10,10++a,a=11,10a,a++=11,10a,++a=11,11

 Viết chương trình nhập vào xâu và in ra số lần xuất hiện mỗi ký tự

Input: nhập 1 xâu

Output: số lần xuất hiện của mỗi kí tự trong xâu đã nhập

Trang 3

Giải pháp: so sánh từng kí tự với các kí tự còn lại trong chuỗi, dùng một mảng mà mỗi phần tử sẽ tăng nếu kí tự đó được lặp lại.

Output: thay kí tự 1 bằng kí tự 2 trong xâu nếu có

Giải pháp: so sánh từng kí tự trong chuỗi với kí tự thứ nhất nhập vào, nếu có kí tự 1 trong chuỗi thì gán kí tự đó bằng kí tự thứ 2

Trang 4

printf("\nky tu '%c' co mat trong xau %d lan\n",chuoi[i],t[i]);

printf("\nnhap vao ki tu thu nhat:");

Trang 5

Output: đưa ra tích của 2 ma trận đã nhập

Giải pháp: giá trị của phần tử cij bằng tổng của từng phần tử hàng i của ma trận A nhân

với từng phần tử của cột j của ma trận B

Trang 9

Input: nhập vào một số thực x

Output: đưa ra căn bậc ba của x đã nhập

Giải pháp: tùy vào tham số x truyền vào là bằng 0, nhỏ hơn 0 hay lớn hơn 0 để trả về giá trị tương ứng cho y là căn bậc ba của x theo biểu thức trên

Giả ngữ:

float canba(float x){

if(x==0) return 0

if(x>0) return exp(ln(x)/3)

else return -exp(ln(-x)/3)

Trang 10

else if(x>0) return exp(log(x)/(3*log(exp(1))));

else return -exp(log(-x)/(3*log(exp(1))));}

Trang 14

if(!allocmatrix(A)) printf("\n Khong du bo nho");

if(!allocmatrix(B)) { printf("\n Khong du bo nho");delete[]B.data[0];delete[]B.data;} if(!allocmatrix(C)) { printf("\n Khong du bo

Phần 6: Đa năng hóa toán tử

6.1 Xây dựng cấu trúc phân số , hàm tiện ích xác lập phân số ( setpPS(int,int), hàm tối giản phân

số, và đa năng hóa các toán tử +,-,*,/, ++,

Input: nhập vào tử số, mẫu số của phân số

Trang 15

Output: đưa ra cấu trúc phân số đa năng hóa các toán tử của phân số

Xác lập phân số: dùng struct có 2 trường tử số và mẫu số;

Hàm setPs truyền vào 2 tham số là tử số và mẫu số

mẫu cho ước số tìm được

int usc(ps p){

Đa năng hóa các toán tử: chồng các toán tử với tham số

truyền vào là 2 phân số, và 1 phân số với 1 số nguyên ps operator+(ps p1,ps p2){ps p;

p.t=p1.t*p2.m+p2.t*p1.m;p.m=p1.m*p2.m;

return tgian(p);

}

ps operator+(ps p,int k){p.t=p.t+k*p.m;

return tgian(p);

}Các toán tử khác tương tựChương trình:

Trang 20

printf("\n p1=%d/%d,p2=%d/%d",p1.t,p1.m,p2.t,p2.m); p2= operator++(p1)+ operator*(p1,2);

printf("\n p1=%d/%d,p2=%d/%d",p1.t,p1.m,p2.t,p2.m); p2= (operator*(p1,2))+ operator++(p1);

printf("\n p1=%d/%d,p2=%d/%d",p1.t,p1.m,p2.t,p2.m); p2= (operator*(p1,2))+ operator++(p1,1);

printf("\n p1=%d/%d,p2=%d/%d",p1.t,p1.m,p2.t,p2.m);p2= operator++(p1) + (operator*(p1,2));

printf("\n p1=%d/%d,p2=%d/%d",p1.t,p1.m,p2.t,p2.m); p2= operator++(p1,1) + (operator*(p1,2));

printf("\n p1=%d/%d,p2=%d/%d",p1.t,p1.m,p2.t,p2.m); getch();

}

Kết quả chạy chương trình:

Tu so:1;mau so: 1, nhap vao so nguyen : a=1

Trang 21

p1=1/1,p2=4/1p1=1/1,p2=3/1Các thực hiện phép toán ++, của trình dịch với cách thực hiện do ta định nghĩa là khác nhau Cách cài đặt của trình dịch luôn ưu tiên các phép toán ++, nhưng theo bảng thứ tự ưu tiên các phép toán thì không phải vậy.

6.3 Xây dựng cấu trúc Time và đa năng hóa các toán tử

Input: Nhập vào một giờ bất kỳ

Output: Đưa ra cấu trúc giờ và đa năng hóa các toán tử có thể của Time

Sử dụng struct để tạo cấu trúc Time với các

trường giờ, phút, giây typedef struct{int gio;int phut;int giay;

}time;

Để dễ tính toán ta viết hàm convert từ giờ sang

giây và ngược lại

long int giay(time t){

return t.gio*3600+t.phut*60+t.giay;

}time gio(long int g){

Đa năng hóa các toán tử +,- với tham số truyền

vào là 2 time và 1 tham số time với 1 tham số

kiểu nguyên;

Đa năng hóa các toán tử ++, với time

time operator+(time t1,time t2){

if(k<=60)g+=k*60;

else g+=k;

return gio(g);

}Các toán tử khác tương tự

Chương trình:

#include<stdio.h>

#include<conio.h>

Trang 22

time gio(long int g)

Trang 27

Phần 7: Mảng và chồng toán tử.

7.1 xây dựng cấu trúc matrix với các trường kiểu nguyên R và C để xác định số hàng và số cột của ma trận, trường float ** data để cấp phát bộ nhớ động dùng mảng hai chiều Và dịnh nghĩa các phép toán +, * để cộng và nhân 2 ma trận:

Input: nhập vào hai ma trận với cả số thực và số phức

Output: đưa ra cấu trúc ma trận và đưa ra tổng, tích của 2 ma trận

Trang 28

A.a = new sp* [A.dong];

for ( i=0; i<A.dong; i++)

A.a[i] = new sp [A.cot];

Trang 30

C.a[i][j].thuc=A.a[i][j].thuc+B.a[i][j].thuc; C.a[i][j].ao=A.a[i][j].ao+B.a[i][j].ao; }

Trang 33

for (i=1; i<7;i++) i[m] =i*2;

for (i=1;i<7;i++) printf(“\nm[%d]=%d”,i,m[i]);

x1 = Dai hoc bach khoa ha noix2 = xau x2

Kết luận:

Trang 34

Về mảng m[]:

 Mảng m[] ta chỉ khai báo kích thước 5 phần tử nhưng thực tế chương trình lại dùng tới 6phần tử nhưng chương trình vẫn không bị lỗi vì trình dịch C không kiểm soát lỗi vượt mảng, thực tế có thể sử dụng mảng nhiều hơn kích thước đã khai báo nhưng chỉ tới một giới hạn nhất định thôi

 Đúng ra viết phần tử thứ i của mảng m phải là m[i] nhưng trong chương trình là i[m], kết quả vẫn đúng vì m[i] sẽ được trình dịch hiểu là *(m+i) nên khi viết i[m] sẽ được hiểu

là *(i+m) vẫn đúng tuy nhiên m[] là 1 mảng, còn i chỉ là 1 biến thôi sẽ có cận dưới và cận trên, nếu lạm dụng sẽ rất nguy hiểm

Về xâu:

 2 xâu s1,s2 là 2 con trỏ kiểu char, khi được khởi tạo bằng toán tử new thì mỗi biến cũng được cấp phát 1 vùng nhớ nhưng 2 vùng nhớ đó là liên tục, xâu s1 được cấp 1 vùng nhớ kích thước 10 phần tử nhưng vì xâu gán vào có độ dài hơn 10 phần tử nên bị ghi tràn sang các ô nhớ tiếp theo của xâu s2 dù là xâu s2 được gán giá trị trước xâu s1, dẫn đến kết quả không đúng

 2 xâu x1,x2 được khai báo là một mảng kiểu char nên mỗi biến sẽ được cấp phát một vùng nhớ nào đó và thường 2 vùng nhớ đó không liên tục nên không bị ghi đè và kết quả luôn đúng

Phần 9: Đệ qui

9.1 Viết hàm đệ qui tính tổng các chữ số chẵn( lẻ) của số nguyê n dương n

Input: Nhập vào một số nguyên dương n

Output: Đưa ra tổng các chữ số lẻ của n đã nhập vào

}Bước đệ qui: ta chia n cho 10 lấy phần dư cho

từng chữ số, xét chữ số đó là chẵn thì cộng

vào lời gọi đệ quy với tham số đã chia cho 10

b=n%10;

n=n/10;

if(b%2==1) return le(n)+b;

else return le(n);

}Chương trình:

#include<stdio.h>

#include<conio.h>

Trang 35

if(b%2==1) return b+recsum(n);

else return recsum(n);

Trang 36

Input: Nhập vào 1 số nguyên n và 1 cơ số (2,8,16)

Output: Đưa ra dãy số n trong cơ số đã nhập

{

Trang 37

} n=n/b;

Trang 38

Input: Nhập vào số nguyên n

Output: Đưa ra tổng căn theo biểu thức S trên

Bước cơ sở: khi x=n thì trả về căn của n Float can(float x,int n){

If(x==n) return sqrt(n);Bước đệ quy: khi x<n thì trả về căn của tổng x với lời gọi đệ quy

có tham số là x+1 và n

Else return sqrt(x+can(x+1,n));}

Trang 39

Input: Nhập vào 1 số nguyên n

Output: Đưa ra tổng các phân số theo biểu thức S

Bước cơ sở: nếu n = 1 thì trả về 1/2 Float S(int n){

If(n==1) return 0.5;

Bước đệ qui: trả về tổng của số hạng cuối với n-1 số

hạng trước qua lời gọi đệ qui có tham số truyền vào là

n-1

Else return S(n-1)+(2*n-1)/2n;}

Trang 40

Input: Nhập vào 1 số nguyên n

Output: đưa ra tổng theo biểu thức S đã cho

Trang 42

Phần 10: Bài tập trong chương IV

10.1 Liệt kê mọi tập con của tập 1,2,3,…n, với n nhập từ bàn phím

Input: Nhập vào 1 số nguyên dương n

Output: Đưa ra tất cả các tập con của n

Bước cơ sở: nếu số phần tử của tập con bằng n

thì in ra luôn Void hoanvi(){If(n==j) printf(“%d”,c[i]);Bước đệ quy: gọi đệ quy quay lui Else hoanvi();

Trang 44

Input: xâu “COMPUTER”

Output: Đưa ra các hoán vị của từ COMPUTER

Giải pháp:

 Bước tổng quát: nếu đã duyệt hết một lượt xâu thì in ra xâu đã hoán vị

 Bước đệ qui: gọi đệ quy quay lui

Trang 45

10.3 Một nhà thám hiểm đem theo 1 cái túi với trọng lượng tối đa là B Có n đồ vật cần mang

theo, mỗi đồ vật có trọng lượng ai và giá trị ci tương ứng Hãy viết chương trình tìm cách bỏ vào

túi các đồ vật sao cho giá trị sử dụng lớn nhất

Input: nhập vào số đồ vật với trọng lượng và giá trị tương ứng

Output: đưa ra những đồ vật có tổng giá trị lớn nhất mà không vượt quá trọng lượng B

Trang 46

if(s<=trọng lượng tối đa B) sum+=C[i]*A[i];

tiếp tục cho tới khi hết mảng A;

Trang 49

 Đánh số các cột và dòng của bàn cờ từ 1 đến n, một cách sắp xếp hậu được biểu diễn bởi

bộ (a1, a2,…,an)

Các bộ trên phải thỏa mãn ai≠a j và |a i-a j| ≠|i-j| với mọi i≠j

Mã giả:

int NBhau(int j,int k){

for(i=0;i<k;i++) if( j==a[i] hoặc |j-a[i]|==k-i))

Trang 50

int Hau(int i){

if(count==0) printf("\n nothing");

getchar();

}

Ngày đăng: 17/07/2015, 12:32

TỪ KHÓA LIÊN QUAN

w