Đọc, ghi dãy kí tự
write(char *buf, int n); // ghi n kí tự trong buf ra dòng xuất
read(char *buf, int n); // nhập n kí tự từ buf vào dòng nhập
gcount(); // cho biết số kí tự read đọc được
: Chương trình sao chép file ở trên có thể sử dụng các phương thức mới này như sau:
#include
#include
#include
#include
void main()
{
clrscr();
fstream fnguon("DATA1", ios::in | ios::binary);
fstream fdich("DATA2", ios::out | ios::binary);
char buf[2000] ;
int n = 2000;
while (n) {
fnguon.read(buf, 2000);
n = fnguon.gcount();
fdich.write(buf, n);
}
fnguon.close();
fdich.close();
}
Đọc ghi đồng thời
#include
#include
#include
#include
#include
#include
#include
#include
struct Sv {
char *hoten;
int tuoi;
double diem;
};
class Sinhvien {
int sosv;
Sv x;
char fname[30];
static int size;
public:
Sinhvien(char *fn);
void tao();
void bosung();
void xemsua();
};
int Sinhvien::size = sizeof(Sv);
Sinhvien::Sinhvien(char *fn)
{
strcpy(fname, fn) ;
fstream f;
f.open(fname, ios::in | ios::ate | ios::binary);
if (!f.good) sosv = 0;
else {
sosv = f.tellg() / size;
}
}
void Sinhvien::tao()
{
fstream f;
f.open(fname, ios::out | ios::noreplace | ios::binary);
if (!f.good()) {
cout << "danh sach da co. Co tao lai (C/K) ?";
char traloi = getch();
if (toupper(traloi) == 'C') return;
else {
f.close() ;
f.open(fname, ios::out | ios::trunc | ios::binary);
}
}
sosv = 0
while (1) {
cout << "\nSinh viên thứ: " << sosv+1;
cout << "\nHọ tên: "; cin.ignore(); cin.getline(x.hoten);
if (x.hoten[0] == 0) break;
cout << "\nTuổi: "; cin >> x.tuoi;
cout << "\nĐiểm: "; cin >> x.diem;
f.write((char*)(&x), size);
sosv++;
}
f.close();
}
void Sinhvien::bosung()
{
fstream f;
f.open(fname, ios::out | ios::app | ios::binary);
if (!f.good()) {
cout << "danh sach chua co. Tao moi (C/K) ?";
char traloi = getch();
if (toupper(traloi) == 'C') return;
else {
f.close() ;
f.open(fname, ios::out | ios::binary);
}
}
int stt = 0
while (1) {
cout << "\nBổ sung sinh viên thứ: " << stt+1;
cout << "\nHọ tên: "; cin.ignore(); cin.getline(x.hoten);
if (x.hoten[0] == 0) break;
cout << "\nTuổi: "; cin >> x.tuoi;
cout << "\nĐiểm: "; cin >> x.diem;
f.write((char*)(&x), size);
stt++;
}
sosv += stt;
f.close();
}
void Sinhvien::xemsua()
{
fstream f;
int ch;
f.open(fname, ios::out | ios::app | ios::binary);
if (!f.good()) {
cout << "danh sach chua co";
getch(); return;
}
cout << "\nDanh sách sinh viên" << endl;
int stt ;
while (1) {
cout << "\nCần xem (sua) sinh viên thứ (0: dừng): " ;
cin >> stt;
if (stt < 1 || stt > sosv) break;
f.seekg((stt-1) * size, ios::beg);
f.read((char*)(&x), size);
cout << "\nHọ tên: " << x.hoten;
cout << "\nTuổi: " << x.tuoi;
cout << "\nĐiểm: " << x.diem;
cout << "Có sửa không (C/K) ?";
cin >> traloi;
if (toupper(traloi) == 'C') {
f.seekg(-size, ios::cur);
cout << "\nHọ tên: "; cin.ignore(); cin.getline(x.hoten);
cout << "\nTuổi: "; cin >> x.tuoi;
cout << "\nĐiểm: "; cin >> x.diem;
f.write((char*)(&x), size);
}
}
f.close();
}
void main()
{
int chon;
Sinhvien SV("DSSV") ;
while (1) {
clrscr();
cout << "\n1: Tạo danh sách sinh viên";
cout << "\n2: Bổ sung danh sách";
cout << "\n3: Xem – sửa danh sách";
cout << "\n0: Kết thúc";
chon = getch();
chon = chon – 48;
clrscr();
if (chon == 1) SV.tao();
else if (chon == 2) SV.bosung();
else if (chon == 3) SV.xemsua();
else break;
}
}
Mét sè Bµi tËp thùc hµnh m«n kü thuËt lËp tr×nh
---------------
Ch¬ng I: BiÕn – biÓu thøc – c¸c lÖnh nhËp xuÊt -
NhËp hai sè nguyªn, tÝnh tæng, hiÖu, tÝch, th¬ng, ®ång d.
-
NhËp mét sè nguyªn, in ra mµn h×nh c¸ch ®äc sè nguyªn ®ã (VD: sè 1252 ®äc lµ: mét ngµn hai tr¨m n¨m chôc hai ®¬n vÞ).
-
ViÕt ch¬ng tr×nh tÝnh gi¸ trÞ biÓu thøc:
F(x) = (x2+ex+sin2(x))/sqrt(x2+1)
Ch¬ng II: c¸c cÊu tróc ®iÒu khiÓn -
ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n. KiÓm tra xem n ch½n hay lÎ.
-
ViÕt ch¬ng tr×nh gi¶i vµ biÖn luËn ph¬ng tr×nh bËc nhÊt theo hai hÖ sè a, b nhËp tõ bµn phÝm.
-
ViÕt ch¬ng tr×nh gi¶i vµ biÖn luËn ph¬ng tr×nh bËc hai víi c¸c hÖ sè a, b, c nhËp tõ bµn phÝm.
-
ViÕt ch¬ng tr×nh nhËp vµo sè tiÒn ph¶i tr¶ cña kh¸ch hµng. In ra sè tiÒn khuyÕn m·i víi quy ®Þnh: nÕu sè tiÒn ph¶i tr¶ thuéc [200.000, 300.000) th× khuyÕn m·i 20%. NÕu sè tiÒn ph¶i tr¶ tõ 300.000 trë lªn th× khuyÕn m·i 30%. Cßn l¹i th× kh«ng khuyÕn m·i.
-
ViÕt ch¬ng tr×nh nhËp vµo ®iÓm tæng kÕt cña mét häc sinh vµ in ra xÕp lo¹i cho häc sinh ®ã víi quy ®Þnh:
-
XÕp lo¹i giái nÕu tæng ®iÒm tõ 8.00 trë lªn.
-
XÕp lo¹i kh¸ nÕu tæng ®iÓm tõ 7.00 tíi cËn 8.00.
-
XÕp lo¹i trung b×nh nÕu tæng ®iÓm tõ 5.00 tíi cËn 7.00.
-
Cßn l¹i, xÕp lo¹i yÕu.
-------------------
-
ViÕt ch¬ng tr×nh nhËp vµo mét th¸ng bÊt kú, sau ®ã in ra sè ngµy cã trong th¸ng (quy ®Þnh th¸ng 2 cã 28 ngµy).
-------------------
-
ViÕt ch¬ng tr×nh tÝnh n!
-
NhËp vµo mét sè nguyªn, kiÓm tra xem mét sè võa nhËp cã ph¶i lµ sè nguyªn tè kh«ng, in kÕt luËn ra mµn h×nh.
-
ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n, sau ®ã tÝnh gi¸ trÞ biÓu thøc:
S =
-
ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n, sau ®ã tÝnh gi¸ trÞ biÓu thøc
F =
-
ViÕt ch¬ng tr×nh nhËp vµo mét sè thùc x vµ sè nguyªn n, sau ®ã tÝnh gi¸ trÞ biÓu thøc:
S =
-
ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n trong kho¶ng [10, 20] (nÕu sè nhËp vµo kh«ng thuéc kho¶ng ®ã th× yªu cÇu nhËp l¹i tíi khi tho¶ m·n). Sau ®ã tÝnh tæng c¸c sè liªn tiÕp tõ 1 tíi n.
-
ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn d¬ng n, sau ®ã tÝnh tæng c¸c gi¸ trÞ ch½n, lÎ thuéc ®o¹n [1, n].
-
ViÕt ch¬ng tr×nh nhËp vµo c¸c sè nguyªn d¬ng n, m, sau ®ã in ra:
-
Tæng c¸c sè ch½n d¬ng trong kho¶ng [- n, m].
-
Tæng c¸c sè ch½n ©m trong kho¶ng [- n, m].
-
Tæng c¸c sè lÎ d¬ng trong kho¶ng [- n, m].
-
Tæng c¸c sè lÎ ©m trong kho¶ng [- n, m].
-
ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n, sau ®ã tÝnh tæng c¸c sè nguyªn tè thuéc ®o¹n [1..n]. Cho biÕt cã bao nhiªu sè nguyªn tè thuéc ®o¹n ®ã.
-
Dïng while (sau ®ã viÕt l¹i, dïng do/ while) ®Ó viÕt ch¬ng tr×nh in ra sè lµ luü thõa 2 bÐ nhÊt lín h¬n 1000.
-
Cho d·y sè x[] = { 12.3, -45.4, 12, 15, 10.1, 12.5}. ViÕt ch¬ng tr×nh ®¶o ngîc d·y sè trªn.
-
ViÕt ch¬ng tr×nh t×m sè nguyªn d¬ng n nhá nhÊt tho¶ m·n: 1 + 2 + 3 + … + n > 1000.
-
§Ó tÝnh c¨n bËc hai cña mét sè d¬ng a, ta sö dông c«ng thøc lÆp sau:
x(0) = a;
x(n+1) = (x(n) * x(n) + a)/ (2* x(n)) víi n >=0.
Qu¸ tr×nh lÆp kÕt thóc khi abs((a(n+1) – x(n))/x(n)) < e.
vµ khi ®ã x(n+1) ®îc xem lµ gi¸ trÞ gÇn ®óng cña sqrt(a).
ViÕt ch¬ng tr×nh tÝnh c¨n bËc hai cña a víi ®é chÝnh x¸c e = 0.00001.
-
LËp tr×nh ®Ó tÝnh sin(x) víi ®é chÝnh x¸c e = 0.00001 theo c«ng thøc :
sin(x) = x – x3/3! + x5/ 5! + …+ (-1)nx(2n+1)/ (2n+1)!.
-
LËp tr×nh ®Ó tÝnh tæ hîp chËp m cña n theo c«ng thøc:
C(m, n) = (n(n-1)…(n-m+1))/ m!.
Ch¬ng III: kü thuËt lËp tr×nh ®¬n thÓ -
ViÕt hµm kiÓm tra xem mét sè nguyªn n cã ph¶i lµ sè nguyªn tè kh«ng. Sau ®ã, trong ch¬ng tr×nh chÝnh, nhËp vµo mét sè nguyªn n, kiÓm tra tÝnh nguyªn tè cña sè n vµ th«ng b¸o ra mµn h×nh.
-
ViÕt hµm tÝnh n! sau ®ã, trong ch¬ng tr×nh chÝnh, nhËp vµo mét sè nguyªn n vµ tÝnh, in ra kÕt qu¶ cña biÓu thøc:
S =
-
ViÕt hµm tÝnh gi¸ trÞ biÓu thøc F (trong bµi sè 10 ch¬ng II) víi ®èi vµo lµ n. Sau ®ã, trong ch¬ng tr×nh chÝnh, nhËp vµo hai sè a, b, tÝnh vµ in ra mµn h×nh kÕt qu¶ cña biÓu thøc:
S =
-
ViÕt hµm s¾p xÕp mét chuçi ký tù (tõ A->Z). Sau ®ã, trong ch¬ng tr×nh chÝnh, nhËp vµo mét x©u ký tù bÊt kú, in x©u ®· ®îc s¾p lªn mµn h×nh.
-
ViÕt ch¬ng tr×nh gi¶i ph¬ng tr×nh trïng ph¬ng : ax4 + bx2 + c = 0.
Kü thuËt §Ö quy
-
USCLN cña hai sè a, b ®îc ®Þnh nghÜa nh sau:
USCLN(a, b) = a nÕu b = 0
= USCLN(b, a%b) nÕu b <> 0
ViÕt hµm ®Ö quy t×m USCLN cña hai sè nguyªn a, b. Trong ch¬ng tr×nh chÝnh, nhËp vµo hai sè nguyªn a, b. T×m vµ in USCLN cña hai sè ®ã lªn mµn h×nh.
-
USCLN cña hai sè a, b ®îc ®Þnh nghÜa nh sau:
USCLN(a, b) = a nÕu a = b
= USCLN(a-b, b) nÕu a > b
= USCLN(a, b-a) nÕu a < b
ViÕt hµm ®Ö quy t×m USCLN cña hai sè nguyªn a, b. Trong ch¬ng tr×nh chÝnh, nhËp vµo hai sè nguyªn a, b. T×m vµ in USCLN cña hai sè ®ã lªn mµn h×nh.
-
ViÕt hµm t×m kiÕm ®Ö quy trªn mét d·y sè nguyªn ®· ®îc s¾p.
-
C¸c sè Fibonacci F[i] ®îc ®Þnh nghÜa ®Ö quy nh sau:
F[0] =1; F[1] =1;
F[i] = F[i-1] + F[i-2] (víi i > 1);
(VD: 1, 1, 2, 3, 5, 8, 13…)
ViÕt hµm ®Ö quy t×m sè Fibonacci thø n trong d·y.
-
ViÕt hµm ®Ö quy tÝnh n!. (n Î Z+)
-
ViÕt hµm ®Ö quy tÝnh f(x, n) = xn. (xÎR, n Î Z). ViÕt ch¬ng tr×nh chÝnh sö dông hµm trªn ®Ó nhËp vµo sè nguyªn n, sè thùc x tõ bµn phÝm. TÝnh vµ in ra mµn h×nh gi¸ trÞ cña f(x, n).
-
ViÕt hµm ®Ö quy tÝnh f(x, n) = n!xn. (xÎR, n Î Z). ViÕt ch¬ng tr×nh chÝnh sö dông hµm trªn ®Ó nhËp vµo sè nguyªn n, sè thùc x tõ bµn phÝm. TÝnh vµ in ra mµn h×nh gi¸ trÞ cña f(x, n).
-
ViÕt hµm ®Ö quy ®Ó ®Õm sè ch÷ sè cã trong mét sè nguyªn bÊt bú (VÝ dô sè 1263 cã 4 ch÷ sè…). ViÕt ch¬ng tr×nh chÝnh sö dông hµm trªn ®Ó cho phÐp nhËp vµo mét sè nguyªn bÊt kú. In ra mµn h×nh sè ch÷ sè cña sè nguyªn võa nhËp.
-
D·y Catalan ®îc ®Þnh nghÜa ®Ö quy nh sau:
C1 = 1;
Cn = S Ci* Cn-i " n > 1.
VÝ dô: { 1, 1, 2, 5,…}
H·y x©y dùng hµm ®Ö quy tÝnh sè Catalan thø n bÊt kú (n Î Z +). ViÕt ch¬ng tr×nh chÝnh sö dông hµm trªn ®Ó tÝnh sè Catalan thø n bÊt kú víi n nhËp tõ bµn phÝm (n Î Z +).
Ch¬ng IV: kü thuËt lËp tr×nh dïng m¶ng.
-
Cho hai vector x(x1, x2…xn) vµ y(y1, y2…yn). ViÕt ch¬ng tr×nh in ra TÝch v« híng cña hai vector trªn.
-
Cho hai m¶ng a vµ b cã c¸c phÇn tö ®Òu ®· ®îc s¾p t¨ng. LËp ch¬ng tr×nh trén hai m¶ng trªn ®Ó thu ®îc mét m¶ng thø 3 còng s¾p theo thø tù t¨ng b»ng hai ph¬ng ph¸p.
-
ViÕt ch¬ng tr×nh nhËp vµo mét m¶ng n sè nguyªn, s¾p xÕp m¶ng theo chiÒu t¨ng dÇn vµ in kÕt qu¶ lªn mµn h×nh b»ng c¸c ph¬ng ph¸p:
-
S¾p xÕp næi bät.
-
S¾p xÕp chän.
-
S¾p xÕp chÌn.
-
ViÕt ch¬ng tr×nh nhËp vµo mét m¶ng n sè nguyªn, tÝnh tæng c¸c phÇn tö ch½n, c¸c phÇn tö lÎ, c¸c phÇn tö chia hÕt cho 3 vµ in kÕt qu¶ ra mµn h×nh.
-
ViÕt ch¬ng tr×nh nhËp vµo mét d·y sè thùc, t×m phÇn tö lín nhÊt (t¬ng tù, t×m phÇn tö nhá nhÊt) cña d·y vµ in kÕt qu¶ ra mµn h×nh.
-
ViÕt ch¬ng tr×nh nhËp vµo mét d·y sè nguyªn. TÝnh tæng cña c¸c sè nguyªn tè trong d·y vµ in kÕt qu¶ ra mµn h×nh.
-
ViÕt ch¬ng tr×nh nhËp vµo mét d·y sè nguyªn vµ mét sè nguyªn c. §Õm sè lÇn xuÊt hiÖn vµ vÞ trÝ xuÊt hiÖn cña c trong d·y. In c¸c kÕt qu¶ ra mµn h×nh.
-
ViÕt ch¬ng tr×nh nhËp vµo mét d·y n sè nguyªn. TÝnh trung b×nh céng cña d·y vµ in kÕt qu¶ tÝnh ®îc ra mµn h×nh.
-
Mét d·y sè a gäi lµ ®îc s¾p t¨ng nÕu a[i] <= a[i+1] víi mäi i;
D·y gäi lµ ®îc s¾p gi¶m nÕu a[i] >= a[i+1] víi mäi i;
D·y gäi lµ ®îc s¾p t¨ng ngÆt nÕu a[i] < a[i+1] víi mäi i;
D·y gäi lµ ®îc s¾p gi¶m ngÆt nÕu a[i] > a[i+1] víi mäi i;
ViÕt ch¬ng tr×nh nhËp mét d·y n sè thùc, kiÓm tra xem d·y ®· ®îc s¾p hay cha. NÕu ®· ®îc s¾p th× s¾p theo trËt tù nµo (t¨ng, t¨ng ngÆt, gi¶m, gi¶m ngÆt?). NÕu cha th× s¾p xÕp d·y theo chiÒu t¨ng dÇn. In c¸c kÕt qu¶ lªn mµn h×nh.
-
ViÕt hµm t×m kiÕm lÆp trªn mét d·y sè nguyªn ®· ®îc s¾p víi ®é phøc t¹p tèt h¬n O(n).
-
ViÕt ch¬ng tr×nh nhËp vµo mét ma trËn m x n sè nguyªn. T×m c¸c phÇn tö lín nhÊt vµ bÐ nhÊt trªn c¸c dßng (t¬ng tù c¸c cét) cña ma trËn. (sö dông for sau ®ã dïng while, do/ while).
-
ViÕt ch¬ng tr×nh t×m phÇn tö ©m ®Çu tiªn trong ma trËn (theo chiÒu tõ tr¸i qua ph¶i, tõ trªn xuèng díi).
-
ViÕt ch¬ng tr×nh nhËp vµo mét ma trËn m x n sè nguyªn. T×m phÇn tö lín nhÊt (t¬ng tù t×m phÇn tö nhá nhÊt) cña ma trËn võa nhËp. In kÕt qu¶ ra mµn h×nh. Cã thÓ söa l¹i bµi ®Ó t×m phÇn tö lín nhÊt (nhë nhÊt) trªn c¸c cét (c¸c dßng) ®îc kh«ng?
-
ViÕt ch¬ng tr×nh nhËp vµo hai ma tr©n A, B cã n hµng, m cét. TÝnh ma trËn C = A + B vµ in kÕt qu¶ ra mµn h×nh.
-
ViÕt ch¬ng tr×nh nhËp vµo hai ma trËn A, B, tÝnh vµ in ra mµn h×nh tÝch cña hai ma trËn ®ã.
-
ViÕt ch¬ng tr×nh nhËp vµo mét ma trËn A cã n dßng, m cét. In ra mµn h×nh ma trËn chuyÓn vÞ cña A. (A’ ®îc gäi lµ ma trËn chuyÓn vÞ cña A nÕu A’[i, j] = A[j, i] víi mäi i, j).
-
Ma trËn A ®îc gäi lµ ®èi xøng qua ®êng chÐo chÝnh nÕu A[i, j] = A[j, i] víi mäi i kh¸c j. ViÕt ch¬ng tr×nh nhËp vµo mét ma trËn A, kiÓm tra xem A cã ®èi xøng qua ®êng chÐo chÝnh kh«ng. In kÕt luËn lªn mµn h×nh.
Ch¬ng V: Kü thuËt lËp tr×nh dïng con trá
TÊt c¶ c¸c bµi tËp vÒ m¶ng ë trªn ®Òu cã thÓ söa l¹i ®Ó dïng con trá thay v× dïng m¶ng. Ngoµi ra h·y cµi ®Æt thªm c¸c bµi tËp sau:
-
ViÕt ch¬ng tr×nh nhËp vµo mét m¶ng a gåm n phÇn tö nguyªn. S¾p xÕp m¶ng theo chiÒu gi¶m dÇn (lu ý sö dông tªn m¶ng nh con trá vµ sö dông con trá).
-
H·y dïng mét vßng for ®Ó nhËp vµo mét ma trËn vu«ng cÊp n víi c¸c phÇn tö thùc vµ t×m phÇn tö Max cña ma trËn nµy.
-
ViÕt hµm ho¸n vÞ hai biÕn thùc a, b b»ng c¸ch sö dông con trá (®èi vµo lµ hai con trá). ViÕt ch¬ng tr×nh chÝnh nhËp hai sè thùc a, b. Sö dông hµm trªn ®Ó ®æi chç a vµ b.
-
ViÕt hµm gi¶i hÖ ph¬ng tr×nh bËc nhÊt víi s¸u ®èi vµo lµ a, b, c, d, e, f vµ 2 ®èi ra lµ x vµ y.
-
ViÕt hµm tÝnh gi¸ trÞ ®a thøc:
f(x) = a0xn + … + an-1x + an. víi ®èi vµo lµ biÕn nguyªn n vµ m¶ng thùc a.
-
ViÕt hµm céng hai ma trËn vu«ng a vµ b cÊp n (sö dông con trá).
-
ViÕt ch¬ng tr×nh tÝnh tÝch ph©n cña f(x) trªn ®o¹n [a, b] b»ng c«ng thøc h×nh thang. Theo ®ã, tÝch ph©n cña f(x) trªn [a, b] b»ng: h * s. Trong ®ã:
h lµ ®é dµi kho¶ng ph©n ho¹ch ®o¹n [a, b] thµnh n kho¶ng.
s lµ tæng tÊt c¶ c¸c f(a+i*h) víi i tõ 1 tíi n.
Sö dông hµm trªn ®Ó tÝnh tÝch ph©n trong ®o¹n [-1, 4] cña:
f(x) = (ex-2sin(x2))/ (1+x4). (nghiªn cøu c¸ch ®a con trá vµo gi¶i quyÕt bµi to¸n).
//================Tham kh¶o code mét sè hµm ®Ö quy========
#include "iostream.h"
#include "conio.h"
//hµm tÝnh n giai thõa =======================================
long gt(int n)
{
if (n==0)
return 1;
else
return n*gt(n-1);
}
//hµm t×m sè Fibonacci thø n===========================
long Fibo(int n)
{
if (n<=1)
return 1;
else
return Fibo(n-1)+ Fibo(n-2);
}
//hµm USCLN cña a va b===============================
int USCLN(int a, int b)
{
if (b==0)
return a;
else
return USCLN(b, a%b);
}
//Hµm main=========================================
void main()
{ int n;
cout<<"nhap n ";
cin>> n;
long S = gt(n);
cout<<"n gt "<
getch();
//=====================================
long T = Fibo(n);
cout<<"\n so fibonaci thu "<
getch();
//=====================================
int a, b;
cout<<"nhap a ";
cin>> a;
cout<<" nhap b ";
cin>>b;
cout<<"\n USCLN cua "<
getch();
}
Chia sẻ với bạn bè của bạn: |