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

báo cáo bài tập nhập môn hệ điều hành lab 4

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 (1.3 MB, 16 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN </b>

<b>BÁO CÁO BÀI TẬP NMHĐHHK2, 2022-2023</b>

<b>Lab 4</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<small>BÀI 2: ĐỐIVỚIMỘTTỆPCĨCẤUTRÚCSAU:...10</small>

<small>- DỊNGĐẦUTIÊN GHI SỐPHẦN TỬCỦAMẢNG...10</small>

<small>- CÁCDỊNGCỊNLẠI CHỨA PHẦNTỬ NGUN...10</small>

<small>VIẾTCHƯƠNGTRÌNHĐỌCFILE TÌM, CÁCSỐ NGUN TỐ TÍNH TỔNG CÁC SỐ NGUYÊN TỐ NÀY VÀ XUẤT RA FILE KẾT QUẢ CÓ CẤU , </small>

<small>TRÚC NHƯ SAU:...10</small>

<small>- DỊNGĐẦUTIÊN CHỨA SỐNGUNTỐ CĨ TRONG MẢNG ...10</small>

<small>- DÒNGTIẾPTHEO XUẤTRASUM TỔNG = CÁCSỐ NGUYÊN TỐ...10</small>

<small>- DỊNGTẠORACÁCSỐ NGUN TỐ TÌM ĐƯỢC ...10</small>

<small>- DỊNGSỐ NGUYÊN TỐTIẾPTHEO SẮP TĂNG...10</small>

<small>XUẤTRATỆPKẾTQUẢVỚI CẤU TRÚC SAU:...13</small>

<small>- DÒNGĐẦUTIÊN GHI SỐPHẦN TỬ...13</small>

<small>- DÒNGTIẾPTHEO CHỨA SỐNHỎNHẤT...13</small>

<small>- DÒNGTIẾPTHEO GHI SỐLỚN NHẤT...13</small>

<small>- DÒNGĐỂ XUẤTCÁCPHẦN TỬCỦAMẢNG...13</small>

<small>A: CODE HƯƠNG RÌNH C T...13</small>

<i><small>B: Kết Quả Demo:...15</small></i>

<b><small>C. KẾT LUẬN... 16</small></b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

A. PH N TH C HÀNHẦỰ

Ví D 1: ụ Chờ ti n trình conếA: Code Chươ ng Trình

// vd1.c

#include <stdio.h>#include <unistd.h>

int main(int argc, char *argv[]){

int pnum, count, retval, child_no; pnum = atoi(argv[1]);

if (pnum <= 0) {

printf("tien trinh = 0"); return -1;

} else {

retval = 1; /*tao tien trinh*/

for (count = 0; count < pnum; count++) {

if (retval != 0) {

retval = fork(); }

else { break; } }

/*Thuc thi cua tien trinh con*/ if (retval == 0)

{

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

child_no = count;

printf("Tien trinh so: %d, PID: %d\n", child_no, getpid()); }

else {

/*waiting for children termination*/ for (count = 0; count < pnum; count++) {

wait(NULL); }

printf("ID tien trinh cha: %d\n", getpid()); }

} return 0;}

B: K t Qu Demoế ả

Ví D 2: ụ ứCh c năng th c hi n m t chự ệ ộ ươ ng trìnhA: Code Chươ ng Trình

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

printf("Call system to execute ls -a\n"); re = system("ls -a");

if(re != -1) {

printf("Call ls -a OK!\n"); }

printf("Call system to execute ps -a\n"); re = system("ps -a");

if(re != -1) {

printf("Call ps -a OK!\n"); }

return 0;}

B: K t Qu Demoế ả

Ví D 3: ụ Thao tác t p tinậA: Code Chươ ng Trình//vd3.c

#include <unistd.h>#include <stdio.h>#include <stdlib.h>

int main(int argc, char *argv[]){

int c;

FILE *in, *out; in = fopen(argv[1], "r");

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

out = fopen(argv[2], "w"); while((c = fgetc(in)) != EOF) {

fputc(c, out); }

return 0;}

int main(int argc, char *argv[]){

int c, num, count = 0, i = 0; int ar[100];

FILE *in, *out; in = fopen(argv[1], "r"); fscanf(in, "%d", &num); while (i < num) {

fscanf(in, "%d", &c); ar[i] = c;

i = i + 1; } fclose(in);

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

return 0;}

#include <stdio.h>#include <stdlib.h>

