Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Cooper Black
5 / 5 / 0
Регистрация: 17.10.2009
Сообщений: 11
1

Сортировка,Рекурсия

27.11.2009, 19:36. Просмотров 2097. Ответов 14
Метки нет (Все метки)

Помогите пожалуйста решить задачки...заранее спасибо!
1)Массив записей содержит фамилии участников соревнования по прыжкам в длину и результаты трех попыток.Расположите записи в порядке занятых спортсменами мест.
P.s В программе должны присутствовать процедуры или функции, и метод сортировки если возможен.
2)Разработайте рекурсивную функцию нахождения максимального элемента данной последовательности

Название: Безымянный.jpg
Просмотров: 293

Размер: 3.1 Кб
P.s Задачу надо решить с помощью рекурсивных процедур и функций
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2009, 19:36
Ответы с готовыми решениями:

Рекурсия: сортировка элементов массива по возрастанию
Помогите не могу понять где ошибка, может что-то не дописал, но массив не...

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos;...

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному...

рекурсия
Из заданной числовой последовательности A вычеркнуть минимальное число...

Рекурсия
Напишите пожалуйста 2 задачи на рекурсию, только как можно проще и если не...

14
Puporev
Модератор
54734 / 42134 / 29092
Регистрация: 18.05.2008
Сообщений: 99,455
27.11.2009, 20:25 2
2.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
uses crt;
type mas=array[1..50]of integer;
var a:mas;
    n,i:integer;
function Max(n:integer):integer;
var w:integer;
begin
if n>1 then
 begin
  w:=Max(n-1);
  if a[n]<w then Max:=w
  else Max:=a[n]
 end
else Max:=a[1]
end;
 
begin
clrscr;
randomize;
write('Razmer massiva A n=');
readln(n);
writeln('Massiv A:');
for i:=1 to n do
  begin
    a[i]:=random(20);
    write(a[i],' ');
  end;
writeln;
write('max=',Max(n));
readln
end.
2
Cooper Black
5 / 5 / 0
Регистрация: 17.10.2009
Сообщений: 11
27.11.2009, 20:35  [ТС] 3
Спасибо огромное! а в первую хотя бы по какому алгоритму решать?..
0
Puporev
Модератор
54734 / 42134 / 29092
Регистрация: 18.05.2008
Сообщений: 99,455
27.11.2009, 20:37 4
Cooper Black, По алгоритму быстрой сортировки qwicksort, могу скинуть для числового массива, а для записей сам сделаешь, мне некогда писать программу.
1
Cooper Black
5 / 5 / 0
Регистрация: 17.10.2009
Сообщений: 11
27.11.2009, 20:38  [ТС] 5
скинь пожалуйста, я сам попробую..)
0
Puporev
Модератор
54734 / 42134 / 29092
Регистрация: 18.05.2008
Сообщений: 99,455
27.11.2009, 20:41 6
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
uses crt;
type massiv=array [1..5000] of integer;
var
  x:massiv;
  i,n:integer;
procedure sort(l,r:integer);
var
  i,j,x1,y1,m: integer;
begin
  i:=l;
  j:=r;
  m:=round ((l+r)/2);
  x1:=x[m];
  repeat
    while x[i]<x1 do inc(i);
    while x[j]>x1 do dec(j);
    if i<=j then 
     begin
      y1:=x[i];
      x[i]:=x[j];
      x[j]:=y1;
      inc(i);
      dec(j);
     end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;
 
begin
clrscr;
randomize;
write('Введите размер массива не более 5000 n=');
readln(n);
writeln('Исходный массив:');
for i:=1 to n do
  begin
   x[i]:=random(50)-10;
   write(x[i],' ');
  end;
writeln;
sort(n,1);
writeln('Массив после сортировки: ');
for i:=1 to n do
write(x[i],' ');
readln;
end.
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
27.11.2009, 22:28 7
Puporev, а разве не проще будет пузырьком? Тем более что они этого еще не учили... Тут же не сказано какой именно сортировкой...
1
Puporev
Модератор
54734 / 42134 / 29092
Регистрация: 18.05.2008
Сообщений: 99,455
27.11.2009, 22:31 8
Inadequate, А чем быстрая хуже? Разделил пополам и сортируй пузырьком по частям.
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
28.11.2009, 01:58 9
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
type
  rec=record
    Sur:string[20];
    P1,P2,P3:real;
    Place:integer;
  end;
var
  a,b:array[1..1000]of rec;
  i,j,max,pl:integer;
begin
  writeln('Ââåäèòå êîëè÷åñòâî ñïîðòñìåГ*îâ...');
  readln(max);
  for i:=1 to max do
  begin
    write('Г”Г*ìèëèÿ: ');
    readln(a[i].Sur);
    write('ÏåðâГ*Гї ïîïûòêГ*: ');
    readln(a[i].P1);
    write('ÂòîðГ*Гї ïîïûòêГ*: ');
    readln(a[i].P2);
    write('Òðåòüÿ ïîïûòêГ*: ');
    readln(a[i].P3)
  end;
  {âûïîëГ*ГїГҐГ¬ ñîðòèðîâêó Г¬Г*Г±Г±ГЁГўГ*}
  for i:=1 to max do
    for j:=i to max do
      if (a[i].P1+a[i].P2+a[i].P3)<(a[j].P1+a[j].P2+a[j].P3) then
      begin
        b[i].Sur:=a[i].Sur;
        a[i].Sur:=a[j].Sur;
        a[j].Sur:=b[i].Sur;
        b[i].P1:=a[i].P1;
        a[i].P1:=a[j].P1;
        a[j].P1:=b[i].P1;
        b[i].P2:=a[i].P2;
        a[i].P2:=a[j].P2;
        a[j].P2:=b[i].P2;
        b[i].P3:=a[i].P3;
        a[i].P3:=a[j].P3;
        a[j].P3:=b[i].P3
      end;
  {âûâîäèì ГўГ±ГҐГµ ñïîðòñìåГ*îâ}
  writeln('Г’Г*áëèöГ* ðåêîðäñìåГ*îâ:');
  for i:=1 to 3 do
    writeln(a[i].Sur,' ',a[i].P1,' ',a[i].P2,' ',a[i].P3,' ',i,' ìåñòî')
