1. Dãy số và biến mảng

– Ví dụ 1. Trong Pascal ta cần nhiều câu lệnh khai báo và nhập dữ liệu dạng sau đây, mỗi câu lệnh tương ứng với điểm của một học sinh:

  • Var Diem_1, Diem_2, Diem_3,… : real;
  • Read(Diem_1); Read(Diem_2), Read(Diem_3); …

​- Nhận xét:

  • Nếu số học sinh trong lớp càng nhiều thì đoạn khai báo và đọc dữ liệu trong chương trình càng dài.
  • Giả sử chúng ta có thể lưu nhiều dữ liệu có liên quan với nhau (như Diem_1, Diem_2, Diem_3,… ở trên) bằng một biến duy nhất và đánh “số thứ tự” cho các giá trị đó, ta có thể sử dụng quy luật tăng hay giảm của “số thứ tự” và một vài câu lệnh lặp để xử lí dữ liệu một cách đơn giản hơn, chẳng hạn:
    • Với i = 1 đến 50: hãy nhập Diem_i;
    • Với i = 1 đến 50: hãy so sánh Max với Diem_i;

=> Để giúp giải quyết các vấn đề trên, một kiểu dữ liệu được gọi là kiểu mảng.

– Dữ liệu kiểu mảng là một tập hợp hữu hạn các phần tử có thứ tự, mọi phần tử đều có cùng một kiểu dữ liệu, gọi là kiểu của phần tử. Việc sắp thứ tự được thực hiện bằng cách gán cho mỗi phần tử một chỉ số:

– Khi khai báo một biến có kiểu dữ liệu là kiểu mảng, biến đó được gọi là biến mảng.

-Giá trị của biến mảng là một mảng, tức một dãy số (số nguyên, hoặc số thực) có thứ tự, mỗi số là giá trị của biến thành phần tương ứng.

2. Ví dụ về biến mảng

– Để làm việc với các dãy số nguyên hay số thực, chúng ta phải khai báo biến mảng.

a. Ví dụ về khai báo biến mảng

– Xét ví dụ về khai báo đơn giản một biến mảng trong ngôn ngữ Pascal như sau:

  • var Chieucao: array[1..50] of real;
  • var Tuoi: array[21..80] of integer;

=> Với câu lệnh thứ nhất, ta đã khai báo một biến có tên Chieucao gồm 50 phần tử, mỗi phần tử là biến có kiểu số thực. Với câu lệnh khai báo thứ hai, ta có biến Tuoi gồm 60 phần tử (từ 21 đến 80) có kiểu số nguyên.

b. Khai báo mảng trong Pascal

– Cách khai báo mảng trong ngôn ngữ lập trình Pascal như sau:

Var Tên mảng: array[<chỉ số đầu>..<chỉ số cuối>] of  <kiểu dữ liệu>

– Trong đó:

  • Var: từ khóa khai báo biến; array: từ khóa khai báo mảng
  • Chỉ số đầu và chỉ số cuối là hai số nguyên hoặc biểu thức nguyên thoả mãn chỉ số đầu ≤ chỉ số cuối và kiểu dữ liệu có thể là integer hoặc real, …

Ví dụ 2:

– Tiếp tục với ví dụ 1, thay vì khai báo các biến Diem_1, Diem_2, Diem_3,… để lưu điểm số của các học sinh, ta khai báo biến mảng Diem như sau:

var Diem: array[1..50] of real;

(?) Cách khai báo và sử dụng biến mảng như trên có lợi gì?

– Trước hết, có thể thay rất nhiều câu lệnh nhập và in dữ liệu ra màn hình bằng một câu lệnh lặp. Chẳng hạn, ta có thể viết:

For i:=1 to 50 do readln(Diem[i]); => để nhập điểm của các học sinh.

– Để so sánh điểm của mỗi học sinh với một giá trị nào đó, ta cũng chỉ cần một câu lệnh lặp, chẳng hạn:

For i:=1 to 50 do if Diem[i]>8.0 then writeln('Gioi');

=> Điều này giúp tiết kiệm rất nhiều thời gian và công sức viết chương trình.

– Hơn nữa, mỗi học sinh có thể có nhiều điểm theo từng môn học: điểm Toán, điểm Văn, điểm Lí,… Để xử lí đồng thời các loại điểm này, ta có thể khai báo nhiều biến mảng:

var DiemToan: array[1..50] of real;

var DiemVan: array[1..50] of real;

var DiemLy: array[1..50] of real;

hay

var DiemToan, DiemVan, DiemLy: array[1..50] of real;

=> Khi đó, ta cũng có thể xử lí điểm thi của một học sinh cụ thể:

– Nhận xét:

  • Ví dụ 2 cũng cho thấy rằng, chúng ta gán giá trị, đọc giá trị và tính toán với các giá trị của một phần tử trong biến mảng thông qua chỉ số tương ứng của phần tử đó. Chẳng hạn, trong câu lệnh trên Diem[i] là phần tử thứ i của biến mảng Diem.
  • Ta có thể gán giá trị cho các phần tử của mảng bằng câu lệnh gán:
    • A[1]:=5;
    • A[2]:=8;
  • hoặc nhập dữ liệu từ bàn phím bằng câu lệnh lặp: for i := 1 to 5 do readln(a[i]);

3. Tìm giá trị lớn nhất và nhỏ nhất của dãy số

Ví dụ 3. Viết chương trình tìm giá trị lớn nhất và nhỏ nhất của dãy số

– Phần khai báo của chương trình có thể như sau:

program MaxMin;

uses crt;

Var

     i, n, Max, Min: integer;

     A: array[1..100] of integer;

– Phần thân chương trình sẽ tương tự dưới đây:

Begin

     clrscr;

     write('Hay nhap do dai cua day so, N = '); readln(n);

     writeln('Nhap cac phan tu cua day so:');

     For i:=1 to n do

     Begin

          write('a[',i,']='); readln(a[i]);

     End;

     Max:=a[1]; Min:=a[1];

     for i:=2 to n do

     begin

          if Max<a[i]then Max:=a[i];

          if Min>a[i] then Min:=a[i];

     end;

     write('So lon nhat la Max = ',Max);

     write('; So nho nhat la Min = ',Min);

     readln;

End.

13 BÌNH LUẬN

  1. Very good blog! Do you have any tips for aspiring writers? I’m hoping to start
    my own website soon but I’m a little lost on everything.
    Would you propose starting with a free platform like WordPress or go for a paid option? There
    are so many options out there that I’m completely confused ..

    Any suggestions? Kudos!

  2. Do you have a spam issue on this website; I also am a blogger, and
    I was wondering your situation; we have developed some
    nice practices and we are looking to trade strategies with others, be
    sure to shoot me an e-mail if interested.

  3. After I initially left a comment I appear to have clicked on the -Notify me
    when new comments are added- checkbox and now each time a comment is added I recieve 4 emails
    with the same comment. Is there a way you are able to
    remove me from that service? Thanks a lot!

  4. Thanks for this excelent article. One other thing is that many
    digital cameras can come equipped with a nnew zoom lens that allows more or less of tthe scene
    being included by way oof ‘zooming’ in and out.
    All these changes in target length usually are reflected inside the viewfinder and on huge display screen right on the back of the actual camera.

  5. Hey there would you mind letting me know which webhost
    you’re using? I’ve loaded your blog in 3 different web browsers and I must say this
    blog loads a lot faster then most. Can you recommend a good hosting provider
    at a reasonable price? Cheers, I appreciate it!

  6. It’s a shame you don’t have a donate button! I’d without a doubt donate
    to this brilliant blog! I suppose for now i’ll settle for bookmarking and
    adding your RSS feed to my Google account. I look forward to fresh updates and will share this site with my Facebook group.
    Talk soon!

  7. When I originally commented I clicked the “Notify me when new comments are added” checkbox and now each time a comment is added I get several e-mails with the same
    comment. Is there any way you can remove people from that service?
    Bless you!

  8. hey there and thank you for your info – I’ve definitely picked up anything new from right
    here. I did however expertise some technical issues using this site, since I experienced to reload the web site many times previous to I
    could get it to load properly. I had been wondering if your web host is OK?
    Not that I am complaining, but slow loading instances times will sometimes affect your
    placement in google and can damage your high-quality
    score if advertising and marketing with Adwords.

    Well I am adding this RSS to my email and could look out for much more
    of your respective intriguing content. Make sure you update this again very soon.

  9. Hi, I do believe this is an excellent site. I stumbledupon it 😉 I
    will return once again since i have book-marked it. Money and freedom is the greatest way to change,
    may you be rich and continue to help others.

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here