week9 (gần full)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

week9 (gần full)

Bài gửi by Tung_tobe on 16/04/11, 11:51 pm

Thấy Haidang im hơi lặng tiếng nên làm một vài bài cho đỡ buồn :shock: :shock:
Lần đầu tiên làm ti... <ah quên>post bài nên có j sơ suất ae chỉ giáo :P
Bài 1:
Code:

Đề: Chỉnh lại bài chuyển cơ số hôm trước, dùng ct con ở các tùy chọn

CODE
Code:

#include<stdio.h>
int a,b,d,dem1,menu,b1,check;
char c,tong;
void nhiphan(int b)
{
    d=b;
    tong=1;
    printf("\nSo da nhap o he nhi phan la:");
          while(b>=2){b=b/2;tong =tong+1;}
          int A[tong];
          for(dem1 =1;dem1<=tong;dem1++){A[dem1]=d%2;d=d/2;}
          for(dem1 =1;dem1<=tong;dem1++){printf("%d",A[tong-dem1+1]);}
          printf("\n");printf("...\n\n");
}
void he16(int b)
{
  printf("\nSo da nhap o he hexa la: %X\n",b1);printf("...\n\n");
}
void he8(int b)
{
  printf("\nSo da nhap o he 8 la: %o\n",b1);printf("...\n\n");
}
int main()
{
do
  {
    printf("\n\tCHUONG TRINH CHUYEN DOI HE CO SO ver1.0\n");
    printf("\t\tTAC GIA:Nguyen Thanh Tung\n\n");
    printf("1.Nhap so duong o he thap phan\n");
    printf("2.So o he nhi phan\n");
    printf("3.So o he hexa\n");
    printf("4.So o he 8\n");
    printf("5.Thoat\n");
    printf("...");scanf("%d",&menu);
    if(menu<=0||menu>5)printf("\nBan da nhap sai, xin moi nhap lai:\n");
    if(menu==1)
      {
    do{
    printf("\nXin moi nhap mot so nguyen duong bat ki:");scanf("%d",&b);
    if(b<=0){printf("\nBan nhap so am, xin moi nhap lai...\n");check=1;}
    if(b>0)
      {
        b1=b;
        check=0;
      }
    }while(check==1);
      }
    if(menu==2)nhiphan(b);
    if(menu==3)he16(b);
    if(menu==4)he8(b);
  }while(menu!=5);
 printf("\nHen gap lai lan sau\n\n");


  return 0;
}


Bài 2
Code:

Đề: Viết ct có menu như sau
1.Nhập giá trị x và sai số epsilon
2.Tính sin(x) theo thuật toán lặp chuỗi Taylor -Maclaurin
3.Tính căn x theo phương pháp Newton
4.Quit

Nói thật là cái bài này thuật tóan taylor là cái j mình còn ko biết thì làm bằng niềm đau ah (hình như học trong toán cao cấp 1, mà toán cao cấp 1 thì mình chưa bh học :lol: :lol: ) thành ra lấy tạm một bài của một anh k54, k53 nào đó post lên để ae check, chứ đấy ko phải bài mình Suspect
Code:

#include <stdio.h>
#define abs(x) x>0?x:-x

float epsilon,x;
float pow(float x, int n)
{
  float p=1;
  int i=1;
  for(i=1;i<=n;i++) p*=x;
  return p;
}

float giaithua(float n)
{
 float i,ketqua=1;
 for(i=2;i<=n;i++)
  ketqua*=i;
 return ketqua;
}

float sin(float x,float epsilon)
{
  float ketqua,n=1,s;
  do
  {
  s=pow(x,2*n-1)/giaithua(2*n-1);
  ketqua+=pow(-1,n)*s;
  n++;
  }
  while (abs(x*(2*n+1)/giaithua(2*n+1))>epsilon);
  return ketqua;
 
}

float sqrt(float x,float epsilon)
{
  float xn, ketqua;
  xn = (x+1)/2;
  do {
    ketqua = xn;
    xn = 0.5 * (xn + x/xn);
  } while (abs((xn-ketqua)) > epsilon);
  return ketqua;
}

void enter_value()
{
  printf("Enter value x(radian):");
  scanf("%f",&x);
 
  printf("Enter value Epsilon:");
  scanf("%f",&epsilon);
  printf("\n\n");
}