int main(int argc, char *argv[]) { if (argc != 3) {

printf("Sử dụng: %s tệp_nguon tệp_dich\n", argv[0]);

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

return 1; }

char *tep_nguon = argv[1]; char *tep_dich = argv[2];

FILE *tep_nguon_fp = fopen(tep_nguon, "rb"); if (tep_nguon_fp == NULL) {

perror("Lỗi khi mở tệp nguồn"); return 1;

}

FILE *tep_dich_fp = fopen(tep_dich, "wb"); if (tep_dich_fp == NULL) {

perror("Lỗi khi mở tệp đích"); fclose(tep_nguon_fp); return 1;

}

char buffer[1024]; size_t so_byte_doc;

while ((so_byte_doc = fread(buffer, 1, sizeof(buffer), tep_nguon_fp)) > 0) { fwrite(buffer, 1, so_byte_doc, tep_dich_fp);

}

fclose(tep_nguon_fp); fclose(tep_dich_fp);

printf("Sao chép tệp thành công từ %s đến %s\n", tep_nguon, tep_dich); return 0;

}

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Vi t ch ng trình đ c file, tìm các s ngun t , tính t ng các s

nguyên t này và xu t ra file k t qu có c u trúc nh sau:ố ấ ế ả ấ ư- Dòng đ u tiên ch a s nguyên t có trong m ngầ ứ ố ố ả- Dịng ti p theo xu t ra sum = t ng các s nguyên tế ấ ổ ố ố- Dòng t o ra các s nguyên t tìm đạ ố ố ượ c.

- Dòng s nguyên t ti p theo s p tăngố ố ế ắA: Code Chươ ng Trình:

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

// Hàm kiểm tra xem một số có phải là số nguyên tố hay khôngbool isPrime(int n) {

if (n <= 1) { return false; }

for (int i = 2; i * i <= n; i++) { if (n % i == 0) {

return false; }

} return true;}

fscanf(inputFile, "%d", &n); int primeSum = 0;

primeSum += num; primes[primeCount] = num; primeCount++;

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

} }

// Lưu kết quả vào tệp f2

fprintf(outputFile, "%d\n", primeCount); fprintf(outputFile, "Sum = %d\n", primeSum); for (int i = 0; i < primeCount; i++) {

fprintf(outputFile, "%d ", primes[i]); }

fprintf(outputFile, "\n");

// Tìm và lưu danh sách các số nguyên tố còn lại for (int num = 2; primeCount > 0; num++) { if (isPrime(num)) {

fprintf(outputFile, "%d ", num); primeCount--;

} }

fclose(inputFile); fclose(outputFile); return 0;}

B: K t Qu Demo:ế ả

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

BÀI : Vi t ch3ế ươ ng trình th c hi n các nhi m v sau:ự ệ ệ ụ- Nh p s ph n t m ng nậ ố ầ ử ả

- Nh p m ng n ph n t là các s nguyên t ng u nhiên nh

h n 1000 (dùng hàm rand)ơ

- Tìm s nh nh tố ỏ ấ

Xu t ra t p k t qu v i c u trúc sau:ấ ệ ế ả ớ ấ

- Dòng đ u tiên ghi s ph n tầ ố ầ ử- Dòng ti p theo ch a s nh nh tế ứ ố ỏ ấ- Dòng ti p theo ghi s l n nh tế ốớ ấ- Dòng đ xu t các ph n t c a m ng.ể ấ ầ ử ủ ảA: Code Chươ ng Trình

// bai3.c

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <time.h>

// Hàm kiểm tra xem một số có phải là số ngun tố hay khơngbool isPrime(int n) {

if (n <= 1) { return false; }

for (int i = 2; i * i <= n; i++) { if (n % i == 0) {

return false; }

} return true;}

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

primeArray[primeCount] = num; primeCount++;

} }

// Tìm số nhỏ nhất trong mảng int smallest = primeArray[0]; for (int i = 1; i < n; i++) { if (primeArray[i] < smallest) { smallest = primeArray[i]; }

}

// Ghi kết quả vào tệp văn bản FILE *outputFile = fopen("f2", "w"); if (outputFile == NULL) {

perror("Lỗi khi mở tệp"); return 1;

}

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

fprintf(outputFile, "%d\n", n);

fprintf(outputFile, "Số nhỏ nhất: %d\n", smallest); fprintf(outputFile, "Dãy số nguyên tố:\n"); for (int i = 0; i < n; i++) {

fprintf(outputFile, "%d ", primeArray[i]); }

</div>

×