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

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

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

 
 Ответить  Открыть новую тему 
> Одномер. (Pascal)
xxBOBAHxx
сообщение 26.10.2008 21:57
Сообщение #1


Новичок
*

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

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


№1.Создать массив целых чисел R[1..N], содержащий серии чисел, разделенных нулями. Отсортировать массив по возрастанию сумм чисел в сериях.

Т.е. например дан массив
1 2 3 0 -1 2 3 0 6 7 3 0 3 3 3
данный массив нужно преобразовать по возрастанию сумм в сериях , чтоб получилось следующее:
-1 2 3 0 1 2 3 0 3 3 3 0 6 7 3


МОИ мысли по этой задаче:

uses crt;
const n=20;
var nach:array[1..n+1] of integer;
a,s, g:array[1..n] of integer;
i, j, h, k, c,gh, l :integer;
priz:boolean;
begin clrscr;
randomize;
for i:=1 to n do
begin a[i]:=-5+random(10);
write(a[i], ' ');
end;
writeln;
i:=0; j:=0;
repeat
inc(j); s[j]:=0;
nach[j]:=i+1;
???????????
repeat
inc(i);
s[j]:=s[j]+a[i];
until (a[i]=0) or (n=i);
writeln(s[j], '=б㬬* ', j);
until n=i;
k:=j;
gh:=j;
repeat dec(k);
priz:=true;
for j:=1 to k do
if s[j]>s[j+1] then begin
c:=s[j];
s[j]:=s[j+1];
s[j+1]:=c;
l:=nach[j];
nach[j]:=nach[j+1];
nach[j+1]:=l;
priz:=false;
end;
until priz;
writeln;
for h:=1 to gh do
write(nach[h],' ');
readkey;
end.


p.s. Там где стоит знак ? нужно дополнить.....ну я так думаю.....

Сообщение отредактировано: Lapp - 27.10.2008 23:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 26.10.2008 23:56
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Правила (необходимость использования тега code и одна тема - одна задача) принципиально игнорируешь?
Исправляй...

Сообщение отредактировано: мисс_граффити - 26.10.2008 23:57


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.10.2008 16:08
Сообщение #3


Гость






Цитата
МОИ мысли по этой задаче:
Ты сначала условие-то уточни: все серии должны иметь одинаковую длину, или может быть так
1 2 0 3 -1 2 3 0 6 3 0 7 3 3 3 3
? Если нет, то решение элементарное, если да - то сложнее...
 К началу страницы 
+ Ответить 
xxBOBAHxx
сообщение 28.10.2008 19:50
Сообщение #4


Новичок
*

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

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


УТОЧНЯЮ: серии могут быть разной длины

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.10.2008 22:38
Сообщение #5


Гость






В таком случае, я уже сказал: все чуть-чуть усложняется... Вот тебе каркас процедуры сортировки:

procedure sort_series(var arr: array of integer);

function get_serie(i: integer; var len: integer): integer;
begin
{ Функция №1: по номеру серии возвращает ее начало (как результат) и длину (Len) }
end;

function func(serie: integer): integer;
begin
{ Функция №2: по номеру серии с использованием get_serie вычисляет сумму эл-тов серии }
end;

{
Самое сложное в данном случае - по номерам серий менять их содержимое местами
Поскольку это действительно непросто, привожу реализацию этой процедуры, но
над остальными подумай сам...
}
procedure swap(first, second: integer);
var
start_1, start_2, L_1, L_2: integer;
buf: pointer;
begin
start_1 := get_serie(first, L_1);
start_2 := get_serie(second, L_2);
getmem(buf, (L_1 + 1)*sizeof(integer));

move(arr[start_1], buf^, (L_1 + 1)*sizeof(integer));
move(arr[start_2], arr[start_1], (L_2 + 1)*sizeof(integer));
move(buf^, arr[start_1 + L_2 + 1], (L_1 + 1)*sizeof(integer));

freemem(buf, (L_1 + 1)*sizeof(integer));
end;

function count_series: integer;
begin
{ Еще одна вспомогательная функция - считает количество серий в массиве }
end;

var
i, j, n: integer;
begin
{ Ну, а сама сортировка до боли напоминает "пузырек", правда? }
n := count_series;
for i := 1 to n do
for j := n downto i + 1 do begin
if func(j - 1) > func(j) then swap(j - 1, j);
end;
end;

const
n = 16;
arr: array[0 .. n - 1] of integer = (
3, -1, 2, 3, 0, 6, 3, 0, 1, 2, 0, 1, 1, 1, 1, 3
);

begin
{ ... }
sort_series(arr);
{ ... }
end.
Над отсутствующими функциями подумай сам, что получится - выкладывай... Давать тебе полное решение без усилий с твоей стороны я не собираюсь...
 К началу страницы 
+ Ответить 

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

 



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