int main()
{

  int choice;


    do {

    printf("Please choose: \n");
    printf("\t1. Enter value\n");
    printf("\t2. Sin(x)\n");
    printf("\t3. Sqrt(x)\n");
    printf("\t4. Quit\n");
    do {
      printf("Your choice: "); scanf("%d",&choice);
    } while (choice<=0 || choice >4);

    switch(choice) {
    case 1: enter_value(); break;
    case 2: printf("\n\n  Sin(x) =%10.4f\n\n\n\n",sin(x,epsilon)); break;
    case 3: printf("\n\n  Sqrt(x) =%10.4f\n\n\n\n",sqrt(x,epsilon));break;
    case 4: return 0; break;
    default: enter_value(); break;
    }
   
  } while (choice != 4);

 

 

}
Bài 3
Code:

Đề:Viết hàm sử lý cho phép thống kê số lần xuất hiện các kí tự nguyên âm (a,e,u,i,o) rồi đổi các ký tự này sang chữ hoa
code
Code:

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

char str[100];

int dem(char letter, char line[])
{
  int i,dem=0;
  for(i=0;line[i]!='\0';++i)
    {
      if (line[i]==letter){dem++;}
      }
  return dem;
}
void demkytu()
{
  printf("Co %d ky tu 'a' hoac 'A' trong chuoi nhap vao\n",dem('a',str)+dem('A',str));
  printf("Co %d ky tu 'e' hoac 'E' trong chuoi nhap vao\n",dem('e',str)+dem('E',str));
  printf("Co %d ky tu 'o' hoac 'O' trong chuoi nhap vao\n",dem('o',str)+dem('O',str));
  printf("Co %d ky tu 'i' hoac 'I' trong chuoi nhap vao\n",dem('i',str)+dem('I',str));
  printf("Co %d ky tu 'u' hoac 'U' trong chuoi nhap vao\n",dem('u',str)+dem('U',str));
}
void thay(char line[],char thaychu,char thaybang)
{
  int i;
  for (i=0;line[i]!='\0';++i)
    {
      if(line[i]==thaychu)
    line[i]=thaybang;
    }
}
void inhoa()
{
  thay(str,'a','A');
  thay(str,'e','E');
  thay(str,'i','I');
  thay(str,'o','O');
  thay(str,'u','U');
  printf("\nDay sau khi da thay :%s\n\n",str);
}

main()
{
  int menu,c=0;
  printf("\nXIn moi nhap vao mot chuoi ky tu:");gets(str);
do
  {
    printf("\n1.Dem so ky tu nguyen am ");
    printf("\n2.Thay cac ky tu nguyen am thanh ky tu VIET HOA");
    printf("\n3.Thoat");
    printf("\n...");scanf("%d",&menu);
    if(menu<1||menu>3){printf("\n\nXin moi nhap lai...\n");c=0;}
    else{
    switch(menu)
      {
    case 1:demkytu();break;
    case 2:inhoa();break;
    case 3:{printf("\nHen gap lai lan sau\n\n");c=1;}break;
      }
    }
  }while(c==0);

  return 0;
}



Được sửa bởi Tung_tobe ngày 17/04/11, 12:12 am; sửa lần 1.

Tung_tobe

Tổng số bài gửi : 100
Points : 124
Join date : 27/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by Tung_tobe on 17/04/11, 12:02 am

Các bài sử dụng thư viện
#include<stdio.h>

riêng bài 3 sử dụng thêm thư viện
#include<string.h>

Tung_tobe

Tổng số bài gửi : 100
Points : 124
Join date : 27/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by huy_d_t on 17/04/11, 09:55 am

đoạn code b3 của phó tổng sẽ ngắn gọn hơn nếu sử dụng hàm chuyển -> chữ hoa toupper(char a), khai báo ctype.h

_________________
huy_d_t = huy đê tiện ( not " dâm tặc", các bác gọi thế em ế vợ)

huy_d_t

Tổng số bài gửi : 112
Points : 142
Join date : 26/09/2010
Đến từ : Đại dâm tặc

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by Tung_tobe on 17/04/11, 10:35 am

ví dụ xem nào, nói thế làm sao hiểu đc Sad

Tung_tobe

Tổng số bài gửi : 100
Points : 124
Join date : 27/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by chikclik on 17/04/11, 03:38 pm

