Tải bản đầy đủ (.docx) (17 trang)

Nêu cách xây dựng các hàm trong c++,minh hoạ và hướng dẫn người sử dụng các hàm trước khi dùng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (88.41 KB, 17 trang )

Lời nói đầu
Cho đến nay, có rất nhiều ngôn ngữ lập trình đợc sử dụng để thiết kế các chơng
trình máy tính. Trong đó, C++ là một ngôn ngữ đợc sử dụng nhiều nhất trong việc
thiết kế các chơng trình øng dơng cịng nh thiÕt kÕ phÇn mỊm hƯ thèng. Tuy nhiên,
trong C++ việc xây dựng hàm trong th viện là công việc khó khăn đối với ngời lập
trình .Do đó, em chọn đề tài "Nêu cách xây dựng các hàm trong C++,minh hoạ và hớng dẫn ngời sử dụng các hàm trớc khi dùng" nhằm tạo lập một th viện các hàm và
ứng dụng các hàm trong việc xử lý .
Nội dung đề tài gồm ba chơng:

Chơng I
Chơng II
Chơng III
Chơng IV
Chơng V

- Giới thiệu về các hàm trong C++
- Khai báo và định nghĩa hàm
- Tham số trong gọi hàm và phạm vi của đối tợng
- Chơng trình xây dùng hµm
- Hìng dÉn sư dơng hµm cho ngêi dïng

Mơc ®Ých chđ u cđa em trong ®Ị tµi nµy lµ học tập, nghiên cứu và đa ra các ý tởng giải thuật của mình. Do đó phần ứng dụng các hàm chỉ áp dụng đối với các hàm
đà đợc xây dựng ở trong th viên hàm .
Do hạn chế về trình độ, thời gian thực hiện đề tài trên do đó không tránh khỏi
những thiếu sót. Em mong đợc sự góp ý của các Thày, các Cô và các bạn sinh viên.

Chơng I
Khái quát về các hàm trong trong C++
1.1. Tổng quan về chơng trình con
Các chơng trình con cho phép lập trình viên mô đun hoá chơng trình .Nói chung ,
các biến định nghĩa trong chơng trình con là các biến cục bộ , chúng chỉ đợc biết



1


trong bản thân chơng trình con tại đó chúng đợc định nghĩa .Hỗu hết chơng trình con
đều có tham số .Các tham số cung cấp thông tin truyền giữa các chơng trình con .Các
tham số của chơng trinhg con nói chung cũng đợc xem nh các biến cục bộ.
1.2. Các Mô đun chơng trình trong C++.
Các Môđun trong C++ đợc gọi là hàm. Chúng ta sẽ bàn đến cả hai laọi hàm trên
trong chơng này .Các hàm chuẩn trong th viện cảu C++ cung cấp rấy nhiều các thao
tác tính toán ,thao tác trên xâu ký tự,thao tác ký tự ,vào/ra và nhiều thao tác thông
dụng khác .Chúng làm cho công việc của lập trình viên dễ dàng hơn vì các hàm này
đa ra rất nhiều khả năngcho các lập trình viên.Mặc dù các hàm trong th viện chuẩn
không phải là một phần trong ngôn ngữ lập trình C++,theo chuẩn ANSI C++ chúng
hàm không thay đổi trong các chơng trình dịch C++ khác nhau.
Lập trình viên có thể viết các hàm thao tác các công việc xác định dùng tại nhiều
nơi trong chơng trình .Các hàm loại này đôi khi còn đợc gọi là Hàm ngời dùng định
nghĩa .Các câu lệnh cài đặt cụ thể hàm này chỉ phải viết một lần ,chúng đợc ẩn bên
trong và có thể dùng lại nhiều lần.

1.3 Giới thiệu th viện các hàm toán học
Th viện các hàm toán học cho phép lập trình viên thực hiện các thao tác toán học
cơ bản . Một vài hàm trong th viện các hàm toán học của C++ đợc tổng kết trong
bảng(1). Chúng ta sẽ sử dụng th viện các hàm toán học ở đây để giới thiệu các khái
niệm hàm .
Vi dụ:
Ta sử dụng hàm nh sau:
char *dkt1,*dkt2;
cout<<"\n Nhap day ky tu 1 :";
cin.get(dkt1 , 24);

