Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2009, 10:01   #1
_dandelion_
 
Регистрация: 13.06.2009
Сообщений: 4
По умолчанию Задача на массивы

Помогите пожалуйста решить задачу на паскале. Не очень понимаю его
"Массив 5х6. В каждой строке расставить по возрастанию элементы расположенные между максимальными"
P.S. извините, если что то не понятно, но такое условие в тетрадке написано.
Спасибо заранее.
_dandelion_ вне форума Ответить с цитированием
Старый 13.06.2009, 11:25   #2
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Ну расставить элементы по возрастанию просто.
Код:
var
a : array[1..5, 1..6] of integer;
i, j, x, n : integer;

begin
{...здесь должно быть заполнение массива...}
for n := 1 to 6 do {перебор строк}
 for i := 1 to 4 do {сортировка строки}
  begin
  for j := i + 1 to 5 do 
   begin
   if a[i, n] > a[j, n] then 
    begin
    x := a[i, n]; 
    a[i, n] :=a[j, n]; 
    a[j, n] := x;
    end;
   end;
  end;
end;
Почти процитирую: "P.S. извините, если что то неправильно, но такое условие в тетрадке написано."
Если помог - поднимите мне репутацию
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс

Последний раз редактировалось Олвин; 13.06.2009 в 12:35.
Олвин вне форума Ответить с цитированием
Старый 13.06.2009, 11:45   #3
_dandelion_
 
Регистрация: 13.06.2009
Сообщений: 4
По умолчанию

Извините, у меня на строке
Код:
if a[i] > a[j] then
вылезает ошибка (как в Pascal ABC так и в Turbo pascal 7).
И еще хотел узнать...
Код:
begin
{...здесь должно быть заполнение массива...}
for n := 1 to 6 do {перебор строк}
нужно вместо надписи "Здесь должно быть..." писать или так оставить
_dandelion_ вне форума Ответить с цитированием
Старый 13.06.2009, 12:38   #4
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Точно! Массив-то двухмерный! Ну я отредактировал то сообщение.
А на счёт заполнения массива - я в таких задачах заполнял случайными числами:
Код:
randomize;
for i := 1 to 5 do
 for j := 1 to 6 do
  a[i, j] := random(100);
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
Олвин вне форума Ответить с цитированием
Старый 13.06.2009, 15:44   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
расположенные между максимальными
Думаю после того как ты уснул, препод сказал еще полтора слова, типа " и минимальными"
puporev вне форума Ответить с цитированием
Старый 13.06.2009, 18:44   #6
_dandelion_
 
Регистрация: 13.06.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Думаю после того как ты уснул, препод сказал еще полтора слова, типа " и минимальными"
если честно, то да. минимальными, я не уснул, у меня подчерк ужасный и там слово "минимальными" было сокращено и я не понял что это за слово
_dandelion_ вне форума Ответить с цитированием
Старый 14.06.2009, 09:15   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
uses crt;
const m=5;
      n=6;
var a:array[1..m,1..n] of integer;
    i,j,k,l,jmx,jmn:byte;
    mx,mn,x:integer;
begin
clrscr;
writeln('Введите элементы массива');
{вводить лучше так, чтоб между максимальным и минимальным элементами в каждой строке было не менее 3 позиций,
 и числа в этом промежутке были по убыванию, иначе никакой сортировки не увидишь.}
for i:=1 to m do
for j:=1 to n do
 begin
  write('a[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;
writeln('Исходный массив:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
for i:=1 to m do
 begin
  mx:=a[i,1];jmx:=1;{сначала в каждой строке ищем позиции макс и мин элементов}
  mn:=a[i,1];jmn:=1;
  for j:=1 to n do
   begin
    if a[i,j]>mx then
     begin
      mx:=a[i,j];
      jmx:=j;{позиция макс}
     end;
    if a[i,j]<mn then
     begin
      mn:=a[i,j];
      jmn:=j;{позиция мин}
     end;
   end;
  if jmn<jmx then{если мин раньше чем макс}
   begin
    for k:=jmn+1 to jmx-2 do{сортируем между мин и макс}
    for l:=k+1 to jmx-1 do
    if a[i,k]>a[i,l] then
      begin
       x:=a[i,k];
       a[i,k]:=a[i,l];
       a[i,l]:=x;
      end;
    end
   else if jmx<jmn then{если макс раньше}
     begin
      for k:=jmx+1 to jmn-2 do{сортируем между макс и мин}
      for l:=k+1 to jmn-1 do
      if a[i,k]>a[i,l] then
        begin
         x:=a[i,k];
         a[i,k]:=a[i,l];
         a[i,l]:=x;
        end;
      end;
 end;
writeln('Измененная матрица:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
readln
end.
puporev вне форума Ответить с цитированием
Старый 15.06.2009, 22:20   #8
_dandelion_
 
Регистрация: 13.06.2009
Сообщений: 4
По умолчанию

Если можно, объясните, что значит "не менее 3 позиций"
_dandelion_ вне форума Ответить с цитированием
Старый 16.06.2009, 06:12   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если введешь строку типа 5 5 1 8 5 5, то никакой сортировки не будет, т.к. между макс=8 и мин=1 нет ни одного числа. А если введешь
1 8 7 6 9 5, то будет сортировка 1 6 7 8 9 5
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на массивы Альбиша Паскаль, Turbo Pascal, PascalABC.NET 0 08.04.2009 19:03
Задача на массивы С/C++ Nina+ Помощь студентам 10 12.03.2009 20:43