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

8-5r

Дан массив. Поменять в нем местами максимальный элемент среди отрицательных с минимальным элементом среди положительных.

Для того, чтобы поменять значения элементов массива надо знать их номера (почему?). То есть мы должны найти номер максимального элемента среди отрицательных и номер  минимального элемента среди положительных. Для поиска  максимального элемента среди отрицательных мы должны начать с первого отрицательного элемента, а для поиска минимального элемента среди положительных начать поиск с первого положительного ( и опять вопрос; Почему?). 
В программе Program A8_05a в строках 10, 11 доходим до первого положительного элемента (идем, пока элемент отрицательный) и в цикле (строки 12-15) находим номер минимального среди положительных элементов. Точно также: в строках 16, 17 доходим до первого отрицательного элемента и в строках 18 – 21 находим номер максимального среди  отрицательных. Сам обмен значений выполняется операторами в строках  22, 23.  В строках 8, 9 и 24, 25 мы выводим все элементы массива на экран, чтобы убедиться что программа правильно сработала.
Но эта наша программа будет работать правильно только в случае, если в массиве имеются и положительные и отрицательные элементы. Хотя бы по одному ( в нашем примере такие элементы есть -строка 4). А если в программе не будет ни одного положительного или ни одного отрицательного элемента, то программа не будет работать. Чтобы показать, как писать программы для этих случаев, мы включили проверку – программа Program A8_05b; строки  12-14  и 21-23.

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

Program A8_05a;

Const

 n=10;

 a:array [0..n-1] of integer=(6,-5,1,4,2,7,-4,2,1,-7);

Var

 i,j,imaxa,imina,c:integer;

BEGIN

 for i:=0 to n-1 do write(a[i],' ');

 writeln;

 j:=0;

 while (a[j]<0) do INC(j);

 imina:=j;

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

  if(a[i]>0) and (a[i]<a[imina])

    then imina:=i;

 j:=0;

 while (a[j]>0) do INC(j);

  imaxa:=j;

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

  if(a[i]<0) and (a[i]>a[imaxa])

    then imaxa:=i;

 c:=a[imina]; a[imina]:=a[imaxa];

 a[imaxa]:=c;

 for i:=0 to n-1 do write(a[i],' ');

 writeln;

 readln;

END.

//Program A8_05a;

#include <iostream>

 

using namespace std;

 

int main()

{  int a[]={6,-5,2,7,2,7,4,2,-1,-5};

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

    int i,j,imaxa,imina,c;

     for(i=0;i<n;i++)cout<<a[i]<<" ";

 cout<<endl;

    j=0;while(a[j]<0) j++;

    imina=j;

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

        if(a[i]>0 && a[i]<a[imina]) imina=i;

    j=0;while(a[j]>0) j++;

    imaxa=j;

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

        if(a[i]<0 && a[i]>a[imaxa]) imaxa=i;

    c=a[imina]; a[imina]=a[imaxa]; a[imaxa]=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_05b;

Const

 n=10;

 a:array [0..n-1] of integer=(6,-5,1,4,2,7,-4,2,1,-7);

Var

 i,j,imaxa,imina,c:integer;

BEGIN

 for i:=0 to n-1 do write(a[i],' ');

 writeln;

 j:=0;

 while (j<n) and (a[j]<0) do INC(j);

 if (j=n) then

  begin writeln('Net polojitelnix');

    readln; exit; end;

 imina:=j;

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

  if(a[i]>0) and (a[i]<a[imina])

    then imina:=i;

 j:=0;

 while (j<n) and (a[j]>0) do INC(j);

 if (j=n) then

  begin writeln('Net otricatelnix');

    readln; exit; end;

  imaxa:=j;

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

  if(a[i]<0) and (a[i]>a[imaxa])

    then imaxa:=i;

 c:=a[imina]; a[imina]:=a[imaxa];

 a[imaxa]:=c;

 for i:=0 to n-1 do write(a[i],' ');

 writeln;

 readln;

END.

//Program A8_05a;

#include <iostream>

 

using namespace std;

Net polojitelnix

int main()

{  int a[10]={6,-5,2,7,2,7,4,2,-1,-5};

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

    int i,j,imaxa,imina,c;

     for(i=0;i<n;i++)cout<<a[i]<<" ";

 cout<<endl;

    j=0;while(j<n && a[j]<0) j++;

    if(j==n) {cout<<"Net polojitelnix\n";

 return 0;}

    imina=j;

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

        if(a[i]>0 && a[i]<a[imina]) imina=i;

    j=0;while(j<n && a[j]>0) j++;

     if(j==n) {cout<<"Net otricatelnix\n";

 return 0;}

    imaxa=j;

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

        if(a[i]<0 && a[i]>a[imaxa]) imaxa=i;

    c=a[imina];   a[imina]=a[imaxa]; 

a[imaxa]=c;

     for(i=0;i<n;i++)cout<<a[i]<<" ";

 cout<<endl;

    return 0;

}