Bài tập về "Tập tin" (file)

Bài tập về các thao tác cơ bản trên tập tin văn bản (text file) và tập tin nhị phân (binary file). Một số bài tập có lời giải (hướng dẫn & code) cụ thể.

A. Có lời giải

  1. Đọc mảng số nguyên
    Viết chương trình đọc mảng số nguyên từ tập tin (văn bản) MANG.TXT sau đó hiển thị mảng vừa đọc ra màn hình. Cấu trúc tập tin MANG.TXT gồm 2 dòng, dòng đầu là số phần tử của mảng, dòng sau là giá trị các phần tử của mảng (cách nhau bởi một khoảng trắng).
    Ví dụ:
    Với tập tin MANG.TXT:
    5
    2 6 4 9 7
    Sau khi thực thi, giao diện chương trình sẽ là:
    Mảng vừa đọc từ tập tin là:
    2 6 4 9 7
    Code:
    #include <stdio.h>
    #include <conio.h>
    int main()
    {
        int a[99], n, i;
        FILE *f = fopen("MANG.TXT", "r"); //mở file để đọc   
        fscanf(f, "%d", &n);              //đọc số phần tử của mảng và lưu vào n
        for (i = 0; i < n; i++)           //đọc lần lượt từng giá trị của mảng
            fscanf(f, "%d", &a[i]);
        fclose(f);                        //đóng file
        printf("Mang vua doc la: ");      //hiển thị mảng
        for (i = 0; i < n; i++)
            printf("%d ", a[i]);
        getch();
    }
  2. Sắp xếp mảng số nguyên
    Viết chương trình đọc mảng số nguyên từ tập tin MANG.INP sau đó sắp xếp theo thứ tự không giảm. Kết quả được ghi vào tập tin MANG.OUT. Nội dung tập tin MANG.INP chỉ gồm 1 dòng, ghi giá trị các phần tử của mảng (là các số tự nhiên ≤999), mỗi giá trị cách nhau bởi một khoảng trắng.
    Ví dụ:
    Với tập tin MANG.INP:
    3 1 7 5 9
    Sau khi thực thi, tập tin MANG.OUT sẽ là:
    Mảng được đọc từ tập tin là:
    3 1 7 5 9 
    Mảng sau khi đã sắp xếp là:
    1 3 5 7 9 
    Code:
    #include <stdio.h>
    int main()
    {
        int a[99], n, i, j, tam;
        FILE *fi, *fo;
        fi = fopen("MANG.INP", "r");                        //đọc mảng
        n = 0;
        while (!feof(fi))
        {
            fscanf(fi, "%d", &a[n]);
            n++;
        }
        fclose(fi);
        fo = fopen("MANG.OUT", "w");                        //mở file để ghi
        fprintf(fo, "Mang doc tu tap tin MANG.INP la:\n");  //ghi mảng vừa đọc
        for (i = 0; i < n; i++)
            fprintf(fo, "%d ", a[i]);
        for (i = 0; i < n - 1; i++)                         //sắp xếp mảng
            for (j = i + 1; j < n; j++)
                if (a[i] >a[j])
                {
                    tam = a[i];
                    a[i] = a[j];
                    a[j] = tam;
                }
        fprintf(fo, "\n\nMang sau khi sap xep la:\n");      //ghi tiếp mảng sau khi sắp xếp
        for (i = 0; i < n; i++)
            fprintf(fo, "%d ", a[i]);
        fclose(fo);                                         //đóng file
    }
  3. Sắp xếp alphabet
    Viết chương trình đọc danh sách họ tên từ tập tin HOTEN.INP sau đó sắp xếp theo thứ tự alphabet. Kết quả được ghi vào tập tin HOTEN.OUT. Nội dung tập tin HOTEN.INP gồm n+1 dòng, trong đó dòng đầu ghi số phần tử của danh sách n (n≤99), mỗi dòng tiếp theo ghi một chuỗi họ tên.
    Ví dụ:
    Với tập tin HOTEN.INP:
    5
    Le Thi Binh
    Tran Van An
    Tran Ro
    Phan Anh
    Truong Dinh Bon
    Sau khi thực thi, tập tin HOTEN.OUT sẽ là:
    Danh sach sau khi da sap xep alphabet la:
     1. Tran Van An
     2. Phan Anh
     3. Le Thi Binh
     4. Truong Dinh Bon
     5. Tran Ro
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //hàm trả về con trỏ trỏ đến phần tên của một chuỗi họ tên
    char *trichTen(char *s)                    
    {
        int k = strlen(s) - 1;                               //xuất phát ở ký tự cuối cùng
        while (k >= 0 && s[k] != ' ') k--;                   //tìm ký tự ' ' đầu tiên
        return (s + k + 1);
    }
    //hàm xóa những ký tự thừa bên phải
    char *rtrim(char *s)
    {
        int i = strlen(s) - 1;
        while (s[i] == ' ' || s[i] == '\n') i--;             //ký tự thừa là ' ' và '\n'
        s[i+1] = 0;
        return s;
    }
    int main()
    {
        char *a[99], s[30], *tam;
        int n, i, j;
        FILE *f;
        f = fopen("HOTEN.INP", "r");
        fscanf(f, "%d", &n);                                 //đọc số phần tử
        fgets(s, 30, f);                                     //đọc nốt những ký tự còn lại trên dòng
        for (i = 0; i < n; i++)
        {
            fgets(s, 30, f);                                 //đọc một chuỗi họ tên, lưu vào s
            a[i] = (char *)malloc(30 * sizeof(char));        //cấp phát bộ nhớ cho a[i]
            strcpy(a[i], rtrim(s));                          //sao chép chuỗi vừa đọc (s) vào a[i]
        }
        fclose(f);      
        for (i = 0; i < n - 1; i++)                          //sắp xếp theo thứ tự alphabet
            for (j = i + 1; j < n; j++)
                if (strcmp(trichTen(a[i]), trichTen(a[j]))>0)
                {
                    tam = a[i];                              //hoán đổi hai con trỏ
                    a[i] = a[j];
                    a[j] = tam;
                }
        f = fopen("HOTEN.OUT", "w");                         //xuất kết quả
        fprintf(f, "Danh sach sau khi da sap xep alphabet la:\n");
        for (i = 0; i < n; i++)
            fprintf(f, "%2d. %s\n", i+1, a[i]);
        fclose(f);
    }

B. Không có lời giải

(đang cập nhật)

Bình luận (2)

Viết Bình luận
  • hoang
    thay giup em

    thưa thầy làm sao giải được bài toán này ạ, thầy hướng dẫn em làm với. Cám ơn thầy

    "Viết một chương trình đọc một tập tin văn bản, và phân tích nó thành các từ. Đối với mỗi từ riêng biệt trong tập tin, số lần xuất hiện của từ đó là để được báo cáo. Các bảng liệt kê sản lượng nên được sắp xếp theo thứ tự chữ cái"

    thưa thầy làm sao giải được bài toán này ạ, thầy hướng dẫn em làm với. Cám ơn thầy

  • nguyen van ao
    Tiếng việt cho file output

    Thưa Thầy cho em hỏi
    em đưa vào 1 tập thơ1.dat

    thực hiện thêm bớt nội dung vào tập đó

    sau đó đưa ra tập thơ2.dat
    nhưng tiếng việt trong thơ2.dat có nhiều nơi bị lỗi
    cho em hỏi cách khắc phúc, em cảm ơn Thầy

Viết Bình luận

Họ tên Bắt buộc
Email Bắt buộc
Tiêu đề Bắt buộc
Kiểu bình luận
Nội dung
Nhập mã được hiển thị: