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

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

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

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


Пионер
**

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

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


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

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

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


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


Гость






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


Пионер
**

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

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


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

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.12.2005 22:34
Сообщение #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.
 К началу страницы 
+ Ответить 
Merlin
сообщение 10.12.2005 15:17
Сообщение #5


Пионер
**

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

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


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


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

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


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


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


Гость






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

А во вторых, то что ты привел в предыдущем посте - ошибка, т.к. у тебя получается не массив чисел, а массив строк. Паскаль это не пропустит... Посмотри как у меня написано...
 К началу страницы 
+ Ответить 
Merlin
сообщение 10.12.2005 15:40
Сообщение #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 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 10.12.2005 17:48
Сообщение #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 
 К началу страницы 
+ Ответить 
Merlin
сообщение 10.12.2005 19:28
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 10.12.2005 19:35
Сообщение #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 
 К началу страницы 
+ Ответить 
Merlin
сообщение 11.12.2005 20:53
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.12.2005 21:14
Сообщение #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

 



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