toupper(char); là hàm in hoa kí tự.
mình cũng sử dụng luôn hàm đó.
ví dụ
Code:
#include<stdio.h>
#include<string.h>
void demkitu(char chuoikitu[],char kitu)
{
    int i,leng,dem;
    dem=0;
    leng=strlen(chuoikitu);
    for (i=0;i<leng;++i) if ((kitu==chuoikitu[i])||(toupper(kitu)==chuoikitu[i])) dem+=1;
    printf("so nguyen am %c la :%d\n",kitu,dem);
}
void inhoa(char c[])
{
    int i,j,leng;
    leng=strlen(c);
    char thay[]={'a','i','u','e','o'};
    for (i=0;i<leng;i++) for (j=0;j<5;j++) if (c[i]==thay[j]) c[i]=toupper(thay[j]);
}
int main()
{
    char select,chuoi[1000],quit;
    printf("\t\t\t\tSELECT\n");
    printf("\n1:dem ki tu\n2:in hoa ki tu\n3:te'\n");
    printf("nhap chuoi:");gets(chuoi);
    while (1)
    {
        printf("select?...");scanf("%c",&select);getchar();
        switch (select)
        {
            case '1':demkitu(chuoi,'a');
            demkitu(chuoi,'e');
            demkitu(chuoi,'u');
            demkitu(chuoi,'i');
            demkitu(chuoi,'o');
            break;
            case '2':inhoa(chuoi);
            puts(chuoi);break;
            case '3':printf("quit?");quit=getchar();break;
        }
        if ((quit=='Y')||(quit=='y')) break;
    }
return 0;
}
42line.nội dung giống bài tobe

chikclik

Tổng số bài gửi : 12
Points : 20
Join date : 21/03/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by em_la_T.O.P on 18/04/11, 08:05 pm

So good Lưu ý một chút là thuật toán taylor chi đúng với góc x thuộc khoảng từ -2pi đến 2pi
Nên anh em nào nhập góc là 9 thì nó tính ra sai đấy Very Happy

em_la_T.O.P

Tổng số bài gửi : 137
Points : 173
Join date : 26/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by myname2 on 18/04/11, 09:34 pm

TOP nói cũng sai nốt >So good Thuật toán lập chuỗi Taylor bậc 7 chỉ trùng với hàm sin khi x nằm trong khoảng -pi đến pi Very Happy cái Taylor này khá rắc rối nên tớ chỉ đưa công thức tính của sin(x) (chính là sử dụng chuỗi Taylor bậc 7) lên đây thôi:
Sin(x) = x - (x^3)/3! + (x^5)/5! - ... +(-1)^n*(x^(2n+1))/(2n+1)!
Giá trị sin(x) càng chính xác khi n càng lớn

Có lẽ bài này xẽ xây dựng 2 chương trình còn để tính lũy thừa và giai thừa

_________________
Bước chân không ngừng nghỉ, bước chân hướng về phía trước, đó là bước chân của tôi!

myname2

Tổng số bài gửi : 66
Points : 90
Join date : 27/09/2010
Age : 24
Đến từ : Hà Nội

Xem lý lịch thành viên http://facebook.com/tuanhai

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by em_la_T.O.P on 18/04/11, 09:44 pm

Nhầm nhọt tý >So good

Còn về viết chương trình con thì có thể sử dụng đệ quy tính giai thừa khá hay Very Happy

Code:

int gt(int x)
{
    if(x==0) return 1;
    else return x*gt(x-1);
}

em_la_T.O.P

Tổng số bài gửi : 137
Points : 173
Join date : 26/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by haidang001 on 19/04/11, 01:09 am

Koltec mải chơi, nay mới lên 4umer.
Đây là sol của Koltec.

Bài 1: Không bàn

Bài 2:
Một số NX:
1. Khai triển Taylor (như bài của myname2), đúng với mọi x thuộc R.
2. KHÔNG sử dụng các chương trình con hay hàm tính giai thừa hay mũ vì sẽ tràn số (cái này làm mọi người lầm tưởng công thức Taylor chỉ đúng trong khoảng nào đó).
Ae thử vác máy tính ra bấm 20! xem bằng ?

Đây là code tính sin(x) của Koltec. Ae tham khảo, có gì bàn luận tiếp.
Code:

double sin(double x)
{
  int i = 0;
  double res = 0, add = x;
  do
    {
      res = res + add;
      i++;
      add = -add * x * x / (2 * i * (2 * i + 1));
    }
  while (((add > 0) ? add : -add) > eps);
  return res;
}
Bài 3: Ngại bàn Very Happy.

S_have fun! So good

