Diễn Đàn » Hướng Dẫn Lập trình

Nhờ các sư huynh trợ giúp dùm, cảm ơ nhiều.

8 trả lời, 1.345 lượt xem — Trang 1 / 1
<Bài viết đã được chỉnh sửa lúc 2007-09-03 11:26:44dangtt207cn0092>
Mình có một số bài tập lập trình C, do mới nghiên cứu về lĩnh vực này, nhìn vào thấy lu bu quá, nhờ các bác chỉ giáo dùm. Cảm ơn Trước nhé.
  
1.         Nhập 3 số  a,b,c  và kiểm tra xem chúng có thể là độ dài của các cạnh của một tam giác hay không. Có thông báo cho từng trường hợp.Biết rằng ba số dương a,b,c  là độ dài các cạnh của một tam giác nếu tổng của 2 số bất kỳ lớn hơn số còn lại. 
 
2.
     a. Đọc một số nguyên dương, sau đó viết ra màn hình số đó dưới dạng nhị phân.

     b. Đọc một số thực &lt;1 , sau đó viết ra màn hình số đó dưới dạng nhị phân.
 
     c.Đọc một số thực bất kỳ , sau đó viết ra màn hình số đó dưới dạng nhị phân.
 
3. Hãy nhập 4 số thực  a,b,c,d. Tìm giá trị lớn nhất của chúng và gán giá trị lớn nhất đó cho biến MAX.
 
4.   Hãy nhập vào dãy số thực x[0],x[1],...x[n]. , sau dó tìm  Max(x[0],x[1],...,x[n]).
 
5. Hãy tính cước cho một cuộc gọi điện thoại nội tỉnh. Biết  rằng: Thời gian bắt đầu, thời gian kết thúc cuộc gọi tính theo  phút và được nhập từ bàn phím.Cước dịch vụ điện thoại: 500đ / phút.    

Không tự tin là nguyên nhân gây ra thất bại.
Đăng nhập để trả lời
0
<Bài viết đã được chỉnh sửa lúc 2007-09-04 05:57:19sweet>
mình thì ko học C nhưng học Pascal[:D], thuật toán đại khái giống nhau thui, có gì để từ từ mình xem lại rồi cho bạn biết thêm nhé
1.Nhập 3 số  a,b,c  và kiểm tra xem chúng có thể là độ dài của các cạnh của một tam giác hay không. Có thông báo cho từng trường hợp.Biết rằng ba số dương a,b,c  là độ dài các cạnh của một tam giác nếu tổng của 2 số bất kỳ lớn hơn số còn lại. 

cái này chì có 3 số, cách tào lao nhất là vét cạn. C hình như khó bị tràn số hơn TP.

2. a. Đọc một số nguyên dương, sau đó viết ra màn hình số đó dưới dạng nhị phân.  

hiện tại mình chỉ biết số nguyên thôi: lấy số đó chia nguyên cho 2 (đ/v nhị phân), lấy phần dư viết ra riêng, chia thương cho 2 tiếp tục cho đến khi thương nguyên=0, đọc ngược lần lượt các giá trị số dư từ dưới lên.
vd:


67/2=33 dư 1
33/2=16 dư 1
16/2=8   dư 0
8/2=4    dư 0
4/2=2    dư 0
2/2=1    dư 0
1/2=0    dư 1


vậy kq ra nhị phân của 67 là 1000011 (đọc từ dưới lên)
cách làm chi tiết bạn tự nghĩ đi nha! theo mình thì dùng chuỗi họăc mảng để ghi nhận kq số dư rồi đảo.

3. Hãy nhập 4 số thực  a,b,c,d. Tìm giá trị lớn nhất của chúng và gán giá trị lớn nhất đó cho biến MAX.

cái này thì... vét là xong, có vấn đế chăng thì ở chỗ số nó cho là số thực, bạn cứ gán lần lượt các số là Max rồi so sánh. tương tự bài 4

