# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  hỏi pascal về kiểu dữ liệu có cấu trúc file(tệp)

## alimama

khi giải bài toán nghi tệp mà biến nghi lên tệp có hai hướng sau:
biến đươc khai báo là kiểu string nhưng khi giải thì biến mang hai kiểu integer,real và string

vd: nhập hệ số a,b,c của ptb2 sau đó in lên tệp hệ số a,b,c nghiêm x1,x2 va kể cả dòng chử pt vô nghiệm theo mẩu sau.

a b c x1 x2
2 -3 1 1 1/2
5 2 3 pt vô nghiệm
các ban chỉ giùm dùng lệnh nào để nghi được x1,x2 theo hai kiểu trên

----------


## dakasakoru

```
 
assign(f,'ptb2.out');        { file đầu ra là ptb2.out);
rewrite(f);         { lệnh cho phép ghi lên tệp );
write(f,a,' ',b,' ',c,' ',x1,' ',x2): { bạn nhớ là phải có tên tệp f thì mới ghi đc lên tệp } ;
close(f);           { đóng và kết thúc công việc với tệp };
```

----------


## nguyenviet1008

đâu phai vậy! mình hiêu rồi để giải quyết phải dùng thu tục str(i:integer;[:length;]var s:string); để chuyển nghiệm x1,x2 thành chuổi rồi mới nghi vao tệp đc

----------


## 513minh891

Bạn muốn ghi vào tệp cũng đâu cần phải chuyển thành chuỗi rồi mới ghi được vào tệp, các biến kiểu integer, longint, string, đều ghi vào tệp được hết.

----------


## nqtmht

bạn làm bài này he, nếu bạn không đổi thì máy luôn báo lổi.

Tạo một file chứa các hệ số và tập nghiệm của phương trình bậc hai. Sau đó in lên màn hình danh sách đó.

Gợi ý:
- các phần tử của file là một bảng nghi gồm các thành phần . các hệ số a,b,c các nghiệm x1,x2 và kể cả dảy thông báo vô nghiệm.
vd: a b c x1 x2

2 1 -3 1 -3/2
3 6 1 vo nghiệm

----------


## thangpham18

> bạn làm bài này he, nếu bạn không đổi thì máy luôn báo lổi.
> 
> Tạo một file chứa các hệ số và tập nghiệm của phương trình bậc hai. Sau đó in lên màn hình danh sách đó.
> 
> Gợi ý:
> - các phần tử của file là một bảng nghi gồm các thành phần . các hệ số a,b,c các nghiệm x1,x2 và kể cả dảy thông báo vô nghiệm.
> vd: a b c x1 x2
> 
> 2 1 -3 1 -3/2
> 3 6 1 vo nghiệm


delta >= 0 thì in nghiệm
ngược lại delta<0 thì in 'vo nghiem '.

----------


## thangpham18

Cái 3/2 kia của bạn có phải là số nguyên đâu mà bạn đòi in ra, muốn in cũng phải đổi nó ra số kiểu nguyên như integer hoặc longint mà in chứ, nếu cứ để in 3/2 báo lỗi là phải.

----------


## nguyennam19

mình pot một đoạn bạn thử xem he.


PROGRAM ptb2;
uses crt;
type pt=record
a,b,c:real;
x1,x2:string[10];
end;
var f:file of pt;
chon:byte;
procedure taofile;
var tam[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]t;tl:char;delta:real;
{------------------------------------}
procedure ptb1;
Begin
with tam do
if b<>0 then
begin
x1:=-c/b;
x2:='';
end
else if c=0 then
begin
x1:='VSN';
x2:='';
end
else
begin
x1:='PTVN';
x2:='';
end;
End;
{-----------------------------------------}
Begin
Assign(f,'ptb2');rewrite(f);
repeat
with tam do
begin
write('a= ');readln(a);
write('b= ');readln(b);
write('c= ');readln(c);
if a=0 then ptb1
else begin
delta:=sqr(b)-4*a*c;
if delta>0 then
begin
x1:=(-b-sqrt(delta))/(2*a);
x2:=(-b+sqrt(delta))/(2*a);
end
else if delta=0 then
begin
x1:=-b/(2*a);
x2:='';
end
else begin
x1:='PTVN';
x2:='';
end;
end;
end;
write(f,tam);
write('Nhap tiep nua khong C/K: ');readln(tl);
until upcase(tl)='K';
close(f);

----------


## minhtshop

[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Thực ra bài này đâu có gì khó đâu bạn, do bạn cứ nghĩ nó phức tạp lên.
+ Nếu bạn muốn đưa ra kết quả là phân số thì bạn phải viết một *function phan_so*.
+ Khi bạn đưa ra nghiệm kép hoặc vô nghiệm thì không cần *x2 := '';* đâu. Bạn chỉ cần *x1= ket_qua;* rồi xuất *x1* ra là được.
+ Khi bạn đã đụng đến *Procedure* hoặc *Function* thì bạn cố gắng gói gọn nó lại trong những chương trình con đó để khi nhìn vào chương trình nó rõ ràng 1 tí.

Chúc bạn thành công!

----------


## thienan

> mình pot một đoạn bạn thử xem he.
> 
> 
> PROGRAM ptb2;
> uses crt;
> type pt=record
> a,b,c:real;
> x1,x2:string[10];
> end;
> ...


chỉ là 1 ptb2 thôi mà . Có cần phải rắc rối vậy ko ?

----------


## bedaukute

đung thế luc đầu minh ko hiểu lắm giờ thì không sao

----------


## phongkhamkt1

điều làm rỏ ơ đây là khi khai báo thi một kiểu nhưng khi giải ra thì biến mang hai kiểu

----------


## fpicseo

> điều làm rỏ ơ đây là khi khai báo thi một kiểu nhưng khi giải ra thì biến mang hai kiểu


" Biến mang 2 kiểu " ư ? Cái này có nghĩa là gì ?

----------


## seolenchoi

Bạn này không hiểu ý mình thì phải, khi bạn in bất kì 1 cái gì ra tệp thì bạn phải hình dung là nó như 1 thứ mình thấy và viết được ra. Còn trong chương trình của bạn, bạn in ra pt là bản ghi với a,b,c kiểu số thực, bạn nên lưu ý ở đây kiểu real là kiểu mà bạn cần định dạng trước khi xuất ra màn hình đen hoặc khi muốn in ra tệp phải chuyển nó về 1 kiểu nào đấy "nhìn thấy được" như string, longint, integer, char, .. còn kiểu real là số thực có tới vô số chữ số ở đằng sau thì làm sao ta có thể in ra được.

----------

