Ghi dữ liệu vào file thông qua toán tử c++ năm 2024

Cho file tập tin sinhvien.txt chứa danh sách các tên sinh viên của trường đại học X, hãy chuẩn hóa và loại bỏ các dấu cách thừa giữa tên sinh viên và lưu vào file sinhvien_out.txt

File sinhvien.txt có khuôn mẫu như sau : Dòng đầu là số lượng sinh viên, các dòng sau là tên sinh viên mỗi sinh viên trên 1 dòng

Để làm được bài này bạn cần biết chuẩn hóa tên người, bạn có thể tham khảo tại đây

sinhvien.txtsinhvien_out.txt

4

nguyen HoaNG aNH

NguyEN thi THuy LInh

PhAM ngOC nam

LuoNG Thi VAn

4

Nguyen Hoang Anh

Nguyen Thi Thuy Linh

Pham Ngoc Nam

Luong Thi Van

Code :

include "stdio.h"

include "string.h"

include "ctype.h"

char* chuanHoaTu(char *s){

s[0] = toupper(s[0]);  
for(int i = 1; i < strlen(s); i++){  
    s[i] = tolower(s[i]);  
}  
return s;  
} char *chuanHoaTen(char *s, char *res){
char *token = strtok(s, " ");  
while(token != NULL){  
    strcat(res, chuanHoaTu(token));  
    token = strtok(NULL, " ");  
    if(token != NULL){  
        strcat(res, " ");  
    }  
}  
return res;  
} int main(){
FILE *in;  
in = fopen("sinhvien.txt", "r");  
if(in == NULL){  
    printf("File not found !\n");  
}  
else{  
    FILE *out;  
    out = fopen("sinhvien_out.txt", "w");  
    int n;  
    fscanf(in, "%d", &n);  
    fprintf(out, "%d\n", n);  
    fgetc(in);  
    char name[100], s[100];  
    for(int i = 0; i < n; i++){  
        fgets(s, 100, in);  
        s[strlen(s) - 1] = '\0';  
        fprintf(out, "%s\n", chuanHoaTen(s, name));  
        strcpy(name, "");  
    }  
    fclose(in);  
    fclose(out);  
}  
return 0;  
}


2. Cấp email sinh viên

Cho danh sách sinh viên trong file sinhvien.txt, hãy cấp email sinh viên theo mẫu : Nguyen Van Nam => [email protected]

Lưu lại danh sách email vào file email.txt

File sinhvien.txt gồm nhiều dòng mỗi dòng là tên 1 sinh viên có thể không chuẩn

sinhvien.txtemail.txt

nguyen HoaNG aNH

NguyEN thi THuy LInh

PhAM ngOC nam

LuoNG Thi VAn

[email protected]

[email protected]

[email protected]

[email protected]

Để làm được bài này bạn cần biết cú pháp đọc hết mọi dòng trong file input và biết cách cấp email từ tên, bạn có thể tham khảo tại đây nếu chưa biết cách cấp email từ tên theo mẫu trên

Code :

include "stdio.h"

include "string.h"

include "ctype.h"

char *chuanHoa(char *name, char *email){

char a[100][50];  
int n = 0;  
for(int i = 0; i < strlen(name); i++){  
    name[i] = tolower(name[i]);  
}  
char *token = strtok(name, " ");  
while(token != NULL){  
    strcpy(a[n], token); ++n;  
    token = strtok(NULL, " ");  
}  
strcpy(email, a[n - 1]);  
int len = strlen(email);  
for(int i = 0; i < n - 1; i++){  
    email[len] = a[i][0];  
    ++len;  
}  
email[len] = '\0';  
strcat(email, "@28tech.com.vn");  
return email;  
} int main(){
FILE *in;  
in = fopen("sinhvien.txt", "r");  
if(in == NULL){  
    printf("File not found !\n");  
}  
else{  
    FILE *out;  
    out = fopen("email.txt", "w");  
    char name[100], email[100];  
    while(fgets(name, 100, in) != NULL){  
        name[strlen(name) - 1] = '\0';  
        fprintf(out, "%s\n", chuanHoa(name, email));  
        strcpy(email, "");  
    }  
    fclose(in);  
    fclose(out);  
}  
return 0;  
}


3. Sắp xếp danh sách sinh viên theo gpa

Cho danh sách sinh viên trong file sinhvien.txt, mỗi sinh viên gồm tên, lớp, ngày sinh và điểm gpa. Thông tin mỗi sinh viên được ghi trên 1 dòng, các thông tin cách nhau 1 dấu ','

Thực hiện sắp xếp lại danh sách sinh viên này và ghi vào file sinhvien_out.txt với điểm gpa giảm dần

sinhvien.txtsinhvien_out.txt

Nguyen Van 28Tech,CNTT1,22/12/2004,3.5

Hoang Van Long,DTVT1,01/10/2003,3.8

Pham Van Nam,CNTT2,10/07/2004,2.5

Pham Thuy Linh,CNTT1,05/05/2003,3.1