_________________
koltec.
Email : tranvansangk41@gmail.com.

Y!M : haidang001.
Skype : haidang001.
Website : haidang001.tk or trầnvănsáng.vn

Facebook : facebook.com/haidang001[/size]

SĐT: 0942 666 890 (or 0982 802 454).


Thu đi để lại lá vàng
Anh đi để lại cho nàng thằng く
Mùa thu nối tiếp mùa thu.
Thằng くnối tiếp thằng くra đời.


S_have fun!

haidang001

Tổng số bài gửi : 91
Points : 176
Join date : 25/09/2010
Age : 24

Xem lý lịch thành viên http://haidang001.tk

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by hieupro1269 on 20/04/11, 09:36 pm

Code của Sáng ko dùng sai số à?

hieupro1269

Tổng số bài gửi : 31
Points : 37
Join date : 04/10/2010
Age : 24

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by em_la_T.O.P on 20/04/11, 10:00 pm

Sai số anh ý nhập trong main So good
Mà vừa rảnh test code của anh Sáng cũng sai nốt So good

em_la_T.O.P

Tổng số bài gửi : 137
Points : 173
Join date : 26/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by haidang001 on 20/04/11, 10:04 pm

em_la_T.O.P đã viết:Sai số anh ý nhập trong main So good
Mà vừa rảnh test code của anh Sáng cũng sai nốt So good
Sai số ở đây không so sánh với mấy đồng chí Casio đâu. Mà sai số là giữa 2 số liên tiếp trong chuỗi.
T.O.P post cái test sai lên xem để koltec fix cái. Nhanh ko có deadline.

_________________
koltec.
Email : tranvansangk41@gmail.com.

Y!M : haidang001.
Skype : haidang001.
Website : haidang001.tk or trầnvănsáng.vn

Facebook : facebook.com/haidang001[/size]

SĐT: 0942 666 890 (or 0982 802 454).


Thu đi để lại lá vàng
Anh đi để lại cho nàng thằng く
Mùa thu nối tiếp mùa thu.
Thằng くnối tiếp thằng くra đời.


S_have fun!

haidang001

Tổng số bài gửi : 91
Points : 176
Join date : 25/09/2010
Age : 24

Xem lý lịch thành viên http://haidang001.tk

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by em_la_T.O.P on 20/04/11, 11:18 pm

Đây So good

Code:

#include<stdio.h>
int main()
{
  int i = 0;
  double res = 0, add, x, eps=0.001;
  printf("\nInput x: ");
  scanf("\n%lf",&x);
  add=x;
  do
    {
      res = res + add;
      i++;
      add = -add * x * x / (2 * i * (2 * i + 1));
    }
  while (((add > 0) ? add : -add) > eps);
  printf("\nSin: %lf",res);
}

Epsilon em để là 0,001 cho nó nhanh

em_la_T.O.P

Tổng số bài gửi : 137
Points : 173
Join date : 26/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by haidang001 on 21/04/11, 12:12 am

em_la_T.O.P đã viết:Đây So good

Code:

#include
int main()
{
  int i = 0;
  double res = 0, add, x, eps=0.001;
  printf("\nInput x: ");
  scanf("\n%lf",&x);
  add=x;
  do
    {
      res = res + add;
      i++;
      add = -add * x * x / (2 * i * (2 * i + 1));
    }
  while (((add > 0) ? add : -add) > eps);
  printf("\nSin: %lf",res);
}

Epsilon em để là 0,001 cho nó nhanh
Ko phải post code, anh hỏi chú đưa test, tức là đưa số cụ thể, nhập vào làm chương trình sai ây:)

_________________
koltec.
Email : tranvansangk41@gmail.com.

Y!M : haidang001.
Skype : haidang001.
Website : haidang001.tk or trầnvănsáng.vn

Facebook : facebook.com/haidang001[/size]

SĐT: 0942 666 890 (or 0982 802 454).


Thu đi để lại lá vàng
Anh đi để lại cho nàng thằng く
Mùa thu nối tiếp mùa thu.
Thằng くnối tiếp thằng くra đời.


S_have fun!

haidang001

Tổng số bài gửi : 91
Points : 176
Join date : 25/09/2010
Age : 24

Xem lý lịch thành viên http://haidang001.tk

Về Đầu Trang Go down

Re: week9 (gần full)

Bài gửi by Sponsored content Today at 03:12 pm


Sponsored content


Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết