Bài thực hành Tin Đại Cương số 5 - BKHN. Bài này mình viết từ năm 2011 khi mình học đại cương trên Blog của lớp, giờ chuyển về Blog của mình để lưu trữ lại cho mấy em học sau ngâm cứu thêm nếu chưa hiểu. Và cũng có thể giải đáp tốt hơn nếu các bạn có thắc mắc.

Bài tập tin học đại cương BKHN

Lần này các bạn có thể đã hiểu tương đối rõ những lệnh nhập xuất trong C (printf & scanf) cộng với viết code hơi nhiều nên mình hơi lười, viết có 1 chút của C++ (cout & cin & endl) cho nhanh. Về cơ bản thì các lệnh này cho ra kết quả giống nhau, vì thế nên các bạn có thể tra trên Google giùm mình và nếu thích thì chuyển đổi các lệnh lạ kia về dạng đang được học trên lớp.

Lưu ý: các hàm (cout, cin, endl, cin.getline..) được sử dụng bởi thư viện iostream.h. Sau khi các bạn chuyển đổi về dạng (printf, scanf, gets…) sử dụng thư viện conio.h, stdio.h thì các bạn có thể xóa bỏ cái thư viện kia đi được!

Bài viết liên quan:

Bài 1. Chức năng chương trình:

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.1:
Chức năng chương trình:
1. Nhập 1 dãy n số từ bàn phím, n<10 nhập từ bàn phím
2. In dãy số đã nhập ra màn hình
3. Tính:
+ Trung bình cộng các số âm
+ Tổng các số dương
+ Đếm số các số 0 trong dãy nhập vào
4. Tìm vị trí số x trong dãy đã nhập vào
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <stdio.h>
float tb_so_am(float input[], int size)
{
    double tb, sum=0;
    int counter = 0;
    for(int i=0; i<size; i++)
    {
        if(input[i]<0)
            {
                sum+=input[i];
                counter++;
            }
    }
    if(counter){
    tb = sum/counter;
    }else tb=0;
    return tb;
}

float tong_sduong(float input[], int size)
{
    float sum=0;
    for(int i=0; i<size; i++)
    {
        if(input[i]>0)
            {
                sum+=input[i];
            }
    }
    return sum;
}

int demsokhong(float input[], int size)
{
    int counter = 0;
    for(int i=0; i<size; i++)
    {
        if(input[i]==0)
            {
                counter++;
            }
    }
    return counter;
}

void timkiem(float input[], int size, float x)
{
    cout<<"\n Nhung vi tri trong day so co gia tri bang "<<x<<" la: ";
    for(int i=0; i<size; i++)
    {
        if(input[i] == x)
        {
            cout<<(i+1)<<", ";
        }
    }
}

void main()
{
    int sonhapvao;
    float nhapvao[10], x;
    //Cho biet so luong so nhap vao
    cout<<"\n So luong so nhap vao: "; cin>>sonhapvao;
    //Lay dau vao
    for(int i=0; i<sonhapvao; i++)
    {
        cout<<"\n Nhap so thu "<<(i+1)<<" : "; cin>>nhapvao[i];
    }
    //In mang da nhap vao
    cout<<"\n Cac so ban da nhap vao la:";
    for(int i=0; i<sonhapvao; i++)
    {
        cout<<nhapvao[i]<<", ";
    }
    //Tinh toan va dua ra man hinh
    cout<<"\n Trung binh cong cac so am la: "<<tb_so_am(nhapvao, sonhapvao);
    cout<<"\n Tong cac so duong la: "<<tong_sduong(nhapvao, sonhapvao);
    cout<<"\n So so 0 trong mang nhap vao la: "<<demsokhong(nhapvao, sonhapvao);
    //Tim kiem
    cout<<"\n Nhap so can tim kiem: "; cin>>x;
    timkiem(nhapvao, sonhapvao, x);
    getch();
}

Bài 2. Chức năng chương trình:

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.2:
Chức năng chương trình:
1. Nhập 1 dãy n số từ bàn phím, n<10 nhập từ bàn phím
2. Sắp xếp dãy theo thứ tự tăng dần, in ra màn hình
3. Sắp xếp dãy theo thứ tự giảm dần, in ra màn hình
4. Sắp xếp dãy theo thứ tự giảm dần theo ABS, in ra màn hình
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <math.h>
void bubble_sort_incre(double a[100],int n);
void bubble_sort_decre(double a[100],int n);
void bubble_sort_decre_absed(double a[100],int n);
void print(double input[100], int a);

