Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6305
Последний выпуск: 19.06.2015

В прямоугольной целочисленной матрице обменять местами максимальный по модулю и минимальный по модулю четные элементы.и что я мог упустить?

95K
19 января 2015 года
fox911
1 / / 18.01.2015
Код:
var
a:array [1..100,1..100] of integer;
i,j,v,g,max,min, buf:integer;
 
begin
randomize;
writeln('введите размерность массива: ');
writeln('v= ');readln(v);
writeln('g= ');readln(g);
writeln;
max:=0;
min:=100;
for i:=1 to v do
    for j:=1 to g do
        begin
            a[i,j]:=random(100); {Заполняем массив}
 
            if j<g then {рисуем его для наглядности эти 4 строчки можно удалить}
                write(a[i,j]:2,'|')
            else
                writeln(a[i,j]:2,'|');
 
            if a[i,j] > max then
                max:=a[i,j];     {ищем макс эл}
            if a[i,j] < min then
                min:=a[i,j];     {ищем мин эл}
        end;
 buf:=min;    min:=max;    max:=buf;
   
 for i:=1 to v do
 begin
    for j:=1 to g do
        write(a[i,j]:6);
    writeln;
    end;
 
end
9.0K
19 января 2015 года
ikro
31 / / 12.03.2007
Проблема в том, что Вы запоминаете максимальные значения, и потом их же меняете. Эти значения не имеют никакой связи с самими элементами массива. Поэтому запоминать надо не значения, а положения в массиве.
Должно быть как-то так:


Код:
var
  a: array [1..100, 1..100] of integer;
  i, j, v, g, buf: integer;
  minI, minJ, maxI, maxJ: integer;
begin
  randomize;
  writeln('введите размерность массива: ');
  writeln('v= '); readln(v);
  writeln('g= '); readln(g);
  writeln;
  minI := 1;
  minJ := 1;
  maxI := 1;
  maxJ := 1;
  for i := 1 to v do
    for j := 1 to g do begin
      a[i, j] := random(100); {Заполняем массив}

      if j < g then {рисуем его для наглядности эти 4 строчки можно удалить}
        write(a[i,j]:2, '|')
      else
        writeln(a[i,j]:2, '|');

      if a[i, j] > a[maxI, maxJ] then begin
        maxI := i; {ищем макс эл}
        maxJ := j;
      end;
      if a[i, j] < a[minI, minJ] then begin
        minI := i; {ищем мин эл}
        minJ := j;
      end;
    end;
  buf := a[minI, minJ];
  a[minI, minJ] := a[maxI, maxJ];
  a[maxI, maxJ] := buf;

  for i := 1 to v do begin
    for j := 1 to g do
      write(a[i, j]:6);
    writeln;
  end;
end.
Не знаю, что за задание у Вас, но по-хорошему было бы еще проверить граничные значения для v и g... но это уже на Ваше усмотрение.
459
28 января 2015 года
cronya
420 / / 03.01.2009
Код:
#include <iostream>
#include <ctime>

using std::cout;
using std::endl;
using std::system;

int* Fill(int row, int column);
void Out(int* arr, int row, int column);
void Free(int* arr, int row);
void Solution(int* arr, int row, int column);

int main()
{  
    srand((unsigned int)time(0));
    int row = 4;
    int column = 3;
    int* arr = Fill(row,column);   
    cout<<"Array"<<endl;
    Out(arr,row,column);
    Solution(arr,row,column);
    cout<<endl<<"New Array"<<endl;
    Out(arr,row,column);
    Free(arr,row);
    cout<<endl;
    system("pause");
}

int*  Fill(int row, int column)
{
    int* arr = new int [row*column];
    int v = 2;
    for(int idx=0; idx < row*column; idx++)
    {      
        arr[idx] = rand()%100-30;
    }
    return arr;
}

void Out(int* arr, int row, int column)
{
    for(int idx=0; idx<row; idx++)
    {
        for(int jdx=0; jdx<column; jdx++)
        {
            cout<<arr[jdx + idx*(row-1)]<<"\t";
        }
        cout<<endl;
    }
}

void Free(int* arr, int row)
{  
    delete[] arr;
}

void Solution(int* arr, int row, int column)
{
    int imax = 0, imin=0;
    for(int idx=0; idx < row*column; idx++)
    {
        if(arr[idx]%2==0)
        {
            if(abs(arr[idx]) > abs(arr[imax]))
                imax = idx;
            if(abs(arr[idx]) < abs(arr[imin]))
                imin = idx;
        }
    }
    cout<<"Maximal = "<<arr[imax]<<endl;
    cout<<"Minimal = "<<arr[imin]<<endl;
    int tmp = arr[imax];
    arr[imax] = arr[imin];
    arr[imin] = tmp;
}
Rezult

Код:
Array
-12     32      -28
-11     22      5
28      49      13
42      10      3
Maximal = 42
Minimal = 10

New Array
-12     32      -28
-11     22      5
28      49      13
10      42      3

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог