PDA

View Full Version : in bảng nhân trong pascal dup tui zới :>>



nguabay91
02-07-2011, 08:30
Nhờ các anh chị giỏi lập trình gỡ rối em tình huống này cái !?
chắc các anh chị còn nhớ bài toán in bảng nhân ra màn hình sử dụng một mảng hai chiều chứ
nó như thế này:
program Bang_nhan;
uses crt;
var
B: array[1..9,1..10] of integer;
{B: bien mang hai chieu in bang nhan}
i, j: integer;
begin
clrscr;
for i:= 1 to 9 do
for j:= 1 to 10 do
B[i,j]:= i * j;
for i:= 1 to 9 do
begin
for j:= 1 to 10 do write(B[i,j]:4);
writeln;
end;
readln;
end.
thuật toán này có lẽ rất quen thuộc đối với anh chị rồi phải không nhưng điều mà khiến em thắc mắc là tại sao đối với bài toán này thì không cần nhập dữ liệu vào cho mảng mà vẫn có thể xử lí màng đó được
trong khi đó em đã thử là tương tự với mảng một chiều thì nó toàn in ra số 0 ví dụ như chương trình sau:
program Bang_nhan;
uses crt;
var
C: array[1..10] of integer;
j,s: integer;
begin
clrscr;
for j:= 1 to 10 do
begin

s:= C[j] * 2;
write(s,#32);
end;
readln;
end.
em thấy rất khó hiểu mong mọi người giải thích giùm em xin cảm ơn và hậu tạ sau hem !

auauau97
02-07-2011, 08:47
Nhờ các anh chị giỏi lập trình gỡ rối em tình huống này cái !?
chắc các anh chị còn nhớ bài toán in bảng nhân ra màn hình sử dụng một mảng hai chiều chứ
nó như thế này:
program Bang_nhan;
uses crt;
var
B: array[1..9,1..10] of integer;
{B: bien mang hai chieu in bang nhan}
i, j: integer;
begin
clrscr;
for i:= 1 to 9 do
for j:= 1 to 10 do
B[i,j]:= i * j;
for i:= 1 to 9 do
begin
for j:= 1 to 10 do write(B[i,j]:4);
writeln;
end;
readln;
end.
thuật toán này có lẽ rất quen thuộc đối với anh chị rồi phải không nhưng điều mà khiến em thắc mắc là tại sao đối với bài toán này thì không cần nhập dữ liệu vào cho mảng mà vẫn có thể xử lí màng đó được
trong khi đó em đã thử là tương tự với mảng một chiều thì nó toàn in ra số 0 ví dụ như chương trình sau:
program Bang_nhan;
uses crt;
var
C: array[1..10] of integer;
j,s: integer;
begin
clrscr;
for j:= 1 to 10 do
begin

s:= C[j] * 2;
write(s,#32);
end;
readln;
end.
em thấy rất khó hiểu mong mọi người giải thích giùm em xin cảm ơn và hậu tạ sau hem !

Cái mảng 2 chiều đã được nhập dữ liệu rồi mà bạn:


for i:= 1 to 9 do
for j:= 1 to 10 do
B[i,j]:= i * j;
Thì i*j chính là giá trị mà ta gán phần tử của mảng cho nó đấy !

haplinhavxt
02-07-2011, 14:58
Bài 1 mảng B được gán rồi như! " B[i,j]:= i * j " Mà i, j <>0!
Còn bài 2 của bạn thì
" s:= C[j] * 2;"
Mà c[i]=0 với mọi i( chưa gán) nên s chỉ mãi mãi là 0 thôi! :))

nguabay91
02-07-2011, 18:08
bằng không khác không là sao
em chưa hiểu rõ chỗ này mấy anh ạ
mà làm sao mà biết i, j <>0
nói chung em vấn thấy rối
cái này mới nhìn thoạt đậu có vẻ đơn giản xem ra cung kha phiền phức
không giống các bài về mảng hai chiều khác

haplinhavxt
02-07-2011, 20:08
for i:= 1 to 9 do
for j:= 1 to 10 do

N­hư vậy thì i, j<>0 rồi còn gì!
Còn nếu muốn hiểu rõ thì bạn viết ra giấy và tự thực hiện các bướ đấy đi!

nguabay91
03-07-2011, 06:48
dù sao thì cũng cảm ơn anh haplinhavxt nhiều vì đã giải thích cho ngựa bay nhưng ngựa bay vân chưa hiểu rõ là căn cứ vào đâu mà biết i, j<>0 còn c[i]=0
ngựa bay thấy hai cái này có cách khai báo giống nhau mà chỉ khác một điều là một bên là mảng một chiều còn một bên là mảng hai chiều thôi hay là tại ngựa bay chậm hiệu nhỉ ukm có lẽ cũng đúng thôi vì ngựa bay có được học hành bài bản chỉ đâu chẳng qua la ngựa bay rất thích lập trình nên mới tự tìm hiểu về bộ môn này thôi

HGMinh95
03-07-2011, 08:14
for i:= 1 to 9 do
for j:= 1 to 10 do
B[i,j]:= i * j;

Trong 2 lệnh for biến i,j sẽ tăng dần từ 1 -> 9 nên i, j <> 0. Sau đó bạn gán B[i,j]:= i*j nên mảng B đã được gán các giá trị của bảng nhân

Còn bài mảng C của bạn chưa hề được gán giá trị nào nên nó được nhận giá trị = 0 (đôi khi nó cũng nhận giá trị khác) nên s = 0

nguabay91
03-07-2011, 09:43
cũng tương đối hiểu vậy theo mấy anh em phải sửa chương trình giưới như thế nào để không có số 0 ?

haplinhavxt
03-07-2011, 14:42
cũng tương đối hiểu vậy theo mấy anh em phải sửa chương trình giưới như thế nào để không có số 0 ?
Bạn có thể nêu rõ đề bài ko? Mù mờ như thế này thì sao co code được!

nguabay91
05-07-2011, 14:47
qua mấy ngày tìm hiểu cuối cùng thì em cũng hiểu rổi mấy anh ạ
nhưng mà nếu lúc đấu mấy anh mà nói thuật toán trên là ta nhân các chỉ số của mảng cho nhau mà chỉ số thì khác 0 còn còn thuật toán ở giưới là ta thực hiện nhân phần tử của mảng mà phần tử trong trường hợp này chưa có nên = 0 cho nen kết quả bằng 0 hjhjhj
nhưng dù sao cũng rất cảm ơn mấy anh em cảm ơn mấy anh nhiều lắm !