end.
1
Storm255
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 46
28.11.2009, 02:14 10
всуну своих пять копеек)):в начале второй прописываем Uses crt; в начале ибо не пашет в абц просто так)
0
Puporev
Модератор
54734 / 42134 / 29092
Регистрация: 18.05.2008
Сообщений: 99,455
28.11.2009, 08:06 11
Inadequate, Это у тебя рекурсивная сортировка? Я думал ты знаешь рекурсивный пузырек, аж удивился.

Добавлено через 9 минут
И потом зачем сортировать все поля отдельно? Это же запись.
Да и сумму баллов можно сразу в записи считать.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
rec=record
    Sur:string[20];
    P1,P2,P3,sm:real;
    Place:integer;
  end;
  .....................
var x:rec;
................  
for i:=1 to max do
  begin
    write('Фамилия: ');
    readln(a[i].Sur);
    write('Первая попытка: ');
    readln(a[i].P1);
    write('Вторая попытка: ');
    readln(a[i].P2);
    write('Третья попытка: ');
    readln(a[i].P3)
    a[i].sm:=a[i].p1+a[].p2+a[i].p3;  
    end;  
......................
for i:=1 to max do
for j:=i to max do
if a[i].sm<a[j].sm then
 begin
  x:=a[i];
  a[i].:=a[j];
  a[j]:=x;
 end;
2
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
28.11.2009, 12:08 12
Цитата Сообщение от Puporev Посмотреть сообщение
Это у тебя рекурсивная сортировка?
а где здесь написано про рекурсию?
1
Puporev
Модератор
54734 / 42134 / 29092
Регистрация: 18.05.2008
Сообщений: 99,455
28.11.2009, 12:10 13
Inadequate, Прошу прощения, я так понял, а автору вообще пофиг.
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
28.11.2009, 12:29 14
Цитата Сообщение от Puporev Посмотреть сообщение
И потом зачем сортировать все поля отдельно? Это же запись.
Да и сумму баллов можно сразу в записи считать.
А вот за это действительно не подумал... Спасибо...

Добавлено через 12 минут
посмотрел на ссвоё решение, понял, что написал чушь полную,(зачем то завел второй массив, не сделал проверку, завел лишнюю переменную, лоханулся с записями... да уж бывают тупняки...). Вот так всё должно было выглядеть:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
type
  rec=record
    Sur:string[20];
    P1,P2,P3,res:real;
    Place:integer;
  end;
var
  a:array[1..1000]of rec;
  temp:rec;
  i,j,max:integer;
begin
  writeln('Ââåäèòå êîëè÷åñòâî ñïîðòñìåГ*îâ...');
  readln(max);
  for i:=1 to max do
  begin
    write('Г”Г*ìèëèÿ: ');
    readln(a[i].Sur);
    write('ÏåðâГ*Гї ïîïûòêГ*: ');
    readln(a[i].P1);
    write('ÂòîðГ*Гї ïîïûòêГ*: ');
    readln(a[i].P2);
    write('Òðåòüÿ ïîïûòêГ*: ');
    readln(a[i].P3);
    a[i].res:=a[i].P1+a[i].P2+a[i].P3;
  end;
  {âûïîëГ*ГїГҐГ¬ ñîðòèðîâêó Г¬Г*Г±Г±ГЁГўГ*}
  for i:=1 to max do
    for j:=i to max do
      if (a[i].res)<(a[j].res) then
      begin
        temp:=a[i];
        a[i]:=a[j];
        a[j]:=temp
      end;
  {âûâîäèì ГўГ±ГҐГµ ñïîðòñìåГ*îâ}
  writeln('Г’Г*áëèöГ* ðåêîðäñìåГ*îâ:');
  for i:=1 to 3 do
    if i<=max then
      writeln(a[i].Sur,' ',a[i].P1,' ',a[i].P2,' ',a[i].P3,' ',i,' ìåñòî')
end.
1
Cooper Black
5 / 5 / 0
Регистрация: 17.10.2009
Сообщений: 11
28.11.2009, 15:12  [ТС] 15
Цитата Сообщение от Puporev Посмотреть сообщение
Inadequate, Прошу прощения, я так понял, а автору вообще пофиг.
автору не пофиг..он тихо наблюдает за происходящим.и в первой действительно не нужна рекурсия....

Но все равно, спасибо вам обоим что доделали задачу!..
0
28.11.2009, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2009, 15:12

Рекурсия
Помогите пожалуйста написать программу по теме: рекурсия! она в вордовском...

Рекурсия
Помогите,пожалуйста,с программой.Вычисляет неправильно,а разобраться не...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru