Hãy viết chương trình liệt kê tất cả các phần tử của tập D được xác định như dưới đây: Dữ liệu vào cho bởi file data.in theo khuôn dạng như sau: Dòng đầu tiên ghi lại hai số tự nhiên n
Trang 11 TÌM KẾT QUẢ THỰC HIỆN CHƯƠNG TRÌNH
2 CHUYỂN ĐỔI CHƯƠNG TRÌNH
1 Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây
printf("\n Buoc %d:",++dem);
for(int i=0; i<n; i++)
Trang 2break;
} j++;
Trang 3printf("\n Buoc %d:",++dem); for(int i=0; i<n; i++) if(X[i])
Trang 4printf("\n Buoc %d:",++dem); int i=0;
while(i<n){
while(X[i]){
printf("%4c",S[i]); break;
Funtion(i+1);
break;
} j++;
Trang 5void Funtion(int i){
for (int j=X[i-1]+1;j<=n-k+i;j++){
Trang 6break;
} j++;
Trang 7void Funtion(int i){
for (int j=X[i-1]+1;j<=n-k+i;j++){
Trang 8int i=1;
while(i<=k){
printf("%3d",S[X[i]-1]); i++;
Funtion(i+1);
break;
} j++;
Trang 9#include <stdio.h>
#include <conio.h>
int A[] = {4, 3, 7, 8, 6, 2, 5,}, n=7, OK=1,dem=0;
void Result(void){
printf("\n Ket qua buoc %d:",++dem);
for(int i=0; i<n; i++) printf("%4d",A[i]);
} else {
if(A[i]>A[i+1]){
int t=A[i];A[i]=A[i+1];A[i+1]=t; }
Ket qua buoc 1: 4 3 7 8 6 2 5
Ket qua buoc 2: 4 3 7 8 6 2 5
Ket qua buoc 3: 4 3 8 7 6 2 5
Ket qua buoc 4: 4 3 8 6 7 2 5
Ket qua buoc 5: 4 3 8 6 7 2 5
Ket qua buoc 6: 4 3 8 6 7 2 5
Trang 10} while(OK1){
while(A[i]>A[i+1]){
int t=A[i];A[i]=A[i+1];A[i+1]=t; break;
} break;
Trang 11#include <stdio.h>
#include <conio.h>
int A[] = {4, 3, 7, 8, 6, 2, 5,}, n=7, OK=1,dem=0;
void Result(void){
printf("\n Ket qua buoc %d:",++dem);
for(int i=0; i<n; i++) printf("%4d",A[i]);
} else {
if(A[i]<A[i+1]){
int t=A[i];A[i]=A[i+1];A[i+1]=t; }
Ket qua buoc 1: 3 4 7 8 6 2 5
Ket qua buoc 2: 3 7 4 8 6 2 5
Ket qua buoc 3: 3 7 4 8 6 2 5
Ket qua buoc 4: 3 7 4 8 6 2 5
Ket qua buoc 5: 3 7 4 8 2 6 5
Ket qua buoc 6: 3 7 4 8 2 6 5
Trang 12} while(OK1){
while(A[i]<A[i+1]){
int t=A[i];A[i]=A[i+1];A[i+1]=t; break;
} break;
Trang 13TEST 2
2.1.Cho dãy gồm n số tự nhiên phân biệt a 1 , a 2 , , a n và số tự nhiên K và một ngưỡng giá trị θ
Hãy viết chương trình liệt kê tất cả các phần tử của tập D được xác định như dưới đây:
Dữ liệu vào cho bởi file data.in theo khuôn dạng như sau:
Dòng đầu tiên ghi lại hai số tự nhiên n , K và θ Hai số được viết cách nhau bởi một vài
khoảng trống
N dòng kế tiếp mỗi dòng ghi lại bộ đôi ( a i c i ) Hai số khác nhau được viết cách nhau
bởi một vài kí tự trống
Kết quả ra ghi lại trong file ketqua.out theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên k là số phần tử của tập D.
k dòng tiếp theo mỗi dòng ghi lại một vector nhị phân X = (x 1 , x 2 , , x n ) là phần tử của D Hai thành phần khác nhau của vector x được viết cách nhau bởi một vài khoảng trống.
Ví dụ với n =6, K = 20, θ=24 { a 1 , a 2 , a 3 , a 4 , a 5 , a 6 ,} = {2, 4, 6, 8, 10, 12 }, { c 1 , c 2 , c 3 , c 4 , c 5 ,
nhị phân độ dài n trong file ketqua.out dưới đây:
Trang 14fprintf(fp,"%d\n",count);
fclose(fp);
return 0;
}
Trang 152.2 Cho ai, ci , K, N (i =1, 2, ,N; N100) là những số nguyên dương và tập hợp
Dữ liệu vào cho bởi file data.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N và K Hai số được viết cách nhau một vài khoảng
trống;
N dòng kế tiếp mỗi dòng ghi lại bộ đôi ( a i c i ) Hai số khác nhau được viết cách
nhau bởi một vài kí tự trống
Giá trị tối ưu FOPT và phương án XOPT tìm được ghi lại trong file ketqua.out theo khuôn
dạng:
Dòng đầu tiên ghi lại giá trị tối ưu FX(X);
Dòng kế tiếp ghi lại phương án tối ưu XOPT Hai phần tử khác nhau của phương án
tối ưu được viết cách nhau bởi một vài khoảng trống
Ví dụ với sau sẽ minh họa khuôn dạng cho file data.in và ketqua.out của bài toán
Trang 16void Result(void){
fprintf(fp,"%3d\n",FOPT);for(int i=1;i<=n;i++)
fprintf(fp,"%3d",XOPT[i]);}
fclose(fp);
return 0;
}
Trang 172.3 Cho ai, ci , K, N (i =1, 2, ,N; N100) là những số nguyên dương và tập hợp
Dữ liệu vào cho bởi file data.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N và K Hai số được viết cách nhau một vài khoảng
trống;
N dòng kế tiếp mỗi dòng ghi lại bộ đôi ( a i c i ) Hai số khác nhau được viết cách
nhau bởi một vài kí tự trống
Giá trị tối ưu FOPT và phương án XOPT tìm được ghi lại trong file ketqua.out theo khuôn
dạng:
Dòng đầu tiên ghi lại giá trị tối ưu FX(X);
Dòng kế tiếp ghi lại phương án tối ưu XOPT Hai phần tử khác nhau của phương án
tối ưu được viết cách nhau bởi một vài khoảng trống
Ví dụ với sau sẽ minh họa khuôn dạng cho file data.in và ketqua.out của bài toán
Trang 18void Result(void){
fprintf(fp,"%3d\n",FOPT);for(int i=1;i<=n;i++)
fprintf(fp,"%3d",XOPT[i]);}
void Update(void){
int S=0,F=0;
for(int i=1;i<=n;i++){
S=S+A[i]*X[i];F=F+C[i]*X[i];}
if(S==k&&F<FOPT){
FOPT=F;
for(int j=1;j<=n;j++)XOPT[j]=X[j];
Result();
fclose(fp);
return 0;
}
Trang 192.4 Một công ty lữ hành cần xây dựng các tour du lịch đi qua N điểm Xuất phát tạithành phố số 1 công ty lữ hành muốn xây dựng các tour có chi phí đúng bằng K,đi quatất cả các điểm còn lại, mỗi điểm đúng một lần rồi trở lại điểm ban đầu Biết chi phí đi lại
từ điểm thứ i đến điểm thứ j là cij
Dữ liệu vào cho bởi file chiphi.in theo khuôn dạng sau:
Dòng đầu tiên ghi lại số tự nhiên N , K là số điểm các tour du lịch và chi phí củatour
N dòng kế tiếp ghi lại ma trận chi phí C = (cij) Hai phần tử khác nhau của matrận C = (cij) được ghi cách nhau bởi một vài khoảng trống
Hãy viết chương trình liệt kê tất cả các tour du lịch có chi phí đúng bằng K cho công
ty du lịch Ghi lại các Tour trên mỗi dòng Hai điểm khác nhau của Tour được viếtcách nhau một khoảng trống Nếu không thể xây dựng được bất ký Tour nào hãy đưa
ra thông báo “Tour không tồn tại”
Ví dụ về dưới đây sẽ minh họa cho file data.in và ketqua.out của bài toán
Trang 20}}
Trang 21là θ được ghi lại giá tri 0.
Hãy sử dụng thuật toán DFS// BFS viết chương trình tìm đường đi từ đỉnh u đến đỉnh
v của đồ thị Nếu không tồn tại đường đi thì đưa ra thông báo “Không tồn tại đường đi”.Nếu tồn tại đường đi từ u đến v hãy ghi lại đường đi theo thứ tự ngược từ v đến
u vào file ketqua.out ( như hình dưới đây)
//printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");
Dothi.in
5 1 52
1 3 4
2 4
1 3 54
Ketqua.Out
5<= 4<= 3<= 2<= 1
Trang 22int dau, cuoi; char str[132], tu[12];
//Doc va chuyen doi thanh ma tran ke
// printf("\n So dinh do thi:%d",n);
// printf("\n So dinh do thi:%d",s);
// printf("\n So dinh do thi:%d",t);
tu[p]=str[j]; p++;
}else if( p>0 && (str[j]==' '||str[j]=='\t'||str[j]=='\0'||str[j]=='\n')){
Trang 23} void BFS(int i){//Thu?t toán BFS
int queue[MAX], low=1, high=1, u, v;
} }
void Duongdi (void){
Trang 24int j = t;fprintf(fp,"%3d<=",j);
while(truoc[j]!=s){
fprintf(fp,"%3d<=",truoc[j]);j=truoc[j]; }
fprintf(fp,"%3d",s);
//getch();
fclose(fp);
}
//Khoi dau lai mang chuaxet[]
//Khoi dau lai mang chuaxet[]
Duongdi ();
fclose(fp);
}
Trang 252 Duyệt các thành phần liên thông
int dau, cuoi; char str[132], tu[12];
//Doc va chuyen doi thanh ma tran ke
Trang 26printf("\n So dinh do thi:%d",n);Init();
for( dau=1; dau<=n; dau++){
fgets(str,132,fp);
for(int j=0, p=0; j<=strlen(str); j++){
//tach tuif(str[j]!=' '&&str[j]!='\t'&&str[j]!='\0'&& str[j]!='\n'){
tu[p]=str[j]; p++;
}else if( p>0 && (str[j]==' '||str[j]=='\t'||str[j]=='\0'||str[j]=='\n')){
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
//printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
} }
Trang 27}fprintf(fp,"\n");
Trang 28cuoi = cuoi+1;
queue[cuoi]=t;
chuaxet[t]=FALSE;
} }
} }
//Khoi dau lai mang chuaxet[]
Trang 29int dau, cuoi; char str[132], tu[12];
//Doc va chuyen doi thanh ma tran ke
printf("\n So dinh do thi:%d",n);Init();
for( dau=1; dau<=n; dau++){
fgets(str,132,fp);
Trang 30if(cuoi!=0) { m++; A[dau][cuoi]=1; } //thiet lap gia tri cho ma tran ke
} }
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
//printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
} }
Trang 31}
main(void) {
//cho danh sach canh > MTK
Thuật toán sinh:
1 Sinh xâu nhị phân:
} else ok=0;
Trang 32if(r <=k){
int t=X[r]; X[r]=X[k]; X[k] = t; r++; k ;
} }
else ok=0;
}
Thuật toán quay lui:
1 Quay lui ( liệt kê xâu nhị phân)
Void Try(int i){
2 Quay lui (liệt kê hoán vị):
Void Try(int i){
else Try(i+1); chuaxet[j]=1;
} }
Trang 33for(int i=1; i<=m; i++){
int dau, cuoi;
fscanf(fp,”%d%d”, &dau, &cuoi); A[dau][cuoi]=1;
A[dau][cuoi]=1;
} else {s[k]=str[i]; k++;} }
} }fclose(fp);
Void BFS(int u){
int Queue[max], dau=0, cuoi=0;
Trang 34for(int u=1; u<=n; u++){
Read_MTK();//Read_DSC() || Read_DSK() fp=fopen(“ketqua”,”w”);
<gọi các hàm liên quan>;
Trang 35else if(Test_Euler()==-1) Euler(u);
else fprintf(fp,”do thi khong phai Euler”);
fclose(fp);
}
3 TÌM KẾT QUẢ THỰC HIỆN CHƯƠNG TRÌNH
4 CHUYỂN ĐỔI CHƯƠNG TRÌNH
2 Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây
#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0; void Result(int *A, int n){
count++; printf("\n Buoc %d:",count);
for(int i=0; i<n; i++) printf("%4d",A[i]);
Trang 36#include <stdio.h>
#include <conio.h>
int A[] = {19, 12, 18, 13, 10, 14, 16, 11, 15, 17}, n=10, count=0;
void Result(int *A, int n){
count++; printf("\n Buoc %d:",count);
}Result(A,n);
count++; printf("\n Buoc %d:",count);
for(int i=0; i<n; i++) printf("%4d",A[i]);
Trang 37for(j=i-1; j>=0 && temp < A[j]; j ){
A[j+1]=A[j];
} A[j+1] = temp;Result(A,n);
i++;
Trang 38count++; printf("\n Ket qua buoc %d:",count);
for(int i=0; i<n; i++) printf("%4d",A[i]);
} getch();
}
Kết quả
Ket qua buoc 1: 10 19 12 18 13 11 14 16 15 17
Ket qua buoc 2: 10 11 19 12 18 13 14 15 16 17
Ket qua buoc 3: 10 11 12 19 13 18 14 15 16 17
Ket qua buoc 4: 10 11 12 13 19 14 18 15 16 17
Ket qua buoc 5: 10 11 12 13 14 19 15 18 16 17
Ket qua buoc 6: 10 11 12 13 14 15 19 16 18 17
Ket qua buoc 7: 10 11 12 13 14 15 16 19 17 18
Ket qua buoc 8: 10 11 12 13 14 15 16 17 19 18
Ket qua buoc 9: 10 11 12 13 14 15 16 17 18 19
Trang 39} Result(A,n);
printf("\n Ket qua buoc %3d:",++count);
for (int i=0; i<n; i++) printf("%3d",B[i]);
Ket qua buoc 1: 0 0 0 0 0
Ket qua buoc 2: 0 0 0 0 1
Ket qua buoc 3: 0 0 0 1 0
Ket qua buoc 4: 0 0 0 1 1
Ket qua buoc 5: 0 0 1 0 0
Ket qua buoc 6: 0 0 1 0 1
Ket qua buoc 7: 0 0 1 1 0
Ket qua buoc 8: 0 0 1 1 1
Ket qua buoc 9: 0 1 0 0 0
Ket qua buoc 10: 0 1 0 0 1
Ket qua buoc 11: 0 1 0 1 0
Ket qua buoc 12: 0 1 0 1 1
Ket qua buoc 13: 0 1 1 0 0
Ket qua buoc 14: 0 1 1 0 1 Ket qua buoc 15: 0 1 1 1 0 Ket qua buoc 16: 0 1 1 1 1 Ket qua buoc 17: 1 0 0 0 0 Ket qua buoc 18: 1 0 0 0 1 Ket qua buoc 19: 1 0 0 1 0 Ket qua buoc 20: 1 0 0 1 1 Ket qua buoc 21: 1 0 1 0 0 Ket qua buoc 22: 1 0 1 0 1 Ket qua buoc 23: 1 0 1 1 0 Ket qua buoc 24: 1 0 1 1 1 Ket qua buoc 25: 1 1 0 0 0 Ket qua buoc 26: 1 1 0 0 1
Trang 40Ket qua buoc 27: 1 1 0 1 0
Ket qua buoc 28: 1 1 0 1 1
Ket qua buoc 29: 1 1 1 0 0
Ket qua buoc 30: 1 1 1 0 1 Ket qua buoc 31: 1 1 1 1 0 Ket qua buoc 32: 1 1 1 1 1Chuyển:
Trang 416 Hãy cho biết kết quả thực hiện đoạn chương trình dưới đây.
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0}, n=5,k=3, OK=1, count=0;
void Inketqua(void){
printf("\n Ket qua %3d:",++count);
for(int i=0; i<n; i++) printf("%3d",B[i]);
#include <stdio.h>
#include <conio.h>
Trang 42int B[]={0,0,0,0,0}, n=5,k=3, OK=1, count=0;void Inketqua(void){
printf("\n Ket qua %3d:",++count);
Trang 43printf("\n Ket qua %3d:",++count);
for(int i=0; i<n; i++)
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
Trang 44}i++;
Trang 45printf("\n Ket qua %3d:",++count);
for(int i=0; i<n; i++) printf("%3d",B[i]);
#include <stdio.h>
#include <conio.h>
int B[]={0,0,0,0,0,0,0}, n=7,k=80, OK=1, count=0;
int A[]={5,10,15,20,25,30,35};
Trang 47printf("\n Ket qua %3d:",++count);
for(int i=0; i<n; i++) printf("%3d",B[i]);
Trang 48Ket qua 23: 1 1 0 1 0 0 0 Ket qua 24: 1 1 1 0 0 0 0Chuyển:
Trang 49Kết quả:
Ket qua buoc 1:000
Ket qua buoc 2:001
Ket qua buoc 3:010
Ket qua buoc 4:011
Ket qua buoc 5:100
Ket qua buoc 6:101 Ket qua buoc 7:110 Ket qua buoc 8:111 Ket qua buoc 9:101 Ket qua buoc10:110Chuyển:
Trang 50}/*moi case co cau lenh dang sau ta chuyen thanh 1 whileNeu cau lenh case thu i ko co lenh dang sau, ket hop duoc dkcua while dong duoi no (dong i+ 1) */
while(str[i]!=' ' ||str[i]!='\t' ||str[i]!='\n' ||str[i]!='\r' ||str[i]!='\0'){
s[k++]=str[i];
break;
}i++;
int nguyen_to(unsigned long int n){
unisened long int i, k=sqrt(n);
for(i=2; i<=k; i++) if(n%i==0) return(0);
Trang 51} while(OK); }
Kết quả
Ket qua buoc:1: 2 Ket qua buoc:2: 2 Ket qua buoc:3: 3 Ket qua buoc:4: 3 Ket qua buoc:5: 3 Ket qua buoc:6: 5 Ket qua buoc:7: 5 Ket qua buoc:8: 11 Ket qua buoc:9: 13 Ket qua buoc:10: 17 Ket qua buoc:11: 19 Ket qua buoc:12:23
Trang 52#include <stdio.h>
#include <conio.h>
#include <math.h>
int nguyen_to(unsigned long int n){
unsigned long int i, k=sqrt(n);
for(i=2; i<=k; i++) if(n%i==0) return(0);
while(nguyen_to(n)==0 && n%i==0){
printf("\n Ket qua buoc:%d: %d",++k,i); n = n/i;break;
Trang 53void Result (void) {
printf("\n Ket qua buoc d: %d ",++count);
for (int i=0; i<N; i++) printf("%3d",X[i]); }
Trang 54Ket qua buoc d: 2 0 1 0 1 1
Ket qua buoc d: 3 0 1 1 0 1
Ket qua buoc d: 4 0 1 1 1 0
Ket qua buoc d: 5 1 0 0 1 1
Ket qua buoc d: 6 1 0 1 0 1
Ket qua buoc d: 7 1 0 1 1 0
Ket qua buoc d: 8 1 1 0 0 1
Ket qua buoc d: 9 1 1 0 1 0
Ket qua buoc d: 10 1 1 1 0 0
break;
}return(0);
}
void Result (void) {
printf("\n Ket qua buoc d: %d ",++count);
int i=0;
Trang 55while(j<=1) {
{
X[i]=j;
/*if (i==N-1){
if (Test()) Result();}
else Try(i+1);*/ int OK=1;
while(i==N-1) {
/*if (Test()) */
while(Test()){
Result();
Trang 56break ; } OK=0;
break;
}
while(OK){
Trang 57if (S== K) return(1);
return(0);
}
void Result (void) {
printf("\n Ket qua buoc d: %d ",++count);
for (int i=0; i<N; i++) printf("%3d",X[i]); }
Ket qua buoc d: 1 0 0 1 1 1
Ket qua buoc d: 2 0 1 0 1 1
Ket qua buoc d: 3 0 1 1 0 1
Ket qua buoc d: 4 0 1 1 1 0
Ket qua buoc d: 5 1 0 0 1 1
Ket qua buoc d: 6 1 0 1 0 1
Ket qua buoc d: 7 1 0 1 1 0
Trang 58Ket qua buoc d: 8 1 1 0 0 1
Ket qua buoc d: 9 1 1 0 1 0
Ket qua buoc d: 10 1 1 1 0 0
while(S==K) {return(1);
break ;
}return(0);
}
void Result (void) {
printf("\n Ket qua buoc d: %d ",++count);
Trang 60a) Chứng minh rằng một chương trình được thể hiện bằng tất cả các cấu trúc lệnh
(while, do while, for, if else, switch) đều có thể chuyển đổi thành một chươngtrình mới cho lại kết quả giống như chương trình cũ nhưng chỉ cần dùng tối thiểucấu trúc lệnh lặp while và một số biến phụ
b) Áp dụng kết quả trên chuyển đổi các chương trình từ bài 1 đến bài 10 sử dụng tối
thiểu cấu trúc lệnh lặp while và một số biến phụ
TEST2 XỬ LÝ SỐ:
1 Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều
kiện dưới đây:
(i) K là số có 5 chữ số;
(ii) K là số nguyên tố;
(iii) K là số thuận nghịch (k là số thuận nghịch nếu đọc xuôi hay đọc ngược các chữ
số của k ta đều nhận được một số như nhau Ví dụ số: 30303);
(iv) Biểu diễn của K ở hệ cơ số B ( B bất kỳ được nhập từ bàn phím cũng là một số
thuận nghịch Ví dụ số k=30303 có biểu diễn ở hệ cơ số 8 là 73137 cũng làmột số thuận nghịch;