iİnformatikanın məktəbdə tədrisi

8-6r

Дан массив. Написать программу упорядочения массива методом выбора.

Алгоритм прост: начиная с первого элемента массива, находим минимальный элемент (номер минимального элемента) и меняем этот минимальный элемент с первым. На первое место уже стал самый маленький элемент. Затем, начиная со второго элемента, находим самый маленький элемент и меняем его со вторым элементом. На втором месте уже стоит следующий минимальный элемент. Затем, начиная с третьего .. и так далее до предпоследнего элемента ( ведь после последнего элемента уже ничего нет). Этот перебор осуществляется в цикле  в строке 12.  В строках 13 – 15 происходит поиск минимального элемента (номера). В строках 15, 16 производится обмен этого минимального с соответствующим элементом (сначала с первым, затем вторым и так далее). В строках 9-11 и  19-21 массив выводится на экран до сортировки и после сортировки. 
В программе Program A8_06a массив задается в программе, в разделе констант.
В программе Program A8_06b данные находятся в файле 'in8_06b.txt'.  
В строке 4 (в С++ в строке  7) объявляется динамический массив. Ничего еще нет, место для данных не выделено.
В строке 7 (в С++ в строке 10) имя файла на диске (in8_06b.txt) соединяется и именем файла в программе (fin) и файл открывается для чтения. Если на диске такого файла нет, то программа прекращает свою работу - строки 8 10  (в С++ строка 11). 
В строке 11 из файла читается первое число – количество данных в файле и в строке 12 для массива выделяется место оператором  setLength(a,n); Теперь у нас есть массив a с n элементами, которые нумеруются от 0 до n-1.
Дальше уже ясно: читаются элементы из файла в массив – строки 13 – 14, файл закрывается – строка 15. 
В строках 16 – 22 массив сортируется (тот же алгоритм, что и в программе Program A8_06a).
В строке 23 (в С++ в строке 25) имя файла на диске (out 8_06b.txt) соединяется и именем файла в программе (f out) и файл открывается для записи.
В строках 24-26  массив переписывается в файл.
В строке 27 освобождаем память, которую выделили для массива а ( в С++ строка 29)



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Program A8_06a;

Const

  n=12;

  a:array[0..n-1] of integer=

   (1,6,-4,9,-3,8,5,7,3,-8,19,-3);

Var

  i,j,jmin,c:integer;

BEGIN

 for i:=0 to n-1 do

   write(a[i],' ');

 writeln;

 for i:=0 to n-2 do

  begin  jmin:=i;

   for j:=i+1 to n-1 do

    if (a[j]<a[jmin]) then jmin:=j;

   c:=a[i]; a[i]:=a[jmin];

   a[jmin]:=c;

  end;

for i:=0 to n-1 do

   write(a[i],' ');

 writeln;

 readln;

END.

//Program A8_06a;

#include <iostream>

 

using namespace std;

 

int main()

{  int a[]={ 1,6,-4,9,-3,8,5,7,3,-8,19,-3};

    int n=sizeof(a)/sizeof(int);

    int i,j,jmin,c;

    for(i=0; i<n; i++)

        cout<<a[i]<<" ";  cout<<endl;

    for(i=0;i<n-1;i++)

    {  jmin=i;

      for(j=i+1;j<n; j++)

          if(a[j]<a[jmin]) jmin=j;

      c=a[i]; a[i]=a[jmin];

      a[jmin]=c;

    }

     for(i=0; i<n; i++)

        cout<<a[i]<<" ";  cout<<endl;

    return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

Program A8_06b;

Var

  fin,fout: TEXT;

  a:array of integer;

  i,j,jmin,c,n:integer;

BEGIN

 assign(fin,'in8_06b.txt'); reset(fin);

 if IoResult<>0 then

   begin writeln('Net faila');

   readln; exit; end;

 readln(fin,n);

 setLength(a,n);

 for i:=0 to n-1 do

  readln(fin,a[i]);

  close(fin);

 for i:=0 to n-2 do

  begin  jmin:=i;

   for j:=i+1 to n-1 do

    if (a[j]<a[jmin]) then jmin:=j;

   c:=a[i]; a[i]:=a[jmin];

   a[jmin]:=c;

  end;

 assign(fout,'out8_06b.txt'); rewrite(fout);

 writeln(fout,n);

for i:=0 to n-1 do

   writeln(fout,a[i]);

Finalize(a);

close(fout);

END.

//Program A8_06b;

#include <iostream>

#include <fstream>

using namespace std;

 

int main()

{ int  *a; 

  int n,i,j,jmin,c;

    ifstream fin;

    fin.open("in8_06b.txt");

    if (!fin) { cout<<"net faila\n"; return -1;}

   fin>>n;

   a=new int [n];

   for(i=0; i<n; i++)

        fin>>a[i];

    fin.close();

    for(i=0;i<n-1;i++)

    {  jmin=i;

      for(j=i+1;j<n; j++)

          if(a[j]<a[jmin]) jmin=j;

      c=a[i]; a[i]=a[jmin];

      a[jmin]=c;

    }

    ofstream fout;

  fout.open("out8_06b.txt");

    fout<<n<<endl;

     for(i=0; i<n; i++)

        fout<<a[i]<<endl;

   delete [] a;

        fout.close();

    return 0;

}