bai 1 THTB CS 2020

25/03/2023

Tóm tắt Cho mảng A gồm n phần tử, nhiệm vụ của bạn là đi tìm phần tử có giá trị cao thứ 2 trong mảng.

Nghĩa là với mảng 9 4 9 8 3 8 7 thì phần tử có giá trị cao thứ 2 trong mảng sẽ là 8

Định nghĩa

max: lưu vị trí có giá trị cao nhất trong mảng A

và res (result): lưu vị trí có giá trị cao thứ 2 trong mảng A

kết quả là write(res,' ', a[res])

Ý tưởng

for 1 -> n:

nếu như a[i] > a[max]:

  • max = i

sau khi chạy hết vòng lặp, ta lại chạy tiếp vòng lặp thứ 2:

res = 1;

for i := 2 to n

if (a[i] > a[res]) và (a[i] < max) ta cập nhật res = i

Hàm eof(f : text) : bool

Nếu eof(f) = true thì đã duyệt được hết tệp

ngược lại chưa duyệt được hết

n = 1

while eof(f) = false do

begin

read(a[n]);

n = n+1

end;

n = n-1

Trường hợp in ra -1 khi:

Các phần tử trong A có giá trị bằng nhau

nghĩa là:

a[1] = a[2] = ... = a[n]

ví dụ: 9 9 9 9 9

kết quả cần in là -1

Code
program tom;
uses crt;
var a : array[1..1000] of longint;
    n : integer;
    i : integer;
    max, res : integer;
    f,g : text;

BEGIN
    clrscr;
    n := 1;
    assign(f, 'tom.inp'); reset(f);
    while eof(f) = false do
     begin
         read(f, a[n]);
         n := n+1;
     end;
    n := n-1;

    max := 2;
    res := -1;
    for i := 2 to n do
      if (a[i] > a[max]) then max := i;
    for i := 1 to n do
     begin
      if (res = -1) then
        begin
            if (a[i] < a[max]) then res := i;
        end
      else if (a[i] > a[res]) and (a[i] < a[max]) then res := i;
     end;

    assign(g, 'tom.out'); rewrite(g);
    if (res = -1) then write(g, res)
    else write(g, res,' ', a[res]);
    close(g);

END.