Hoang Van Long,DTVT1,01/10/2003,3.8

Nguyen Van 28Tech,CNTT1,22/12/2004,3.5

Pham Thuy Linh,CNTT1,05/05/2003,3.1

Pham Van Nam,CNTT2,10/07/2004,2.5

Để giải quyết bài toán này bạn cần đọc từng dòng để lấy thông tin sau đó tách thông tin ra và lưu vào struct, sắp xếp mảng struct và cuối cùng ghi vào file output

Code :

include "stdio.h"

include "string.h"

include "ctype.h"

include "stdlib.h"

struct SinhVien{

char ten[100];  
char lop[20];  
char ngaysinh[50];  
double gpa;  
}; typedef struct SinhVien SinhVien; int cmp(const void *a, const void *b){
SinhVien *x = (SinhVien*)a;  
SinhVien *y = (SinhVien*)b;  
if(x->gpa > y->gpa)  
    return -1;  
return 1;  
} int main(){
FILE *in;  
SinhVien a[1000]; int n = 0;  
in = fopen("sinhvien.txt", "r");  
if(in == NULL){  
    printf("File not found !\n");  
}  
else{  
    FILE *out;  
    out = fopen("sinhvien_out.txt", "w");  
    char data[200], email[100];  
    while(fgets(data, 200, in) != NULL){  
        data[strlen(data) - 1] = '\0';  
        int stt = 0;  
        char *token = strtok(data, ",");  
        while(token != NULL){  
            ++stt;   
            if(stt == 1){  
                strcpy(a[n].ten, token);  
            }  
            else if(stt == 2){  
                strcpy(a[n].lop, token);  
            }  
            else if(stt == 3){  
                strcpy(a[n].ngaysinh, token);  
            }  
            else{  
                a[n].gpa = atof(token);  
            }  
            token = strtok(NULL, ",");  
        }  
        ++n;   
    }  
    qsort(a, n, sizeof(SinhVien), cmp);  
    for(int i = 0; i < n; i++){  
        fprintf(out, "%s,%s,%s,%.1lf\n", a[i].ten, a[i].lop, a[i].ngaysinh, a[i].gpa);  
    }  
    fclose(in);  
    fclose(out);  
}  
return 0;  
}


4. Xếp loại học sinh

Cho file hocsinh.txt chứa thông tin của các học sinh bao gồm có thông tin : tên và điểm 3 môn toán, lý, hóa

Hãy tính điểm trung bình và lưu vào file hocsinh_out.txt thông tin về điểm trung bình và xếp loại học lực.

  • Điểm trung bình ≥ 9.0 xếp loại Xuất sắc
  • Điểm trung bình ≥ 8.0 xếp loại giỏi
  • Điểm trung bình ≥ 6.5 xếp loại khá
  • Điểm trung bình ≥ 5 xếp loại trung bình
  • Điểm trung bình < 5 xếp loại yếu

File hocsinh.txt có khuôn mẫu như sau : File gồm nhiều dòng mỗi sinh viên gồm 2 dòng thông tin, dòng 1 là họ tên và dòng 2 là điểm toán lý hóa

File hocsinh_out.txt ghi thông tin tên, điểm trung bình và học lực trên từng dòng.

hocsinh.txthocsinh_out.txt

Nguyen Van 28Tech

6 7 8

Hoang Van Long

9 9 9

Nguyen Ngoc Phu

7 8 9

Nguyen Van 28Tech 7.0 KHA

Hoang Van Long 9.0 XUAT SAC

Nguyen Ngoc Phu 8.0 GIOI

Code :

include "stdio.h"

include "string.h"

include "ctype.h"

include "stdlib.h"

int main(){

FILE *in;  
in = fopen("hocsinh.txt", "r");  
if(in == NULL){  
    printf("File not found !\n");  
}  
else{  
    FILE *out;  
    out = fopen("hocsinh_out.txt", "w");  
    char name[200], diem[100];  
    while(fgets(name, 200, in) != NULL){  
        name[strlen(name) - 1] = '\0';  
        double t, l, h;  
        fscanf(in, "%lf %lf %lf", &t, &l, &h);  
        fgetc(in);  
        double tb = (t + l + h) / 3;  
        fprintf(out, "%s %.1lf ", name, tb);  
        if(tb >= 9) fprintf(out, "XUAT SAC\n");  
        else if(tb >= 8) fprintf(out, "GIOI\n");  
        else if(tb >= 6.5) fprintf(out, "KHA\n");  
        else if(tb >= 5) fprintf(out, "TRUNG BINH\n");  
        else fprintf(out, "YEU");  
    }  
    fclose(in);  
    fclose(out);  
}  
return 0;  
}


5. Đọc toàn bộ file số nguyên

Cho file number.txt chứa không quá 100000 số nguyên gồm nhiều dòng, mỗi dòng gồm nhiều số. Thực hiện đọc các số trong file này và ghi vào file prime.txt các số nguyên tố trong file theo thứ tự xuất hiện trong file, mỗi dòng không quá 10 số