Hiển thị các bài đăng có nhãn Giải các bài thực hành KTLT. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Giải các bài thực hành KTLT. Hiển thị tất cả bài đăng

Thứ Sáu, 25 tháng 12, 2015

Chương trình mô phỏng bài toán Tháp Hà Nội sử dụng đệ quy.



Lưu ý: Code này chỉ chạy được trên Borland C !

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

#define move(x,y,z) makeblocks(x,y,z); delay(t); delblocks(x, y, z);

int t;
int a[] = { 0, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25 };
int color[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
int bg = 0;


void makeblocks(int x, int y, int z)
{
    int h = a[z] / 2;
    window(x - h, y, x + h, y);
    textbackground(color[z]);
    textcolor(color[z]);
    clrscr();
}

void delblocks(int x, int y, int z)
{
    int h = a[z] / 2;
    window(x - h, y, x + h, y);
    textbackground(bg);
    clrscr();
}

void tower(int x, int y, int m)
{
    for (int i = m; i >= 1; i--)
        makeblocks(x, y - m + i, i);
}

void moveblocks(int x1, int y1, int x2, int y2, int z)
{
    static int count = 0;
    int x, y;
    count++;
    window(1, 1, 24, 1);
    textbackground(BLUE);
    clrscr();
    textcolor(WHITE);
    cprintf("\nLan dich chuyen thu: ");
    textcolor(YELLOW + BLINK);
           cprintf("%4d", count);
    for (y = y1; y >= 4; y--)
    {
        move(x1, y, z);
        }
    if (x1<x2)
    for (x = x1; x <= x2; x++)
    {
        move(x, 4, z);
    }
    else
    for (x = x1; x >= x2; x--)
    {
        move(x, 4, z );
    }
    for (y = 4; y <= y2; y++)
    {
        move(x2, y, z);
    }
    makeblocks(x2, y2,z);
}

void movetower(int x1, int y1, int x2, int y2, int x3, int y3, int m)
{
    if (m < 1)    return;
    else
    if (m == 1)
        moveblocks(x1, y1, x2, y2, 1);
    else
    {
        movetower(x1, y1 - 1, x3, y3, x2, y2, m - 1);
        moveblocks(x1, y1, x2, y2, m);
        movetower(x3, y3, x2, y2 - 1, x1, y1, m - 1);
    }
}

void main(void)
{
    int m;
    int x1, y1, x2, y2, x3, y3;
    x1 = 13;
    x2 = 40;
    x3 = 67;
    y1 = y2 = y3 = 24;
    textmode(C80);
    clrscr();
    printf("\nSo tang: ");
    scanf("%d", &m);
    printf("\nTime delay: ");
    scanf("%d", &t);
    textbackground(bg);
    clrscr();
    tower(x1, y1, m);
        getch();
    movetower(x1, y1, x2, y2, x3, y3, m);
    getch();
    window(1, 1, 80, 25);
    textbackground(bg);
    textcolor(WHITE);
    clrscr();

}

Chủ Nhật, 6 tháng 12, 2015

Viết hàm đọc số n có 3 chữ số.

void doc(int n)
{
    int tr, ch, dv;
    tr = n / 100;
    ch = (n % 100) / 10;
    dv = n % 10;
    switch (tr)
    {
    case 1:    printf("Mot tram ");
            break;
    case 2: printf("Hai tram ");
            break;
    case 3:    printf("Ba tram ");
            break;
    case 4: printf("Bon tram ");
            break;
    case 5:    printf("Nam tram ");
            break;
    case 6: printf("Sau tram ");
            break;
    case 7:    printf("Bay tram ");
            break;
    case 8: printf("Tam tram ");
            break;   
    case 9:    printf("Chin tram ");
            break;
    };
    switch (ch)
    {
    case 1:    printf("muoi ");
        break;
    case 2: printf("Hai muoi ");
        break;
    case 3:    printf("Ba muoi ");
        break;
    case 4: printf("Bon muoi ");
        break;
    case 5:    printf("Nam muoi ");
        break;
    case 6: printf("Sau muoi ");
        break;
    case 7:    printf("Bay muoi ");
        break;
    case 8: printf("Tam muoi ");
        break;
    case 9:    printf("Chin muoi ");
        break;
    default: printf("linh ");
        break;
    };
    switch (dv)
    {
    case 1:    printf("mot.");
        break;
    case 2: printf("hai.");
        break;
    case 3:    printf("Ba.");
        break;
    case 4: printf("tu.");
        break;
    case 5:    printf("lam.");
        break;
    case 6: printf("Sau.");
        break;
    case 7:    printf("Bay.");
        break;
    case 8: printf("Tam.");
        break;
    case 9:    printf("Chin.");
        break;
    default: printf(".");
        break;
    };

}

Thứ Bảy, 5 tháng 12, 2015

Viết hàm vẽ hình theo mẫu với số dòng n nhập vào.

Thứ tự code từ trái qua phải.

Code1:
void vehinh(int n)
{
    for (int i = 1; i < n; i++)
    {
        for (int j = 1; j <= n - 1; j++)
            printf(" ");
        for (int j = 1; j <= i; j++)
            printf("*");
        printf("\n");
    }
    for (int i = 1; i < 2 * n; i++)
        printf("*");
    printf("\n");
    for (int i = n-1; i > 0; i--)
    {
        for (int j = i; j >0; j--)
            printf("*");
        printf("\n");
    }
}


Code2:
void vehinh(int n)
{
    for (int i = 1; i < n; i++)
    {
        for (int j = 1; j <= n - 1; j++)
            printf(" ");
        for (int j = 1; j <= i; j++)
        if (j==1 || j==i)
            printf("*");
        else printf(" ");
        printf("\n");
    }
    for (int i = 1; i < 2 * n; i++)
        printf("*");
    printf("\n");
    for (int i = n-1; i > 0; i--)
    {
        for (int j = i; j >0; j--)
        if (j == 1 || j == i)
            printf("*");
        else printf(" ");
        printf("\n");
    }
}


Code3:
void vehinh(int n)
{
    for (int i = n; i >0; i--)
    {
        for (int j = 1; j < n; j++)
            printf(" ");
        for (int j = 1; j <= i; j++)
        printf("*");
        printf("\n");
    }
    for (int i = 1; i <= n; i++)
    {
        if (i == 1)
            continue;
        for (int j = 1; j <= n - i; j++)
            printf(" ");
        for (int j = 1; j <= i; j++)
            printf("*");
        printf("\n");
    }
}
 


Code4:
 Tương tự, lười quá :D

Thứ Sáu, 4 tháng 12, 2015

Viết hàm kiểm tra số nguyên n có các chữ số tăng dần từ trái qua phải không.

int kt(int n)
{
    int temp = n;
    while (temp > 0)
    {
        if ((temp % 10) < ((temp / 10) % 10))
            return 0;
        temp = temp / 10;
    }
    return 1;
}

Viết hàm liệt kê các chữ số là số nguyên tố của số nguyên dương N

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

void lk(int n)
{
    int temp = n;
    while (temp > 0)
    {
        if (snt(temp % 10) == 1)
            printf("%5d", temp % 10);
        temp = temp / 10;
    }
}

Viết hàm tính tích phân của f(x)=x^n trên một đoạn [a, b] với n, a và b là tham số truyền vào.

float nguyenham(int x, int n)
{
    n = n + 1;
    float s = x;
    for (int i = 1; i < n; i++)
        s *= x;
    s = (float)s / n;
    return s;
}

float tichphan(int a, int b, int n)
{
    float s;
    s = nguyenham(a, n) - nguyenham(b, n);
    return s;
}

Thứ Tư, 2 tháng 12, 2015

Viết hàm tính tổng các ước số của số nguyên dương N.

int tonguoc(int a)
{
 int s = 1;
 for (int i = 2; i <= a; i++)
 if (a%i == 0)
  s += i;
 return s;
}

Viết hàm in các ước số lẽ của số nguyên dương N.

void uocle(int a)
{
 for (int i = 1; i <= a; i++)
 if (a%i == 0 && i % 2 != 0)
  printf("%5d", i);
}

Viết hàm tính bội số chung nhỏ nhất của 2 số nguyên dương a,b.

int bcnn(int a, int b)
{
 int max = 1;
 if (a <= b)
 for (int i = 1; i <= a; i++)
 if ((a%i == 0) && (b%i == 0) && (max < i))
  max = i;
 if (a>b)
 for (int i = 1; i <= b; i++)
 if ((b%i == 0) && (a%i == 0) && (max < i))
  max = i;
 return a*b / max;
}


Thứ Sáu, 27 tháng 11, 2015

Với nguyên dương cho trước, viết hàm tính số m lớn nhất để 1+2+..+(số cần tìm) < (số cho trước)

int tim(int n)
{
 int s = 0;
 for (int i = 1; i <= n; i++)
 {
  s += i;
  if (s >= n)
   return i-1;
 }
}

Viết hàm để tính số hạng thứ N của dãy Fibonacci, và hàm thứ hai để tính tổng N số hạng đầu tiên của dãy Fibonacci gọi đến hàm đầu tiên.

int fibonacci(int a[], int n)
{

 for (int i = 0; i < n; i++)
 {
  if (i == 0)
  {
   a[i]=0;
   continue;
  }
  if (i == 1)
  {
   a[i]=1;
   continue;
  }
  a[i] = a[i - 1] + a[i + -2];
 }

 return a[n - 1];
}

int tongfibonancci(int a[], int n)
{
 int s = 0;
 for (int i = 0; i < n; i++)
  s += fibonacci(a,(i+1));
 return s;
}

Viết hàm để in ra các số nguyên tố từ 1 đến N, với N là tham số truyền vào.

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


void inso(int n)
{
 for (int i = 1; i <= n; i++)
  if (snt(i) == 1)
   printf("%5d", i);
}

Viết hàm kiểm tra một số nguyên n có gồm toàn các chữ số chẵn hay không.

int ktchan(int n)
{
 int temp = n, t;
 while (temp > 0)
 {
  t = temp % 10;
  if (t % 2 != 0)
   return 0;
  temp = temp / 10;
 }
 return 1;
}

Viết các hàm tính tổng sau đây với N là tham số truyền vào

1. F1= 1 + 2 + 3 + 4 +…N

int tong(int n)
{
 int s = 0;
 for (int i = 1; i <= n; i++)
  s += i;
 return s;
}


2. F2= 1^1 + 2^2 + 3^3 + … N^N

int tong(int n)
{
 int s = 0, mu;
 for (int i = 1; i <= n; i++)
 {
  mu = i;
  for (int j = 1; j < i; j++)
   mu*=i;
  s += mu;
 }
 return s;
}


3. F3= 1 + 1/2 + 1/3 + 1/4 + … 1/N

float tong(int n)
{
 float s = 0;
 for (float i = 1; i <= n; i++)
 {
  s += (1 / i);
 }
 return s;
}


4. F4= 1 - 1/2 + 1/3 - 1/4 + … 1/N

float tong(int n)
{
 float s1 = 0, s2 = 0;
 for (float i = 1; i <= n; i += 2)
  s1 += (1 / i);
 for (float i = 2; i <= n; i += 2)
  s2 += (1 / i);
 return s1-s2;
}

Thứ Năm, 26 tháng 11, 2015

Viết hàm xét xem một số nguyên dương N có phải là số đối xứng hay không.

int sdx(int n)
{
 int change = 0;
 int temp = n;
 while (tam > 0)
 {
  change = change * 10 + temp % 10;
  temp = temp / 10;
 }
 if (change == n)
  return 1;
 return 0;
}

Viết hàm xét xem N có phải là số nguyên tố hay không, với N là tham số truyền vào.

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

Viết hàm tìm ước số chung lớn nhất của 2 số nguyên dương a,b.

int uoc(int a, int b)
{
 int max=1;
 if (a<=b)
  for (int i = 1; i <= a; i++)
  if ((a%i == 0) && (b%i == 0) && (max < i))
   max = i;
 if (a>b)
  for (int i = 1; i <= b; i++)
  if ((b%i == 0) && (a%i == 0) && (max < i))
   max = i;
  return max;
}

Viết hàm tính x^n, với x là số thực, n là số nguyên bất kỳ (dương hoặc âm) đã biết.

float pow(float x, int n)
{
 float t = x;
 for (int i = 1; i<(-1)*n; i++)
  t *= x;
 if (n > 0) return t;
 return t = 1 / t;
}

Viết hàm tính giai thừa của N với N là tham số truyền vào

int giaithua(int n)
{
 int t = n;
 for (int i = n - 1; i > 0; i--)
  t *= i;
 return t;
}