# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  Bài tập về mảng 1 chiều

## Mrthieugia

1, Tìm phần tử lớn nhất của dãy ( n <=250 và A_ <= 500 ) . Nếu có nhiều phần tử cùng giá trị thì đưa ra phần tử lớn nhất đầu tiên.

2, Nhập vào 1 dãy số nguyên , sắp xếp theo thứ tự ko giảm .

3, Nhập vào 1 dãy gồm n số nguyên (n<=250) và số k . Cho biết vị trí của số hạng có giá trị bằng k trong dãy( nếu có ).

Mấy bài trên là bài tập về mảng dữ liệu . Ai biết thì chỉ giùm em với ! em xin cám ơn ạ !_

----------


## quanglong87

> 1, Tìm phần tử lớn nhất của dãy ( n <=250 và A_ <= 500 ) . Nếu có nhiều phần tử cùng giá trị thì đưa ra phần tử lớn nhất đầu tiên.
> 
> 2, Nhập vào 1 dãy số nguyên , sắp xếp theo thứ tự ko giảm .
> 
> 3, Nhập vào 1 dãy gồm n số nguyên (n<=250) và số k . Cho biết vị trí của số hạng có giá trị bằng k trong dãy( nếu có ).
> 
> Mấy bài trên là bài tập về mảng dữ liệu . Ai biết thì chỉ giùm em với ! em xin cám ơn ạ !_


_

Đây là những bài tập cơ bản. 
Với bài 1 khá đơn giản. Bạn duyệt mảng một chiều bằng câu lệnh for và so sánh A với Max. Nếu A>Max thì max = A.
Duyệt xong bạn chỉ cần xuất max ra là xong.

Bài 2 Thì có nhiều thuật toán : 
' 1. Selection Sort',
' 2. Bubble Sort',
' 3. Insertion Sort',
' 4. Insertion Sort with binary searching',
' 5. Shell Sort',
' 6. Quick Sort',
' 7. Heap Sort',
' 8. Distribution Counting',
' 9. Radix Sort',
' 10. Straight Radix Sort',
' 11. Merge Sort
Nếu mới học bạn nên sử dụng Bubble sort - Rất đơn giản nhưng nó là thuật toán chậm nhất.
Đây là code của bubble sort


```
procedure BubbleSort;
var
  i, j: Integer;
begin
  Enter;
  for i := 2 to n do
    for j := n downto i do
      if k[j - 1] > k[j] then Swap(k[j - 1], k[j]);
  PrintResult;
end;
```

Còn bài 3 thì càng đơn giản. So sánh k với A nếu thõa mãn thì xuất i ra.

Chúc bạn thành công_

----------


## phuongxoan

Bài 1 là đưa ra vị trí hả bạn? Nếu thế thì code đây (mình không cần dùng tới mảng đâu):
Var n,vt,max,so,i:longint;
Begin
write('Nhap n:');readln(n);
vt:=1;max=-2147483647;
for i:=1 to n do 
begin
read(so);
if so>max then 
begin
max:=so;
vt:=i;
end;
end;
write('Lon nhat la phan tu:',max,' O vi tri ',vt);
readln;
end.

----------


## nguyenduong2402

> Bài 1 là đưa ra vị trí hả bạn? Nếu thế thì code đây (mình không cần dùng tới mảng đâu):
> Var n,vt,max,so,i:longint;
> Begin
> write('Nhap n:');readln(n);
> vt:=1;max=-2147483647;
> for i:=1 to n do 
> begin
> read(so);
> if so>max then 
> ...


 Lạc đề rồi: sử dụng mảng để giải bài tập.
*Đọc kỹ, suy nghĩ trước khi post*

----------


## toannechan

Một bài toán tin đâu nhất thiết phải giải theo 1 cách, nếu cứ ép mình theo 1 con đường thì sẽ hình thành cho các bạn cách suy nghĩ bị lệ thuộc vào những bài đã giải. Bạn nên nhớ rằng 1 bài tin học có nhiều yếu tố quyết định nên tính tối ưu của thuật toán. Nếu mình dùng cách khác vừa tiết kiệm được thời gian vừa tiết kiệm được bộ nhớ thì tại sao lại bị chê trách? Cần sáng tạo khi giải bài tập, suy nghĩ giải thuật tốt nhất để giải. Còn nếu bạn cứ khăng khăng theo bắt buộc dùng mảng 1 chiều thì thôi vậy, cứ coi như mình chưa post bài, del bài mình đi cũng được, bạn là mod mà.

----------


## canhotanbinh

> Một bài toán tin đâu nhất thiết phải giải theo 1 cách, nếu cứ ép mình theo 1 con đường thì sẽ hình thành cho các bạn cách suy nghĩ bị lệ thuộc vào những bài đã giải. Bạn nên nhớ rằng 1 bài tin học có nhiều yếu tố quyết định nên tính tối ưu của thuật toán. Nếu mình dùng cách khác vừa tiết kiệm được thời gian vừa tiết kiệm được bộ nhớ thì tại sao lại bị chê trách? Cần sáng tạo khi giải bài tập, suy nghĩ giải thuật tốt nhất để giải. Còn nếu bạn cứ khăng khăng theo bắt buộc dùng mảng 1 chiều thì thôi vậy, cứ coi như mình chưa post bài, del bài mình đi cũng được, bạn là mod mà.


 Híc, nói oan cho mình ghê~!.
Yêu cầu của chủ topic mà bạn. :emlaugh:

----------


## chan

Yêu cầu của chủ topic đâu có bắt buộc phải sử dụng mảng để giải đâu bạn, đây chỉ là những bài liên quan tới mảng, đó là cách hướng dẫn để các bạn giải bằng mảng, đỡ phải suy nghĩ nhiều thôi. Có nhiều bài giống như kiểu này lắm, giải kiểu gì cũng được, miễn là thuật giải là đúng đắn.

----------


## anhhailua

Các bài này đều có trong SGK Tin học 11 còn gì nữa hả bạn

----------


## tuongts

```
Program Bai3;
Var A:Array[1..250] of Real;
max:Real;
i,N,csmax:integer;
Begin
Write('Nhap vao so phan tu cua day:');
Readln(N);
For i:=1 to N do
Begin
Write('A[',i,']=');
Readln(A[i]);
End;
For i:=1 to N do
if A[i]>max then
Begin
max:=A[i];
csmax:=i;
end;
writeln('Gia tri lon nhat la:',max:5:2);
writeln('Vi tri max dau tien:',csmax);
Readln
End.
```



```
Program Bai1;
Var A:Array[1..250] of integer;
i,N,k:integer;
Begin
Write('Nhap vao so phan tu cua day:');
Readln(N);
For i:=1 to N do
Begin
Write('A[',i,']=');
Readln(A[i]);
End;
write('Nahp vao gai tri k:'); Readln(k);
write('vi tri cac so hang co gia tri bang k la:');
For i:=1 to N do
if A[i]=k then write(i:3);
 
Readln
End.
```

Có rất nhiều cách để sắp xếp dãy số, sau đây là 1 cách


```
 
Program Bai2;
Var A:Array[1..250] of integer;
i,N,j,t:integer;
Begin
Write('Nhap vao so phan tu cua day:');
Readln(N);
For i:=1 to N do
Begin
Write('A[',i,']=');
Readln(A[i]);
End;
For j:= N downto 2 do
For i:=1 to j-1 do
 if A[i]>A[i+1] then
   begin
     t:=A[i];
     A[i]:=A[i+1];
     A[i+1]:=t;
   end;
writeln('Day so duoc sap xep la:');
For i:=1 to N do write(A[i]:4);
Readln
End.
```

----------


## haido92

```
[/FONT]
Program Bai1;
Var A:Array[1..250] of integer;
    i,N,k:integer;
Begin
  Write('Nhap vao so phan tu cua day:');
  Readln(N);
  For i:=1 to N do
   Begin
    Write('A[',i,']=');
    Readln(A[i]);
   End;
  write('Nahp vao gai tri k:'); Readln(k);
  write('vi tri cac so hang co gia tri bang k la:');
  For i:=1 to N do
    if A[i]=k then write(i:3);

  Readln
End.
```

----------


## vietnamtui12

---------------------------------Bài viết đã được trộn ---------------------------------
Mình giải bài 1 nè. Níu có j` thiếu xót (bỏ qua giùm ) 

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

begin
write('nhap so phan tu: '); 
readln(n);
for i:=1 to n do
begin
write('nhap A[',i,']= ');readln(A_);
end;
max:=-maxint;
for i:=n downto 1 do
If max<A then max:=A; {chạy ngược về trước để max gán cho gtrij đầu lun}
writeln('so lon nhat: ',max);
readln;
end.


bài 2:
var A:array[1..100] of integer;
i,n,t,k:integer;
begin
nhập xuất mảng;{cái bạn tự làm}
readln(k);
for i:=1 to n do
If A=k then writeln('chi số: ',i)
else t:=t+1;
If t=n then writeln('không có');
readln;
end._

----------

