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

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

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

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


Пионер
**

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

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


Помогите решить задачку :

Задан упорядоченный по невозрастанию одномерный массив.

1) Найти произведение отрицательных элементов массива;
2) Найти сумму положительных элементов массива;
3) Упорядоченный по невозрастанию массив преобразовать в упорядоченный по возрастанию, оставив по одному в каждой группе совпадающих элементов.


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


Гость






Используй Поиск + FAQ ... Уже десятки раз решалось.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Насчёт пунктов 1 и 2 я почти разобрался, а вот как с 3). ? а именно :

Как сделать вот это : "оставив по одному в каждой группе совпадающих элементов."


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


Гость






Цитата
Как сделать вот это : "оставив по одному в каждой группе совпадающих элементов."

Вот тебе пример:
const
a: array[1 .. 10] of integer =
(1, 1, 2, 3, 4, 4, 4, 5, 6, 7);

var
i, j, n: integer;

begin
n := 10; i := 2;
while i <= n do
if a[i] = a[i - 1] then begin
for j := i to n - 1 do
a[j] := a[j + 1];
dec(n);
end
else inc(i);

for i := 1 to n do
write(a[i]:4);
writeln;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


Цитата
Задан упорядоченный по невозрастанию одномерный массив


Это понимать как :

1.
 const
a: array [1..10] of integer =
('10', '9', '8', '7', '6', '5', '4', '3', '2', '1');


2. Или надо сначала задать массив, а потом упорядочить по невозрастанию ?


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


Гость






Ну, во-первых, у тебя в задании записано, что он уже задан как упорядоченный, значит ничего дополнительно с ним делать для этого не надо...

А во вторых, то что ты привел в предыдущем посте - ошибка, т.к. у тебя получается не массив чисел, а массив строк. Паскаль это не пропустит... Посмотри как у меня написано...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

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

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



Program z;

const
a: array [1..10] of integer =
(5, 4, 3, 2, 2, 1, -1, -2, -3, -4);
Var
i , j , P, S :integer;

Begin
n:10; P:=1;
for i:=1 to n do
if a[i] < 0 then begin { произведение отриц. элем. }
P:= P* a[i];
end;

S:=0;
for i:=1 to n do
if a[i] > 0 then begin { Сумма положит. элементов }
S:= S + a[i];
end;

i := 2;
while i <= n do
if a[i] = a[i - 1] then begin
for j := i to n - 1 do
a[j] := a[j + 1];
dec(n);
end
else inc(i);

for i := 1 to n do
write(a[i]:4);
writeln;
writeln( ' Сумма положительных элементов S=', S:3:7);
writeln( ' Произведение отрицательных элементов P=' ,P:3:7);
end.



Volvo, подскажи есть ли тут ошибки ?


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


Автооответчик
*****

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

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


такой вариант в ТМТ отработал на "ура", в ТП тоже все должно работать:
Program z;

const
a: array [1..10] of integer =
(5, 4, 3, 2, 2, 1, -1, -2, -3, -4);
Var
i , j , P, S,n :integer; {n ты забыл описАть}

Begin
n:=10; P:=1; {было n:10;}
for i:=1 to n do
if a[i] < 0 then begin { произведение отриц. элем. }
P:= P* a[i];
end;

S:=0;
for i:=1 to n do
if a[i] > 0 then begin { Сумма положит. элементов }
S:= S + a[i];
end;

i := 2;
while i <= n do
if a[i] = a[i - 1] then begin
for j := i to n - 1 do
a[j] := a[j + 1];
dec(n);
end
else inc(i);

for i := 1 to n do
write(a[i]:4);
writeln;
writeln( ' Сумма положительных элементов S=', S:3);
writeln( ' Произведение отрицательных элементов P=' ,P:3);{на форматирование вывода ругался}
end.

так вот rolleyes.gif


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

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

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


Всё работает, спасибо good.gif , вот только


Цитата
) Упорядоченный по невозрастанию массив преобразовать в упорядоченный по возрастанию


Как вы думаете пойдёт такой способ из FAQ'а ?



for i:=1 to size-1 do begin
nmin:=i;
for j:=i+1 to size do
if mass[j] > mass[Nmin] then
Nmin:=j;

temp:=mass[i];
mass[i]:=mass[Nmin];
mass[Nmin]:=temp;



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


Perl. Just code it!
******

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

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


Инверсия решит ;)


for i := 1 to n div 2 do begin
temp := x[i];
x[i] := x[n-i+1];
x[n-i+1] := temp;
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


Код

Program z;
    
const
        a: array [1..10] of integer =
                                  (5, 4, 3, 2, 2, 1, -1, -2, -3, -4);
   Var
      i , j , P, S, n :integer;
      temp: array [1..10] of integer;
    
Begin
n:=10;   P:=1;
      for i:=1 to n do
        if a[i] < 0 then begin     { произведение отриц. элем. }
          P:= P* a[i];
end;

    S:=0;
      for i:=1 to n do
         if a[i] > 0  then begin   { Сумма положит. элементов }
           S:= S + a[i];
end;

i := 2;
  while i <= n do
    if a[i] = a[i - 1] then begin
      for j := i to n - 1 do
        a[j] := a[j + 1];
      dec(n);
    end
    else inc(i);
      
for i:= 1 to n div 2 do begin  
      temp: = a[i];                { Выдаёт ошибку type mismatch }
       a[i]:= x[n-i +1];
       a[n-i+1]:=temp;
end;

  for i := 1 to n do
    write(a[i]:4);
  writeln;
writeln( ' Сумма положительных элементов S=', S:3);
writeln( ' Произведение отрицательных элементов P=' ,P:3);
end.

    


Что с этой инверсией не так, что я сделал неправильно ?


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


Perl. Just code it!
******

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

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


посмотри как у тебя описана temp ... она должна быть не тип массива, а тип элемента массива


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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