IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> PascalABC. Массивы.
dadelin
сообщение 20.10.2013 20:07
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Задан массив А(N).
Элементы массива, находящиеся между максимальным и минимальным элементами,
отсортировать в порядке убывания. Отсортированный массив вывести на печать.
Помогите с кодом. Голова уже не варит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
Федосеев Павел
сообщение 21.10.2013 19:37
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Цитата(dadelin @ 20.10.2013 21:07) *
Помогите с кодом. Голова уже не варит.

Значит, есть наработки. Покажи, что наварил.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dadelin
сообщение 22.10.2013 19:04
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


uses crt;
var a:array [1..100]of integer;
n,i,j,k,x:integer;
begin
clrscr;
randomize;
write('Введите массив: n=');readln(n);
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(200);;
write(a[i],' ');
end;
writeln;
for i:=2 to n do
begin
x:=a[i];
j:=1;
while x>a[j] do inc(j);
for k:=i-1 downto j do a[k+1]:= a[k];
a[j]:=x;
end;
writeln('Отсортированный массив:');
for i:=1 to n do
write(a[i],' ');
readln
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 22.10.2013 21:44
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Ага, значит есть ввод, сортировка и вывод массива.
Остались "копейки" - найти индексы минимального и максимального элементов, а также сортировать в порядке убывания (причём не весь массив, а только его часть).
Ну вот смотри. Поиск минимального
  Imin:=1;
for i:=2 to n do
if a[Imin]>a[i] then
Imin:=i;

Похоже находится индекс максимального элемента массива - Imax.
Сортировка в порядке убывания - замени условие в while на (x<a[j]).
Может случится, что Imin>Imax, тогда поменяй местами
  if Imin>Imax then
begin
i:=Imin;
Imin:=Imax;
Imax:=i;
end;

Сортировка не всего массива а только его части от Imin до Imax
  for i:=Imin+1 to Imax do
begin
x:=a[i];
j:=Imin;
while x<a[j] do inc(j);
for k:=i-1 downto j do
a[k+1]:= a[k];
a[j]:=x;
end;

Ещё есть FAQ
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dadelin
сообщение 2.11.2013 19:53
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Так ведь?
Код
uses crt;
var a:array [1..100]of integer;
n,i,j,k,x,Imin,Imax:integer;
begin
clrscr;
randomize;
write('Введите массив: n=');readln(n);
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(200);;
write(a[i],' ');
end;
writeln;
Imin:=1;
  for i:=2 to n do
    if a[Imin]>a[i] then
      Imin:=i;
begin
x:=a[i];
j:=1;
while x<a[j] do inc(j);
for k:=i-1 downto j do a[k+1]:= a[k];
a[j]:=x;
end;
if Imin>Imax then
  begin
    i:=Imin;
    Imin:=Imax;
    Imax:=i;
  end;
  writeln('Отсортированный массив:');
for i:=Imin+1 to Imax do
  begin
    x:=a[i];
    j:=Imin;
   while x<a[j] do inc(j);
    for k:=i-1 downto j do
a[k+1]:= a[k];
a[j]:=x;
  end;
end.  
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 3.11.2013 19:10
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Нет.

1. Нет нахождения Imax.
2. Нет вывода результата.
3. Странный кусок непонятного кода
begin
x:=a[i];
j:=1;
while x<a[j] do inc(j);
for k:=i-1 downto j do a[k+1]:= a[k];
a[j]:=x;
end;

Чтобы было лучше читать исходный код воспользуйся форматтером кода - в среде Lazarus он встроен (меню код - форматирование кода JEDI), или воспользуйся отдельной программой JCFGui (смотри здесь и здесь).
После форматтера лучше видна структупа проги. Например, твоя
program lab;

uses
crt;

var
a: array [1..100] of integer;
n, i, j, k, x, Imin, Imax: integer;
begin
clrscr;
randomize;
Write('Введите массив: n=');
readln(n);
WriteLn('Исходный массив:');
for i := 1 to n do
begin
a[i] := random(200);
;
Write(a[i], ' ');
end;
WriteLn;
Imin := 1;
for i := 2 to n do
if a[Imin] > a[i] then
Imin := i;
begin
x := a[i];
j := 1;
while x < a[j] do
Inc(j);
for k := i - 1 downto j do
a[k + 1] := a[k];
a[j] := x;
end;
if Imin > Imax then
begin
i := Imin;
Imin := Imax;
Imax := i;
end;
WriteLn('Отсортированный массив:');
for i := Imin + 1 to Imax do
begin
x := a[i];
j := Imin;
while x < a[j] do
Inc(j);
for k := i - 1 downto j do
a[k + 1] := a[k];
a[j] := x;
end;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 0:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"