cin.ignore();
cout<<"\n Nhap day ky tu 2 :";
cin.get(dkt2 , 24);

2


Bảng các hàm thờng dùng trong th viện chuẩn
Hàm
sqrt(x)
exp(x)
log(x)
sin(x)
cos(x)
tan(x)
pow(x,y)

Mô tả
Căn bậc hai
Hàm mũ ex
Hàm logarit tự nhiên cảu x
sin của x
cos cđa x
tan cđa x
X mị y

Vi dơ
sqrt(9)=3
exp(1)=2.718282
log(2.718=1282

sin(0.0)=0.0
cos(0.0)=1.0
tan(0.0)=0.0
pow(2,7)=128

Ch¬ng ii
2.1 Mét số ví dụ
Mỗi chơng trình đều có một hàm chính main() . Hàm này gọi các hàm khi để
thực hiện công việc của chơng trình..
#include<stdio.h>
int square(int);
void main()
{
int i;
for (i=1;i<=10;i++)
cout<< ,square(I);
cin>>square;
}
int square(int x);
{
int y;
y=x*x;
return y;
}
2.2 Tổng quan về chơng trình con
Khuân dạng của phần cài đặt hàm có dạng

3



{kiểu giá trị trả về} tên hàm
{
Các khai báo

Các câu lệnh
}

Trong đó ,tên hàm là bất kỳ tên hợp lệ nào ,kiểu giá tri trả về là kiểu dữ
liệu của kết quả trả lại cho hàm gọi nó.Khác với Pascal ,C++ không cho phép trả về
giá trị là một biến mảng , còn mọi kiểu dữ liệu hợp lệ khác đều có thể sử dụng để mô
tả kiểu giá trị trả về cho hàm . Kiểu giá trị trả về là void thì hàm không trả lại giá trị
nào cả .
Nếu không xác đin hịnh kiểu giá trị trả về thì trìmh biên dịch sẽ ngầm định coi đó
là int. Danh sách tham số mô tả kiểu dữ kiệu cùng thứ tự của các tham số hàm nhận
đợc khi nó đợc gọi. Tơng ứng với mỗi tham sè cã mét tham sè h×nh thøc cïng víi
kiĨu tơng ứng . Các tham số hình thức phân cách nhau bằng dấu phẩy , . Cũng nh
kiểu giá trị trả về , C++ không đa ra hạn chế gì về kiểu giá trị của tham số .Nó có thể
là kiểu dữ liệu cơ sở hay kiểu dữ liệu có cÊu tróc , cã thĨ khai b¸o trùc tiÕp c¸c tham
số với kiểu có cấu trúc trong định nghĩa của hàm . Nếu hàm không nhận tham số nào
cả ,danh- sách tham so là void . Kiểu của từng tham số cần ghi rõ ra , nếu không
ghi kiểu , trình biên dịch sẽ ngầm hiểu là kiểu int.
2.3 Hàm nguyên mẫu
Một trong những đặc trng quan trọng của ANSI C++ là hàm nguyên mẫu . Hàm
nguyên mâu thông báo cho chơng trình biên dịch biết kiểu dữ liệu hàm trả lại, số lợng
, kiểu và thứ tự của các tham số chuyền cho hàm . Chơng trình biên dịch dùng hàm
nguyên mẫu để kiểm tra các lời gọi hàm . Các phiên bản trớc đấy không thực hiện
quá trình kiểm tra này nên có thể xẩy ra nhiều lỗi thự hiện ứng dụng rất khó phát
hiện.
2.4 Các tệp tiêu ®Ò


4


Mỗi một th viện chuẩn tơng ứng có một tệp tiêu đề chứa các khai báo của tất cả
các hàm trong th viện này cùng với các định nghĩa các kiểu dữ liệu khác nhau , các
hằng dùng trong các hàm đó , liệt kê các tệp tiêu đề có thể dùng trong chơng
trình .Khái niệm macro dùng trong bảng sẽ đợc mô tả chi tiết trong phần tiền xử lý.
Một trong những khó khăn lớn nhất khi mới học ngôn ngữ C++ là không biết
cách sử dụng các hàm th viƯn chn trong C++ . Cã rÊt nhiỊu c¸ch để vợt qua khó
khăn này . Thứ nhất là đọc các tài liệu vè ngôn ngữ . Tuy nhiên theo kinh nghiệm ,
việc sử dụng các công cụ trợ gúp đi kèm các chơng trình dịch tỏ ra hiệu quả hơn
nhiều . Để thực hiện điều này có hai cách :
Nếu biết tên hàm : Trong màm hình soạn thảo của chơng trình biên dịch C++ ta
đánh vào tên hàm cần tra cứu, màn hình trợ giúp của C++ sẽ cho ta biết các thông tin
liên quan liên quan đến hàm nh là : Các tệp tiêu đề cần gộp vào qua chỉ thị tiền xử lý
#include khi sử dụng hàm , dạng khai báo của hàm ,và thậm chỉ còn có thể có những
chơng trình ví dụ rất thú vị về hàm cần tra cứu.
Tìm hiểu nội dung một tệp tiêu đề :Trong trờng hợp này màn hình trợ giúp hiển
thị cho ta danh sách các hàm , hằng , biến khai báo bên trong tệp tiêu đề .Việc tra cứu
các hàm ,hằng ,biến đợc thực hiện bằng việc di chuyển vệt sáng trên màn hình trợ
giúp và ấn Enter để xem.
Bảng các tệp tiêu đề của các th viện chuẩn
Tệp *.h
<asset.h>
<ctype.h>
<errno.h>
<float.h>
<limits.h>
<locale.h>
<math.h>

<stdio.h>
<stdlib.h>
<string.h>
<time.h>

Nội dung
Các macro và thông tin trợ giúp lập trình debbug
Các hàm nguyên mâu và các hàm kiểm tra thuộc tính ký tự
Các macro biểu thi thông tin về lỗi
Các giới hàn về số dấu phẩy động của hệ thống
Các giới hạn của hệ thống
Các hàm và các thôngc tin liên quan đến việc thay đổi ngôn ngữ
và mà nớc
Các hàm nguyên mẫu của các hàm th viện toán học
Các hàm nguyên mẫu và các thông tin của th viện hàm vào /ra
chuẩn
Các hàm nguyên mẫu và các thông tin liên quan của các hàm
chuyển kiểu .
Các hàm nguyên mẫu của hàm xử lý xâu
Các hàm gnuyên mẫu và kiểu dữ liệu cho thao tác thời gian

Chơng III
3.1 Mét sè kh¸i niƯm
5


Tham số hình thức:Khái niệm này chỉ đến các tham số đợc khai báo trong phần
danh sách tham số trong định nghĩa hàm. Ta gọi đây là tham số hình thức vì thực tế
chúng chỉ đóng vai trò ngời đại diện cho các tham số thực trong các lời gọi hàm .
Mỗi tham số hình thức sẽ tơng ứng đại diện cho các tham số thực . Kiểu dữ liệu của

tham số sẽ quyết định kiểu giá trị cho tham số thực tơng ứng .
Tham số thực: Khái niệm này chỉ đến các thông tin đợc truyền cho hàm trong cac
lời gọi hàm . Mỗi tham số thực tơng ứng với một tham số hình thức.
Liên quan đến việc truyền thông tin cho hàm,ta phân biệt : truyền theo trị và
truyền theo tham biến . Khi các tham số đợc truyền theo trị , một bản sao giá trị của
tham số thực đợc tạo ra và gán cho các tham số hình thức cảu hàm. Vì vậy mọi sự
thay đổi trong hàm trên bản sao sẽ không ảnh hởng đến giá trị ban đầu của biến nằm
trong hàm gọi . Khi tham số đợc truyền theo tham biến , hàm gọi sẽ truyền trực tiếp
tham số đó cho àhm đực gọi. Trong trờng hợp này tham số hình thức và tham số thực
là một . Nh vậy ,nếu bên trong hàm bị gọi có thay đổi đến tham số hình thức thì
những thay đổi đó cũng có tác dụng trên các tham số thực tơng ứng . Điều này đôi khi
dẫn đến ảnh hớng hiệu ứng phụ.
3.2 Tham số hình thức của hàm là con trỏ
Khi tham số hình thức của hàm là con trỏ thì tham số thực tơng ứng phải là một
địa chỉ , có thể là địa chỉ của một biến hoặc tên cảu một biến mảng. Khi truyền địa
chỉ của biến cho hàm ngời ta có thể tuỳ thích thay đổi giá trị của biến với việc kahi
báo tham số hình thức nh một mảng : thứ nhất tiết kiệm đợc thời gian sao chép số liệu
, thứ hai có thể thay đổi gia trị cảu các phần tử trong biến mảng đợc truyền vào .
3.3 Cấp lu trữ và phạm vi caqủ các đối tợng
Ta biết rầng mỗi đối tợng sử dụng trong một chơng trình cần phải có các khai báo
. Các khai báo cáo thể đợc đặt ở ngoài tất cả các hàm hoặc ở bên trong một hàm nào
đó . Các khai báo đặt ở các vị trí khác nhau làm cho đối tợng đợc khai báo có các tính
chất khác nhau. Sự khác nahu đó thể hiện ở phạm vi sử dụng , thời gian tồn tại và cấp
lu trữ .
Phạm vi cảu một đối tợng là phần chơng trình mà đối tợng còn đợc nhìn thấy có
thể sử dụng bởi phần chơng trình đó . Phạm vi có thể là trong một khối lẹnh , một
hàm hoặc một tệp nguồn hoặc thể chơng trình .
Một số đối tợng có thời gain tồn tại rất ngắn , một số thì liên tục đợc tạo ra rồi
xoá đị, một số khác tồn tại trong suốt thời gian thực hiện chơng trình. Sau khi mét ®èi


6


tợng đà đợc khai báo máy tính sẽ cung cấp cho biến hoặc hàm vùng nhớ thờng trực
hay động trong thời gian thực hiện chơng chình . Nh vậy , một đối tợng có thể có thời
gian tồn tại lâu dài hay tạm thời.
Cấp lu trữ của đối tợng đợc xác định dựa theo vùng bộ nhớ đợc cấp phát . Các đối
tợng đợc cấp phát bộ nhớ thờng trực thì có cấp lu trữ cố định . Thuộc loại này bao
gồm các hàm và các biến kahi báo bên ngoài các hàm . Bên cạnh đó cũng có một sè
biÕn cơc bé cã thc tÝnh nµy , chóng ta sẽ xem xét vấn đề này sau . Các đói t ợng có
cấp lu trữ cố định tồn tại ngay khi chơng trình bắt đàu thực hiện . Đối với biến hàm ,
tên của hàm cũng tồn tại ngay khi chơng trình bắt đầu thực hiện . Tuy nhiên , mặc dù
biến và tên hàm tồn tại ngay khi bắt đầu chơng trình nhng không có nghĩa là đối tợng
này có thể dùng bất cứ đâu trong chơng trình .
Các biến cáp lu trữ động đợc tạo ra khi vào khối mà chúng đợc khai báo , chúng
tồn tại khi điều khiển còn đang trong khối đó và chúng sẽ bị xáo quyền điều khiển
thoát ra khỏi khối.
Phạm vi và thời gian tồn tại và cấp lu trữ của một đối tợng đợc xác định bằng
cách tổ hợp các từ khoá chỉ dịng cấp lu trữ với các khai báo cùng vị trí bên trong hay
bên ngoài hàm hay một khối lệnh.
Ngôn ngữ C++ cung cấp 4 từ kháo sau : auto, extern,static, register để chỉ định
phạm vi và thời gian tồn tại của các biến . Chúng có thể chia thành hai những theo
thời gian tồn tại hay phạm vi .
3.4 con trỏ hàm
Mặc dù một hàm không phải là một biến nhng nó vẫn chiếm vị trí trong bộ nhớ
và ta có thể gán vị trí của nó cho mét lậi biÕn con trá . Con trá nµy trỏ đến điểm
xâm nhập vào hàm . ta gọi đay alf con trá hµm . Con trá hµm cã thĨ sử dụng thay cho
tên hàm và việc sử dụng con trỏ cho phép các hàm cũng đợc truyền nh là tham số cho
các hàm khác.
Để hiểu đợc các con trỏ hàm làm việc nh thế nào , ta cần hiểu một chút về cách

biên dịch và gọi một hàm . Khi biên dịch hàm , trình biên dịch chuyển chơng trình
nguồn sang dạng mà máy và thiét lập một điểm xâm nhập vào hàm . Khi có lời gọi
thực hiện hàm, máy tính sẽ thực hiện một chỉ thị call chuyển điều khiển đến điểm
xâm nhập này . Trong trờng hợp gọi hàm bằng tên hàm thì điểm xam nhập này là trị
tức thời , cách gọi hàm này gọi là cách gọi hàm trực tiếp . Trái lại , khi gọi hàm gián

7


tiếp thông qua một biến con trỏ thì biến trỏ đó pahỉ trỏ tới chỉ thị mà máy đầu tiên
của hàm đó . Cách gọi hàm thông qua biến trỏ hàm gọi là cách gọi hàm gián tiếp.
Cách khai báo bién con trỏ:
[kiểu_giá_trị] (*tên_biến_trỏ_hàm) ([danh_sách_tham_số]);

3.5 Đệ qui
Các chơng trình đà xét đều có chung cấu trúc phân cấp giữa hai hàm gọi và hàm
bị gọi . Tuy nhiên trong một số bài toán , việc gọi hàm ngay chính nó rất hữu dụng .
Có thể định nghĩa hàm đệ qui là hàm sẽ gọi đến chính nó trực tiếp hay gián tiép
thông qua các hàm khác. Vấn đề đệ qui lad một vấn đề rất phức tạp, vì vậy trong phần
này chỉ giới thiệu những khía cạnh cùng với những ví dụ đơn giản nhất của vấn đề đệ
qui. Trớc tiên ta xem xét khái niệm đệ qui , sau đó kiểm tra trên một vài chơng rtình
có chứacác hàm đệ qui . Cách tiến hành giải một bài toán đệ qui nhìn chung có những
điểm chung sau :
Hàm đệ qui thực ra chỉ giải bài toán trong trờng hợp đơn giản nhất hay còn gọi là
trờng hợp cơ sở . Khi hàm đệ qui đợc gọi trong trờng hợp cơ sở , hàm chỉ cần trả lại
kết quả . Nếu hàm đợc gọi trong các trờng hợp phức tạp hơn , hàm đệ qui sẽ chia
công việc cần giải quyết thành hai phần . Một phần hàm biết cách giải quyết nh thế
nào , còn phần kia vẫn không biết cách giải quyết nh thế nào tuy nhiên để đợc gọi là
có khả năng đề qui , phần sau phải giống với bài toán ban đầu nhng đơn giản hơn hay
nhỏ hơn bài toán ban đầu . Bởi vì bài toán mới giống nh bài toán ban đầu nên hàm sẽ

thực hiện gọi chính nó để giải quyết coong việc đơn giản này - đây chính là lời gọi đệ
qui hay còn gọi là một bớc đệ qui . Để đảm bảo việc đệ qui có kết thúc , mỗi một lần
gọi đệ qui thì bài toán phải đảm bảo dơn giản và các bớc đệ qui này còn thực hiện
tiếp cho đến khi nào bài toán đơn giản dần , đơn gian tới mức trở thành trờng hợp cơ
sở . Ta nhận thấy hàm đệ qui xử lý trờng hợp cơ sở để trả lại két quả tính đợc cho các
hàm mức phức tạp hơn nữa ....cứ nh vậy cho đến lời gọi hàm ban đầu . Trớc khi đữ ra
các nhận xét tiếp , ta xem xét vÝ dô sau:
TÝnh gaii thõa n!
#include<stdio.h>
long giaithua(long);
void main()
{
int i;
8


for (i=0;i<=n;i++)
cout<< ,i,giaithua(i);
//định nghĩa hàm giaithua
long giaithua(long number)
{
if (number=0)
return 1;
else
return (number *giaithua(number-1));
}
chơng IV
Các hàm em sẽ xây dựng trong đề án nh sau:
-Xây dựng hàm vẽ tam giác tô sẵn màu nền
-Xây dựng hàm vẽ hình tròn tô sẵn màu nền

-Xây dựng hàm vẽ hình chữ nhật tô sẵn màu nền
-Xây dựng hàm vẽ hình tròn nội tiếp trong hình vuông
-Xây dựng hàm tính các đại lợng trong tam giác khi biết tạo độ 3 đỉnh (A,B,C):
+Diện tích
+Chu vi
+ma
+ha
+la
+r
+R
Và thông báo :
+Tam giác cân
+Tam giác vuông
+Tam giác vuông cân
+Tam giác đều
+Tam gíc bình thờng.
-Xây dựng hàm tính giai thừa: n!
-Xây dựng hàm tính tổng: 1+....+n và 12 +....+n2
Chơng trình chính
-Chờng trình chính em lấy tên là : LIB.H
&----------------------------------------------&-------------------------------------------------&
#ifndef __LIB_H
9


#define __LIB_H
#ifndef __IOSTREAM_H
#include <iostream.h>
#endif
#ifndef __GRAPHICS_H

#include <graphics.h>
#endif
#ifndef __MATH_H
#include <math.h>
#endif
#ifndef __CONIO_H
#include <conio.h>
#endif
//*******************************************************************
void vetamgiac(void);
void vehinhtron(void);
void vehinhchunhat(void);
void vehinhtronnoitiep(void);
void tinhtamgiac(void);
void tinhgiaithua(void);
void tinhtong(void);
//*******************************************************************
void vetamgiac(void)
{ typedef struct { int x,y; } typepoint;
typepoint a[3];
int x,y,color;
clrscr();
for ( int i = 0; i < 3; i++ )
{
cout<<" DINH "<< i<<" := ";
cin>>a[i].x >>a[i].y;
}

1
0



cout<<"Mau tam giac := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color);
line(a[0].x,a[0].y,a[1].x,a[1].y);
line(a[0].x,a[0].y,a[2].x,a[2].y);
line(a[2].x,a[2].y,a[1].x,a[1].y);
x = (a[0].x + a[1].x + a[2].x) /3;
y = (a[0].y + a[1].y + a[2].y) /3;
setfillstyle(1,color);
floodfill(x,y,color);
getch();
closegraph();
}
//
********************************************************************
**
void vehinhtron(void)
{ typedef struct { int x,y; } typepoint;
typepoint a;
int color,size;
clrscr();
cout<<" TAM HINH TRON := ";
cin>>a.x >>a.y;
cout<<" BAN KINH HINH TRON := ";
cin>>size;
cout<<"MAU HINH TRON := ";

cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color);
1
1


circle(a.x,a.y,size);
setfillstyle(1,color);
floodfill(a.x,a.y,color);
getch();
closegraph();
}
//******************************************************************
void vehinhchunhat(void)
{ typedef struct { int x,y; } typepoint;
typepoint a[2];
int x,y,color;
clrscr();
cout<<" DINH DAU := ";
cin>>a[0].x >>a[0].y;
cout<<" DINH CUOI := ";
cin>>a[1].x >>a[1].y;
cout<<"Mau hinh chu nhat := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color);
rectangle(a[0].x,a[0].y,a[1].x,a[1].y);

x = (a[0].x + a[1].x ) /2;
y = (a[0].y + a[1].y ) /2;
setfillstyle(1,color);
floodfill(x,y,color);
getch();
closegraph();
}
//******************************************************************
void vehinhtronnoitiep(void)
{ typedef struct { int x,y; } typepoint;
1
2


typepoint a[2];
int x,y,r,color;
clrscr();
cout<<" DINH DAU := ";
cin>>a[0].x >>a[0].y;
cout<<" DINH CUOI := ";
cin>>a[1].x >>a[1].y;
cout<<"Mau hinh tron := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color+1);
bar(a[0].x,a[0].y,a[1].x,a[1].y);
setcolor(color);
x = (a[0].x + a[1].x ) / 2;
y = (a[0].y + a[1].y ) / 2;

r = abs(a[0].x - a[1].x) /2;
circle(x,y,r);
setfillstyle(1,color);
floodfill(x,y,color);
getch();
closegraph();
}
//******************************************************************
void tinhtamgiac(void)
{ typedef struct { int x,y; } typepoint;
typepoint A[3];
double ha,la,ma,p,s,a,b,c,dk,cosa,r,R;
const double e = 0.0000001;
clrscr();
for ( int i = 0; i < 3; i++ )
{
1
3


cout<<" DINH "<< i<<" := ";
cin>>A[i].x >>A[i].y;
}
a = double(sqrt((A[0].x -A[1].x)*(A[0].x -A[1].x) + (A[0].y-A[1].y)*(A[0].yA[1].y)));
b = double(sqrt((A[0].x -A[2].x)*(A[0].x -A[2].x) + (A[0].y-A[2].y)*(A[0].yA[2].y)));
c = double(sqrt((A[2].x -A[1].x)*(A[2].x -A[1].x) + (A[2].y-A[1].y)*(A[2].yA[1].y)));
p = double((a+b+c)/2);
s = double(sqrt(p*(p-a)*(p-b)*(p-c)));
ma = sqrt(((b*b +c*c)*2 -a*a)/4);
ha = (s*2)/a;

cosa = sqrt(((b*b + c*c - a*a )/(2*b*c)+1)/2);
la = (2*b*c*cosa)/(b+c);
R = (a*b*c)/(4*s);
r = (s/p);
cout<<"dien tich := "<< s <cout<<" chu vi := "<< p*2<cout<<" ma := "<< ma<cout<<" ha := "<< ha<cout<<" la := "<< la<cout<<" r := "<< r<cout<<" R := "<< R<if ((a == b)&&(b==c)) cout<<" Tam giac la tam giac deu /n"<else
{
if ((int(a) == int(b))&&(int(b)!= int(c))) cout<<"Tam giac la tam giac
can"<if ((int(c) == int(b))&&(int(b)!= int(a))) cout<<"Tam giac la tam giac
can"<if ((int(a) == int(c))&&(int(a)!= int(b))) cout<<"Tam giac la tam giac
can"<1
4


}
if ( abs(a*a + b*b - c*c ) < e ) cout<<"Tam giac la tam giac vuong"<if ( abs(a*a + c*c - b*b ) < e ) cout<<"Tam giac la tam giac vuong"<if ( abs(c*c + b*b - a*a ) < e ) cout<<"Tam giac la tam giac vuong"<getch();
}

//
********************************************************************
**
void tinhgiaithua(void)
{ int n ;
long double gt;
clrscr();
cout <<" N := ";
cin>>n;
gt = 1;
if (n != 0)
for (int i = 1; i<=n ; i++) gt = gt *i;
cout<cout<<" 2: TINH TONG 1*1 -> N*N
"<cin>>dk;
cout<<" N := ";
cin>>n;
if (dk == 1)
{ t = 1;
for( int i=1; i <= n;i++)
t = t+i;
cout<<" Tong 1 -> "<


1
5


if (dk == 2)
{ t = 1;
for( int i=1; i <= n;i++)
t = t+i*i;
cout<<" Tong binh phuong 1-> "<

{
vetamgiac();
}
Khi chạy chơng trình ,trớc tiên ta phải nhập tạo độ 3 đỉnh (A,B,C) và màu nền
tam giác cần dựng.
#include<lib.h>
#include<graphics>

1
6


main()
{
tinhtamgiac();
}
Khi chay ,chơng trình sẽ đòi hỏi phải nhập tạo ®é 3 ®Ønh (A,B,C) khi nhËp xong
Ên Enter th× cho các kết quả:
+Diện tích
+Chu vi
+ma
+ha
+la
+r
+R
Và tam gíac đó là tam giác
+Cân
+Vuông
+Vuông cân
+Đều

+Bình thờng

1
7



×