PDA

View Full Version : Một câu hỏi nhỏ



Baongoc_yb
24-04-2004, 04:15
xin các anh chị xem một bài:tim so nho nhat trong ba so!
program bt2;
var a,b,c,min:integer;
begin
writeln('nhap vao ba so:');read(a,b,c);
min:=a;
if min > b then min := b;
if min > c then min:=c;
writeln('so nho nhat la:',min);
readln;
end.
các anh chị cho em hỏi là nếu đã gán min:=a sao lại còn có thể gán min:=b,c?
em nghĩ là min đã bị chiếm mất ô nhớ rồi chu ? Xin anh chị vui lòng giải thích hộ

bete
24-04-2004, 05:44
gửi Baongoc_yb : tui nghĩ mình có thể hiểu nôm na là chương trình làm như vầy:

giả sử người dùng nhập vào 3, 2 & 1 (theo thứ tự đó):

chương trình thấy số 3 trước => "3 là số nhỏ nhất tui thấy từ trước tới giờ" (vì từ trước tới giờ -- từ lúc bắt đầu chạy tới giờ -- chương trình đã thấy số nào đâu -- đây là số đầu tiên mà)" => gán giá trị 3 vô biến min

kế đến chương trình thấy số 2 => so sánh min (đang là 3) với 2 => "2 là số nhỏ nhất tui thấy từ trước tới giờ" => gán giá trị 2 vô biến min (giá trị cũ là 3 của min sẽ bị ghi đè lên)

kế đến chương trình thấy số 1 => so sánh min (đang là 2) với 1 => "1 là số nhỏ nhất tui thấy từ trước tới giờ" => gán giá trị 1 vô biến min (giá trị cũ là 2 của min sẽ bị ghi đè lên)

cuối cùng chương trình in giá trị đang có trong biến min (là 1) ra

Đúng là min chiếm 1 chỗ nào đó trong vùng nhớ; nhưng mình luôn có thể thay đổi giá trị chứa trong biến min . Trừ ra nếu mình khai báo min là 1 hằng số thay vì là 1 biến thì lúc đó mới 0 thể thay đổi giá trị của min

Huynh Phong
24-04-2004, 18:28
Bete trả lời quá rỏ ràng rùi, không phải giải thích gì thêm !

Baongoc_yb
24-04-2004, 21:56
Đúng là min chiếm 1 chỗ nào đó trong vùng nhớ; nhưng mình luôn có thể thay đổi giá trị chứa trong biến min . Trừ ra nếu mình khai báo min là 1 hằng số thay vì là 1 biến thì lúc đó mới 0 thể thay đổi giá trị của min
Như vậy có phải là khi trước đó chẳng hạn mình có một câu lệnh nhập writeln('nhap a');read(a); thì mình vẫn có thể có một câu lệnh tương tự và số mới nhập vào có thể đè lên số cũ?
Cám ơn bác bete nhiều!

bete
25-04-2004, 06:01
"Như vậy có phải là khi trước đó chẳng hạn mình có một câu lệnh nhập writeln('nhap a');read(a); thì mình vẫn có thể có một câu lệnh tương tự và số mới nhập vào có thể đè lên số cũ?"

==> đúng vậy . Nếu bạn nhập 10 lần (10 giá trị khác nhau) với lệnh read vô cùng 1 biến => mỗi lần nhập sẽ ghi đè lên giá trị cũ . Nếu ngôn ngữ lập trình mà 0 cho phép ghi đè lên giá trị đang có của 1 biến thì tui nghĩ phe ta sẽ nhức đầu lắm (có thể nói hầu như 0 viết được chương trình nào hết :))