Bài tập C – Học ngày 8/5/2009

Chủ đề:
1. File trong C
2. Sinh số ngẫu nhiên
3. Số nguyên tố
4. Xử lý mảng
Đề bài:
Viết chương trình sinh n số nguyên ngẫu nhiên (mỗi số không quá 10000, n không quá 1000), ghi mảng vào file dat1.txt: đầu tiên là số phần tử (n) sau đó là các số nguyên, các số ngăn cách với nhau bằng 1 dấu cách. Đọc các số nguyên từ file dat1.txt sau đó ghi các số nguyên tố vào file nguyento.txt theo định dạng giống như file dat1.txt.
Thuật toán để kiểm tra các số nguyên từ file dat1.txt và ghi vào file nguyento.txt:
Dùng biến m để lưu số lượng số nguyên tố, ban đầu m bằng 0, sử dụng mảng x để lưu các số nguyên tố đọc được từ file dat1.txt, mỗi lần đọc ra một số và kiểm tra, nếu đúng là số nguyên tố thì tăng m lên 1 đơn vị.
Lời giải:
// Bai giang tren lop ngay 8/5/2009
// Nguyen Huu Tuan – Dai hoc Hang hai Viet Nam
// Email: tuannhtn@yahoo.com, tuannhtn@gmail.com
// Blog: 4fire.wordpress.com

#include
#include
void sinhngaunhien(char * tenfile, int n, int maxval);
void docfile(char * tenfile);
void songuyento(char * file1, char * file2);
int ktnguyento(int n);

int main()
{
int n;
int maxval = 1000;
char file1[] = “dat1.txt”;
char file2[13] = “nt.txt”;
printf(“Nhap n = “);
scanf(“%d”, &n);
sinhngaunhien(file1, n, maxval);
printf(“File ngau nhien:\n”);
docfile(file1);
songuyento(file1, file2);
printf(“\nFile chua cac so nguyen to:\n”);
docfile(file2);
system(“pause”);
return 0;
}

int ktnguyento(int n)
{
int i;
int m;
if (n==1)
return 0;
m = (int)sqrt(n);
for(i=2;i<=m;i++)
if(n % i == 0)
return 0;
return 1;
}

void sinhngaunhien(char * tenfile, int n, int maxval)
{
// sinh ngau nhien n so nguyen nho hon maxval
// ghi n so nguyen vao file co ten la tenfile
int i, x;
FILE * f;
f = fopen(tenfile,”wt”);
if(f==NULL)
{
printf(“Loi mo file %s”, tenfile);
return;
}
srand(time(NULL));
fprintf(f, “%d “, n);
for(i=0;i<n;++i)
{
x = rand() % maxval;
fprintf(f, “%d “, x);
}
fclose(f);
}
void songuyento(char * file1, char * file2)
{
int n, m, i;
int x[10000];
FILE * f1, *f2;
f1 = fopen(file1,”rt”);
f2 = fopen(file2,”wt”);
if(f1==NULL||f2==NULL)
{
printf(“Loi mo file”);
return;
}
fscanf(f1,”%d”, &n);
m = 0;
for(i=0;i<n;++i)
{
fscanf(f1,”%d”, &x[m]);
if(ktnguyento(x[m])==1)
m++;
}
fprintf(f2, “%d “, m);
for(i=0;i<m;++i)
fprintf(f2, “%d “, x[i]);
fclose(f1);
fclose(f2);
}
void docfile(char * tenfile)
{
int i, n;
int x;
FILE * f = fopen(tenfile, “rt”);
if(f==NULL)
{
printf(“Loi mo file %s”, tenfile);
return;
}
fscanf(f,”%d”, &n); // doc so phan tu
// doc tung phan tu
for(i=0;i<n;++i)
{
fscanf(f,”%d”, &x);
printf(“%d “, x);
}
fclose(f);
}

One Response to “Bài tập C – Học ngày 8/5/2009”

  1. bekhoebedep Says:

    Em cám ơn thầy, phần về các luồng vào ra với file bọn em kém quá.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: