# Trung tâm xử lý sự cố > Hỏi-Đáp về Lập trình >  Bài tập về kiểu xâu

## traihalinh

anh chị ai biết giúp em bài này với:
nhập thông tin học sinh gồm: họ đệm: tối đa 25 kí tự; tên: tối đa 10 kí tự; tuổi: tối đa 10 chữ số; lớp: 1 kí tự, 2 chữ số. viết chương trình nhập danh sách 1 lớp gồm 15 học sinh vào 1 bản ghi. sau đó hiển thị danh sách học sinh ra màn hình , mỗi người 1 dòng. sắp xếp danh sách theo tên và hiển thị danh sách ra màn hình.

viết = chương trình pascal.

----------


## matngoc2015

```
uses crt;
type    hs=record
        ho,ten,tuoi,lop:string[30];
        end;
var     dshs:array[1..100] of hs;
        i,n,m,j,siso,k:integer;
        s:ansistring;
        tg:hs;
procedure       chuanten;
var     z:longint;
begin
        z:=2;
        s:=#32+s;
        repeat
                if s[z]=#32 then
                begin
                        if s[z-1]=#32 then
                        delete(s,z,1)
                        else inc(z);
                end
                else
                begin
                        if s[z-1]=#32 then s[z]:=upcase(s[z])
                        else s[z]:=chr((ord(upcase(s[z])))+32);
                        inc(z);
                end;
        until z>length(s);
        delete(s,1,1);
        if s[length(s)]=' ' then delete(s,length(s),1);
end;
procedure input;
begin
        for i:=1 to 15 do
        begin
                write(i,'.'); readln(s);
                chuanten;
                write('tuoi cua em :  ',s,'  :');readln(dshs[i].tuoi);
                write('lop cua em :  ',s,'  :');readln(dshs[i].lop);
                clrscr;
                k:=length(s);
                for k:=length(s) downto 1 do
                if s[k]=' ' then
                begin
                        dshs[i].ho:=copy(s,1,k);
                        dshs[i].ten:=copy(s,k+1,length(s));
                        break;
                end;
        end;
end;
procedure sapxep;
begin
        for i:=1 to 15 do
        for j:=15 downto i+1 do
        begin
                if dshs[i].ten > dshs[j].ten then
                begin
                        tg:=dshs[i];
                        dshs[i]:=dshs[j];
                        dshs[j]:=tg;
                end;
                if dshs[i].ten = dshs[j].ten then
                if dshs[i].ho > dshs[j].ho then
                begin
                        tg:=dshs[i];
                        dshs[i]:=dshs[j];
                        dshs[j]:=tg;
                end;
        end;
end;
begin
        clrscr;
        input;
        sapxep;
        for i:=1 to 15 do
        begin
                writeln(i,'.',dshs[i].ho,'',dshs[i].ten,' ');
                writeln('        lop :',dshs[i].lop,' ');
                writeln('        tuoi :',dshs[i].tuoi,' ');
        end;
        readln;
end.
```

----------


## hongnga1706

nếu ko dùng chương trình con mà chỉ dùng theo cấu trúc :

khai báo => nhập danh sách => dùng câu lệnh sắp xếp trực tiếp có được ko ạ?

----------


## TranElly

> nếu ko dùng chương trình con mà chỉ dùng theo cấu trúc :
> 
> khai báo => nhập danh sách => dùng câu lệnh sắp xếp trực tiếp có được ko ạ?


dù trong ctcon hay trong ctchính bạn đều phải dùng những câu lệnh như vậy thôi.
còn nếu bạn muốn ko sử dụng đến ctcon thì chỉ cần bóc những câu lệnh trong ctcon rồi đưa vào ctchính + thay đổi vài biến là đc.

----------


## loveUnature

có bài thế này:
viết chương trình nhập vào n số nguyên. đưa số lẻ ra đầu danh sách.

ai có thể giúp e câu lệnh sắp xếp với.

như thế này có được ko?

for j:= n downto 2 do 
for i:= 1 to j-1 do
if (a_ mod 2 = 0) and ( a[i+1] mod 2=1) then
begin
tg:= a;
a:= a[i+1];
a[i+1]:= tg;
end;

ai trả lời câu hỏi giúp e với nhé_

----------


## wetti

bạn thử làm thế này xem (lâu ko dùng pascal nên câu lệnh có chỗ nào ko đúng cú pháp bạn thông cảm nhé)



```
temp: integer;
for i:= 1 to n-1 do
   begin
        if (a[i] mod 2 = 0)  
           begin
                for j:=i+1 to n do
                    begin
                         if a[j] mod 2 > 0
                            begin
                                temp:= a[i];
                                a[i]:= a[j];
                                a[j]:= temp;
                                break;
                            end 
                    end
           end        
   end
```

----------


## simanhdung1

> ```
> 
>         begin
>                 writeln(i,'.',dshs[i].ho,'',dshs[i].ten,' ');
>                 writeln('        lop :',dshs[i].lop,' ');
>                 writeln('        tuoi :',dshs[i].tuoi,' ');
>         end;
>         readln;
> end.
> ```


nếu writeln thì họ tên , lớp và tuổi ở 3 dòng hả anh?

----------


## Tuanvuong

đúng rồi nếu là writeln thì sẽ ở 3 dòng khác nhau

----------


## Winter Angle

nếu viết thê này được chứ ạ?

writeln(i,'.',dshs_.ho,' ',dshs.ten,' ',dshs.lop,' ',dshs.tuoi);_

----------


## longnt

> nếu viết thê này được chứ ạ?
> 
> writeln(i,'.',dshs_.ho,' ',dshs.ten,' ',dshs.lop,' ',dshs.tuoi);_


_

dĩ nhiên viết thế này cũng được bạn ạ, nhưng nên viết như cũ cho rõ ràng, mỗi thông tin trên 1 dòng_

----------


## HSCompany

nhưng mà tại bài tập yêu cầu vậy thôi

----------


## anhchjnhnb

> nếu viết thê này được chứ ạ?
> 
> writeln(i,'.',dshs_.ho,' ',dshs.ten,' ',dshs.lop,' ',dshs.tuoi);_


_

như thế hoàn toàn đc bạn ạ [img]data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaabaqmaaaa  l21bkaaaaa1bmvexh5pjm+ykvaaaaaxrstlmaqobyzgaaaapjr  efucndjyaaaaaiaaeihvdmaaaaasuvork5cyii=[/img]_

----------