5. Hãy tính cước cho một cuộc gọi điện thoại nội tỉnh. Biết  rằng: Thời gian bắt đầu, thời gian kết thúc cuộc gọi tính theo  phút và được nhập từ bàn phím.Cước dịch vụ điện thoại: 500đ / phút.    

bài này mình ko rõ là bạn gặp rắc rối ở đâu nữa! có gì thì chia sẽ lên đi, mọi người nhào vô giúp chứ!
TB: lâu rồi Sweet ko xài mấy cái thuật tóan này, nhất là đổi số! có gì sai sót thì thứ cho nha! và bạn dang... lần sau có xin xỏ thì đừng có sư huynh ko, các đệ, muội, tỷ cũng giúp được nữa đấy[:D]
Bình luận văn học: http://diendan.vnthuquan.net/tt.aspx?forumid=242
New app for Windows Phone 8: Location Reminder
http://diendan.vnthuquan.net/tm.aspx?high=&m=792697&mpage=1#792697
Đăng nhập để trả lời
0
"Viết dưới dạng nhị phân" là sao vậy? KDG không biết... [8|]
 
Đăng nhập để trả lời
0
<Bài viết đã được chỉnh sửa lúc 2007-09-07 06:58:42sweet>
KeDangGhet đúng là đúng là danh bất hư truyền, cao thủ dzậy mà giả nai! sweet ko rành cách dùng từ lắm, chắc nói là số viết dưới dạng cơ số 2 hay là hệ nhị phân thì KDG hiểu he!
quay lại câu hỏi của bạn dang..., mình có "tu liện" thêm một tí[:D]. cái số thực muốn chuyển sang hệ nhị phân thì nó... khùng lắm[:@] đại khái là nhân số thực đó lên cho nó thành số nguyên(tương đối thôi, gặp phải thập phân vô hạn ko tuần hoàn thì toi), chuyển sang hệ nhị phân rồi chia cái số hệ nhị phân đó cho cái 10^n mà bạn nhân ban nãy dưới dạng nhị phân=&gt;.... rất nhiều thứ[8D]. bạn tìm thử sách thuật toán nào đó cho chắc ăn đi nha!
Sweet xin hiệu đính lại một chút: cách để chuyển số thực thành dạng nhị phân thì mình tách số đó thành phần nguyên, chuyển; phần thập phân (sau dấu phẩy) rồi chuyển như thường, sau đó cho phần thập phân dạng nhị phân ra sau dấu phẩy của phần nguyên dạng nhị phân.
Bình luận văn học: http://diendan.vnthuquan.net/tt.aspx?forumid=242
New app for Windows Phone 8: Location Reminder
http://diendan.vnthuquan.net/tm.aspx?high=&m=792697&mpage=1#792697
Đăng nhập để trả lời
0
Xin lỗi Sweet nha, hum qua KDG làm biếng, không có đọc bài giải của Sweet, bi giờ đọc lại thì hiểu rồi...
KDG thắc mắc cái đó là thiệt muh, tại vì KDG dốt tiếng Việt lắm... [:)]
 
 
@dangtt : muốn học 1 ngôn ngữ thì tốt nhất mình phải tự tìm hiểu, làm thử, không chạy thì sửa lại sao cho chạy tốt... Chớ nhờ người khác làm hết thì sẽ không thể tiến được đâu...
 
KDG tặng bạn 1 cách giải cho bài đầu : đây là 1 function, nhận 3 cạnh a, b, c. Nếu a, b, c có thể là 3 cạnh của 1 tam giác thì nó sẽ ra 1 (= True theo ngôn ngữ C), không thôi thì là 0 (= False), đồng thời báo cho biết cạnh nào quá lớn...
 
int CoTheLaTamGiac(int a, int b, int c)
{
   if (a &gt; b + c)
   {
      printf("a quá lớn\n");
      return 0;
   }
   if (b &gt; a + c)
   {
      printf("b quá lớn\n");
      return 0;
   }
   if (c &gt; a + b)
   {
      printf("c quá lớn\n");
      return 0;
   }
 
return 1;
}
 
Đăng nhập để trả lời
0
ơ, thế là trách nhầm KDG rồi[8D]. cứ tưởng KDG đang muốn chọc quê mình chớ! chắc KDG phải vào mục "Trao dồi Việt Ngữ" đấy! bạn dang... đăng câu hỏi ở đây rồi chạy mất tiêu à[:D] (chắc bạn đó đang làm mấy cái bài này rùi)
sweet thật ra cũng dốt thúi luôn về lập trình[&amp;:]. xin sư huynh chỉ giáo thêm không biết mấy cái đổi số ra hệ nhị phân vậy đã đúng chưa? (tranh thủ ôn bài vì sweet làm mất hết giấy tờ hồi đó rồi). theo như sweet nhớ/biết thì hình như số âm đổi ra hệ nhị phân là tuỳ theo mình quy ước đâu là âm, đâu là dương phải không? độ này lười biếng quá, chắc phải học lại thiệt!

Bình luận văn học: http://diendan.vnthuquan.net/tt.aspx?forumid=242
New app for Windows Phone 8: Location Reminder
http://diendan.vnthuquan.net/tm.aspx?high=&m=792697&mpage=1#792697
Đăng nhập để trả lời
0
Trích đoạn: sweet

ơ, thế là trách nhầm KDG rồi[8D]. cứ tưởng KDG đang muốn chọc quê mình chớ! chắc KDG phải vào mục "Trao dồi Việt Ngữ" đấy! bạn dang... đăng câu hỏi ở đây rồi chạy mất tiêu à[:D] (chắc bạn đó đang làm mấy cái bài này rùi)

KDG lúc trước có ghé thử mục này, nhưng đọc chưa hết bài "Trau dồi hay là trau giồi" đã thấy chóng mặt rồi, nên nghĩ mình còn chưa có đủ trình độ ở đây chơi, đi trở ra luôn... [:D]
 
sweet thật ra cũng dốt thúi luôn về lập trình[&amp;:]. xin sư huynh chỉ giáo thêm không biết mấy cái đổi số ra hệ nhị phân vậy đã đúng chưa? (tranh thủ ôn bài vì sweet làm mất hết giấy tờ hồi đó rồi).

Lập trình là viết các lệnh theo 1 logic nào đó để cái chương trình cho kết quả như mình muốn, khi bắt đầu học thì mình có thể thấy 1 số người có vẽ "có khiếu" hơn những người khác, nhưng nếu được "tập dợt" nhiều rồi thì không thể nói là mình dốt được... Cái này có thể so sánh với trò xếp hình puzzle, 1 đứa bé xếp lần đầu, nó sẽ tìm đại 2 cái hình nằm cạnh nhau, rồi từ đó tiếp tục tìm những mảnh xung quanh, thật mất thời gian... (Còn mình quen rồi thì biết cách làm nhanh hơn : thông thường nhất là tìm hết các mảnh ngòai bìa để ráp lại trước, rồi mới đến phần ở giữa) [:)]
 
Về việc đổi số sang hệ nhị phân, dĩ nhiên có nhiều cách làm, cách của Sweet đưa ra cũng hay mà...
1 cách khác : theo ví dụ của Sweet, con số 67 (viết ra thành 1000011), nếu viết nó dưới dạng tổng của những lủy thừa của 2 thì = 1x2^6 + 0x2^5 + 0x2^4 + 0x2^3 + 0x2^2 + 1x2^1 + 1x2^0 (-&gt; 1000011)
Vậy đầu tiên phải tìm ra n lớn nhất với 2^n &lt;= 67, ở đây n = 6 (2^7 = 128, quá lớn), rồi từ đó đi mà tính :
A = 67
Lập lại với i = 6 cho tới 0
  Nếu A - 2^i &gt; 0
    ghi 1
    A = A - 2^i
  Nếu không
    ghi 0
 