void main()
{
    int sonhapvao;
    double nhapvao[100];
    //Nhap so luong so nhap vao
    cout<<"\n Nhap so luong so nhap vao: "; cin>>sonhapvao;
    //Lay dau vao
    for(int i=0; i<sonhapvao; i++)
    {
        cout<<"\n Nhap so thu "<<(i+1)<<" : "; cin>>nhapvao[i];
    }
    //Sap xep tang dan, in ra
    bubble_sort_incre(nhapvao, sonhapvao);
   cout<<"\n Xap xep theo thu tu tang dan \n";
    print(nhapvao, sonhapvao);
    //Sap xep giam dan, in ra
    bubble_sort_decre(nhapvao, sonhapvao);
   cout<<"\n Xap xep theo thu tu giam dan \n";
    print(nhapvao, sonhapvao);
    //Sap xep ABS giam dan, in ra
    bubble_sort_decre_absed(nhapvao, sonhapvao);
   cout<<"\n Xap xep theo thu tu giam dan cua tri tuyet doi! \n";
    print(nhapvao, sonhapvao);
    //end
    getch();
}
// Bubble Sort Tang dan voi Dau vao la Mang Input, So phan tu cua mang
void bubble_sort_incre(double a[100],int n)
{
    int k,j;
    double tmp;
     for(j=0; j<n-1; j++)
     {
      for(k=n-1; k>0; k--)
      {
      if(a[k]<a[k-1])
        {
        tmp = a[k];
        a[k] = a[k-1];
        a[k-1]=tmp;
       }
      }
     }
}
// Bubble Sort Giam dan voi Dau vao la Mang Input, So phan tu cua mang
void bubble_sort_decre(double a[100],int n)
{
    int k,j;
    double tmp;
     for(j=0; j<n-1; j++)
     {
      for(k=n-1; k>0; k--)
      {
      if(a[k]>a[k-1])
        {
        tmp = a[k];
        a[k] = a[k-1];
        a[k-1]=tmp;
       }
      }
     }
}
// Bubble Sort Giam dan theo ABS voi Dau vao la Mang Input, So phan tu cua mang
void bubble_sort_decre_absed(double a[100],int n)
{
    int k,j;
    double tmp;
     for(j=0; j<n-1; j++)
     {
      for(k=n-1; k>0; k--)
      {
      if(abs(a[k])>abs(a[k-1]))
        {
        tmp = a[k];
        a[k] = a[k-1];
        a[k-1]=tmp;
       }
      }
     }
}
//So ket qua in ra tren 1 dong(input: mang dau vao, n: so ket qua/dong, a: so ptu cua mang input)
void print(double input[100], int a)
{
    int i;
    for(i=0; i<a; i++)
    {
        cout<<input[i]<<", ";
    }
    cout<<"\n";
}

Bài 3. Chức năng chương trình:

Giải phương trình:

a11*x + a12*y = c1
a21*x + a22*y = c2

aij lưu trong mảng 2 chiều, cij lưu trong mảng 1 chiều

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.3:
Chức năng chương trình:
Giải phương trình:
a11*x + a12*y = c1
a21*x + a22*y = c2
aij lưu trong mảng 2 chiều, cij lưu trong mảng 1 chiều
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <stdio.h>

void main()
{
    float a[2][2], c[2], dinhthuc, x, y;
    for(int i=1; i<=2; i++)
       {
        for(int j=1; j<=2; j++)
            {
                cout<<"\n Nhap A["<<i<<"]["<<j<<"] : "; cin>>a[i][j];
            }
        cout<<"\n Nhap C["<<i<<"] : "; cin>>c[i];
       }
      cout<<"\n Phuong trinh ban da nhap vao: \n\n";
      cout<<a[1][1]<<"X + "<<a[1][2]<<"Y = "<<c[1]<<endl;
      cout<<a[2][1]<<"X + "<<a[2][2]<<"Y = "<<c[2]<<endl;
    //tinhtoan
    dinhthuc = a[1][1]*a[2][2] - a[1][2]*a[2][1];
    if(dinhthuc!=0)
    {
    x = (float) (c[1]*a[2][2] - a[1][2]*c[2])/dinhthuc;
    y = (float) (a[1][1]*c[2] - a[2][1]*c[1])/dinhthuc;
    cout<<"\n X = "<<x<<endl;
    cout<<"\n Y = "<<y<<endl;
   } else cout<<"\n Phuong trinh vo nghiem!";
    getch();
}

Bài 4. Chức năng chương trình:

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.4:
Chức năng chương trình:
1. Nhập 1 dãy n số từ bàn phím, n<10 nhập từ bàn phím
2. Sao chép các số + trong mảng a -> b; số - sang mảng c
3. Đưa mảng b, c ra màn hình
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <stdio.h>

void main()
{
    clrscr();
    int in;
    float a[10], b[10], c[10];
    cout<<"\n Nhap so luong so dinh nhap vao ( <10 ): "; cin>>in;
    for(int i=0; i<in; i++)
        {
        cout<<"\n Nhap so thu "<<(i+1)<<" : "; cin>>a[i];
        }
    int j, k; k = j = 0;
    //filter
    for(int i=0; i<in; i++)
        {
        if(a[i]>=0) //loc so duong
            {
         j++;
            b[j] = a[i];
            }
        else { //loc so am
          k++;
            c[k] = a[i];
            }
        }
    cout<<"\n Cac so duong: \n";
    while(j>=1)
    {
        cout<<b[j]<<", ";
        j--;
    }
    cout<<"\n Cac so am: \n";
    while(k>=1)
    {
        cout<<c[k]<<", ";
        k--;
    }
    getch();
}

Bài 5. Chức năng chương trình:

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.5:
Chức năng chương trình:
Nhập tên sinh viên, in ra:
TURBO C xin chao ban: tên sinh viên vừa nhập
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <stdio.h>

void main()
{
    clrscr();
    char tensv[40];
    cout<<"\n Nhap ten sinh vien: "; cin.getline(tensv, 40);
    cout<<"\n TURBO C++ xin chao ban : "<<tensv<<endl;
    getch();
}

Bài 6. Chức năng chương trình:

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.6:
Chức năng chương trình:
Nhập vào danh sách tên các sinh viên, n<10
Sắp xếp theo thứ tự A-Z
Đưa danh sách ra màn hình
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>

void main()
{
    clrscr();
    char tenSV[10][40];
    char *temp = "";
    int a;
    cout<<"\n Nhap so sinh vien: "; cin>>a; cin.ignore(1);
    for(int i=0; i<a; i++)
    {
        cout<<"\n Nhap ten SV thu "<<(i+1)<<" : "; cin.getline(tenSV[i], 40);
    }
    //sap xep
    for ( int i=0 ;i<a-1 ; i++)
         for ( int j = i+1 ; j< a ; j++)
         {
             if ( strcmp(tenSV[i],tenSV[j]) > 0 )
             {
                strcpy(temp,tenSV[i]) ;
                strcpy(tenSV[i],tenSV[j]) ;
                strcpy(tenSV[j],temp) ;
             }
         }
    //end sap xep
    cout<<"\n Sau khi sap xep: \n";
    for(int i=0; i<a; i++)
    {
        cout<<tenSV[i]<<endl;
    }
    getch();
}

Bài 7. Chức năng chương trình:

/*------------------------------------
Author: TrungThanh
Website: http://thanhnt.com
-----*****-----
Practice 5.7:
Chức năng chương trình:
Nhập các xâu s1, s2
đưa ra màn hình giá trị strlen(s1), strlen(s2)
thực hiện strcpy(s1, s2) -> đưa ra màn hình
đưa giá trị strcmp(s1, s2), strcmp(s2, s1), giải thích ý nghĩa
thực hiện strcat(s1, s2) sau đó đưa s1, s2 ra màn hình
*-----------------------------------*/

#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <stdio.h>

void main()
{
    clrscr();
    char s1[50], s2[50], tmp1[50], tmp2[50];
    printf("\n Nhap xau 1: "); flushall(); gets(s1);
    printf("\n Nhap xau 2: "); flushall(); gets(s2);
    //strlen
    strcpy(tmp1, s1); strcpy(tmp2, s2);
    cout<<"\n Gia tri strlen(s1): "<<strlen(tmp1)<<endl;
    cout<<"\n Gia tri strlen(s2): "<<strlen(tmp2)<<endl;
    //strcpy
    strcpy(tmp1, s1); strcpy(tmp2, s2);
    strcpy(tmp1, tmp2);
    cout<<"\n S1: "<<s1<<endl;
    cout<<"\n S2: "<<s2<<endl;
    //strcmp
    strcpy(tmp1, s1); strcpy(tmp2, s2);
    cout<<strcmp(tmp1, tmp2)<<endl;
    cout<<strcmp(tmp2, tmp1)<<endl;
    //strcat
    strcpy(tmp1, s1); strcpy(tmp2, s2);
    strcat(tmp1, tmp2);
    cout<<tmp1<<endl;
    cout<<tmp2<<endl;
    getch();
}