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

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

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

 
 Ответить  Открыть новую тему 
> Массив, Одномерный массив
сообщение
Сообщение #1





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

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


Здравствуйте, появились проблемы, при решении данной задачи:
Дан массив х вещественных чисел. Получить упорядоченный по невозрастанию массив, состоящий из чисел данного массива, находящихся между предпоследним и последним отрицательным членом. (Проверить массив на наличие элементов между ними)
program mass;

var
i, j, k, n, d: integer;
x: real;
a, s: array [1..10] of real;

begin
writeln('Программа выводит элементы массива, расположенные между предпоследним и последним отрицательными числами');
writeln('Введите количество элементов массива');
read(n);
k := 0;
j := 0;
writeln('Введите элементы массива');
for i := 1 to n do {Ввод массива}
read(s[i]);

while k <> 2 do {Нахождение двух отрицательных чисел}
begin
for i := 1 to n do {Проверяем массив}
begin
if s[i] < 0 {Если элемент массива отрицателен}
then
begin
a[i] := s[i]; {присваиваем отрицательные числа массива s массива a}
k := k + 1; {счётчит отрицательных элементов массива}
end;
end;
end;




for i := 1 to n - 1 do {упорядочивание массива по убыванию}
for j := i + 1 to n do
if s[i] < s[j] then
begin
x := s[i];
s[i] := s[j];
s[j] := x;
end;

for i := 1 to n do
write(s[i], ' '); {Вывод массива}
writeln;
end.


Прошу помощи с поиском предпоследнего и поледнего отрицательного числа wacko.gif и как можно организовать вывод конечного массива, просто если я записываю отрицательные числа в другой массив, на месте положительных получаются нули.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

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

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


ищи с конца массива первые 2 отрицательные числа, запомни их индексы, перенеси элементы в другой массив и отсортируй. выведи второй массив.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

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

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


Э, не)
А если в массиве 1 отрицательное число? А если их вообще нет?
Есть 2 способа решения этой задачи: проход с начала массива и до конца с перезаписью позиций последнего-предпоследнего элементов, и другой, проход с конца массива и в сторону начала массива и с помощью Break.
2й более предпочтительный.
И только потом, анализируя присутствие, как минимум последнего-предпоследнего отрицательных элементов, можно заполнять новый массив. (хотя можно поизвращаться и попытаться это сделать все сразу, но это уже как сказать что лучше..).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


mea culpa
*****

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

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


Наверное, надо идти с конца и после нахождения первого отрицательного переносить все числа в другой массив, бОльшие добавляя в начало, а меньшие дописывая в конец. В одном цикле (с одним вложенным) должно получиться.

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

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

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


> переносить все числа в другой массив, бОльшие добавляя в начало, а меньшие дописывая в конец

бОльшие чего?
Вот идём мы, и получаем сначала 1, потом 3, потом 2. Куда эту двойку?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


Цитата
Э, не)
А если в массиве 1 отрицательное число? А если их вообще нет?

const
n = 10;
var
mas : array [1..n] of integer;
a : array [1..2] of byte;
i, k : byte;
s : integer;
begin
writeln('Vvedite massiv');
for i := 1 to n do read (mas[i]);
a[1] := n;
a[2] := n;
k := 2;
i := n;
s := 0;
while (i > 0) and (k > 0) do begin
if mas[i] < 0 then begin
a[k] := i;
dec(k);
end;
dec(i);
end;
for i := a[1] + 1 to a[2] - 1 do s := s + mas[i];
writeln(s);
end.

Потестируй, может найдешь баг
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


Ну примерно так, массив развернул, нашёл последний и предпоследний элементы
Код
program mass;

const
  max = 10;

var
  i, j, k, n, d: integer;
  x, z: real;
  a, s, obrat: array [1..max] of real;

begin
  writeln('Программа выводит элементы массива, расположенные между предпоследним и последним отрицательными числами');
  writeln('Введите количество элементов массива');
  read(n);
  k := 0;
  j := 0;  
  writeln('Введите элементы массива');
  for i := 1 to n do  {Ввод массива}
    read(s[i]);
  
  for i := 1 to max do
    obrat[max - i + 1] := s[i];
  
  begin
    for i := 1 to max do {Проверяем массив}
    begin
      if obrat[i] < 0 {Если элемент массива отрицателен}
      then
      begin
        a[i] := obrat[i]; {присваиваем отрицательные числа массива s массива a}
        k := k + 1; {счётчит отрицательных элементов массива}
        if k = 2 then break;
      end;
    end;
  end;  
  
  for i := 1 to max - 1 do {упорядочивание массива по убыванию}
    for j := i + 1 to max do
      if a[i] < a[j] then
      begin
        x := a[i];
        a[i] := a[j];
        a[j] := x;
      end;
  
  for i := 1 to max do
    write(a[i], ' ');  {Вывод массива}
  writeln;
end.


подскажите, как дальше поступать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
подскажите, как дальше поступать?
То есть, вопрос "что делать если НЕТ двух отрицательных чисел" проигнорирован?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





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

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


Ну вроде как написано указание "(Проверить массив на наличие элементов между ними(отрицательными числами))", мне кажется, что их наличие обязательно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


Цитата
Проверить массив на наличие
о чем говорит? Что надо проверить, а не что они там обязательны
я выложил код, который считает сумму элементов между последними отрицательными (сам не знаю почему), а тебе надо отсортировать. Пару строк изменить и все.

Сообщение отредактировано: Client -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





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

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


Код
const
   n = 10;
var
   mas : array [1..n] of integer;
   a : array [1..2] of byte;
   i, k : byte;
   s : integer;
begin
        writeln('Vvedite massiv');
        for i := 1 to n do read (mas[i]);
        a[1] := n;
        a[2] := n;
        k := 2;
        i := n;
        s := 0;
        while (i > 0) and (k > 0) do begin
                if mas[i] < 0 then begin
                        a[k] := i;
                        dec(k);
                end;
                dec(i);
        end;
        for i := a[1] + 1 to a[2] - 1 do s := s + mas[i];
        writeln(s);
end.

ну тут, как я понял записыфваются индексы этих чисел, только вот как их можно испльзовать?

Добавлено через 1 мин.
я понял, спасибо, сейчас попробую
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Злостный любитель
*****

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

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


Зачем массив разворачивать?!
Убери переменную obrat, пока меня кондратий не хватил!
Для обхода массива с конца существует оператор downto, если что.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





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

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


Код
const
  n = 10;

var
  mas, m: array [1..n] of integer;
  a: array [1..2] of byte;
  i, k: byte;
  j, x: integer;

begin
  writeln('Программа выводит элементы массива, расположенные между предпоследним и последним отрицательными числами');
  writeln('Введите массив');
  for i := 1 to n do read(mas[i]);
  a[1] := n;
  a[2] := n;
  k := 2;
  i := n;
  while (i > 0) and (k > 0) do
  begin
    if mas[i] < 0 then begin
      a[k] := i;
      dec(k);
    end;
    dec(i);
  end;
  for i := a[1] + 1 to a[2] - 1 do
    m[i] := mas[i];
  for i := 1 to n - 1 do {упорядочивание массива по убыванию}
    for j := i + 1 to n do
      if m[i] < m[j] then
      begin
        x := m[i];
        m[i] := m[j];
        m[j] := x;
      end;
      for i:=1 to n do
      write (' ', m[i]);
end.

спасибо огромное )

Сообщение отредактировано: Wizzy -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






так какое окончательное решение задачи то? я запуталась честно говоря уже)) wacko.gif
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 19.04.2024 16:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name