theo như sweet nhớ/biết thì hình như số âm đổi ra hệ nhị phân là tuỳ theo mình quy ước đâu là âm, đâu là dương phải không? độ này lười biếng quá, chắc phải học lại thiệt!

Đúng rồi, số âm dưới dạng nhị phân thì có nhiều cách viết khác nhau, phải tùy theo quy định ban đầu...
Sweet cố gắng học lại đi, học xong chỉ lại cho KDG hén ! [;)]
Đăng nhập để trả lời
0
   Hổm rài công việc lu bu quá không đụng đến máy tính. Hôm nay vào là vô đay liền. Mình vừa làm xong câu 4, nhờ các Sư kiểm tra lại góp ý dùm.Cảm ơn trước nhé.
 
4.Nhập dãy số thực x[0],x[1],x[2]…x[n]sau đó sắp xếp dãy số đó theo thứ tự tăng dần.

#include&lt;stdio.h&gt;
#include&lt;conio.h&gt;

void main()
{clrscr();
float x[100], temp;
int i,j,n;
printf(“\nVAO SO PHAN TU CUA MANG:”);
scanf(“%f”,&n);
for(i=0;i&lt;=n-1;i++)
{printf(“\x[%d]=”,i);
scanf(“%f”,&x);
}
for(i=0;i&lt;=n-1;i++)
for(j=i+1;j&lt;=n;j++)
{
if(x&gt;x[j])
temp=x;
x=x[j];
x[j]=temp;
}
printf(“\DAY SO DUOC SAP XEP NHU SAU:”);
for(i=0;i&lt;n;i++)
printf("%f",x);
getch();
}
Không tự tin là nguyên nhân gây ra thất bại.
Đăng nhập để trả lời
0
<Bài viết đã được chỉnh sửa lúc 2007-09-12 16:06:40KeDangGhet>
Chaò dangtt,

Bài số 4, người ta hỏi max (= số lớn nhất) của dãi số x[0] -&gt; x[n], nhưng bài của làm của dangtt thì xếp các số từ nhỏ tới lớn... Nhưng không sao, cứ theo như vậy đi hén... [:)]
KDG chép lại dưới đây bài làm của bạn, & tô đỏ những chổ KDG đã sửa lại :

#include&lt;stdio.h&gt;
#include&lt;conio.h&gt;

void main()
{clrscr();
float x[100], temp;
int k,j,n;
printf(“\nVAO SO PHAN TU CUA MANG:”);
scanf(“%d”,&n);  /* n thuộc loại int, sao lại để "%f" */
for(k=0;k&lt;=n-1;k++)  /* Theo đề baì thì từ 0 tới n, có n+1 số, mình cứ coi như đây là con số n mình đọc */
{printf(“\nx[%d]=”,k);  /* \n để nhảy hàng trước khi đọc 1 số mới */
scanf(“%f”,&x[k]);  /* coi chừng */
}
for(k=0;k&lt;=n-2;k++)  /* k chỉ đi tới số áp chót thôi */
for(j=i+1;j&lt;=n-1;j++)  /* j thì đi tới số chót, tức n-1 */
{
if(x[k]&gt;x[j])
temp=x[k];
x[k]=x[j];
x[j]=temp;
}
printf(“\DAY SO DUOC SAP XEP NHU SAU:”);
for(i=0;k&lt;n;k++)
printf("%f\n",x[k]);  /* \n để nhảy hàng, hoặc là thêm vài ô trắng, để các số khỏi dính với nhau */
getch();
}

 
Thì ra là "[ i ]" bị biến mất hết (máy tưởng là lệnh đổi chữ sang dạng italic), KDG phải thế i = k nó mới chịu hiện ra... [:)]
 
Đăng nhập để trả lời
0